

 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/)。

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

# AD FS
<a name="setup-identity-provider-adfs"></a>

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

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

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

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

1. 設定 AD FS 以控制 Microsoft 管理主控台上的 Amazon Redshift 存取：

   1. 選擇 **ADFS 2.0**，然後選擇 **Add Relying Party Trust (新增信賴方信任)**。在 **Add Relying Party Trust Wizard (新增信賴方信任精靈)** 頁面上，選擇 **Start (開始)**。

   1. 在 **Select Data Source (選取資料來源)** 頁面上，選擇 **Import data about the relying party published online or on a local network (匯入關於在線上或本機網路上發佈信賴方的資料)**。

   1. 針對 **Federation metadata address (host name or URL) (聯合中繼資料地址 (主機名稱或 URL))**，輸入 **https://signin.aws.amazon.com/saml-metadata.xml**。中繼資料 XML 檔案是描述 AWS 為依賴方的標準 SAML 中繼資料文件。

   1. 在 **Specify Display Name (指定顯示名稱)** 頁面上，輸入 **Display name (顯示名稱)** 的值。

   1. 在 **Choose Issuance Authorization Rules (選擇發行授權規則)** 頁面上，選擇允許或拒絕所有使用者存取此信賴方的發行授權規則。

   1. 在 **Ready to Add Trust (準備新增信任)** 頁面上檢閱您的設定。

   1. 在 **Finish (完成)** 頁面上，選擇 **Open the Edit Claim Rules dialog for this relying party trust when the wizard closes (當精靈關閉時，開啟此信賴方信任的「編輯宣告規則」對話方塊)**。

   1. 在內容 (按一下滑鼠右鍵) 功能表上，選擇 **Relying Party Trusts (依賴方信任)**。

   1. 針對您的信賴方，開啟內容 (按一下滑鼠右鍵) 功能表，然後選擇 **Edit Claim Rules (編輯宣告規則)**。在 **Edit Claim Rules (編輯宣告規則)** 頁面上，選擇 **Add Rule (新增規則)**。

   1. 在 **Claim rule template (宣告規則範本)** 中，選擇 **Transform an Incoming Claim (轉換傳入宣告)**，然後在 **Edit Rule – NameId (編輯規則 – NameId) ** 頁面上執行下列動作：
      + 針對 **Claim rule name (宣告規則名稱)**，輸入 **NameId**。
      + 針對 **Incoming claim name (傳入宣告名稱)**，選擇 **Windows Account Name (Windows 帳戶名稱)**。
      + 針對 **Outgoing claim name (傳出宣告名稱)**，選擇 **Name ID (名稱 ID)**。
      + 針對 **Outgoing name ID format (傳出名稱 ID 格式)**，選擇 **Persistent Identifier (持久性標識符)**。
      + 選擇 **Pass through all claim values (傳遞所有宣告值)**。

   1. 在 **Edit Claim Rules (編輯宣告規則)** 頁面上，選擇 **Add Rule (新增規則)**。在 **Select Rule Template (選取規則範本)** 頁面上，針對 **Claim rule template (宣告規則範本)**，選擇 **Send LDAP Attributes as Claims (將 LDAP 屬性傳送為宣告)**。

   1. 在 **Configure Rule (設定規則)** 頁面上，執行下列作業：
      + 針對 **Claim rule name (宣告規則名稱)**，輸入 **RoleSessionName**。
      + 針對 **Attribute store (屬性存放區)**，選擇 **Active Directory**。
      + 針對 **LDAP Attribute (LDAP 屬性)**，選擇 **Email Addresses (電子郵件地址)**。
      + 針對 **傳出宣告類型**，選擇 **https://aws.amazon.com/SAML/Attributes/RoleSessionName**。

   1. 在 **Edit Claim Rules (編輯宣告規則)** 頁面上，選擇 **Add Rule (新增規則)**。在 **Select Rule Template (選取規則範本)** 頁面上，針對 **Claim rule template (宣告規則範本)**，選擇 **Send Claims Using a Custom Rule (使用自訂規則傳送宣告)**。

   1. 在 **Edit Rule – Get AD Groups (編輯規則 – 取得 AD 群組)** 頁面上，針對 **Claim rule name (宣告規則名稱)**，輸入 **Get AD Groups (取得 AD 群組)**。

   1. 針對 **Custom rule (自訂規則)**，輸入下列內容。

      ```
      c:[Type ==
                                          "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname",
                                          Issuer == "AD AUTHORITY"] => add(store = "Active Directory",
                                          types = ("http://temp/variable"), query = ";tokenGroups;{0}",
                                          param = c.Value);
      ```

   1. 在 **Edit Claim Rules (編輯宣告規則)** 頁面上，選擇 **Add Rule (新增規則)**。在 **Select Rule Template (選取規則範本)** 頁面上，針對 **Claim rule template (宣告規則範本)**，選擇 **Send Claims Using a Custom Rule (使用自訂規則傳送宣告)**。

   1. 在 **Edit Rule – Roles (編輯規則 – 角色)** 頁面上，針對 **Claim rule name (宣告規則名稱)**，輸入 **Roles (角色)**。

   1. 針對 **Custom rule (自訂規則)**，輸入下列內容。

      ```
      c:[Type == "http://temp/variable", Value =~ "(?i)^AWS-"] => issue(Type = "https://aws.amazon.com/SAML/Attributes/Role", Value = RegExReplace(c.Value, "AWS-", "arn:aws:iam::123456789012:saml-provider/ADFS,arn:aws:iam::123456789012:role/ADFS-"));
      ```

      請記下 SAML 供應商的 ARN，以及要扮演的角色。在此範例中，`arn:aws:iam:123456789012:saml-provider/ADFS` 是 SAML 供應商的 ARN，`arn:aws:iam:123456789012:role/ADFS-` 是角色的 ARN。

