Kubernetes는 다양한 사용자와 서비스가 공존하는 환경에서 안전하고 효율적인 자원 관리를 위해 역할 기반 접근 제어 (Role-Based Access Control, RBAC) 메커니즘을 제공합니다. 이 기능을 통해 사용자나 Service Account에게 특정 작업을 수행할 수 있는 권한을 세밀하게 할당할 수 있습니다. 이번 글에서는 Kubernetes 클러스터에서 RBAC을 설정하고 관리하는 방법에 대해 알아보겠습니다.
RBAC을 구성하기 위해 먼저 역할(Role)을 정의해야 합니다. 역할은 apiGroups
, resources
, verbs
로 구성된 규칙들의 집합으로 이루어져 있습니다. 예를 들어, 개발자를 위한 역할을 생성할 때, 다음과 같은 방식으로 정의할 수 있습니다:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: developer
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["list", "get", "create", "delete"]
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["create"]
위의 예시에서는 developer 역할이 pods에 대해 list, get, create, delete를, configmaps에 대해 create 작업을 수행할 수 있도록 규칙이 정의되어 있습니다.
kubectl create role -f developer-role.yaml
역할을 정의했다면, 이제 해당 역할을 사용자나 서비스 계정에 바인딩하여 권한을 부여합니다. 예를 들어, dev-user
사용자에게 developer
역할을 할당하는 RoleBinding
을 생성하는 방법은 다음과 같습니다:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: devuser-developer-binding
subjects:
- kind: User
name: dev-user
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: developer
apiGroup: rbac.authorization.k8s.io
위 예시에서는 dev-user
사용자에게 developer
역할을 할당하고 있습니다. 이제 dev-user
는 pods
와 configmaps
에 대해 정의된 권한을 사용할 수 있습니다.
RBAC은 기본적으로 네임스페이스 단위로 작동합니다. 따라서 역할과 역할 바인딩을 생성할 때 명시적으로 어떤 네임스페이스에서 작동할지 지정해야 합니다. 예시에서는 default
네임스페이스를 기준으로 설정하였습니다. 다른 네임스페이스에서의 접근을 제한하려면 해당 네임스페이스를 명시적으로 지정해야 합니다.
RBAC 설정이 제대로 되었는지 확인하기 위해 다음 명령을 사용할 수 있습니다:
kubectl get roles
kubectl get rolebindings
kubectl describe role developer
kubectl describe rolebinding devuser-developer-binding
이러한 명령어들을 통해 역할과 역할 바인딩의 상세 정보를 확인할 수 있습니다.
RBAC을 활용하여 Kubernetes 클러스터에서 역할 기반 접근 제어를 구성하고 관리하는 방법을 살펴보았습니다. 역할을 세밀하게 정의하고, 사용자에게 적절한 권한을 부여하여 보안을 강화하고 자원 관리를 효율적으로 할 수 있습니다. Kubernetes의 강력한 RBAC 기능을 활용하여 클러스터의 보안성을 높이는 데 도움이 되기를 바랍니다.