IAM 权限怎么配?terraform-aws-ecs 中 Task Exec Role 与 Tasks Role 的终极解读
IAM 权限怎么配?terraform-aws-ecs 中 Task Exec Role 与 Tasks Role 的终极解读【免费下载链接】terraform-aws-ecsTerraform module to create AWS ECS resources 项目地址: https://gitcode.com/gh_mirrors/te/terraform-aws-ecs很多刚接触 AWS ECS 的开发者第一次用terraform-aws-ecs这个 Terraform 模块部署服务时都会被两个名字极其相似的 IAM 角色绕晕Task Exec Role任务执行角色和Tasks Role任务角色。它们都叫 Task信任主体都是ecs-tasks.amazonaws.com甚至都能挂自定义策略——那到底有什么区别权限该怎么配这篇文章就带你一次看懂从此不再为 IAM 权限配置发愁。terraform-aws-ecs 是一个用于创建 AWS ECS 资源集群、服务、任务、容器定义的 Terraform 模块它开箱即用地帮你管理好这些角色。下面我们先从整体架构入手。为什么要搞清楚这两个角色先看它们在架构中的位置在 ECS 中一个完整体系由集群Cluster→ 服务Service→ 任务Task→ 容器Container四级构成。集群是你的资源池服务负责维持任务数量任务里跑着真正干活的容器。而 IAM 权限就分布在这些层级中集群层可以创建共享的 Task Exec Role服务层需要 Service Role服务角色用于负载均衡器注册/注销任务层同时出现 Task Exec Role 与 Tasks RoleTask Exec Role 是什么任务执行角色的职责与信任策略Task Exec Role任务执行角色是 AWS ECS 平台替你干活时使用的角色它的服务对象是ECS 服务本身而不是你的业务代码。它负责哪些事从 ECR 拉取容器镜像向 CloudWatch Logs 写入容器日志从 Secrets Manager / SSM Parameter Store 读取密钥和参数注入为环境变量Fargate 模式下挂载 EBS 卷等系统级操作关键点它只在任务创建/启动时被使用任务运行期间容器内的代码根本看不到这个角色。所以就算它权限再大也不会泄露给业务代码。模块默认给了什么权限在 terraform-aws-ecs 的modules/service/main.tfL1126-L1211中模块默认创建的 Task Exec 策略包含权限用途logs:CreateLogStream/logs:PutLogEvents写 CloudWatch 日志ecr:GetAuthorizationToken等从 ECR 拉取镜像ssm:GetParameters需配置读取 SSM 参数secretsmanager:GetSecretValue需配置读取 Secrets Manager 密钥SSM 和 Secrets 的权限默认不开启需要你显式传入task_exec_ssm_param_arns和task_exec_secret_arns才能生效这正是最小权限原则的体现。Tasks Role 是什么任务角色的职责与信任策略Tasks Role任务角色才是你业务代码的身份证。容器里的应用如果要访问 AWS 资源——比如从 S3 下载文件、往 DynamoDB 写数据、用 IAM Auth 连接 RDS——靠的就是它。你可以把它理解成EC2 的 Instance Profile或者 EKS 里 Pod 的 Service Account容器内进程通过它临时获取 AWS 凭证任务运行期间全程可用。模块默认给了什么权限和直觉相反terraform-aws-ecs 对 Tasks Role 的默认策略几乎是空白的。在modules/service/main.tfL1284-L1360中只有当enable_execute_command true时才会自动添加ssmmessages系列权限用于 ECS Exec 进入容器。其他业务权限全靠你通过以下方式注入tasks_iam_role_policies附加现成的 AWS 托管策略如ReadOnlyAccesstasks_iam_role_statements自定义内联策略语句Task Exec Role 与 Tasks Role一张表看懂核心区别对比维度Task Exec Role任务执行角色Tasks Role任务角色服务对象ECS 平台本身容器内的业务代码生效时机任务创建/启动时任务运行期间典型用途拉镜像、写日志、读密钥访问 S3、DynamoDB、RDS容器内可见性不可见可见通过临时凭证信任主体ecs-tasks.amazonaws.comecs-tasks.amazonaws.com类似物无直接对应EC2 Instance Profile / EKS IRSA记住一句话就够了Task Exec Role 是让任务跑起来用的Tasks Role 是让业务跑起来用的。在 terraform-aws-ecs 中最快配置 Task Exec Role 的方法方式一集群级共享适合单团队如果你一个集群只有一个团队使用推荐在modules/cluster里创建一次 Task Exec Role 全集群共享服务侧直接引用。modules/cluster/main.tfL358 起提供了完整的create_task_exec_iam_role、task_exec_ssm_param_arns、task_exec_secret_arns参数。方式二服务级独立适合多团队多团队共用集群时为了让每个服务只能访问自己的密钥建议在modules/service中按服务创建独立角色module ecs_service { source terraform-aws-modules/ecs/aws//modules/service # ... 其他配置 task_exec_ssm_param_arns [arn:aws:ssm:ap-southeast-1:123456789012:parameter/my-app/*] task_exec_secret_arns [arn:aws:secretsmanager:ap-southeast-1:123456789012:secret:my-app-*] task_exec_iam_role_policies {} }在 terraform-aws-ecs 中最快配置 Tasks Role 的方法业务权限全部从这里进入examples/complete/main.tfL235-L247给出了标准示范module ecs_service { # ... 其他配置 tasks_iam_role_name my-app-tasks tasks_iam_role_max_session_duration 7200 # 方式一挂 AWS 托管策略 tasks_iam_role_policies { ReadOnlyAccess arn:aws:iam::aws:policy/ReadOnlyAccess } # 方式二自定义内联策略 tasks_iam_role_statements [ { actions [s3:List*] resources [arn:aws:s3:::*] } ] }如果你已经有现成的角色也可以用tasks_iam_role_arn/task_exec_iam_role_arn直接传入 ARN并配合create_tasks_iam_role false/create_task_exec_iam_role false关闭自动创建。常见权限报错排查清单 遇到以下报错先对照排查AccessDeniedException拉取镜像失败→ Task Exec Role 缺少 ECR 权限检查ecr:GetAuthorizationToken等是否被移除Unable to retrieve secret→ Task Exec Role 没加task_exec_secret_arns或 ARN 不匹配容器内访问 S3 报错→ Tasks Role 缺 S3 权限在tasks_iam_role_statements中补充ECS Exec 无法进入容器→ 确认enable_execute_command true且 Tasks Role 有ssmmessages权限Inaccessible encryption credentials→ 使用 KMS 加密的密钥时Task Exec Role 还需kms:Decrypt权限最佳实践3 条安全准则坚持最小权限Task Exec Role 只开放必需的 ECR/Logs 权限密钥访问精确到 ARN别图省事直接给*分清两个角色的边界业务资源访问一律走 Tasks Role系统级操作留在 Task Exec Role两者职责永不混用利用模块输出做审计模块提供task_exec_iam_role_arn、tasks_iam_role_name等输出见modules/service/outputs.tf方便你在其他 Terraform 资源中引用或审计小结搞懂了Task Exec Role 管启动、Tasks Role 管运行这个核心区别terraform-aws-ecs 中的 IAM 权限配置就变得非常简单。无论是集群级共享还是服务级隔离模块都通过task_exec_*和tasks_iam_role_*两套清晰的参数体系帮你搞定。想深入研究的同学可以翻一翻项目里的 docs/README.md 设计文档以及examples/fargate、examples/ec2-autoscaling等实战示例照着跑一遍理解会更扎实。【免费下载链接】terraform-aws-ecsTerraform module to create AWS ECS resources 项目地址: https://gitcode.com/gh_mirrors/te/terraform-aws-ecs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考