Amazon Redshift IAM OAuth の設定

これらの手順は、古い AWS IAM サービス用です。IAM IDC 統合については、「Amazon Redshift IAM ID センター OAuth の設定」を参照してください。

ID プロバイダーによって、統合を設定するために必要な手順は異なります。これはおおまかな概要です。Tableau は、AWS または IDP の構成方法について詳細な手順を提供できませんが、一般的なアプローチは次のとおりです。

ステップ 1: IDP を構成する

  1. IDP に Tableau Desktop と Tableau Server または Tableau Cloud の OAuth クライアントを作成します。デスクトップ クライアントでは、PKCE を有効にし、http://localhost リダイレクトを使用する必要があります。

  2. ロールの承認に使用するカスタム クレームを追加します。特にオリジナルの IAM を使用している場合は、DbUserDbGroups のクレームを追加することをお勧めします。これらは後で IAM ポリシーで使用できます。

  3. Tableau OAuth 構成ファイルを作成します。GitHub(新しいウィンドウでリンクが開く) のドキュメントと、ここでの(新しいウィンドウでリンクが開く)例を参照してください。他の IDP の例も歓迎します。

    1. Tableau OAuth 構成 ID には必ず「custom_」というプレフィックスを付けてください。

    2. IDP が動的 localhost ポートをサポートしている場合、OAUTH_CAP_FIXED_PORT_IN_CALLBACK_URL を無効にします。IDP がサポートしていない場合は、構成ファイルおよび IDP の許可リストにいくつかの localhost コールバック URL を追加してください。

  4. デスクトップ ホスト (Tableau Desktop、Tableau Prep Builder、Tableau Bridge) 上、および OAuth を使用する各 Tableau Server と Tableau Cloud サイト上の各アプリケーションに関連付けられた OAuthConfigs フォルダーに新しい Tableau OAuth 構成ファイルをインストールします。

AWS で IDP を構成する

1.AWS 上で IDP モデルを作成します。Amazon ドキュメントの「ウェブ ID フェデレーションについて(新しいウィンドウでリンクが開く)」と「OpenID Connect (OIDC) ID プロバイダーの作成(新しいウィンドウでリンクが開く)」を参照してください。

2.IDP 専用のロールとポリシーを作成します。AWS ドキュメントの「ウェブ ID または OpenID Connect フェデレーション用のロールの作成 (コンソール)(新しいウィンドウでリンクが開く)」参照してください。

Redshift ユーザーのロールを構成する

Redshift に必要なポリシーをアタッチします。トークンのカスタム クレームを使用して、ロールに権限を付与できます。AWS ドキュメント(新しいウィンドウでリンクが開く)には SAML を使用した例がいくつかあります。これらの例は OAuth に簡単に適応させることができます。OAuth の場合、クレームは単に「DbUser」や「DbGroups」などです。

AWS ドキュメントのポリシー例は次のとおりです。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "redshift:GetClusterCredentials",
"Resource": [
"arn:aws:redshift:us-west-1:123456789012:dbname:cluster-identifier/dev",
"arn:aws:redshift:us-west-1:123456789012:dbuser:cluster-identifier/${redshift:DbUser}",
"arn:aws:redshift:us-west-1:123456789012:cluster:cluster-identifier"
],
"Condition": {
"StringEquals": {
"aws:userid": "AROAJ2UCCR6DPCEXAMPLE:${redshift:DbUser}@example.com"
}
}
},
{
"Effect": "Allow"
"Action": "redshift:CreateClusterUser",
"Resource": "arn:aws:redshift:us-west-1:12345:dbuser:cluster-identifier/${redshift:DbUser}"
},
{
"Effect": "Allow",
"Action": "redshift:JoinGroup",
"Resource": "arn:aws:redshift:us-west-1:12345:dbgroup:cluster-identifier/my_dbgroup"
},
{
"Effect": "Allow",
"Action": [
"redshift:DescribeClusters",
"iam:ListRoles"
],
"Resource": "*"
}
]
}

Redshift に接続する

ユーザーは、引き受けるロール ARN を指定し、前にインストールした OAuth 構成を選択する必要があります。

