[Cluster Setup and Hardening] Kubernetes의 ClusterRole과 ClusterRoleBinding

IMKUNYOUNG·2024년 7월 5일
0

CKS

목록 보기
14/70

Kubernetes는 컨테이너 오케스트레이션을 위한 매우 강력한 플랫폼으로, 리소스 관리와 보안을 위한 다양한 매커니즘을 제공합니다. 이번 글에서는 Kubernetes의 중요한 보안 개념 중 하나인 클러스터 역할(Cluster Roles)클러스터 역할 바인딩(Cluster Role Bindings)에 대해 자세히 알아보겠습니다.

클러스터 역할 (Cluster Roles)

Cluster Roles은 Kubernetes 클러스터 전역에서 사용될 수 있는 권한을 정의하는 개체입니다. 이 역할들은 클러스터 범위의 리소스에 대한 접근 권한을 설정하며, 개별 네임스페이스와는 관계가 없습니다. 예를 들어, 클러스터 관리자 역할을 생성하여 모든 네임스페이스에서 노드를 관리할 수 있는 권한을 부여할 수 있습니다.

클러스터 역할은 다음과 같은 리소스에 대한 권한을 포함할 수 있습니다:

  • 노드 (Nodes)
  • 네임스페이스 없는 Pod
  • 클러스터 수준의 설정 (Cluster-wide configuration)

클러스터 역할 바인딩 (Cluster Role Bindings)

클러스터 역할 바인딩은 사용자, 그룹, 혹은 서비스 계정을 클러스터 역할에 바인딩하여 권한을 부여하는 역할입니다. 클러스터 역할 바인딩을 통해 특정 사용자가 클러스터 전체에서 특정 역할을 수행할 수 있도록 설정할 수 있습니다. 예를 들어, "John" 사용자를 클러스터 관리자 역할에 바인딩하여 그가 클러스터 전체의 노드를 관리할 수 있도록 할 수 있습니다.

예시 시나리오

다음은 클러스터 역할과 클러스터 역할 바인딩의 간단한 예시 시나리오입니다:

1. 클러스터 역할 생성:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-admin
rules:
- apiGroups: ["*"]
  resources: ["nodes"]
  verbs: ["get", "list", "watch", "create", "delete"]

2. 클러스터 역할 바인딩 생성:

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
.
.
.

0개의 댓글