使用最小权限执行命令是权限管理的最佳实践,建议您以普通用户身份执行云助手命令。本文介绍如何通过RAM用户的权限控制,实现普通用户(非root或system用户)执行云助手命令。
前提条件
ECS实例中已创建普通用户,本文以普通用户user01、user02为例。
背景信息
执行云助手命令时,如果您未配置指定的权限,默认是以ECS实例内的最大权限来执行的。例如,Linux实例是以root用户来执行命令,Windows实例是以system用户来执行命令。
由于信息安全管理,您可能需要禁止在ECS实例中使用root或system用户。此时,您可以通过RAM用户并设置相关的权限策略,禁止ECS实例中root或者system用户执行云助手命令,并允许实例中特定用户(例如user01、user02)执行云助手命令。
配置Linux实例的普通用户执行云助手命令
如果只需要在Linux实例中执行云助手命令,您可以通过以下步骤限制RAM用户使用root执行云助手命令。
使用阿里云账号登录RAM控制台。
创建一个新的RAM用户。具体操作,请参见创建RAM用户。
RAM用户信息示例如下所示。
名称
示例
登录名称
commandUser
显示名称
commandUser
访问方式
本文中提供阿里云控制台方式和OpenAPI方式使用云助手,此处选中控制台访问和OpenAPI 调用访问。
说明您可以根据实际使用情况,选择对应的一种访问方式,实现权限最小化管理。
设置密码
选择自动生成密码。
需要重置密码
选择用户在下次登录时必须重置密码。
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中的用户名。
为RAM用户设置ECS只读权限和云助手相关权限。具体操作,请参见为RAM用户授权。
设置ECS只读权限:选择AliyunECSReadOnlyAccess。
设置云助手相关权限:选择上一步中创建的commandUserPolicy。
使用RAM用户登录阿里云控制台。
运行云助手命令验证结果。具体操作,请参见创建并执行命令。
控制台验证操作如下所示,需要设置执行用户。
user01用户能够正常执行云助手命令,root用户执行云助手命令报错。
CLI验证操作如下所示,user01用户能够正常执行云助手命令,root用户执行云助手命令报错。
配置Windows实例的普通用户执行云助手命令
如果需要在Windows实例执行云助手命令,您需要同时提供用户名和密码。为了数据安全,您需要在系统运维管理中托管您的Windows登录密码,并使用密钥管理服务KMS加密。更多信息,请参见什么是系统管理与运维服务和什么是密钥管理服务。
您可以通过以下步骤限制RAM用户使用root用户和system用户执行云助手命令。
使用阿里云账号登录RAM控制台。
创建一个新的RAM用户。具体操作,请参见创建RAM用户。
RAM用户信息示例如下所示。
名称
示例
登录名称
commandUser
显示名称
commandUser
访问方式
本文中提供阿里云控制台方式和OpenAPI方式使用云助手,此处选中控制台访问和OpenAPI 调用访问。
说明您可以根据实际使用情况,选择对应的一种访问方式,实现权限最小化管理。
设置密码
选择自动生成密码。
需要重置密码
选择用户在下次登录时必须重置密码。
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中的用户名。
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角色。
通过OOS创建加密参数,用于托管Windows登录密码。具体操作,请参见创建加密参数。
说明OOS加密参数所在地域必须和ECS实例所在地域一致,否则ECS实例无法使用此托管密码。
以下为设置user01用户密码托管的示例值:
名称
示例
参数名称
axtSecretPassword
KMS密钥ID
使用默认的Default Service CMK。
值
Windows实例登录密码。此处填入user01用户的登录密码。
使用RAM用户登录阿里云控制台。
运行云助手命令验证结果。具体操作,请参见创建并执行命令。
以在Windows实例中运行云助手命令为例,验证权限设置是否生效。
控制台验证操作如下所示,需要设置执行用户和OOS托管密码。
user01用户能够正常执行云助手命令,system用户执行云助手命令报错。
CLI验证操作如下所示,user01用户能够正常执行云助手命令,system用户执行云助手命令报错。