Kubernetes의 역할 기반 액세스 제어(RBAC)

개요

역할 기반 액세스 제어(RBAC)는 Kubernetes의 중요한 보안 기능으로, 사용자, 그룹 및 애플리케이션에 대한 액세스 정책을 정의하고 적용할 수 있도록 합니다. RBAC를 활용하면 승인된 엔터티만 특정 작업을 수행할 수 있도록 제한할 수 있어 보안 위험을 줄일 수 있습니다.

RBAC의 핵심 개념

Kubernetes의 RBAC는 네 가지 주요 개념을 기반으로 합니다:

1. Role 및 ClusterRole

  • Role: 특정 네임스페이스 내에서 권한을 정의합니다.
  • ClusterRole: 클러스터 전체에 적용되는 Role과 유사하지만, 네임스페이스에 제한되지 않습니다.

2. RoleBinding 및 ClusterRoleBinding

  • RoleBinding: 특정 네임스페이스 내에서 사용자 또는 서비스 계정에 Role을 할당합니다.
  • ClusterRoleBinding: 클러스터 수준에서 사용자, 그룹 또는 서비스 계정에 ClusterRole을 할당합니다.

3. 주체(Subjects)

  • RoleBinding 또는 ClusterRoleBinding을 통해 권한이 부여되는 엔터티(사용자, 그룹 또는 서비스 계정)입니다.

4. 동작(Verbs), API 그룹 및 리소스

  • Verbs(동작): get, list, create, delete 등의 작업을 의미합니다.
  • API Groups: Kubernetes API 그룹(예: apps, batch, rbac.authorization.k8s.io).
  • Resources(리소스): pods, services, deployments 등의 Kubernetes 객체.

예제: 역할 정의 및 바인딩

1단계: Role 생성

다음 예제는 특정 네임스페이스 내에서 사용자에게 Pod 읽기 권한을 부여하는 Role을 정의합니다.

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

2단계: Role을 사용자에게 바인딩

이 RoleBinding은 pod-reader Role을 example-user에게 할당합니다.

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: pod-reader-binding
  namespace: default
subjects:
- kind: User
  name: example-user
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

클러스터 전체 액세스를 위한 ClusterRoles

클러스터 전역에서 액세스를 부여하려면 ClusterRoleClusterRoleBinding을 사용합니다.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-admin-read
rules:
- apiGroups: [""]
  resources: ["pods", "nodes", "services"]
  verbs: ["get", "list"]
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cluster-admin-read-binding
subjects:
- kind: User
  name: admin-user
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cluster-admin-read
  apiGroup: rbac.authorization.k8s.io

RBAC 모범 사례

  1. 최소 권한 원칙 준수: 각 사용자 또는 애플리케이션에 필요한 최소한의 권한만 부여합니다.
  2. RoleBinding 대신 ClusterRoleBinding 최소화: 가능한 경우 네임스페이스별로 권한을 제한합니다.
  3. 정기적인 RBAC 정책 검토: 불필요한 권한이 남아 있지 않도록 정기적으로 검토합니다.
  4. 그룹을 활용한 관리 용이성 증대: 개별 사용자보다 그룹에 역할을 할당하여 관리 편의성을 높입니다.
  5. 액세스 모니터링 및 감사 수행: Kubernetes 감사 기능을 활용하여 역할 할당 및 사용 기록을 추적합니다.

결론

RBAC는 Kubernetes 환경에서 액세스 제어를 강화하는 강력한 보안 메커니즘입니다. Role, RoleBinding, ClusterRole 및 ClusterRoleBinding을 올바르게 정의하면 Kubernetes 리소스에 대한 보안과 거버넌스를 효과적으로 유지할 수 있습니다

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다