安全性原則(safety policy)是阿里雲 CLI 的用戶端操作防護機制。啟用後,CLI 在執行命令前按規則匹配操作,允許、拒絕匹配的操作,或要求人工確認後才執行。
功能介紹
安全性原則定義了一組規則,每條規則由 pattern(匹配模式)和 action(動作類型)組成:
allow(允許):顯式允許存取操作,跳過後續規則檢查。用於在寬泛的 deny/confirm 規則之前為特定操作建立豁免。deny(拒絕):直接拒絕操作,不發送 API 請求。confirm(確認):在互動式終端中彈出確認提示,輸入yes後才繼續執行。
安全性原則同時適用於 OpenAPI 呼叫(RPC 和 RESTful)和外掛程式命令,是 CLI 全域生效的用戶端安全能力。安全性原則與服務端 RAM(Resource Access Management)存取控制互補,不替代服務端許可權管理。
典型情境
AI Agent 安全護欄:當 AI Agent 通過 CLI 執行雲資源操作時,安全性原則可攔截高危操作(如 Delete 類),要求人工確認或直接拒絕。這是HITL(human-in-the-loop)機制在 AI Agent 情境中的實踐。
營運防誤操作:為團隊的 CLI 環境配置預設規則,防止誤執行刪除、停止等高危操作。
前提條件
已安裝阿里雲 CLI v3.3.14 及以上版本。執行以下命令查看目前的版本:
aliyun version已完成 CLI 憑證配置。如未配置,執行以下命令進行初始化:
aliyun configure
管理安全性原則
安全性原則通過 aliyun configure safety-policy 命令族管理。
查看當前策略
執行以下命令查看安全性原則的完整配置(JSON 格式輸出):
aliyun configure safety-policy show輸出樣本:
{
"enabled": false,
"rules": []
}啟用和禁用
# 啟用安全性原則
aliyun configure safety-policy enable
# 禁用安全性原則
aliyun configure safety-policy disable執行 aliyun configure safety-policy show 驗證 enabled 欄位為 true。
添加規則
命令格式:
aliyun configure safety-policy add --pattern <pattern> --action <deny|confirm>樣本:拒絕所有產品的 Delete 類操作:
aliyun configure safety-policy add --pattern '*:Delete*' --action deny樣本:對 ECS 的 Update 類操作要求人工確認:
aliyun configure safety-policy add --pattern 'ecs:Update*' --action confirm執行 aliyun configure safety-policy list 驗證規則已生效。
如果添加的 --pattern 與已有規則相同,該規則的 action 會被更新,不會重複添加。
aliyun configure safety-policy add 命令當前僅接受 deny、confirm、forbid 三個 action 值。要使用 allow 規則,通過環境變數 ALIBABA_CLOUD_SAFETY_POLICY_RULES 設定或直接編輯設定檔。
刪除規則
通過 --pattern 指定要刪除的規則:
aliyun configure safety-policy remove --pattern '*:Delete*'查看規則列表
執行以下命令查看所有規則(格式化輸出):
aliyun configure safety-policy list輸出樣本:
Safety policy: 已啟用
Config file: /home/user/.aliyun/safety-policy.json
Rules:
1. *:Delete* -> deny
2. ecs:Update* -> confirm規則文法
pattern 格式
規則的 --pattern 參數採用 產品名:操作名 格式,支援 * 萬用字元(匹配任一字元序列)。匹配時不區分大小寫,即 *:Delete*、*:DELETE*、*:delete* 的匹配範圍完全相同。
真正的區分在於匹配目標不同。CLI 根據調用類型構建不同的命令標識符:
調用類型 | 匹配目標格式 | 樣本 |
RPC API |
|
|
RESTful API |
|
|
外掛程式命令 |
|
|
常用 pattern 樣本:
pattern 樣本 | 匹配範圍 |
| 所有產品中名稱包含 Delete 的操作(不區分大小寫) |
| 僅 ECS 的 delete-instance 操作 |
| ECS 的所有 Update 開頭的操作 |
| 所有產品的所有操作 |
在 Shell 中執行命令時,pattern 值建議使用單引號包裹(如 '*:Delete*'),避免 Shell 對 * 進行萬用字元展開。
action 值
action | 行為 |
| 顯式允許存取操作。在 first-match-wins 規則系統中,將 allow 規則排在寬泛的 deny 或 confirm 規則之前,可為特定操作建立豁免。 |
| 直接拒絕操作,返回錯誤資訊,不發送 API 請求。 |
| 在互動式終端中彈出確認提示,輸入 |
forbid 是 confirm 的別名,運行時行為完全相同。
如果沒有規則匹配到當前操作,預設允許執行(等同於隱式 allow)。顯式 allow 規則的主要用途是在寬泛的 deny/confirm 規則之前為特定操作建立白名單豁免。
匹配優先順序
規則按添加順序從上到下逐條匹配,採用首條匹配優先(first-match-wins)策略:第一條匹配的規則生效,後續規則不再檢查。如果沒有規則匹配,預設允許執行。
例如,同時存在以下兩條規則時:
ecs:Delete*→ confirm*:Delete*→ deny
執行 aliyun ecs delete-instance 時,匹配到第 1 條規則(ecs:Delete*),執行 confirm 動作,而不是第 2 條的 deny。
利用 allow 建立豁免規則:
ecs:Describe*→ allowecs:*→ deny
執行 aliyun ecs DescribeInstances 時匹配到第 1 條 allow 規則,操作正常執行;執行 aliyun ecs DeleteInstance 時匹配第 2 條,被拒絕。
規則順序很重要。添加規則時需注意排列順序,確保更具體的規則排在更通用的規則之前。
非互動模式和 AI Agent 情境
--yes 標誌
命令中指定 --yes(或 -y)標誌時,confirm 類規則會被自動跳過(視為已確認)。deny 類規則不受影響,仍然拒絕執行。
# confirm 類規則被跳過,直接執行
aliyun ecs update-instance --InstanceId i-bp1xxxxx --yes
# deny 類規則不受影響,仍然拒絕
aliyun ecs delete-instance --InstanceId i-bp1xxxxx --yes
# 輸出:ERROR: operation blocked by safety policy: ecs delete-instance (rule: *:Delete*)非互動式終端行為
CLI 通過檢測標準輸入是否為終端裝置來判斷當前環境。在非互動式環境(如指令碼、CI/CD 管道、AI Agent)中,如果操作匹配到 confirm 類規則且未指定 --yes,CLI 返回以下錯誤資訊:
安全性原則要求確認以下操作:ecs update-instance
當前為非互動環境,無法自動確認。若調用方為智能體,請先向使用者說明並徵得同意;
使用者同意後(可在對話中回複 yes 或「確認」),再使用 --yes 重新執行同一命令。AI Agent 推薦做法
在 AI Agent 通過 CLI 操作雲資源的情境中,按以下步驟配置和使用安全性原則:
配置安全性原則:對高危操作設定
deny(完全禁止),對需要確認的操作設定confirm。處理 confirm 提示:Agent 遇到
confirm攔截時,向使用者展示要執行的操作內容並徵求同意。重新執行:使用者同意後,Agent 使用
--yes標誌重新執行該命令。
樣本配置:禁止 Agent 執行 Delete 類操作,Update 類操作需要人工確認:
aliyun configure safety-policy enable
aliyun configure safety-policy add --pattern '*:Delete*' --action deny
aliyun configure safety-policy add --pattern '*:Update*' --action confirm環境變數
除命令列配置外,還可以通過環境變數控制安全性原則。環境變數的優先順序高於設定檔。
環境變數 | 說明 | 樣本 |
| 覆蓋設定檔中的 |
|
| 覆蓋設定檔中的規則列表。格式為 |
|
| 設為 |
|
設定 ALIBABA_CLOUD_SAFETY_POLICY_RULES 環境變數後,設定檔中的規則被完全替換,而非合并。
設定檔
安全性原則的配置儲存在 ~/.aliyun/safety-policy.json 檔案中。如果指定了 --config-path 選項,safety-policy.json 檔案位於該自訂目錄下。
檔案格式樣本:
{
"enabled": true,
"rules": [
{
"pattern": "ecs:Describe*",
"action": "allow"
},
{
"pattern": "*:Delete*",
"action": "deny"
},
{
"pattern": "ecs:Update*",
"action": "confirm"
}
]
}如果設定檔不存在,安全性原則預設禁用,規則列表為空白。首次執行
enable或add命令時自動建立該檔案。
安全性原則採用失敗開放(fail-open)機制:如果策略檔案載入失敗(如檔案損壞),CLI 跳過安全檢查,不會阻斷命令執行。