作者 Debu Panda Ranjan Burman 和 Maneesh Sharma 于 2023 年 12 月 12 日在 Amazon Redshift、
Analytics、
Foundational (100)
永久链接
Amazon Redshift 提升了您的数据洞察速度,提供安全、高效的云数据仓库服务。成千上万的客户依赖 Amazon Redshift 来分析 exabyte 级的数据并执行复杂的分析查询。
您可以使用首选的 SQL 客户端分析 Amazon Redshift 数据仓库中的数据。通过利用身份提供者 (IdP) 或单点登录 (SSO) 凭据与 Redshift 数据仓库连接,可以重用现有用户凭据,避免额外的用户设置和配置。使用基于角色的访问控制 (RBAC),您可以简化用户权限、数据库权限和安全权限的管理。您还可以使用 Redshift 数据库角色定义一组提升的权限,例如系统监控器或数据库管理员。
结合 AWS 身份与访问管理 (IAM) 和 RBAC,组织可以简化用户管理,无需手动创建用户并将其映射到数据库角色。您可以将映射的数据库角色定义为 IdP 组或 IAM 角色的主体标签,这样 Redshift 数据库角色和属于这些 IdP 组的用户将自动授予数据库角色。
2023 年早些时候,我们发布了与 Okta 集成的支持,支持 Amazon Redshift Serverless 使用数据库角色。本篇文章将重点介绍 Okta 作为 IdP,提供如何通过 Redshift 查询编辑器 v2 和 SQL 客户端如 SQL Workbench/J将 Redshift 集群与 Okta 集成的逐步指导。您还可以使用此机制与其他 IdP 提供商如 Azure Active Directory 或 Ping配合任何使用 Amazon 的 JDBC、ODBC 或 Python 驱动程序的应用。
最近,我们还宣布了与 AWS IAM 身份中心的集成,支持可信身份传播,允许您使用 第三方身份提供者 (IdP),如 Microsoft Entra IDAzure AD、Okta、Ping 和 OneLogin。此集成简化了 Amazon Redshift 用户使用 查询编辑器 V2 或 Amazon QuickSight 的身份验证和授权流程,使他们更容易安全访问数据仓库。AWS IAM 身份中心利用系统跨域身份管理 (SCIM) 20 协议从 Okta 自动进行用户和组的供应。此集成确保在 AWS IAM 身份中心中无缝同步信息,确保信息的准确和最新。请参阅使用 AWS IAM 身份中心集成 Okta 和 Amazon Redshift 查询编辑器 V2 来实现无缝单点登录 了解更多关于设置与 IAM 身份中心和 Okta 作为身份提供者的 Amazon Redshift 单点登录的信息。
如果您有兴趣结合 IAM 实现基于角色的 Amazon Redshift 单点登录,请继续阅读本文。
以下图示展示了 Okta 与 Redshift 集群在使用联合 IAM 角色和自动数据库角色映射时的认证流程。
工作流程包括以下步骤:
用户在浏览器中选择 IdP 应用,或 SQL 客户端发起对 IdP (Okta) 的用户认证请求。成功认证后,Okta 向 AWS 联合终端提交请求,包含带有主体标签的 SAML 断言。AWS 联合终端验证 SAML 断言,并调用 AWS 安全令牌服务 (AWS STS) API AssumeRoleWithSAML。SAML 断言包含在 RedshiftDbUser 和 RedshiftDbRoles 主体标签中存储的 IdP 用户和组信息。临时 IAM 凭据返回给 SQL 客户端,或者如果使用查询编辑器 v2,则用户的浏览器使用临时 IAM 凭据重定向到查询编辑器 v2 控制台。SQL 客户端或查询编辑器 v2 使用这些临时 IAM 凭据调用 Redshift API GetClusterCredentialsWithIAM。此 API 使用主体标签确定用户及其所属于的数据库角色。如果用户首次登录,将创建相关的数据库用户并自动授予匹配的数据库角色。临时密码将返回给 SQL 客户端。使用数据库用户和临时密码,SQL 客户端或查询编辑器 v2 连接到 Amazon Redshift。登录后,系统根据步骤 4 中分配的 Redshift 数据库角色进行授权。您需要以下前提条件以设置此解决方案:
一个 AWS 账户。如果您没有,可以注册。一个 Redshift 集群。有关设置说明,请参见开始使用 Amazon Redshift。最新的 Redshift JDBC SDK 驱动依赖库下载这些库并解压 JDBC JAR 压缩文件,驱动版本需为 21018 或更高。一个有效订阅的 Okta 账户。您需要管理员角色来设置 Okta 上的应用。如果您是 Okta 新用户,可以申请 免费试用或注册 开发者账户。一个 SQL 客户端,例如 SQL Workbench/J。要使用查询编辑器 v2 进行连接,请完成以下步骤:
遵循以下文章中的“设置 Okta 应用”和“设置 AWS 配置”部分。对于 Amazon Redshift 访问 IAM 策略,将策略替换为以下 JSON,以使用 GetClusterCredentialsWithIAM API:
json{ Version 20121017 Statement [ { Sid VisualEditor0 Effect Allow Action redshiftGetClusterCredentialsWithIAM Resource arnawsredshiftuswest2123456789012dbnameredshiftcluster1/dev } ]}
现在您可以使用查询编辑器 v2 和联合登录连接您的 Redshift 集群。
使用 Okta 的 SSO URL 登录到您的 Okta 账户。这次演示中,我们以用户 Ethan 登录。在查询编辑器 v2 中,选择您的 Redshift 集群右键单击并选择 创建连接。对于 身份验证,选择 使用您的 IAM 身份的临时凭据。对于 数据库,输入您要连接的数据库名称。点击 创建连接。执行以下命令以验证您是否作为联合用户登录,并获取该用户在当前会话中关联的角色列表:
sqlSELECT currentuser FROM pggetsessionroles() effro(name name roleid integer)
由于 Ethan 属于销售组,并被授予访问 salesschema 中表的权限,他应该能够顺利访问这些表。然而,如果他尝试访问 financeschema 中的表,会收到权限拒绝错误,因为他并不属于 Okta 的财务组。
西部世界加速器官网要通过第三方客户端以联合用户身份连接,请完成以下步骤:
遵循上述部分通过查询编辑器 v2 连接到 Redshift 集群作为联合用户中描述的步骤 1 和 2。使用支持 IAM 组联合认证的 Redshift JDBC 驱动 版本 21018 及以上版本。URL 输入 jdbcredshiftiam//lt集群端点gtlt端口gtlt数据库名gtgroupfederation=true。例如,jdbcredshiftiam//redshiftcluster1abdef0abc0abuswest2redshiftamazonawscom5439/devgroupfederation=true。在上述 URL 中,groupfederation 是一个必需的参数,确保您使用 Redshift 提供的临时凭据进行身份验证。如果没有 groupfederation 参数,系统将无法使用 Redshift 数据库角色。
对于 用户名 和 密码,输入您的 Okta 凭据。设置扩展属性时,按照以下文章中 配置 SQL 客户端 (SQL Workbench/J) 部分的步骤 49 进行操作。用户 Ethan 将能够访问 salesschema 表。如果 Ethan 尝试访问 financeschema 中的表,他将会遇到权限拒绝错误。

