Azure - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Azure

您可以使用 Microsoft Azure AD 作为身份提供者 (IdP) 来访问 Amazon Redshift 集群。本教程将向您展示如何将 Azure 用作身份提供者(IdP)来访问 Amazon Redshift 集群。

要了解如何通过 Microsoft Azure AD 单点登录进行联合 Amazon Redshift 访问,请观看以下视频。

第 1 步:设置 Azure 和您的 Amazon 账户相互信任

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

将 Azure AD 和您的 Amazon 账户设置为彼此信任
  1. 创建或使用现有的 Amazon Redshift 集群,以使 Azure AD 用户连接到该集群。要配置连接,需要此集群的某些属性,例如集群标识符。有关更多信息,请参阅创建集群

  2. 在 Microsoft Azure 门户上设置用于 Amazon 的 Azure Active Directory、组、用户。

  3. 在 Microsoft Azure 门户上添加 Amazon Redshift 以作为企业应用程序,以用于 Amazon 控制台单点登录和 Amazon Redshift 联合登录。选择企业应用程序

  4. 选择 + 新建应用程序。将显示“添加应用程序”页面。

  5. 在搜索字段中搜索 AWS

  6. 选择 Amazon Web Services (Amazon),然后选择添加。将会创建 Amazon 应用程序。

  7. 管理下方,选择单点登录

  8. 选择 SAML。将显示 Amazon Web Services (Amazon) | 基于 SAML 的登录页面。

  9. 选择以转到“使用 SAML 设置单点登录”页面。该页面显示预配置的单点登录相关属性的列表。

  10. 对于基本 SAML 配置,请选择编辑图标,然后选择保存

  11. 在配置多个应用程序时,请提供一个标识符值。例如,输入 https://signin.aws.amazon.com/saml#2。请注意,从第二个应用程序开始,将该格式与 # 符号一起使用以指定唯一的 SPN 值。

  12. 用户属性和声明部分中,选择编辑图标。

    默认情况下,预配置了唯一用户标识符 (UID)、角色、RoleSessionName 和 SessionDuration 声明。

  13. 选择 + 添加新的声明,以便为数据库用户添加声明。

    对于名称,请输入 DbUser

    对于命名空间,请输入 https://redshift.amazon.com/SAML/Attributes

    对于,请选择属性

    对于源属性,请选择 user.userprincipalname。然后,选择保存

  14. 选择 + 添加新的声明,以便为 AutoCreate 添加声明。

    对于名称,请输入 AutoCreate

    对于命名空间,请输入 https://redshift.amazon.com/SAML/Attributes

    对于,请选择属性

    对于源属性,请选择 "true"。然后,选择保存

    此处,123456789012 是您 Amazon 账户,AzureSSO 是您创建的 IAM 角色,AzureADProvider 是 IAM 提供商。

    声明名称

    唯一用户标识符(名称 ID)

    user.userprincipalname

    https://aws.amazon.com/SAML/Attributes/SessionDuration

    "900"

    https://aws.amazon.com/SAML/Attributes/Role

    arn:aws:iam::123456789012:role/AzureSSO,arn:aws:iam::123456789012:saml-provider/AzureADProvider

    https://aws.amazon.com/SAML/Attributes/RoleSessionName

    user.userprincipalname

    https://redshift.amazon.com/SAML/Attributes/AutoCreate

    "true"

    https://redshift.amazon.com/SAML/Attributes/DbGroups

    user.assignedroles

    https://redshift.amazon.com/SAML/Attributes/DbUser

    user.userprincipalname

  15. 应用程序注册 > your-application-name > 身份验证 下,添加移动和桌面应用程序。将 URL 指定为 http://localhost/redshift/。

  16. SAML 签名证书 部分中,选择下载以下载并保存联合元数据 XML 文件,以便在创建 IAM SAML 身份提供者时使用。该文件用于创建单点登录联合身份。

  17. 在 IAM 控制台上创建 IAM SAML 身份提供者。您提供的元数据文档是您在设置 Azure 企业应用程序时保存的联合元数据 XML 文件。有关详细步骤,请参阅《IAM 用户指南》中的创建和管理 IAM 身份提供者(控制台)

  18. 在 IAM 控制台上为 SAML 2.0 联合身份创建 IAM 角色。有关详细步骤,请参阅 IAM 用户指南中的创建用于 SAML 的角色

  19. 创建一个 IAM 策略,您可以将其附加到您在 IAM 控制台上为 SAML 2.0 联合身份验证创建的 IAM 角色。有关详细步骤,请参阅《IAM 用户指南》中的创建 IAM 策略(控制台)

    为您的环境修改以下策略(JSON 格式):

    • 将集群的 Amazon 区域替换为 us-west-1

    • 将您的 Amazon 账户替换为 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,所在的 Amazon 区域为 us-west-1${redshift:DbUser} 子句仅允许与在 Azure AD 中指定的 DbUser 值匹配的用户进行连接。

    • 条件子句会强制只有特定用户能够获得临时凭证。这些用户是由角色唯一 ID AROAJ2UCCR6DPCEXAMPLE 指定的角色下的用户,该 ID 位于您公司的电子邮件域中的电子邮件地址所标识的 IAM 账户中。有关唯一 ID 的更多信息,请参阅 IAM 用户指南中的唯一 ID

      您使用 IdP(在本例中为 Azure AD)进行的设置决定了条件子句的写入方式。如果员工的电子邮件是 johndoe@example.com,请首先将 ${redshift:DbUser} 设置为与员工用户名 johndoe 匹配的超级用户字段。然后,要使该条件有效,请将 Amazon SAML RoleSessionName 字段设置为与员工电子邮件 johndoe@example.com 匹配的超级用户字段。使用这种方法时,请考虑以下几点:

      • 如果您将 ${redshift:DbUser} 设置为员工的电子邮件,则删除示例 JSON 中的 @example.com 以匹配 RoleSessionName

      • 如果您只是将 RoleSessionId 设置为员工的用户名,则删除示例中的 @example.com 以匹配 RoleSessionName

      • 在示例 JSON 中,${redshift:DbUser}RoleSessionName 都已设置为员工电子邮件。此示例 JSON 使用 Amazon Redshift 数据库用户名以及 @example.com 让用户登录以访问集群。

    • 第二部分授予在指定集群中创建 dbuser 名称的权限。在此示例 JSON 中,它将创建限制为 ${redshift:DbUser}

    • 第三部分授予指定用户可以加入 dbgroup 的权限。在此示例 JSON 中,用户可以加入指定集群中的 my_dbgroup 组。

    • 第四部分授予用户可以对所有资源执行的操作的权限。在此示例 JSON 中,它允许用户调用 redshift:DescribeClusters 以获取集群信息,例如集群端点、Amazon 区域和端口。它还允许用户调用 iam:ListRoles 以检查用户可以代入哪些角色。

