RAM和STS是阿里云提供的权限管理系统。
RAM的主要作用是控制账号系统的权限。通过使用RAM创建、管理子账号,并通过给子账号授予不同的权限,控制子账号对资源的操作权限。
STS是一个安全凭证(Token)的管理系统,为阿里云子账号(RAM 用户)提供短期访问权限管理。通过 STS 来完成对临时用户的访问授权。
RAM和STS解决的一个核心问题是如何在不暴露主账号的AccessKey的情况下,安全地授权他人访问。因为一旦主账号的AccessKey被泄露,会带来极大的安全风险。即获得该账号AccessKey的人可任意操作该账号下所有的资源,盗取重要信息等。
RAM提供的是一种长期有效的权限控制机制。通过创建子账号,并授予子账号相应的权限,将不同的权限分给不同的用户。子账号的AccessKey也不能泄露。即使子账号泄露也不会造成全局的信息泄露。一般情况下,子账号长期有效。
相对于RAM提供的长效控制机制,STS提供的是一种临时访问授权。通过调用STS,获得临时的AccessKey和Token。可以将临时AccessKey和Token发给临时用户,用来访问相应的资源。从STS获取的权限会受到更加严格的限制,并且具有时间限制。因此,即使出现信息泄露的情况,影响相对较小。
基本概念
使用RAM和STS涉及以下基本概念:
- 子账号:在 RAM 控制台中,创建的用户,每个用户即一个子账号。创建时或创建成功后,均可为子账号生成独立的 AccessKey。创建后,需为子账号配置密码和权限。使用子账号,可以进行已获授权的操作。子账号可以理解为具有某种权限的用户,可以被认为是一个具有某些权限的操作发起者。
- 角色(Role):表示某种操作权限的虚拟概念,但是没有独立的登录密码和 AccessKey。子账号可以扮演角色。扮演角色时,子账号拥有的权限是该角色的权限。
- 授权策略(Policy):用来定义权限的规则,例如允许子账号用户读取或者写入某些资源。
- 资源(Resource):代表子账号用户可访问的云资源,例如表格存储所有的Instance、某个Instance或者某个Instance下面的某个Table等。
子账号和角色可以类比为个人和其身份的关系。如,某人在公司的角色是员工,在家里的角色是父亲。同一人在不同的场景扮演不同的角色。在扮演不同角色的时候,拥有对应角色的权限。角色本身并不是一个操作的实体,只有用户扮演了该角色之后才是一个完整的操作实体。并且,一个角色可以被多个不同的用户同时扮演。
使用示例
为避免阿里云账号的 AccessKey 泄露而导致安全风险,某阿里云账号管理员使用 RAM 创建了两个子账号,分别命名为 A 和 B ,并为 A 和 B 生成独立的 AccessKey。A 拥有读权限,B 拥有写权限。 管理员可以随时在 RAM 控制台取消子账号用户的权限。
现在因为某些原因,需要授权给其他人临时访问物联网络管理平台接口的权限。这种情况下,不能直接把 A 的 AccessKey 透露出去,而应该新建一个角色 C,并给这个角色授予读取物联网络管理平台接口的权限。但请注意,目前角色 C 还无法直接使用。因为并不存在对应角色 C 的 AccessKey,角色 C 仅是一个拥有访问物联网平台接口权限的虚拟实体。
需调用 STS 的 AssumeRole 接口,获取访问物联网络管理平台接口的临时授权。在调用 STS 的请求中,RoleArn 的值需为角色 C 的 Arn。如果调用成功,STS 会返回临时的 AccessKeyId、AccessKeySecret和 SecurityToken 作为访问凭证(凭证的过期时间,在调用 AssumeRole 的请求中指定)。将这个凭证发给需要访问的用户,该用户就可以获得访问物联网络管理平台接口的临时权限。
为什么 RAM 和 STS 的使用这么复杂?
虽然 RAM 和 STS 的概念和使用比较复杂,但这是为了账号的安全性和权限控制的灵活性而牺牲了部分易用性。
将子账号和角色分开,主要是为了将执行操作的实体和代表权限集合的虚拟实体分开。如果某用户需要使用多种权限,例如读/写权限,但是实际上每次操作只需要其中的一部分权限,那么就可以创建两个角色。这两个角色分别具有读或写权限。然后,创建一个可以扮演这两个角色的用户子账号。当用户需要读权限的时候,就可以扮演其中拥有读权限的角色;使用写权限的时候同理。这样可以降低每次操作中权限泄露的风险。而且,通过扮演角色,可以将角色权限授予其他用户,更加方便了协同使用。
STS对权限的控制更加灵活。如按照实际需求设置有效时长。但是,如果需要一个长期有效的临时访问凭证,则可以只适用RAM子账号管理功能,而无需使用STS。
了解更多关于RAM和STS的详情,请参见访问控制帮助文档。