
作者 | 李智源 阿裡雲開放平台進階技術專家,主要負責阿裡雲企業級身份管理,緻力于提供雲上集中式、易內建、安全、合規的企業級身份認證和管理服務。
引言
在上篇文章《企業身份管理--RAM使用者SSO(單點登入)實戰》中,我們介紹了企業賬号到阿裡雲RAM賬号SSO的原理和實戰:企業員工在自己的員工系統認證完成後,可以通過SAML協定,按照自定的映射規則,通過浏覽器免登到雲端控制台。本文将介紹另外一種SSO方式:基于RAM角色的SSO。通過角色扮演的方式,通路雲端控制台。
背景
使用基于RAM使用者的SSO到雲端的控制台,企業管理者可以友善的實作本地員工身份認證到雲端賬号認證的打通。企業的身份管理者需要:
- 在雲端建立、管理使用者;
- 配置好員工和雲端使用者的映射關系或映射規則。
開啟基于RAM使用者的SSO後,企業員工不能再使用雲端使用者名和密碼登入。可以将認證收口在企業本地IDP,認證收口後,可以通過本地IDP和雲端的登入頁面兩個入口發起到本地IDP的認證請求。
在實際的企業員工身份管理過程中,企業的身份管理者可能還會遇到額外的場景:
- 出于管理成本的考慮,不想再雲端在額外的建立和管理使用者,進而避免同步使用者帶來的工作量;
- 期望根據使用者在本地IDP中加入的組或者使用者的某個特殊屬性,來區分雲上擁有的權限,當進行權限調整時,隻需要在本地IDP進行分組或屬性的更改;
- 出于測試或容災的需要,期望可以既能通過SSO的方式通路雲端控制台,也能通過使用者名和密碼通路雲端控制台;
- 企業在雲上有多個雲賬号,企業的員工使用企業的統一IDP。期望在企業IDP配置一次,就可以友善的實作到多個雲賬号的SSO;
- 企業存在多個IDP,都需要通路同一個阿裡雲賬号。期望在一個阿裡雲賬号内配置,允許多個IDP進行SSO。
圖1 RAM使用者SSO和RAM角色SSO
企業的身份管理者可以通過選用基于RAM角色的SSO來解決以上的問題。
原理
在上篇文章中,我們簡單的介紹了SAML協定中涉及到的IDP(ID Provider)、SP(Service Provider)和Trust的概念。RAM角色SSO同樣基于SAML協定,但是不再通過NameID進行賬号的映射登入控制台,而是通過選取的RAM角色和身份提供商**,使用角色扮演的方式登入到控制台。
概念和實體
身份提供商實體
前文我們介紹了IDP的概念。那麼為了建立雲賬号到IDP的信任關系,需要将IDP的描述檔案(Metadata.xml)配置到雲賬号,代表了一個IDP的虛拟身份。同一個雲賬号可以建立多個身份提供商。
RAM角色的可信實體
RAM角色介紹可以參考阿裡雲的
官方文檔[1]。其中,原本的RAM角色的可信實體僅有雲賬号和阿裡雲服務。新增了身份提供商作為新的可信實體,允許受信的身份提供商下的使用者所扮演的角色。
流程
在基于SAML 2.0的RAM角色SSO流程中,企業員工在IDP登入後,IDP将根據SAML 2.0 HTTP-POST綁定的要求生成包含SAML Assertion的認證響應,并由浏覽器(或程式)自動轉發給阿裡雲。阿裡雲側解析SAML Assertion,并驗證及抽取Attribute中的元素。
圖2 通過控制台和程式,使用SAML Assertion通路阿裡雲
SAML Attribute元素
對于RAM角色SSO,阿裡雲側對于SAML Assertion中的Attribute元素有以下的要求:
Role
字段Name為
https://www.aliyun.com/SAML-Role/Attributes/Role的元素。必須存在,可以有多個。
字段的值代表了可供扮演的角色和身份提供商。格式為扮演的RAM角色的ARN和阿裡雲側身份提供商的ARN組合,使用英文逗号(,)分隔。
Role Attribute的樣例如下:
<Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/Role">
<AttributeValue>acs:ram::$account_id:role/roleName1,acs:ram::$account_id:saml-provider/providerName1</AttributeValue>
<AttributeValue>acs:ram::$account_id:role/roleName2,acs:ram::$account_id:saml-provider/providerName2</AttributeValue>
</Attribute>
RoleSessionName
https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName的元素。必須存在且隻能有一個。
字段的值将被用來作為登入使用者資訊的一部分顯示在控制台上和操作審計日志中。如果您有多個使用者使用同一個角色,請確定使用可以唯一辨別使用者的RoleSessionName值,以區分不同的使用者,如員工ID、email位址等。長度2個字元到32個字元,隻能是英文字母、數字和特殊字元:
-_.@=
。
RoleSessionName Attribute的樣例如下:
<Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName">
<AttributeValue>$user_id</AttributeValue>
</Attribute>
SessionDuration
https://www.aliyun.com/SAML-Role/Attributes/SessionDuration的元素。可以不傳,最多有1個。
字段的值在控制台登入的情況下代表了Session時長,在程式調用情況下無效。格式為數字,取值範圍為900秒(15分鐘)到3600秒(1個小時)。預設值為3600秒。
SessionDuration Attribute的樣例如下:
<Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/SessionDuration">
<AttributeValue>1800</AttributeValue>
</Attribute>
實戰
假設一家企業CompanyA在GCP上管理了企業員工的賬号和身份。同時在阿裡雲上擁有2個賬号Account1和Account2。企業的身份管理期望配置一次,可以讓員工通過基于RAM角色的SSO免登到阿裡雲的Account1和Account2上。
STEP 1準備IDP和SP側需要配置資料。
SP側提供的資料
登入阿裡雲RAM控制台,在左側導航欄選取SSO管理,在右側角色SSO标簽下可以看到企業IDP側SAMP SP配置需要使用的阿裡雲服務提供商中繼資料URL:
https://signin.aliyun.com/saml-role/sp-metadata.xml
如果使用的IDP不支援上傳或填寫服務提供商中繼資料URL,需要手動配置。
- EntityID:urn:alibaba:cloudcomputing,表示阿裡雲服務提供商的EntityID
- ACS URL: https://signin.aliyun.com/saml-role/sso ,表示阿裡雲側消費SAML Assertion的位址
- RelayState: 可選,表示成功登入後跳轉的阿裡雲側的頁面位址,預設為控制台首頁。
IDP側提供的資料
阿裡雲側在建立服務提供商的時候,需要上傳身份提供商的中繼資料。
通路Google的管理控制台,選取應用,SAML應用**,點選右下角的“+”号,點選設定自己的自定義應用,下載下傳對應的IDP中繼資料檔案。
STEP 2阿裡雲側的配置
建立身份提供商
通路阿裡雲RAM控制台,在左側導航欄選取SSO管理,在右側角色SSO标簽,選擇建立身份提供商按鈕,在右側視窗中填入供應商名稱,備注,并上傳IDP的中繼資料檔案。例如這裡的身份提供商的名稱叫GCP-CompanyA。點選新建立好的身份提供商,記錄下ARN:
acs:ram::YOUR_ACCOUNT_ID:saml-provider/GCP-CompanyA
圖3 建立身份提供商
建立RAM角色并授信
選擇阿裡雲RAM控制台左側導航欄的RAM角色管理,在右側點選建立RAM角色。選擇身份提供商作為可信實體。
圖4 選擇角色信任的可信實體類型
點選下一步,在頁面中,輸入角色名,例如GCP-CompanyA-Role,選擇剛剛建立好的身份提供商GCP-CompanyA。點選完成并為其授權。建立完成後,點選新建立的角色名,記錄角色ARN:
acs:ram::YOUR_ACCOUNT_ID:role/gcp-companya-role
圖5 選擇角色的可信實體為身份提供商
同樣的操作可以在多個賬号内一并進行配置。
STEP 3IDP側的配置
為使用者建立自定義屬性
通路GCP的管理控制台,選擇使用者,在上方更多下拉框中,選擇管理自定義屬性,添加自定義屬性。自定義屬性允許多個值。這裡我們建立類别為SSO,名稱為Role的字段。
為使用者配置自定義屬性
在使用者清單中選擇需要配置的員工賬号,在使用者資訊中找到SSO字段,将剛剛建立好的角色及收費提供商的ARN使用英文逗号分隔填入。例如:
acs:ram::YOUR_ACCOUNT_ID:role/gcp-companya-role,acs:ram::YOUR_ACCOUNT_ID:saml-provider/GCP-CompanyA
這裡如果有多個雲端的身份提供商,多個角色,可以新增添入多個值。配置完成後點選儲存。
STEP 4配置SAML SSO應用
通路Google的管理控制台,選取應用,SAML應用,點選右下角的“+”号,點選設定自己的自定義應用。配置SP側的資訊:
圖6 配置SAML 應用中的SP 中繼資料
配置好字段的映射,其中RoleSessionName字段選擇GCP使用者的電子郵件,Role選擇自定義的SSO的role的字段。配置完成後儲存應用。并對使用者開啟應用。
圖7 配置Attribute中的Role和RoleSessionName
STEP 5在IDP側發起SSO
使用需要SSO的企業員工賬号登入GCP,通路配置好的SAML應用,啟用應用。開始基于RAM角色的SAML SSO流程。如果配置了多個角色字段,可以在頁面中選擇需要的角色,完成SSO到控制台的流程。
圖8 選擇對應的角色完成SSO
結束語
本文介紹了基于SAML 2.0的RAM角色SSO,将企業IDP認證和阿裡雲SP控制台認證打通。和RAM使用者的SSO相比,兩種基于SAML 2.0的SSO的方式有以下不同:
RAM使用者SSO | RAM角色SSO | |
---|---|---|
SP側發起SSO | Yes | No |
IDP側發起SSO | ||
使用RAM使用者名密碼登入 | ||
多IDP SSO到一個雲賬号 | ||
單個IDP SSO到多個雲賬号 | ||
需要使用者同步 | ||
支援的雲服務 | 支援RAM的服務清單 [2] | 支援STS的服務清單 [3] |
企業的身份管理者,可以根據企業的實際應用的場景,選擇合适的SSO方式,将企業IDP的使用者認證和雲端的身份認證打通,進而實作到雲端控制台的SSO。