設定 Amazon Redshift IAM OAuth

從 Tableau 2023.3.2 開始,可以使用 OAuth 2.0/OIDC 將外部身分提供程式提供的身分與 Amazon Redshift 結成同盟。

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

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

步驟 1:設定 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 Desktop、Tableau Prep Builder、Tableau Bridge)以及將使用 OAuth 的每個 Tableau Server 和 Tableau Cloud 站台上每個應用程式關聯的 OAuthConfigs 資料夾中安裝新的 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 身分代入角色(連結在新視窗開啟))。

權杖

預設情況下,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 都有一種非常相似的方法來實現上述動作。請注意,要使用此流程,需要啟用資源擁有者密碼授與類型。替代 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 命令列工具。

Tableau 建議不要使用其他外掛程式進行測試,因為它們可能無法在伺服器環境中工作。它們要麼使用固定的 AWS 設定檔,要麼需要直接存取瀏覽器。

以下是在 Windows 上使用 ODBC 驅動程式管理器的範例。

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