使用最小权限执行命令是权限管理的最佳实践,建议您以普通用户身份执行云助手命令。本文介绍如何通过RAM用户的权限控制,实现普通用户(非root或system用户)执行云助手命令。
前提条件
背景信息
执行云助手命令时,如果您未配置指定的权限,默认是以ECS实例内的最大权限来执行的。例如,Linux实例是以root用户来执行命令,Windows实例是以system用户来执行命令。
由于信息安全管理,您可能需要禁止在ECS实例中使用root或system用户。此时,您可以通过RAM用户并设置相关的权限策略,禁止ECS实例中root或者system用户执行云助手命令,并允许实例中特定用户(例如user01、user02)执行云助手命令。
配置Linux实例的普通用户执行云助手命令
如果只需要在Linux实例中执行云助手命令,您可以通过以下步骤限制RAM用户使用root执行云助手命令。
- 使用阿里云账号登录RAM控制台。
- 创建一个新的RAM用户。具体操作,请参见创建RAM用户。RAM用户信息示例如下所示。
名称 示例 登录名称 commandUser 显示名称 commandUser 访问方式 本文中提供阿里云控制台方式和API方式使用云助手,此处选中控制台访问和编程访问。 说明 您可以根据实际使用情况,选择对应的一种访问方式,实现权限最小化管理。控制台密码 选择自动生成密码。 需要重置密码 选择用户在下次登录时必须重置密码。 MFA多因素认证 选择无需开启。 创建RAM用户后,您需要保留RAM用户的用户名、密码和AccessKey信息。 - 创建云助手相关权限策略。具体操作,请参见创建自定义策略。创建一个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中的用户名。
- 允许部分ECS实例普通用户(user01和user02)执行云助手命令的RAM权限策略:
- 为RAM用户设置ECS只读权限和云助手相关权限。具体操作,请参见为RAM用户授权。
- 设置ECS只读权限:在系统策略页签中,选择AliyunECSReadOnlyAccess。
- 设置云助手相关权限:在自定义策略页签中,选择上一步中创建的commandUserPolicy。
- 使用RAM用户登录阿里云控制台。
- 运行云助手命令验证结果。具体操作,请参见立即执行命令。
- 控制台验证操作如下所示,需要设置执行用户。
user01用户能够正常执行云助手命令,root用户执行云助手命令报错。
- CLI验证操作如下所示,user01用户能够正常执行云助手命令,root用户执行云助手命令报错。
- 控制台验证操作如下所示,需要设置执行用户。
配置Windows实例的普通用户执行云助手命令
如果需要在Windows实例执行云助手命令,您需要同时提供用户名和密码。为了数据安全,您需要在运维编排服务OOS中托管您的Windows登录密码,并使用密钥管理服务KMS加密。更多信息,请参见什么是运维编排服务和什么是密钥管理服务。
您可以通过以下步骤限制RAM用户使用root用户和system用户执行云助手命令。
- 使用阿里云账号登录RAM控制台。
- 创建一个新的RAM用户。具体操作,请参见创建RAM用户。RAM用户信息示例如下所示。
名称 示例 登录名称 commandUser 显示名称 commandUser 访问方式 本文中提供阿里云控制台方式和API方式使用云助手,此处选中控制台访问和编程访问。 说明 您可以根据实际使用情况,选择对应的一种访问方式,实现权限最小化管理。控制台密码 选择自动生成密码。 需要重置密码 选择用户在下次登录时必须重置密码。 MFA多因素认证 选择无需开启。 创建RAM用户后,您需要保留RAM用户的用户名、密码和AccessKey信息。 - 创建云助手、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中的用户名。
- 允许部分ECS实例普通用户(user01和user02)执行云助手命令的RAM权限策略:
- KMS相关权限:
创建一个kmsPolicy权限策略,策略内容示例如下所示,更多信息,请参见常见的授权策略示例。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:List*", "kms:Describe*", "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "*" ] } ] }
- 云助手相关权限:
- 为RAM用户设置ECS、OOS、云助手和KMS等相关权限。具体操作,请参见为RAM用户授权。
- 设置ECS只读权限:在系统策略页签中,选择AliyunECSReadOnlyAccess。
- 设置OOS只读权限:在系统策略页签中,选择AliyunOOSReadOnlyAccess。
- 设置云助手相关权限:在自定义策略页签中,选择上一步中创建的commandUserPolicy。
- 设置KMS相关权限:在自定义策略页签中,选择上一步中创建的kmsPolicy。
- 为Windows实例设置RAM角色。
- 创建RAM角色相关权限。具体操作,请参见创建自定义策略。策略内容如下所示:
{ "Version": "1", "Statement": [ { "Action": [ "kms:GetSecretValue" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "oos:GetSecretParameter" ], "Effect": "Allow", "Resource": "*" } ] }
- 创建RAM角色。具体操作,请参见创建可信实体为阿里云服务的RAM角色。相关配置示例如下所示。
名称 示例 当前可信实体类型 选择阿里云服务。 角色类型 选择普通服务角色。 角色名称 AxtSecretRamRole 选择受信服务 下拉栏中选择云服务器。 - 为RAM角色授权。具体操作,请参见为RAM角色授权。
- 为ECS实例设置RAM角色。具体操作,请参见授予实例RAM角色。
- 创建RAM角色相关权限。具体操作,请参见创建自定义策略。
- 通过OOS创建加密参数,用于托管Windows登录密码。具体操作,请参见创建加密参数。说明 OOS加密参数所在地域必须和ECS实例所在地域一致,否则ECS实例无法使用此托管密码。
名称 示例 参数名称 axtSecretPassword KMS密钥ID 使用默认的Default Service CMK。 值 Windows实例登录密码。此处填入user01用户的登录密码。 - 使用RAM用户登录阿里云控制台。
- 运行云助手命令验证结果。具体操作,请参见立即执行命令。以在Windows实例中运行云助手命令为例,验证权限设置是否生效。
- 控制台验证操作如下所示,需要设置执行用户和OOS托管密码。
user01用户能够正常执行云助手命令,system用户执行云助手命令报错。
- CLI验证操作如下所示,user01用户能够正常执行云助手命令,system用户执行云助手命令报错。
- 控制台验证操作如下所示,需要设置执行用户和OOS托管密码。