AutoScaling 如何通过RAM使用弹性伸缩?

RAM (Resource Access Management) 是阿里云为客户提供的用户身份管理与资源访问控制服务,使用RAM能够大大的提高企业信息安全程度。本文主要介绍了如何通过RAM实现对弹性伸缩服务的访问控制。

RAM简介

RAM 允许在一个云账户下创建并管理多个用户身份,并允许给单个身份或一组身份分配不同的权限策略,从而实现不同用户拥有不同的云资源访问权限。一些典型的RAM应用场景包括:

  1. 企业子账号管理与分权
  2. 不同企业之间的资源操作与授权管理

关于RAM更详细的介绍与功能,您可以参考 访问控制文档 .

目前,RAM支持访问弹性伸缩的方式入如下表:

服务名 控制台(RAM) API(RAM) 控制台(STS) API(STS) 授权粒度 系统策略 相关文档
弹性伸缩 AutoScaling 支持 支持 支持 支持 服务级别 AliyunESSFullAccess,AliyunESSReadOnlyAccess API使用须知
  • 控制台(RAM/STS):表示是否支持通过RAM或STS方式在控制台进行访问。
  • API(RAM/STS):表示是否支持通过RAM或STS方式使用API进行访问。
  • 授权粒度:当前服务提供的最小授权粒度。

下面我们将分别介绍如何通过RAM用户和RAM角色(STS)的方式访问弹性伸缩服务。

使用RAM用户访问弹性伸缩

RAM用户

RAM用户即阿里云子账号,您可以在 RAM控制台 创建一个RAM子账号,RAM用户在刚创建出来时不具有任何资源操作权限,需要主账号进行授权后才能对资源进行访问。

授权

您只有赋予RAM用户一定的权限后,RAM用户才具有操作资源的权利。

系统授权策略

针对弹性伸缩服务,阿里云为您预先创建了相应的系统策略:

AutoScaling 如何通过RAM使用弹性伸缩?

  • AliyunESSFullAccess

管理弹性伸缩服务的权限,其策略内容为:

{
    "Version": "1",
    "Statement": [
        {
            "Action": "ess:*",
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

表示您能访问弹性伸缩提供的所有服务。

  • AliyunESSReadOnlyAccess

只读访问弹性伸缩服务的权限,其策略内容为:

{
    "Version": "1",
    "Statement": [
        {
            "Action": "ess:Describe*",
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

表示您能访问弹性伸缩所有以Describe开头命名的服务,例如:DescribeScalingGroups(查询伸缩组列表)。

自定义授权策略

你还可以通过自定义授权策略对RAM用户能够使用的弹性伸缩服务精确的控制。

RAM策略包含允许(Allowed)和拒绝(Deny)两种效力,当允许和拒绝策略同时包含时,将优先执行拒绝策略。

假如,您希望赋予某用户只读权限的同时,允许其手动向伸缩组添加或移除Ecs实例,您可以制定如下自定义权限策略:

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ess:Describe*",
                "ess:AttachInstances",
                "ess:DetachInstances"
            ],
            "Resource": "*"
        }
    ],
    "Version": "1"
}

如果您不希望RAM用户查看您的伸缩配置,您可以通过反向权限限制其访问,例如:

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ess:Describe*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "ess:DescribeScalingConfigurations"
            ],
            "Resource": "*"
        }
    ],
    "Version": "1"
}

使用RAM角色访问弹性伸缩

RAM角色

RAM 角色与 RAM 用户一样,都是 RAM 中定义的身份。RAM 角色是一种虚拟用户,没有确定的身份认证密钥,需要被一个受信的实体用户扮演才能正常使用。关于RAM角色更详细的介绍请查看 理解RAM角色

授权

授权策略

RAM角色的策略授权同RAM用户相同,只是这里我们是给一个虚拟角色赋予了特定的权限,当一个授信用户扮演该角色后,授信用户不在拥有之前自身的策略授权,而是获取了所扮演角色的策略授权。

授信策略

RAM角色除了授权策略之外还具有授信策略。授信策略表明了哪些实体可以扮演该角色。授信实体一般分为阿里云账号和阿里云服务,通常,我们会选择给某个云账号进行授信。授信之后,这个云账号下的RAM用户便可以扮演该角色。

创建RAM角色

AutoScaling 如何通过RAM使用弹性伸缩?

RAM角色授权

AutoScaling 如何通过RAM使用弹性伸缩?

通过RAM角色访问控制台

注意,只有RAM用户才可以扮演角色。

先通过RAM用户登录控制台,此时我们没有为该RAM用户设置任何的授权策略,因此访问弹性伸缩控制台时将告知您联系主账号进行授权。

AutoScaling 如何通过RAM使用弹性伸缩?

点击用户头像,然后点击切换身份按钮,进行角色切换。

AutoScaling 如何通过RAM使用弹性伸缩?

AutoScaling 如何通过RAM使用弹性伸缩?

注意,切换角色时,当前登录的RAM用户必须授予AliyunSTSAssumeRoleAccess权限。

可以看到,扮演成功后,我们就以角色身份登录了控制台。此时,您将获得该角色所拥有的所有权限。

AutoScaling 如何通过RAM使用弹性伸缩?

通过RAM角色访问API

您可以通过STS的AssumeRole api获取一个角色的临时身份。这里我们使用Java SDK,以扮演autoScaling-test角色为例。

AssumeRoleRequest request = new AssumeRoleRequest();
request.setRoleArn("acs:ram::1619897336813314:role/shengfanramrole");
request.setRoleSessionName("shengfan");
AssumeRoleResponse response = client.getAcsResponse(request);

AssumeRoleResponse 中,我们可以获取到一个临时秘钥,用于访问云资源。

加入我们为autoScaling-test角色分配了弹性伸缩只读权限,那么通过该角色查询伸缩组示例如下:

AssumeRoleResponse assumeRoleResponse = assumeRule();
AssumeRoleResponse.Credentials credentials = assumeRoleResponse.getCredentials();
String key = credentials.getAccessKeyId();
String secret = credentials.getAccessKeySecret();
String token = credentials.getSecurityToken();
IClientProfile profile = DefaultProfile.getProfile(regionId, key, secret);
IAcsClient stsClient = new DefaultAcsClient(profile);
DescribeScalingGroupsRequest request = new DescribeScalingGroupsRequest();
request.setSecurityToken(token);  // 必须设置securityToken
stsClient.getAcsResponse(request);
上一篇:使用vCpu度量您的伸缩组


下一篇:论计算机叫兽们与林纳斯·托瓦兹