無疑使用單點登入 (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...