使用Terraform为EKS创建身份映射



我目前正在使用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中设置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

您可以直接在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模块/eks/aws";(14,17(为map_usersmap_roles,19为manage_aws_auth_configmapaws_auth_usersaws_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
}

最新更新