Azure
您可以使用 Microsoft Azure AD 作为身份提供者 (IdP) 来访问 Amazon Redshift 集群。本教程将向您展示如何将 Azure 用作身份提供者(IdP)来访问 Amazon Redshift 集群。
要了解如何通过 Microsoft Azure AD 单点登录进行联合 Amazon Redshift 访问,请观看以下视频。
第 1 步:设置 Azure 和您的 AWS 账户相互信任
以下过程介绍如何建立信任关系。
将 Azure AD 和您的 AWS 账户设置为彼此信任
-
创建或使用现有的 Amazon Redshift 集群,以使 Azure AD 用户连接到该集群。要配置连接,需要此集群的某些属性,例如集群标识符。有关更多信息,请参阅创建集群。
-
在 Microsoft Azure 门户上设置用于 AWS 的 Azure Active Directory、组、用户。
-
在 Microsoft Azure 门户上添加 Amazon Redshift 以作为企业应用程序,以用于 AWS 控制台单点登录和 Amazon Redshift 联合登录。选择企业应用程序。
-
选择 + 新建应用程序。将显示“添加应用程序”页面。
-
在搜索字段中搜索
AWS
。 -
选择 Amazon Web Services (AWS),然后选择添加。将会创建 AWS 应用程序。
-
在管理下方,选择单点登录。
-
选择 SAML。将显示 Amazon Web Services (AWS) | 基于 SAML 的登录页面。
-
选择是以转到“使用 SAML 设置单点登录”页面。该页面显示预配置的单点登录相关属性的列表。
-
对于基本 SAML 配置,请选择编辑图标,然后选择保存。
-
在配置多个应用程序时,请提供一个标识符值。例如,输入
。请注意,从第二个应用程序开始,将该格式与 # 符号一起使用以指定唯一的 SPN 值。https://signin.aws.amazon.com/saml#2
-
在用户属性和声明部分中,选择编辑图标。
默认情况下,预配置了唯一用户标识符 (UID)、角色、RoleSessionName 和 SessionDuration 声明。
-
选择 + 添加新的声明,以便为数据库用户添加声明。
对于名称,请输入
DbUser
。对于命名空间,请输入
https://redshift.amazon.com/SAML/Attributes
。对于源,请选择属性。
对于源属性,请选择 user.userprincipalname。然后,选择保存。
-
选择 + 添加新的声明,以便为 AutoCreate 添加声明。
对于名称,请输入
AutoCreate
。对于命名空间,请输入
https://redshift.amazon.com/SAML/Attributes
。对于源,请选择属性。
对于源属性,请选择 "true"。然后,选择保存。
此处,
是您 AWS 账户,123456789012
是您创建的 IAM 角色,AzureSSO
是 IAM 提供商。AzureADProvider
声明名称 值 唯一用户标识符(名称 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
-
在应用程序注册 >
> 身份验证 下,添加移动和桌面应用程序。将 URL 指定为 http://localhost/redshift/。your-application-name
-
在 SAML 签名证书 部分中,选择下载以下载并保存联合元数据 XML 文件,以便在创建 IAM SAML 身份提供者时使用。该文件用于创建单点登录联合身份。
-
在 IAM 控制台上创建 IAM SAML 身份提供者。您提供的元数据文档是您在设置 Azure 企业应用程序时保存的联合元数据 XML 文件。有关详细步骤,请参阅《IAM 用户指南》中的创建和管理 IAM 身份提供者(控制台)。
-
在 IAM 控制台上为 SAML 2.0 联合身份创建 IAM 角色。有关详细步骤,请参阅 IAM 用户指南中的创建用于 SAML 的角色。
创建一个 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
,所在的 AWS 区域为123456789012
。us-west-1
${redshift:DbUser}
子句仅允许与在 Azure AD 中指定的DbUser
值匹配的用户进行连接。条件子句会强制只有特定用户能够获得临时凭证。这些用户是由角色唯一 ID
指定的角色下的用户,该 ID 位于您公司的电子邮件域中的电子邮件地址所标识的 IAM 账户中。有关唯一 ID 的更多信息,请参阅 IAM 用户指南中的唯一 ID。AROAJ2UCCR6DPCEXAMPLE
您使用 IdP(在本例中为 Azure AD)进行的设置决定了条件子句的写入方式。如果员工的电子邮件是
johndoe@example.com
,请首先将${redshift:DbUser}
设置为与员工用户名johndoe
匹配的超级用户字段。然后,要使该条件有效,请将 AWS SAMLRoleSessionName
字段设置为与员工电子邮件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 进行身份验证
故障排除
要解决浏览器 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。