1. 請確定您已下載 `federationmetadata.xml` 檔案。檢查文件內容沒有無效的字元。這是您在設定與 AWS的信任關係時，使用的中繼資料檔案。

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)。如需 Azure AD 範例，請參閱[設定 JDBC 或 ODBC 單一登入身分驗證](setup-azure-ad-identity-provider.md)。

## 步驟 2：設定 JDBC 或 ODBC 以對 AD FS 進行身分驗證
<a name="setup-identity-provider-adfs-auth"></a>

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

 下列程序說明如何設定 JDBC 與 AD FS 的關係。
+ 將資料庫用戶端設定為使用 AD FS 單一登入，透過 JDBC 連線到您的叢集。

  您可使用任何採用 JDBC 驅動程式的用戶端使用 AD FS 單一登入進行連線，或使用 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。在**選取連線設定檔**頁面中，新增**設定檔群組**，例如 **ADFS**。

  1. 針對 **Connection Profile (連線設定檔)**，輸入您的連線設定檔名稱，例如 **ADFS**。

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

  1. 在 **Select Connection Profile (選取連線設定檔)** 頁面上，將資訊新增至連線設定檔，如下所示：
     + 針對 **User (使用者)**，輸入您的 AD FS 使用者名稱。這是您用於單一登入之 帳戶的使用者名稱，該帳戶具有您嘗試驗證之叢集的許可。
     + 針對 **Password (密碼)**，輸入您的 AD FS 密碼。
     + 針對 **Drivers (驅動程式)**，選擇 **Amazon Redshift (com.amazon.redshift.jdbc.Driver)**。
     + 針對 **URL**，輸入 **jdbc:redshift:iam://{{your-cluster-identifier}}:{{your-cluster-region}}/{{your-database-name}}**。

  1. 選擇**延伸屬性**。針對 **plugin\_name**，輸入 **com.amazon.redshift.plugin.AdfsCredentialsProvider**。此值會指定驅動程式使用 AD FS 單一登入做為身分驗證方法。

------
#### [ ODBC ]

**設定 ODBC 以對 AD FS 進行身分驗證**
+ 將資料庫用戶端設定為使用 AD FS 單一登入，透過 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 設定檔名稱的資料來源名稱。
  + 針對**驗證類型**，選擇**身分提供者：SAML**。這是 ODBC 驅動程式使用 AD FS 單一登入來進行驗證的身分驗證方法。
  + 針對 **Cluster ID (叢集 ID)**，輸入 **{{your-cluster-identifier}}**。
  + 針對 **Region (區域)**，輸入 **{{your-cluster-region}}**。
  + 針對 **Database (資料庫)**，輸入 **{{your-database-name}}**。
  + 針對 **User (使用者)**，輸入 **{{your-adfs-username}}**。這是您用於單一登入之 AD FS 帳戶的使用者名稱，該帳戶具有您嘗試驗證之叢集的許可。僅在 **Auth Type (驗證類型)** 為**Identity Provider: SAML (身分提供者：SAML)** 的情況下使用此項目。
  + 針對 **Password (密碼)**，輸入 **{{your-adfs-password}}**。僅在 **Auth Type (驗證類型)** 為**Identity Provider: SAML (身分提供者：SAML)** 的情況下使用此項目。

  在 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 登入資料進行身分驗證。
  + 針對 **plugin\_name**，執行下列其中一項作業：
    + 若為具有 MFA 的 AD FS 單一登入組態，請輸入 **BrowserSAML**。這是 ODBC 驅動程式用來驗證 AD FS 的身分驗證方法。
    + 若為 AD FS 單一登入組態，請輸入 **ADFS**。這是 ODBC 驅動程式使用 Azure AD 單一登入來進行驗證的身分驗證方法。
  + 針對 **uid**，輸入 **{{your-adfs-username}}**。這是您用於單一登入之 Microsoft Azure 帳戶的使用者名稱，該帳戶具有您嘗試驗證之叢集的許可。僅在 **plugin\_name** 為 **ADFS** 的情況下使用此項目。
  + 針對 **pwd**，輸入 **{{your-adfs-password}}**。僅在 **plugin\_name** 為 **ADFS** 的情況下使用此項目。

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

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------