本文介绍RAM角色的定义、与RAM用户的区别、应用场景、核心概念和使用流程。
什么是RAM角色
RAM角色是一种RAM身份类型,可以被授予一组权限策略。与RAM用户不同,RAM角色没有长期身份凭证(登录密码或访问密钥),需要被一个可信实体扮演后才能使用。扮演成功后,可信实体将获得RAM角色的临时身份凭证,即安全令牌(STS Token),使用该安全令牌就能以RAM角色身份访问被授权的资源。
每个RAM角色都有一个全局唯一的资源描述符(ARN),格式为acs:ram::<account-id>:role/<role-name>,用于在策略和API调用中指定具体角色。关于如何查看角色ARN,请参见查看RAM角色。
为什么使用RAM角色
相比直接使用RAM用户身份访问云资源,扮演RAM角色具备更高的灵活性与安全性:
动态权限提升:日常以权限受限的RAM用户登录控制台,需要执行特定操作时临时切换到具备所需权限的角色,操作完成后切回原身份。
跨账号资源访问:扮演其他阿里云账号下的RAM角色,访问该账号的资源。
临时凭证获取:通过调用API扮演角色获取STS Token,用于程序或服务访问阿里云资源,避免在代码中硬编码长期AccessKey。
核心概念
在使用RAM角色前,需要了解以下核心概念。这些概念有助于理解角色的工作机制和配置方式。
可信实体
可信实体是指被允许扮演该角色的实体身份,通过角色信任策略指定。主要包括以下三类:
云账号:允许云账号本身,或阿里云账号下的RAM身份(RAM用户或RAM角色)扮演该角色,可以是当前账号或其他账号。
适用场景:
RAM用户在控制台切换身份扮演角色。
通过CLI/SDK调用
AssumeRole接口扮演角色。
说明创建可信实体为云账号类型的RAM角色时,默认信任该云账号本身,也即账号下的所有身份均可扮演该角色。可通过修改角色信任策略,限定该RAM角色只能被账号(当前或其他特定账号)下的指定RAM身份扮演,具体请参见修改RAM角色的信任策略。
云服务:允许指定的云服务扮演该角色。这种角色称之为服务角色。
适用场景:
委托云服务代表用户完成指定操作。如用户可通过实例RAM角色,在ECS实例中访问OSS bucket中的数据。
大多数云服务会自动创建服务关联角色(一种特殊的RAM角色,由云服务预定义),用于解决云服务间的授权访问问题。
身份提供商:允许来自指定身份提供商(支持SAML2.0或OIDC协议)的用户扮演该角色。
适用场景:
IdP用户使用角色SSO的方式登录控制台。
调用
AssumeRoleWithSAML或AssumeRoleWithOIDC接口,传入从IdP处获得的令牌(SAML响应或ID Token)扮演角色。
角色扮演
角色扮演是指RAM用户或其他实体身份切换到目标RAM角色的过程。角色扮演依赖于阿里云安全令牌服务(Security Token Service, STS),扮演成功后调用者获得由STS服务颁发的STS Token,并建立角色会话。在角色会话持续期间,原身份的权限暂时失效,获得RAM角色的权限,以RAM角色的身份访问资源。被扮演的RAM角色可与原身份属于同一账号,也可属于不同账号(跨账号角色扮演)。
可登录控制台后切换身份,也可通过调用AssumeRole 或 AssumeRoleWithSAML/AssumeRoleWithOIDC等接口扮演角色。具体请参见扮演RAM角色。
信任策略
角色信任策略(Trust Policy)是为RAM角色配置的JSON格式策略文档,定义了哪些身份主体(即可信实体)可以扮演该角色。角色信任策略本质上是一种附加在角色上的基于资源的权限策略。
核心作用:
控制身份信任边界:决定哪些主体可以扮演该角色。
支撑跨账号和跨服务访问:是实现多账号协同、跨服务授权访问的基础机制。
配合权限策略:信任策略决定“谁能扮演”,权限策略决定“能做什么”,二者协同工作。
策略示例:
以下信任策略允许账号 123456789012**** 下的所有身份(RAM用户、RAM角色)扮演该角色:
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::123456789012****:root"
]
}
}
],
"Version": "1"
}RAM角色与RAM用户的区别
RAM角色和RAM用户都是RAM身份类型,但它们的使用方式和适用场景有显著差异。下表对比了两者的主要区别:
对比项 | RAM用户 | RAM角色 |
使用方式 | 可直接使用(如使用用户名和密码登录控制台) | 需被可信实体扮演后才能使用 |
身份凭证 | 拥有长期凭证(登录密码或AccessKey) | 无长期凭证,扮演成功后获得临时安全凭证(STS Token) |
凭证有效期 | 长期有效 | STS Token有时效性,过期后需重新扮演角色获取 |
信任策略 | 无 | 拥有信任策略,定义谁可以扮演该角色 |
角色会话
角色会话是指实体身份(如RAM用户、云服务或其他可信实体)在成功扮演角色后,所建立的临时访问会话。在会话有效期间,调用者以该角色身份执行操作,原身份所拥有的权限将暂时失去。
一个完整的角色会话通常由以下要素构成:
会话名称(RoleSessionName): 这是一个由调用方自定义的标识符(一般设置为用户名、服务名或任务名),用于在审计日志(如操作审计 ActionTrail)中区分同一角色下不同的会话实例,实现操作的可追溯性。
有效时间:角色会话具有明确的生命周期,过期后凭证自动失效。具体请参见:角色会话的有效时间。
在建立会话时,可以额外指定一个权限策略,称之为会话策略。最终角色会话的权限是角色本身权限与会话策略权限的交集,实现了权限的二次精细化管控。具体使用方式请参见AssumeRole - 获取扮演角色的临时身份凭证中的请求参数Policy描述。
角色链
角色链是指一个身份(如RAM用户)首先扮演第一个角色,然后利用该角色的临时安全凭证去扮演第二个(甚至更多)角色的过程。简单来说,就是:A 扮演 B,B 再扮演 C。角色链中的RAM角色可以属于同一个阿里云账号,也可以属于不同账号。
角色链适用于需要跨多个账号进行资源访问的场景,例如:
企业采用多账号架构管理云资源(如管理账号、开发账号、测试账号、生产账号),运维人员通过企业IdP以角色SSO方式登录阿里云后,获得一个基础运维角色(仅具备查看权限)。当需要在生产账号执行变更操作时,运维人员切换身份扮演生产账号下的“生产变更角色”,完成操作后切回基础角色。 角色链路径:企业IdP → 基础运维角色(管理账号)→ 生产变更角色(生产账号)。
可以使用阿里云控制台(切换身份)、阿里云CLI或API来进行链式角色扮演。具体请参见角色链使用方式。
使用限制
关于RAM角色的使用限制,请参见使用限制。
使用流程
创建RAM角色
您可以根据不同的用途,选择创建不同可信实体类型的RAM角色。
为RAM角色授权
为RAM角色添加系统策略或自定义策略。具体操作,请参见为RAM角色授权。
扮演RAM角色
身份主体(如RAM用户、RAM角色、云服务等)通过控制台或API扮演角色并获取安全令牌。具体操作,请参见扮演RAM角色的操作方式。
应用场景
临时授权访问
开发人员日常使用权限受限的RAM用户账号工作,当需要执行敏感操作(如修改生产环境配置)时,需要临时获取更高权限。此时,您可以创建可信实体为云账号的RAM角色。开发人员通过控制台切换身份临时扮演该角色执行操作,完成后切回原身份。这种方式既保证了日常工作的安全性,又满足了临时权限需求。
更多信息,请参见扮演RAM角色的操作方式。
跨账号访问
当拥有多个阿里云账号时(如账号A和账号B),希望账号B访问账号A的资源:
在账号A下创建可信实体为账号B的RAM角色
授权账号B下的RAM用户或RAM角色可以扮演该角色
账号B通过扮演该角色访问账号A的指定资源
更多信息,请参见跨阿里云账号访问资源。
委托服务访问
ECS实例上运行的应用程序需要访问OSS等云资源时,通常需要在代码中配置AccessKey,存在凭证泄露风险。此时,您可以创建可信实体为云服务(ECS)的RAM角色,并为ECS实例绑定该RAM角色,实例会自动获取并使用安全凭证访问云资源,无需在代码中配置AccessKey。
更多信息,请参见实例RAM角色。
单点登录(角色SSO)
阿里云与企业进行角色SSO时,阿里云是服务提供商(SP),而企业自有的身份管理系统则是身份提供商(IdP)。通过角色SSO,企业可以在本地IdP中管理员工信息,无需进行阿里云和企业IdP间的用户同步,企业员工将使用指定的RAM角色登录阿里云。此时,您可以创建可信实体为身份提供商的RAM角色解决该问题。
更多信息,请参见SAML角色SSO概览和OIDC角色SSO概览。