雲助手預設以最高許可權(Linux 的 root、Windows 的 system)執行命令,存在安全合規風險。本文介紹如何通過 RAM 權限原則限制執行身份,以普通使用者運行雲助手命令,並提供 Windows 環境下安全傳遞使用者憑證的方案。
前提條件
ECS 執行個體中已建立普通使用者,本文以
user01、user02為例。ECS 執行個體已安裝雲助手 Agent,且狀態為運行中。
如需使用 Windows 憑據加密功能(方案二),雲助手 Agent 版本需不低於 2.x.3.421 。
基礎許可權配置
通過 RAM 自訂策略,限制 RAM 使用者在調用雲助手介面時只能以指定使用者身份執行命令,適用於 Linux 和 Windows 執行個體。
RAM使用者資訊樣本如下所示:
名稱
樣本
登录名称
commandUser
顯示名稱
commandUser
訪問方式
本文中提供阿里雲控制台方式和OpenAPI方式使用雲助手,此處選中控制台訪問和使用永久 AccessKey 訪問。
說明您可以根據實際使用方式,選擇對應的一種訪問方式,實現許可權最小化管理。
設定密碼
選擇自動產生密碼。
需要重設密碼
選擇使用者在下次登入時必須重設密碼。
MFA 多因素認證
選擇不要求。
建立完成後,儲存 RAM 使用者的登入資訊和 AccessKey。
建立自訂權限原則
commandUserPolicy。具體操作,請參見建立自訂權限原則。
根據需求選擇以下任一策略模式:
白名單模式(推薦):僅允許ECS執行個體普通使用者 user01 和 user02 執行命令。
如需允許其他使用者,修改或增加 Condition 中的使用者名稱。
{ "Statement": [ { "Effect": "Allow", "Action": [ "ecs:InvokeCommand", "ecs:RunCommand" ], "Resource": [ "acs:ecs:*:*:instance/*", "acs:ecs:*:*:command/*" ], "Condition": { "StringEquals": { "ecs:CommandRunAs": [ "user01", "user02" ] } } } ], "Version": "1" }黑名單模式:禁止ECS執行個體的使用者 root 和 system 執行命令。
如需限制其他使用者,修改或增加 Condition 中的使用者名稱。
{ "Statement": [ { "Effect": "Allow", "Action": [ "ecs:InvokeCommand", "ecs:RunCommand" ], "Resource": [ "acs:ecs:*:*:instance/*", "acs:ecs:*:*:command/*" ], "Condition": { "StringNotEqualsIgnoreCase": { "ecs:CommandRunAs": [ "system", "root" ] } } } ], "Version": "1" }
為 RAM 使用者授權。具體操作,請參見管理RAM使用者的許可權。

授予以下許可權:
ECS 唯讀許可權:AliyunECSReadOnlyAccess
雲助手許可權:上一步建立的 commandUserPolicy
如果 Windows 執行個體使用方案一:使用 OOS + KMS 託管密碼,還需額外授予 AliyunOOSReadOnlyAccess 和自訂的
kmsPolicy權限原則。kmsPolicy 的建立方式參見常見的授權策略樣本,策略內容樣本:{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:List*", "kms:Describe*", "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": ["*"] } ] }
配置 Linux 執行個體的普通使用者執行雲助手命令
Linux 執行個體無需託管密碼,在執行命令時聲明使用者身份即可。
配置 Windows 執行個體的普通使用者執行雲助手命令
Windows 執行個體以普通使用者執行命令時必須同時傳遞密碼。根據安全需求選擇以下任一方案:
對比項 | 方案一:OOS + KMS 託管密碼 | 方案二:雲助手資料加密 |
依賴服務 | OOS、KMS | 無 |
適用情境 | 大規模密碼管理,密碼長期有效 | 高安全性情境,密碼臨時加密傳輸 |
額外許可權 | 需要 OOS、KMS 相關許可權和 RAM 角色 | 僅需基礎許可權配置中的許可權 |
方案一:使用 OOS + KMS 託管密碼
為 Windows 執行個體設定 RAM 角色。
建立自訂權限原則,包含
kms:GetSecretValue和oos:GetSecretParameter許可權。具體操作,請參見建立自訂權限原則。{ "Version": "1", "Statement": [ { "Action": ["kms:GetSecretValue"], "Resource": "*", "Effect": "Allow" }, { "Action": ["oos:GetSecretParameter"], "Effect": "Allow", "Resource": "*" } ] }建立類型為阿里雲服務、受信服務為Elastic Compute Service / ECS 的 RAM 角色(如
AxtSecretRamRole),並授予上述策略。具體操作,請參見建立可信實體為阿里雲服務的RAM角色和管理RAM角色的許可權。將該 RAM 角色授予目標 ECS 執行個體。具體操作,請參見授予執行個體 RAM 角色。
建立加密參數,在 OOS 中建立加密參數,託管 Windows 使用者密碼。
重要OOS加密參數所在地區必須和ECS執行個體所在地區一致,否則ECS執行個體無法使用此託管密碼。
樣本:為 user01 建立名為
axtSecretPassword的加密參數,KMS 金鑰識別碼 使用預設的 Default Service CMK,值填入 user01 的登入密碼。執行雲助手命令並驗證。
方案二:使用雲助手資料加密功能
通過 RSA-OAEP 非對稱式加密實現密碼的端到端傳輸,無需依賴 KMS 和 OOS。更多資訊,請參見雲助手命令內容加密。
在目標執行個體上產生臨時金鑰組。
通過
RunCommandAPI 或控制台,在目標執行個體上運行公用命令產生 RSA 金鑰組:Linux 執行個體:
ACS-ECS-GenerateRsaKeypair-linux.shWindows 執行個體:
ACS-ECS-GenerateRsaKeypair-windows.ps1
記錄返回的
id和publicKey欄位值。具體操作,請參見雲助手命令內容加密中的步驟一。說明私密金鑰僅存於執行個體記憶體中,不會在網路中傳輸或落盤。金鑰組預設 60 秒後自動銷毀,可通過
-t參數延長有效期間。在本地加密使用者密碼。
使用上一步獲得的公開金鑰,通過 RSA-OAEP 演算法加密 Windows 使用者密碼,產生 Base 64 編碼的密文。具體操作,請參見雲助手命令內容加密中的步驟二。
在目標執行個體上建立加密參數。
通過
RunCommandAPI 或控制台執行以下命令。也可使用公用命令ACS-ECS-CreateSecret-for-windows.ps1。aliyun_assist_service data-encryption --create-secret --keypair-id <keypair-id> --text <cipher-text> --param-name <param-name> --timeout <timeout>參數
說明
--keypair-id步驟 1 中產生的金鑰組 ID。
--text步驟 2 中得到的 Base64 密文。
--param-name自訂的加密參數名稱。
--timeout加密參數的有效時間(秒),預設 60 秒後自動銷毀。
輸出樣本:
{ "SecretName": "t-hz06gya7****", "CreatedTimestamp": 1775363628, "ExpiredTimestamp": 1775363688 }記錄
SecretName的值,下一步執行命令時需要使用。在加密參數有效期間內執行雲助手命令。
通過
RunCommandAPI 或 CLI 執行命令,將--Username設定為user01,--WindowsPasswordName設定為上一步建立的加密參數名稱(SecretName的值)。