適切に構成されていると、ユーザーは IDP にリダイレクトされ、Tableau のトークンが認証および認可されます。Tableau は openid トークンとリフレッシュ トークンを受け取ります。AWS は、IDP からのトークンと署名を検証し、トークンからクレームを抽出して、IAM ロールへのクレームのマッピングを検索し、Tableau がユーザーに代わってロールを引き受けることを許可または拒否します。(例: AssumeRoleWithWebIdentity(新しいウィンドウでリンクが開く))。

トークン

既定では、Redshift OAuth IAM は ID トークンをドライバーに渡します。Tableau Bridge を使用しているお客様を含むオンプレミスのお客様の場合は、代わりに TDC ファイルを使用してアクセス トークンを渡すこともできます。

<connection-customization class='redshift' enabled='true' version='10.0'>
	<vendor name='redshift' />
	<driver name='redshift' />
	<customizations>
		<customization name='CAP_OAUTH_FEDERATE_ACCCESS_TOKEN' value='yes'/>
	</customizations>
</connection-customization>
		

.tdc ファイルの設定とインストールの詳細については、「接続をカスタマイズして調整する」(新しいウィンドウでリンクが開く)および「Tableau Server で .tdc ファイルを使用する」(新しいウィンドウでリンクが開く)を参照してください。

Okta

Okta を使用する場合は、「組織認可サーバー」ではなく「カスタム認可サーバー」を使用することをお勧めします。カスタム認可サーバーはより柔軟です。既定で作成されたカスタム認可サーバーがあり、これは「既定」と呼ばれます。認可 URL は次のようになります。

https://${yourOktaDomain}/oauth2/{authServerName}/v1/authorize

 

ドライバーを更新する

オリジナルの IAM サービスを使用する Redshift OAuth の場合は、次のいずれかを使用できます。

トラブルシューティング

エラーを診断する最善の方法は、問題が発生している状況から Tableau を削除することです。代わりに、ドライバー マネージャーまたは同様のツールを使用してテストすることができます。これはあくまでトラブルシューティングを目的とした作業です。この機能の通常の使用時には DSN や「その他の ODBC」コネクタを使用しないでください。有効なテストを行えるようにするためには、クラスター情報、データベース、トークン、および名前空間を除くパラメーターが以下に示すものと同じである必要があります。

最初の接続時にドライバーから無効/期限切れのトークンに関するエラー メッセージが表示された場合 (エラー メッセージには [28000] や [08001] などの SQLState エラー コードが含まれます)、Tableau は OAuth フローを正常に完了していますが、ドライバーに関して失敗しています。これは、AWS 側または IDP 側のいずれかに設定ミスがあることを意味します。ドライバーからパーミッションまたは認可のエラーが返される場合もありますが、これも Tableau の制御の対象外です。

テストを開始する前に、まず、ドライバーに送信するアクセス トークン (IAM IDC の既定値) または更新トークン (カスタマイズされている場合) を取得する必要があります。

Okta を使用した例を次に示します。ほぼすべての IDP は、同様の方法で Okta を使用します。このフローを使用するには、リソース所有者のパスワード付与タイプを有効にする必要があることに注意してください。IDP URL、クライアント シークレット、クライアント ID、ユーザー名、パスワードを置き換えます。

curl -X POST "https://OKTA_URL/v1/token" \
-H 'accept: application/json' \
-H "Authorization: Basic $(echo -n 'CLIENTID:CLIENTSECRET' | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=password&username=USER&password=PASSWORD&scope=openid"

トークンを取得したら、DSN を使用してテストできます。Windows では、ODBC ドライバー マネージャーを使用できます。Mac では、iODBC ドライバー マネージャー UI を使用できます。Linux では、Tableau Server の customer-bin フォルダーに含まれている isql コマンド ライン ツールを使用できます。

サーバー環境では動作しない可能性があるため、他のプラグインを使用してテストしないことをお勧めします。固定の AWS プロファイルを使用するか、ブラウザーに直接アクセスする必要があります。

以下は、Windows での ODBC ドライバー マネージャーの使用例です。

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