角色,与用户一样,都是 RAM 中使用的身份。与 RAM 用户相比,RAM 角色是一种虚拟用户,它没有确定的身份认证密钥,且需要被一个受信的实体用户扮演才能正常使用。

本文详细解释了角色的概念应用场景,帮助您正确理解;也介绍了 RAM 角色的类型创建方法使用方法,指导您正确实践。

说明 如果没有特别说明,文中出现的 角色 都是指 RAM 角色

理解 RAM 角色

RAM 角色(RAM-Role)是一种虚拟用户(或影子账号),它是 RAM 用户类型的一种。

图 1. RAM角色


  • RAM 角色不同于教科书式角色(Textbook-Role)。教科书式角色(或传统意义上的角色)是指一组权限集合,类似于 RAM 里的授权策略(Policy)。如果一个用户被赋予了这种角色,也就意味着该用户被赋予了一组权限,然后该用户就能访问被授权的资源。
  • RAM 角色作为虚拟用户,它有确定的身份,可以被赋予一组授权策略(Policy),但它没有确定的身份认证密钥(登录密码或 AccessKey)。
    虚拟用户 vs 实体用户: 虚拟用户与实体用户的区别在于是否能被直接身份认证:
    • 实体用户拥有确定的登录密码或 AccessKey,比如云账号、RAM-User 账号、云服务账号。
    • 虚拟用户没有确定的认证密钥,比如 RAM-Role。
  • 相比于 RAM 用户,在使用方法上 RAM 角色需要被一个授信的实体用户扮演,扮演成功后实体用户将获得 RAM 角色的临时安全令牌,使用这个临时安全令牌就能以角色身份访问被授权的资源。

使用须知

RAM-Role 必须与一种实体用户身份联合 起来才能使用。

图 2. 使用RAM角色


  • 如果一个实体用户要想使用被赋予的某个 RAM 角色,实体用户必须先以自己身份登录,然后执行 切换到角色 操作将自己从 实体身份 切换到 角色身份
    说明 当切换到角色身份后,将只能执行该角色身份被授权的所有操作,而登录时实体身份所对应的访问权限被隐藏。
  • 如果用户希望从 角色身份 回到 实体身份,那么只需执行 切回登录身份 操作。
    说明 此时将拥有实体身份所对应的访问权限,而不再拥有角色身份所拥有的权限。

相关概念

与 RAM 角色相关的概念间关系释义如下图所示:

图 3. RAM角色相关概念


相关概念的具体释义见下表:

名称 释义
RoleARN RoleARN 是角色的全局资源描述符,用来指定具体角色。
  • RoleARN 遵循阿里云 ARN 的命名规范。比如,某个云账号下的 devops 角色的 ARN 为:acs:ram::1234567890123456:role/samplerole
  • 创建角色后,可在其角色详情页查看其 Arn。
受信演员 角色的受信演员是指可以扮演角色的实体用户身份。
  • 创建角色时必须指定受信演员,角色只能被受信的演员扮演。
  • 受信演员可以是受信的云账号,或者受信服务。
授权策略 一个角色可以绑定一组授权策略(Policy)。没有绑定授权策略的角色也可以存在,但不能使用。
扮演角色 扮演角色(AssumeRole)是实体用户获取角色身份的安全令牌的方法。一个实体用户通过调用 AssumeRole 的 API 可以获得角色的安全令牌,使用安全令牌可以访问云服务 API。
切换身份 切换身份(SwitchRole)是在控制台中实体用户从当前登录身份切换到角色身份的方法。
  • 一个实体用户登录到控制台之后,可以切换到被许可扮演的某一种角色身份,然后以角色身份操作云资源。切换到角色身份后,原实体用户身份的访问权限将被屏蔽。
  • 用户不需要使用角色身份时,可以从角色身份切换回原来的登录身份。
角色令牌 角色令牌是角色身份的一种临时访问密钥。角色身份没有确定的访问密钥,当一个实体用户要使用角色时,必须通过扮演角色来获取对应的角色令牌,然后使用角色令牌来调用阿里云服务 API。

RAM 角色应用场景

RAM 角色主要用于解决委托其他云账号及其下 RAM 用户操作您所控制的资源、委托云服务操作您所控制的资源。

跨账号的资源操作与授权管理

场景概述:企业 A 和 企业 B 代表不同的企业。企业 A 购买了多种云资源(如 ECS 实例/ RDS 实例/ SLB 实例/ OSS 存储空间/…)来开展业务。

