付録 - Apache の展開例を使用した Web 層

このトピックでは、AWS リファレンス アーキテクチャの例で Web 層を実装するためのエンドツーエンドの手順を説明します。この構成例には、次のコンポーネントが含まれています。

  • AWS アプリケーション ロード バランサー
  • Apache プロキシ サーバー
  • Mellon 認証モジュール
  • Okta IdP
  • SAML 認証

: このセクションに示されている Web 層の構成例には、サードパーティーのソフトウェアとサービスを展開するための詳細な手順が含まれています。Web 層のシナリオを有効にする手順や文書の検証には最善を尽くしていますが、サードパーティーのソフトウェアが変更される場合や、シナリオがここで説明されている参照アーキテクチャと異なっている場合があります。正式な構成の詳細情報とサポートについては、サードパーティーのドキュメントを参照してください。

このセクションの Linux の例では、RHEL のようなディストリビューションのコマンドを示します。具体的には、これらのコマンドは Amazon Linux 2 ディストリビューションで開発されたものです。Ubuntu ディストリビューションを実行している場合は、状況に応じてコマンドを編集してください。

この例の Web 層の展開では、段階的な構成と検証の手順に従います。コア Web 層を構成するには、次のステップを実行して、Tableau とインターネット間の HTTP を有効にします。Apache は、AWS アプリケーション ロード バランサーの背後でリバース プロキシ/負荷分散用に実行および構成されます。

  1. Apache のインストール
  2. リバース プロキシを構成して、Tableau Server への接続をテストします。
  3. プロキシ上で負荷分散を構成
  4. AWS アプリケーション ロード バランサーの構成

Web 層を設定して Tableau との接続を確認したら、外部プロバイダーを使用して認証を構成します。

Apache のインストール

両方の EC2 ホスト (プロキシ 1 とプロキシ 2) で次の手順を実行します。参照アーキテクチャの例に従って AWS に展開する場合は、2 つのアベイラビリティー ゾーンを持ち、各ゾーンで単一のプロキシ サーバーを実行する必要があります。

  1. Apache をインストールします。

    sudo yum update -y
    sudo yum install -y httpd
  2. 再起動時に Apache を開始するように構成します。

    sudo systemctl enable --now httpd

  3. インストールした httpd のバージョンに proxy_hcheck_module が含まれていることを確認します:

    sudo httpd -M

    proxy_hcheck_module が必要です。このモジュールがお使いの httpd バージョンに含まれていない場合は、それが含まれているバージョンの httpd に更新してください。

プロキシを構成して Tableau Server への接続をテスト

次の手順をプロキシ ホストの 1 つ (プロキシ 1) で実行します。この手順の目的は、インターネット、プロキシ サーバー、およびプライベート セキュリティ グループの Tableau Server 間の接続を確認することです。

  1. tableau.conf というファイルを作成して、それを /etc/httpd/conf.d ディレクトリに追加します。

    次のコードをコピーして、Tableau Server ノード 1 のプライベート IP アドレスを持つ ProxyPass および ProxyPassReverse キーを指定します。

    重要: 以下に示す構成は安全ではないため、本番環境では使用しないでください。この構成は、エンドツーエンドの接続を確認するために、インストール プロセス中にのみ使用する必要があります。

    たとえば、ノード 1 のプライベート IP アドレスが 10.0.30.32 である場合、tableau.conf ファイルの内容は次のようになります。

    <VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass "/" "http://10.0.30.32:80/"
    ProxyPassReverse "/" "http://10.0.30.32:80/"
    </VirtualHost>
  2. httpd を再起動します。

    sudo systemctl restart httpd

検証: 基本トポロジ構成

http://<proxy-public-IP-address> をブラウザーに表示すると、Tableau Server の管理ページにアクセスできます。

Tableau Server のサインイン ページがブラウザーに読み込まれない場合は、次の手順に従ってプロキシ 1 のホスト上でトラブルシューティングを実施してください。

  • トラブルシューティングの最初の手順として、httpd の停止と開始を行います。
  • tableau.conf ファイルをもう一度チェックします。ノード 1 のプライベート IP が正しいことを確認します。二重引用符を確認し、構文を注意深く確認します。
  • ノード 1 のプライベート IP アドレスを使用してリバース プロキシ サーバーで curl コマンドを実行します (例: curl 10.0.1.90)。シェルから html が返らない場合や、Apache テスト Web ページの html が返る場合は、パブリック セキュリティ グループとプライベート セキュリティ グループの間のプロトコルとポートの構成を確認します。
  • プロキシ 1 のプライベート IP アドレスを使用して curl コマンドを実行します (例: curl 10.0.0.163)。シェルから Apache テスト Web ページの html コードが返る場合、プロキシ ファイルは正しく構成されていません。
  • プロキシ ファイルやセキュリティ グループの設定を変更した後は、必ず httpd (sudo systemctl restart httpd) を再起動してください。
  • TSM がノード 1 で実行されていることを確認してください。

