使用最小权限执行命令是权限管理的最佳实践,建议您以普通用户身份执行云助手命令。本文介绍如何通过RAM用户的权限控制,实现普通用户(非root或system用户)执行云助手命令。

前提条件

ECS实例中已创建普通用户,本文以普通用户user01、user02为例。

背景信息

执行云助手命令时,如果您未配置指定的权限,默认是以ECS实例内的最大权限来执行的。例如,Linux实例是以root用户来执行命令,Windows实例是以system用户来执行命令。

由于信息安全管理,您可能需要禁止在ECS实例中使用root或system用户。此时,您可以通过RAM用户并设置相关的权限策略,禁止ECS实例中root或者system用户执行云助手命令,并允许实例中特定用户(例如user01、user02)执行云助手命令。

配置Linux实例的普通用户执行云助手命令

如果只需要在Linux实例中执行云助手命令,您可以通过以下步骤限制RAM用户使用root执行云助手命令。

  1. 使用阿里云账号登录RAM控制台
  2. 创建一个新的RAM用户。具体操作,请参见创建RAM用户
    RAM用户信息示例如下所示。
    名称 示例
    登录名称 commandUser
    显示名称 commandUser
    访问方式 本文中提供阿里云控制台方式和API方式使用云助手,此处选中控制台访问编程访问
    说明 您可以根据实际使用情况,选择对应的一种访问方式,实现权限最小化管理。
    控制台密码 选择自动生成密码
    需要重置密码 选择用户在下次登录时必须重置密码
    MFA多因素认证 选择无需开启
    创建RAM用户后,您需要保留RAM用户的用户名、密码和AccessKey信息。
  3. 创建云助手相关权限策略。具体操作,请参见创建自定义策略
    ram用户权限设置
    创建一个commandUserPolicy权限策略,限制ECS实例中用户执行云助手命令。以下为策略内容的两个示例,您可以根据实际情况修改。
    • 允许部分ECS实例普通用户(user01和user02)执行云助手命令的RAM权限策略:
      {
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "ecs:DescribeInstances",
                      "ecs:DescribeTagKeys",
                      "ecs:DescribeTags",
                      "ecs:CreateCommand",
                      "ecs:DescribeCommands",
                      "ecs:InvokeCommand",
                      "ecs:RunCommand",
                      "ecs:DeleteCommand",
                      "ecs:DescribeInvocations",
                      "ecs:DescribeInvocationResults",
                      "ecs:StopInvocation",
                      "ecs:DescribeCloudAssistantStatus",
                      "ecs:InstallCloudAssistant"
                  ],
                  "Resource": [
                      "acs:ecs:*:*:instance/*",
                      "acs:ecs:*:*:command/*"
                  ],
                  "Condition": {
                      "StringEquals": {
                          "ecs:CommandRunAs": [
                              "user01",
                              "user02"
                          ]
                      }
                  }
              }
          ],
          "Version": "1"
      }
      说明 如果您需要允许其他用户,可以修改或增加Condition中的用户名。
    • 禁止部分ECS实例的用户(root和system)执行云助手命令的RAM权限策略:
      {
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "ecs:DescribeInstances",
                      "ecs:DescribeTagKeys",
                      "ecs:DescribeTags",
                      "ecs:CreateCommand",
                      "ecs:DescribeCommands",
                      "ecs:InvokeCommand",
                      "ecs:RunCommand",
                      "ecs:DeleteCommand",
                      "ecs:DescribeInvocations",
                      "ecs:DescribeInvocationResults",
                      "ecs:StopInvocation",
                      "ecs:DescribeCloudAssistantStatus",
                      "ecs:InstallCloudAssistant"
                  ],
                  "Resource": [
                      "acs:ecs:*:*:instance/*",
                      "acs:ecs:*:*:command/*"
                  ],
                  "Condition": {
                      "StringNotEqualsIgnoreCase": {
                          "ecs:CommandRunAs": [
                              "system",
                              "root"
                          ]
                      }
                  }
              }
          ],
          "Version": "1"
      }
      说明 如果您需要限制其他用户,可以修改或增加Condition中的用户名。
  4. 为RAM用户设置ECS只读权限和云助手相关权限。具体操作,请参见为RAM用户授权
    授权
    • 设置ECS只读权限:在系统策略页签中,选择AliyunECSReadOnlyAccess
    • 设置云助手相关权限:在自定义策略页签中,选择上一步中创建的commandUserPolicy
  5. 使用RAM用户登录阿里云控制台
  6. 运行云助手命令验证结果。具体操作,请参见立即执行命令
    • 控制台验证操作如下所示,需要设置执行用户。远程命令

      user01用户能够正常执行云助手命令,root用户执行云助手命令报错。

    • CLI验证操作如下所示,user01用户能够正常执行云助手命令,root用户执行云助手命令报错。cli结果

配置Windows实例的普通用户执行云助手命令

如果需要在Windows实例执行云助手命令,您需要同时提供用户名和密码。为了数据安全,您需要在运维编排服务OOS中托管您的Windows登录密码,并使用密钥管理服务KMS加密。更多信息,请参见什么是运维编排服务什么是密钥管理服务

