Azure - Amazon Redshift

自 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 您的帳戶彼此信任
  1. 建立或使用現有的 Amazon Redshift 叢集,以供 Azure AD 使用者連線。若要設定連線,則需要此叢集的特定屬性,例如叢集識別碼。如需詳細資訊,請參閱建立叢集

  2. 在 Microsoft Azure 入口網站 AWS 上設定用於 的 Azure Active Directory、群組和使用者。

  3. 在 Microsoft Azure 入口網站上將 Amazon Redshift 新增為企業應用程式,以用於 AWS 主控台的單一登入和 Amazon Redshift 的聯合登入。選擇 Enterprise application (企業應用程式)

  4. 選擇 +New application (新增應用程式)。新增應用程式頁面隨即顯示。

  5. 在搜尋欄位中搜尋 AWS

  6. 選擇 Amazon Web Services (AWS),然後選擇新增。此操作會建立 AWS 應用程式。

  7. Manage (管理) 下方,選擇 Single sign-on (單一登入)

  8. 選擇 SAML。Amazon Web Services (AWS) | 以 SAML 為基礎的登入頁面隨即顯示。

  9. 選擇 Yes (是),繼續進行「使用 SAML 頁面設定單一登入」。此頁面會顯示預先設定的單一登入相關屬性清單。

  10. Basic SAML Configuration (基本 SAML 組態) 中,選擇編輯圖示並選擇 Save (儲存)

  11. 設定超過一個應用程式時,請提供識別碼值。例如,​輸入 https://signin.aws.amazon.com/saml#2。請注意,從第二個應用程式開始,請使用此格式搭配 # 符號來指定唯一的 SPN 值。

  12. User Attributes and Claims (使用者屬性和宣告) 區段中選擇編輯圖示。

    根據預設,唯一使用者標識符 (UID)、角色、RoleSessionName 和 SessionDuration 宣告都是預先設定的。

  13. 選擇 + Add new claim (新增宣告) 來新增資料庫使用者的宣告。

    對於名稱,輸入 DbUser

    針對 Namespace (命名空間),輸入 https://redshift.amazon.com/SAML/Attributes

    針對 Source (來源),選擇 Attribute (屬性)

    針對 Source attribute (來源屬性),選擇 user.userprincipalname。然後選擇 Save (儲存)

  14. 選擇 + Add new claim (新增宣告) 來新增 AutoCreate 的宣告。

    對於名稱,輸入 AutoCreate

    針對 Namespace (命名空間),輸入 https://redshift.amazon.com/SAML/Attributes

    針對 Source (來源),選擇 Attribute (屬性)

    針對 Source attribute (來源屬性),選擇 “true”。然後選擇 Save (儲存)

    在此,123456789012 是您的 AWS 帳戶,AzureSSO 是您建立的 IAM 角色,而 AzureADProvider 是 IAM 提供者。

    宣告名稱 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

  15. App Registration (應用程式註冊) > your-application-name > Authentication (身分驗證) 下方,新增 Mobile And Desktop Application (行動和桌面應用程式)。將 URL 指定為 http://localhost/redshift。

  16. SAML Signing Certificate (SAML 簽署憑證) 區段中,選擇 Download (下載) 以下載並儲存聯合中繼資料 XML 檔案,以便在建立 IAM SAML 身分提供者時使用。此檔案用於建立單一登入聯合身分。

  17. 在 IAM 主控台上建立 IAM SAML 身分提供者。您所提供的中繼資料文件,是您在設定 Azure 企業應用程式時儲存的聯合中繼資料 XML 檔案。如需詳細步驟,請參閱《IAM 使用者指南》中的建立和管理 IAM 身分提供者 (主控台)

  18. 在 IAM 主控台上建立 SAML 2.0 聯合的 IAM 角色。如需詳細步驟,請參閱《IAM 使用者指南》中的為 SAML 建立角色

  19. 建立 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、位於帳戶 123456789012、並位於 AWS 區域 us-west-1${redshift:DbUser} 子句只允許符合 Azure AD 中指定 DbUser 值的使用者連線。

    • 條件子句會強制只有特定使用者會取得臨時登入資料。這些是依據貴公司電子郵件網域中的電子郵件地址所識別的 IAM 帳戶中,具備角色唯一 ID AROAJ2UCCR6DPCEXAMPLE 所指定角色的使用者。如需唯一 ID 的相關資訊,請參閱《IAM 使用者指南》中的唯一 ID

      您所設定的 IdP (在此案例中為 Azure AD) 會決定條件子句的撰寫方式。如果您的員工電子郵件是 johndoe@example.com,請先將 ${redshift:DbUser} 設定為符合員工使用者名稱 johndoe 的超級欄位。然後將 AWS SAML RoleSessionName 欄位設定為符合員工電子郵件 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 進行身分驗證

