Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | Medium Level #18] 멀티 테넌트 환경에서 RBAC 기반 사용자 및 그룹 관리

ygtoken 2025. 3. 17. 12:02
728x90

 

쿠버네티스에서는 하나의 클러스터를 여러 팀과 애플리케이션이 공유하는 멀티 테넌트 환경을 구성할 수 있습니다.

이 경우, 각 팀이 특정 네임스페이스 내에서만 작업할 수 있도록 제한하고, 불필요한 권한을 최소화하는 것이 중요합니다.

이를 위해 RBAC(Role-Based Access Control)를 활용하여 사용자 및 그룹별 리소스 접근을 제어하는 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

1. RBAC을 사용하여 특정 네임스페이스에서만 사용자가 리소스를 관리하도록 제한

2. 그룹 기반 접근 제어를 활용하여 여러 사용자를 일괄적으로 관리하는 방법

3. kubectl을 활용한 현재 RBAC 정책 조회 및 적용된 권한 확인

 

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

 


1️⃣ RBAC을 사용하여 특정 네임스페이스에서만 사용자가 리소스를 관리하도록 제한

 

❓ 문제 상황

 

운영팀에서 각 개발팀이 특정 네임스페이스 내에서만 애플리케이션을 배포하고 관리할 수 있도록 제한해야 합니다.

이를 위해 RBAC을 활용하여 특정 사용자가 지정된 네임스페이스에서만 리소스를 생성하고 관리할 수 있도록 설정해야 합니다.

사용자: dev-user

접근 가능 네임스페이스: dev-team

허용된 작업: Pod 및 Deployment 생성, 수정, 조회 가능

 

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

 


🛠️ 해결 방법

 

1. Role을 생성하여 특정 네임스페이스에서만 리소스를 관리할 수 있도록 설정합니다.

 

2. RoleBinding을 사용하여 사용자를 Role에 바인딩합니다.

 


✅ 정답 Manifest (Role 및 RoleBinding 설정)

 

🔹 dev-team 네임스페이스 생성

apiVersion: v1
kind: Namespace
metadata:
  name: dev-team

 

🔹 특정 네임스페이스에서만 리소스를 관리할 수 있는 Role 생성

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: dev-role
  namespace: dev-team
rules:
- apiGroups: ["apps"]
  resources: ["deployments"]
  verbs: ["get", "list", "create", "update", "delete"]
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "create", "delete"]

 

🔹 특정 사용자(dev-user)를 해당 Role에 바인딩

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: dev-user-binding
  namespace: dev-team
subjects:
- kind: User
  name: dev-user
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: dev-role
  apiGroup: rbac.authorization.k8s.io

이제 dev-user는 dev-team 네임스페이스 내에서만 Deployment 및 Pod을 관리할 수 있음

 


📌 적용 후 예상 결과 값

 

1. RBAC 정책 적용 상태 확인

kubectl get rolebinding -n dev-team

 

💡 예상 출력 값

NAME                ROLE       AGE
dev-user-binding    Role/dev-role   5m

dev-user가 dev-team 네임스페이스에서만 특정 리소스를 관리할 수 있도록 설정됨

 


2️⃣ 그룹 기반 접근 제어를 활용하여 여러 사용자를 일괄적으로 관리하는 방법

 

❓ 문제 상황

 

운영팀에서 팀원들이 늘어나면서, 각 사용자별로 RoleBinding을 개별적으로 설정하는 것이 번거로워졌습니다.

이를 해결하기 위해 RBAC을 그룹 기반으로 설정하여 동일한 역할을 여러 사용자에게 일괄적으로 적용해야 합니다.

사용자 그룹: dev-team-group

접근 가능 네임스페이스: dev-team

허용된 작업: Pod 및 Deployment 관리

 

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

 


🛠️ 해결 방법

 

1. ClusterRole을 생성하여 여러 네임스페이스에서 동일한 역할을 부여할 수 있도록 설정합니다.

 

2. ClusterRoleBinding을 사용하여 그룹을 ClusterRole에 바인딩합니다.

 


✅ 정답 Manifest (ClusterRole 및 ClusterRoleBinding 설정)

 

🔹 dev-team 그룹을 위한 ClusterRole 생성

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: dev-team-role
rules:
- apiGroups: ["apps"]
  resources: ["deployments"]
  verbs: ["get", "list", "create", "update", "delete"]
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "create", "delete"]

 

🔹 dev-team-group을 해당 Role에 바인딩

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: dev-team-binding
subjects:
- kind: Group
  name: dev-team-group
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: dev-team-role
  apiGroup: rbac.authorization.k8s.io

이제 dev-team-group에 속한 모든 사용자가 dev-team-role의 권한을 가짐

 


📌 적용 후 예상 결과 값

 

1. ClusterRoleBinding 적용 상태 확인

kubectl get clusterrolebinding dev-team-binding

 

💡 예상 출력 값

NAME                ROLE                  AGE
dev-team-binding    ClusterRole/dev-team-role   5m

dev-team-group에 속한 모든 사용자가 동일한 권한을 가지도록 설정됨

 


3️⃣ kubectl을 활용한 현재 RBAC 정책 조회 및 적용된 권한 확인

 

❓ 문제 상황

 

운영팀에서 RBAC 설정이 올바르게 적용되었는지 확인하고, 특정 사용자가 어떤 권한을 가지고 있는지 점검해야 합니다.

kubectl 명령어를 활용하여 현재 설정된 Role 및 RoleBinding 상태를 조회하고, 특정 사용자의 접근 가능 여부를 확인해야 합니다.

 

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

 


🛠️ 해결 방법

 

1. kubectl get rolebinding 및 clusterrolebinding 명령어를 사용하여 현재 적용된 RBAC 설정을 확인합니다.

 

2. kubectl auth can-i 명령어를 활용하여 특정 사용자의 권한을 테스트합니다.

 


✅ RBAC 정책 상태 확인 명령어

 

🔹 특정 네임스페이스 내의 RoleBinding 조회

kubectl get rolebinding -n dev-team

 

💡 예상 출력 값

NAME                ROLE       AGE
dev-user-binding    Role/dev-role   5m

 

🔹 특정 사용자의 권한 확인

kubectl auth can-i create deployments --as=dev-user -n dev-team

 

💡 예상 출력 값 (허용됨)

yes

 

💡 예상 출력 값 (거부됨)

no

RBAC 정책이 정상적으로 적용되었는지 확인 가능

728x90