Kubernetes/Kubernetes Best Practices

[Scenario Playbook Ep.19] 🚀 RBAC 편 #1 | 사용자 권한 관리 및 Role 적용

ygtoken 2025. 3. 16. 14:42
728x90

 

쿠버네티스에서는 RBAC(Role-Based Access Control)를 활용하여 사용자의 권한을 세밀하게 관리할 수 있습니다.

이번 글에서는 RBAC를 활용한 사용자 권한 관리 방법과 특정 네임스페이스 내에서만 적용되는 Role 설정 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

1️⃣ 특정 네임스페이스에서만 권한을 부여하는 Role 설정

2️⃣ 사용자에게 권한을 적용하는 RoleBinding 설정

 

각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.

 


1️⃣ 특정 네임스페이스에서만 권한을 부여하는 Role 설정

 

❓ 문제 상황

 

운영팀에서 개발자가 특정 네임스페이스에서만 Pod을 조회할 수 있도록 권한을 제한해야 하는 요구사항이 생겼습니다.

모든 클러스터가 아니라 지정된 네임스페이스 내에서만 특정 리소스를 관리할 수 있도록 Role을 적용해야 합니다.

Role의 이름은 pod-reader이어야 합니다.

dev-namespace 네임스페이스에서만 적용되어야 합니다.

개발자는 Pod을 get, list, watch만 가능해야 하며, 수정 및 삭제 권한은 없어야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. Role을 생성하여 특정 네임스페이스 내에서만 권한을 부여해야 합니다.

apiGroups: [""]를 설정하여 기본 리소스(Pod)에 대한 접근을 설정

resources: ["pods"]를 설정하여 Pod에 대한 권한을 제한

 

2. RoleBinding을 사용하여 특정 사용자에게 Role을 할당해야 합니다.

subjects.kind: User를 사용하여 특정 사용자에게 권한 적용

 


✅ 정답 Manifest (특정 네임스페이스에서 Pod 조회 권한을 부여하는 Role)

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: dev-namespace  # 권한을 부여할 네임스페이스
  name: pod-reader  # Role 이름
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]  # 조회만 가능하도록 설정

 

 


📌 적용 후 예상 결과 값

 

1. Role 생성 확인

kubectl get roles -n dev-namespace

 

💡 예상 출력 값

NAME          AGE
pod-reader    5s

 

2. 해당 Role이 적용된 사용자 권한 확인

kubectl auth can-i list pods --as=developer -n dev-namespace

 

💡 예상 출력 값

yes

 

 


2️⃣ 사용자에게 권한을 적용하는 RoleBinding 설정

 

❓ 문제 상황

 

운영팀에서 개발자 계정(developer)이 특정 네임스페이스 내에서만 Pod을 조회할 수 있도록 제한해야 합니다.

이를 위해 RoleBinding을 사용하여 특정 사용자에게 Role을 적용해야 합니다.

RoleBinding의 이름은 read-pods-binding이어야 합니다.

pod-reader Role을 developer 사용자에게 적용해야 합니다.

dev-namespace 네임스페이스 내에서만 권한이 적용되어야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. RoleBinding을 생성하여 특정 사용자에게 Role을 할당해야 합니다.

subjects.kind: User를 설정하여 특정 사용자에게 권한 적용

roleRef를 사용하여 pod-reader Role을 참조

 

2. 개발자는 kubectl get pods -n dev-namespace 명령어를 실행할 수 있어야 합니다.

 


✅ 정답 Manifest (RoleBinding을 통해 사용자에게 권한 부여)

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: dev-namespace  # 권한을 적용할 네임스페이스
  name: read-pods-binding  # RoleBinding 이름
subjects:
- kind: User
  name: developer  # 권한을 부여할 사용자
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader  # 연결할 Role 이름
  apiGroup: rbac.authorization.k8s.io

 

 


📌 적용 후 예상 결과 값

 

1. RoleBinding 생성 확인

kubectl get rolebindings -n dev-namespace

 

💡 예상 출력 값

NAME                 ROLE             AGE
read-pods-binding    pod-reader       5s

 

2. developer 사용자가 Pod 조회 가능 여부 확인

kubectl auth can-i get pods --as=developer -n dev-namespace

 

💡 예상 출력 값

yes

 

3. developer 사용자가 Pod을 삭제할 수 있는지 확인

kubectl auth can-i delete pods --as=developer -n dev-namespace

 

💡 예상 출력 값

no
728x90