쿠버네티스에서 RBAC(Role-Based Access Control)은 어떻게 설정하나요?
_____A1: RBAC(Role-Based Access Control)는 쿠버네티스 클러스터 내에서 사용자나 서비스 계정에 대해 권한(Role)을 정의하고 이를 사용자/그룹에 바인딩하여 리소스 접근을 제어하는 보안 메커니즘입니다.
Q2: 쿠버네티스에서 RBAC을 활성화하려면 어떻게 해야 하나요?
A2: 대부분의 최신 쿠버네티스 클러스터는 기본적으로 RBAC이 활성화되어 있습니다. 직접 구성하는 경우, API 서버 실행 시 `--authorization-mode=RBAC` 플래그를 포함해야 합니다.
Q3: RBAC 설정을 위한 주요 리소스 종류는 무엇이 있나요?
A3: RBAC 주요 리소스는 다음과 같습니다.
- `Role`: 네임스페이스 단위 권한 정의
- `ClusterRole`: 클러스터 전체 또는 하나 이상의 네임스페이스에 적용 가능한 권한 정의
- `RoleBinding`: 특정 네임스페이스에서 사용자/그룹과 Role 연결
- `ClusterRoleBinding`: 클러스터 전체에 사용자/그룹과 ClusterRole 연결
Q4: Role과 ClusterRole의 차이는 무엇인가요?
A4: Role은 특정 네임스페이스 내 리소스 접근권한을 정의하고, ClusterRole은 클러스터 범위 또는 여러 네임스페이스에 걸친 권한을 정의합니다. ClusterRole은 네임스페이스 없는 리소스에도 권한을 줄 수 있습니다.
Q5: RBAC 역할(Role) 정의 예제는 어떻게 작성하나요?
A5: 예를 들어 네임스페이스 내에서 파드를 조회하는 권한을 가진 Role은 아래와 같이 정의합니다.
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: example-namespace
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
```
Q6: RoleBinding을 통해 역할을 사용자에게 부여하는 방법은?
A6: 위 Role을 특정 사용자에게 바인딩하는 예시는 다음과 같습니다.
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods-binding
namespace: example-namespace
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
```
Q7: ClusterRole과 ClusterRoleBinding 예제는 무엇인가요?
A7: 클러스터 전체에서 노드 조회 권한을 주는 ClusterRole과 이를 사용자에게 바인딩하는 예시는 다음과 같습니다.
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: node-reader
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "list", "watch"]
```
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: read-nodes-global
subjects:
- kind: User
name: john
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: node-reader
apiGroup: rbac.authorization.k8s.io
```
Q8: RBAC에서 User, Group, ServiceAccount 차이는 무엇인가요?
A8:
- User: 실제 사용자 계정(주로 외부 인증 시스템과 연계)
- Group: 사용자들의 그룹 (예: 운영팀)
- ServiceAccount: 쿠버네티스 내에서 파드가 사용하는 계정, 자동 생성 가능
Q9: RBAC 권한이 제대로 적용됐는지 확인하려면 어떻게 해야 하나요?
A9: `kubectl auth can-i` 명령어를 통해 특정 사용자 또는 서비스 계정이 특정 작업을 수행할 권한이 있는지 테스트할 수 있습니다.
예)
```bash
kubectl auth can-i get pods --as=jane -n example-namespace
```
Q10: RBAC 설정 변경 후 다시 로드할 필요가 있나요?
A10: RBAC 리소스(YAML)를 수정한 후 `kubectl apply` 등으로 변경사항을 적용하면 API 서버가 자동으로 변경사항을 반영하기 때문에 별도 재시작이나 로딩 작업은 필요 없습니다.
---
요약하면, 쿠버네티스 RBAC 설정은 Role/ClusterRole과 RoleBinding/ClusterRoleBinding 리소스를 정의하고, 이를 사용자/그룹/서비스계정에 바인딩하는 방식으로 구성하며, 이를 통해 클러스터 리소스에 대한 세분화된 접근제어가 가능합니다.
RBAC를 사용하면 사용자가 수행할 수 있는 작업을 세밀하게 조정할 수 있으며, 이를 통해 보안성을 높이고 관리 효율성을 향상시킬 수 있습니다.
다음은 쿠버네티스에서 RBAC를 설정하는 방법에 대한 자세한 설명입니다.
1. RBAC의 구성 요소RBAC는 다음과 같은 주요 구성 요소로 이루어져 있습니다:- Role : 특정 네임스페이스 내에서 리소스에 대한 권한을 정의합니다.
예를 들어, 특정 네임스페이스에서 Pod를 생성하거나 삭제할 수 있는 권한을 부여할 수 있습니다.
- ClusterRole : 클러스터 전체에서 사용할 수 있는 권한을 정의합니다.
네임스페이스에 구애받지 않고 모든 리소스에 대한 권한을 설정할 수 있습니다.
- RoleBinding : 특정 Role을 사용자 또는 그룹에 바인딩하여 해당 Role의 권한을 부여합니다.
RoleBinding은 특정 네임스페이스 내에서만 유효합니다.
- ClusterRoleBinding : ClusterRole을 사용자 또는 그룹에 바인딩하여 클러스터 전체에서 해당 권한을 부여합니다.
2. RBAC 설정 단계RBAC를 설정하는 과정은 다음과 같습니다:
2.1. Role 또는 ClusterRole 생성먼저, Role 또는 ClusterRole을 정의해야 합니다.
YAML 파일을 사용하여 정의할 수 있습니다.
예시: Role 생성 ```yamlapiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata: namespace: my-namespace name: my-rolerules:- apiGroups: [""] ""는 core API 그룹을 의미 resources: ["pods"] verbs: ["get", "list", "watch"]``` 예시: ClusterRole 생성 ```yamlapiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: my-cluster-rolerules:- apiGroups: [""] core API 그룹 resources: ["pods"] verbs: ["get", "list", "watch", "create", "delete"]```
2.2. RoleBinding 또는 ClusterRoleBinding 생성Role 또는 ClusterRole을 생성한 후, 이를 사용자 또는 그룹에 바인딩해야 합니다.
예시: RoleBinding 생성 ```yamlapiVersion: rbac.authorization.k8s.io/v1kind: RoleBindingmetadata: name: my-role-binding namespace: my-namespacesubjects:- kind: User name: my-user 사용자 이름 apiGroup: rbac.authorization.k8s.ioroleRef: kind: Role name: my-role apiGroup: rbac.authorization.k8s.io``` 예시: ClusterRoleBinding 생성 ```yamlapiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: my-cluster-role-bindingsubjects:- kind: User name: my-user 사용자 이름 apiGroup: rbac.authorization.k8s.ioroleRef: kind: ClusterRole name: my-cluster-role apiGroup: rbac.authorization.k8s.io```
3. RBAC 적용위에서 정의한 YAML 파일을 사용하여 RBAC 리소스를 클러스터에 적용합니다.
다음 명령어를 사용하여 적용할 수 있습니다.
```bashkubectl apply -f role.yamlkubectl apply -f rolebinding.yaml```
4. RBAC 검증RBAC 설정이 올바르게 적용되었는지 확인하기 위해, 사용자가 특정 리소스에 접근할 수 있는지 테스트할 수 있습니다.
예를 들어, `kubectl` 명령어를 사용하여 Pod 목록을 가져오는 작업을 시도해 볼 수 있습니다.
```bashkubectl get pods --namespace=my-namespace --as=my-user```
5. RBAC 모니터링 및 관리RBAC 설정 후, 클러스터의 보안을 유지하기 위해 정기적으로 권한을 검토하고 필요에 따라 수정해야 합니다.
또한, 클러스터의 로그를 모니터링하여 비정상적인 접근 시도를 감지하는 것이 중요합니다.
결론쿠버네티스에서 RBAC를 설정하는 것은 클러스터의 보안을 강화하고, 사용자와 그룹에 대한 권한을 세밀하게 조정하는 데 필수적입니다.
Role, ClusterRole, RoleBinding, ClusterRoleBinding을 통해 권한을 정의하고 적용하는 과정을 이해하고 활용함으로써, 안전하고 효율적인 클러스터 운영이 가능해집니다.
작성자:
이윤희 [비회원]
| 작성일자: 1년 전
2024-09-05 03:45:23
조회수: 251 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 251 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.