从 2025 年 11 月 1 日起,Amazon Redshift 将不再支持创建新的 Python UDF。如果您想要使用 Python UDF,请在该日期之前创建 UDF。现有的 Python UDF 将继续正常运行。有关更多信息,请参阅博客文章
Azure
您可以使用 Microsoft Azure AD 作为身份提供者 (IdP) 来访问 Amazon Redshift 集群。本教程将向您展示如何将 Azure 用作身份提供者(IdP)来访问 Amazon Redshift 集群。
要了解如何通过 Microsoft Azure AD 单点登录进行联合 Amazon Redshift 访问,请观看以下视频。
第 1 步:设置 Azure 和您的 Amazon 账户相互信任
以下过程介绍如何建立信任关系。
将 Azure AD 和您的 Amazon 账户设置为彼此信任
-
创建或使用现有的 Amazon Redshift 集群,以使 Azure AD 用户连接到该集群。要配置连接,需要此集群的某些属性,例如集群标识符。有关更多信息,请参阅创建集群。
-
在 Microsoft Azure 门户上设置用于 Amazon 的 Azure Active Directory、组、用户。
-
在 Microsoft Azure 门户上添加 Amazon Redshift 以作为企业应用程序,以用于 Amazon 控制台单点登录和 Amazon Redshift 联合登录。选择企业应用程序。
-
选择 + 新建应用程序。将显示“添加应用程序”页面。
-
在搜索字段中搜索
AWS
。 -
选择 Amazon Web Services (Amazon),然后选择添加。将会创建 Amazon 应用程序。
-
在管理下方,选择单点登录。
-
选择 SAML。将显示 Amazon Web Services (Amazon) | 基于 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"。然后,选择保存。
此处,
是您 Amazon 账户,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 格式):
将集群的 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
,所在的 Amazon 区域为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
匹配的超级用户字段。然后,要使该条件有效,请将 Amazon 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
以获取集群信息,例如集群端点、Amazon 区域和端口。它还允许用户调用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。