自 2025 年 11 月 1 日起,Amazon Redshift 將不再支援建立新的 Python UDFs。如果您想要使用 Python UDFs,請在該日期之前建立 UDFs。現有的 Python UDFs將繼續如常運作。如需詳細資訊,請參閱部落格文章
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Azure
您可以使用 Microsoft Azure AD 作為身分提供者 (IdP) 來存取您的 Amazon Redshift 叢集。本教學課程說明如何使用 Azure 做為身分提供者 (IdP) 來存取 Amazon Redshift 叢集。
如要了解如何搭配 Microsoft Azure AD 單一登入聯合 Amazon Redshift 存取,請觀看以下影片。
步驟 1:設定 Azure 和 AWS 您的帳戶彼此信任
下列程序說明如何設定信任關係。
設定 Azure AD 和 AWS 您的帳戶彼此信任
-
建立或使用現有的 Amazon Redshift 叢集,以供 Azure AD 使用者連線。若要設定連線,則需要此叢集的特定屬性,例如叢集識別碼。如需詳細資訊,請參閱建立叢集。
-
在 Microsoft Azure 入口網站 AWS 上設定用於 的 Azure Active Directory、群組和使用者。
-
在 Microsoft Azure 入口網站上將 Amazon Redshift 新增為企業應用程式,以用於 AWS 主控台的單一登入和 Amazon Redshift 的聯合登入。選擇 Enterprise application (企業應用程式)。
-
選擇 +New application (新增應用程式)。新增應用程式頁面隨即顯示。
-
在搜尋欄位中搜尋
AWS
。 -
選擇 Amazon Web Services (AWS),然後選擇新增。此操作會建立 AWS 應用程式。
-
在 Manage (管理) 下方,選擇 Single sign-on (單一登入)。
-
選擇 SAML。Amazon Web Services (AWS) | 以 SAML 為基礎的登入頁面隨即顯示。
-
選擇 Yes (是),繼續進行「使用 SAML 頁面設定單一登入」。此頁面會顯示預先設定的單一登入相關屬性清單。
-
在 Basic SAML Configuration (基本 SAML 組態) 中,選擇編輯圖示並選擇 Save (儲存)。
-
設定超過一個應用程式時,請提供識別碼值。例如,輸入
。請注意,從第二個應用程式開始,請使用此格式搭配 # 符號來指定唯一的 SPN 值。https://signin.aws.amazon.com/saml#2
-
在 User Attributes and Claims (使用者屬性和宣告) 區段中選擇編輯圖示。
根據預設,唯一使用者標識符 (UID)、角色、RoleSessionName 和 SessionDuration 宣告都是預先設定的。
-
選擇 + Add new claim (新增宣告) 來新增資料庫使用者的宣告。
對於名稱,輸入
DbUser
。針對 Namespace (命名空間),輸入
https://redshift.amazon.com/SAML/Attributes
。針對 Source (來源),選擇 Attribute (屬性)。
針對 Source attribute (來源屬性),選擇 user.userprincipalname。然後選擇 Save (儲存)。
-
選擇 + Add new claim (新增宣告) 來新增 AutoCreate 的宣告。
對於名稱,輸入
AutoCreate
。針對 Namespace (命名空間),輸入
https://redshift.amazon.com/SAML/Attributes
。針對 Source (來源),選擇 Attribute (屬性)。
針對 Source attribute (來源屬性),選擇 “true”。然後選擇 Save (儲存)。
在此,
是您的 AWS 帳戶,123456789012
是您建立的 IAM 角色,而AzureSSO
是 IAM 提供者。AzureADProvider
宣告名稱 Value 唯一使用者識別碼 (名稱 ID)
user.userprincipalname
https://aws.amazon.com/SAML/Attributes/SessionDuration
"900"
https://aws.amazon.com/SAML/Attributes/Role
arn:aws:iam::
123456789012
:role/AzureSSO
,arn:aws:iam::123456789012
:saml-provider/AzureADProvider
https://aws.amazon.com/SAML/Attributes/RoleSessionName
user.userprincipalname
https://redshift.amazon.com/SAML/Attributes/AutoCreate
“true”
https://redshift.amazon.com/SAML/Attributes/DbGroups
user.assignedroles
https://redshift.amazon.com/SAML/Attributes/DbUser
user.userprincipalname
-
在 App Registration (應用程式註冊) >
> Authentication (身分驗證) 下方,新增 Mobile And Desktop Application (行動和桌面應用程式)。將 URL 指定為 http://localhost/redshift。your-application-name
-
在 SAML Signing Certificate (SAML 簽署憑證) 區段中,選擇 Download (下載) 以下載並儲存聯合中繼資料 XML 檔案,以便在建立 IAM SAML 身分提供者時使用。此檔案用於建立單一登入聯合身分。
-
在 IAM 主控台上建立 IAM SAML 身分提供者。您所提供的中繼資料文件,是您在設定 Azure 企業應用程式時儲存的聯合中繼資料 XML 檔案。如需詳細步驟,請參閱《IAM 使用者指南》中的建立和管理 IAM 身分提供者 (主控台)。
-
在 IAM 主控台上建立 SAML 2.0 聯合的 IAM 角色。如需詳細步驟,請參閱《IAM 使用者指南》中的為 SAML 建立角色。
建立 IAM 政策,您可將其附加至您在 IAM 主控台上為 SAML 2.0 聯合建立的 IAM 角色。如需詳細步驟,請參閱《IAM 使用者指南》中的建立 IAM 政策 (主控台)。
為您的環境修改下列政策 (JSON 格式):
將叢集 AWS 的區域替換為
。us-west-1
將 AWS 您的帳戶替換為
。123456789012
以您的叢集識別碼 (或
*
代表所有叢集) 代替
。cluster-identifier
以您的資料庫 (或
*
代表所有資料庫) 代替
。dev
以 IAM 角色的唯一識別碼代替
。AROAJ2UCCR6DPCEXAMPLE
以您的租用戶或公司電子郵件網域代替
。example.com
以您計劃為其指派使用者的資料庫群組代替
。my_dbgroup
{ "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
:123456789012
:dbuser:cluster-identifier
/${redshift:DbUser}" }, { "Effect": "Allow", "Action": "redshift:JoinGroup", "Resource": "arn:aws:redshift:us-west-1
:123456789012
:dbgroup:cluster-identifier
/my_dbgroup
" }, { "Effect": "Allow", "Action": [ "redshift:DescribeClusters", "iam:ListRoles" ], "Resource": "*" } ] }此政策會授與許可,如下所示:
第一個區段會授與
GetClusterCredentials
API 操作的許可,以取得所指定叢集的暫時性登入資料。在此範例中,資源是
,其具有資料庫cluster-identifier
、位於帳戶dev
、並位於 AWS 區域123456789012
。us-west-1
${redshift:DbUser}
子句只允許符合 Azure AD 中指定DbUser
值的使用者連線。條件子句會強制只有特定使用者會取得臨時登入資料。這些是依據貴公司電子郵件網域中的電子郵件地址所識別的 IAM 帳戶中,具備角色唯一 ID
所指定角色的使用者。如需唯一 ID 的相關資訊,請參閱《IAM 使用者指南》中的唯一 ID。AROAJ2UCCR6DPCEXAMPLE
您所設定的 IdP (在此案例中為 Azure AD) 會決定條件子句的撰寫方式。如果您的員工電子郵件是
johndoe@example.com
,請先將${redshift:DbUser}
設定為符合員工使用者名稱johndoe
的超級欄位。然後將 AWS SAMLRoleSessionName
欄位設定為符合員工電子郵件johndoe@example.com
的超級欄位,讓此條件發揮作用。當您採取這種方法時,請考慮下列事項:如果您將
${redshift:DbUser}
設定為員工的電子郵件,然後移除範例 JSON 中符合RoleSessionName
的@example.com
。如果您將
RoleSessionId
設定為員工的使用者名稱,然後移除範例中符合RoleSessionName
的@example.com
。在範例 JSON 中,
${redshift:DbUser}
和RoleSessionName
均設定為員工的電子郵件。此範例 JSON 會使用 Amazon Redshift 資料庫使用者名稱搭配@example.com
,讓使用者登入以存取叢集。
第二個區段會授與許可,以在指定的叢集中建立
dbuser
名稱。在此範例 JSON 中,其會將建立限制於${redshift:DbUser}
。第三個區段會授與許可,以指定使用者可以加入的
dbgroup
。在此範例 JSON 中,使用者可以加入指定叢集中的my_dbgroup
群組。第四個區段會授予使用者可對所有資源執行動作的許可。在此範例 JSON 中,它允許使用者呼叫
redshift:DescribeClusters
以取得叢集資訊,例如叢集端點、 AWS 區域和連接埠。此外,還可允許使用者呼叫iam:ListRoles
,以檢查使用者可以擔任哪些角色。
步驟 2:設定 JDBC 或 ODBC 以向 Azure 進行身分驗證
故障診斷
若要疑難排解瀏覽器 Azure AD 外掛程式的問題,請考慮下列事項。
-
若要使用瀏覽器 Azure AD 外掛程式,您必須設定請求中指定的回覆 URL,以符合為您的應用程式設定的回覆 URL。瀏覽至 Microsoft Azure 入口網站上的 Set up Single Sign-On with SAML (使用 SAML 設定單一登入) 頁面。然後檢查回覆網址 是否設定為 http://localhost/redshift/。
-
如果您收到 IdP 租用戶錯誤,請確認 IdP 租用戶名稱與您最初用來設定 Microsoft Azure 中使用中目錄的網域名稱相符。
在 Windows 上,導覽至 Amazon Redshift ODBC DSN 設定頁面的連線設定區段。接著檢查您在 IdP (Azure) 上設定的公司租用戶名稱是否與您最初用來在 Microsoft Azure 中設定使用中目錄的網域名稱相符。
在 macOS 和 Linux 上,找到這個 odbc.ini 檔案。接著檢查您在 IdP (Azure) 上設定的公司租用戶名稱是否與您最初用來在 Microsoft Azure 中設定使用中目錄的網域名稱相符。
-
如果您收到請求中指定的回覆 URL 與為應用程式設定的回覆 URL 不相符的錯誤,請確認重新導向 URI 與回覆 URL 相同。
瀏覽至 Microsoft Azure 入口網站上應用程式的 App registration (應用程式註冊) 頁面。然後檢查重新導向 URI 與回覆 URL 是否相符。
-
如果您收到未經授權的回應:未經授權的錯誤,請確認您已完成行動裝置和桌面應用程式組態。
瀏覽至 Microsoft Azure 入口網站上應用程式的 App registration (應用程式註冊) 頁面。然後瀏覽至 Authentication (驗證),並檢查您已將行動裝置和桌面應用程式設定為使用 http://localhost/redshift/ 做為重新導向 URI。