无疑应用单点登录 (SSO)拜访组织中的多种应用程序可能晋升用户体验。如果您负责为 Amazon Redshift 启用 SSO,则能够应用 ADFS、PingIdentity、Okta、Azure AD 或其余基于 SAML 浏览器的身份提供程序设置 SSO 身份验证。
这篇文章向您展现了如何将 PingOne 设置为您的 IdP。蕴含以下步骤:
- 配置 IdP(PingOne) 用户组和用户 – PingOne 集成 Microsoft AD 获取用户组和用户
- 配置 IdP(PingOne) 应用程序 – 创立 PingOne 应用程序,在应用程序中指定应用的 Amazon IAM Role,并指定应用该 Role 的用户组,用户应用该 Role 能够拜访 Redshift 群集
- 配置 IAM SAML 联结认证 – 通过在 PingOne IdP 和 Amazon 之间建设信赖关系,设置容许 PingOne 拜访 Amazon Redshift 的角色
- 创立 Amazon Redshift DBGroups 配置权限 – 在 Amazon Redshift 数据库中创立 DBGroups 并受权这些 DBGroups 拜访的 schemas 和 tables。
- 测试单点登录 – 应用 Workbench 客户端工具进行 SSO 登录测试并进行权限验证
亚马逊云科技开发者社区为开发者们提供寰球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、流动与比赛等。帮忙中国开发者对接世界最前沿技术,观点,和我的项目,并将中国优良开发者或技术举荐给寰球云社区。如果你还没有关注 / 珍藏,看到这里请肯定不要匆匆划过,点这里让它成为你的技术宝库! |
解决方案概览
联结身份验证的流程以及步骤如下所示:
- 用户应用 workbench 客户端登录
- IdP(PingOne) 读取 Microsoft AD 里的用户名和明码进行身份验证,
- IDP 认证通过返回 SAML 断言
- 客户端应用 Amazon SDK 调用 Amazon Security Token Service (Amazon STS) 以应用 SAML 代入角色(assume Role)
- Amazon STS 返回长期 Amazon 凭证
- 客户端应用长期 Amazon 凭证拜访 Redshift
联结身份单点登录流程图
配置步骤
前提
(1)配置之前如果没有组织内没有购买 PingOne 服务你须要拜访
https://www.pingidentity.com/en/trials/p14e-trial.html?trk=cn… 注册收费账户
(2)Microsoft AD 须要拜访互联网权限 须要在 AD 服务器上安装 PingOne AD 连接器用于拜访 PingOne 服务
Microsoft AD 域中创立用户组和用户
登录 AD 创立用户和用户组并把用户退出相应的用户组
例如:创立四个用户 readonly01 readonly02 readwrite01 readwrite02 创立两个用户组 readonly readwrite 将用户 readonly01 readonly02 退出用户组 readonly 将用户 readwrite01 readwrite02 用户退出用户组 readwrite
留神:增加用户时为用户配置邮箱地址
用户组成员:
配置 PingOne 连贯 Microsoft AD
- 登录 PingOne 治理 Portal https://admin.pingone.com/web-portal/login?trk=cndc-detail
- 导航栏中点击“setup”, 抉择“Identity Repository”点击“Connect to an Identiy Repositry”
- 抉择“Active Directory”作为认证源
- 依照提醒步骤进行操作,实现 AD 认证集成
AD Connector 装置步骤可参考链接
- 配置实现
- 导航至 user 能够查看到 PingOne 曾经同步 Microsoft AD 用户组
配置 IdP(PingOne) 应用程序
这一步骤须要创立 PingOne 应用程序,以便用户组成员能够拜访 Amazon Redshift, 因为有两个用户组,咱们须要创立两个应用程序
- 登录 PingOne 治理界面,导航至 Application 栏
- 在“My Application”栏抉择 SAML
- 抉择“Add Application”
- 抉择“New SAML Application”
- 输出 Application 名称 比方: AmazonRedshiftReadOnly
- 持续下一步
- 在“Application Configuration”配置界面配置参数如下:
- 点击下一步
- 在“SSO Attribute Mapping”配置界面输出以下
- 在“Group Access”界面抉择 AD 用户组 readonly
- 点击下一步
- 查看配置界面 下载 SAML Metadata 文件到本地,下一步骤会导入到 Amazon IDP 中
- 记录 Initial Single Sign-On(SSO) URL, 配置 Workbench JDBC 连贯信息是须要该参数
- 点击实现
-
反复上述步骤创立第二个应用程序 AmazonRedshiftReadWrite, 须要调整以下两局部的参数:
- SSO Attribute mapping:https://aws.amazon.com/SAML/Attributes/Role?trk=cndc-detail 参数的值更改为
arn:aws-cn:iam:::role/pingreadwriterole,arn:aws-cn:iam:::saml-provider/pingreadwriteprov - Group Access 抉择 AD 用户组 readwrite
- SSO Attribute mapping:https://aws.amazon.com/SAML/Attributes/Role?trk=cndc-detail 参数的值更改为
- 配置实现后领有两个应用程序
配置 IAM SAML 联结认证
创立 IAM SAML IdP
要配置 IAM SAML,须要创立 IAM IdP 以及角色和策略。
配置步骤如下:
- 登录 Amazon Console,抉择 IAM 服务导航至 Access management 下的 Identity Provider
- 抉择 Add Provider,
- 类型为 SAML,
- 名称输出 pingreadonlyprov(该名称与 PingOne SSO Attribute Mapping 中参数 https://aws.amazon.com/SAML/Attributes/Role?trk=cndc-detail 输出的值统一)
- Metadata 文件 抉择 PingOne 应用程序 AmazonRedshiftReadOnly 下载的 XML 文件
- 反复上述步骤创立第二个 IdP (Metadata 文件抉择 PingOne 应用程序 AmazonRedshiftReadWrite 的 XML 文件)
- 创立实现后能够看到有两个 IdP Provider
创立 IAM Role 和 Policy
咱们应用 IAM Role 来管制用户组拜访 Redshift 数据库的权限。通过配置 IAM Role 并为该 Role 绑定策略的形式来限度不同的用户组对 Redshift 数据库的拜访。该 Role 容许用户通过 IdP 来拜访 Redshift 群集。
创立 IAM Role 之前咱们须要创立 IAM Policy 该 Policy 容许用户领有 joingroup 权限
- Amazon IAM 服务配置界面抉择 policy
- 抉择创立 Policy
- 抉择 JSON,创立两个 pingreadonlypolicy 和 pingreadwritepolicy
- 替换 为组织中的 Redshift cluster 名称
- 替换 为组织中的 Redshift dbname
两个 policy 的配置不同之处是在 JoinGroup 的 Resource。
“JoinGroup”:pingreadonlypolicy 容许用户退出 Redshift readonly 组
“JoinGroup”:pingreadwritepolicy 容许用户退出 Redshift readwrite 组
用户拜访 Redshift 数据库并主动退出 Redshift DBGroup 只在会话存活期内无效,该策略中并未蕴含创立 DbGroup 的权限,因为创立 DBGroups 并赋予 DBgroup 相应的权限须要手动在 Redshift 数据库中实现。
以下代码展现 pingreadonlypolicy 内容:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "redshift:GetClusterCredentials",
"Resource": [
"arn:aws-cn:redshift:*:*:cluster:<cluster>",
"arn:aws-cn:redshift:*:*:dbname:<cluster>/<dbname>",
"arn:aws-cn:redshift:*:*:dbuser:<cluster>/${redshift:DbUser}"
],
"Condition": {
"StringLike": {"aws:userid": "*:${redshift:DbUser}"
}
}
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "redshift:CreateClusterUser",
"Resource": [
"arn:aws-cn:redshift:*:*:dbname:<cluster>/<dbname>",
"arn:aws-cn:redshift:*:*:dbuser:<cluster>/${redshift:DbUser}"
]
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": "redshift:JoinGroup",
"Resource": "arn:aws-cn:redshift:*:*:dbgroup:<cluster>/readonly"
}
]
}
- 配置实现后能够查看到刚刚创立的 Policy
- 在 IAM Console 界面抉择 Roles
- 创立 Role
- Type 抉择 SAML 2.0 federation.
- SAML provider 抉择上述步骤中创立的 IdP
- 抉择 Allow programmatic access only.
- Attribute:SAML:aud.
- Value 输出 http://localhost:7890/redshift/?trk=cndc-detail.
- 为第一个 Role 抉择 pingreadonlypolicy 第二个 Role 抉择 pingreadwritepolicy
- 为该 Role 输出名称(pingreadonlyrole 和 pingreadwriterole)
- 创立两个 Role 显示如下
创立 Amazon Redshift DBGroups 配置权限
该步骤将在 Redshift 数据库中创立 DbGroups,该 DbGroups 的名称须要与 IAM Policy 中 Joingroup 的名称保持一致,而后须要赋予 DbGroup 对 Redshift 数据库中的 shemale 以及 Table 相应的权限, 你无需创立 DbUser,因为 DbUser 在通过 PingOne SSO 登录 Redshift 后主动退出相应的 DbGroup.
- 应用 admin 账户通过 Workbench 登录 Redshift 群集
- 应用如下命令创立 DbGroups 并赋予 Group 相应的 Schema 以及 Table 权限
CREATE SCHEMA finance;
CREATE TABLE IF NOT EXISTS finance.revenue
(
account INTEGER ENCODE az64,
customer VARCHAR(20) ENCODE lzo,
salesamt NUMERIC(18,0) ENCODE az64
)DISTSTYLE AUTO;
CREATE GROUP readonly;
CREATE GROUP readwrite;
ALTER DEFAULT PRIVILEGES IN SCHEMA finance
GRANT SELECT on TABLES to GROUP readonly;
GRANT USAGE on SCHEMA finance to GROUP readonly;
GRANT SELECT on ALL TABLES in SCHEMA finance to GROUP readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA finance
GRANT ALL on TABLES to GROUP readwrite;
GRANT USAGE on SCHEMA finance to GROUP readwrite;
GRANT ALL on ALL TABLES in SCHEMA finance to GROUP readwrite;
INSERT INTO finance.revenue values
(101, 'ABC Company', 12000),
(102, 'Tech Logistics', 175400),
(103, 'XYZ Industry', 24355),
(104, 'The tax experts', 186577);
测试单点登录
该步骤将应用 Microsoft AD 用户应用 Workbench SQL Client 通过 PingOne SSO 登录拜访 Redshift 数据库进行操作。
- 配置 Workbench SQL 客户端
如果装置 Workbench SQL 客户端的服务器未装置 JDBC Driver 可通过以下链接进行下载安装。下载链接 - 创立 Connection Profile(该测试将测试 ReadWrite 权限)
URL:jdbc:redshift:iam://<cluster endpoint>
- 抉择 Extended Properties,输出 SSO 相干参数
login_url 输出 PingOne Application Initial Single Sign-On(SSO) URL
- 点击 OK
- connection Profile 界面点击 OK 按钮
- 浏览器将会关上 PingOne 登录界面 输出 AD 账户用户名以及明码
- 登录胜利
- 运行 select 命令:select * from current_user
- 运行 insert 命令
INSERT INTO finance.revenue values
(1111111111, 'ABCDE Company', 12000);
其它补充:
- 通过 SSO 登录的 AD 用户会永恒保留在 Redshift 数据用户列表中,然而无奈通过本地登录,起因是该用户名为 AD 用户与 IAM Role 集成后的联结用户,生成的是长期 Credentials 并非保留在 Redshift 数据库用户配置中。参考链接
-
该文档在测试步骤中的 extended properties 指定了参数 DbGroups, 该参数也能够通过配置 PingOne Application SSO Attribute Mapping 的参数 https://redshift.amazon.com/SAML/Attributes/DbGroups 进行指定
总结:
在这篇博文中,我向您介绍了如何配置和应用 PingOne 作为您的 IdP 并为 Amazon Redshift 集群启用联结 SSO 的部署指南。您能够依照这些步骤为您的组织设置联结 SSO,并依据读 / 写权限或业务性能治理拜访权限,并将 PingOne IdP 中定义的组成员身份传递到您的 Amazon Redshift 集群中。
本篇作者
侯聪
Amazon 业余服务团队云运维征询参谋,专一于云上运维以及优化计划的征询与施行。多年从事云基础架构设计交付工作,对虚拟化,SDN, 容器, 自动化运维等技术畛域有深刻的钻研和激情。
银硕
Amazon 业余服务团队云运维征询参谋,对云上服务建设运维、DevOps 迁徙革新等我的项目交付有丰盛的教训。负责企业级客户的云架构设计、云上自动化运维、容器化平台设计征询等,对云原生技术有深刻的钻研和激情。
文章起源:https://dev.amazoncloud.cn/column/article/630a1bc4d4155422a46…