使用Terraform创建EKS集群时读取Add-On出现IAM权限报错
问题根因
你配置的EKS集群部署用IAM最小权限策略,缺失了EKS附加组件(Add-On)对应的API操作权限。Terraform在创建、读取coredns、vpc-cni、kube-proxy三个默认EKS插件资源时,调用相关EKS接口被权限拦截,才会抛出AccessDeniedException报错。
修复方案
- 在现有IAM策略中补充EKS Add-On相关的最小权限集合,不需要放开全量EKS操作,仅需添加插件管理相关动作即可,参考权限片段如下:
{ "Effect": "Allow", "Action": [ "eks:ListAddons", "eks:DescribeAddon", "eks:CreateAddon", "eks:UpdateAddon", "eks:DeleteAddon", "eks:TagResource", "eks:UntagResource" ], "Resource": [ "arn:aws:eks:<你的区域>:<你的AWS账号ID>:cluster/*", "arn:aws:eks:<你的区域>:<你的AWS账号ID>:addon/*/*/*" ] }
注:如果使用中国区AWS,将ARN前缀的aws替换为aws-cn即可。
- 检查权限拦截的额外规则:如果你使用AWS Organizations管理账号,需要确认账号绑定的SCP服务控制策略没有显式拒绝上述EKS操作;同时检查当前IAM用户是否配置了权限边界(Permissions Boundary),权限边界的限制优先级高于自定义允许策略,会导致权限不生效。
- 校验凭证一致性:权限更新后,先执行
aws sts get-caller-identity确认当前Terraform运行环境使用的IAM身份,就是你绑定了新策略的用户/角色,避免错用其他无权限的本地凭证、实例角色凭证,确认无误后重新执行terraform apply即可。
如果你使用的是社区公开的terraform-aws-eks官方模块,其文档标注的最小权限清单默认包含上述Add-On操作权限,自行裁剪策略时很容易漏掉这部分插件相关的权限动作。
内容的提问来源于stack exchange,提问作者Piyush Mittal
相关产品推荐
相关产品推荐