需求说明 解决方案
企业 A 希望能专注于业务系统,而将云资源运维监控管理等任务委托或授权给企业 B。 云账号 A 在 RAM 中创建一个角色,给角色授予合适的权限,并允许云账号 B 使用该角色。
企业 B 可以进一步将代运维任务分配给 B 的员工。B 可以精细控制其员工对 A 的云资源操作权限。 如果云账号 B 下的某个员工(RAM 用户)需要使用该角色,那么云账号 B 可以自主进行授权控制。代运维操作时,账号 B 下的 RAM 用户将使用被授予的角色身份来操作账号 A 的资源。
如果 A 和 B 的这种代运维合同终止,A 随时可以撤销对 B 的授权。 如果账号 A 与账号 B 的合作终止,A 只需要撤销账号 B 对该角色的使用。一旦账号 B 对角色的使用权限被撤销,那么 B 下的所有 RAM 用户对该角色的使用权限将被自动撤销。

临时授权移动 app 客户端直接操作您所控制的资源

场景概述:企业 A 开发了一款移动 app,并购买了 OSS 服务。移动 app 需要上传数据到 OSS(或从 OSS 下载数据);由于移动 app 运行在用户自己的终端设备上,这些设备并不受 A 的控制。出于安全考虑,A 不能将访问密钥保存到移动 app 中。

需求说明 解决方案
企业 A 不希望所有 app 都通过 appServer 来进行数据中转,而希望让 app 能直连 OSS 上传/下载数据。
  • 云账号 A 在 RAM 中创建一个角色,给角色授予合适的权限,并允许 appServer(以 RAM 用户身份运行)使用该角色。
  • 当 app 需要直连 OSS 上传/下载数据时,appServer 可以使用角色,获取角色的一个临时安全令牌并传送给 app,app 就可以使用临时安全令牌直接访问 OSS API。
企业 A 希望将安全风险控制到最小,比如,每个移动 app 直连 OSS 时都必须使用最小权限的访问令牌,而且访问时效也要很短(比如30分钟)。 如果需要更精细地控制每个 app 的权限,appServer 可以在使用角色时进一步限制临时安全令牌的资源操作权限,比如,不同 app 用户只能操作不同的子目录,那么 appServer 在使用角色时就可以进行这种限制。

委托云服务操作您的云资源

场景概述:企业 A 购买了云服务器ECS,并在其中部署了一款应用程序;应用程序需要访问 A 的 OSS 存储空间。通常情况下,

  • 云账号 A 要将其 AccessKey(AK) 保存在应用程序的配置文件中,并在定期更换 AK 时修改应用程序的配置文件。

  • 在进行多地域一致性部署时,AK 会随镜像以及使用镜像创建的实例扩散出去;这种情况下,当 A 需要更换 AK 时,就需要逐台更新和重新部署实例与镜像。

需求说明 解决方案
  • 安全性考虑,A 不希望其应用程序通过 AK 取得其 API 操作的完整权限,希望应用程序以临时凭证访问其他产品的 API。
  • 操作性考虑,A 不希望在应用程序端更新 AK,也不希望在多地域维护 AK。
使用 RAM 服务角色:
  • 云账号 A 在 RAM 中创建一个 ECS 服务角色(只允许 ECS 实例扮演),给角色授予合适的权限(如 OSS 的只读权限),并将该服务角色关联其 ECS 实例。
  • 在连接 ECS 实例后,通过访问 ECS 实例元数据获取服务角色的 STS 临时身份凭证;ECS 中的应用程序使用该临身份凭证访问 OSS。
说明 其他场景如授权 EMR 操作客户的 ECS,函数计算 FC 操作客户的 OSS,媒体转码 MTS 操作用户的 OSS 数据等需要跨产品相互调用的场景,都可使用 RAM 服务角色授权操作。参考 创建服务角色 查看 RAM 提供的所有服务角色类型及场景。

关于RAM的PassRole权限

为了限制一个服务能代表你做什么操作,你需要给这个服务配置一个RAM角色,该服务将会以对应RAM角色的身份去执行相关操作,并且受限于管理员对RAM角色的授权。比如,你可以给ECS实例配置一个RAM角色,ECS实例里的应用程序就能获取对应RAM角色的身份令牌去访问阿里云服务API。

当一个RAM用户为云服务配置RAM角色时,这个RAM用户必须要拥有对该RAM角色的PassRole权限。云服务在收到RAM角色配置的请求时,会强制检查RAM用户是否拥有指定RoleArn的 ram:PassRole 权限。这样做能确保只有被授权用户才能为云服务配置RAM角色,而不会导致RAM角色的权限被滥用。

RAM 角色类型

RAM 支持以下两种类型的角色:

  • 用户角色: 允许 RAM 用户所扮演的角色。扮演角色的 RAM 用户可以属于自己云账号,也可以是属于其他云账号。用户角色主要用来解决 跨账号访问临时授权 问题。
  • 服务角色: 允许云服务所扮演的角色。服务角色主要用于 授权云服务代理 您进行资源操作。

