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

0
0
{"value":"无疑使用单点登录 (SSO)访问组织中的多种应用程序能够提升用户体验 。 如果您负责为 [Amazon Redshift](https://aws.amazon.com/cn/redshift/?trk=cndc-detail) 启用 SSO,则可以使用 ADFS、PingIdentity、Okta、Azure AD 或其他基于 SAML 浏览器的身份提供程序设置 SSO 身份验证。\n\n这篇文章向您展示了如何将 PingOne 设置为您的 IdP。包含以下步骤:\n\n1. 配置 IdP(PingOne) 用户组和用户 – PingOne 集成 Microsoft AD 获取用户组和用户\n2. 配置 IdP(PingOne) 应用程序 – 创建 PingOne 应用程序,在应用程序中指定使用的 Amazon IAM Role,并指定使用该 Role 的用户组,用户使用该 Role 可以访问 Redshift 群集\n3. 配置 IAM SAML 联合认证 – 通过在 PingOne IdP 和 Amazon 之间建立信任关系,设置允许 PingOne 访问 [Amazon Redshift](https://aws.amazon.com/cn/redshift/?trk=cndc-detail) 的角色\n4. 创建 [Amazon Redshift](https://aws.amazon.com/cn/redshift/?trk=cndc-detail) DBGroups 配置权限 – 在 [Amazon Redshift](https://aws.amazon.com/cn/redshift/?trk=cndc-detail) 数据库中创建 DBGroups 并授权这些 DBGroups 访问的 schemas 和 tables。\n5. 测试单点登录 – 使用 Workbench 客户端工具进行 SSO 登录测试并进行权限验证\n\n\n#### **解决方案概览**\n\n\n联合身份验证的流程以及步骤如下所示:\n\n1. 用户使用 workbench 客户端登录\n2. IdP(PingOne) 读取 Microsoft AD 里的用户名和密码进行身份验证,\n3. IDP 认证通过返回 SAML 断言\n4. 客户端使用 Amazon SDK 调用 Amazon Security Token Service (Amazon STS) 以使用 SAML 代入角色(assume Role)\n5. Amazon STS 返回临时 Amazon 凭证\n6. 客户端使用临时 Amazon 凭证访问 Redshift\n\n![image.png](https://dev-media.amazoncloud.cn/2c959805f870430a8aed5e1dcd225679_image.png)\n\n联合身份单点登录流程图\n\n\n#### **配置步骤**\n\n\n##### **前提**\n\n\n(1)配置之前如果没有组织内没有购买 PingOne 服务你需要访问\n\nhttps://www.pingidentity.com/en/trials/p14e-trial.html 注册免费账户\n\n(2)Microsoft AD 需要访问互联网权限 需要在 AD 服务器上安装 PingOne AD 连接器用于访问 PingOne 服务\n\n\n##### **Microsoft AD 域中创建用户组和用户**\n\n\n登录 AD 创建用户和用户组并把用户加入相应的用户组\n\n例如:创建四个用户 readonly01 readonly02 readwrite01 readwrite02 创建两个用户组 readonly readwrite 将用户 readonly01 readonly02 加入用户组 readonly 将用户 readwrite01 readwrite02 用户加入用户组 readwrite\n\n注意:添加用户时为用户配置邮箱地址\n\n![image.png](https://dev-media.amazoncloud.cn/1ba5aa15d693464488e5f4a739f32d66_image.png)\n\n用户组成员:\n\n![image.png](https://dev-media.amazoncloud.cn/22386831579945128a39ee2fe38590b3_image.png)\n\n![image.png](https://dev-media.amazoncloud.cn/5d0dbd9e10d44c8e9b5e7fc419338776_image.png)\n\n\n##### **配置 PingOne 连接 Microsoft AD**\n\n\n1. 登录 PingOne 管理 Portal [https://admin.pingone.com/web-portal/login](https://admin.pingone.com/web-portal/login)\n\n![image.png](https://dev-media.amazoncloud.cn/02f29b965f174d70b7d2bff823cca1f1_image.png)\n\n2. 导航栏中点击 “setup”,选择 “Identity Repository” 点击 “Connect to an Identiy Repositry”\n\n![image.png](https://dev-media.amazoncloud.cn/06792b645e37475382e106574da8f93c_image.png)\n\n3. 选择 “Active Directory” 作为认证源\n\n![image.png](https://dev-media.amazoncloud.cn/e75802ee82c8460abfae21aaf5e392a5_image.png)\n\n4. 按照提示步骤进行操作,完成 AD 认证集成\n\nAD Connector 安装步骤可[参考链接](https://onelogin.service-now.com/kb_view_customer.do?sysparm_article=KB0010442)\n\n![image.png](https://dev-media.amazoncloud.cn/bbd0387593514518b8a8ee6a780e4945_image.png)\n\n5. 配置完成\n\n![image.png](https://dev-media.amazoncloud.cn/9d00f3d803af45329afa328427cb01b9_image.png)\n\n6. 导航至 user 可以查看到 PingOne 已经同步 Microsoft AD 用户组\n\n![image.png](https://dev-media.amazoncloud.cn/97c81d1d862941258d5369ff50ffcda3_image.png)\n\n\n##### **配置 IdP(PingOne) 应用程序**\n\n\n这一步骤需要创建 PingOne 应用程序,以便用户组成员可以访问 [Amazon Redshift](https://aws.amazon.com/cn/redshift/?trk=cndc-detail),由于有两个用户组,我们需要创建两个应用程序\n\n1. 登录 PingOne 管理界面,导航至 Application 栏\n\n![image.png](https://dev-media.amazoncloud.cn/7f049b1af8024bcf86e7eff1799eee13_image.png)\n\n2. 在 “My Application” 栏选择 SAML\n\n3. 选择 “Add Application”\n\n4. 选择 “New SAML Application”\n\n![image.png](https://dev-media.amazoncloud.cn/49669517b23544119f20c808b7d20a4e_image.png)\n\n5. 输入 Application 名称 比如: AmazonRedshiftReadOnly\n\n6. 继续下一步\n\n![image.png](https://dev-media.amazoncloud.cn/8e85fec806164ced928794f7079ca98c_image.png)\n\n7. 在 “Application Configuration” 配置界面配置参数如下:\n\n![9D71ZE41KEA2X2S`X.png](https://dev-media.amazoncloud.cn/84901595b106469ca5e93e21176e5c66_9D7%241%25ZE4%5D%40%401KEA2X%5D2S%60X.png)\n\n8. 点击下一步\n\n![image.png](https://dev-media.amazoncloud.cn/0e9befc0031645b2903d136a4ddf7fcc_image.png)\n\n9. 在 “SSO Attribute Mapping” 配置界面输入以下\n\n![SBMK`5J`UL40M2BW.png](https://dev-media.amazoncloud.cn/473958198a6d44748e845855d419efc3_SBM%5B%7DK%60%7D5J%25%60%5DUL40%25M2%29BW.png)\n\n![image.png](https://dev-media.amazoncloud.cn/6ec451ae0637494ba45260bac530d5e4_image.png)\n\n10. 在 “Group Access” 界面选择 AD 用户组 readonly\n\n11. 点击下一步\n\n![image.png](https://dev-media.amazoncloud.cn/0d248b84c23e43d29b22f0ba35043f98_image.png)\n\n12. 查看配置界面 下载 SAML Metadata 文件到本地,下一步骤会导入到 Amazon IDP 中\n\n13. 记录 Initial Single Sign-On(SSO) URL,配置 Workbench JDBC 连接信息是需要该参数\n\n14. 点击完成\n\n![image.png](https://dev-media.amazoncloud.cn/f07ce3da76b3402ba0d218a767129112_image.png)\n\n15. 重复上述步骤创建第二个应用程序 AmazonRedshiftReadWrite,需要调整以下两部分的参数:\n\n- SSO Attribute mapping:\n [https://aws.amazon.com/SAML/Attributes/Role](https://aws.amazon.com/SAML/Attributes/Role) 参数的值更改为\n\n```arn:aws-cn:iam:::role/pingreadwriterole,arn:aws-cn:iam:::saml-provider/pingreadwriteprov```\n- Group Access 选择 AD 用户组 readwrite\n16. 配置完成后拥有两个应用程序\n\n![image.png](https://dev-media.amazoncloud.cn/5e680629b56a403ea3059ca47b4f03db_image.png)\n\n\n##### **配置 IAM SAML 联合认证**\n\n\n###### **创建IAM SAML IdP**\n\n\n要配置 IAM SAML,需要创建 IAM IdP 以及角色和策略。\n\n配置步骤如下:\n\n1. 登录 Amazon Console,选择 IAM 服务导航至 Access management 下的 Identity Provider\n\n![image.png](https://dev-media.amazoncloud.cn/836fdf33093947459d31a79cd5b4e1b2_image.png)\n\n2. 选择 Add Provider,\n\n3. 类型为 SAML,\n\n4. 名称输入 pingreadonlyprov(该名称与 PingOne SSO Attribute Mapping 中参数 https://aws.amazon.com/SAML/Attributes/Role 输入的值一致)\n\n5. Metadata 文件 选择 PingOne 应用程序 AmazonRedshiftReadOnly 下载的 XML 文件\n\n![image.png](https://dev-media.amazoncloud.cn/f04a67a51a6446cca6267a4f303358cf_image.png)\n\n6. 重复上述步骤创建第二个 IdP (Metadata 文件选择 PingOne 应用程序 AmazonRedshiftReadWrite 的 XML 文件)\n\n7. 创建完成后可以看到有两个 IdP Provider\n\n![image.png](https://dev-media.amazoncloud.cn/9daf127b3f554efea0814adb6ddc437e_image.png)\n\n\n###### **创建 IAM Role 和 Policy**\n\n\n我们使用 IAM Role 来控制用户组访问 Redshift 数据库的权限。通过配置 IAM Role 并为该 Role 绑定策略的方式来限制不同的用户组对 Redshift 数据库的访问。该 Role 允许用户通过 IdP 来访问 Redshift 群集。\n\n创建 IAM Role 之前我们需要创建 IAM Policy 该 Policy 允许用户拥有 joingroup 权限\n\n1. Amazon IAM 服务配置界面选择 policy\n\n2. 选择创建 Policy\n\n3. 选择 JSON,创建两个 pingreadonlypolicy 和 pingreadwritepolicy\n\n- 替换 <cluster> 为组织中的 Redshift cluster 名称\\n- 替换 <dbname> 为组织中的 Redshift dbname\\n\\n两个 policy 的配置不同之处是在 JoinGroup 的 Resource。\\n\\n“JoinGroup”:pingreadonlypolicy 允许用户加入 Redshift readonly 组\\n\\n“JoinGroup”:pingreadwritepolicy 允许用户加入 Redshift readwrite 组\\n\\n用户访问 Redshift 数据库并自动加入 Redshift DBGroup 只在会话存活期内有效,该策略中并未包含创建 DbGroup 的权限,因为创建 DBGroups 并赋予 DBgroup 相应的权限需要手动在 Redshift 数据库中完成。\\n\\n以下代码展示pingreadonlypolicy内容:\\n\\n```\\n{\\n \\"Version\\": \\"2012-10-17\\",\\n \\"Statement\\": [\\n {\\n \\"Sid\\": \\"VisualEditor0\\",\\n \\"Effect\\": \\"Allow\\",\\n \\"Action\\": \\"redshift:GetClusterCredentials\\",\\n \\"Resource\\": [\\n \\"arn:aws-cn:redshift:*:*:cluster:<cluster>\\",\\n \\"arn:aws-cn:redshift:*:*:dbname:<cluster>/<dbname>\\",\\n \\"arn:aws-cn:redshift:*:*:dbuser:<cluster>/\${redshift:DbUser}\\"\\n ],\\n \\"Condition\\": {\\n \\"StringLike\\": {\\n \\"aws:userid\\": \\"*:\${redshift:DbUser}\\"\\n }\\n }\\n },\\n {\\n \\"Sid\\": \\"VisualEditor1\\",\\n \\"Effect\\": \\"Allow\\",\\n \\"Action\\": \\"redshift:CreateClusterUser\\",\\n \\"Resource\\": [\\n \\"arn:aws-cn:redshift:*:*:dbname:<cluster>/<dbname>\\",\\n \\"arn:aws-cn:redshift:*:*:dbuser:<cluster>/\${redshift:DbUser}\\"\\n ]\\n },\\n {\\n \\"Sid\\": \\"VisualEditor2\\",\\n \\"Effect\\": \\"Allow\\",\\n \\"Action\\": \\"redshift:JoinGroup\\",\\n \\"Resource\\": \\"arn:aws-cn:redshift:*:*:dbgroup:<cluster>/readonly\\"\\n }\\n ]\\n}\\n```\\n\\n4. 配置完成后可以查看到刚刚创建的 Policy\\n\\n![image.png](https://dev-media.amazoncloud.cn/3fce050518794000a8e58876d6d2b0d3_image.png)\\n\\n5. 在 IAM Console 界面选择 Roles\\n\\n6. 创建 Role\\n\\n7. Type 选择 SAML 2.0 federation.\\n\\n8. SAML provider 选择上述步骤中创建的 IdP\\n\\n9. 选择 Allow programmatic access only.\\n\\n10. Attribute: SAML:aud.\\n\\n11. Value 输入 http://localhost:7890/redshift/.\\n\\n![image.png](https://dev-media.amazoncloud.cn/0e7e7c49abe94d76b64d23bd33ead620_image.png)\\n\\n12. 为第一个 Role 选择 pingreadonlypolicy 第二个 Role 选择 pingreadwritepolicy\\n\\n![image.png](https://dev-media.amazoncloud.cn/f625bf699d2c40068fdbd82138975d10_image.png)\\n\\n13. 为该 Role 输入名称(pingreadonlyrole 和 pingreadwriterole)\\n\\n14. 创建两个 Role 显示如下\\n\\n![image.png](https://dev-media.amazoncloud.cn/1b78151008d541c9a12c72ee78ab9e29_image.png)\\n\\n\\n##### **创建 Amazon Redshift DBGroups 配置权限**\\n\\n\\n该步骤将在 Redshift 数据库中创建 DbGroups,该 DbGroups 的名称需要与 IAM Policy 中 Joingroup 的名称保持一致,然后需要赋予 DbGroup 对 Redshift 数据库中的 shemale 以及 Table 相应的权限,你无需创建 DbUser,因为 DbUser 在通过 PingOne SSO 登录 Redshift 后自动加入相应的 DbGroup.\\n\\n1. 使用 admin 账户通过 Workbench 登录 Redshift 群集\\n2. 使用如下命令创建 DbGroups 并赋予 Group 相应的 Schema 以及 Table 权限\\n\\n```\\nCREATE SCHEMA finance;\\nCREATE TABLE IF NOT EXISTS finance.revenue\\n(\\naccount INTEGER ENCODE az64,\\ncustomer VARCHAR(20) ENCODE lzo,\\nsalesamt NUMERIC(18,0) ENCODE az64\\n)DISTSTYLE AUTO;\\nCREATE GROUP readonly;\\nCREATE GROUP readwrite;\\nALTER DEFAULT PRIVILEGES IN SCHEMA finance\\nGRANT SELECT on TABLES to GROUP readonly;\\nGRANT USAGE on SCHEMA finance to GROUP readonly;\\nGRANT SELECT on ALL TABLES in SCHEMA finance to GROUP readonly;\\nALTER DEFAULT PRIVILEGES IN SCHEMA finance\\nGRANT ALL on TABLES to GROUP readwrite;\\nGRANT USAGE on SCHEMA finance to GROUP readwrite;\\nGRANT ALL on ALL TABLES in SCHEMA finance to GROUP readwrite;\\nINSERT INTO finance.revenue values \\n(101, 'ABC Company', 12000),\\n(102, 'Tech Logistics', 175400),\\n(103, 'XYZ Industry', 24355),\\n(104, 'The tax experts', 186577);\\n```\\n\\n\\n##### **测试单点登录**\\n\\n\\n该步骤将使用 Microsoft AD 用户使用 Workbench SQL Client 通过 PingOne SSO 登录访问 Redshift 数据库进行操作。\\n\\n1. 配置 Workbench SQL 客户端\\n\\n如果安装 Workbench SQL 客户端的服务器未安装 JDBC Driver 可通过以下链接进行下载安装。 [下载链接](https://docs.aws.amazon.com/redshift/latest/mgmt/configure-jdbc-connection.html#download-jdbc-driver)\\n\\n2. 创建 Connection Profile(该测试将测试 ReadWrite 权限)\\n\\nURL:jdbc:redshift:iam://<*cluster endpoint*>\\n\\n![image.png](https://dev-media.amazoncloud.cn/d404643e62274a478cd689f5117d0723_image.png)\\n\\n3. 选择 Extended Properties,输入 SSO 相关参数\\n\\n![F1INZUE8~4Z`91D0J0E.png](https://dev-media.amazoncloud.cn/92442f7118464033934a6d0bab35d9c8_F1INZUE8~4Z%28%40%60%7B91D%7D0J0E.png)\\n\\nlogin_url 输入 PingOne Application Initial Single Sign-On(SSO) URL\\n\\n![image.png](https://dev-media.amazoncloud.cn/06b686c3367c47a59e4e125fc80dd4e2_image.png)\\n\\n![image.png](https://dev-media.amazoncloud.cn/b89e1068d8124ad1bded6b9e1a997e51_image.png)\\n\\n4. 点击 OK\\n\\n5. connection Profile 界面点击 OK 按钮\\n\\n![image.png](https://dev-media.amazoncloud.cn/b373b4a1a20246ecab272db3df16cd52_image.png)\\n\\n6. 浏览器将会打开 PingOne 登录界面 输入 AD 账户用户名以及密码\\n\\n![image.png](https://dev-media.amazoncloud.cn/93cdb71ca0f842babe7700c8b857268f_image.png)\\n\\n7. 登录成功\\n\\n![image.png](https://dev-media.amazoncloud.cn/cb46d05db8e444f296f7878f259c6b4a_image.png)\\n\\n8. 运行 select 命令:select * from current_user\\n\\n![image.png](https://dev-media.amazoncloud.cn/30fa5427c7d64f79a5a262dcfe68a95b_image.png)\\n\\n9. 运行 insert 命令\\n\\n```\\nINSERT INTO finance.revenue values \\n(1111111111, 'ABCDE Company', 12000);\\n```\\n\\n![image.png](https://dev-media.amazoncloud.cn/ac7cb6be94af438f9c0d4d30b4910bee_image.png)\\n\\n\\n#### **其它补充:**\\n\\n\\n1. 通过 SSO 登录的 AD 用户会永久保存在 Redshift 数据用户列表中,但是无法通过本地登录,原因是该用户名为 AD 用户与 IAM Role 集成后的联合用户,生成的是临时 Credentials 并非保存在 Redshift 数据库用户配置中。[参考链接](https://docs.aws.amazon.com/zh_cn/redshift/latest/APIReference/API_GetClusterCredentials.html)\\n2. 该文档在测试步骤中的 extended properties 指定了参数 DbGroups,该参数也可以通过配置 PingOne Application SSO Attribute Mapping 的参数 [https://redshift.amazon.com/SAML/Attributes/DbGroups进行指定](https://redshift.amazon.com/SAML/Attributes/DbGroups进行指定)\\n\\n\\n#### **总结:**\\n\\n\\n在这篇博文中,我向您介绍了如何配置和使用 PingOne 作为您的 IdP 并为 Amazon Redshift 集群启用联合 SSO 的部署指南。 您可以按照这些步骤为您的组织设置联合 SSO,并根据读/写权限或业务功能管理访问权限,并将 PingOne IdP 中定义的组成员身份传递到您的 Amazon Redshift 集群中。\\n\\n\\n#### **本篇作者**\\n\\n\\n![image.png](https://dev-media.amazoncloud.cn/3cc798473c8a46c29212128d2aff2cef_image.png)\\n\\n\\n#### **侯聪**\\n\\n\\nAmazon 专业服务团队云运维咨询顾问,专注于云上运维以及优化方案的咨询与实施。多年从事云基础架构设计交付工作,对虚拟化,SDN,容器,自动化运维等技术领域有深入的研究和热情。\\n\\n![image.png](https://dev-media.amazoncloud.cn/13ab6113cd394052a7fc3b9aba278a2d_image.png)\\n\\n\\n#### **银硕**\\n\\n\\nAmazon 专业服务团队云运维咨询顾问,对云上服务建设运维、 DevOps 迁移改造等项目交付有丰富的经验。负责企业级客户的云架构设计、云上自动化运维、容器化平台设计咨询等,对云原生技术有深入的研究和热情。","render":"<p>无疑使用单点登录 (SSO)访问组织中的多种应用程序能够提升用户体验 。 如果您负责为 Amazon Redshift 启用 SSO,则可以使用 ADFS、PingIdentity、Okta、Azure AD 或其他基于 SAML 浏览器的身份提供程序设置 SSO 身份验证。</p>\n<p>这篇文章向您展示了如何将 PingOne 设置为您的 IdP。包含以下步骤:</p>\n<ol>\\n<li>配置 IdP(PingOne) 用户组和用户 – PingOne 集成 Microsoft AD 获取用户组和用户</li>\n<li>配置 IdP(PingOne) 应用程序 – 创建 PingOne 应用程序,在应用程序中指定使用的 Amazon IAM Role,并指定使用该 Role 的用户组,用户使用该 Role 可以访问 Redshift 群集</li>\n<li>配置 IAM SAML 联合认证 – 通过在 PingOne IdP 和 Amazon 之间建立信任关系,设置允许 PingOne 访问 Amazon Redshift 的角色</li>\n<li>创建 Amazon Redshift DBGroups 配置权限 – 在 Amazon Redshift 数据库中创建 DBGroups 并授权这些 DBGroups 访问的 schemas 和 tables。</li>\n<li>测试单点登录 – 使用 Workbench 客户端工具进行 SSO 登录测试并进行权限验证</li>\n</ol>\\n<h4><a id=\\"_11\\"></a><strong>解决方案概览</strong></h4>\\n<p>联合身份验证的流程以及步骤如下所示:</p>\n<ol>\\n<li>用户使用 workbench 客户端登录</li>\n<li>IdP(PingOne) 读取 Microsoft AD 里的用户名和密码进行身份验证,</li>\n<li>IDP 认证通过返回 SAML 断言</li>\n<li>客户端使用 Amazon SDK 调用 Amazon Security Token Service (Amazon STS) 以使用 SAML 代入角色(assume Role)</li>\n<li>Amazon STS 返回临时 Amazon 凭证</li>\n<li>客户端使用临时 Amazon 凭证访问 Redshift</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/2c959805f870430a8aed5e1dcd225679_image.png\\" alt=\\"image.png\\" /></p>\n<p>联合身份单点登录流程图</p>\n<h4><a id=\\"_28\\"></a><strong>配置步骤</strong></h4>\\n<h5><a id=\\"_31\\"></a><strong>前提</strong></h5>\\n<p>(1)配置之前如果没有组织内没有购买 PingOne 服务你需要访问</p>\n<p>https://www.pingidentity.com/en/trials/p14e-trial.html 注册免费账户</p>\n<p>(2)Microsoft AD 需要访问互联网权限 需要在 AD 服务器上安装 PingOne AD 连接器用于访问 PingOne 服务</p>\n<h5><a id=\\"Microsoft_AD__41\\"></a><strong>Microsoft AD 域中创建用户组和用户</strong></h5>\\n<p>登录 AD 创建用户和用户组并把用户加入相应的用户组</p>\n<p>例如:创建四个用户 readonly01 readonly02 readwrite01 readwrite02 创建两个用户组 readonly readwrite 将用户 readonly01 readonly02 加入用户组 readonly 将用户 readwrite01 readwrite02 用户加入用户组 readwrite</p>\n<p>注意:添加用户时为用户配置邮箱地址</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/1ba5aa15d693464488e5f4a739f32d66_image.png\\" alt=\\"image.png\\" /></p>\n<p>用户组成员:</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/22386831579945128a39ee2fe38590b3_image.png\\" alt=\\"image.png\\" /></p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/5d0dbd9e10d44c8e9b5e7fc419338776_image.png\\" alt=\\"image.png\\" /></p>\n<h5><a id=\\"_PingOne__Microsoft_AD_59\\"></a><strong>配置 PingOne 连接 Microsoft AD</strong></h5>\\n<ol>\\n<li>登录 PingOne 管理 Portal <a href=\\"https://admin.pingone.com/web-portal/login\\" target=\\"_blank\\">https://admin.pingone.com/web-portal/login</a></li>\\n</ol>\n<p><img src=\\"https://dev-media.amazoncloud.cn/02f29b965f174d70b7d2bff823cca1f1_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"2\\">\\n<li>导航栏中点击 “setup”,选择 “Identity Repository” 点击 “Connect to an Identiy Repositry”</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/06792b645e37475382e106574da8f93c_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"3\\">\\n<li>选择 “Active Directory” 作为认证源</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/e75802ee82c8460abfae21aaf5e392a5_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"4\\">\\n<li>按照提示步骤进行操作,完成 AD 认证集成</li>\n</ol>\\n<p>AD Connector 安装步骤可<a href=\\"https://onelogin.service-now.com/kb_view_customer.do?sysparm_article=KB0010442\\" target=\\"_blank\\">参考链接</a></p>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/bbd0387593514518b8a8ee6a780e4945_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"5\\">\\n<li>配置完成</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/9d00f3d803af45329afa328427cb01b9_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"6\\">\\n<li>导航至 user 可以查看到 PingOne 已经同步 Microsoft AD 用户组</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/97c81d1d862941258d5369ff50ffcda3_image.png\\" alt=\\"image.png\\" /></p>\n<h5><a id=\\"_IdPPingOne__89\\"></a><strong>配置 IdP(PingOne) 应用程序</strong></h5>\\n<p>这一步骤需要创建 PingOne 应用程序,以便用户组成员可以访问 Amazon Redshift,由于有两个用户组,我们需要创建两个应用程序</p>\n<ol>\\n<li>登录 PingOne 管理界面,导航至 Application 栏</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/7f049b1af8024bcf86e7eff1799eee13_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"2\\">\\n<li>\\n<p>在 “My Application” 栏选择 SAML</p>\n</li>\\n<li>\\n<p>选择 “Add Application”</p>\n</li>\\n<li>\\n<p>选择 “New SAML Application”</p>\n</li>\\n</ol>\n<p><img src=\\"https://dev-media.amazoncloud.cn/49669517b23544119f20c808b7d20a4e_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"5\\">\\n<li>\\n<p>输入 Application 名称 比如: AmazonRedshiftReadOnly</p>\n</li>\\n<li>\\n<p>继续下一步</p>\n</li>\\n</ol>\n<p><img src=\\"https://dev-media.amazoncloud.cn/8e85fec806164ced928794f7079ca98c_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"7\\">\\n<li>在 “Application Configuration” 配置界面配置参数如下:</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/84901595b106469ca5e93e21176e5c66_9D7%241%25ZE4%5D%40%401KEA2X%5D2S%60X.png\\" alt=\\"9D71ZE41KEA2X2S`X.png\\" /></p>\n<ol start=\\"8\\">\\n<li>点击下一步</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/0e9befc0031645b2903d136a4ddf7fcc_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"9\\">\\n<li>在 “SSO Attribute Mapping” 配置界面输入以下</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/473958198a6d44748e845855d419efc3_SBM%5B%7DK%60%7D5J%25%60%5DUL40%25M2%29BW.png\\" alt=\\"SBMKUL40M2BW.png\\" /></p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/6ec451ae0637494ba45260bac530d5e4_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"10\\">\\n<li>\\n<p>在 “Group Access” 界面选择 AD 用户组 readonly</p>\n</li>\\n<li>\\n<p>点击下一步</p>\n</li>\\n</ol>\n<p><img src=\\"https://dev-media.amazoncloud.cn/0d248b84c23e43d29b22f0ba35043f98_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"12\\">\\n<li>\\n<p>查看配置界面 下载 SAML Metadata 文件到本地,下一步骤会导入到 Amazon IDP 中</p>\n</li>\\n<li>\\n<p>记录 Initial Single Sign-On(SSO) URL,配置 Workbench JDBC 连接信息是需要该参数</p>\n</li>\\n<li>\\n<p>点击完成</p>\n</li>\\n</ol>\n<p><img src=\\"https://dev-media.amazoncloud.cn/f07ce3da76b3402ba0d218a767129112_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"15\\">\\n<li>重复上述步骤创建第二个应用程序 AmazonRedshiftReadWrite,需要调整以下两部分的参数:</li>\n</ol>\\n<ul>\\n<li>SSO Attribute mapping:<br />\\n<a href=\\"https://aws.amazon.com/SAML/Attributes/Role\\" target=\\"_blank\\">https://aws.amazon.com/SAML/Attributes/Role</a> 参数的值更改为</li>\\n</ul>\n<p><code>arn:aws-cn:iam:::role/pingreadwriterole,arn:aws-cn:iam:::saml-provider/pingreadwriteprov</code></p>\\n<ul>\\n<li>Group Access 选择 AD 用户组 readwrite</li>\n</ul>\\n<ol start=\\"16\\">\\n<li>配置完成后拥有两个应用程序</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/5e680629b56a403ea3059ca47b4f03db_image.png\\" alt=\\"image.png\\" /></p>\n<h5><a id=\\"_IAM_SAML__152\\"></a><strong>配置 IAM SAML 联合认证</strong></h5>\\n<h6><a id=\\"IAM_SAML_IdP_155\\"></a><strong>创建IAM SAML IdP</strong></h6>\\n<p>要配置 IAM SAML,需要创建 IAM IdP 以及角色和策略。</p>\n<p>配置步骤如下:</p>\n<ol>\\n<li>登录 Amazon Console,选择 IAM 服务导航至 Access management 下的 Identity Provider</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/836fdf33093947459d31a79cd5b4e1b2_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"2\\">\\n<li>\\n<p>选择 Add Provider,</p>\n</li>\\n<li>\\n<p>类型为 SAML,</p>\n</li>\\n<li>\\n<p>名称输入 pingreadonlyprov(该名称与 PingOne SSO Attribute Mapping 中参数 https://aws.amazon.com/SAML/Attributes/Role 输入的值一致)</p>\n</li>\\n<li>\\n<p>Metadata 文件 选择 PingOne 应用程序 AmazonRedshiftReadOnly 下载的 XML 文件</p>\n</li>\\n</ol>\n<p><img src=\\"https://dev-media.amazoncloud.cn/f04a67a51a6446cca6267a4f303358cf_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"6\\">\\n<li>\\n<p>重复上述步骤创建第二个 IdP (Metadata 文件选择 PingOne 应用程序 AmazonRedshiftReadWrite 的 XML 文件)</p>\n</li>\\n<li>\\n<p>创建完成后可以看到有两个 IdP Provider</p>\n</li>\\n</ol>\n<p><img src=\\"https://dev-media.amazoncloud.cn/9daf127b3f554efea0814adb6ddc437e_image.png\\" alt=\\"image.png\\" /></p>\n<h6><a id=\\"_IAM_Role__Policy_183\\"></a><strong>创建 IAM Role 和 Policy</strong></h6>\\n<p>我们使用 IAM Role 来控制用户组访问 Redshift 数据库的权限。通过配置 IAM Role 并为该 Role 绑定策略的方式来限制不同的用户组对 Redshift 数据库的访问。该 Role 允许用户通过 IdP 来访问 Redshift 群集。</p>\n<p>创建 IAM Role 之前我们需要创建 IAM Policy 该 Policy 允许用户拥有 joingroup 权限</p>\n<ol>\\n<li>\\n<p>Amazon IAM 服务配置界面选择 policy</p>\n</li>\\n<li>\\n<p>选择创建 Policy</p>\n</li>\\n<li>\\n<p>选择 JSON,创建两个 pingreadonlypolicy 和 pingreadwritepolicy</p>\n</li>\\n</ol>\n<ul>\\n<li>替换 &lt;cluster&gt; 为组织中的 Redshift cluster 名称</li>\n<li>替换 &lt;dbname&gt; 为组织中的 Redshift dbname</li>\n</ul>\\n<p>两个 policy 的配置不同之处是在 JoinGroup 的 Resource。</p>\n<p>“JoinGroup”:pingreadonlypolicy 允许用户加入 Redshift readonly 组</p>\n<p>“JoinGroup”:pingreadwritepolicy 允许用户加入 Redshift readwrite 组</p>\n<p>用户访问 Redshift 数据库并自动加入 Redshift DBGroup 只在会话存活期内有效,该策略中并未包含创建 DbGroup 的权限,因为创建 DBGroups 并赋予 DBgroup 相应的权限需要手动在 Redshift 数据库中完成。</p>\n<p>以下代码展示pingreadonlypolicy内容:</p>\n<pre><code class=\\"lang-\\">{\\n &quot;Version&quot;: &quot;2012-10-17&quot;,\\n &quot;Statement&quot;: [\\n {\\n &quot;Sid&quot;: &quot;VisualEditor0&quot;,\\n &quot;Effect&quot;: &quot;Allow&quot;,\\n &quot;Action&quot;: &quot;redshift:GetClusterCredentials&quot;,\\n &quot;Resource&quot;: [\\n &quot;arn:aws-cn:redshift:*:*:cluster:&lt;cluster&gt;&quot;,\\n &quot;arn:aws-cn:redshift:*:*:dbname:&lt;cluster&gt;/&lt;dbname&gt;&quot;,\\n &quot;arn:aws-cn:redshift:*:*:dbuser:&lt;cluster&gt;/\${redshift:DbUser}&quot;\\n ],\\n &quot;Condition&quot;: {\\n &quot;StringLike&quot;: {\\n &quot;aws:userid&quot;: &quot;*:\${redshift:DbUser}&quot;\\n }\\n }\\n },\\n {\\n &quot;Sid&quot;: &quot;VisualEditor1&quot;,\\n &quot;Effect&quot;: &quot;Allow&quot;,\\n &quot;Action&quot;: &quot;redshift:CreateClusterUser&quot;,\\n &quot;Resource&quot;: [\\n &quot;arn:aws-cn:redshift:*:*:dbname:&lt;cluster&gt;/&lt;dbname&gt;&quot;,\\n &quot;arn:aws-cn:redshift:*:*:dbuser:&lt;cluster&gt;/\${redshift:DbUser}&quot;\\n ]\\n },\\n {\\n &quot;Sid&quot;: &quot;VisualEditor2&quot;,\\n &quot;Effect&quot;: &quot;Allow&quot;,\\n &quot;Action&quot;: &quot;redshift:JoinGroup&quot;,\\n &quot;Resource&quot;: &quot;arn:aws-cn:redshift:*:*:dbgroup:&lt;cluster&gt;/readonly&quot;\\n }\\n ]\\n}\\n</code></pre>\\n<ol start=\\"4\\">\\n<li>配置完成后可以查看到刚刚创建的 Policy</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/3fce050518794000a8e58876d6d2b0d3_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"5\\">\\n<li>\\n<p>在 IAM Console 界面选择 Roles</p>\n</li>\\n<li>\\n<p>创建 Role</p>\n</li>\\n<li>\\n<p>Type 选择 SAML 2.0 federation.</p>\n</li>\\n<li>\\n<p>SAML provider 选择上述步骤中创建的 IdP</p>\n</li>\\n<li>\\n<p>选择 Allow programmatic access only.</p>\n</li>\\n<li>\\n<p>Attribute: SAML:aud.</p>\n</li>\\n<li>\\n<p>Value 输入 http://localhost:7890/redshift/.</p>\n</li>\\n</ol>\n<p><img src=\\"https://dev-media.amazoncloud.cn/0e7e7c49abe94d76b64d23bd33ead620_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"12\\">\\n<li>为第一个 Role 选择 pingreadonlypolicy 第二个 Role 选择 pingreadwritepolicy</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/f625bf699d2c40068fdbd82138975d10_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"13\\">\\n<li>\\n<p>为该 Role 输入名称(pingreadonlyrole 和 pingreadwriterole)</p>\n</li>\\n<li>\\n<p>创建两个 Role 显示如下</p>\n</li>\\n</ol>\n<p><img src=\\"https://dev-media.amazoncloud.cn/1b78151008d541c9a12c72ee78ab9e29_image.png\\" alt=\\"image.png\\" /></p>\n<h5><a id=\\"_Amazon_Redshift_DBGroups__278\\"></a><strong>创建 Amazon Redshift DBGroups 配置权限</strong></h5>\\n<p>该步骤将在 Redshift 数据库中创建 DbGroups,该 DbGroups 的名称需要与 IAM Policy 中 Joingroup 的名称保持一致,然后需要赋予 DbGroup 对 Redshift 数据库中的 shemale 以及 Table 相应的权限,你无需创建 DbUser,因为 DbUser 在通过 PingOne SSO 登录 Redshift 后自动加入相应的 DbGroup.</p>\n<ol>\\n<li>使用 admin 账户通过 Workbench 登录 Redshift 群集</li>\n<li>使用如下命令创建 DbGroups 并赋予 Group 相应的 Schema 以及 Table 权限</li>\n</ol>\\n<pre><code class=\\"lang-\\">CREATE SCHEMA finance;\\nCREATE TABLE IF NOT EXISTS finance.revenue\\n(\\naccount INTEGER ENCODE az64,\\ncustomer VARCHAR(20) ENCODE lzo,\\nsalesamt NUMERIC(18,0) ENCODE az64\\n)DISTSTYLE AUTO;\\nCREATE GROUP readonly;\\nCREATE GROUP readwrite;\\nALTER DEFAULT PRIVILEGES IN SCHEMA finance\\nGRANT SELECT on TABLES to GROUP readonly;\\nGRANT USAGE on SCHEMA finance to GROUP readonly;\\nGRANT SELECT on ALL TABLES in SCHEMA finance to GROUP readonly;\\nALTER DEFAULT PRIVILEGES IN SCHEMA finance\\nGRANT ALL on TABLES to GROUP readwrite;\\nGRANT USAGE on SCHEMA finance to GROUP readwrite;\\nGRANT ALL on ALL TABLES in SCHEMA finance to GROUP readwrite;\\nINSERT INTO finance.revenue values \\n(101, 'ABC Company', 12000),\\n(102, 'Tech Logistics', 175400),\\n(103, 'XYZ Industry', 24355),\\n(104, 'The tax experts', 186577);\\n</code></pre>\\n<h5><a id=\\"_312\\"></a><strong>测试单点登录</strong></h5>\\n<p>该步骤将使用 Microsoft AD 用户使用 Workbench SQL Client 通过 PingOne SSO 登录访问 Redshift 数据库进行操作。</p>\n<ol>\\n<li>配置 Workbench SQL 客户端</li>\n</ol>\\n<p>如果安装 Workbench SQL 客户端的服务器未安装 JDBC Driver 可通过以下链接进行下载安装。 <a href=\\"https://docs.aws.amazon.com/redshift/latest/mgmt/configure-jdbc-connection.html#download-jdbc-driver\\" target=\\"_blank\\">下载链接</a></p>\\n<ol start=\\"2\\">\\n<li>创建 Connection Profile(该测试将测试 ReadWrite 权限)</li>\n</ol>\\n<p>URL:jdbc:redshift:iam://&lt;<em>cluster endpoint</em>&gt;</p>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/d404643e62274a478cd689f5117d0723_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"3\\">\\n<li>选择 Extended Properties,输入 SSO 相关参数</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/92442f7118464033934a6d0bab35d9c8_F1INZUE8~4Z%28%40%60%7B91D%7D0J0E.png\\" alt=\\"F1INZUE8~4Z`91D0J0E.png\\" /></p>\n<p>login_url 输入 PingOne Application Initial Single Sign-On(SSO) URL</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/06b686c3367c47a59e4e125fc80dd4e2_image.png\\" alt=\\"image.png\\" /></p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/b89e1068d8124ad1bded6b9e1a997e51_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"4\\">\\n<li>\\n<p>点击 OK</p>\n</li>\\n<li>\\n<p>connection Profile 界面点击 OK 按钮</p>\n</li>\\n</ol>\n<p><img src=\\"https://dev-media.amazoncloud.cn/b373b4a1a20246ecab272db3df16cd52_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"6\\">\\n<li>浏览器将会打开 PingOne 登录界面 输入 AD 账户用户名以及密码</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/93cdb71ca0f842babe7700c8b857268f_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"7\\">\\n<li>登录成功</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/cb46d05db8e444f296f7878f259c6b4a_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"8\\">\\n<li>运行 select 命令:select * from current_user</li>\n</ol>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/30fa5427c7d64f79a5a262dcfe68a95b_image.png\\" alt=\\"image.png\\" /></p>\n<ol start=\\"9\\">\\n<li>运行 insert 命令</li>\n</ol>\\n<pre><code class=\\"lang-\\">INSERT INTO finance.revenue values \\n(1111111111, 'ABCDE Company', 12000);\\n</code></pre>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/ac7cb6be94af438f9c0d4d30b4910bee_image.png\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"_365\\"></a><strong>其它补充:</strong></h4>\\n<ol>\\n<li>通过 SSO 登录的 AD 用户会永久保存在 Redshift 数据用户列表中,但是无法通过本地登录,原因是该用户名为 AD 用户与 IAM Role 集成后的联合用户,生成的是临时 Credentials 并非保存在 Redshift 数据库用户配置中。<a href=\\"https://docs.aws.amazon.com/zh_cn/redshift/latest/APIReference/API_GetClusterCredentials.html\\" target=\\"_blank\\">参考链接</a></li>\\n<li>该文档在测试步骤中的 extended properties 指定了参数 DbGroups,该参数也可以通过配置 PingOne Application SSO Attribute Mapping 的参数 <a href=\\"https://redshift.amazon.com/SAML/Attributes/DbGroups%E8%BF%9B%E8%A1%8C%E6%8C%87%E5%AE%9A\\" target=\\"_blank\\">https://redshift.amazon.com/SAML/Attributes/DbGroups进行指定</a></li>\\n</ol>\n<h4><a id=\\"_372\\"></a><strong>总结:</strong></h4>\\n<p>在这篇博文中,我向您介绍了如何配置和使用 PingOne 作为您的 IdP 并为 Amazon Redshift 集群启用联合 SSO 的部署指南。 您可以按照这些步骤为您的组织设置联合 SSO,并根据读/写权限或业务功能管理访问权限,并将 PingOne IdP 中定义的组成员身份传递到您的 Amazon Redshift 集群中。</p>\n<h4><a id=\\"_378\\"></a><strong>本篇作者</strong></h4>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/3cc798473c8a46c29212128d2aff2cef_image.png\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"_384\\"></a><strong>侯聪</strong></h4>\\n<p>Amazon 专业服务团队云运维咨询顾问,专注于云上运维以及优化方案的咨询与实施。多年从事云基础架构设计交付工作,对虚拟化,SDN,容器,自动化运维等技术领域有深入的研究和热情。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/13ab6113cd394052a7fc3b9aba278a2d_image.png\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"_392\\"></a><strong>银硕</strong></h4>\\n<p>Amazon 专业服务团队云运维咨询顾问,对云上服务建设运维、 DevOps 迁移改造等项目交付有丰富的经验。负责企业级客户的云架构设计、云上自动化运维、容器化平台设计咨询等,对云原生技术有深入的研究和热情。</p>\n"}
目录
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案
联系亚马逊云科技专家
亚马逊云科技解决方案
基于行业客户应用场景及技术领域的解决方案
联系专家
0
目录
关闭