首先,我们经常使用AWS的知道AWS 有IAM ,我们可以创建一些用户,或者role,然后赋予这些role一定的权限:例如,读写s3 , 那么谁拥有了这个role ,或者assume到这个role就获得了这些权限
那么,我们如何和eks进行关联呢?
例如:我现在公司里已经每个人有一个aws账号了,我想让一部分人只有
view的权限:例如 kubectl get pod , descripe pod
manange的权限: 例如 kubectl delete pod
该如何设置呢?
首先,我们抛开AWS 来说,k8s 内部也是基于RBAC的,如果你想有两种不同的权限在k8s中,你首先得有个不同role:
例如,我们创建一个只读role叫: pod-reader
1 2 3 4 5 6 7 8 9 |
kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: '*' name: pod-reader rules: - apiGroups: ["extensions", "apps", ""] resources: ["pods"] verbs: ["get", "list", "watch"] |
当我们创建了这个role以后,还需要创建一个rolebinding ,把这个role 和我们的某个Group绑定,例如,group 叫: ops-reader
也就是说,如果一个人属于ops-reader,那么他就有了上边role里边的权限(注意,kubernetes中并没有user 和group的概念,都是对接第三方的)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
apiVersion: rbac.authorization.k8s.io/v1 # This cluster role binding allows anyone in the "manager" group to read secrets in any namespace. kind: ClusterRoleBinding metadata: name: pod-reader-for-ops subjects: - kind: Group name: ops-reader apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: pod-reader apiGroup: rbac.authorization.k8s.io |
这样,剩下的问题就是把对的人放到ops-reader这个组了,既然kubernetes没有user 和group概念,那么AWS 提供了一个Mapping的方法,简单来说,就是把某个user ,和某个组管理起来,例如:
user-a : ops-reader
user-b: ops-manager
这样的话,如果,user-a通过自己的IAM 来操作kubernetes,那么kubernetes就会给他 ops-reader这个group的权限,aws把这个map放到了kube-system namsspace下:
我们可以通过如下命令查看
1 |
kubectl get configmap aws-auth -o yaml |
map的部分大概这个样子:
1 2 3 4 |
- userarn: arn:aws:iam::0000000:user/usera username: usera groups: - ops-reader |
这样其实就完成了,但是需要注意,这个IAM用户需要有对应的eks相关的权限
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021