Amazon 中國區配置 PingIdentity 身份整合實現 Redshift 資料庫群集單點登入

亞馬遜雲開發者發表於2023-04-19

無疑使用單點登入 (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,需要調整以下兩部分的引數:

  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...

相關文章