S3のバケットポリシー作成でError putting S3 policy: AccessDenied: Access Denied
TerraformでS3のバケットポリシーでPrincipalに対してすべてを許可しようとするとエラーとなる。
data "aws_iam_policy_document" "example" {
  statement {
    actions   = ["s3:GetObject"]
    resources = ["${aws_s3_bucket.example.arn}/*"]
    principals {
      type        = "AWS"
      identifiers = ["*"] # すべてのPrincipalに許可
    }
  }
}
apply時に発生するエラーは以下の通り。
│ Error: Error putting S3 policy: AccessDenied: Access Denied
...
Principalに*以外を指定する
上記エラーを修正するにはPrincipalに*以外を指定する。
例えば特定のIAMロールに対して許可する場合はそのIAMロールのARNを指定する。
data "aws_iam_policy_document" "example" {
  statement {
    actions   = ["s3:GetObject"]
    resources = ["${aws_s3_bucket.example.arn}/*"]
    principals {
      type        = "AWS"
      identifiers = ["arn:aws:iam::123456789012:role/role-name"] # 特定のIAMロールに許可
    }
  }
}
特定のAWSアカウントを指定する場合はそのAWSアカウントのアカウントIDを指定する。
data "aws_iam_policy_document" "example" {
  statement {
    actions   = ["s3:GetObject"]
    resources = ["${aws_s3_bucket.example.arn}/*"]
    principals {
      type        = "AWS"
      identifiers = ["123456789012"] # 特定のAWSアカウントに許可
    }
  }
}
\手を動かしながらTerraformを学びたい人にオススメ!/

