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

ECS Fargate任务读取Kinesis数据流时IAM角色扮演错误排查

问题根因

你遇到的报错由两个配置缺失导致:

  • ECS任务角色ecsTaskRole的信任策略(Assume Role Policy)配置错误,不允许ECS任务服务扮演该角色
  • ecsTaskRole没有配置访问Kinesis数据流的权限规则

具体修复方案

1. 修改ECS任务角色的信任策略

你当前ecsTaskRole的信任策略仅允许当前AWS账户的root身份调用sts:AssumeRole,但Fargate启动任务时,需要由ECS任务服务代为扮演该角色,需要将信任主体修改为ecs-tasks.amazonaws.com,修改后的配置如下:

data "aws_iam_policy_document" "ecsTaskRole" {
  statement {
    effect  = "Allow"
    actions = ["sts:AssumeRole"]
    principals {
      type        = "Service"
      identifiers = ["ecs-tasks.amazonaws.com"]
    }
  }
}

2. 给ECS任务角色添加Kinesis访问权限

你需要给ecsTaskRole绑定对应Kinesis数据流的访问权限,参考配置如下(可根据实际业务需要调整允许的操作、Kinesis流ARN范围):

# 自定义Kinesis访问策略
data "aws_iam_policy_document" "kinesis_access_policy" {
  statement {
    effect = "Allow"
    actions = [
      "kinesis:PutRecord",
      "kinesis:PutRecords",
      "kinesis:GetRecords",
      "kinesis:GetShardIterator",
      "kinesis:DescribeStream"
    ]
    # 替换为你实际的Kinesis数据流ARN
    resources = ["arn:aws:kinesis:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:stream/你的Kinesis流名称"]
  }
}

resource "aws_iam_role_policy" "ecs_task_kinesis_policy" {
  name   = "ecs-task-kinesis-access-policy"
  role   = aws_iam_role.ecsTaskRole.id
  policy = data.aws_iam_policy_document.kinesis_access_policy.json
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:27:03