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