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

使用Terraform创建AWS CodeDeploy S3 IAM角色时遇MalformedPolicyDocument错误

解决Terraform创建CodeDeploy IAM角色时的MalformedPolicyDocument错误

问题根源

你把权限策略当成了信任策略配置给了assume_role_policy字段。IAM角色的assume_role_policy是用来定义「谁可以扮演这个角色」的信任关系,这个策略里不允许出现Resource字段,这就是报错的直接原因。

修正步骤

  1. 拆分策略文件

    • 新建信任策略文件(比如命名为codedeploy-trust-policy.json),内容只定义允许CodeDeploy服务扮演该角色:
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "codedeploy.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      
    • 保留你原来的AutoScalePolicy.json,这个是角色的权限策略(定义角色能执行的S3操作)。
  2. 修改main.tf配置
    将assume_role_policy指向信任策略,同时通过aws_iam_role_policy资源把权限策略附加到角色上:

    resource "aws_iam_role" "codedeploy_iam_role" {
      name = "AutoScalePolicy"
      assume_role_policy = file("${path.module}/codedeploy-trust-policy.json")
      tags = {
        Name = "AutoScale-CodeDeploy-BlueGreen-Role"
      }     
    }
    
    # 把S3权限策略附加到CodeDeploy角色
    resource "aws_iam_role_policy" "codedeploy_s3_policy" {
      name   = "AutoScale-CodeDeploy-S3-Policy"
      role   = aws_iam_role.codedeploy_iam_role.id
      policy = file("${path.module}/AutoScalePolicy.json")
    }
    

说明

  • assume_role_policy仅负责信任关系:指定哪个AWS服务/账号有权限切换到这个角色,不需要包含资源或具体操作权限。
  • 角色的具体权限要通过aws_iam_role_policy(或aws_iam_policy+aws_iam_role_policy_attachment)来附加,这部分策略才需要Resource和Action字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:52:44