阿里云权限管理机制包括访问控制RAM(Resource Access Management)和阿里云STS(Security Token Service),可以根据需求使用不同权限的RAM用户来访问表格存储,也支持为用户提供访问的临时授权。使用RAM和STS能极大地提高管理的灵活性和安全性。

访问控制RAM是阿里云提供的管理用户身份与资源访问权限的服务。通过使用RAM可以在阿里云账号的权限范围内创建RAM用户,给不同的RAM用户分配不同的权限,从而达到授权管理的目的。更多信息,请参见什么是访问控制

阿里云STS是阿里云提供的一种临时访问权限管理服务,用来授予临时的访问权限。通过STS可以完成对临时用户的访问授权。更多信息,请参见什么是STS

背景介绍

RAM和STS需要解决的一个核心问题是如何在不暴露阿里云账号AccessKey的情况下安全地授权别人访问。因为如果阿里云账号AccessKey暴露出去,则会带来极大的安全风险,别人可以随意操作该账号下所有的资源、盗取重要信息等。

RAM提供了一种长期有效的权限控制机制,通过分出不同权限的RAM用户,将不同的权限分给不同的用户,即使RAM用户泄露也不会造成全局的信息泄露。RAM用户在一般情况下是长期有效的。因此,RAM用户的AccessKey是不能泄露的。

相对于RAM提供的长效控制机制,STS提供的是一种临时访问授权,通过STS可以返回临时的AccessKey和Token,这些信息可以直接发给临时用户用来访问表格存储。一般来说,从STS获取的权限会受到更加严格的限制,并且拥有时间限制,因此即使这些信息泄露,对于系统的影响也很小。

基本概念

下表是一些基本概念的简单解释。更多信息,请参见基本概念

基本概念 描述
RAM用户 RAM用户也叫RAM账号,是RAM的一种实体身份类型,有确定的身份ID和身份凭证,它通常与某个确定的人或应用程序一一对应。RAM用户具备以下特点:
  • 一个阿里云账号下可以创建多个RAM用户,对应企业内的员工、系统或应用程序。
  • RAM用户不拥有资源,不能独立计量计费,由所属阿里云账号统一控制和付费。
  • RAM用户归属于阿里云账号,只能在所属阿里云账号的空间下可见,而不是独立的阿里云账号。
  • RAM用户必须在获得阿里云账号的授权后才能登录控制台或使用API操作阿里云账号下的资源。
RAM角色(RAM role) RAM角色有确定的身份,可以被赋予一组权限策略,但没有确定的登录密码或访问密钥。RAM角色需要被一个可信的实体用户扮演,扮演成功后实体用户将获得RAM角色的安全令牌,使用这个安全令牌就能以角色身份访问被授权的资源。
权限策略(Policy) 权限策略是用语法结构描述的一组权限的集合,可以精确地描述被授权的资源集、操作集以及授权条件。权限策略是描述权限集的一种简单语言规范。关于RAM支持的语言规范,请参见权限策略语法和结构

在RAM中,权限策略是一种资源实体。RAM支持以下两种权限策略:

  • 阿里云管理的系统策略:统一由阿里云创建,用户只能使用不能修改,策略的版本更新由阿里云维护。
  • 客户管理的自定义策略:用户可以自主创建、更新和删除,策略的版本更新由客户自己维护。

通过为RAM用户、用户组或RAM角色绑定权限策略,可以获得权限策略中指定的访问权限。

资源(Resource) 资源是云服务呈现给用户与之交互的对象实体的一种抽象,例如表格存储所有的实例、某个实例或者实例中的某个表等。

RAM用户和角色可以类比为个人和其身份的关系,某人在公司的角色是员工,在家里的角色是父亲,在不同的场景扮演不同的角色,但是还是同一个人。在扮演不同角色的时候也就拥有对应角色的权限。单独的员工或者父亲概念并不能作为一个操作的实体,只有当有人扮演了之后才是一个完整的概念。此处还可以体现一个重要的概念,那就是角色可以被多个不同的个人同时扮演。完成角色扮演之后,该个人就自动拥有该角色的所有权限。

使用示例:

某个阿里云用户名为alice,其在表格存储有alice_a和alice_b两个实例。alice对两个实例都拥有完全的权限。

为避免阿里云账号的AccessKey泄露而导致安全风险,alice使用RAM创建了两个RAM用户bob和carol。bob对alice_a拥有读写权限,carol对alice_b拥有读写权限。bob和carol都拥有独立的AccessKey,这样万一泄露了也只会影响其中一个实例,而且alice可以很方便地在控制台取消泄露用户的权限。

假设现在需要授权给其他人读取alice_a中的数据表。这种情况下不应该直接把bob的AccessKey透露出去,可以新建一个角色,例如AliceAReader,给该角色赋予读取alice_a的权限。请注意此时AliceAReader还是没法直接使用,因为并不存在对应AliceAReader的AccessKey,AliceAReader当前仅表示一个拥有访问alice_a权限的虚拟实体。

为了能获取临时授权,此时可以调用STS的AssumeRole接口,通知STS bob将要扮演AliceAReader角色。如果成功,则STS会返回一个临时的AccessKeyId、AccessKeySecret和SecurityToken作为访问凭证。将该凭证发给需要访问的临时用户即可获得访问alice_a的临时权限。临时访问凭证的过期时间在调用AssumeRole时指定。

为什么RAM和STS这么复杂

RAM和STS的概念之所以复杂,是为了权限控制的灵活性而牺牲了部分的易用性。

将RAM用户和角色分开,主要是为了将执行操作的实体和代表权限集合的虚拟实体分开。如果用户本身需要的权限很多,例如读写权限,但是实际上每次操作只需要其中的一部分权限,那么我们就可以创建两个角色,分别具有读和写权限,然后创建一个没有任何权限但是可以拥有扮演两个角色权限的用户。当用户需要读权限时就可以临时扮演其中拥有读权限的角色,写权限同理,以降低每次操作中权限泄露的风险。而且通过扮演角色可以将权限授予其他的阿里云用户,更加方便了协同使用。

当然,提供了灵活性并不代表一定要使用全部的功能,应该根据需求来使用其中的一个子集。例如,不需要带过期时间的临时访问凭证,可以只使用RAM的RAM用户功能而无需使用STS。