INTRO
RHOCP를 처음 구축하고나면 kubeadmin을 비활성화하고 개인 혹은 조직이 사용할 계정을 만들어야합니다.
제가 공부할 때 처음으로 만난 난관은 권한부여였는데 RHOCP의 경우 RBAC(Role-based access control)을 이용하여 권한을 부여하는 것이였습니다.
조직이 커지고 RHOCP 클러스터를 사용하는 사용자가 많아지면 권한 부여에 대한 생각을 할 수 밖에 없는데 아래의 RBAC에 대한 문서는 이러한 고민이 생길 때 참고해주시면 됩니다.
RBAC(Role-based access control)이란?
RBAC(Role-based access control)이란 그룹(조직) 및 유저의 역할에 따라 리소스에 대한 접근 권한을 제어하는 역할 기반 접근 제어입니다.
RHOCP의 API 서버에 접근하기 위해선 권한이 부여된 사용자인지(Authorized User)인지 확인한 후 접근하는 API 리소스에 대한 권한이 부여되었는지 확인하는 절차를 가집니다.
- Authentication(인증): X.509 Client Certificate(인증서), OAuth access token 등
☞ 사용자의 환경에 따라 인증 방법을 선택하여 RHOCP API Server에 접근 시도를 합니다.
☞ 이외의 인증 방법을 선택하고 싶으실 경우 아래의 kubernetes Authenticating 문서를 참고바랍니다.
- Authorzation(권한 부여): Roles, Rules, Bindings
☞ Rules: 어디서(apiGroups) 어떻게(verbs) 무엇을(resources)하는 규칙을 정의
☞ Roles: Rules의 집합
☞ Bindings: 유저/그룹과 Role을 연결하는 역할
- Admission Control(권한 부여): 허가된 사용자가 입장을 해도 되는지 유효성을 검증하고 etcd에 기록하는 단계
☞ Mutating admission: 요청된 내용에서 수정이 필요할 경우 수행하는 단계 (custom admission plugin)
☞ Validating admission: 만들어진 요청에 대해 검증하는 단계 (custom admission plugin)
권한 부여 종류 (Authorization Level)
- Cluster RBAC: 모든 프로젝트에 적용되므로 클러스터 전체에 대한 권한을 관리할 때 사용합니다.
☞ ClusterRole: 클러스터 전체(모든 프로젝트)의 Role
☞ ClusterRoleBinding: ClusterRole만 사용 가능
- Local RBAC: 지정된 프로젝트에만 적용됩니다
☞ LocalRole: 단일 프로젝트의 Role
☞ LocalRoleBinding: ClusterRole과 Local Role 모두 사용 가능
Default Cluster Role
Local 혹은 Cluster 전체에 사용자 혹은 그룹이 Binding할 수 있는 Role에 대한 내용입니다.
기본 클러스터 역할 |
설명 |
admin |
프로젝트 관리자로 모든 리소스를 수정할 수 있는 권한있음 |
cluster-admin |
클러스터 관리자로 모든 리소스와 클러스터 전체에 대한 작업 및 destory 가능 |
basic-user |
프로젝트 및 사용자에 대한 기본적인 정보를 얻을 수 있음 |
cluster-status |
클러스터의 상태 정보를 얻을 수 있음 |
cluster-reader |
대부분의 object를 가져오고 볼 수 있지만 수정 권한 없음 |
self-provisioner |
프로젝트를 만들 수 있고 생성한 프로젝트 한정 admin 권한을 가짐 |
edit |
프로젝트의 object 수정 가능하지만 Role은 보거나 수정하는 행위는 불가능함 (exec 불가) |
view |
프로젝트의 object를 볼 수만 있음 |
Q: admin과 cluster-admin Role의 차이는 무엇인가요?
A: admin은 클러스터 전체 관리 및 destory와 같이 클러스터 전체 영향을 주는 권한은 없는 점이 cluster-admin과는 다릅니다. (최상위 관리자 한명을 제외한 모든 관리자는 admin role으로 부여하는 것이 좋습니다.)
Rules에 정의되는 Verbs
무엇을 할 수 있는지 정의하는 verbs의 종류입니다.
더 많은 verbs들을 참고하려면 OpenShift API Document 혹은 Kubernetes API Document를 참고하시면 될 것같고 대부분이 해당 verbs를 많이 사용합니다.
Verb |
설명 |
Create |
새로운 리소스 생성 |
Get |
개별 리소스 조회 |
List |
여러개의 리소스 조회 |
Watch |
개별 리소스 또는 리소스 모음을 감시 가능 (실시간) |
Update |
기존 리소스 내용 전체 업데이트 |
Patch |
기존 리소스 중 일부 내용 변경 |
Delete |
개별 리소스 삭제 |
Deletecollection |
여러개의 리소스 삭제 |