개요
역할 기반 액세스 제어(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
클러스터 전역에서 액세스를 부여하려면 ClusterRole
및 ClusterRoleBinding
을 사용합니다.
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 모범 사례
- 최소 권한 원칙 준수: 각 사용자 또는 애플리케이션에 필요한 최소한의 권한만 부여합니다.
- RoleBinding 대신 ClusterRoleBinding 최소화: 가능한 경우 네임스페이스별로 권한을 제한합니다.
- 정기적인 RBAC 정책 검토: 불필요한 권한이 남아 있지 않도록 정기적으로 검토합니다.
- 그룹을 활용한 관리 용이성 증대: 개별 사용자보다 그룹에 역할을 할당하여 관리 편의성을 높입니다.
- 액세스 모니터링 및 감사 수행: Kubernetes 감사 기능을 활용하여 역할 할당 및 사용 기록을 추적합니다.
결론
RBAC는 Kubernetes 환경에서 액세스 제어를 강화하는 강력한 보안 메커니즘입니다. Role, RoleBinding, ClusterRole 및 ClusterRoleBinding을 올바르게 정의하면 Kubernetes 리소스에 대한 보안과 거버넌스를 효과적으로 유지할 수 있습니다