第 2 步:设置 JDBC 或 ODBC,以便向 Azure 进行身份验证

JDBC
设置 JDBC 以在 Microsoft Azure AD 中进行身份验证
  • 将数据库客户端配置为通过 JDBC 连接(使用 Azure AD 单点登录)到集群。

    您可以使用任何采用 JDBC 驱动程序的客户端通过 Azure AD 单点登录进行连接,也可以使用像 Java 这样的语言通过脚本进行连接。有关安装和配置信息,请参阅为 Amazon Redshift 配置 JDBC 驱动程序版本 2.1 连接

    例如,您可以使用 SQLWorkbench/J 作为客户端。当您配置 SQLWorkbench/J 时,数据库的 URL 使用以下格式。

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

    如果您使用 SQLWorkbench/J 作为客户端,请执行以下步骤:

    1. 启动 SQL Workbench/J。在选择连接配置文件页面上,添加一个称为 AzureAuth配置文件组

    2. 对于连接配置文件,请输入 Azure

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

    4. 选择连接配置文件页面上,向连接配置文件添加信息,如下所示:

      • 对于用户,请输入 Microsoft Azure 用户名。这是您用于单点登录的 Microsoft Azure 账户的用户名,该账户有权限访问您在尝试进行身份验证时使用的集群。

      • 对于密码,请输入您的 Microsoft Azure 密码。

      • 对于驱动程序,请选择 Amazon Redshift (com.amazon.redshift.jdbc.Driver)

      • 对于 URL,请输入 jdbc:redshift:iam://your-cluster-identifier:your-cluster-region/your-database-name

    5. 选择扩展属性以在连接属性中添加其他信息,如下所述。

      对于 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 单点登录作为身份验证方法。

      • 对于 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(带连字符)。

      • 对于侦听端口,请输入 your-listen-port。这是本地服务器正在侦听的端口。默认值为 7890。

      • 对于 idp_response_timeout,请输入 the-number-of-seconds。这是 IdP 服务器发回响应时超时之前等待的秒数。最小秒数必须为 10。如果建立连接的用时长于此阈值,则连接将被中止。

