

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/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 和您的 Amazon 账户相互信任
<a name="setup-identity-provider-adfs-trust"></a>

 以下过程介绍如何建立信任关系。

1. 创建或使用现有的 Amazon Redshift 集群，以使 AD FS 用户连接到该集群。要配置连接，需要此集群的某些属性，例如集群标识符。有关更多信息，请参阅[创建集群](https://docs.amazonaws.cn/redshift/latest/mgmt/create-cluster.html)。

1. 在 Microsoft 管理控制台上设置 AD FS 以控制 Amazon Redshift 访问：

   1. 选择 **ADFS 2.0**，然后选择**添加信赖方信任**。在**添加信赖方信任向导**页面上，选择**开始**。

   1. 在**选择数据源**页面上，选择**导入有关在线或在本地网络上发布的信赖方的数据**。

   1. 对于**联合元数据地址(主机名或 URL)**，请输入 **https://signin.aws.amazon.com/saml-metadata.xml**。元数据 XML 文件是将 Amazon 描述为信赖方的标准 SAML 元数据文档。

   1. 在**指定显示名称**页面上，输入**显示名称**的值。

   1. 在**选择颁发授权规则**页面上，选择一个颁发授权规则以允许或拒绝所有用户访问该信赖方。

   1. 在**准备好添加信任**页面上，查看您的设置。

   1. 在**完成**页面上，选择**向导关闭时打开此信赖方信任的“编辑声明规则”对话框**。

   1. 在上下文（右键单击）菜单上，选择**信赖方信任**。

   1. 对于您的信赖方，打开上下文（右键单击）菜单，然后选择**编辑声明规则**。在**编辑声明规则**页面上，选择**添加规则**。

   1. 对于**声明规则模板**，请选择**转换传入声明**，然后在**编辑规则 - NameId** 页面上执行以下操作：
      + 对于**声明规则名称**，请输入 **NameId**。
      + 对于**传入声明名称**，请选择 **Windows 账户名**。
      + 对于**传出声明名称**，请选择**名称 ID**。
      + 对于**传出名称 ID 格式**，请选择**持久性标识符**。
      + 选择**传递所有声明值**。

   1. 在**编辑声明规则**页面上，选择**添加规则**。在**选择规则模板**页面上，对于**声明规则模板**，请选择**以声明方式发送 LDAP 特性**。

   1. 在**配置规则**页面上，执行以下操作：
      + 对于**声明规则名称**，请输入 **RoleSessionName**。
      + 对于**特性存储**，请选择 **Active Directory**。
      + 对于 **LDAP 特性**，请选择**电子邮件地址**。
      + 对于**传出声明类型**，选择 **https://aws.amazon.com/SAML/Attributes/RoleSessionName**。

   1. 在**编辑声明规则**页面上，选择**添加规则**。在**选择规则模板**页面上，对于**声明规则模板**，请选择**使用自定义规则发送声明**。

   1. 在**编辑规则 - 获取 AD 组**页面上，对于**声明规则名称**，请输入**获取 AD 组**。

   1. 对于**自定义规则**，请输入以下内容。

      ```
      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. 在**编辑声明规则**页面上，选择**添加规则**。在**选择规则模板**页面上，对于**声明规则模板**，请选择**使用自定义规则发送声明**。

   1. 在**编辑规则 - 角色**页面上，对于**声明规则名称**，请键入**角色**。

   1. 对于**自定义规则**，请输入以下内容。

      ```
      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` 文件。检查以确认文档内容不包含无效的字符。这是在配置与 Amazon 的信任关系时使用的元数据文件。

1. 在 IAM 控制台上创建 IAM SAML 身份提供者。您提供的元数据文档是您在设置 Azure 企业应用程序时保存的联合元数据 XML 文件。有关详细步骤，请参阅《IAM 用户指南》**中的[创建和管理 IAM 身份提供者（控制台）](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)。

1. 在 IAM 控制台上为 SAML 2.0 联合身份创建 IAM 角色。有关详细步骤，请参阅 *IAM 用户指南*中的[创建用于 SAML 的角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)。

1. 创建一个 IAM 策略，您可以将其附加到您在 IAM 控制台上为 SAML 2.0 联合身份验证创建的 IAM 角色。有关详细步骤，请参阅《IAM 用户指南》**中的[创建 IAM 策略（控制台）](https://docs.amazonaws.cn/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 ]

 以下过程介绍如何设置与 AD FS 的 JDBC 关系。
+ 将数据库客户端配置为通过 JDBC 并使用 AD FS 单点登录连接到集群。

  您可以使用任何采用 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. 对于**连接配置文件**，请输入您的连接配置文件名称，例如 **ADFS**。

  1. 选择**管理驱动程序**，然后选择 **Amazon Redshift**。选择**库**旁边的**打开文件夹**图标，然后选择适当的 JDBC .jar 文件。

  1. 在**选择连接配置文件**页面上，向连接配置文件添加信息，如下所示：
     + 对于**用户**，请输入您的 AD FS 用户名。这是您用于单点登录的账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。
     + 对于**密码**，请输入您的 AD FS 密码。
     + 对于**驱动程序**，请选择 **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 中进行身份验证**
+ 将数据库客户端配置为通过 ODBC 并使用 AD FS 单点登录连接到集群。

  Amazon Redshift 提供了适用于 Linux、Windows 和 macOS 操作系统的 ODBC 驱动程序。在安装 ODBC 驱动程序之前，请确定您的 SQL 客户端工具是 32 位还是 64 位。安装符合 SQL 客户端工具要求的 ODBC 驱动程序。

  在 Windows 上的 **Amazon Redshift ODBC 驱动程序 DSN 安装**页的**连接设置**下，输入以下信息：
  + 对于**数据源名称**，输入 **{{your-DSN}}**。这将指定用作 ODBC 配置文件名称的数据源名称。
  + 对于**身份验证类型**，选择**身份提供者：SAML**。这是 ODBC 驱动程序在通过 AD FS 单点登录进行身份验证时使用的身份验证方法。
  + 对于**集群 ID**，请输入 **{{your-cluster-identifier}}**。
  + 对于**区域**，请输入 **{{your-cluster-region}}**。
  + 对于**数据库**，请输入 **{{your-database-name}}**。
  + 对于**用户**，请输入 **{{your-adfs-username}}**。这是您用于单点登录的 AD FS 账户的用户名，该账户有权访问您在尝试进行身份验证时使用的集群。请仅将其用于**身份验证类型**为**身份提供者: SAML** 的情况。
  + 对于**密码**，请输入 **{{your-adfs-password}}**。请仅将其用于 **Auth type (身份验证类型)** 为 **Identity Provider: SAML (身份提供者: SAML)** 的情况。

  在 macOS 和 Linux 上，按如下方式编辑 `odbc.ini` 文件：
**注意**  
所有条目不区分大小写。
  + 对于 **clusterid**，请输入 **{{your-cluster-identifier}}**。这是已创建的 Amazon Redshift 集群的名称。
  + 对于**区域**，请输入 **{{your-cluster-region}}**。这是已创建的 Amazon Redshift 集群的 Amazon 区域。
  + 对于**数据库**，请输入 **{{your-database-name}}**。这是您尝试在 Amazon Redshift 集群上访问的数据库的名称。
  + 对于**区域设置**，请输入 **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** 的情况。
  + 对于**密码**，请输入 **{{your-adfs-password}}**。请仅将其用于 **plugin\_name** 为 **ADFS** 的情况。

  在 macOS 和 Linux 上，还要编辑配置文件设置以添加以下导出。

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

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

------