You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform中配置S3复制桶权限解决AccessDenied与MalformedPolicy报错

问题1:解决Terraform MalformedPolicy报错

错误原因:s3:ListBucket属于桶级操作,仅适用于存储桶本身的ARN,不能作用于带/*后缀的对象级资源路径,你当前第二条statement的资源配置错误导致策略校验失败。

修正后的策略配置如下:

data "aws_iam_policy_document" "s3" {
  version = "2012-10-17"
  
  statement {
    sid    = "CopyObjectPermissions"
    effect = "Allow"
    principals {
      type        = "AWS"
      identifiers = ["arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/ops-mgmt-admin"]
    }
    actions   = ["s3:GetObject","s3:PutObject","s3:PutObjectAcl", "s3:PutObjectTagging"]
    resources = ["${aws_s3_bucket.nfcisbenchmark_cloudtrail.arn}/*"]
  }

  statement {
    sid    = "CopyBucketPermissions"
    actions = ["s3:ListBucket"]
    effect  = "Allow"
    principals {
      type        = "AWS"
      identifiers = ["arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/ops-mgmt-admin"]
    }
    # 此处资源为桶本身ARN,去掉末尾的/*
    resources = [aws_s3_bucket.nfcisbenchmark_cloudtrail.arn]
  }
}
问题2:解决跨账号S3复制AccessDenied问题

跨账号复制需要同时配置源桶、目标桶两边的权限,以及调整执行命令参数,完整配置要求如下:

  • 子账号源桶s3://sub-account-cloudtrail的桶策略,需要给主账号ops-mgmt-admin角色开放以下权限:
    • 桶级权限:s3:ListBucket
    • 对象级权限:s3:GetObject、s3:GetObjectAcl、s3:GetObjectTagging
  • 主账号目标桶s3://master-acccount-cloudtrail的桶策略,按上面修正后的配置即可
  • 确认ops-mgmt-admin角色的信任关系策略,已经允许子账号的对应身份(用户/角色)执行sts:AssumeRole操作,避免无法正常切换角色
  • 执行复制命令时添加ACL参数,确保目标桶账号拥有写入对象的完整所有权:
    aws s3 cp s3://sub-account-cloudtrail s3://master-acccount-cloudtrail --recursive --acl bucket-owner-full-control --profile=admin
    

内容的提问来源于stack exchange,提问作者Evan Gertis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:45:02