GKE 有一个 IAM 角色/container.clusterViewer,我如何在 EKS 上复制它?将 EKS 上的只读 kubectl 访问权限作为所有用户的默认设置?

问题描述 投票:0回答:1

背景:

GKE 有这个很棒的功能:

  • 大多数 IAM 角色都会继承 Roles/container.clusterViewer 的权限。
  • 它授予他们 RO kubectl 访问权限,他们可以查看大多数内容,但不能查看秘密,并且无法 kubectl exec。所以他们无法提升特权。
  • 最终,所有有权访问 GKE Web 控制台的用户(开发人员、运维人员和云管理员)都将获得只读 kubectl 访问权限。

EKS 的默认设置很烦人,会导致糟糕的 UX(用户体验):

  • 默认情况下:默认情况下,即使是 root 用户、帐户创建者、管理员也无权查看 EKS 集群中的内容。
  • 我希望我可以向所有经过身份验证的用户(特别是我的 AWS 账户中经过身份验证的用户,而不是所有 AWS 账户中经过身份验证的 AWS 用户)授予查看者对 EKS Web 控制台的访问权限并只读 kubectl。 (他们可以在其中运行大多数 kubectl 命令,但查看机密和执行 pod 除外。)
  • 我想这样做是因为它可以很好地平衡内部用户体验和安全性。我希望所有经过身份验证的用户都具有仅查看者访问权限,然后我将向一些需要它的人提供管理员访问权限。

问题:

我想在 EKS 上重现 GKE 仅查看者 IAM 角色的功能,或尽可能接近它。我怎样才能做到这一点?

google-kubernetes-engine amazon-iam amazon-eks identity-management kubernetes-rbac
1个回答
0
投票

注意:以下是针对单租户集群的合理解决方案。
不要对多租户集群执行此操作。

2 步骤:

第1步:

kubectl edit cm aws-auth -n=kube-system

  • 按如下方式更新 aws-auth configmap:
apiVersion: v1
data:
  mapAccounts: '["111122223333"]' #<-- Your AWS Account
...

第2步:

kubectl apply -f all-authenticated-users-viewer.yaml

all-authenticated-users-viewer.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding # <-- apply rights to all namespaces
metadata:
  name: all-authenticated-users-viewer
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:authenticated # <-- authenticated = all kube identities & all that show in aws-auth configmap in kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole 
  name: view #<-- acts as an aggregation role
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: enhanced-viewer
  labels:
    rbac.authorization.k8s.io/aggregate-to-view: "true" #<-- this will get merged into the "view" clusterrole
rules:
- apiGroups: [""]
  verbs: ["get", "list", "watch"]
  resources:
  - podtemplates
  - nodes
  - persistentvolumes
- apiGroups: ["scheduling.k8s.io"]
  verbs: ["get", "list", "watch"]
  resources:
  - priorityclasses
- apiGroups: ["apiregistration.k8s.io"]
  verbs: ["get", "list", "watch"]
  resources:
  - apiservices
- apiGroups: ["coordination.k8s.io"]
  verbs: ["get", "list", "watch"]
  resources:
  - leases
- apiGroups: ["node.k8s.io"]
  verbs: ["get", "list", "watch"]
  resources:
  - runtimeclasses
- apiGroups: ["flowcontrol.apiserver.k8s.io"]
  verbs: ["get", "list", "watch"]
  resources:
  - flowschemas
  - prioritylevelconfigurations
- apiGroups: ["networking.k8s.io"]
  verbs: ["get", "list", "watch"]
  resources:
  - ingressclasses
- apiGroups: ["storage.k8s.io"]
  verbs: ["get", "list", "watch"]
  resources:
  - storageclasses
  - volumeattachments
  - csidrivers
  - csinodes
  - csistoragecapacities
- apiGroups: ["rbac.authorization.k8s.io"]
  verbs: ["get", "list", "watch"]
  resources:
  - clusterroles
  - clusterrolebindings
  - roles
  - rolebindings
- apiGroups: ["apiextensions.k8s.io"]
  verbs: ["get", "list", "watch"]
  resources:
  - customresourcedefinitions
- apiGroups: ["admissionregistration.k8s.io"]
  verbs: ["get", "list", "watch"]
  resources:
  - mutatingwebhookconfigurations
  - validatingwebhookconfigurations
© www.soinside.com 2019 - 2024. All rights reserved.