乐趣区

关于amazon:Amazon-中国区配置-PingIdentity-身份集成实现-Redshift-数据库群集单点登录

无疑应用单点登录 (SSO)拜访组织中的多种应用程序可能晋升用户体验。如果您负责为 Amazon Redshift 启用 SSO,则能够应用 ADFS、PingIdentity、Okta、Azure AD 或其余基于 SAML 浏览器的身份提供程序设置 SSO 身份验证。

这篇文章向您展现了如何将 PingOne 设置为您的 IdP。蕴含以下步骤:

  1. 配置 IdP(PingOne) 用户组和用户 – PingOne 集成 Microsoft AD 获取用户组和用户
  2. 配置 IdP(PingOne) 应用程序 – 创立 PingOne 应用程序,在应用程序中指定应用的 Amazon IAM Role,并指定应用该 Role 的用户组,用户应用该 Role 能够拜访 Redshift 群集
  3. 配置 IAM SAML 联结认证 – 通过在 PingOne IdP 和 Amazon 之间建设信赖关系,设置容许 PingOne 拜访 Amazon Redshift 的角色
  4. 创立 Amazon Redshift DBGroups 配置权限 – 在 Amazon Redshift 数据库中创立 DBGroups 并受权这些 DBGroups 拜访的 schemas 和 tables。
  5. 测试单点登录 – 应用 Workbench 客户端工具进行 SSO 登录测试并进行权限验证
亚马逊云科技开发者社区为开发者们提供寰球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、流动与比赛等。帮忙中国开发者对接世界最前沿技术,观点,和我的项目,并将中国优良开发者或技术举荐给寰球云社区。如果你还没有关注 / 珍藏,看到这里请肯定不要匆匆划过,点这里让它成为你的技术宝库!

解决方案概览

联结身份验证的流程以及步骤如下所示:

  1. 用户应用 workbench 客户端登录
  2. IdP(PingOne) 读取 Microsoft AD 里的用户名和明码进行身份验证,
  3. IDP 认证通过返回 SAML 断言
  4. 客户端应用 Amazon SDK 调用 Amazon Security Token Service (Amazon STS) 以应用 SAML 代入角色(assume Role)
  5. Amazon STS 返回长期 Amazon 凭证
  6. 客户端应用长期 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

  1. 登录 PingOne 治理 Portal https://admin.pingone.com/web-portal/login?trk=cndc-detail
  2. 导航栏中点击“setup”, 抉择“Identity Repository”点击“Connect to an Identiy Repositry”
  1. 抉择“Active Directory”作为认证源
  1. 依照提醒步骤进行操作,实现 AD 认证集成
    AD Connector 装置步骤可参考链接
  1. 配置实现
  1. 导航至 user 能够查看到 PingOne 曾经同步 Microsoft AD 用户组

配置 IdP(PingOne) 应用程序

这一步骤须要创立 PingOne 应用程序,以便用户组成员能够拜访 Amazon Redshift, 因为有两个用户组,咱们须要创立两个应用程序

  1. 登录 PingOne 治理界面,导航至 Application 栏
  1. 在“My Application”栏抉择 SAML
  2. 抉择“Add Application”
  3. 抉择“New SAML Application”
  1. 输出 Application 名称 比方: AmazonRedshiftReadOnly
  2. 持续下一步
  1. 在“Application Configuration”配置界面配置参数如下:
  1. 点击下一步
  1. 在“SSO Attribute Mapping”配置界面输出以下

  1. 在“Group Access”界面抉择 AD 用户组 readonly
  2. 点击下一步
  1. 查看配置界面 下载 SAML Metadata 文件到本地,下一步骤会导入到 Amazon IDP 中
  2. 记录 Initial Single Sign-On(SSO) URL, 配置 Workbench JDBC 连贯信息是须要该参数
  3. 点击实现
  1. 反复上述步骤创立第二个应用程序 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
  2. 配置实现后领有两个应用程序

配置 IAM SAML 联结认证

