リソースベースのポリシーを使用して AWS Secrets Manager シークレットへのアクセスを制御したいと考えています。
簡単な説明
リソースベースのポリシーを使用して、シークレットへのユーザーアクセスと AWS Identity and Access Management (IAM) ユーザーが実行できるアクションを指定します。
**注:**シークレットは Secrets Manager でリソースとして定義されます。
Secrets Manager のリソースベースのポリシーは、次の一般的なシナリオで使用できます。
- AWS アカウント間でシークレットを共有します。
- シークレットに明示的な拒否を追加して権限を強制します。
次のリソースベースのポリシーの例ではエフェクト、アクション、リソース、プリンシパルの各要素を使用しています。
{ "Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "secretsmanager:*",
"Principal": {"AWS": "arn:aws:iam::123456789999:user/Mary"},
"Resource": "*"
}
]
}
解決策
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
Secrets Manager でリソースベースのポリシーを適用するには、次の手順を実行します。
-
シークレットを作成し、シークレットの ARN を書き留めておきます。
-
このポリシーをコピーしてテキストエディタに貼り付け、my_explicit_deny_policy.json などの JSON ファイルとして保存します。
{ "Version": "2012-10-17","Statement": [
{
"Effect": "Deny",
"Action": "secretsmanager:GetSecretValue",
"Principal": {"AWS": "arn:aws:iam::123456789999:user/Mary"},
"Resource": "*"
}
]
}
-
put-resource-policy AWS CLI コマンドを実行してシークレットのリソースポリシーをアタッチし、シークレット値の取得を明示的に拒否します。
aws secretsmanager put-resource-policy --secret-id My_Resource_Secret --resource-policy file:// My_explicit_deny_Policy.json
次のような出力が表示されます。
{"ARN": "arn:aws:secretsmanager:<your region>:123456789999:secret:My_Resource_Secret",
"Name": "My_Resource_Secret"
}
**注:**AWS Key Management Service (AWS KMS) の復号許可は、AWS KMS キーを使用してシークレットを暗号化する場合にのみ必要です。シークレットがデフォルトの AWS KMS キーで暗号化されている場合、サードパーティアカウントの IAM プリンシパルはシークレットを取得できません。
詳細については、「AWS シークレットマネージャーシークレットにアクセス権限ポリシーをアタッチする」を参照してください。