Access Entry

EKS Access Entry是AWS于2023年推出的一种新机制,用于管理对EKS集群的访问权限

Access Entry特性

  1. IAM与Kubernetes RBAC分离:Access Entry将IAM身份验证与Kubernetes RBAC授权清晰分离
  2. 集中式访问管理:通过AWS API直接管理访问权限,无需修改aws-auth ConfigMap
  3. 声明式配置:使用API或IaC工具管理访问权限,提高可靠性和自动化程度
  4. 标准化权限模型:提供预定义的访问类型和映射规则

解决的问题

  1. aws-auth ConfigMap管理复杂性:传统方法需要手动编辑ConfigMap,容易出错且难以跟踪变更
  2. 角色映射一致性:解决手动映射造成的不一致问题
  3. 自动化部署支持:更容易与CI/CD和IaC工具集成
  4. 多集群管理简化:统一的API简化了跨多个EKS集群的访问控制

示例

创建AWS IAM用户

aws iam create-user --user-name eks-user
aws iam create-access-key --user-name eks-user

返回结果如下,注意保存ak/sk:

{
    "AccessKey": {
        "UserName": "eks-user",
        "AccessKeyId": "AKIAxxxxxxxxx7QE",
        "Status": "Active",
        "SecretAccessKey": "YGlk7xxxxxxxxxxxxxfLZzIdMwba",
        "CreateDate": "2025-04-18T07:33:33+00:00"
    }
}

在控制台上能看到新创建出来的用户:

image-20250418153547683

给它添加EKS Describe相关的权限,创建一个inline-policy.json, 内容如下:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "eks:DescribeCluster",
      "Resource": "*"
    }
  ]
}

给用户添加这个权限

aws iam put-user-policy \
  --user-name eks-user \
  --policy-name EKSDescribeClusterPolicy \
  --policy-document file://inline-policy.json

使用Access Entry添加用户访问权限

# 创建用户的Access Entry
aws eks create-access-entry \
  --cluster-name your-cluster-name \
  --principal-arn arn:aws:iam::ACCOUNT_ID:user/eks-user \
  --username eks-user \
  --type STANDARD

返回结果:

image-20250418155748863

在eks页面上能看到新创建的access entry:

image-20250418160021561

关联Kubernetes组

给这个access entry 加上AmazonEKSClusterAdminPolicy权限:

# 将用户关联到一个或多个Kubernetes组
aws eks associate-access-policy \
  --cluster-name your-cluster-name \
  --principal-arn arn:aws:iam::ACCOUNT_ID:user/eks-user \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster

返回结果:

image-20250418155925259

用户配置与访问

用户需要配置AWS CLI并更新kubeconfig:

# 配置AWS CLI
aws configure 

# 更新kubeconfig
aws eks update-kubeconfig \
  --name your-cluster-name \
  --region your-region 

然后执行kubectl 命令,有权限访问到集群

image-20250418173427271

预定义的Access Policies

EKS Access Entry提供几种预定义的访问策略:

  1. AmazonEKSAdminPolicy:完全管理权限
  2. AmazonEKSClusterAdminPolicy:集群管理权限
  3. AmazonEKSEditPolicy:编辑权限(不包括RBAC管理)
  4. AmazonEKSViewPolicy:只读权限

最佳安全实践

  1. 使用IAM角色而非用户:生产环境中优先使用IAM角色

  2. 利用访问范围:使用namespace限制权限范围

Access Entry提供更安全、更可靠、更易管理的方式来控制谁可以访问您的Kubernetes集群及其资源。