You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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组(如上示例)
  • 只读权限:绑定view ClusterRole
  • 自定义权限:创建自定义ClusterRole或Role,并绑定到目标用户

三、额外注意事项

  • 确保执行aws eks update-kubeconfig时使用的IAM用户拥有对应权限,且kubeconfig文件生成正常(默认路径为~/.kube/config)
  • 若使用Terraform管理集群,可添加aws_eks_cluster_auth资源辅助生成kubeconfig,或直接在Terraform中管理aws-auth ConfigMap

内容的提问来源于stack exchange,提问作者deagleshot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:20:20