本文提供一个以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.aliyun.com/saml-role/sso。 -
Audience URI (SP Entity ID):
urn:alibaba:cloudcomputing。 -
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身份提供商
-
使用RAM管理员登录RAM控制台。
-
在左侧导航栏,选择。
-
在角色 SSO页签,单击SAML页签,然后单击创建身份提供商。
-
在创建身份提供商页面,输入身份提供商名称(okta-provider)和备注。
-
在元数据文档区域,单击上传元数据,上传从步骤二:在Okta获取SAML IdP元数据中获取的IdP元数据。
-
单击创建身份提供商。
步骤四:在阿里云创建RAM角色
-
在RAM控制台的左侧导航栏,选择。
-
在角色页面,单击创建角色。
-
在创建角色页面的右上角,单击切换编辑器。
-
在编辑器中指定具体的SAML身份提供商。
编辑器支持可视化编辑和脚本编辑两种模式,您可以任选其一。以可视化编辑模式为例,您需要在主体中指定从步骤三:在阿里云创建SAML身份提供商中创建的身份提供商,身份提供商类型选择SAML。
-
在编辑器中设置限制条件
saml:recipient,取值为https://signin.aliyun.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用户指南。