本文提供一個以Okta與阿里雲進行角色SSO的樣本,協助您理解企業IdP與阿里雲進行SSO的端到端配置流程。
操作流程
本文的配置目標是在Okta應用中建立一個名為approle的屬性,並根據這個屬性的值來映射訪問阿里雲的RAM角色。您可以按照下圖所示的操作流程完成阿里雲、Okta的配置。

步驟一:在Okta建立支援SAML SSO的應用
-
登入Okta門戶。
-
單擊頁面右上方的帳號表徵圖,然後單擊Your Org。
-
在左側導覽列,選擇Applications > Applications。
-
在Applications頁面,單擊Create App Integration。
-
在Create a new app integration對話方塊,單擊SAML 2.0,然後單擊Next。
-
配置應用程式名稱為role-sso-test,單擊Next。
-
配置SAML,然後單擊Next。
-
Single sign-on URL:
https://signin.alibabacloud.com/saml-role/sso。 -
Audience URI (SP Entity ID):
urn:alibaba:cloudcomputing:international。 -
Default RelayState:用來配置使用者登入成功後跳轉到的阿里雲頁面。
說明出於安全原因,您只能填寫阿里巴巴旗下的網域名稱URL作為Default RelayState的值,例如:*.aliyun.com、*.hichina.com、*.yunos.com、*.taobao.com、*.tmall.com、*.alibabacloud.com、*.alipay.com,否則配置無效。若不配置,預設跳轉到阿里雲控制台首頁。
-
Name ID format:選擇EmailAddress。
-
Application username:選擇Email。
-
Update application username on:保持預設值。
-
-
在Feedback頁面,根據需要選擇合適的應用類型,然後單擊Finish。
步驟二:在Okta擷取SAML IdP中繼資料
-
在應用程式role-sso-test詳情頁,單擊Sign On頁簽。
-
在SAML 2.0地區,複製Metadata URL,將IdP中繼資料另存到本地。
步驟三:在阿里雲建立SAML身份供應商
-
使用Resource Access Management員登入RAM控制台。
-
在左側導覽列,選擇。
-
在角色 SSO頁簽,單擊SAML頁簽,然後單擊创建身份提供商。
-
在创建身份提供商頁面,輸入身份提供商名称(okta-provider)和备注。
-
在元数据文档地區,單擊上傳元數據,上傳從步驟二:在Okta擷取SAML IdP中繼資料中擷取的IdP中繼資料。
-
單擊创建身份提供商。
步驟四:在阿里雲建立RAM角色
-
在RAM控制台的左側導覽列,選擇。
-
在角色頁面,單擊創建角色。
-
在創建角色頁面的右上方,單擊切換編輯器。
-
在編輯器中指定具體的SAML身份供應商。
編輯器支援可視化編輯和指令碼編輯兩種模式,您可以任選其一。以可視化編輯模式為例,您需要在主體中指定從步驟三:在阿里雲建立SAML身份供應商中建立的身份供應商,身份提供商类型選擇SAML。
-
在編輯器中設定限制條件
saml:recipient,取值為https://signin.alibabacloud.com/saml-role/sso。 -
在創建角色對話方塊,輸入角色名称(admin),然後單擊确定。
步驟五:在Okta配置Profile
-
編輯Profile,建立一個新的Attribute。
-
在Okta左側導覽列,選擇Directory > Profile Editor。
-
搜尋並單擊目標應用程式名稱role-sso-test。
-
在Profile Editor頁面的Attributes地區,單擊Add Attribute。
-
在Add Attribute對話方塊,填寫Attribute資訊。
-
Data type:選擇string。
-
Display name:填寫將在使用者介面中顯示的名稱,本樣本中請填寫
approle。 -
Variable name:填寫將在映射中引用的變數名稱,本樣本中請填寫
approle。您需要記錄該參數的值,下一步配置Attribute的時候會用到。 -
Description:請根據需要填寫屬性描述,可以不填寫。
-
Enum:選中Define enumerated list of values,定義一個枚舉值列表。
說明我們使用Enum來確保使用者只能使用預定義的屬性值。您也可以不使用Enum,而獲得更高的靈活性。
-
Attribute members:填寫枚舉值列表,Value必須要與RAM中建立的角色名稱相同,例如:admin、reader。
-
Attribute Length:本樣本使用枚舉值,因此不需要設定。如果您實際中未使用枚舉值,請根據需要設定屬性長度。
-
Attribute required:選中Yes。
-
Scope:取消選中User personal。
-
-
單擊Save。
-
-
配置Attribute。
-
在Okta左側導覽列,選擇Applications > Applications。
-
單擊應用程式名稱role-sso-test。
-
在General頁簽下的SAML Settings地區,單擊Edit。
-
在Configure SAML頁面的Attribute Statements (optional)地區,配置以下兩條資料。第一條屬性:Name為
https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName,Name format選擇Unspecified,Value選擇user.email。第二條屬性:Name為https://www.aliyun.com/SAML-Role/Attributes/Role,Name format選擇Unspecified,Value設為以acs:ram::<帳號ID>開頭的RAM角色ARN運算式。-
配置第1條資料:
-
Name:填寫
https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName。 -
Value:選擇user.email。
-
-
配置第2條資料:
-
Name:填寫
https://www.aliyun.com/SAML-Role/Attributes/Role。 -
Value:取值為
String.replace("acs:ram::<account_id>:role/$approle,acs:ram::<account_id>:saml-provider/okta-provider", "$approle", appuser.approle),是用登入使用者在應用Profile中的approle屬性值來替換$approle預留位置,從而擷取最終的SAML屬性值。其中approle是之前在Profile Attribute中定義的屬性。okta-provider是步驟三:在阿里雲建立SAML身份供應商中建立的身份供應商。<account_id>需要替換為您的阿里雲帳號ID。例如:String.replace("acs:ram::177242285274****:role/$approle,acs:ram::177242285274****:saml-provider/okta-provider", "$approle", appuser.approle)。
-
-
-
步驟六:在Okta建立使用者並分配應用
-
建立使用者。
-
在Okta左側導覽列,選擇。
-
單擊Add person。
-
在Add Person頁面,填寫基本資料並將Primary email配置為被邀請使用者的Email,例如:username@example.com,然後單擊Save。
-
在使用者列表中,單擊使用者username@example.com Status列的Activate,然後根據頁面提示啟用username@example.com。
-
-
分配應用。
分配應用有以下兩種方式,請任選其一。
-
為單個使用者指派應用。
-
在Okta左側導覽列,選擇。
-
單擊目標應用程式名稱role-sso-test後,在Assignments頁簽下,選擇。
-
單擊目標使用者username@example.com後的Assign。
-
選擇approle為admin。
-
單擊Save and Go Back。
-
單擊Done。
-
-
將使用者加入組,為組分配應用。
-
在Okta左側導覽列,先選擇,然後單擊Add Group,建立一個組。
-
單擊組名稱,然後單擊Manage People,添加使用者到組中。
-
在Okta左側導覽列,選擇。
-
單擊目標應用程式名稱role-sso-test後,在Assignments頁簽下,單擊。
-
單擊目標組後的Assign。
-
選擇approle為admin。
-
單擊Save and Go Back。
-
單擊Done。
說明如果一個使用者屬於多個組,生效的屬性值只能有一個,即在應用的Assignments頁簽下第一個加入的組的相應屬性會生效。如果使用者所屬的組發生變化,則會影響approle的取值。詳情請參見Okta使用者指南。
-
-
驗證結果
-
在Okta左側導覽列,選擇。
-
單擊應用程式名稱role-sso-test。
-
在General頁簽下的App Embed Link地區,複製Embed Link中的URL。
-
開啟另一個瀏覽器,輸入擷取到的URL,用username@example.com登入。
如果成功跳轉到您設定的
Default RelayState對應頁面(或預設的阿里雲控制台首頁),則說明登入成功。登入成功後,進入阿里雲控制台首頁,頁面顯示歡迎語"歡迎您回到阿里雲控制台"。單擊右上方帳戶圖片,下拉麵板中顯示當前登入身份為 admin/ 及對應的橙色角色標籤,表明已通過 RAM 使用者身份成功登入控制台。
(可選)在Okta中配置使用者對應的多個角色
如果您需要讓使用者對應阿里雲的多個角色,則必須使用Group Attribute Statement,藉助Group Name進行配置。具體的配置方法如下:
-
建立多個組。其組名應按照SAML斷言中Role Attribute要求的格式,例如:acs:ram::177242285274****:role/admin,acs:ram::177242285274****:saml-provider/okta-provider。同樣建立reader角色對應的組,組名為
acs:ram::177242285274****:role/reader,acs:ram::177242285274****:saml-provider/okta-provider。 -
將username@example.com加入多個組。
-
在應用的SAML Settings中,刪除Role所對應的attribute statement,然後添加一個Group Attribute Statement。其中,Name填寫
https://www.aliyun.com/SAML-Role/Attributes/Role,Filter應確保能夠過濾出上述組名,例如:Start with acs:ram。 -
進行上述配置後,再次使用username@example.com登入阿里雲時,該使用者將會選擇登入的角色。登入頁面提供 reader 和 admin 兩個角色選項,選擇對應角色後單擊 Sign In 完成登入。
關於Okta的相關操作,請參見Okta使用者指南。