Amazon EKS에서 생성된 RBAC 역할과 사용자 이해하기
Amazon EKS에서 생성된 RBAC 역할과 사용자 이해하기
Kubernetes 클러스터를 만들면 Kubernetes가 제대로 동작하도록 해당 클러스터에 몇 가지 기본 Kubernetes ID가 생성돼요. Amazon EKS는 각 기본 구성 요소에 대해 Kubernetes ID를 만들어요. 이 ID는 클러스터 구성 요소에 대한 Kubernetes RBAC(Role-Based Access Control)를 제공해요. 자세한 내용은 Kubernetes 문서의 Using RBAC Authorization을 참고하세요.
클러스터에 선택적 애드온을 설치하면 클러스터에 추가 Kubernetes ID가 추가될 수 있어요. 이 토픽에서 다루지 않는 ID에 대한 자세한 내용은 해당 애드온 문서를 참고하세요.
AWS Management Console이나 kubectl 명령줄 도구를 사용해 클러스터에서 Amazon EKS가 생성한 Kubernetes ID 목록을 볼 수 있어요. 모든 사용자 ID는 Amazon CloudWatch를 통해 사용할 수 있는 kube 감사 로그에 나타나요.
출처: 문서
본문
AWS Management Console
사전 요구 사항
사용하는 IAM 보안 주체에 Required permissions에 설명된 권한이 있어야 해요.
AWS Management Console로 Amazon EKS 생성 ID 보기
- Amazon EKS 콘솔을 엽니다.
- Clusters 목록에서 볼 ID가 포함된 클러스터를 선택합니다.
- Resources 탭을 선택합니다.
- Resource types에서 Authorization을 선택합니다.
- ClusterRoles, ClusterRoleBindings, Roles 또는 RoleBindings 중 하나를 선택합니다. eks 접두사가 붙은 모든 리소스는 Amazon EKS가 생성한 거예요. 추가적인 Amazon EKS 생성 ID 리소스는 다음과 같아요.
aws-node라는 이름의 ClusterRole과 ClusterRoleBinding. aws-node 리소스는 Amazon EKS가 모든 클러스터에 설치하는 Kubernetes용 Amazon VPC CNI 플러그인을 지원해요.vpc-resource-controller-role이라는 이름의 ClusterRole과vpc-resource-controller-rolebinding이라는 이름의 ClusterRoleBinding. 이 리소스들은 Amazon EKS가 모든 클러스터에 설치하는 Amazon VPC 리소스 컨트롤러를 지원해요.
- 콘솔에서 보이는 리소스 외에도 클러스터 구성에는 보이지 않지만 클러스터에 존재하는 다음과 같은 특수 사용자 ID가 있어요.
eks:cluster-bootstrap– 클러스터 부트스트랩 중kubectl작업에 사용돼요.eks:support-engineer– 클러스터 관리 작업에 사용돼요.
- 자세한 내용을 보려면 특정 리소스를 선택하세요. 기본적으로 Structured view로 정보가 표시돼요. 세부 정보 페이지의 오른쪽 위에서 Raw view를 선택해 리소스의 모든 정보를 볼 수 있어요.
Kubectl
사전 요구 사항
클러스터의 Kubernetes 리소스를 나열하는 데 사용하는 엔터티(AWS IAM(Identity and Access Management) 또는 OIDC(OpenID Connect))가 IAM 또는 OIDC ID 공급자로 인증되어야 해요. 이 엔터티는 사용자가 작업하려는 클러스터의 Role, ClusterRole, RoleBinding, ClusterRoleBinding 리소스에 대해 Kubernetes get과 list 동사(verb)를 사용할 권한이 부여되어야 해요. IAM 엔터티에 클러스터 접근을 부여하는 방법은 IAM 사용자와 역할에 Kubernetes API 접근 권한 부여하기를 참고하세요. 자체 OIDC 공급자로 인증된 엔터티에 클러스터 접근을 부여하는 방법은 외부 OIDC 공급자로 사용자에게 Kubernetes 접근 권한 부여하기를 참고하세요.
kubectl로 Amazon EKS 생성 ID 보기
보려는 리소스 유형에 해당하는 명령을 실행하세요. 반환되는 eks 접두사가 붙은 모든 리소스는 Amazon EKS가 생성한 거예요. 명령 출력에 반환된 리소스 외에도 클러스터 구성에는 보이지 않지만 클러스터에 존재하는 다음과 같은 특수 사용자 ID가 있어요.
eks:cluster-bootstrap– 클러스터 부트스트랩 중kubectl작업에 사용돼요.eks:support-engineer– 클러스터 관리 작업에 사용돼요.
ClusterRoles – ClusterRoles는 클러스터 범위로 지정되므로 역할에 부여된 모든 권한은 클러스터의 모든 Kubernetes 네임스페이스의 리소스에 적용돼요.
다음 명령은 클러스터에서 Amazon EKS가 생성한 모든 Kubernetes ClusterRoles를 반환해요.
kubectl get clusterroles | grep eks
출력에서 eks: 접두사가 붙은 ClusterRoles 외에도 다음 ClusterRoles가 존재해요.
aws-node– 이ClusterRole은 Amazon EKS가 모든 클러스터에 설치하는 Kubernetes용 Amazon VPC CNI 플러그인을 지원해요.vpc-resource-controller-role– 이ClusterRole은 Amazon EKS가 모든 클러스터에 설치하는 Amazon VPC 리소스 컨트롤러를 지원해요.
ClusterRole의 사양을 보려면 다음 명령에서 eks:k8s-metrics를 이전 명령 출력에서 반환된 ClusterRole로 바꾸세요. 다음 예시는 eks:k8s-metrics ClusterRole의 사양을 반환해요.
kubectl describe clusterrole eks:k8s-metrics
출력 예시는 다음과 같아요.
Name: eks:k8s-metrics
Labels:
Annotations:
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
[/metrics] [] [get]
endpoints [] [] [list]
nodes [] [] [list]
pods [] [] [list]
deployments.apps [] [] [list]
ClusterRoleBindings – ClusterRoleBindings는 클러스터 범위로 지정돼요.
다음 명령은 클러스터에서 Amazon EKS가 생성한 모든 Kubernetes ClusterRoleBindings를 반환해요.
kubectl get clusterrolebindings | grep eks
출력에 반환된 ClusterRoleBindings 외에도 다음 ClusterRoleBindings가 존재해요.
aws-node– 이ClusterRoleBinding은 Amazon EKS가 모든 클러스터에 설치하는 Kubernetes용 Amazon VPC CNI 플러그인을 지원해요.vpc-resource-controller-rolebinding– 이ClusterRoleBinding은 Amazon EKS가 모든 클러스터에 설치하는 Amazon VPC 리소스 컨트롤러를 지원해요.
ClusterRoleBinding의 사양을 보려면 다음 명령에서 eks:k8s-metrics를 이전 명령 출력에서 반환된 ClusterRoleBinding으로 바꾸세요. 다음 예시는 eks:k8s-metrics ClusterRoleBinding의 사양을 반환해요.
kubectl describe clusterrolebinding eks:k8s-metrics
출력 예시는 다음과 같아요.
Name: eks:k8s-metrics
Labels:
Annotations:
Role:
Kind: ClusterRole
Name: eks:k8s-metrics
Subjects:
Kind Name Namespace
---- ---- ---------
User eks:k8s-metrics
Roles – Roles는 Kubernetes 네임스페이스 범위로 지정돼요. Amazon EKS가 생성한 모든 Roles는 kube-system 네임스페이스 범위로 지정돼요.
다음 명령은 클러스터에서 Amazon EKS가 생성한 모든 Kubernetes Roles를 반환해요.
kubectl get roles -n kube-system | grep eks
Role의 사양을 보려면 다음 명령에서 eks:k8s-metrics를 이전 명령 출력에서 반환된 Role 이름으로 바꾸세요. 다음 예시는 eks:k8s-metrics Role의 사양을 반환해요.
kubectl describe role eks:k8s-metrics -n kube-system
출력 예시는 다음과 같아요.
Name: eks:k8s-metrics
Labels:
Annotations:
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
daemonsets.apps [] [aws-node] [get]
deployments.apps [] [vpc-resource-controller] [get]
RoleBindings – RoleBindings는 Kubernetes 네임스페이스 범위로 지정돼요. Amazon EKS가 생성한 모든 RoleBindings는 kube-system 네임스페이스 범위로 지정돼요.
다음 명령은 클러스터에서 Amazon EKS가 생성한 모든 Kubernetes RoleBindings를 반환해요.
kubectl get rolebindings -n kube-system | grep eks
RoleBinding의 사양을 보려면 다음 명령에서 eks:k8s-metrics를 이전 명령 출력에서 반환된 RoleBinding으로 바꾸세요. 다음 예시는 eks:k8s-metrics RoleBinding의 사양을 반환해요.
kubectl describe rolebinding eks:k8s-metrics -n kube-system
출력 예시는 다음과 같아요.
Name: eks:k8s-metrics
Labels:
Annotations:
Role:
Kind: Role
Name: eks:k8s-metrics
Subjects:
Kind Name Namespace
---- ---- ---------
User eks:k8s-metrics