Authorization - RBAC, Role, RoleBinding
1. RBAC(Role, RoleBinding) Overview
- 쿠버네티스가 자원을 지원하는 방법
- 역할기반으로 자원을 분배
- 쿠버네티스는 Node, PV, Namespace와 같이 클러스터 단위로 관리되는 자원과
- Pod, Svc와 같이 네임스페이스 단위로 관리되는 자원이 있음
- 네임스페이스를 만들면 자동적으로 Service Account가 만들어지거나 추가적으로 더 만들 수 있음
- Service Account에 Role과 Role Binding을 어떻게 설정하느냐에 따라 해당 Service Account는 네임스페이스 자원에만 접근할 수 있거나 클러스터 자원에도 접근할 수 있음
RoleBinding
- Role은 여러 개를 만들 수 있고, 각 Role은 Namespace 내 자원에 대해 조회나 생성이 가능하도록 권한을 줄 수 있음
- RoleBinding은 Role과 Service Account를 연결해주는 역할
- Role은 하나만 지정할 수 있고, Service Account는 여러 개 지정할 수 있음
- 그림에서 보면 SA와 SA1은 Role1과 연결 돼 Namespace A의 Pod와 SVC에 접근할 수 있음
ClusterRoleBinding
- ClusterRole: 클러스터 단위의 오브젝트를 지정할 수 있음
- ClusterRoleBinding에 SA를 추가하면 Namespace A에 있는 SA에서도 클러스터 자원에 접근할 수 있는 권한을 얻음
Namespace B를 보자
- SA --> RoleBinding --> ClusterRole2 --> Namespace B 구조로 연결되어 있음
- 이렇게 연결되면 Namespace B는 Cluster 내의 자원은 못쓰고 Namespace B의 자원만 사용 가능
- 아니 이럴거면 RoleBinding만 쓰지 왜 이렇게 복잡하게 ClusterRole2에 연결하고 그럴까
- 그 이유는, 모든 Namespace의 RoleBinding 내용을 한 번에 관리하기 위함
- ClusterRole에 연결하는 구조가 아니라 각 네임스페이스마다 RoleBinding을 따로 두게 되면
- Role에 대한 변경을 전체적으로 하고 싶을 때, 일일이 들어가서 해야하는 번거로움과 오류 위험이 있음
- 따라서 ClusterRole에 각 네임스페이스의 RoleBinding을 연결해서 한 번에 관리하기 위함
- 모든 네임스페이스에 같은 권한을 만들어서 관리를 해야할 때 유용한 방법
2. Role, RoleBinding Detail
nm-01
- 한 네임스페이스에 파드와 서비스가 있음
- 네임스페이스를 만들면 자동으로 생성되는 Service Account와 token이 있는 Secret이 있음
- Role이 있음(파드)
apiGroups: [""]
- 파드는 코어 API여서 내용이 없어도 됨
resources: pods
verbs: get, list
- 조회만 가능하게 하도록 내용을 줌
- 리소스가 작을 경우
apiGroups: ["batch"], resources: [jobs]
- RoleBinding을 만듦
roleRef: Role
연결subejects: SA
연결
- 이렇게 연결되면 Secret에 토큰 값을 가지고 사용자가 Kubernetes API Server에 접속 가능
- 이 토큰에 있는 권한에 따라 파드에만 접근 가능
nm-02
- Service Account를 admin의 권한처럼 모든 클러스터에 접근 가능하도록 하려고 함
- ClusterRole
apiGroups: [*]
resources: [*]
verbs: [*]
- ClusterRoleBinding
roleRef: ClusterRole
연결subjects: SA
연결
- 외부에 있는 사용자는 이 토큰을 갖고 Kubernets API Server에 접근
- 다른 Namespace 자원 및 클러스터 내 자원 조회 가능
출처
인프런 - 대세는 쿠버네티스
'네트워크 > k8s' 카테고리의 다른 글
[k8s] 33. Kubernetes Dashboard (0) | 2021.02.24 |
---|---|
[k8s] 32. Authorization - 실습 (0) | 2021.02.24 |
[k8s] 30. Authentication - 실습 (0) | 2021.02.24 |
[k8s] 29. Authentication - X509 Certs, kubectl, ServiceAccount (0) | 2021.02.21 |
[k8s] 28. Accessing API - Overview (0) | 2021.02.21 |