创立 IAM SAML IdP
要配置 IAM SAML,须要创立 IAM IdP 以及角色和策略。

配置步骤如下:

  1. 登录 Amazon Console,抉择 IAM 服务导航至 Access management 下的 Identity Provider
  2. 抉择 Add Provider,
  3. 类型为 SAML,
  4. 名称输出 pingreadonlyprov(该名称与 PingOne SSO Attribute Mapping 中参数 https://aws.amazon.com/SAML/Attributes/Role?trk=cndc-detail 输出的值统一)
  5. Metadata 文件 抉择 PingOne 应用程序 AmazonRedshiftReadOnly 下载的 XML 文件
  1. 反复上述步骤创立第二个 IdP (Metadata 文件抉择 PingOne 应用程序 AmazonRedshiftReadWrite 的 XML 文件)
  2. 创立实现后能够看到有两个 IdP Provider

创立 IAM Role 和 Policy

咱们应用 IAM Role 来管制用户组拜访 Redshift 数据库的权限。通过配置 IAM Role 并为该 Role 绑定策略的形式来限度不同的用户组对 Redshift 数据库的拜访。该 Role 容许用户通过 IdP 来拜访 Redshift 群集。

创立 IAM Role 之前咱们须要创立 IAM Policy 该 Policy 容许用户领有 joingroup 权限

  1. Amazon IAM 服务配置界面抉择 policy
  2. 抉择创立 Policy
  3. 抉择 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"
        }
    ]
}
  1. 配置实现后能够查看到刚刚创立的 Policy
  1. 在 IAM Console 界面抉择 Roles
  2. 创立 Role
  3. Type 抉择 SAML 2.0 federation.
  4. SAML provider 抉择上述步骤中创立的 IdP
  5. 抉择 Allow programmatic access only.
  6. Attribute:SAML:aud.
  7. Value 输出 http://localhost:7890/redshift/?trk=cndc-detail.
  1. 为第一个 Role 抉择 pingreadonlypolicy 第二个 Role 抉择 pingreadwritepolicy
  1. 为该 Role 输出名称(pingreadonlyrole 和 pingreadwriterole)
  2. 创立两个 Role 显示如下

创立 Amazon Redshift DBGroups 配置权限

该步骤将在 Redshift 数据库中创立 DbGroups,该 DbGroups 的名称须要与 IAM Policy 中 Joingroup 的名称保持一致,而后须要赋予 DbGroup 对 Redshift 数据库中的 shemale 以及 Table 相应的权限, 你无需创立 DbUser,因为 DbUser 在通过 PingOne SSO 登录 Redshift 后主动退出相应的 DbGroup.

  1. 应用 admin 账户通过 Workbench 登录 Redshift 群集
  2. 应用如下命令创立 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 数据库进行操作。

  1. 配置 Workbench SQL 客户端
    如果装置 Workbench SQL 客户端的服务器未装置 JDBC Driver 可通过以下链接进行下载安装。下载链接
  2. 创立 Connection Profile(该测试将测试 ReadWrite 权限)
    URL:jdbc:redshift:iam://<cluster endpoint>
  1. 抉择 Extended Properties,输出 SSO 相干参数

login_url 输出 PingOne Application Initial Single Sign-On(SSO) URL

  1. 点击 OK
  2. connection Profile 界面点击 OK 按钮
  1. 浏览器将会关上 PingOne 登录界面 输出 AD 账户用户名以及明码
  1. 登录胜利
  1. 运行 select 命令:select * from current_user
  1. 运行 insert 命令
INSERT INTO finance.revenue values 
(1111111111, 'ABCDE Company', 12000);

其它补充:

  1. 通过 SSO 登录的 AD 用户会永恒保留在 Redshift 数据用户列表中,然而无奈通过本地登录,起因是该用户名为 AD 用户与 IAM Role 集成后的联结用户,生成的是长期 Credentials 并非保留在 Redshift 数据库用户配置中。参考链接
  2. 该文档在测试步骤中的 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…

退出移动版