プロキシ上で負荷分散を構成

  1. tableau.conf ファイルを作成したのと同じプロキシ ホスト (プロキシ 1) 上で既存の仮想ホスト構成を削除し、そのファイルを編集して負荷分散ロジックを含めます。

    例:

    <VirtualHost *:80>
    ServerAdmin admin@example.com
    #Load balancing logic.
    ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/}
    Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED 
    <Proxy balancer://tableau>
    #Replace IP addresses below with the IP addresses to the Tableau Servers running the Gateway service.
    BalancerMember http://10.0.3.40/ route=1 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
    BalancerMember http://10.0.4.151/ route=2 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
    ProxySet stickysession=ROUTEID
    </Proxy>
    ProxyPreserveHost On
    ProxyPass / balancer://tableau/
    ProxyPassReverse / balancer://tableau/ 
    </VirtualHost>
  2. httpd の停止と開始を実行します。

    sudo systemctl stop httpd
    sudo systemctl start httpd
  3. プロキシ 1 のパブリック IP アドレスを参照して、構成を確認します。

構成を 2 番目のプロキシサーバーにコピー

  1. プロキシ 1 から tableau.conf ファイルをコピーして、プロキシ 2 ホスト上の /etc/httpd/conf.d ディレクトリに保存します。
  2. httpd の停止と開始を実行します。

    sudo systemctl stop httpd
    sudo systemctl start httpd
  3. プロキシ 2 のパブリック IP アドレスを参照して、構成を確認します。

AWS アプリケーション ロード バランサーの構成

ロード バランサーを HTTP リスナーとして構成します。ここでの手順では、AWS にロード バランサーを追加する方法について説明します。

ステップ 1: ターゲット グループの作成

ターゲット グループは、プロキシ サーバーを実行する EC2 インスタンスを定義する AWS 構成です。これらは、LBS からの通信のターゲットになります。

  1. [EC2] > [ターゲット グループ] > [ターゲット グループの作成] の順に選択

  2. [作成] ページで次を実行

    • ターゲット グループ名を入力 (例: TG-internal-HTTP)
    • ターゲット タイプ: インスタンス
    • プロトコル: HTTP
    • ポート: 80
    • VPC: お使いの VPC を選択
    • [ヘルス チェック] > [ヘルス チェックの詳細設定] > [成功コード] で、読み取るコードの一覧 200,303 を追加します。
    • [作成] をクリック
  3. 作成したターゲット グループを選択し、[ターゲット] タブをクリックします。 

    • [編集] をクリックします。
    • プロキシ アプリケーションを実行している EC2 インスタンス (または一度に 1 つずつ構成している場合は単一のインスタンス) を選択し、[登録済みに追加] をクリックします。
    • [保存] をクリックします。

ステップ 2: ロード バランサー ウィザードの起動

  1. [EC2] > [ロード バランサー] > [ロード バランサーの作成] を選択

  2. [ロード バランサーの種類の選択] ページで、アプリケーション ロード バランサーを作成

: ロードバランサーを構成するために表示される UI は、AWS データセンター全体で一貫性がありません。以下の「ウィザードの構成」の手順は、ステップ 1 ロードバランサーの構成から始まる AWS 構成ウィザードにマッピングされます。 

データセンターですべての構成が単一のページに表示され、ページの下部に [ロード バランサーの作成] ボタンが含まれている場合は、以下の「単一ページの構成」の手順に従います。

  1. [ロード バランサーの構成] ページで次を実行

    • 名前を指定
    • スキーム: インターネットへ接続 (デフォルト)
    • IP アドレス タイプ: ipv4 (デフォルト)
    • リスナー (リスナーとルーティング):
      1. HTTP リスナーは既定のままにします
      2. [リスナーの追加] をクリックして HTTPS:443 を追加します
    • VPC: すべてをインストールした VPC を選択
    • アベイラビリティー ゾーン:
      • データセンターのリージョンとして ab を選択
      • 対応する各ドロップダウンから、パブリック サブネット (プロキシ サーバーがある場所) を選択
    • [セキュリティ設定の構成] をクリック
  2. [セキュリティ設定の構成] ページで次を実行

    • パブリック SSL 証明書をアップロード
    • [次へ: セキュリティ グループの構成] をクリック
  3. [セキュリティ グループの構成] ページで次を実行

    • パブリック セキュリティ グループを選択します。既定のセキュリティ グループが選択されている場合は、その選択をクリアする
    • [次へ: ルーティングの構成] をクリック
  4. [ルーティングの構成] ページで次を実行

    • ターゲット グループ: 既存のターゲット グループ
    • 名前: 以前に作成したターゲット グループを選択
    • [次へ: ターゲットの登録] をクリック
  5. [ターゲットの登録] ページで次を実行

    • 以前に構成した 2 つのプロキシ サーバー インスタンスが表示される
    • [次へ: レビュー] をクリック
  6. [レビュー] ページで次を実行

    [作成] をクリックします。

基本構成

  • 名前を指定
  • スキーム: インターネットへ接続 (デフォルト)
  • IP アドレス タイプ: ipv4 (デフォルト)

ネットワーク マッピング

  • VPC: すべてをインストールした VPC を選択
  • マッピング:
    • データセンターのリージョンとして、ab (または同等の) アベイラビリティー ゾーンを選択
    • 対応する各ドロップダウンから、パブリック サブネット (プロキシ サーバーがある場所) を選択

