리소스 표현과 동작
쿠버네티스는 리소스 조작을 API Server에 집약시키고 있습니다. 그리고 API Server는 REST 형식으로 리퀘스트를 받습니다. URL로 리소스를 표현하고 거기에 대해 HTTP 메소드로 조작을 합니다.
쿠버네티스의 RBAC에서는 조작을 Verb라고 부릅니다. 참조, 작성, 갱신, 부분 갱신, 삭제 조작에 각각 Verb가 있어서 HTTP 메서드와 대응하고 있습니다.
HTTP Method | Verb | Verb(컬렉션) |
GET, HEAD | get(watch) | list(watch) |
POST | create | - |
PUT | update | - |
PATCH | patch | - |
DELETE | delete | deletecollection |
<Verb에 대응하는 HTTP 메서드>
파드, 서비스, 시크릿과 같은 리소스에 대해 각 계정이 갖고 있는 '역할'이 이런 Verb를 사용할 수 있는지 없는지를 정의한다. 이것이 쿠버네티스 RBAC의 개념입니다.
Role과 RoleBinding
각 계정에 대해 액세스할 수 있는 리소스와 조작을 정의한다는 것의 개념은 쉽지만, 모든 계정별로 각 리소스와의 조합을 정의하는 것은 힘든 일입니다. 그래서 쿠버네티스는 공통화할 수 있는 역할, 즉 Role을 만들어 액세스할 수 있는 리소스의 종류와 사용할 수 있는 Verb를 모아서 정의할 수 있도록 만들었습니다.
그리고 Role과 계정을 연결하는 것이 RoleBinding 입니다.
예를 들어 Dev라는 역할은 강력한 권한을 가진 개발자라고 가정합니다. 그리고 파드와 그 상위 오브젝트, 디플로이먼트와 리플리카셋과 관련된 모든 조작을 할 수 있도록 하고 싶다고 합니다. 이 경우 Role 'Dev'에는 이와 같이 허가하고 싶은 리소스를 정의하고 Verb를 허가합니다.
또 최소 권한의 예로 파드를 참조할 수 있는 Pod-Reader라는 역할은 허가할 리소스가 파드뿐이며, Verb는 참조 관련된 것 뿐입니다.
즉, Role의 작성이란 허가할 리소스와 허가할 Verb를 정의하는 것입니다. 그리고 Role을 RoleBinding으로 계정에 할당합니다. 역할을 공통화해 두면 계정별로 허가할 리소스나 Verb를 일일이 쓸 필요가 없습니다.
또한 쿠버네티스의 RBAC에는 Role외에도 ClusterRole이 있습니다. 둘의 차이는 대상 범위로, Role 대상 범위는 네임스페이스이며, ClusterRole은 클러스터 전체입니다. ClusterRole을 계정과 연결할 때는 RoleBinding이 아니라 ClusterRoleBinding을 사용합니다.
쿠버네티스의 Role Based Access Control에 대하여 알아보았습니다.
참고
http://www.yes24.com/Product/Goods/78875805
'About > Kubernetes' 카테고리의 다른 글
[k8s] 인그레스(Ingress) (0) | 2022.02.11 |
---|---|
[k8s] StatefulSet(스테이트풀셋) (2) | 2022.02.10 |
[k8s] 쿠버네티스의 인증과 인가 (0) | 2022.02.04 |
[k8s] 쿠버네티스의 계정 - User Account, Service Account (0) | 2022.02.03 |
[k8s] Volume - PV/PVC(퍼시스턴트 볼륨과 퍼시스턴트 볼륨 클레임) (0) | 2022.01.27 |