如何在AWS EKS Terraform模块中复用本地用户列表?
解决方案
要复用local.users列表同时满足两个配置项的需求,可以通过Terraform的for表达式和字符串处理函数,从ARN中提取用户名,自动生成aws_auth_users所需的结构,无需重复编写每个用户的配置。
修改后的完整代码
locals { users = tolist([ "arn:aws:iam::xxx:user/env/test/user1", "arn:aws:iam::xxx:user/env/test/user2", "arn:aws:iam::xxx:user/user3" ]) } # Module EKS module "eks" { source = "terraform-aws-modules/eks/aws" version = "~> 19.0" cluster_name = "eks" cluster_version = "1.24" cluster_endpoint_private_access = true vpc_id = module.vpc.vpc_id subnet_ids = module.vpc.private_subnets # 直接复用local.users列表 kms_key_administrators = local.users enable_irsa = true create_kms_key = true create_cluster_security_group = false cluster_security_group_id = aws_security_group.mysg.id eks_managed_node_group_defaults = { disk_size = 100 } create_aws_auth_configmap = false manage_aws_auth_configmap = true # 通过for表达式自动生成aws_auth_users结构 aws_auth_users = [ for arn in local.users : { userarn = arn # 从ARN中提取最后一段作为用户名 username = split("/", arn)[length(split("/", arn)) - 1] groups = ["system:masters"] } ] eks_managed_node_groups = { general = { desired_size = 4 min_size = 2 max_size = 6 labels = { env = "test" } instance_types = ["t3.small"] capacity_type = "ON_DEMAND" } } }
关键说明
- kms_key_administrators配置:直接引用
local.users即可,因为该参数接受IAM ARN列表,与我们定义的格式完全匹配。 - aws_auth_users自动生成:
- 使用
for arn in local.users遍历所有ARN - 通过
split("/", arn)将ARN按斜杠分割成数组,取数组最后一个元素作为用户名,适配不同路径下的IAM用户(比如带env/test/前缀的用户) - 统一设置
groups为["system:masters"],如果需要不同用户对应不同组,可以在locals里定义更复杂的结构(比如包含ARN和组的对象列表),再调整for表达式逻辑。
- 使用
内容的提问来源于stack exchange,提问作者SemirAdam
相关产品推荐
相关产品推荐

