궁금한게 많은 개발자 노트

[ k8s ] 쿠버네티스 Role, RoleBinding 본문

DevOps

[ k8s ] 쿠버네티스 Role, RoleBinding

궁금한게 많은 개발자 2023. 2. 16. 14:01

Kubernetes RBAC(Role-Based Access Control)은 사용자 및 서비스 계정이 Kubernetes 클러스터의 리소스에 대한 액세스를 제어할 수 있도록 하는 메커니즘을 제공합니다. RBAC에서 Role은 리소스와 연결된 일련의 작업을 나타내는 정책의 집합입니다. Role은 API 그룹, 리소스 및 작업(동사)에 대한 세 가지 주요 속성을 정의합니다. API 그룹은 작업이 수행되는 리소스 유형을 식별하고, 리소스는 액세스 권한이 할당된 대상을 나타내며, 작업은 리소스에 수행될 수 있는 작업(예: create, delete, get, update 등)을 정의합니다.

Role은 다음과 같은 필드를 포함합니다.
kind: Role
apiVersion: Role의 API 버전
metadata: Role의 메타데이터
rules: Role에서 허용하는 작업(동사), 리소스(명사) 및 API 그룹

 

다음은 "developer" Role을 생성하는 예시입니다.

vbnet
Copy code
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: developer-role
rules:
- apiGroups: [""]
  resources: ["pods", "services", "deployments", "configmaps", "secrets"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]


이 Role은 "default" namespace 내에서 "developer"라는 Role 이름으로 생성됩니다. 

이 Role은 다음과 같은 권한을 갖습니다.

"pods", "services", "deployments", "configmaps", "secrets" 리소스에 대한 "get", "list", "watch", "create", "update", "patch", "delete" 작업 수행 가능. 이 Role은 서비스 계정 또는 사용자에 직접 할당되지 않습니다. 대신, RoleBinding을 사용하여 Role을 적용할 서비스 계정 또는 사용자를 지정합니다. 이를 통해 클러스터 리소스에 대한 액세스를 특정 서비스 계정 또는 사용자에게 할당할 수 있습니다.

 

 

RoleBinding은 Kubernetes RBAC(Role-Based Access Control)의 하나로, 사용자나 그룹에 Role을 연결하는 역할을 합니다. RoleBinding을 통해 Role과 사용자 또는 그룹 간의 연결을 정의할 수 있으며, 연결된 사용자 또는 그룹은 Role에 정의된 리소스 및 작업을 수행할 수 있습니다.

RoleBinding은 다음과 같은 필드를 포함합니다.
kind: RoleBinding
apiVersion: RoleBinding의 API 버전
metadata: RoleBinding의 메타데이터
subjects: RoleBinding을 적용할 사용자 또는 그룹
roleRef: RoleBinding이 적용될 Role
RoleBinding을 사용하여 Role을 연결하면, 사용자 또는 그룹은 Kubernetes 클러스터 내에서 작업을 수행할 수 있는 권한을 얻습니다. 이를 통해 개별 사용자 또는 그룹에 맞게 권한을 할당하고, 보안을 강화할 수 있습니다.

 

예를 들어, Role "developer-role"에 대해 Subject "developer-user"가 접근할 수 있도록 하는 RoleBinding을 만들어 볼 수 있습니다.아래는 namespace "default"에 있는 Role "developer-role"에 대해 User "developer-user"에게 권한을 부여하는 RoleBinding의 예시입니다.

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: developer-rolebinding
  namespace: default
subjects:
- kind: User
  name: developer-user
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: developer-role
  apiGroup: rbac.authorization.k8s.io


위 RoleBinding YAML 파일에서는 Role "developer-role"을 참조하고, 이 Role에 대해 User "developer-user"를 Subject로 지정합니다. 이 RoleBinding은 namespace "default"에서만 유효합니다.

이제 "developer-user"는 "default" 네임스페이스에서 "developer-role"에 정의된 자원들(pods, services, deployments, configmaps, secrets, namespaces, persistentvolumeclaims)에 대해 get, list, watch, create, update, patch, delete 권한을 가지게 됩니다.

                    +-----------------+
                    |     Role        |
                    |-----------------|
                    | apiGroups       |
                    | resources       |
                    | verbs           |
                    +-----------------+
                             ▲
                             |
                             |
                             |
+-----------------+          |         +-----------------+
|   RoleBinding   |          |         |      Role       |
|-----------------|          |         |-----------------|
| subjects        | -------- | ------> | apiGroups       |
| roleRef         |          |         | resources       |
+-----------------+          |         | verbs           |
                             |         +-----------------+
                             |
                             |
                             ▼
                     +-----------------+
                     |      User       |
                     +-----------------+

Role은 권한을 정의한 Kubernetes 오브젝트입니다. RoleBinding은 Role에 정의된 권한을 특정 사용자, 그룹 또는 ServiceAccount에 부여하는 Kubernetes 오브젝트입니다. Role과 RoleBinding은 서로 일대다 관계를 가지며, 여러 개의 RoleBinding이 한 개의 Role에 매핑될 수 있습니다.




'DevOps' 카테고리의 다른 글

[ Docker ] docker cli 주요 명령어 및 옵션  (0) 2023.03.14
[ github ] submodule이란?  (0) 2023.02.22
[ k8s ] kubernetes 개념 (node, control plane)  (0) 2023.02.13
[ k8s ] Service YAML 작성  (0) 2023.02.07
[ k8s ] Deployment YAML  (0) 2023.02.07
Comments