説明
リソースベースの許可ステートメントでは、権限を付与するアカウント、ロール、ユーザー、サービスをPrincipalで指定します。IAMのアイデンティティベースポリシーでは、関連付け先のアイデンティティが主体のため、Principalを使いません。
想定される影響
必要なプリンシパルがないリソースポリシーは、無効になったり、意図した権限を付与できなかったりする場合があります。
対処方法
リソースベースの許可ステートメントに必要なPrincipalを指定し、対象を最小限に限定してください。IAM JSONのキー名はPrincipalsではなくPrincipalです。
例
以下は、KMSキーポリシーの許可ステートメントの一部を比較する例です。実際のアカウントIDとユーザーを指定し、ポリシー全体ではキーポリシーを管理する権限も維持してください。
変更前
hcl
resource "aws_kms_key" "example" {
description = "KMS key + secure_policy"
deletion_window_in_days = 7
policy = <<EOF
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "Secure Policy",
"Effect": "Allow",
"Resource": "*",
"Action": [
"kms:Create*",
"kms:Describe*",
"kms:Enable*"
]
}
]
}
EOF
}
変更後
hcl
resource "aws_kms_key" "example" {
description = "KMS key + secure_policy"
deletion_window_in_days = 7
policy = <<EOF
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "Secure Policy",
"Effect": "Allow",
"Resource": "*",
"Action": [
"kms:Create*",
"kms:Describe*",
"kms:Enable*"
],
"Principal": {
"AWS": [
"arn:aws:iam::123456789012:user/user-name-1",
"arn:aws:iam::123456789012:user/UserName2"
]
}
}
]
}
EOF
}