本文提供一個以AD FS與阿里雲進行SSO的樣本,協助使用者理解企業IdP與阿里雲進行SSO的端到端配置流程。本文以在Windows Server 2012 R2 ECS執行個體上搭建的AD FS為例進行介紹。
背景資訊
企業使用Active Directory (AD)進行員工管理,並通過AD FS配置包括阿里雲在內的公司專屬應用程式。AD管理員通過員工的使用者組來管理員工對阿里雲帳號的存取權限。在本樣本中,企業擁有兩個阿里雲帳號(Account1和Account2),要管理的許可權為Admin和Reader,企業員工使用者名稱為Alice,該使用者所在的AD使用者組為Aliyun-<account-id>-ADFS-Admin和Aliyun-<account-id>-ADFS-Reader,企業要實現從AD FS到Account1和Account2的角色SSO。
- <account-id>為雲帳號Account1或Account2的帳號ID,因此使用者Alice所在的AD使用者組共4個,分別對應兩個雲帳號中的Admin和Reader許可權。
- 本文中涉及到Microsoft Active Directory配置的部分屬於建議,僅用於協助理解阿里雲SSO登入的端到端配置流程,阿里雲不提供Microsoft Active Directory配置的諮詢服務。
基本流程
員工進行控制台登入的基本流程如下圖所示。
AD管理員在完成角色同盟登入的配置後,企業員工(Alice)可以通過如圖所示的方法登入到阿里雲控制台。更多資訊,請參見SAML角色SSO概覽。
上述過程表示,使用者登入時,企業會進行統一登入認證,無需使用者提供在阿里雲上的任何使用者名稱和密碼。
步驟一:在阿里雲中將AD FS配置為可信SAML IdP
- 在阿里雲RAM控制台,建立身份供應商(ADFS),並配置相應的中繼資料。AD FS的中繼資料URL為
https://<ADFS-server>/federationmetadata/2007-06/federationmetadata.xml
。說明 <ADFS-server>是您的AD FS伺服器網域名稱或IP地址。具體操作,請參見進行角色SSO時阿里雲SP的SAML配置。
說明 如果中繼資料檔案超過大小限制,您可以嘗試刪除<fed:ClaimTypesRequested>
和<fed:ClaimTypesOffered>
中的所有內容。 - 在阿里雲帳號Account1中建立兩個可信實體類型為身份供應商的RAM角色(ADFS-Admin和ADFS-Reader),選擇剛剛建立的ADFS作為可信身份供應商,並對兩個角色分別授予
AdministratorAccess
和ReadOnlyAccess
許可權。具體操作,請參見建立可信實體為身份供應商的RAM角色。 - 使用同樣的方法,在Account2中建立與Account1中同名的身份供應商(ADFS)和角色(ADFS-Admin和ADFS-Reader),並為兩個角色分別授予
AdministratorAccess
和ReadOnlyAccess
許可權。
步驟二:在AD FS中將阿里雲配置為可信SAML SP
在AD FS中,SAML SP被稱作信賴方(Relying Party)。設定阿里雲作為AD FS的可信SP的操作步驟如下。
- 在伺服器管理員的工具菜單中選擇AD FS管理。
- 在AD FS管理工具中添加信賴方信任。
- 為新建立的信賴方設定阿里雲的角色SSO的SAML SP中繼資料,中繼資料URL為
https://signin.alibabacloud.com/saml-role/sp-metadata.xml
。 - 按照嚮導完成配置。
步驟三:為阿里雲SP配置SAML斷言屬性
阿里雲需要AD FS在SAML斷言中提供NameID
、Role
和RoleSessionName
屬性。AD FS中通過頒發轉換規則來實現這一功能。
NameID
配置Active Directory中的Windows賬戶名為SAML斷言中的
NameID
,其操作步驟如下。- 為信賴方編輯聲明規則。
- 添加頒發轉換規則。 說明 頒發轉換規則(Issuance Transform Rules):指如何將一個已知的使用者屬性,經過轉換後,頒發為SAML斷言中的屬性。由於我們要將使用者在AD中的Windows賬戶名頒發為
NameID
,因此需要添加一個新的規則。 - 聲明規則模版選擇轉換傳入聲明。
- 使用如下配置規則,並單擊完成。
- 聲明規則名稱:NameID
- 傳入宣告類型:Windows賬戶名
- 傳出宣告類型:名稱ID
- 傳出名稱ID格式:永久標識符
- 傳遞所有聲明值:勾選
配置完成後,AD FS將發送阿里雲需要的
NameID
格式。<NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"> YourDomain\rolessouser </NameID>
RoleSessionName
配置Active Directory中的UPN為SAML斷言中的
RoleSessionName
,其操作步驟如下。- 單擊添加轉換聲明規則。
- 從聲明規則模板中選擇以聲明方式發送LDAP特性。
- 使用如下配置規則,並單擊完成。
- 聲明規則名稱:RoleSessionName
- 特性儲存:Active Directory
- LDAP 特性列:User-Principal-Name(您也可以根據具體需求選擇其他屬性,例如email。)
- 傳出宣告類型:
https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName
配置完成後,AD FS將發送阿里雲需要的
RoleSessionName
格式。<Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName"> <AttributeValue>rolessouser@example.com<AttributeValue> </Attribute>
Role
通過自訂規則將特定的使用者所屬組的資訊轉化成阿里雲上的角色名稱,其操作步驟如下。
- 單擊添加轉換聲明規則。
- 從聲明規則模板中選擇使用自訂規則發送聲明,單擊下一步。
- 使用如下配置規則,並單擊完成。
- 聲明規則名稱:Get AD Groups
- 自訂規則:
c:[Type =="http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory",types = ("http://temp/variable"), query = ";tokenGroups;{0}", param =c.Value);
說明 這個規則擷取使用者在AD中所屬組的資訊,儲存在中間變數http://temp/variable中。 - 單擊添加轉換聲明規則。
- 重複以上步驟,並單擊完成。
- 聲明規則名稱:Role
- 自訂規則:
c:[Type == "http://temp/variable", Value =~ "(?i)^Aliyun-([\d]+)"] => issue(Type = "https://www.aliyun.com/SAML-Role/Attributes/Role",Value = RegExReplace(c.Value, "Aliyun-([\d]+)-(.+)", "acs:ram::$1:role/$2,acs:ram::$1:saml-provider/<provider-name>"));
說明 <provider-name>為步驟一:在阿里雲中將AD FS配置為可信SAML IdP中建立的身份供應商名稱。本樣本中為ADFS。
根據這個規則,如果使用者所屬的AD組中包含Aliyun-<account-id>-ADFS-Admin或Aliyun-<account-id>-ADFS-Reader,則將產生一個SAML屬性,映射到阿里雲上的角色ADFS-Admin或ADFS-Reader。
配置完成後,IdP將返回阿里雲所需要的SAML斷言片段,如下所示。
<Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/Role"> <AttributeValue>acs:ram::<account-id>:role/ADFS-Admin,acs:ram::<account-id>:saml-provider/<provider-name></AttributeValue> </Attribute>
驗證結果
- 登入AD FS SSO門戶(URL:
https://<ADFS-server>/adfs/ls/IdpInitiatedSignOn.aspx
),選擇阿里雲應用,輸入使用者名稱密碼。說明 <ADFS-server>是您的AD FS伺服器網域名稱或IP地址。如果網頁不可用,可以通過PowerShell開啟:Set-AdfsProperties –EnableIdpInitiatedSignonPage $True
。 - 在阿里雲角色SSO頁面,選擇一個您要登入的角色,單擊登入。說明 如果您的使用者在AD中只加入了一個組,則在阿里雲上只會對應一個角色,該使用者將直接登入,無需選擇角色。