使用标签控制云助手命令的执行

当您对云服务器ECS资源绑定标签(例如特定环境标签、应用程序标签或资源类型标签等)进行精细化管理后,如果您需要筛选出指定标签的ECS实例来批量执行云助手命令或通过云助手上传文件,则您需要为RAM用户授予目标标签的鉴权策略,RAM用户才可以通过执行云助手命令控制带有该标签的ECS实例,并对该ECS实例进行访问控制。本文介绍如何通过标签控制云助手命令的执行。

前提条件

  • 已创建RAM用户。如未创建RAM用户,具体操作,请参见创建RAM用户

  • 已创建云助手命令。如未创建云助手命令,具体操作,请参见创建命令

工作原理

标签和RAM用户结合,将标签作为权限策略的匹配条件,即可实现对ECS资源的精细化管理。

说明
  • 标签由一组键值对组成,可以用于标记ECS实例,实现资源的分类管理。更多信息,请参见标签概述

  • 访问控制RAM可基于权限策略,管理用户身份,控制云资源的访问和操作权限。您可以从地域、ECS实例、云助手命令等维度设计自定义策略,并授权给RAM用户使用,从而灵活控制RAM用户使用云助手命令的权限。更多信息,请参见RAM用户概览权限策略概览

基于标签控制RAM用户权限(即标签鉴权)的逻辑如下:

image

示例场景说明

本文以如下场景为示例,说明如何使用标签鉴权控制云助手命令。

  • RAM用户只能将命令执行到带有标签(例如test:tony)的ECS实例上。

  • RAM用户只能将文件传输到带有标签(例如test:tony)的ECS实例上。

  • RAM用户可以查询标签、实例或云助手命令和执行结果。

操作步骤

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

  1. 创建带有标签的ECS实例。

    本步骤以创建标签为test:tony的ECS实例为例。具体操作,请参见创建带特定标签的资源

  2. 使用阿里云账号(主账号)登录RAM控制台

  3. 创建自定义策略UseTagAccessResources

    具体操作,请参见创建自定义权限策略

    您可以在权限策略(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. 将自定义权限策略UseTagAccessResources授予您希望控制访问的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": "*"
        }
    ]
}

相关文档

  • 除了使用标签控制云助手命令的执行外,您还可以为RAM用户授权特定的策略,使该RAM用户能够通过标签控制ECS实例的访问。具体操作,请参见使用标签控制资源的访问

  • 除了使用标签控制云助手命令的执行外,您还可以为您的ECS实例绑定相同标签并通过云监控的智能标签同步功能,将它们自动添加至同一个应用分组,实现自动化分组监控,监控内容包括ECS实例的健康状态、CPU使用率和内存使用率等。具体操作,请参见基于标签的自动化分组监控

  • 如果您的标签不再适用于管理和检索资源,您可以从该资源解绑标签。具体操作,请参见解绑或删除标签