ODBC
设置 ODBC 以在 Microsoft Azure AD 中进行身份验证
  • 将数据库客户端配置为通过 ODBC 连接(使用 Azure AD 单点登录)到集群。

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

    在 Windows 上的 Amazon Redshift ODBC 驱动程序 DSN 安装页的连接设置下,输入以下信息:

    • 对于数据源名称,输入 your-DSN。这将指定用作 ODBC 配置文件名称的数据源名称。

    • 对于 Azure AD 单点登录配置的身份验证类型,请选择 Identity Provider: Azure AD。这是 ODBC 驱动程序在通过 Azure 单点登录进行身份验证时使用的验证方法。

    • 对于具有 MFA 的 Azure AD 单点登录配置的身份验证类型,请选择 Identity Provider: Browser Azure AD。这是 ODBC 驱动程序在通过 Azure 单点登录(采用 MFA)进行身份验证时使用的验证方法。

    • 对于集群 ID,请输入 your-cluster-identifier

    • 对于区域,请输入 your-cluster-region

    • 对于数据库,请输入 your-database-name

    • 对于用户,请输入 your-azure-username。这是您用于单点登录的 Microsoft Azure 账户的用户名,该账户有权限访问您在尝试进行身份验证时使用的集群。请仅将其用于身份验证类型身份提供者: Azure AD 的情况。

    • 对于密码,请输入 your-azure-password。请仅将其用于 Auth Type (身份验证类型)Identity Provider: Azure AD (身份提供者: Azure AD) 的情况。

    • 对于 IdP 租户,请输入 your-idp-tenant。这是在 IdP (Azure) 上配置的公司的租户名称。此值可以是租户名或带连字符的租户唯一 ID。

    • 对于 Azure 客户端密钥,请输入 your-azure-redshift-application-client-secret。这是您在设置 Azure 单点登录配置时创建的 Amazon Redshift 应用程序的客户端密钥。

    • 对于 Azure 客户端 ID,请输入 your-azure-redshift-application-client-id。这是您在设置 Azure 单点登录配置时创建的 Amazon Redshift 应用程序的客户端 ID(带连字符)。

    • 对于侦听端口,请输入 your-listen-port。这是本地服务器正在侦听的默认侦听端口。默认值为 7890。这仅适用于浏览器 Azure AD 插件。

    • 对于响应超时,请输入 the-number-of-seconds。这是 IdP 服务器发回响应时超时之前等待的秒数。最小秒数必须为 10。如果建立连接的用时长于此阈值,则连接将被中止。该选项仅适用于浏览器 Azure AD 插件。

    在 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 凭证进行身份验证的驱动程序。

    • 对于 Azure AD 单点登录配置的 plugin_name,请输入 AzureAD。这指定驱动程序使用 Azure 单点登录作为身份验证方法。

    • 对于具有 MFA 的 Azure AD 单点登录配置的 plugin_name,请输入 BrowserAzureAD。这指定驱动程序将 Azure 单点登录(采用 MFA)作为身份验证方法。

    • 对于 uid,请输入 your-azure-username。这是您用于单点登录的 Microsoft Azure 账户的用户名,该账户有权限访问您在尝试进行身份验证时使用的集群。请仅将其用于 plugin_nameAzureAD 的情况。

    • 对于密码,请输入 your-azure-password。请仅将其用于 plugin_nameAzureAD 的情况。

    • 对于 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(带连字符)。

    • 对于侦听端口,请输入 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

故障排除

要解决浏览器 Azure AD 插件的问题,请考虑以下几点。

  • 要使用浏览器 Azure AD 插件,在请求中指定的回复 URL 必须与为应用程序配置的回复 URL 一致。导航到 Microsoft Azure 门户上的使用 SAML 设置单点登录页面。然后检查回复 URL 是否已设置为 http://localhost/redshift/。

  • 如果收到 IdP 租户错误,请验证 IdP 租户名称是否与最初在 Microsoft Azure 中设置 Active Directory 时所用的域名匹配。

    在 Windows 上,导航到 Amazon Redshift ODBC DSN 设置页面的连接设置部分。然后检查在 IdP (Azure) 上配置的公司租户名称是否与最初在 Microsoft Azure 中设置 Active Directory 时所用的域名匹配。

    在 macOS 和 Linux 上,找到 odbc.ini 文件。然后检查在 IdP (Azure) 上配置的公司租户名称是否与最初在 Microsoft Azure 中设置 Active Directory 时所用的域名匹配。

  • 如果收到请求中指定的回复 URL 与为应用程序配置的回复 URL 不一致的错误,请验证重定向 URI 是否与回复 URL 相同。

    在 Microsoft Azure 门户上,导航到您的应用程序的应用程序注册页面。然后检查重定向 URI 是否与回复 URL 一致。

  • 如果收到“未经授权错误”意外响应,请验证是否已完成移动和桌面应用程序配置。

    在 Microsoft Azure 门户上,导航到您的应用程序的应用程序注册页面。然后导航到身份验证,检查是否已将移动和桌面应用程序配置为使用 http://localhost/redshift/ 作为重定向 URI。