JDBC
設定 JDBC 以對 Microsoft Azure AD 進行身分驗證
  • 將資料庫用戶端設定為使用 Azure AD 單一登入,透過 JDBC 連線到您的叢集。

    您可使用任何採用 JDBC 驅動程式的用戶端使用 Azure AD 單一登入進行連線,或使用 Java 之類的語言透過指令碼進行連線。如需安裝和組態資訊,請參閱 為 Amazon Redshift 設定 JDBC 驅動程式 2.x 版的連線

    例如,您可以使用 SQLWorkbench/J 作為用戶端。當您設定 SQLWorkbench /J 時,您的資料庫 URL 會使用下列格式。

    jdbc:redshift:iam://cluster-identifier:us-west-1/dev

    如果您使用 SQLWorkbench /J 作為用戶端,請執行下列步驟:

    1. 啟動 SQL Workbench/J。在選取連線設定檔頁面上,新增名為 AzureAuth設定檔群組

    2. 針對 Connection Profile (連線設定檔),輸入 Azure

    3. 選擇 Manage Drivers (管理驅動程式),然後選擇 Amazon Redshift。選擇程式庫旁邊的開啟資料夾圖示,然後選擇適當的 JDBC .jar 檔案。

    4. Select Connection Profile (選取連線設定檔) 頁面上,將資訊新增至連線設定檔,如下所示:

      • 針對 User (使用者),輸入您的 Microsoft Azure 使用者名稱。這是您用於單一登入之 Microsoft Azure 帳戶的使用者名稱,該帳戶具有您嘗試驗證之叢集的許可。

      • 針對 Password (密碼),輸入您的 Microsoft Azure 密碼。

      • 針對 Drivers (驅動程式),選擇 Amazon Redshift (com.amazon.redshift.jdbc.Driver)

      • 針對 URL,輸入 jdbc:redshift:iam://your-cluster-identifier:your-cluster-region/your-database-name

    5. 選擇 Extended Properties (擴充屬性) 以將其他資訊新增至連線屬性,如下所述。

      針對 Azure AD 單一登入組態新增其他資訊,如下所示:

      • 針對 plugin_name,輸入 com.amazon.redshift.plugin.AzureCredentialsProvider。此值會指定驅動程式使用 Azure AD 單一登入做為身分驗證方法。

      • 針對 idp_tenant,輸入 your-idp-tenant。僅用於 Microsoft Azure AD。這是您在 Azure AD 上設定的公司租用戶名稱。此值可以是租用戶名稱或租用戶唯一 ID (含連字號)。

      • 針對 client_secret,輸入 your-azure-redshift-application-client-secret。僅用於 Microsoft Azure AD。這是您在設定 Azure 單一登入組態時所建立之 Amazon Redshift 應用程式的用戶端秘密。這只適用於 com.amazon.redshift.plugin.AzureCredentialsProvider 外掛程式。

      • 針對 client_id,輸入 your-azure-redshift-application-client-id。僅用於 Microsoft Azure AD。這是您在設定 Azure 單一登入組態時所建立之 Amazon Redshift 應用程式的用戶端 ID (含連字號)。

      針對具有 MFA 的 Azure AD 單一登入組態,將其他資訊新增至連線屬性,如下所示:

      • 針對 plugin_name,輸入 com.amazon.redshift.plugin.BrowserAzureCredentialsProvider。此值會指定驅動程式使用具有 MFA 的 Azure AD 單一登入做為身分驗證方法。

      • 針對 idp_tenant,輸入 your-idp-tenant。僅用於 Microsoft Azure AD。這是您在 Azure AD 上設定的公司租用戶名稱。此值可以是租用戶名稱或租用戶唯一 ID (含連字號)。

      • 針對 client_id,輸入 your-azure-redshift-application-client-id。此選項僅用於 Microsoft Azure AD。這是您在設定具有 MFA 的 Azure AD 單一登入組態時所建立之 Amazon Redshift 應用程式的用戶端 ID (含連字號)。

      • 針對 listen_port,輸入 your-listen-port。這是本機伺服器接聽的連接埠。預設值為 7890。

      • 針對 idp_response_timeout,輸入 the-number-of-seconds。這是 IdP 伺服器傳回回應時,在逾時之前等待的秒數。秒數的下限必須為 10。如果建立連線所花的時間超過此臨界值,連線會中止。

