在 Amazon Redshift 上设置身份提供者 - Amazon Redshift

在 Amazon Redshift 上设置身份提供者

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

在 Amazon Redshift 中,完成以下步骤:

  1. 运行 SQL 语句来注册身份提供者,包括 Azure 应用程序元数据的说明。要在 Amazon Redshift 中创建身份提供者,请在替换参数值 issuerclient_idclient_secretaudience 后运行以下命令。这些参数特定于 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 为可选项。

  2. 可选:在 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";
  3. 根据您的要求向角色授予相关权限。例如:

    GRANT SELECT on all tables in schema public to role "aad:rsgroup";
  4. 您还可向特定用户授予权限。

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

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

命名空间的解释

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