云服务器ECS资源绑定标签后,您需要对RAM用户授予某种要求的标签鉴权策略,RAM用户才可以通过执行云助手命令控制带有某种标签的ECS实例,并对该ECS实例进行控制访问。本文介绍如何通过标签控制云助手命令的执行。

前提条件

背景信息

  • 标签由一组键值对组成,可以用于标记ECS实例,实现资源的分类管理。更多信息,请参见标签概述
  • 访问控制RAM可基于权限策略,管理用户身份,控制云资源的访问和操作权限。您可以从地域、ECS实例、云助手命令等维度设计自定义策略,并授权给RAM用户使用,从而灵活控制RAM用户使用云助手命令的权限。更多信息,请参见RAM用户概览权限策略概览
  • 标签和RAM结合,将标签作为权限策略的匹配条件,可以实现对云资源的精细化管理。
    基于标签控制RAM用户权限(即标签鉴权)的逻辑如下:标签鉴权逻辑图

应用场景说明

本文以如下应用场景为示例,说明如何使用标签鉴权控制云助手命令。
  • RAM用户只能将命令执行到带有标签(例如test:tony)的ECS实例上。
  • RAM用户只能将文件传输到带有标签(例如test:tony)的ECS实例上。
  • RAM用户可以查询标签、实例或云助手命令和执行结果。

操作步骤

