Terraform启用AWS Redshift审计日志报InsufficientS3BucketPolicyFault错误
Redshift审计日志开启报错InsufficientS3BucketPolicyFault排查方案
1. 优先检查S3桶策略配置
该报错90%以上的场景是S3桶策略未放行对应权限,仅给IAM角色配置权限不够,需在桶策略中明确允许你的IAM角色执行对应操作,示例桶策略配置如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "替换为你的IAM角色ARN" }, "Action": [ "s3:PutObject", "s3:GetBucketAcl" ], "Resource": [ "arn:aws:s3:::你的桶名", "arn:aws:s3:::你的桶名/*" ] } ] }
如果你的S3桶开启了SSE-KMS加密,还需要在KMS密钥策略中给该IAM角色授予kms:GenerateDataKey、kms:Decrypt权限。
2. 检查IAM角色配置正确性
- 角色信任策略的可信实体必须为
redshift.amazonaws.com,示例信任策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
- 角色自身的权限策略必须包含
s3:PutObject、s3:GetBucketAcl权限,且资源范围覆盖目标S3桶和桶内路径。
3. 检查S3桶基础配置
- 目标S3桶必须和Redshift集群处于同一AWS区域,跨区域投递会触发权限报错
- 若桶开启了公共访问拦截配置,需确认桶策略未限制Redshift服务的访问
- 检查你在Terraform中填写的桶名、路径前缀是否存在拼写错误
4. 检查Terraform Redshift资源配置
aws_redshift_cluster的logging块必须显式指定关联的IAM角色ARN,缺省该参数时Redshift会使用默认服务主体访问S3桶,未配置桶策略放行的情况下会报错,正确配置示例:
resource "aws_redshift_cluster" "example" { # 其余集群配置省略 logging { enable = true bucket_name = "你的日志桶名称" s3_key_prefix = "redshift-audit/" log_destination_type = "s3" role_arn = aws_iam_role.redshift_log_role.arn } }
5. 验证权限有效性
可通过AWS CLI模拟角色访问验证权限配置是否正确:
- 执行
aws sts assume-role --role-arn 你的角色ARN --role-session-name test-redshift-log获取角色临时凭证 - 用临时凭证执行
aws s3api get-bucket-acl --bucket 你的桶名,验证读ACL权限正常 - 执行
aws s3api put-object --bucket 你的桶名 --key test-redshift-log.txt,验证写权限正常
若上述操作执行失败,先修复对应权限问题后再重新执行terraform apply。
内容的提问来源于stack exchange,提问作者ehlopez
相关产品推荐
相关产品推荐

