Terraform创建EKS集群后执行kubectl遇未授权问题求助
问题描述
我用Terraform创建了EKS集群,执行命令aws eks update-kubeconfig --name cluster_name --region region_name后,运行kubectl命令时出现错误:error: You must be logged in to the server (Unauthorized)。我之前熟悉GCP,刚接触AWS,想了解我的IAM用户需要哪些权限,以及执行kubectl命令需要具备什么角色?
相关Terraform配置
EKS集群及节点组配置
resource "aws_eks_cluster" "eks-cluster" { name = "tf-example" role_arn = aws_iam_role.eks_role.arn vpc_config { subnet_ids = var.subnet_ids } depends_on = [ aws_iam_role_policy_attachment.eks-cluster-policy, aws_iam_role_policy_attachment.eks-cluster-security-group-policy ] } resource "aws_eks_node_group" "eks-node-group" { cluster_name = aws_eks_cluster.eks-cluster.name instance_types = var.instance_types node_group_name = "tf-example" node_role_arn = aws_iam_role.eks-node-group.arn subnet_ids = var.subnet_ids scaling_config { desired_size = 1 max_size = 1 min_size = 1 } update_config { max_unavailable = 1 } depends_on = [ aws_iam_role_policy_attachment.eks-node-group-worker-node-policy, aws_iam_role_policy_attachment.eks-node-group-cni-policy, aws_iam_role_policy_attachment.eks-node-group-registry-read-only-policy ] }
IAM角色配置
resource "aws_iam_role" "eks_role" { name = "tf-${var.stack_name}-eks-cluster-role" assume_role_policy = <<POLICY { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com", }, "Action": "sts:AssumeRole" } ] } POLICY } resource "aws_iam_role" "eks-node-group" { name = "tf-${var.stack_name}-eks-node-group-role" assume_role_policy = <<POLICY { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "eks.amazonaws.com", "ec2.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] } POLICY }
解决方案
一、IAM用户所需权限
要执行aws eks update-kubeconfig并访问EKS集群,你的IAM用户至少需要以下权限:
eks:DescribeCluster:获取集群的kubeconfig配置核心信息- 可选但建议添加:
iam:GetRole(若需要关联IAM角色到集群权限时会用到)
你可以给用户附加自定义IAM策略,示例如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "eks:DescribeCluster", "Resource": "arn:aws:eks:你的区域ID:你的账号ID:cluster/tf-example" } ] }
二、Kubectl访问所需的集群角色
EKS默认仅创建集群的IAM用户/角色拥有集群管理员权限,其他用户需通过AWS IAM Authenticator映射到Kubernetes RBAC角色才能访问。
1. 配置aws-auth ConfigMap
EKS通过kube-system命名空间下的aws-auth ConfigMap管理IAM实体到Kubernetes角色的映射。你需要将你的IAM用户添加到该配置中:
apiVersion: v1 kind: ConfigMap metadata: name: aws-auth namespace: kube-system data: mapUsers: | - userarn: arn:aws:iam::你的账号ID:user/你的IAM用户名 username: 你的IAM用户名 groups: - system:masters # 授予集群管理员权限,可根据实际需求调整为其他组
执行kubectl apply -f aws-auth.yaml更新配置(注意:只有当前拥有集群权限的用户才能执行此操作,若你是集群创建者,可先手动添加自己的用户信息)。
2. 分配Kubernetes RBAC角色
根据业务需求给映射的用户分配对应RBAC角色:
- 管理员权限:加入
system:masters组(如上示例) - 只读权限:绑定
viewClusterRole - 自定义权限:创建自定义ClusterRole或Role,并绑定到目标用户
三、额外注意事项
- 确保执行
aws eks update-kubeconfig时使用的IAM用户拥有对应权限,且kubeconfig文件生成正常(默认路径为~/.kube/config) - 若使用Terraform管理集群,可添加
aws_eks_cluster_auth资源辅助生成kubeconfig,或直接在Terraform中管理aws-authConfigMap
内容的提问来源于stack exchange,提问作者deagleshot
相关产品推荐
相关产品推荐

