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

Terraform通过GitLab CI部署AWS EKS时出现configmaps is forbidden错误

EKS Terraform aws_auth ConfigMap权限报错解决方案

报错核心原因是你的Terraform没有使用你配置的专用kubernetes provider,而是默认调用了GitLab CI环境内置的kubeconfig对应的服务账号权限,该账号没有目标EKS集群kube-system命名空间的操作权限。

排查步骤1:确认带别名的provider已绑定到对应资源/模块

你给kubernetes provider设置了alias = "mastercluster",所有需要调用该provider的资源、模块都必须显式指定provider关联,否则会默认使用无别名的全局kubernetes provider:

  • 如果是直接定义kubernetes_config_map资源,需要在资源块内添加参数:
resource "kubernetes_config_map" "aws_auth" {
  provider = kubernetes.mastercluster
  # 其他原有配置
}
  • 如果是使用terraform-aws-modules/eks社区模块,需要在模块调用时传入provider参数:
module "mastercluster" {
  source  = "terraform-aws-modules/eks/aws"
  # 其他原有集群配置参数
  kubernetes_provider = kubernetes.mastercluster
}

排查步骤2:清理GitLab CI内置kubeconfig环境变量

GitLab绑定了Kubernetes集群的Runner会默认注入KUBECONFIG环境变量,即使provider设置了load_config_file = false,部分旧版本provider仍会优先读取该变量。在CI流水线的terraform执行步骤前添加命令:

unset KUBECONFIG

强制kubernetes provider读取你代码中写的EKS集群连接配置。

排查步骤3:确认CI执行身份的IAM权限

EKS默认仅集群创建者IAM实体拥有集群管理员权限,如果本次CI使用的IAM角色/用户和之前成功部署的场景不同,需要在集群创建配置中提前将CI身份ARN加入集群管理员列表:

module "mastercluster" {
  source  = "terraform-aws-modules/eks/aws"
  # 其他原有配置
  cluster_admin_arns = [
    "arn:aws:iam::你的AWS账号ID:role/你的CI执行角色名称"
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:57:04