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を学びたい人にオススメ!/