翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AI コーディングエージェントでシークレットを安全に使用する
AI コーディングエージェントにシェルまたはAWS API アクセスがある場合、コンテキストウィンドウでプレーンテキストシークレットを呼び出しget-secret-valueて受信できます。これにより、シークレット値が会話履歴、ログ、またはダウンストリームツール呼び出しに漏れる可能性があるという複数のリスクが生じます。
これを防ぐには、 エージェントツールキットAWS
重要
これはベストエフォートの防御であり、セキュリティの境界ではありません。これにより、最も一般的な漏洩経路は防止されますが、すべての回避ベクトルを停止することはできません。を IAM 最小特権、CloudTrail モニタリング、VPC エンドポイントポリシーと組み合わせます。
仕組み
シークレット安全スキルは、次の 2 つの保護レイヤーを提供します。
-
スキルガイダンス – 実行時に参照を解決するラッパースクリプト
asm-execである で{{resolve:secretsmanager:...}}動的参照を使用するようにエージェントにトレーニングします。プレーンテキスト値は子プロセスにのみ存在し、エージェントのコンテキストウィンドウに入ることはありません。 -
構造適用 (フック) –
PreToolUseフックは、SDK AWS CLI、MCP ツールを呼び出しget-secret-valueたりbatch-get-secret-value、経由で呼び出したり、AWSワークロード認証情報プロバイダーデーモンに直接アクセスしたりしようとする試みを自動的にブロックします。手動設定は必要ありません。
前提条件
Claude Code
や OpenAI Codex などのプラグインをサポートする AI コーディングエージェント。 エージェントツールキット for AWS
aws-coreプラグインがインストールされました。次のいずれかのシークレット解決バックエンド:
で実行されているAWSワークロード認証情報プロバイダー
localhost:2773。「AWSワークロード認証情報プロバイダーの使用」を参照してください。AWS MCP エンドポイントへのリクエストに署名できる AWS認証情報。
IAM アクセス許可: 解決するシークレット
secretsmanager:GetSecretValue。
プラグインをインストールする
エージェントプラットフォーム用の aws-coreプラグインをインストールします。シークレット安全スキルとフックは自動的にアクティブ化されます。
Claude コードの場合:
claude plugin add ./plugins/aws-core
OpenAI Codex の場合:
codex plugin add ./plugins/aws-core
サポートされている他のプラットフォームについては、「エージェントツールキット for AWS README
{{resolve:...}} 構文
エージェントがシークレットをコマンドに渡す必要がある場合、 を呼び出す代わりに動的参照を使用しますget-secret-value。
{{resolve:secretsmanager:<secret-id>:<field-type>:<json-key>:<version-stage>}}
| コンポーネント | [Required] (必須) | デフォルト | [Description] (説明) |
|---|---|---|---|
secret-id |
はい | – | シークレット名または完全な ARN |
field-type |
いいえ | SecretString |
SecretString を指定してください |
json-key |
いいえ | (完全な値) | JSON シークレット値から抽出するキー |
version-stage |
いいえ | AWSCURRENT |
バージョンステージラベル |
asm-exec を使用してシークレットでコマンドを実行する
asm-exec は、コマンド引数の{{resolve:...}}参照を解決し、ターゲットコマンドを実行するラッパースクリプトです。シークレット値は子プロセスにのみ存在します。
asm-exec -- <command> [arguments with {{resolve:...}} references]
asm-exec は、利用可能な最初のバックエンドを通じて参照を解決します。
でのAWSワークロード認証情報プロバイダー
localhost:2773– ローカルにキャッシュされます。AWS MCP エンドポイント – 使用可能なAWS認証情報を使用した SigV4-signedリクエスト。
例 PostgreSQL データベースに接続する
asm-exec -- psql \ "host=mydb.example.com \ user={{resolve:secretsmanager:prod/db-creds:SecretString:username}} \ password={{resolve:secretsmanager:prod/db-creds:SecretString:password}}" \ -c "SELECT * FROM users LIMIT 10"
例ベアラートークンを使用して API コールを行う
asm-exec -- curl -H "Authorization: Bearer {{resolve:secretsmanager:prod/api-token}}" \ https://api.example.com/data
例複数のシークレットを使用して MySQL に接続する
asm-exec -- mysql \ -h {{resolve:secretsmanager:prod/mysql:SecretString:host}} \ -u {{resolve:secretsmanager:prod/mysql:SecretString:username}} \ -p{{resolve:secretsmanager:prod/mysql:SecretString:password}} \ -e "SHOW TABLES"
例シークレットを環境変数として Docker コンテナに渡す
asm-exec -- docker run \ -e "DB_PASSWORD={{resolve:secretsmanager:prod/db:SecretString:password}}" \ myapp:latest
クロスリージョンシークレット
デフォルトのリージョンとは異なるリージョンに保存されているシークレットの場合は、完全な ARN (リージョンを含む) を使用するか、AWS_REGION環境変数を設定します。
# Using full ARN (region is extracted automatically) asm-exec -- curl -H "X-Api-Key: {{resolve:secretsmanager:arn:aws:secretsmanager:eu-west-1:123456789012:secret:prod/key-a1b2c3}}" \ https://eu.api.example.com/data # Using AWS_REGION export AWS_REGION=eu-west-1 asm-exec -- curl -H "X-Api-Key: {{resolve:secretsmanager:prod/key}}" \ https://eu.api.example.com/data
セキュリティに関する考慮事項
サブプロセス分離 – ターゲットコマンドは を介して実行されます
subprocess.run。シークレット値は、asm-execプロセスメモリと子プロセス引数にのみ存在します。
フックがシークレットへの直接アクセスをブロックする方法
aws-core プラグインを有効にすると、PreToolUseフックは実行前に を傍受します。これは以下をブロックします。
aws secretsmanager get-secret-valueおよび CLIbatch-get-secret-value経由get_secret_valueスクリプトでの SDK 呼び出しbatch_get_secret_valueによる およびAWSワークロード認証情報プロバイダーデーモンパスへの直接アクセス (
localhost:2773/secretsmanager/get)GetSecretValueMCP ツールまたは構造化AWS API コールによる オペレーション
通話がブロックされると、エージェントは拒否メッセージを受信し、asm-exec代わりに で{{resolve:...}}参照を使用するように指示します。
トラブルシューティング
「シークレットが見つかりません」エラー
シークレットが存在し、IAM ロールに アクセスsecretsmanager:GetSecretValue許可があることを確認します。シークレット名では大文字と小文字が区別されます。
AWSワークロード認証情報プロバイダーの接続が拒否されました
AWSワークロード認証情報プロバイダーが実行されていない可能性があります。これは致命的ではありません。SigV4-signed付き MCP エンドポイントにasm-execフォールスルーされます。バックエンドが認証できるように、AWS認証情報が使用可能であることを確認します。
「失敗」エラー
両方のバックエンドに到達できませんでした。AWSワークロード認証情報プロバイダーが実行されているか、AWS認証情報が有効 (aws sts get-caller-identity) であること、シークレットのリージョンが正しいこと、および ID がシークレットsecretsmanager:GetSecretValueにあることを確認します。
解決により空の文字列が生成されます
JSON キーがシークレット値に存在しない可能性があります。AWSコンソールでシークレット構造を確認するか、シークレット所有者に使用可能なキーの確認を依頼します。
フックは通話をブロックしません
エージェントセッションの開始時にフックロードします。セッション中にプラグインをインストールした場合は、フックを有効にするエージェントセッションを再起動します。