Amazon Redshift IAM OAuth の設定

オンプレミス (Tableau Desktop、Tableau Server、および Tableau Prep) では Tableau 2023.3.2 以降、Tableau Cloud では 2024 年 3 月下旬以降、OAuth 2.0/OIDC を使用して、外部 ID プロバイダーから Amazon Redshift に ID をフェデレーションできます。この機能が利用可能になるまで、Tableau Bridge は Tableau Cloud での回避策として使用できます。Bridge の詳細については、「Bridge を使用してデータを最新に保つ」を参照してください。

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

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

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 OAuth 構成ファイルをデスクトップ マシンと Tableau Server または Tableau Cloud サイトにインストールします。

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(新しいウィンドウでリンクが開く))。

Okta

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

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

 

ドライバーを更新する

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

トラブルシューティング

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

これらのエラーを診断する最良の方法は、問題の状況から Tableau を削除することです。まず、ドライバーに送信する ID トークン (既定) またはアクセス トークン (カスタマイズされている場合) を取得する必要があります。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 コマンド ライン ツールを使用できます。

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