セーフティポリシーは、Alibaba Cloud CLI の操作に対するクライアント側の保護メカニズムです。有効にすると、CLI はコマンドを実行する前に、設定されたルールに照らして各操作を評価し、その操作を許可または拒否するか、実行前に手動での確認を要求します。
概要
セーフティポリシーは、一連のルールを定義します。各ルールは、パターン (マッチング基準) とアクション (レスポンスタイプ) で構成されます。
allow(許可):操作を明示的に許可し、それ以降のルールの評価をスキップします。特定の操作の例外を作成するには、広範なdenyまたはconfirmルールの前にallowルールを配置します。deny(拒否):操作を完全にブロックします。CLI はコマンドを拒否し、API リクエストを送信しません。confirm(確認):インタラクティブターミナルでは、CLI は続行する前にyesと入力するようにプロンプトを表示します。非インタラクティブ環境では、CLI は呼び出し元への指示を含むエラーを返します。
セーフティポリシーは、OpenAPI コール (RPC および RESTful) とプラグインコマンドの両方に適用されます。これらは、サーバー側のアクセス制御 (RAM) を補完するグローバルなクライアント側の保護レイヤーとして機能しますが、RAM のアクセス許可ポリシーに代わるものではありません。
シナリオ
AI エージェントのセーフティガードレール:AI エージェントが CLI を使用してクラウドリソースを管理する場合、セーフティポリシーは破壊的な操作 (削除操作など) をインターセプトし、人間の確認を要求したり、完全にブロックしたりできます。これにより、AI エージェントのシナリオでヒューマンインザループ (HITL) メカニズムを実装します。
運用上の安全策:チームの CLI 環境にデフォルトのルールを設定して、リソースの削除やインスタンスの停止などの破壊的な操作が誤って実行されるのを防ぎます。
前提条件
Alibaba Cloud CLI v3.3.14 以降がインストールされている必要があります。現在のバージョンを確認するには、次のコマンドを実行してください:
aliyun versionCLI 認証情報が設定されている必要があります。設定していない場合は、次のコマンドを実行してください:
aliyun configure
セーフティポリシーの管理
セーフティポリシーは、aliyun configure safety-policy コマンドファミリーを使用して管理します。
現在のポリシーの表示
JSON 形式でセーフティポリシーの完全な設定を表示するには、次のコマンドを実行してください:
aliyun configure safety-policy show出力例:
{
"enabled": false,
"rules": []
}有効化と無効化
# セーフティポリシーを有効化
aliyun configure safety-policy enable
# セーフティポリシーを無効化
aliyun configure safety-policy disablealiyun configure safety-policy show を実行して、enabled フィールドが true であることを確認してください。
ルールの追加
コマンド構文:
aliyun configure safety-policy add --pattern <pattern> --action <deny|confirm|forbid>例:すべてのプロダクトにわたるすべての削除操作をブロックします。
aliyun configure safety-policy add --pattern '*:Delete*' --action deny例:ECS の更新操作に対して人間の確認を要求します。
aliyun configure safety-policy add --pattern 'ecs:Update*' --action confirmaliyun configure safety-policy list を実行して、ルールが追加されたことを確認してください。
すでに存在するパターンを持つルールを追加すると、CLI は重複したエントリを作成する代わりに、そのパターンのアクションを更新します。
add サブコマンドは、アクション値として deny、confirm、forbid のみを受け入れます。allow ルールを設定するには、ALIBABA_CLOUD_SAFETY_POLICY_RULES 環境変数を設定するか、設定ファイルを直接編集する必要があります。
ルールの削除
ルールを削除するには、正確なパターンを指定してください:
aliyun configure safety-policy remove --pattern '*:Delete*'ルールの一覧表示
フォーマットされたリストですべてのルールを表示するには、次のコマンドを実行してください:
aliyun configure safety-policy list出力例:
セーフティポリシー:enabled
設定ファイル:/home/user/.aliyun/safety-policy.json
ルール:
1. *:Delete* -> deny
2. ecs:Update* -> confirmルールの構文
パターン形式
--pattern パラメーターは {product}:{operation} の形式を使用し、* ワイルドカード (任意の文字列にマッチ) をサポートします。パターンのマッチングでは大文字と小文字を区別しないため、*:Delete*、*:DELETE*、*:delete* はすべて同じ操作にマッチします。
CLI は、API スタイルに応じて異なるコマンド識別子を構築します:
API スタイル | パターン形式 | 例 |
RPC |
|
|
RESTful |
|
|
プラグイン |
|
|
一般的なパターンの例:
パターン | マッチする内容 |
| すべてのプロダクトにわたる "Delete" を含むすべての操作 (大文字と小文字を区別しない) |
| ECS の delete-instance 操作のみ |
| "Update" で始まるすべての ECS 操作 |
| すべてのプロダクトにわたるすべての操作 |
シェルでコマンドを実行するときは、シェルが * ワイルドカードを展開するのを防ぐために、パターンの値を一重引用符 (例:'*:Delete*') で囲ってください。
アクションの値
アクション | 動作 |
| 操作を明示的に許可します。先勝ち戦略のルールシステムでは、広範な |
| 操作をブロックし、エラーを返します。CLI は API リクエストを送信しません。 |
| インタラクティブターミナルで確認を求めるプロンプトを表示します。続行するには、ユーザーは |
forbid は confirm のエイリアスです。これらは、実行時の動作が同一です。
現在の操作にマッチするルールがない場合、デフォルトでは実行が許可されます (暗黙の許可)。明示的な allow ルールは、主に、広範な deny または confirm ルールの前に許可リストの例外を作成するために使用されます。
ルールの評価順序
ルールは設定された順序で上から下に評価され、先勝ち戦略が使用されます。最初にマッチしたルールが有効になり、後続のルールはチェックされません。どのルールにもマッチしない場合、デフォルトでは実行が許可されます。
たとえば、次の 2 つのルールがあるとします:
ecs:Delete*→ confirm*:Delete*→ deny
aliyun ecs delete-instance を実行すると、最初のルール (ecs:Delete*) がマッチし、2 番目のルールの deny ではなく、confirm アクションが適用されます。
allow を使用した例外の作成:
ecs:Describe*→ allowecs:*→ deny
aliyun ecs DescribeInstances を実行すると、最初の allow ルールにマッチし、操作は正常に続行されます。aliyun ecs delete-instance を実行すると、2 番目のルールにマッチし、ブロックされます。
ルールの順序は重要です。ルールを追加する際は、より具体的なルールがより一般的なルールの前に来るようにしてください。
非インタラクティブモードと AI エージェントのシナリオ
--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*)また、ALIBABA_CLOUD_SAFETY_SKIP_CONFIRM 環境変数を true に設定して、セッション全体のすべての confirm ルールを自動承認することもできます。これは、すべてのコマンドで --yes を渡すことと同じです。
export ALIBABA_CLOUD_SAFETY_SKIP_CONFIRM=true--yes も ALIBABA_CLOUD_SAFETY_SKIP_CONFIRM も deny ルールをバイパスすることはできません。deny ルールにマッチする操作は、フラグや環境変数に関係なく、常にブロックされます。
非インタラクティブターミナルの動作
CLI は、標準入力がターミナルデバイスであるかどうかを検出して、現在の環境を判断します。非インタラクティブ環境 (スクリプト、CI/CD パイプライン、AI エージェントのランタイムなど) で、操作が confirm ルールにマッチし、かつ --yes フラグが指定されていない場合、CLI は次のエラーを返します:
Safety policy requires confirmation for: ecs update-instance
This operation cannot run in non-interactive mode without explicit approval. If you are an agent, ask the user whether this operation is allowed; after they confirm (e.g. reply yes), re-run the same command with --yes.AI エージェントの推奨ワークフロー
AI エージェントが CLI を通じてクラウドリソースを管理する場合、次の手順に従ってセーフティポリシーを設定および使用してください:
セーフティポリシーの設定:完全に禁止すべき操作には
denyを設定し、承認が必要な操作にはconfirmを設定してください。確認プロンプトの処理:エージェントが
confirmブロックに遭遇した場合、操作の詳細をユーザーに提示し、承認を要求してください。承認付きでの再実行:ユーザーが確認した後、エージェントは
--yesフラグを付けてコマンドを再実行してください。
設定例:削除操作をブロックし、更新操作には人間の確認を要求します。
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サブコマンドを最初に実行したときに自動的に作成されます。
セーフティポリシーはフェイルオープン設計を採用しています。設定ファイルが (破損などで) 読み込めない場合、CLI はセーフティチェックをスキップし、コマンドの実行をブロックしません。