일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- DevOps
- leetcode
- Python
- POD
- AWS
- EKS
- terraform
- YAML
- ansible
- Kubernetes
- asgi
- EC2
- 자바스크립트
- intervals
- WSGI
- K8S
- docker
- elasticsearch
- Service
- ebs
- github
- FastAPI
- Django
- IAC
- IAM
- Deployment
- 쿠버네티스
- dockerfile
- asyncio
- event loop
- Today
- Total
궁금한게 많은 개발자 노트
[ k8s ] 쿠버네티스 Role, RoleBinding 본문
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 |