

 2026 年 6 月 30 日之后，Amazon Redshift 不再支持使用 Python UDF。我们将分阶段开始执行。有关 Python 生命周期终止和迁移选项详情的更多信息，请参阅 2025 年 6 月 30 日发布的[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 在 Amazon Redshift 上设置身份提供者
<a name="redshift-iam-access-control-native-idp-setup"></a>

本节介绍配置身份提供者和 Amazon Redshift 以便为原生身份提供者联合身份验证建立通信的步骤。您需要身份提供者的有效账户。在配置 Amazon Redshift 之前，您可以向身份提供者注册 Redshift 作为应用程序，并授予管理员同意。

在 Amazon Redshift 中，完成以下步骤：

1. 运行 SQL 语句来注册身份提供者，包括 Azure 应用程序元数据的说明。要在 Amazon Redshift 中创建身份提供者，请在替换参数值 *issuer*、*client\_id*、*client\_secret* 和 *audience* 后运行以下命令。这些参数特定于 Microsoft Azure AD。将身份提供者名称替换为您选择的名称，然后用唯一名称替换命名空间，以包含来自身份提供者目录中的用户和角色。

   ```
   CREATE IDENTITY PROVIDER oauth_standard TYPE azure
   NAMESPACE 'aad'
   PARAMETERS '{
   "issuer":"https://sts.windows.net/2sdfdsf-d475-420d-b5ac-667adad7c702/",
   "client_id":"<client_id>",
   "client_secret":"BUAH~ewrqewrqwerUUY^%tHe1oNZShoiU7",
   "audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift"]
   }'
   ```

   类型 `azure` 表示该提供商特意加强了与 Microsoft Azure AD 的通信。这是目前唯一受支持的第三方身份提供者。
   + *issuer* - 收到令牌时要信任的发布者 ID。*tenant\_id* 的唯一标识符附加到发布者之后。
   + *client\_id* - 向身份提供者注册的应用程序的唯一公有标识符。这可以称为应用程序 ID。
   + *client\_secret* - 只有身份提供者和注册的应用程序才知道的秘密标识符或密码。
   + *audience* - 在 Azure 中分配给应用程序的应用程序 ID。

   

   您可以在创建身份提供者时设置参数来指定证书、私有密钥和私有密钥密码，而不使用共享客户端密钥。

   ```
   CREATE IDENTITY PROVIDER example_idp TYPE azure 
   NAMESPACE 'example_aad' 
   PARAMETERS '{"issuer":"https://sts.windows.net/2sdfdsf-d475-420d-b5ac-667adad7c702/", 
   "client_id":"<client_id>", 
   "audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift"], 
   "client_x5t":"<certificate thumbprint>", 
   "client_pk_base64":"<private key in base64 encoding>", 
   "client_pk_password":"test_password"}';
   ```

   私有密钥密码 *client\_pk\_password* 为可选项。

1. 可选：在 Amazon Redshift 中运行 SQL 命令以预先创建用户和角色。这有助于提前授予权限。Amazon Redshift 中的角色名称如下所示：*<Namespace>:<GroupName on Azure AD>*。例如，当您在 Microsoft Azure AD 中创建一个名为 `rsgroup` 的组和一个名为 `aad` 的命名空间时，角色名称为 `aad:rsgroup`。从身份提供者命名空间中的这些用户名和组成员资格定义 Amazon Redshift 中的用户和角色名称。

   角色和用户的映射包括验证他们的 `external_id` 值，以确保它是最新的。外部 ID 将映射到身份提供者中组或用户的标识符。例如，角色的外部 ID 将映射到相应的 Azure AD 组 ID。同样，每个用户的外部 ID 都将映射到他们在身份提供者中的 ID。

   ```
   create role "aad:rsgroup";
   ```

1. 根据您的要求向角色授予相关权限。例如：

   ```
   GRANT SELECT on all tables in schema public to role "aad:rsgroup";
   ```

1. 您还可向特定用户授予权限。

   ```
   GRANT SELECT on table foo to aad:alice@example.com
   ```

   请注意，对于联合身份验证的外部用户，其角色成员资格仅在该用户的会话中可用。这对创建数据库对象有影响。例如，当联合身份验证的外部用户创建任何视图或存储过程时，同一个用户无法将这些对象的权限委托给其他用户和角色。

**命名空间的解释**

命名空间将用户或角色映射到特定身份提供者。例如，在 Amazon IAM 中创建的用户的前缀是 `iam:`。此前缀可防止用户名冲突，并使支持多个身份存储成为可能。如果用户 alice@example.com 来自向 *aad* 命名空间注册的身份源，则当此用户登录时，会在 Redshift 中创建用户 `aad:alice@example.com`（如果此用户尚未存在）。请注意，用户和角色命名空间与 Amazon Redshift 集群命名空间具有不同的功能，后者是与集群关联的唯一标识符。