您可以通过以下步骤限制RAM用户使用root用户和system用户执行云助手命令。

  1. 使用阿里云账号登录RAM控制台
  2. 创建一个新的RAM用户。具体操作,请参见创建RAM用户
    RAM用户信息示例如下所示。
    名称 示例
    登录名称 commandUser
    显示名称 commandUser
    访问方式 本文中提供阿里云控制台方式和API方式使用云助手,此处选中控制台访问编程访问
    说明 您可以根据实际使用情况,选择对应的一种访问方式,实现权限最小化管理。
    控制台密码 选择自动生成密码
    需要重置密码 选择用户在下次登录时必须重置密码
    MFA多因素认证 选择无需开启
    创建RAM用户后,您需要保留RAM用户的用户名、密码和AccessKey信息。
  3. 创建云助手、KMS相关权限策略。具体操作,请参见创建自定义策略
    • 云助手相关权限:
      创建一个commandUserPolicy权限策略,限制ECS实例中用户执行云助手命令。以下为策略内容的两个示例,您可以根据实际情况修改。
      • 允许部分ECS实例普通用户(user01和user02)执行云助手命令的RAM权限策略:
        {
            "Statement": [
                {
                    "Effect": "Allow",
                    "Action": [
                        "ecs:DescribeInstances",
                        "ecs:DescribeTagKeys",
                        "ecs:DescribeTags",
                        "ecs:CreateCommand",
                        "ecs:DescribeCommands",
                        "ecs:InvokeCommand",
                        "ecs:RunCommand",
                        "ecs:DeleteCommand",
                        "ecs:DescribeInvocations",
                        "ecs:DescribeInvocationResults",
                        "ecs:StopInvocation",
                        "ecs:DescribeCloudAssistantStatus",
                        "ecs:InstallCloudAssistant"
                    ],
                    "Resource": [
                        "acs:ecs:*:*:instance/*",
                        "acs:ecs:*:*:command/*"
                    ],
                    "Condition": {
                        "StringEquals": {
                            "ecs:CommandRunAs": [
                                "user01",
                                "user02"
                            ]
                        }
                    }
                }
            ],
            "Version": "1"
        }
        说明 如果您需要允许其他用户,可以修改或增加Condition中的用户名。
      • 禁止部分ECS实例的用户(root和system)执行云助手命令的RAM权限策略:
        {
            "Statement": [
                {
                    "Effect": "Allow",
                    "Action": [
                        "ecs:DescribeInstances",
                        "ecs:DescribeTagKeys",
                        "ecs:DescribeTags",
                        "ecs:CreateCommand",
                        "ecs:DescribeCommands",
                        "ecs:InvokeCommand",
                        "ecs:RunCommand",
                        "ecs:DeleteCommand",
                        "ecs:DescribeInvocations",
                        "ecs:DescribeInvocationResults",
                        "ecs:StopInvocation",
                        "ecs:DescribeCloudAssistantStatus",
                        "ecs:InstallCloudAssistant"
                    ],
                    "Resource": [
                        "acs:ecs:*:*:instance/*",
                        "acs:ecs:*:*:command/*"
                    ],
                    "Condition": {
                        "StringNotEqualsIgnoreCase": {
                            "ecs:CommandRunAs": [
                                "system",
                                "root"
                            ]
                        }
                    }
                }
            ],
            "Version": "1"
        }
        说明 如果您需要限制其他用户,可以修改或增加Condition中的用户名。
    • KMS相关权限:
      创建一个kmsPolicy权限策略,策略内容示例如下所示,更多信息,请参见常见的授权策略示例
      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "kms:List*", "kms:Describe*",
              "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey"
            ],
            "Resource": [
              "*"
            ]
          }
        ]
      }             
  4. 为RAM用户设置ECS、OOS、云助手和KMS等相关权限。具体操作,请参见为RAM用户授权
    win权限
    • 设置ECS只读权限:在系统策略页签中,选择AliyunECSReadOnlyAccess
    • 设置OOS只读权限:在系统策略页签中,选择AliyunOOSReadOnlyAccess
    • 设置云助手相关权限:在自定义策略页签中,选择上一步中创建的commandUserPolicy
    • 设置KMS相关权限:在自定义策略页签中,选择上一步中创建的kmsPolicy
  5. 为Windows实例设置RAM角色。
    1. 创建RAM角色相关权限。具体操作,请参见创建自定义策略
      策略内容如下所示:
      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "kms:GetSecretValue"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": [
                      "oos:GetSecretParameter"
                  ],
                  "Effect": "Allow",
                  "Resource": "*"
              }
          ]
      }
    2. 创建RAM角色。具体操作,请参见创建可信实体为阿里云服务的RAM角色
      相关配置示例如下所示。
      名称 示例
      当前可信实体类型 选择阿里云服务
      角色类型 选择普通服务角色
      角色名称 AxtSecretRamRole
      选择受信服务 下拉栏中选择云服务器
    3. 为RAM角色授权。具体操作,请参见为RAM角色授权
    4. 为ECS实例设置RAM角色。具体操作,请参见授予实例RAM角色
  6. 通过OOS创建加密参数,用于托管Windows登录密码。具体操作,请参见创建加密参数
    说明 OOS加密参数所在地域必须和ECS实例所在地域一致,否则ECS实例无法使用此托管密码。
    以下为设置user01用户密码托管的示例值:
    名称 示例
    参数名称 axtSecretPassword
    KMS密钥ID 使用默认的Default Service CMK
    Windows实例登录密码。此处填入user01用户的登录密码。
  7. 使用RAM用户登录阿里云控制台
  8. 运行云助手命令验证结果。具体操作,请参见立即执行命令
    以在Windows实例中运行云助手命令为例,验证权限设置是否生效。
    • 控制台验证操作如下所示,需要设置执行用户和OOS托管密码。win执行验证

      user01用户能够正常执行云助手命令,system用户执行云助手命令报错。

    • CLI验证操作如下所示,user01用户能够正常执行云助手命令,system用户执行云助手命令报错。win执行结果cli