前言
RAM (Resource Access Management) 是阿里云为客户提供的用户身份管理与资源访问控制服务。每一个阿里云账号称为主账号,账号下面建的用户叫子账号。RAM 角色与 RAM 用户一样,都是 RAM 中定义的身份。RAM 角色是一种虚拟用户,没有确定的身份认证密钥,需要被一个受信的实体用户扮演才能正常使用。
下面给大家介绍一下角色的概念和不同的使用场景。
角色的概念
RAM访问控制
在理解角色这个概念之前,我们先看看RAM访问控制的几个概念。
- RAM用户。进入RAM访问控制管理控制台,在人员管理下面就有用户,新建用户时可以勾选不同的访问方式,有控制台密码登陆和编程访问,一个是账号密码登陆,另一个是生成AccessKeyID和AccessKeySecret,通过程序调用API使用。
- 用户组。即对用户进行分组授权管理。
- 权限策略。权限策略用于描述一组权限集,即允许或禁止对阿里云其它服务的访问许可。策略类型有系统策略和自定义策略,前者是访问控制服务预置的一些访问权限,比如AdministratorAccess,AliyunOSSFullAccess;后者是用户自定义的可以更细粒度的定义权限。
- 授权。授权是将已有的策略赋予用户或用户组,以及下面马上要讲的角色。
上面示例里面就有用户/用户组RAM User,权限策略Policy,其它的服务比如ECS,OSS,RDS,MQ是举例的一些其它阿里云服务,Policy里面会定义访问这些服务的权限,比如FullAccess或者ReadOnlyAccess等。
注:本文示意图中IAM属于笔误,在阿里云里面是RAM。IAM是AWS里面的身份访问管理服务。
角色
角色跟用户的概念比较接近,即权限策略可以直接授权给一个角色。角色跟用户的关系跟演员在一部影视剧中饰演的角色是类似的。这里用户也可以扮演不同的角色进行阿里云服务的访问,当然不同的角色访问的权限也是不一样的。
如何使用角色
根据角色创建时选择不同的可信实例类型,角色也就有了不同的应用场景。我们分别对每一种应用场景做介绍。
可信实体为阿里云服务的角色
选择可信实体类型为阿里云服务时,同时选择授信服务,比如我们可以选择云服务器或者函数计算。
以云服务器为例,在创建ECS实例时,可以在系统配置->高级选项中给当前的ECS实例选择RAM角色。比如我们先建一个角色叫test-role,然后添加权限AliyunOSSFullAccess,然后在创建ECS实例时指定角色test-role。
登陆进ECS,安装aliyun CLI。配置CLI 认证模式为 EcsRamRole。这里执行aliyun oss命令可以对OSS进行操作。
root@kyle:~# aliyun configure --mode EcsRamRole
root@kyle:~# aliyun oss ls
注:AWS CLI配置时不需要指定Access Key ID, Secret Access Key, 也不用指定role。
root@kyle:~# aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [ap-northeast-1]:
Default output format [json]:
从以上的例子可以看出,使用可信实体为阿里云服务的角色时,实际上是把此角色所拥有的权限转移给了相应的服务。这样访问阿里云服务的不只是用户,还有一些其它的服务(比如ECS,函数计算)也需要访问另外一些服务。这可以理解为授权的一种方式,从应用程序代码层面来看,避免了应用程序使用AK的方式访问阿里云服务,提高了安全性。
可信实体为当前阿里云账号的角色
这种场景大家不常用,但我个人通常这种模式来实现角色的分离,避免一些误操作,保障账户安全。创建可信实体为当前阿里云账号的角色后,也就只能将此角色分配给当前账号的RAM 用户,也就是子账号。
在下图中,我们创建了不同的角色,基于不同角色再授予相应的权限。比如Admin 角色行使管理员的职责,Develop 角色行使开发职责,Ops 角色行使运维管理。再对不同的用户分配权限使他们能够扮演某类或某几类角色。
比如针对企业别名为kyleliu的账号建不同的角色,和不同的用户。用户kyle不具有访问阿里云服务的权限,只可以用于登录。如果要做系统管理,需要切换至admin的角色来进行相应的管理操作。这样类似于Linux下一般不建议用root用户直接操作,在普通用户需要特定权限才用sudo临时提升权限是一样的。好处保证了系统的安全,即使用户kyle的AK泄露了,获得者用得到的这个AK仍然不能对系统进行任何操作,除非知道具体的角色名称。
此类角色的另一个使用场景是当给一用户进行临时授权时,不需要改变用户的权限,可以给他建一个角色并分配相应的权限,将此角色的扮演权限赋予用户就可以了。
可信实体为其它云账号的角色
可信实体为其它云账号的角色,跟前面的当前云账号角色类似,即是跨账号的授权。比如针对不同的产品环境,我们创建了不同的账号,比如我们有OPS账号,有DEV账号,有INT账号,有PROD账号。当OPS账号需要访问其它环境的资源时,就可以扮演其它账号中创建的角色,而不用在每个环境中重复创建相同的用户。
下图示例是对用户管理的一种优化,针对刚才提到的不同环境,我们单独使用一个账号来进行登录。登录到Account 1 - Login账号后,当前账号是没有任何访问权限的,此时需要用户根据使用的需要切换到不同环境的角色,从而使用和管理相应环境的资源。这样操作有一定的局限性,因为并不是所有的阿里云服务都提供基于角色的访问(比如切换了角色再访问云栖社区就会提示说不支持角色登录),目前来看大部分服务是支持的,具体请参考参考资料2,文档跟实际不完全一致,需要时可具体验证测试。
总结
本文介绍了角色的概念及使用方法,同时给出了一些使用案例。在掌握了基本原理后,可以在此基础上实现不同的应用模型,从而提高系统的安全性和管理上的便利性。
参考资料
- 访问控制 > 用户指南 > 身份管理 > RAM 角色身份 > 理解 RAM 角色
- 访问控制 > 产品简介 > 支持 RAM 的云服务