data "aws_eks_cluster_auth" "this" { name = module.eks.cluster_id } data "aws_caller_identity" "current" {} locals { kubeconfig = yamlencode({ apiVersion = "v1" kind = "Config" current-context = "terraform" clusters = [{ name = module.eks.cluster_id cluster = { certificate-authority-data = module.eks.cluster_certificate_authority_data server = module.eks.cluster_endpoint } }] contexts = [{ name = "terraform" context = { cluster = module.eks.cluster_id user = "terraform" } }] users = [{ name = "terraform" user = { token = data.aws_eks_cluster_auth.this.token } }] }) # we have to allow the root account to access the api aws_auth_configmap_yaml = <<-EOT ${chomp(module.eks.aws_auth_configmap_yaml)} - rolearn: arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/admin username: system:aws:root groups: - system:masters EOT } resource "null_resource" "patch_cm" { triggers = { kubeconfig = base64encode(local.kubeconfig) cmd_patch = <<-EOT kubectl patch configmap/aws-auth --patch "${local.aws_auth_configmap_yaml}" -n kube-system --kubeconfig <(echo $KUBECONFIG | base64 --decode) EOT } provisioner "local-exec" { interpreter = ["/bin/bash", "-c"] environment = { KUBECONFIG = self.triggers.kubeconfig } command = self.triggers.cmd_patch } }