セキュリティ グループ

  • パブリック セキュリティ グループを選択します。既定のセキュリティ グループが選択されている場合は、その選択をクリアする
  • リスナーとルーティング

    • HTTP リスナーは既定のままにします。[Default action (既定のアクション)] で、以前設定したターゲット グループを指定します。
    • [リスナーの追加] をクリックして HTTPS:443 を追加します。[Default action (既定のアクション)] で、以前設定したターゲット グループを指定します。

    セキュリティで保護されたリスナー設定

    • パブリック SSL 証明書をアップロード

    [ロード バランサーの作成] をクリックします。

    ステップ 3: スティッキネスの有効化

    1. ロード バランサーを作成したら、ターゲット グループでスティッキネスを有効にする必要がある

      • AWS ターゲット グループ ページ ([EC2] > [ロード バランス] > [ターゲット グループ]) を開き、セットアップしたロード バランサーのインスタンスを選択します。[アクション] メニューで [属性の編集] を選択します。
      • [属性の編集] ページで [スティッキー] を選択して、期間 "1 day" を指定し、[変更を保存] します。
    2. ロード バランサーで、HTTP リスナーのスティッキネスを有効化。構成したロード バランサーを選択し、[リスナー] タブをクリックする

      • [HTTP:80] で、[ルールの表示/編集] をクリックします。表示される [ルール] ページで、編集アイコンを (ページ上部で 1 回、ルールのそばでもう 1 回) クリックして、ルールを編集します。既存の THEN ルールを削除し、[アクションの追加] > [転送先...] をクリックしてルールを置き換えます。結果の THEN 構成で、作成したものと同じターゲット グループを指定します。[Group-level stickiness (グループ レベルのスティッキー)] で、スティッキーを有効にし、期間を 1 日に設定します。設定を保存し、[更新] をクリックします。

    ステップ 4: ロード バランサーでアイドル タイムアウトを設定する

    ロード バランサーで、アイドル タイムアウトを 400 秒に更新します。

    この展開で構成したロード バランサーを選択し、[アクション] > [属性の編集] の順にクリックします。アイドル タイムアウト400 秒に設定し、[保存] をクリックします。

    ステップ 5: LBS 接続の検証

    [EC2] > [ロード バランサー] から [AWS ロード バランサー] ページを開き、設定したロード バランサー インスタンスを選択します。

    [説明] で DNS 名をコピーしてブラウザーに貼り付け、Tableau Server のサインイン ページにアクセスします。

    500 レベルのエラーが発生した場合は、プロキシ サーバーを再起動する必要がある場合があります。

    パブリック Tableau URL で DNS を更新

    AWS ロード バランサーの説明にあるドメイン DNS ゾーン名を使用して、DNS に CNAME 値を作成します。URL (tableau.example.com) へのトラフィックは、AWS パブリック DNS 名に送信する必要があります。

    接続の確認

    DNS の更新が完了すると、パブリック URL (たとえば、https://tableau.example.com) を入力して、Tableau Server のサインイン ページに移動できるようになります。

    認証構成の例: 外部 IdP を使用した SAML

    次の例では、AWS 参照アーキテクチャで実行されている Tableau の展開のために、Okta IdP と Mellon 認証モジュールを使用して SAML の設定と構成を行う方法について説明します。また、HTTP を使用するように Tableau Server と Apache プロキシ サーバーを構成する方法についても説明します。Okta は HTTPS を介して AWS ロード バランサーに要求を送信しますが、すべての内部トラフィックは HTTP を介して伝送されます。このシナリオ用に構成する場合は、URL 文字列を設定するときに HTTP プロトコルと HTTPS プロトコルに注意してください。

    この例では、リバース プロキシ サーバー上の事前認証サービス プロバイダー モジュールとして Mellon を使用しています。この構成により、認証されたトラフィックのみが Tableau Server に接続されます。Tableau Server は、Okta IdP を使用したサービス プロバイダーとしても機能します。したがって、2 つの IdP アプリケーションを構成する必要があります。1 つは Mellon サービス プロバイダー用で、もう 1 つは Tableau サービス プロバイダー用です。

    Tableau 管理者アカウントの作成

    SAML を構成する際のよくある間違いは、SSO を有効にする前に、Tableau Server で管理者アカウントを作成するのを忘れることです。

    最初のステップでは、サーバー管理者ロールを持つ Tableau Server でアカウントを作成します。Okta シナリオの例では、ユーザー名は、user@example.com などの有効なメール アドレスの形式である必要があります。このユーザーのパスワードを設定する必要がありますが、SAML を構成した後はパスワードは使用されません。

    Okta 事前認証アプリケーションの構成

    このセクションで説明するエンドツーエンドのシナリオには、2 つの Okta アプリケーションが必要です。

    • Okta 事前認証アプリケーション
    • Okta Tableau Server アプリケーション

    これらの各アプリケーションは、リバース プロキシと Tableau Server でそれぞれ構成する必要がある異なるメタデータに関連付けられています。

    この手順では、Okta 事前認証アプリケーションを作成および構成する方法について説明します。このトピックの後半で、Okta Tableau Server アプリケーションを作成します。ユーザー制限が設定されている無料のテスト Okta アカウントについては、Okta Developer Web ページ(新しいウィンドウでリンクが開く)を参照してください。

    Mellon 事前認証サービス プロバイダー用の SAML アプリ統合を作成します。

    1. Okta 管理ダッシュボード > [アプリケーション] > [アプリ統合の作成] を開きます。

    2. [新しいアプリ統合の作成] ページで [SAML 2.0] を選択し、[次へ] をクリックします。

    3. [一般設定] タブでアプリ名 (たとえば、Tableau Pre-Auth) を入力し、[次へ] をクリックします。

    4. [SAML の構成] タブで、次を設定します。

      • シングル サインオン (SSO) URLシングル サインオン URL のパスの最後の要素は、この手順の後半で説明する mellon.conf 構成ファイルの中で MellonEndpointPath と呼ばれます。必要なエンドポイントを指定できます。この例では sso がエンドポイントです。https://tableau.example.com/sso/postResponse の最後の要素 postResponse は必須です。
      • [Use this for Recipient URL and Destination URL (受信者 URL と宛先 URL 用に使用する)] チェックボックスをオフにします。
      • 受信者 URL: SSO URL と同じですが、HTTP を使用します。たとえば、http://tableau.example.com/sso/postResponse のように使用します。
      • 宛先 URL: SSO URL と同じですが、HTTP を使用します。たとえば、http://tableau.example.com/sso/postResponse のように使用します。
      • オーディエンス URI (SP エンティティ ID): たとえば、https://tableau.example.com のように使用します。
      • 名前 ID の形式: EmailAddress
      • アプリケーションのユーザー名: Email
      • 属性ステートメント: 名前 = mail。名前の形式 = Unspecified。値 = user.email

      [次へ] をクリックします。

    5. [フィードバック] タブで、次を選択します。

      • [I'm an Okta customer adding an internal app (私は Okta の顧客であり、内部アプリを追加しています)]
      • [これは私たちが作成した内部アプリです]
      • [完了] をクリックします。
    6. 事前認証 IdP メタデータ ファイルを作成します。

      • Okta で、[アプリケーション] > [アプリケーション] > 使用する新しいアプリケーション (例: Tableau Pre-Auth) > [サインオン] を選択します。
      • [SAML Signing Certificates (SAML 署名証明書)] の横にある [View SAML setup instructions (SAML セットアップ手順の表示)] をクリックします。
      • [How to Configure SAML 2.0 for <pre-auth> Application (<pre-auth> アプリケーションの SAML 2.0 を構成する方法)] ページで、[Optional (オプション)] セクションの [Provide the following IDP metadata to your SP provider (次の IDP メタデータを SP プロバイダーに指定する)] まで下にスクロールします。
      • XML フィールドのコンテンツをコピーして、pre-auth_idp_metadata.xml というファイルに保存します。
    7. (オプション) 多要素認証を構成します。

      • Okta で、[アプリケーション] > [アプリケーション] > 使用する新しいアプリケーション (例: Tableau Pre-Auth) > [サインオン] を選択します。
      • [サインオン ポリシー] の下で、[ルールの追加] をクリックします。
      • [アプリのサインオン ルール]で、名前とさまざまな MFA オプションを指定します。機能をテストするには、すべてのオプションを既定のままにします。ただし、[アクション] で、[係数の確認] を選択してから、ユーザーがサインインする必要がある頻度を指定する必要があります。[保存] をクリックします。

    Okta ユーザーの作成と割り当て

    1. Okta で、[ディレクトリ] > [ユーザー] > [ユーザーの追加] を選択し、Tableau で作成したのと同じユーザー名 (user@example.com) でユーザーを作成します。
    2. ユーザーが作成されたら、新しい Okta アプリをそのユーザーに割り当てます。ユーザー名をクリックしてから、[アプリケーションの割り当て] でアプリケーションを割り当てます。

    Mellon を事前認証用にインストール

    1. Apache プロキシ サーバーを実行している EC2 インスタンスで次のコマンドを実行し、PHP モジュールと Mellon モジュールをインストールします。

      sudo yum install httpd php mod_auth_mellon

    2. /etc/httpd/mellon ディレクトリを作成します。

    Mellon を事前認証モジュールとして構成

    両方のプロキシ サーバーでこの手順を実行します。

    Okta 構成から作成した pre-auth_idp_metadata.xml ファイルのコピーがある必要があります。

    1. ディレクトリを変更します。

      cd /etc/httpd/mellon

    2. サービス プロバイダーのメタデータを作成します。スクリプト mellon_create_metadata.sh を実行します。コマンドには、組織のエンティティ ID と戻り URL を含める必要があります。

      戻り URL は、Okta では シングル サインオン URL と呼ばれます。戻り URL のパスの最後の要素は、この手順の後半で説明する mellon.conf 構成ファイルの中で MellonEndpointPath と呼ばれます。この例では、エンドポイント パスとして sso を指定します。

      例:

      sudo /usr/libexec/mod_auth_mellon/mellon_create_metadata.sh https://tableau.example.com "https://tableau.example.com/sso"

      スクリプトが、サービス プロバイダーの証明書、キー、およびメタデータ ファイルを返します。

    3. 読みやすくするために、mellon ディレクトリ内のサービス プロバイダー ファイルの名前を変更します。今後このドキュメントでは、これらのファイルを次の名前で参照します。

      sudo mv *.key mellon.key
      sudo mv *.cert mellon.cert
      sudo mv *.xml sp_metadata.xml

    4. pre-auth_idp_metadata.xml ファイルを同じディレクトリにコピーします。

    5. mellon.conf ファイルを /etc/httpd/conf.d ディレクトリに作成します。

      sudo nano /etc/httpd/conf.d/mellon.conf

    6. 次の内容を mellon.conf にコピーします。

      <Location />
      MellonSPPrivateKeyFile /etc/httpd/mellon/mellon.key
      MellonSPCertFile /etc/httpd/mellon/mellon.cert
      MellonSPMetadataFile /etc/httpd/mellon/sp_metadata.xml
      MellonIdPMetadataFile /etc/httpd/mellon/pre-auth_idp_metadata.xml
      MellonEndpointPath /sso
      MellonEnable "info"
      </Location>
    7. 既存の tableau.conf ファイルに以下の内容を追加します。

      <VirtualHost *:80> ブロック内に次の内容を追加します。エンティティ ID のパブリック ホスト名で ServerName を更新します。

      DocumentRoot /var/www/html
      ServerName tableau.example.com
      ServerSignature Off
      ErrorLog logs/error_sp.log
      CustomLog logs/access_sp.log combined
      LogLevel info 

      <VirtualHost *:80> ブロックの外部に Location ブロックを追加します。トップレベル ドメインで MellonCookieDomain を更新し、次のように Cookie 情報を保持します。

      <Location />
      AuthType Mellon
      MellonEnable auth
      Require valid-user
      MellonCookieDomain example.com					
      </Location>

      設定が完了した tableau.conf ファイルは、次の例のようになります。

      <VirtualHost *:80>
      ServerAdmin admin@example.com
      ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/}
      Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
      <Proxy balancer://tableau>
      BalancerMember http://10.0.3.36/ route=1 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
      BalancerMember http://10.0.4.15/ route=2 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
      ProxySet stickysession=ROUTEID
      </Proxy>
      ProxyPreserveHost On
      ProxyPass / balancer://tableau/
      ProxyPassReverse / balancer://tableau/
      DocumentRoot /var/www/html
      ServerName tableau.example.com
      ServerSignature Off
      ErrorLog logs/error_sp.log
      CustomLog logs/access_sp.log combined
      LogLevel info 
      </VirtualHost>
      <Location />
      AuthType Mellon
      MellonEnable auth
      Require valid-user
      MellonCookieDomain example.com
      </Location>
    8. 構成を確認します。次のコマンドを実行します。

      sudo apachectl configtest

      構成のテストでエラーが返された場合は、エラーを修正して configtest を再実行してください。正常に構成されている場合は、Syntax OK が返ります。

    9. httpd を再起動します。

      sudo systemctl restart httpd

    Okta で Tableau Server アプリケーションを作成

    1. Okta ダッシュボードで、[アプリケーション] > [アプリケーション] > [アプリ カタログの参照] を選択します。
    2. [アプリ統合カタログの参照] で、Tableau を検索して、Tableau Server タイルを選択し、[追加] をクリックします。
    3. [Tableau Server の追加] > [一般設定] を選択して、ラベルを入力し、[次へ] をクリックします。
    4. [サインオン オプション] で [SAML 2.0] を選択してから、[サインオンの詳細設定] まで下にスクロールします。
      • [SAML エンティティ ID]: パブリック URL (たとえば、https://tableau.example.com) を入力します。
      • [アプリケーションのユーザー名の形式] では、メールを指定します。
    5. [Identity Provider metadata (アイデンティティ プロバイダーのメタデータ)] リンクをクリックして、ブラウザーを起動します。ブラウザーのリンクをコピーします。このリンクは、次の手順で Tableau を構成するときに使用します。
    6. [完了] をクリックします。
    7. 新しい Tableau Server Okta アプリをユーザー (user@example.com) に割り当てます。ユーザー名をクリックし、[アプリケーションの割り当て] でアプリケーションを割り当てます。

    IdP 用の Tableau Server で SAML を有効化

    Tableau Server ノード 1 で次の手順を実行します。

    1. Okta から Tableau Server アプリケーションのメタデータをダウンロードします。前の手順で保存したリンクを使用します。

      wget https://dev-66144217.okta.com/app/exk1egxgt1fhjkSeS5d7/sso/saml/metadata -O idp_metadata.xml

    2. TLS 証明書および関連するキー ファイルを Tableau Server にコピーします。キー ファイルは RSA キーである必要があります。SAML 証明書と IdP 要件の詳細については、「SAML 要件」を参照してください (Linux(新しいウィンドウでリンクが開く))。

      証明書の管理と展開を簡素化するため、およびセキュリティのベスト プラクティスとして、信頼性の高い主要なサード パーティーの認証局 (CA) によって生成された証明書を使用することをお勧めします。または、自己署名証明書を生成するか、TLS 用の PKI からの証明書を使用することもできます。

      TLS 証明書を持っていない場合は、以下の埋め込み手順に従って自己署名証明書を生成できます。

      自己署名証明書の生成

      Tableau Server ノード 1 でこの手順を実行します。

      1. ルート認証局 (CA) の署名キーを生成します。

        openssl genrsa -out rootCAKey-saml.pem 2048

      2. ルート CA 証明書を作成します。

        openssl req -x509 -sha256 -new -nodes -key rootCAKey-saml.pem -days 3650 -out rootCACert-saml.pem

        証明書フィールドに値を入力するように求められます。例:

        Country Name (2 letter code) [XX]:US
        State or Province Name (full name) []:Washington
        Locality Name (eg, city) [Default City]:Seattle
        Organization Name (eg, company) [Default Company Ltd]:Tableau
        Organizational Unit Name (eg, section) []:Operations
        Common Name (eg, your name or your server's hostname) []:tableau.example.com
        Email Address []:example@tableau.com
      3. 証明書と関連キー (この例では server-saml.csr と server-saml.key) を作成します。証明書のサブジェクト名は、Tableau ホストのパブリック ホスト名と一致する必要があります。サブジェクト名は、-subj オプションと "/CN=<host-name>" の形式を使用して設定します。例:

        openssl req -new -nodes -text -out server-saml.csr -keyout server-saml.key -subj "/CN=tableau.example.com"

      4. 上記で作成した CA 証明書を使用して、新しい証明書に署名します。次のコマンドも crt 形式で証明書を出力します。

        openssl x509 -req -in server-saml.csr -days 3650 -CA rootCACert-saml.pem -CAkey rootCAKey-saml.pem -CAcreateserial -out server-saml.crt

      5. キー ファイルを RSA に変換します。Tableau では、SAML 用の RSA キー ファイルが必要です。キーを変換するには、次のコマンドを実行します。

        openssl rsa -in server-saml.key -out server-saml-rsa.key

    3. SAML を構成します。次のコマンドを実行して、エンティティ ID とリターン URL を指定し、メタデータ ファイル、証明書ファイル、キー ファイルへのパスを指定します。

      tsm authentication saml configure --idp-entity-id "https://tableau.example.com" --idp-return-url "https://tableau.example.com" --idp-metadata idp_metadata.xml --cert-file "server-saml.crt" --key-file "server-saml-rsa.key"

      tsm authentication saml enable

    4. 組織で Tableau Desktop 2021.4 以降を実行している場合は、次のコマンドを実行して、リバース プロキシ サーバーを介した認証を有効にする必要があります。

      事前認証モジュール (Mellon など) がトップレベル ドメインの Cookie を保持できるように構成されている場合、Tableau Desktop バージョン 2021.2.1 ~ 2021.3 は、このコマンドを実行しなくても動作します。

      tsm configuration set -k features.ExternalBrowserOAuth -v false

    5. 構成の変更を適用します。

      tsm pending-changes apply

    SAML 機能の検証

    エンドツーエンドの SAML 機能を検証するには、この手順の最初に作成した Tableau 管理者アカウントからパブリック URL (https://tableau.example.com など) を使用して Tableau Server にサインインします。

    検証のトラブルシューティング

    無効な要求: このシナリオの一般的なエラーは、Okta から送信される「無効な要求」というエラーです。多くの場合、この問題は、ブラウザーが前の Okta セッションからのデータをキャッシュしているときに発生します。たとえば、あなたが Okta 管理者として Okta アプリケーションを管理しており、別の Okta 対応アカウントを使用して Tableau にアクセスしようとすると、管理者データからのセッション データが「無効な要求」エラーの原因となる場合があります。ローカル ブラウザーのキャッシュをクリアしてもこのエラーが続く場合は、別のブラウザーに接続して Tableau シナリオを検証してみてください。

    「無効な要求」エラーのもう 1 つの原因は、Okta、Mellon、および SAML の設定作業中に入力する多くの URL でタイプミスがあることです。これらの URL すべてを注意深く確認してください。

    多くの場合、Apache サーバー上の httpd error.log ファイルにより、エラーの原因となっている URL が特定されます。

    見つかりません - 要求された URL がこのサーバーで見つかりませんでした: このエラーは、多くの構成エラーの 1 つです。

    Okta を使用して認証されたユーザーがこのエラーを受け取った場合は、SAML を構成したときに Okta 事前認証アプリケーションを Tableau Server にアップロードした可能性があります。Okta 事前認証アプリケーション メタデータではなく、Okta Tableau Server アプリケーション メタデータが Tableau Server で構成されていることを確認します

    その他のトラブルシューティング ステップ

    • tableau.conf をチェックして、タイプミスや構成エラーがないことを確認します。
    • Okta 事前認証アプリケーションの設定を確認します。HTTP プロトコルまたは HTTPS プロトコルがこのトピックで指定されているとおりに設定されていることを確認してください。
    • 両方のプロキシ サーバーで httpd を再起動します。
    • 両方のプロキシ サーバーで sudo apachectl configtest が “構文 OK” を返していることを検証します。
    • テスト ユーザーが Okta の両方のアプリケーションに割り当てられていることを確認します。
    • ロードバランサーおよび関連するターゲット グループにスティックレスが設定されていることを確認します

    ロード バランサーから Tableau Server への SSL/TLS を構成します

    一部の組織では、クライアントからバック エンド サービスへのエンドツーエンドの暗号化チャネルが必要です。これまでに説明されている既定のリファレンス アーキテクチャでは、クライアントから組織の Web 層で実行されているロードバランサーへの SSL が指定されています。

    ロードバランサーから Tableau Server への SSL を構成するには、次の手順を実行する必要があります。

    • Tableau Server とプロキシ サーバーの両方に有効な SSL 証明書をインストールします。
    • ロードバランサーからリバース プロキシ サーバーへの SSL を構成します。
    • プロキシ サーバーから Tableau Server への SSL を構成します。
    • Tableau Server から PostgreSQL インスタンスへの SSL を構成することもできます。

    このトピックの残りの部分では、AWS リファレンス アーキテクチャのコンテキストを例に挙げ、この実装について説明します。

    例: AWS リファレンス アーキテクチャで SSL/TLS を設定する

    このセクションでは、Tableau で SSL を構成する方法、Apache プロキシ サーバーで SSL を構成する方法について説明します。これらはすべて AWS リファレンス アーキテクチャの例で実行します。

    この例で示している Linux の手順は、RHEL 系ディストリビューションのコマンドです。具体的には、これらのコマンドは Amazon Linux 2 ディストリビューションで開発されたものです。Ubuntu ディストリビューションを実行している場合は、状況に応じてコマンドを編集してください。

    ステップ1: 証明書と関連キーを収集する

    証明書の管理と展開を簡素化するため、およびセキュリティのベスト プラクティスとして、信頼性の高い主要なサード パーティーの認証局 (CA) によって生成された証明書を使用することをお勧めします。

    または、自己署名証明書を生成するか、TLS 用の PKI からの証明書を使用することもできます。

    次の手順では、自己署名証明書を生成します。推奨に従いサードパーティーの証明書を使用している場合は、この手順を省略できます。

    この手順をプロキシ ホストの 1 つで実行します。証明書と関連キーを生成したら、それらを他のプロキシ ホストおよび Tableau Server ノード 1 と共有します。

    1. ルート認証局 (CA) の署名キーを生成します。

      openssl genrsa -out rootCAKey.pem 2048

    2. ルート CA 証明書を作成します。

      openssl req -x509 -sha256 -new -nodes -key rootCAKey.pem -days 3650 -out rootCACert.pem

      証明書フィールドに値を入力するように求められます。例:

      Country Name (2 letter code) [XX]:US
      State or Province Name (full name) []:Washington
      Locality Name (eg, city) [Default City]:Seattle
      Organization Name (eg, company) [Default Company Ltd]:Tableau
      Organizational Unit Name (eg, section) []:Operations
      Common Name (eg, your name or your server's hostname) []:tableau.example.com
      Email Address []:example@tableau.com
    3. 証明書と関連キー (この例では serverssl.csr と serverssl.key) を作成します。証明書のサブジェクト名は、Tableau ホストのパブリック ホスト名と一致する必要があります。サブジェクト名は、-subj オプションと "/CN=<host-name>" の形式を使用して設定します。例:

      openssl req -new -nodes -text -out serverssl.csr -keyout serverssl.key -subj "/CN=tableau.example.com"

    4. 手順 2 で作成した CA 証明書を使用して新しい証明書に署名します。次のコマンドも crt 形式で証明書を出力します。

      openssl x509 -req -in serverssl.csr -days 3650 -CA rootCACert.pem -CAkey rootCAKey.pem -CAcreateserial -out serverssl.crt

    手順 2: プロキシサーバーの SSL 設定

    両方のプロキシ サーバーでこの手順を実行します。

    1. Apache SSL モジュールをインストールします。

      sudo yum install mod_ssl

    2. /etc/ssl/private ディレクトリを作成します。

      sudo mkdir -p /etc/ssl/private

    3. 証明書ファイルとキー ファイルを以下の /etc/ssl/ パスにコピーします。

      sudo cp serverssl.crt /etc/ssl/certs/

      sudo cp serverssl.key /etc/ssl/private/

    4. 既存の tableau.conf を以下の更新でアップデートします。

      • SSL リライト ブロックを追加します。
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =tableau.example.com
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
      • SSL リライト ブロックで、RewriteCond のサーバー名を編集してパブリック ホスト名を追加します。たとえば、tableau.example.com です。
      • <VirtualHost *:80> <VirtualHost *:443> に変更します。
      • <VirtualHost *:443> ブロックと <Location /> ブロックを <IfModule mod_ssl.c> ...</IfModule>
      • BalancerMember: プロトコルを http から https に変更します。
      • SSL* 要素を <VirtualHost *:443> ブロック内に追加します。
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/serverssl.crt
        SSLCertificateKeyFile /etc/ssl/private/serverssl.key
        SSLProxyEngine on
        SSLProxyVerify none
        SSLProxyCheckPeerName off
        SSLProxyCheckPeerExpire off
      • LogLevel 要素の中に ssl:warn を追加します。
      • オプション: 認証モジュールをインストールして設定している場合は、tableau.conf ファイルに追加の要素がある可能性があります。たとえば、 <Location /> </Location> ブロックに要素があります。

      SSL を設定した tableau.conf ファイルの例を次に示します。

      RewriteEngine on
      RewriteCond %{SERVER_NAME} =tableau.example.com
      RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
      
      <IfModule mod_ssl.c>
      <VirtualHost *:443>
      ServerAdmin admin@example.com
      ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/}
      Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
      <Proxy balancer://tableau>
      BalancerMember https://10.0.3.36/ route=1 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
      BalancerMember https://10.0.4.15/ route=2 hcmethod=GET hcexpr=ok234 hcuri=/favicon.ico
      ProxySet stickysession=ROUTEID
      </Proxy>
      ProxyPreserveHost On
      ProxyPass / balancer://tableau/
      ProxyPassReverse / balancer://tableau/
      DocumentRoot /var/www/html
      ServerName tableau.example.com
      ServerSignature Off
      ErrorLog logs/error_sp.log
      CustomLog logs/access_sp.log combined
      LogLevel info ssl:warn
      SSLEngine on
      SSLCertificateFile /etc/ssl/certs/serverssl.crt
      SSLCertificateKeyFile /etc/ssl/private/serverssl.key
      SSLProxyEngine on
      SSLProxyVerify none
      SSLProxyCheckPeerName off
      SSLProxyCheckPeerExpire off
      </VirtualHost>
      <Location />
      #If you have configured a pre-auth module (e.g. Mellon) include those elements here.
      </Location>
      </IfModule>
    5. index.html ファイルを追加して 403 エラーを抑制します。

      sudo touch /var/www/html/index.html
    6. httpd を再起動します。

      sudo systemctl restart httpd

    ステップ 3: Tableau Server の外部 SSL 設定

    serversl.crt ファイルと serverssl.key ファイルを Proxy 1 ホストから最初の Tableau Server (ノード 1) にコピーします。

    ノード 1 で次のコマンドを実行します。

    tsm security external-ssl enable --cert-file serverssl.crt --key-file serverssl.key
    tsm pending-changes apply

    ステップ 4 - 認証の設定 (オプション)

    外部の ID プロバイダーを Tableau で設定している場合は、IdP の管理ダッシュボードでリターン URL を更新する必要があります。

    たとえば、Okta 事前認証アプリケーションを使用している場合は、受信者 URL と宛先 URL に HTTPS プロトコルを使用するようにアプリケーションを更新する必要があります。

    ステップ 5: AWS ロード バランサーの HTTPS 設定

    このガイドに記載されているように AWS ロード バランサーを導入する場合は、HTTPS トラフィックがプロキシ サーバーに送信されるように AWS ロード バランサーを設定し直します。

    1. 既存の HTTP ターゲット グループの登録を解除します。

      [ターゲット グループ] で、ロード バランサー用に設定されている HTTP ターゲットグ ループを選択し、[アクション] をクリックして [インスタンスの登録と登録解除] をクリックします。

      [ターゲットの登録と登録解除] ページで、現在構成されているインスタンスを選択し、[Deregister (登録解除)] をクリックして [保存] をクリックします。

    2. HTTPS ターゲット グループを作成します。

      [ターゲット グループ] > [ターゲット グループの作成]

      • 「インスタンス」を選択
      • ターゲット グループ名を入力 (例: TG-internal-HTTPS)
      • VPC を選択
      • プロトコル: HTTPS 443
      • [ヘルス チェック] > [ヘルス チェックの詳細設定] > [成功コード] で、読み取るコードの一覧 200,303 を追加します。
      • [作成] をクリックします。
    3. 作成したターゲット グループを選択し、[ターゲット] タブをクリックします。 

      • [編集] をクリックします。
      • プロキシ アプリケーションを実行している EC2 インスタンスを選択し、[登録済みに追加] をクリックします。
      • [保存] をクリックします。
    4. ターゲット グループを作成したら、スティッキー設定を有効にします。

      • AWS ターゲット グループ ページ ([EC2] > [ロード バランス] > [ターゲット グループ]) を開き、セットアップしたロード バランサーのインスタンスを選択します。[アクション] メニューで、[属性の編集] を選択します。
      • [属性の編集] ページで [スティッキー] を選択して、期間 "1 day" を指定し、[変更を保存] します。
    5. ロード バランサーで、リスナー ルールを更新します。このデプロイメントで設定したロード バランサーを選択し、[リスナー] タブをクリックします。

      • [HTTP:80] で、[ルールの表示/編集] をクリックします。表示される [ルール] ページで、編集アイコンを (ページ上部で 1 回、ルールのそばでもう 1 回) クリックして、ルールを編集します。既存の THEN ルールを削除し、[アクションの追加] > [リダイレクト先...] をクリックしてルールを置き換えます。表示される THEN 設定で、HTTPS とポート 443 を指定し、他のオプションはデフォルト設定のままにします。設定を保存し、[更新] をクリックします。
      • [HTTP 443] で、[ルールの表示/編集] をクリックします。表示される [ルール] ページで、編集アイコンを (ページ上部で 1 回、ルールのそばでもう 1 回) クリックして、ルールを編集します。THEN 構成で、[Forward to...(転送先...)] で、ターゲット グループを先ほど作成した HTTPS グループに変更します。[Group-level stickiness (グループ レベルのスティッキー)] で、スティッキーを有効にし、期間を 1 日に設定します。設定を保存し、[更新] をクリックします。

    ステップ 6: SSL の確認

    Https://tableau.example.com にアクセスして、設定を確認します。

    フィードバックをありがとうございます。フィードバックは正常に送信されました。ありがとうございます!