

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Azure
<a name="setup-identity-provider-azure"></a>

您可以使用 Microsoft Azure AD 作為身分提供者 (IdP) 來存取您的 Amazon Redshift 叢集。本教學課程說明如何使用 Azure 作為身分提供者 (IdP) 來存取您的 Amazon Redshift 叢集。

如要了解如何搭配 Microsoft Azure AD 單一登入聯合 Amazon Redshift 存取，請觀看以下影片。

[![AWS Videos](http://img.youtube.com/vi/aXs9hEgJCss/0.jpg)](http://www.youtube.com/watch?v=aXs9hEgJCss)


## 步驟 1：設定 Azure 和 AWS 您的帳戶彼此信任
<a name="setup-identity-provider-azure-trust"></a>

下列程序說明如何設定信任關係。

**設定 Azure AD 和 AWS 您的帳戶彼此信任**

1. 建立或使用現有的 Amazon Redshift 叢集，以供 Azure AD 使用者連線。若要設定連線，則需要此叢集的特定屬性，例如叢集識別碼。如需詳細資訊，請參閱[建立叢集](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html)。

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

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

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

1. 在搜尋欄位中搜尋 **AWS**。

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

1. 在 **Manage (管理)** 下方，選擇 **Single sign-on (單一登入)**。

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

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

1. 在 **Basic SAML Configuration (基本 SAML 組態)** 中，選擇編輯圖示並選擇 **Save (儲存)**。

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

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

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

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

   對於**名稱**，輸入 **DbUser**。

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

   針對 **Source (來源)**，選擇 **Attribute (屬性)**。

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

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

   對於**名稱**，輸入 **AutoCreate**。

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

   針對 **Source (來源)**，選擇 **Attribute (屬性)**。

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

   在此，`{{123456789012}}` 是您的 AWS 帳戶，{{`AzureSSO`}} 是您建立的 IAM 角色，而 {{`AzureADProvider`}} 是 IAM 提供者。    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/redshift/latest/mgmt/setup-identity-provider-azure.html)

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

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

1. 在 IAM 主控台上建立 IAM SAML 身分提供者。您所提供的中繼資料文件，是您在設定 Azure 企業應用程式時儲存的聯合中繼資料 XML 檔案。如需詳細步驟，請參閱《IAM 使用者指南》**中的[建立和管理 IAM 身分提供者 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)。

1. 在 IAM 主控台上建立 SAML 2.0 聯合的 IAM 角色。如需詳細步驟，請參閱《IAM 使用者指南》**中的[為 SAML 建立角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)。

1. 建立 IAM 政策，您可將其附加至您在 IAM 主控台上為 SAML 2.0 聯合建立的 IAM 角色。如需詳細步驟，請參閱《IAM 使用者指南》**中的[建立 IAM 政策 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)。

   為您的環境修改下列政策 (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](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)。

     您所設定的 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 進行身分驗證
<a name="setup-identity-provider-azure-auth"></a>

------
#### [ JDBC ]

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

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

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

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

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

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

  1. 針對 **Connection Profile (連線設定檔)**，輸入 **Azure**。

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

  1. 在 **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}}**。

  1. 選擇 **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\_name** 為 **AzureAD** 的情況下使用此項目。
  + 針對 **pwd**，輸入 **{{your-azure-password}}**。僅在 **plugin\_name** 為 **AzureAD** 的情況下使用此項目。
  + 針對 **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
  ```

------

## 疑難排解
<a name="setup-identity-provider-azure-auth"></a>

若要對瀏覽器 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。