使用 Terraform 为 EKS 创建身份映射

Create an identity mapping for EKS with Terraform

我目前正在使用 EKSCTL 配置我的 EKS cluster/s,我想使用 Terraform 来配置 cluster/s。我正在使用 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 中设置 aws-auth 配置映射、添加所有 users/roles 及其访问权限来实现类似的效果一气呵成。

例如,我们使用类似下面的内容来为我们的集群提供管理员列表:

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