ODBC
設定 ODBC 以對 Microsoft Azure AD 進行身分驗證
  • 將資料庫用戶端設定為使用 Azure AD 單一登入,透過 ODBC 連線到您的叢集。

    Amazon Redshift 會提供適用於 Linux、Windows 和 macOS 作業系統的 ODBC 驅動程式。安裝 ODBC 驅動程式之前,查明 SQL 用戶端工具是 32 位元或 64 位元。安裝符合 SQL 用戶端工具需求的 ODBC 驅動程式。

    在 Windows 上,於 Amazon Redshift ODBC Driver DSN Setup (Amazon Redshift ODBC 驅動程式 DSN 設定) 頁面的 Connection Settings (連線設定) 之下,輸入下列資訊:

    • 針對 Data source name (資料來源名稱),輸入 your-DSN。這會指定作為 ODBC 設定檔名稱的資料來源名稱。

    • 針對 Azure AD 單一登入組態的驗證類型,請選擇 Identity Provider: Azure AD。這是 ODBC 驅動程式使用 Azure 單一登入來進行驗證的身分驗證方法。

    • 針對具有 MFA 的 Azure AD 單一登入組態的驗證類型,請選擇 Identity Provider: Browser Azure AD。這是 ODBC 驅動程式使用具有 MFA 之 Azure 單一登入來進行驗證的身分驗證方法。

    • 針對 Cluster ID (叢集 ID),輸入 your-cluster-identifier

    • 針對 Region (區域),輸入 your-cluster-region

    • 針對 Database (資料庫),輸入 your-database-name

    • 針對 User (使用者),輸入 your-azure-username。這是您用於單一登入之 Microsoft Azure 帳戶的使用者名稱,該帳戶具有您嘗試驗證之叢集的許可。僅在 Auth Type (驗證類型)Identity Provider: Azure AD (身分提供者:Azure AD) 的情況下使用此項目。

    • 針對 Password (密碼),輸入 your-azure-password。僅在 Auth Type (驗證類型)Identity Provider: Azure AD (身分提供者:Azure AD) 的情況下使用此項目。

    • 針對 IdP Tenant (IdP 租用戶),輸入 your-idp-tenant。這是您在 IdP (Azure) 上設定的公司租用戶名稱。此值可以是租用戶名稱或租用戶唯一 ID (含連字號)。

    • 針對 Azure Client Secret (Azure 用戶端密碼),輸入 your-azure-redshift-application-client-secret。這是您在設定 Azure 單一登入組態時所建立之 Amazon Redshift 應用程式的用戶端秘密。

    • 針對 Azure Client ID (Azure 用戶端 ID),輸入 your-azure-redshift-application-client-id。這是您在設定 Azure 單一登入組態時所建立之 Amazon Redshift 應用程式的用戶端 ID (含連字號)。

    • 針對 Listen Port (接聽連接埠),輸入 your-listen-port。這是本機伺服器接聽的預設接聽連接埠。預設值為 7890。這僅適用於瀏覽器 Azure AD 外掛程式。

    • 針對 Response Timeout (回應逾時),輸入 the-number-of-seconds。這是 IdP 伺服器傳回回應時,在逾時之前等待的秒數。秒數的下限必須為 10。如果建立連線所花的時間超過此臨界值,連線會中止。此選項僅適用於瀏覽器 Azure AD 外掛程式。

    在 macOS 和 Linux 上,編輯 odbc.ini 檔案,如下所示:

    注意

    所有項目都不區分大小寫。

    • 針對 clusterid,輸入 your-cluster-identifier。這是所建立 Amazon Redshift 叢集的名稱。

    • 針對 region (區域),輸入 your-cluster-region。這是所建立 Amazon Redshift 叢集 AWS 的區域。

    • 針對 database (資料庫),輸入 your-database-name。這是您嘗試在 Amazon Redshift 叢集上存取的資料庫名稱。

    • 針對 locale,輸入 en-us。這是錯誤訊息的顯示語言。

    • 針對 iam,輸入 1。此值指定驅動程式使用 IAM 登入資料進行身分驗證。

    • 如需 Azure AD 單一登入組態的 plugin_name,請輸入 AzureAD。這會指定驅動程式使用 Azure 單一登入作為身分驗證方法。

    • 如需具有 MFA 的 Azure AD 單一登入組態的 plugin_name,請輸入 BrowserAzureAD。這會指定驅動程式使用具有 MFA 的 Azure 單一登入做為身分驗證方法。

    • 針對 uid,輸入 your-azure-username。這是您用於單一登入之 Microsoft Azure 帳戶的使用者名稱,該帳戶具有您嘗試驗證之叢集的許可。僅在 plugin_nameAzureAD 的情況下使用此項目。

    • 針對 pwd,輸入 your-azure-password。僅在 plugin_nameAzureAD 的情況下使用此項目。

    • 針對 idp_tenant,輸入 your-idp-tenant。這是您在 IdP (Azure) 上設定的公司租用戶名稱。此值可以是租用戶名稱或租用戶唯一 ID (含連字號)。

    • 針對 client_secret,輸入 your-azure-redshift-application-client-secret。這是您在設定 Azure 單一登入組態時所建立之 Amazon Redshift 應用程式的用戶端秘密。

    • 針對 client_id,輸入 your-azure-redshift-application-client-id。這是您在設定 Azure 單一登入組態時所建立之 Amazon Redshift 應用程式的用戶端 ID (含連字號)。

    • 針對 listen_port,輸入 your-listen-port。這是本機伺服器接聽的連接埠。預設值為 7890。這適用於瀏覽器 Azure AD 外掛程式。

    • 針對 idp_response_timeout,輸入 the-number-of-seconds。這是等待 Azure 回應的指定時間期間 (秒)。此選項適用於瀏覽器 Azure AD 外掛程式。

    在 macOS 和 Linux 上,同時編輯設定檔設定以新增下列匯出:

    export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
    export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini

故障診斷

若要疑難排解瀏覽器 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。