S3のバケットポリシー作成でError putting S3 policy: MalformedPolicy: Action does not apply to any resource(s) in statement
TerraformでS3のバケットポリシーでs3:ListBucket
に対してパスを含めたARNのみのResource
を指定するとエラーが発生する。
data "aws_iam_policy_document" "example" {
statement {
principals {
type = "AWS"
identifiers = [data.aws_caller_identity.current.account_id]
}
actions = ["s3:ListBucket"]
resources = ["${aws_s3_bucket.example.arn}/*"] # パスを含めて指定
}
}
resource "aws_s3_bucket_policy" "example" {
bucket = aws_s3_bucket.example.bucket
policy = data.aws_iam_policy_document.example.json
}
apply
時に発生するエラーは以下の通り。
Error putting S3 policy: MalformedPolicy: Action does not apply to any resource(s) in statement
...
s3:ListBucketに対してはバケット自体のARNを指定する
上記エラーを修正するにはs3:ListBucket
に対してはバケット自体のARNを指定する。
data "aws_iam_policy_document" "example" {
statement {
principals {
type = "AWS"
identifiers = [data.aws_caller_identity.current.account_id]
}
actions = ["s3:ListBucket"]
# resources = ["${aws_s3_bucket.example.arn}/*"]
resources = ["${aws_s3_bucket.example.arn}"] # パス部分(/*)を削除
}
}
このように修正するとエラーが解消される。
\手を動かしながらTerraformを学びたい人にオススメ!/