创建 RAM 角色

通过RAM 控制台来创建 RAM 角色包含以下步骤:

  1. 选择角色类型
  2. 选择受信的演员身份
  3. 填写角色名称
  4. 给角色绑定授权策略

创建用户角色

操作步骤如下:

  1. 登录到 RAM 控制台
  2. 在左侧导航栏单击角色管理
  3. 单击右上角新建角色
  4. 在选择角色类型子页,单击用户角色
  5. 在填写类型信息子页,选择受信云账号,如下图所示:
    图 4. 填写类型信息


    • 若创建的角色是给您自己名下的 RAM 用户使用(比如授权移动 app 客户端直接操作 OSS 资源),请选择当前云账号为受信云账号。
    • 若创建的角色是给其他云账号名下的 RAM 用户使用(比如跨账号的资源授权),请选择其他云账号,并在受信云账号 ID 中填写其他云账号的 ID。
  6. 在配置角色基本信息子页,输入角色名称备注后,单击 创建
  7. 创建成功。成功创建角色后,角色没有任何权限,单击授权可直接为该角色授权(编辑授权策略),授权方法请参考授权

至此,您已完成用户角色的创建。

返回 RAM 控制台,在角色管理页面找到新创建的角色(可使用角色名进行模糊查询),单击其角色名称或其对应操作列下的管理,可以查看相应的角色详情,如下图所示:

图 5. 角色基本信息


创建服务角色

操作步骤如下:

  1. 在RAM控制台左侧导航栏单击角色管理
  2. 单击右上角新建角色
  3. 在选择角色类型子页,单击服务角色。可用的服务角色包括:
    • MTS 多媒体转码服务,用于将 OSS Bucket 设置为 MTS 任务的数据源时,创建以 MTS 为受信服务的角色,并使用 MTS 服务扮演该角色访问 OSS 中的数据。

    • OAS 归档存储服务,用于将 OSS Bucket 设置为归档存储服务的数据源时,创建以归档存储为受信服务的角色,并使用归档存储服务扮演该角色访问 OSS 中的数据

    • LOG 日志服务,用于将日志服务收集的日志导入 OSS 时,创建以日志服务为受信服务的角色,并使用日志服务扮演该角色将数据写入 OSS。

    • ApiGateway API 网关服务,用于将函数服务设置为 API 网关的后端服务时,创建以 API 网关服务为受信服务的角色,并使用 API 网关扮演该角色调用函数服务。

    • ECS 云服务器,用于授权 ECS 服务访问您在其他云服务中的云资源。

  4. 在填写类型信息子页,选择受信服务
  5. 在配置角色基本信息子页,输入角色名称备注后,单击创建
  6. 创建成功。成功创建角色后,角色没有任何权限,单击授权可直接为该角色授权(编辑授权策略),授权方法请参考授权

至此,您已完成服务角色的创建。

返回 RAM 控制台,在角色管理页面找到新创建的角色(可使用角色名进行模糊查询),单击其角色名称或其对应操作列下的管理,可以查看相应的角色详情。

使用 RAM 角色

RAM 角色需通过 RAM 用户身份来扮演(AssumeRole)使用,不允许受信云账号以自己身份扮演角色。因此,受信云账号必须通过创建一个 RAM 用户账号,并授予该 RAM 用户账号的 AssumeRole 权限,然后以 RAM 用户身份去扮演角色。

操作步骤:

  1. 创建一个 RAM 用户,并为该用户创建 AccessKey 或设置登录密码。
  2. 给该 RAM 用户授权,授权时添加系统授权策略:AliyunSTSAssumeRoleAccess。

操作控制台

使用角色身份进行控制台操作的步骤如下:

  1. RAM 用户登录控制台。
  2. 在右上角账号菜单下,选择切换身份

    例如,company2(企业别名)下的 RAM 用户 zhangsan 登录控制台之后,控制台右上角会显示该用户的身份信息,如下图所示:

    图 6. 身份信息


    单击切换身份,进入角色切换的页面,选择相应的企业别名角色名(假设当前用户已被授权允许扮演 company1(企业别名)下的 ecs-admin 角色),单击切换

    图 7. 切换角色


    切换成功后,将以角色身份访问控制台。此时控制台右上角将显示角色身份(即当前身份)和登录身份。

    图 8. 角色切换成功


  3. 在扮演角色身份时,选择 返回登录身份可以切换回登录身份。

访问云服务 API

当 RAM 用户被授予 AssumeRole 权限之后,可以使用其 AccessKey 调用安全令牌服务(STS) 的 AssumeRole 接口,以获取某个角色的临时安全令牌。关于 AssumeRole API 的调用方法,请参考AssumeRole