클라우드

kubernetes Role-based Access Control(RBAC) 역할 기반 정의(1)

CleanCoder 2024. 3. 27. 20:50

 

Role-Based Access Control (RBAC)는 사용자 또는 시스템이 수행할 수 있는 작업을 제어하는 방법이다.

 

Kubernetes와 Istio 모두 자체 RBAC 시스템을 가지고 있으며, 둘 다 사용하여 클러스터 내에서 보다 세밀한 액세스 제어를 할 수 있다.

 

1. RBAC 이해하기

  • RBAC(Role-Based Access Control): 사용자의 역할에 따라 Kubernetes 리소스에 대한 접근 권한을 제어한다.
  • 주요 구성 요소: Role, ClusterRole, RoleBinding, ClusterRoleBinding.
    • Role과 ClusterRole: 리소스에 대한 접근 권한(동작들)을 정의한다.
    • RoleBinding과 ClusterRoleBinding: 특정 사용자, 그룹 또는 서비스 어카운트에 Role 또는 ClusterRole을 할당한다.

 

2. RBAC 구성 요소

  • Role: 특정 네임스페이스 내에서 리소스에 대한 접근을 정의
  • ClusterRole: 클러스터 전체적으로 리소스에 대한 접근을 정의
  • RoleBinding: Role을 하나 이상의 사용자에게 할당
  • ClusterRoleBinding: ClusterRole을 하나 이상의 사용자에게 할당

 

3. RBAC 구성 방법

Role 생성

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

 

pod-reader 라는 role을 생성하여 default namespace의 파드를 읽을 수 있는 권한

 

주요 설정 값

  • apiGroups: API 그룹을 나타내며, 코어 그룹은 ""로 표시된다. (pods, nodes, services, namespaces 와 같은 기본적인 리소스 포함)
  • resources: pods, services, deployments 등의 Kubernetes 리소스를 지정한다.
  • verbs: 리소스에 대한 행동 권한을 나타내며, get, list, watch, create, update, patch, delete 등이 있다.

 

RoleBinding 생성

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: jane
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

 

jane이라는 사용자에게 만들었던 pod-reader 역할 부여

 

 

context 전환 및 생성한 롤 바인딩(RoleBinding) 확인

# 사용 가능한 context 확인
kubectl config get-contexts

# dev-user context로 전환
# kubectl config use-context [변경할 context]
kubectl config use-context dev-user

# 현재 사용중인 context 확인
kubectl config current-context