本步骤将使用阿里云账号(主账号)新建自定义策略UseTagAccessResoures为例,将自定义策略UseTagAccessResoures授权给RAM用户后,RAM用户只能将命令执行或者文件上传到带有标签test:tony的ECS实例上。

  1. 创建带有标签的ECS实例。
    本步骤以创建标签为test:tony的ECS实例为例。具体操作,请参见创建带特定标签的资源
  2. 使用阿里云账号(主账号)登录RAM控制台
  3. 创建自定义策略UseTagAccessResoures
    具体操作,请参见创建自定义权限策略
    您可以在权限策略(Condition)中为ECS资源设置多个标签条件来限制操作权限,支持的标签鉴权条件如下所示:
    标签鉴权条件 说明
    acs:RequestTag 限制在请求中必须传入特定的标签。

    如果API请求中没有标签参数,则不能使用acs:RequestTag,否则会导致鉴权失败。

    acs:ResourceTag 限制指定的资源必须包含特定的标签。

    如果API请求中没有资源ID参数,则不能使用acs:ResourceTag,否则会导致鉴权失败。

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ecs:InvokeCommand",
                    "ecs:RunCommand",
                    "ecs:StopInvocation",
                    "ecs:SendFile"
                ],
                "Resource": "acs:ecs:*:*:instance/*",
                "Condition": {
                    "StringEquals": {
                        "acs:ResourceTag/test": "tony"
                    }
                }
            },
            {
                "Effect": "Allow",
                "Action": [
                    "ecs:InvokeCommand",
                    "ecs:RunCommand",
                    "ecs:StopInvocation",
                    "ecs:SendFile"
                ],
                "Resource": "acs:ecs:*:*:command/*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "ecs:DescribeTag*",
                    "ecs:DescribeInstance*",
                    "ecs:DescribeCommands",
                    "ecs:CreateCommand",
                    "ecs:DeleteCommand",
                    "ecs:ModifyCommand",
                    "ecs:DescribeInvocationResults",
                    "ecs:DescribeSendFileResults",
                    "ecs:DescribeInstances",
                    "ecs:DescribeCloudAssistantStatus",
                    "ecs:DescribeInvocations",
                    "ecs:DescribeResourceByTags",
                    "ecs:DescribeTagKeys",
                    "ecs:DescribeTags",
                    "ecs:ListTagResources",
                    "ecs:DescribeManagedInstances"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": "oos:ListSecretParameters",
                "Resource": "*"
            }
        ]
    }
    以上策略可以实现如下权限控制:
    • 允许在绑定test:tony标签的ECS实例上执行云助手命令或者发送远程文件,具体权限策略如下所示:
       {
             "Effect": "Allow",
             "Action": [
                "ecs:InvokeCommand",
                "ecs:RunCommand",
                "ecs:StopInvocation",
                "ecs:SendFile"
             ],
             "Resource": "acs:ecs:*:*:instance/*",
             "Condition": {
                 "StringEquals": {
                     "acs:ResourceTag/test": "tony"
                }
            }
       },
       {
            "Effect": "Allow",
            "Action": [
                "ecs:InvokeCommand",
                "ecs:RunCommand",
                "ecs:StopInvocation",
                "ecs:SendFile"
            ],
            "Resource": "acs:ecs:*:*:command/*"
      }
    • 允许查询标签、实例以及云助手等资源,具体权限策略如下所示:
      {
           "Effect": "Allow",
           "Action": [
                 "ecs:DescribeTag*",
                 "ecs:DescribeInstance*",
                 "ecs:DescribeCommands",
                 "ecs:CreateCommand",
                 "ecs:DeleteCommand",
                 "ecs:ModifyCommand",
                 "ecs:DescribeInvocationResults",
                 "ecs:DescribeSendFileResults",
                 "ecs:DescribeInstances",
                 "ecs:DescribeCloudAssistantStatus",
                 "ecs:DescribeInvocations",
                 "ecs:DescribeResourceByTags",
                 "ecs:DescribeTagKeys",
                 "ecs:DescribeTags",
                 "ecs:ListTagResources",
                 "ecs:DescribeManagedInstances"
              ],
              "Resource": "*"
       },
      {
           "Effect": "Allow",
           "Action": "oos:ListSecretParameters",
           "Resource": "*"
      }
  4. 将自定义权限策略UseTagAccessResoures授予您希望控制访问的RAM用户。
    具体操作,请参见为RAM角色授权
  5. 验证权限策略是否生效。
    登录ECS管理控制台后,对待验证的实例执行以下操作:
    说明 对实例执行云助手命令或者发送远程文件的同时,已经同步进行了查询标签、实例以及云助手资源等操作。
    • 对不同标签的ECS实例执行云助手命令

      ECS云助手页面中的命令列表页签下,选择已创建好的云助手命令(以命令ID为c-hz02jt1ncrf****为例),对不同标签的ECS实例执行云助手命令。具体操作,请参见执行命令

      说明 如果命令列表页签下还没有创建好的云助手命令,您也可以创建云助手命令后再进行后续操作。具体操作,请参见创建命令
    • 对不同标签的ECS实例发送远程文件

      ECS云助手页面中右上角位置,单击发送文件,对不同标签的ECS实例发送远程文件。具体操作,请参见上传本地文件到ECS实例

    如果权限策略已生效,上述操作的执行结果详情,请参见执行结果。如果权限策略未生效,请参见常见问题进行排查。

执行结果

  • 在ECS实例中执行云助手命令
    • ECS实例已绑定test:tony标签,则执行云助手命令时显示执行成功。命令执行-zh
    • ECS实例未绑定test:tony标签,则执行云助手命令时显示执行失败。失败提示
  • 发送远程文件到ECS实例中
    • ECS实例已绑定test:tony标签,则发送远程文件时显示执行成功。文件发送
    • ECS实例未绑定test:tony标签,则发送远程文件时显示执行失败。失败

常见问题

如果权限策略控制功能未生效怎么办?

如果权限控制功能未生效,请检查授权的RAM用户权限是否已经对Action中的以下几个参数设置了Allow操作。如果该参数已设置了Allow操作,请您将该权限策略从RAM用户权限中移除。

  • ecs:InvokeCommand
  • ecs:RunCommand
  • ecs:StopInvocation
  • ecs:SendFile
例如,如果自定义权限策略中存在如下所示的策略,请您将该权限策略从RAM用户权限中移除。
{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:InvokeCommand",
                "ecs:RunCommand",
                "ecs:StopInvocation",
                "ecs:SendFile"
            ],
            "Resource": "*"
        }
    ]
}