全部产品
访问控制

角色

更新时间:2017-09-15 10:25:18   分享:   

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

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

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

理解 RAM 角色

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

RAM-Role

  • RAM 角色不同于教科书式角色(Textbook-Role)。教科书式角色(或传统意义上的角色)是指一组权限集合,类似于 RAM 里的授权策略(Policy)。如果一个用户被赋予了这种角色,也就意味着该用户被赋予了一组权限,然后该用户就能访问被授权的资源。

  • RAM 角色作为虚拟用户,它有确定的身份,可以被赋予一组授权策略(Policy),但它没有确定的身份认证密钥(登录密码或 AccessKey)。

    虚拟用户 vs 实体用户: 虚拟用户与实体用户的区别在于是否能被直接身份认证:

    • 实体用户拥有确定的登录密码或 AccessKey,比如云账号、RAM-User 账号、云服务账号。
    • 虚拟用户没有确定的认证密钥,比如 RAM-Role。
  • 相比于 RAM 用户,在使用方法上 RAM 角色需要被一个授信的实体用户扮演,扮演成功后实体用户将获得 RAM 角色的临时安全令牌,使用这个临时安全令牌就能以角色身份访问被授权的资源。

使用须知

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

以实体用户身份使用角色

  • 如果一个实体用户要想使用被赋予的某个 RAM 角色,实体用户必须先以自己身份登录,然后执行 切换到角色 操作将自己从 实体身份 切换到 角色身份

    当切换到角色身份后,将只能执行该角色身份被授权的所有操作,而登录时实体身份所对应的访问权限被隐藏。

  • 如果用户希望从 角色身份 回到 实体身份,那么只需执行 切回登录身份 操作。

    此时将拥有实体身份所对应的访问权限,而不再拥有角色身份所拥有的权限。

相关概念

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

相关概念

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

名称 释义
RoleARN RoleARN 是角色的全局资源描述符,用来指定具体角色。
  • RoleARN 遵循阿里云 ARN 的命名规范。比如,某个云账号下的 devops 角色的 ARN 为:acs:ram:*:1234567890123456:role/devops
  • 创建角色后,可在其 角色详情 页查看其 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 角色类型

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

  • 用户角色: 允许 RAM 用户所扮演的角色。扮演角色的 RAM 用户可以属于自己云账号,也可以是属于其他云账号。用户角色主要用来解决 跨账号访问临时授权 问题。

  • 服务角色: 允许云服务所扮演的角色。服务角色主要用于 授权云服务代理 您进行资源操作。

创建 RAM 角色

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

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

创建用户角色

操作步骤如下:

  1. 登录到 RAM 控制台

  2. 在左侧导航栏单击 角色管理

  3. 单击右上角 新建角色

  4. 在选择角色类型子页,单击 用户角色

  5. 在填写类型信息子页,选择 受信云账号,如下图所示:

    选择角色的受信云账号ID

    • 若创建的角色是给您自己名下的 RAM 用户使用(比如授权移动 app 客户端直接操作 OSS 资源),请选择 当前云账号 为受信云账号。

    • 若创建的角色是给其他云账号名下的 RAM 用户使用(比如跨账号的资源授权),请选择 其他云账号,并在受信云账号 ID 中填写其他云账号的 ID。

  6. 在配置角色基本信息子页,输入 角色名称备注 后,单击 创建

  7. 创建成功。成功创建角色后,角色没有任何权限,单击 授权 可直接为该角色授权(编辑授权策略),授权方法请参考 授权

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

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

角色详情

创建服务角色

操作步骤如下:

  1. 登录到 RAM 控制台

  2. 在左侧导航栏单击 角色管理

  3. 单击右上角 新建角色

  4. 在选择角色类型子页,单击 服务角色。可用的服务角色包括:

    • MTS 多媒体转码服务,用于将 OSS Bucket 设置为 MTS 任务的数据源时,创建以 MTS 为受信服务的角色,并使用 MTS 服务扮演该角色访问 OSS 中的数据。

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

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

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

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

  5. 在填写类型信息子页,选择 受信服务

  6. 在配置角色基本信息子页,输入 角色名称备注 后,单击 创建

  7. 创建成功。成功创建角色后,角色没有任何权限,单击 授权 可直接为该角色授权(编辑授权策略),授权方法请参考 授权

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

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

使用 RAM 角色

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

操作步骤:

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

操作控制台

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

  1. RAM 用户登录控制台。

  2. 在右上角账号菜单下,选择 切换身份

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

    RAM用户登录身份

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

    切换角色身份

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

    角色身份

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

访问云服务 API

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

本文导读目录
本文导读目录
以上内容是否对您有帮助?