リソースベースポリシーにPrincipalがない

リソースベースの許可ステートメントにプリンシパルを指定してください。

説明

リソースベースの許可ステートメントでは、権限を付与するアカウント、ロール、ユーザー、サービスを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
}

参考資料