Azure - Amazon Redshift

Azure

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

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

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

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

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

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

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

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

  5. 在搜索字段中搜索 AWS

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

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

  8. 选择 SAML。将显示 Amazon Web Services (AWS) | 基于 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 是您 AWS 账户,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 格式):

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

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

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

      您使用 IdP(在本例中为 Azure AD)进行的设置决定了条件子句的写入方式。如果员工的电子邮件是 johndoe@example.com,请首先将 ${redshift:DbUser} 设置为与员工用户名 johndoe 匹配的超级用户字段。然后,要使该条件有效,请将 AWS 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 以获取集群信息,例如集群端点、AWS 区域和端口。它还允许用户调用 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 集群的 AWS 区域。

    • 对于数据库,请输入 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。