Kubernetes는 컨테이너 오케스트레이션을 위한 매우 강력한 플랫폼으로, 리소스 관리와 보안을 위한 다양한 매커니즘을 제공합니다. 이번 글에서는 Kubernetes의 중요한 보안 개념 중 하나인 클러스터 역할(Cluster Roles)과 클러스터 역할 바인딩(Cluster Role Bindings)에 대해 자세히 알아보겠습니다.
Cluster Roles은 Kubernetes 클러스터 전역에서 사용될 수 있는 권한을 정의하는 개체입니다. 이 역할들은 클러스터 범위의 리소스에 대한 접근 권한을 설정하며, 개별 네임스페이스와는 관계가 없습니다. 예를 들어, 클러스터 관리자 역할을 생성하여 모든 네임스페이스에서 노드를 관리할 수 있는 권한을 부여할 수 있습니다.
클러스터 역할은 다음과 같은 리소스에 대한 권한을 포함할 수 있습니다:
클러스터 역할 바인딩은 사용자, 그룹, 혹은 서비스 계정을 클러스터 역할에 바인딩하여 권한을 부여하는 역할입니다. 클러스터 역할 바인딩을 통해 특정 사용자가 클러스터 전체에서 특정 역할을 수행할 수 있도록 설정할 수 있습니다. 예를 들어, "John" 사용자를 클러스터 관리자 역할에 바인딩하여 그가 클러스터 전체의 노드를 관리할 수 있도록 할 수 있습니다.
다음은 클러스터 역할과 클러스터 역할 바인딩의 간단한 예시 시나리오입니다:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-admin
rules:
- apiGroups: ["*"]
resources: ["nodes"]
verbs: ["get", "list", "watch", "create", "delete"]
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: cluster-admin-binding
subjects:
- kind: User
name: john@example.com
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
위의 예시에서는 "john@example.com" 사용자를 "cluster-admin" 클러스터 역할에 바인딩하여 클러스터 전체의 노드를 관리할 수 있도록 권한을 부여합니다.
클러스터 역할과 클러스터 역할 바인딩은 Kubernetes의 중요한 보안 관리 도구로, 클러스터 전체의 리소스에 대한 접근 제어를 정밀하게 관리할 수 있습니다. 이러한 기능을 활용하여 Kubernetes 클러스터의 보안성을 높이고, 리소스 관리를 효율적으로 수행할 수 있습니다. Kubernetes에서 보안 관리는 언제나 중요한 주제이며, 클러스터 역할과 클러스터 역할 바인딩을 통해 이를 체계적으로 해결할 수 있습니다.
추가: 리소스의 네임스페이스 범위 확인하는 방법
controlplane ~ ➜ kubectl api-resources NAME SHORTNAMES APIVERSION NAMESPACED KIND bindings v1 true Binding componentstatuses cs v1 false ComponentStatus configmaps cm v1 true ConfigMap endpoints ep v1 true Endpoints events ev v1 true Event limitranges limits v1 true LimitRange namespaces ns v1 false Namespace . . .