쿠버네티스에서는 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