如果您的连接未能成功,请考虑以下事项:
在驱动程序中启用日志记录。具体说明请参见配置日志记录。确保使用最新的 Amazon Redshift JDBC 驱动 版本。如果在 Okta 上设置应用时遇到错误,请确保您拥有管理员访问权限。如果您能通过 SQL 客户端进行身份验证,但在访问对象时遇到权限问题,或者无法查看对象,请授予相关角色的权限。测试完成后,请清理资源以避免未来产生费用:
删除 Redshift 集群。删除 IAM 角色、IAM IdP 和 IAM 策略。在本文中,我们提供了将 Redshift 集群与 Okta 集成的逐步指导,使用 Redshift 查询编辑器 v2 和 SQL Workbench/J,通过联合 IAM 角色和自动数据库角色映射实现无缝的单点登录。您还可以使用与其他 SQL 客户端如 DBeaver 或 DataGrip相似的设置。我们还展示了 Okta 组成员如何与 Redshift 集群角色自动映射,以无缝使用基于角色的认证。
如果您有任何反馈或问题,请在评论区留言。
Debu Panda 是 AWS 的高级产品管理经理。他在分析、应用平台和数据库技术领域具有行业领先地位,并拥有超过 25 年的 IT 行业经验。
Ranjan Burman 是 AWS 的分析专家解决方案架构师。他专注于 Amazon Redshift,帮助客户构建可扩展的分析解决方案。拥有超过 16 年的数据库和数据仓库技术经验,对使用云解决方案自动化和解决客户问题充满热情。
Maneesh Sharma 是 AWS 的高级数据库工程师,拥有超过十年的大型数据仓库和分析解决方案的设计与实施经验。他与多家 Amazon Redshift 合作伙伴和客户合作,推动更好的集成。
加载评论