使用 Terraform 为 EKS 创建身份映射

问题描述 投票:0回答:3

我目前正在使用 EKSCTL 配置我的 EKS 集群,并且我想使用 Terraform 来配置集群。我正在使用 Terraform EKS 模块来创建集群。我已经使用 EKSCTL 通过以下命令创建身份映射

eksctl create iamidentitymapping -- region us-east-1 --cluster stage-cluster --arn arn:aws:iam::111222333444:role/developer --username dev-service

我想用以下命令将此命令转换为 Terraform,但这不是最好的方法

  resource "null_resource" "eks-identity-mapping" {
  depends_on = [
    module.eks,
    aws_iam_policy_attachment.eks-policy-attachment
  ]
  provisioner "local-exec" {
    command = <<EOF
      eksctl create iamidentitymapping \
      --cluster ${var.eks_cluster_name} \
      --arn ${data.aws_iam_role.mwaa_role.arn} \
      --username ${var.mwaa_username} \
      --profile ${var.aws_profile} \
      --region ${var.mwaa_aws_region}
    EOF
  }
}

如何使用 Kubernetes 提供程序来实现此目标

kubernetes terraform amazon-iam amazon-eks eksctl
3个回答
1
投票

我还没有找到该特定命令的明确匹配,但您可以通过在 kubernetes 中设置

aws-auth
配置映射来实现类似的功能,一次性添加所有用户/角色及其访问权限。

例如,我们使用如下所示的内容来向我们的集群提供管理员列表:

resource "kubernetes_config_map" "aws_auth" {
  metadata {
    name      = "aws-auth"
    namespace = "kube-system"
  }

  data = {
    mapRoles = <<CONFIGMAPAWSAUTH
- rolearn: ${var.k8s-node-iam-arn}
  username: system:node:{{EC2PrivateDNSName}}
  groups:
    - system:bootstrappers
    - system:nodes
- rolearn: arn:aws:iam::111222333444:role/developer
  username: dev-service
  groups:
    - system:masters
CONFIGMAPAWSAUTH
  }
}

请注意,此文件包含所有角色映射,因此您应该确保将

var.k8s-node-iam-arn
设置为集群的超级用户,否则您可能会被锁定。此外,您还必须设置这些角色将获得哪些访问权限。

您还可以添加特定的 IAM 用户而不是角色:

- userarn: arn:aws:iam::1234:user/user.first
  username: user.first
  groups:
    - system:masters

0
投票

您可以直接在 eks 模块中执行此操作。 您创建要添加的角色列表,例如:

locals {
    aws_auth_roles = [
    {
      rolearn  = ${data.aws_iam_role.mwaa_role.arn}
      username = ${var.mwaa_username}
      groups = [
        "system:masters"
      ]
    },
  ]
}

然后在模块中添加:

module "eks" {
  source  = "terraform-aws-modules/eks/aws"
  version = "19.5.1"
  [...]
  # aws-auth configmap
  manage_aws_auth_configmap = true
  aws_auth_roles            = local.aws_auth_roles
  [...]
}

注意:在旧版本的“terraform-aws-modules/eks/aws”(14、17)中,它是

map_users
map_roles
,在 19 中它是
manage_aws_auth_configmap
aws_auth_users
aws_auth_roles
。 请参阅此处的文档:https://registry.terraform.io/modules/terraform-aws-modules/eks/aws/19.7.0#input_manage_aws_auth_configmap

更新:为了使其正常工作并且不会出现像

Error: The configmap "aws-auth" does not exist
这样的错误,您还需要添加此身份验证部分:

data "aws_eks_cluster_auth" "default" {
  name = local.cluster_name
}

provider "kubernetes" {
  host = module.eks.cluster_endpoint
  cluster_ca_certificate = base64decode(module.eks.cluster_certificate_authority_data)
  token = data.aws_eks_cluster_auth.default.token
}

0
投票

我遇到了这个问题,并创建了一个工作示例,说明如何为现有 EKS 集群更新自动创建的 was-auth 配置映射:

https://github.com/jamiemo/k8s-eks-aws-auth-configmap

© www.soinside.com 2019 - 2024. All rights reserved.