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

为ECS任务执行角色添加权限时Terraform应用报错:存在禁止字段Resource

错误原因及解决方案

错误原因

你当前修改的aws_iam_policy_document是用来定义**IAM角色的信任策略(Assume Role Policy)**的,而IAM信任策略有严格的语法规则:

  1. 信任策略仅用于指定哪些实体可以扮演该角色,不能包含权限类的语句
  2. sts:AssumeRole类型的信任语句,不允许出现Resource字段
  3. 你把访问Secrets Manager的权限语句直接写入了信任策略文档,混淆了「信任策略」和「权限策略」的边界,触发了IAM的语法校验错误。

正确实现方式

需要将信任策略和权限策略完全分离:

  1. 信任策略仅保留允许ECS任务服务扮演角色的逻辑
  2. 单独创建权限策略,定义访问Secrets Manager的权限,再将其附加到ECS执行角色上

完整Terraform代码示例

# 1. 定义角色的信任策略(仅负责信任关系)
data "aws_iam_policy_document" "ecs_task_execution_role_trust" {
  version = "2012-10-17"
  statement {
    effect  = "Allow"
    actions = ["sts:AssumeRole"]

    principals {
      type        = "Service"
      identifiers = ["ecs-tasks.amazonaws.com"]
    }
  }
}

# 2. 定义访问Secrets Manager的权限策略文档
data "aws_iam_policy_document" "ecs_task_execution_permissions" {
  version = "2012-10-17"
  statement {
    effect    = "Allow"
    actions   = ["secretsmanager:GetSecretValue"]
    resources = [aws_secretsmanager_secret.secret.arn]
  }
}

# 3. 创建权限策略资源
resource "aws_iam_policy" "ecs_task_execution_permissions" {
  name        = "ecs-task-execution-secrets-access"
  description = "允许ECS任务执行角色访问指定Secrets Manager密钥"
  policy      = data.aws_iam_policy_document.ecs_task_execution_permissions.json
}

# 4. 创建ECS任务执行角色
resource "aws_iam_role" "ecs_task_execution_role" {
  name               = "dev-fidc-identity-gateway-ecs-role"
  assume_role_policy = data.aws_iam_policy_document.ecs_task_execution_role_trust.json
}

# 5. 将权限策略附加到角色上
resource "aws_iam_role_policy_attachment" "ecs_task_execution_secrets_attach" {
  role       = aws_iam_role.ecs_task_execution_role.name
  policy_arn = aws_iam_policy.ecs_task_execution_permissions.arn
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:52:50