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

如何在EKS中复刻GKE的roles/container.clusterViewer只读访问功能?

在EKS中实现类GKE只读ClusterViewer权限的方案

要实现和GKE roles/container.clusterViewer 接近的权限效果,需要从IAM权限配置、EKS身份映射、Kubernetes RBAC三个层面配合完成,具体步骤如下:

1. 创建自定义IAM策略,覆盖EKS控制台访问与基础集群权限

先创建一个IAM策略,允许用户查看EKS控制台集群信息,同时具备后续关联K8s只读权限的基础:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:DescribeCluster",
                "eks:ListClusters",
                "eks:ListNodegroups",
                "eks:DescribeNodegroup",
                "eks:ListAddons",
                "eks:DescribeAddon"
            ],
            "Resource": "arn:aws:eks:你的区域:你的账号ID:cluster/*"
        },
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::你的账号ID:role/eks-cluster-viewer-role"
        }
    ]
}

将此策略附加到AWS账号内所有需要只读权限的IAM用户,或者直接附加到账号级别的用户组。

2. 创建专用的IAM角色用于EKS身份映射

创建一个名为 eks-cluster-viewer-role 的IAM角色,信任策略设置为允许账号内所有IAM用户扮演该角色:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::你的账号ID:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringLike": {
                    "aws:PrincipalArn": "arn:aws:iam::你的账号ID:user/*"
                }
            }
        }
    ]
}

3. 配置EKS的aws-auth ConfigMap映射IAM角色到K8s用户组

编辑EKS集群的 aws-auth ConfigMap,将刚才创建的IAM角色映射到Kubernetes的 eks-cluster-viewers 用户组:

apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - rolearn: arn:aws:iam::你的账号ID:role/eks-cluster-viewer-role
      username: eks-cluster-viewer
      groups:
        - eks-cluster-viewers

执行 kubectl apply -f aws-auth-updated.yaml 生效。

4. 创建Kubernetes ClusterRole,复刻GKE ClusterViewer的权限限制

创建一个ClusterRole,允许只读访问大部分资源,但禁止查看Secrets、执行Pod exec/attach操作:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: eks-cluster-viewer
rules:
  # 允许只读访问大部分核心资源
  - apiGroups: [""]
    resources: ["pods", "pods/log", "services", "endpoints", "nodes", "persistentvolumes", "persistentvolumeclaims", "configmaps", "events"]
    verbs: ["get", "list", "watch"]
  # 允许只读访问工作负载资源
  - apiGroups: ["apps"]
    resources: ["deployments", "replicasets", "statefulsets", "daemonsets"]
    verbs: ["get", "list", "watch"]
  # 允许只读访问网络资源
  - apiGroups: ["networking.k8s.io"]
    resources: ["ingresses", "services", "networkpolicies"]
    verbs: ["get", "list", "watch"]
  # 明确禁止访问Secrets
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["deny"]
  # 禁止Pod的exec/attach/port-forward操作
  - apiGroups: [""]
    resources: ["pods/exec", "pods/attach", "pods/portforward"]
    verbs: ["deny"]

执行 kubectl apply -f cluster-role.yaml 创建该角色。

5. 绑定ClusterRole到目标用户组

创建ClusterRoleBinding,将 eks-cluster-viewers 用户组与刚才的ClusterRole绑定:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: eks-cluster-viewer-binding
subjects:
  - kind: Group
    name: eks-cluster-viewers
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: eks-cluster-viewer
  apiGroup: rbac.authorization.k8s.io

执行 kubectl apply -f cluster-role-binding.yaml 完成绑定。

验证效果

用户执行 aws eks update-kubeconfig --region 你的区域 --name 集群名称 更新kubeconfig后,即可通过kubectl执行只读操作,无法查看Secrets或进入Pod,同时能正常访问EKS控制台查看集群信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:51:02