Amazon Athena で独自の ID プロバイダーを使用する
Amazon Athena コネクタでは独自の ID プロバイダー (IDP) を使用できます。
注: ID プロバイダーは、OAuth 2.0 または OIDC をサポートしている必要があります。
概要
独自の ID プロバイダー (IDP) を設定するために必要なステップは、利用する ID プロバイダーによって異なります。以下は、手順の概要です。
- ID プロバイダー、Tableau、データ ソースの間に信頼関係を設定します。
- Tableau の OAuth クライアント資格情報を作成します。
- Tableau に OAuth クライアントの詳細を実装します。
- フェデレーション ID のポリシーを作成します。
- Amazon Athena に接続します。
Amazon Athena と Okta の例
以下の例は、Tableau、Okta、AWS の間で、3 方向の信頼関係とフェデレーションからなる OAuth ソリューションを作成する手順を複数ステップで示したものです。このドキュメントでは、Okta と AWS のアカウントを持っていることを前提としています。
Tableau が OAuth で連携する方法
この例では、OAuth を使用して Tableau をデータに接続します。適切に構成されていれば、ユーザーがデータに接続しようとすると、ユーザーを認証するために、Tableau は自動的にユーザーを ID プロバイダーに接続させ、データへのアクセス権を委任することに同意します。Tableau は、OAuth のアクセス トークンとリフレッシュ トークンを受け取り、それらを使用してデータ ソースに接続します。
注: 詳細については、各ステップの Tableau の手順を参照してください。
ステップ 1: AWS IAM ID センターで Okta を ID プロバイダーとして設定する
このステップでは、Okta と AWS の両方で設定が必要です。詳細な手順については、Amazon のドキュメントを参照してください。
ステップ 2: Okta で Tableau 用の OAuth クライアント アプリケーションを作成する
概要については、Okta のドキュメント「アプリケーションと接続」を参照してください。
ステップ 3: Tableau に OAuth クライアントを実装する
OAuth はアクセス権を委任するプロトコルです。ユーザーは、自分自身が認証された後、自分の代わりにふるまう権限を Tableau に委任します。OAuth クライアントを設定するには、次の手順を実行します。
注: このステップでは、OAuth 構成ファイルを使用する必要があります。OAuth 構成ファイルがない場合は、このページの下部または Github ページの「OAuth 構成ファイル」の例を確認してください。
Tableau Server または Tableau Cloud
- Tableau Server または Tableau Cloud のサイト設定に移動します。
- Okta アプリから OAuth クライアント ID とクライアント シークレットを追加します。
- OAuth 構成ファイルをアップロードします。
- [OAuth クライアントの追加] を選択して、終了します。
Tableau Desktop および Tableau Bridge クライアント
- OAuth 構成ファイルを、保存したディレクトリから開きます。
- Tableau Desktop 用の Okta アプリの情報を使用して、XML ファイル内の ClientID、クライアント シークレット、authUri、tokenUri を調整します。
- OAuth 構成ファイルを [マイ Tableau リポジトリ] フォルダーの [OAuthConfigs] フォルダーに保存します。
- Bridge クライアントを実行している場合は、Bridge クライアントを再起動して、新しい OAuth 構成が読み込まれていることを確認します。
ステップ 4.AWS でフェデレーション ID のポリシーを作成する
AWS との信頼関係を作成し、Tableau フェデレーション ID アプリケーション (clientID) が信頼され、Web ID を使ってロールを引き受けることができるようにします。このステップは AWS で実行されます。詳細な手順については、Amazon のドキュメント「ユーザーおよびグループに AWS リソースへのアクセス権限を付与する」を参照してください。
ステップ 4 では、ユーザーが認証された後、Tableau が Okta から受け取った OIDC ID トークンと、ユーザーから提供された IAM ロールを、AWS に提供できるようになります。AWS は、Okta からのトークンと署名を検証し、トークンからユーザー ID を抽出し、IAM ロールへのユーザーのマッピングを検索し、Tableau がユーザーに代わってロールを引き受けることを許可または拒否します(AssumeRoleWithWebIdentity)。
ステップ 5: Athena に接続する
Tableau Server、Tableau Cloud、または Tableau Desktop で次の手順を実行します。
- Tableau にサインインします。
- [接続] で [サーバーへ] を選択します。
- [Amazon Athena] を選択します。
- 接続ダイアログで、Tableau に引き受けるロールの適切な接続パラメーターと ARN を入力します。
- ステップ 3 で設定した OAuth プロバイダーを選択します(OAuth クライアントが 1 つしかない場合は、それがデフォルトになります。OAuth クライアントが複数ある場合は、Creator が必要に応じて選択できます)。
- [サインイン] を選択して Amazon Athena に接続します。
OAuth 構成ファイルの例
次のファイルをテンプレートとして使用して、独自の OAuth ファイルを作成できますが、クライアント ID など、具体的な情報を使用してファイルを更新してください。
OAuth 構成ファイルの例
<pluginOAuthConfig>
<dbclass>athena</dbclass>
<oauthConfigId>custom_NAME</oauthConfigId>
<!-- MUST INCLUDE "custom_" -->
<clientIdDesktop>CLIENT_ID</clientIdDesktop>
<clientSecretDesktop>CLIENT_SECRET</clientSecretDesktop>
<redirectUrisDesktop>http://localhost:56666/Callback</redirectUrisDesktop>
<redirectUrisDesktop>http://localhost:56667/Callback</redirectUrisDesktop>
<!--
<redirectUrisDesktop>http://localhost:56668/Callback</redirectUrisDesktop>
-->
<authUri>AUTH_URI</authUri>
<tokenUri>TOKEN_URI</tokenUri>
<!-- EXAMPLEs
<authUri>https://EXAMPLE.okta.com/oauth2/v1/authorize</authUri>
<tokenUri>https://EXAMPLE.okta.com/oauth2/v1/token</tokenUri>
-->
<!--
<scopes>openid</scopes>
<scopes>email</scopes>
<scopes>profile</scopes>
<scopes>offline_access</scopes>
-->
<scopes>openid email profile offline_access</scopes>
<capabilities>
<entry>
<key>OAUTH_CAP_SUPPORTS_HTTP_SCHEME_LOOPBACK_REDIRECT_URLS</key>
<value>false</value>
</entry>
<entry>
<key>OAUTH_CAP_FIXED_PORT_IN_CALLBACK_URL</key>
<value>true</value>
</entry>
<entry>
<key>OAUTH_CAP_PKCE_REQUIRES_CODE_CHALLENGE_METHOD</key>
<value>false</value>
</entry>
<entry>
<key>OAUTH_CAP_REQUIRE_PKCE</key>
<value>false</value>
</entry>
<entry>
<key>OAUTH_CAP_SUPPORTS_STATE</key>
<value>true</value>
</entry>
<entry>
<key>OAUTH_CAP_SUPPORTS_CUSTOM_DOMAIN</key>
<value>false</value>
</entry>
<entry>
<key>OAUTH_CAP_CLIENT_SECRET_IN_URL_QUERY_PARAM</key>
<value>true</value>
</entry>
<entry>
<key>OAUTH_CAP_SUPPORTS_GET_USERINFO_FROM_ID_TOKEN</key>
<value>true</value>
</entry>
<entry>
<key>OAUTH_CAP_USE_SCOPE_IN_REFRESH_REQUEST</key>
<value>true</value>
</entry>
</capabilities>
<accessTokenResponseMaps>
<entry>
<key>ACCESSTOKEN</key>
<value>access_token</value>
</entry>
<entry>
<key>REFRESHTOKEN</key>
<value>refresh_token</value>
</entry>
<entry>
<key>id-token</key>
<value>id_token</value>
</entry>
<entry>
<key>access-token-issue-time</key>
<value>issued_at</value>
</entry>
<entry>
<key>access-token-expires-in</key>
<value>expires_in</value>
</entry>
<entry>
<key>username</key>
<value>preferred_username</value>
</entry>
</accessTokenResponseMaps>
<refreshTokenResponseMaps>
<entry>
<key>ACCESSTOKEN</key>
<value>access_token</value>
</entry>
<entry>
<key>REFRESHTOKEN</key>
<value>refresh_token</value>
</entry>
<entry>
<key>id-token</key>
<value>id_token</value>
</entry>
<entry>
<key>access-token-issue-time</key>
<value>issued_at</value>
</entry>
<entry>
<key>access-token-expires-in</key>
<value>expires_in</value>
</entry>
</refreshTokenResponseMaps>
</pluginOAuthConfig>