ALB 配下の Tableau Server と Amazon Cognito を OpenID Connect で連携し Tableau Server の認証を多要素認証にする
はじめに
Application Load Balancer(ALB) 配下にインストールされた Tableau Server と Amazon Cognito(以下、Cognito)を OpenID Connect 連携し、認証を多要素認証(MFA)にしてみました。
Tableau Server は、SAML 2.0 以降をサポートする外部アイデンティティ プロバイダー(IdP)を使用した SAML の設定の他に、OpenID Connect による SSO の構成も可能です。
ALB などのリバースプロキシ配下に Tableau Server をインストールしており、SAML を使用する場合、Tableau Server 側での リバースプロキシに関する追加設定や SAML 構成時の証明書の使用に関して注意点がありました。
このような構成時に OpenID Connect の場合も同様に連携可能か検証しておきたく記事としました。本記事では、IdP として Cognito を使用し Cognito 経由で Tableau Server にサインインするように設定しています。
前提条件
以下の環境で検証しています。
- Tableau Server
- バージョン:2023.1.10
- OS:Windows Server 2019
- 構成
- 単一サーバー構成
- アイデンティティストア:ローカル
- Tableau Serverをインストールするサーバー(EC2)をローンチするための VPC、サブネットは構築済み
- Route53 にて検証用のDNS ホストゾーンを作成済み
- クライアントからは、CNAME レコードを使用して Tableau Server にアクセス
Tableau Server のインストール
構成
本記事では、上記の前提条件に加えて以下の構成で Tableau Server をインストールします。
- Tableau Server へのアクセスに使用する FQDN を CNAME で登録し、それに対応する証明書を ACM で発行
- Cognito では、コールバック URL に HTTPS を使用します。そのため、Tableau Server にも HTTPS でアクセスできる必要があります。
- 認可エンドポイント | AWS
- 証明書は ALB リスナーに関連付け
- SSL オフロードを利用して、HTTPS 要求は ALBで終了し、そこから Tableau Server へは HTTP 経由で通信を行う
- この構成のために、Tableau Server の外部 SSL は無効のままとしています
構成は下図の通りです。
Tableau Server を ALB 配下にインストール際の具体的な手順は、以下の記事をご参照ください。
リバース プロキシ サーバーを使用するための Tableau Server の構成
ALB などのリバースプロキシ配下に Tableau Server をインストールする場合、Tableau Server 側でtsm configuration set
コマンドによる以下のオプションの設定変更が必要なので、こちらを実施しておきました。
- gateway.trusted
- gateway.public.host
- gateway.trusted_hosts
- gateway.public.port
Tableau Server のインストール後に上記の追加設定を行います。各オプションの詳細や、設定コマンド等については以下をご参照ください。
Tableau Server のプロキシとロード バランサーの設定 | Tableau Help
Tableau Server ユーザーの作成
OpenID Connect において、Tableau Server の既定では、IdP から メールクレームが渡されることが期待されています。このため、Tableau Server のユーザー名としてメールアドレスを使用する必要があります。
Tableau Server ではユーザー名を変更できないため、メールアドレス以外のユーザー名を設定している場合は、メールアドレスからなるユーザー名で新規ユーザーを作成します。その後、パーミッションを変更し、すべてのユーザーコンテンツの所有権を新しいユーザーに変更した後、古いユーザーを削除します。
Cognito 側の設定:ユーザープールの作成
Cognito 側の設定については、以下の記事に詳細な記載があるので、こちらを参考に進めました。
認証プロバイダー
認証プロバイダー設定は、以下のようにしました。
- Cognito ユーザープールのサインイン オプション
- ユーザー名
セキュリティ要件
- パスワードポリシーモード
- Cognito のデフォルト
- 多要素認証
- MFA を必須にする
- MFA の方法
- Authenticator アプリケーション
- ユーザーアカウントの復旧
- セルフサービスのアカウントの復旧を有効化
- ユーザーアカウントの復旧メッセージの配信方法
- Eメールのみ
サインアップエクスペリエンスを設定
- セルフサービスのサインアップ
- 自己登録を有効化
- 属性検証とユーザーアカウントの確認
- Cognito が検証と確認のためにメッセージを自動的に送信することを許可
- 検証する属性
- E メールのメッセージを送信、E メールアドレスを検証
- 属性変更の確認
- 未完了の更新があるときに元の属性値をアクティブに保つ
- 未完了の更新があるときのアクティブな属性値
- Eメール
- 必須の属性
メッセージ配信を設定
- Cognito で E メールを送信
アプリケーションを統合
- ユーザープール名
- 任意の名称
- ここでは
tableau-test
としました
- ホストされた認証ページ
- Cognito のホストされた UI を使用
- ドメイン
- Cognito ドメインを使用する
- 最初のアプリケーションクライアント
- パブリッククライアント
- アプリケーションクライアント名
- 任意の名称
tableau-server
としました
- クライアントのシークレット
- クライアントのシークレットを生成する
- Tableau 側で指定が必要
- 許可されているコールバック URL (認証後にユーザーをリダイレクトするコールバック)
- 後述する手順で Tableau Server で生成される値を使用します
- 以下の形式のため、手動で入力するか、後ほど編集可能なので Tableau Server で生成される値をコピーし、編集するでも問題ありません
https://<Tableau Server の FQDN>/vizportal/api/web/v1/auth/openIdLogin
- ここでは、後ほど修正するとして、任意の値を設定しておきます
高度なアプリケーションクライアントの設定
- OpenID Connect のスコープ
- 追加項目内にある「OpenID Connect のスコープ」には下図の通り「OpenID」「Eメール」「プロファイル」を指定します
以下のドキュメントにあるように Tableau Server の既定では、スコープとして"openid profile email"
を送信するため、これらをスコープに含める必要があります。
その他はデフォルトの設定とし、ユーザープールを作成します。
必要な情報
ユーザープールを作成後、アプリケーションクライアントから Tableau Server 側で指定が必要な以下の情報を確認しておきます。
- ユーザープールID
- アプリケーションのクライアントID
- クライアントシークレット
Tableau Server 側の設定
以下に手順の記載があるので、こちらに沿って進めます。
TSM にログインし「構成 > ユーザーIDとアクセス > 認証方法」を開きます。
認証方法として「OpenID Connect」を選択します。
各項目には、以下の情報を入力します。
Step1
- Provider client ID
- Cognito で確認したアプリケーションのクライアントID
- Provider client secret
- Cognito で確認したクライアントシークレット
- Provider configuration URL
- Tableau Server が認証要求を送信するプロバイダーのサイトにある URL
- Cognito の場合、
https://cognito-idp.<リージョン>.amazonaws.com/<ユーザープール ID>/.well-known/openid-configuration
になります
OAuth 2.0、OpenID Connect、および SAML 2.0 フェデレーションエンドポイントリファレンス - Amazon Cognito
Step2
- Tableau Server external URL
- Tableau Server へのアクセスに使用する FQDN を指定
Step3
Step1とStep2の内容を入力後、入力内容を保存をクリックすると、自動的に値が生成されます。こちらは、Tableau Server のリダイレクト URL で、https://<Tableau Server の FQDN>/vizportal/api/web/v1/auth/openIdLogin
の構成になります。
設定後、変更を適用し Tableau Server を再起動します。
Cognito:許可されているコールバック URL の編集
上記の Step3で生成されたリダイレクト URL は、Cognito の「許可されているコールバック URL」として指定する必要があります。
アプリケーションクライアントのメニューの「ホストされた UI」を編集し「許可されているコールバック URL」に Step3で生成された値を入力し、設定を保存します。
Cognito でユーザーを作成
Cognito 上でユーザーを作成します。ユーザーの属性である「E メールアドレス」が Tableau Server 上のユーザー名と紐づくことになります。
そのため、上記の手順で Tableau Server 上に「E メールアドレス」からなるユーザー名のユーザーを作成する必要がありました。Tableau Server のユーザーとマッピングさせたい E メールアドレスを指定します。
- Cognito のユーザー情報
- Tableau でマッピングされるユーザー
サインイン
認証設定・再起動後、Tableau Server にアクセスすると Cognito 側のログイン画面が表示されるので、Cognito 上のユーザー名・パスワードを入力します。
ここでは、ユーザー名と初期パスワードを入力後、新しいパスワードを求められるので設定します。
MFA を必須としたので、Google Authenticator など MFA アプリの設定を行います。
アプリのコードを入力後、Cognito ユーザーのメールアドレス属性と一致するユーザー名を持つ Tableau Server ユーザーとしてログインできます。
E メール属性と一致するユーザー名を持つユーザーが存在しない場合
この場合、下図のような表示になります。
OpenID Connect のスコープ
上記の通り、Tableau Server の既定ではスコープとして「OpenID」「プロファイル」「E メール」を含める必要があります。IdP 側でこの属性をトークンに含めるように設定していない場合、下図のようなエラーとなります。
Tableau Desktop からのログイン
ログインベースのライセンス管理が有効な状態で、Tableau Desktop からもログインしてみます。この場合も下図のように Cognito のサインイン画面が表示され、本記事の設定の場合、ユーザー名・パスワードに加えて MFA アプリによる追加認証を行うことで、サインインできます。
さいごに
Tableau Server と Cognito を連携し、Tableau Server の認証を多要素認証にしてみました。
SAML の場合、Tableau Server への証明書とキーファイルの登録が必要でしたが、OpenID Connect を使用する場合、この手順は不要なので ACM を使用できることは容易な点かなと感じました。
SAML や OpenID Connect に関わらず、リバースプロキシ配下に Tableau Server をインストールする際は、Tableau Server 側で追加設定が必要になるのでご注意ください。本記事が何かの参考になれば幸いです。