設定 Amazon Redshift IAM OAuth

從內部部署的 Tableau 2023.3.2(Tableau Desktop、Tableau Server 和 Tableau Prep)開始以及 2024 年 3 月下旬的 Tableau Cloud 開始,您可以使用 OAuth 2.0/OIDC 將外部身分提供程式的身分與 Amazon Redshift 組成同盟。

這些說明適用於舊版 AWS IAM 服務。對於 IAM IDC 整合,請參閱設定 Amazon Redshift IAM 身分中心 OAuth

根據身分提供程式的不同,設定整合需要執行不同的步驟。這是一個高層級的概觀。Tableau 無法提供如何設定 AWS 或 IDP 的詳細說明,但一般方法如下所述。

設定 IDP

  1. 在 Tableau Desktop、Tableau Server 或 Tableau Cloud 的 IDP 上建立 OAuth 用戶端。Desktop 用戶端應啟用 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 不支援此功能,請確保將多個本機主機回呼 URL 新增至設定檔和 IDP 上的允許清單中。

  4. 在桌面電腦和 Tableau Server 或 Tableau Cloud 站台上安裝 Tableau OAuth 設定檔。

在 AWS 上設定 IDP

1.在 AWS 上建立 IDP 模型。請參閱 Amazon 文件 Web 身分同盟(連結在新視窗開啟)建立 OIDC 身分提供程式(連結在新視窗開啟)

2. 專門為 IDP 建立角色和原則。請參閱 AWS 文件中的為 OIDC 建立角色(連結在新視窗開啟)

為 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 代表使用者代入角色。(換句話說,透過 Web 身分代入角色(連結在新視窗開啟))。

Okta

若使用 Okta,最好使用「自訂授權伺服器」,而不是「組織授權伺服器」。自訂授權伺服器具有更多彈性。系統會預設建立一個自訂授權伺服器,稱為「預設」。授權 URL 應如下所示:

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

 

更新驅動程式

對於使用原始 IAM 服務的 Redshift OAuth,可以使用:

疑難排解

若在第一次連線時看到來自驅動程式的權杖無效/過期的錯誤訊息(錯誤訊息中將包含類似 [28000] 或 [08001] 的 SQLState 錯誤碼),那麼我們已成功完成 OAuth 流程,並且驅動程式失敗。這表示 AWS 端或 IDP 端存在設定錯誤。驅動程式也可能傳回權限或授權錯誤,這也是我們無法控制的。

診斷這些錯誤的最佳方法是從圖片中移除 Tableau。您首先需要取得 ID 權杖(預設)或存取權杖(若自訂),以傳送給驅動程式。這是 Okta 的範例。幾乎所有 IDP 都有一種非常相似的方法來實現上述動作。請注意,要使用此流程,需要啟用資源擁有者密碼授與類型。替代 IDP URL、用戶端金鑰、用戶端識別碼、使用者名稱和密碼。

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 命令列工具。

感謝您的意見反應!已成功提交您的意見回饋。謝謝!