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

能否将AWS账号1的成本使用报告存储至账号2的S3桶?Terraform报错排查

跨账号存储AWS成本使用报告(CUR)的排查步骤

AWS支持将账号1的CUR存储到账号2的S3桶中,但需要完成正确的权限配置和参数校验,以下是针对你遇到的ValidationException的排查要点:

  • 检查目标S3桶的桶策略配置
    账号2的S3桶必须配置允许账号1的CUR服务写入的桶策略,核心权限需包含:

    • 允许cur.amazonaws.com服务主体执行s3:PutObject和s3:GetBucketAcl操作
    • 可通过aws:SourceAccount条件限制仅允许账号1访问(提升安全性)
      示例桶策略(替换占位符为实际账号ID和桶名):
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "cur.amazonaws.com"
          },
          "Action": [
            "s3:PutObject",
            "s3:GetBucketAcl"
          ],
          "Resource": [
            "arn:aws:s3:::cnr-auxo-dev-cur-logs/*",
            "arn:aws:s3:::cnr-auxo-dev-cur-logs"
          ],
          "Condition": {
            "StringEquals": {
              "aws:SourceAccount": "账号1的AWS ID"
            }
          }
        }
      ]
    }
    
  • 验证Terraform的Provider关联正确性

    • 创建aws_cur_report_definition资源的Provider必须是账号1的(CUR属于账号1的资源,需用账号1的凭证操作)
    • 你的配置中data "aws_s3_bucket"使用了账号2的Provider(aws.xxxx1),这部分没问题,但需确认该Provider能正常读取账号2的S3桶信息
  • 核对CUR的S3参数准确性

    • s3_region必须与目标S3桶的实际区域一致,不能直接使用账号1的当前区域(若桶在不同区域)
    • 检查s3_prefix是否包含非法字符,AWS要求前缀不能以/开头,且仅允许字母、数字、-、_、.、/等合规字符
  • 获取更详细的错误信息
    ValidationException仅提示参数或权限问题,可通过AWS CLI手动创建CUR来获取具体错误:

    aws cur put-report-definition --report-definition file://cur-def.json --profile 账号1的CLI配置文件
    

    其中cur-def.json内容对应你的Terraform配置参数,执行后会返回具体的错误原因(如桶不存在、权限不足、区域不匹配等)

  • 确认账号1的IAM权限
    确保创建CUR的IAM用户/角色拥有cur:PutReportDefinition权限,同时需具备访问目标S3桶的相关权限(辅助校验,核心权限依赖桶策略)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:56:15