참고 - https://aws.amazon.com/ko/premiumsupport/knowledge-center/eks-iam-permissions-namespaces/
참고2 - https://dev.to/aws-builders/eks-auth-deep-dive-4fib
꼭 명심하자. Root 계정으로 Cluster를 생성하고 Bastion Instance에 aws configure을 사용해서 Root 자격 증명을 업데이트 해준다음 aws eks kubeconfig를 해줘야한다
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: wsi-skills-namespace
subjects:
# You can specify more than one "subject"
- kind: User
name: BastionHostRole
apiGroup: rbac.authorization.k8s.io
roleRef:
# "roleRef" specifies the binding to a Role / ClusterRole
kind: Role #this must be Role or ClusterRole
name: skills # this must match the name of the Role or ClusterRole you wish to bind to
apiGroup: rbac.authorization.k8s.io
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: wsi-skills-namespace
name: skills
rules:
- apiGroups: ["*"] # "" indicates the core API group
resources: ["*"]
verbs: ["*"]
apiVersion: v1
data:
mapRoles: |
- groups:
- system:bootstrappers
- system:nodes
rolearn: arn:aws:iam::xxxxxxxxxxxxx:role/eksWorkerNodeRole
username: system:node:{{EC2PrivateDNSName}}
rolearn: arn:aws:iam::xxxxxxxxxxxxx:role/BastionHostRole
username: BastionHostRole
kind: ConfigMap
metadata:
creationTimestamp: "2022-08-17T15:21:43Z"
name: aws-auth
namespace: kube-system
resourceVersion: "2822"
uid: 7d7ba317-3df7-4fe7-a153-479d0b71db4a
설명을 좀 더 나누겠습니다
먼저 role.yaml 파일 부분이 핵심입니다.
rules를 통해서 권한을 해당 User에게 부여할 수 있는 것입니다.
apiGroups: 예를 들어 Pod이면 v1이기 때문에 ""로 표시하고 deployment는 apps/v1이기 때문에 apiGroups에 "apps"로 지정해야합니다. 즉, apiGroups는 해당 Object에 ApiGroup입니다.
resources: 리소스는 말 그대로 deployments, pods, namespaces, service 등을 말합니다. 리소스는 pods뿐만 아니라 하위 리소스도 지정할 수 있습니다. pods/log 이런식으로 말이죠 근데 너무 깊게는 생각안하셔도 됩니다.
resourceNames: 이 부분은 안 넣었긴 하지만, 예를 들어 deployment Object에 이름이 front-apps-deployment라고 가정했을 합니다. 그때 이렇게 정의할 수 있습니다. resourceNames: ["front-apps-deployment"] 즉, 해당 이름을 가지고 있는 Deployment에 대한 권한을 부여하는 것 입니다.
verbs는 행동을 말합니다. list, get, delete, edit 등을 말이죠