Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | Low Level #14] RBAC(Role-Based Access Control)을 이용한 권한 관리

ygtoken 2025. 3. 16. 18:55
728x90

 

쿠버네티스에서는 보안 강화를 위해 사용자 및 서비스 계정의 권한을 제한하는 것이 필수적입니다.

이를 위해 RBAC(Role-Based Access Control)를 활용하여 특정 사용자 및 그룹에 대한 액세스를 제어하는 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

1. RBAC를 활용한 특정 네임스페이스에 대한 읽기 전용 권한 부여

2. 서비스 계정(ServiceAccount) 및 RoleBinding을 활용한 애플리케이션 권한 관리

 

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

 


1️⃣ RBAC를 활용한 특정 네임스페이스에 대한 읽기 전용 권한 부여

 

❓ 문제 상황

 

운영팀에서 개발자가 특정 네임스페이스의 리소스를 조회할 수 있도록 권한을 부여해야 합니다.

단, Pod을 생성하거나 수정하는 것은 불가능하고, 조회(ReadOnly)만 가능하도록 설정해야 합니다.

대상 사용자: developer

적용 네임스페이스: dev-namespace

권한: get, list, watch (조회 전용)

 

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

 


🛠️ 해결 방법

 

1. Role을 생성하여 해당 네임스페이스에서 읽기 전용 권한을 부여합니다.

 

2. RoleBinding을 사용하여 특정 사용자에게 Role을 연결합니다.

 


✅ 정답 Manifest (RBAC 읽기 전용 권한 부여)

 

🔹 Role 생성 (네임스페이스 내 ReadOnly 권한)

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: dev-namespace
  name: readonly-role
rules:
- apiGroups: [""]
  resources: ["pods", "services", "configmaps"]
  verbs: ["get", "list", "watch"]  # 읽기 전용 권한 부여

 

🔹 RoleBinding 생성 (사용자에게 Role 부여)

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: dev-namespace
  name: readonly-binding
subjects:
- kind: User
  name: developer  # 개발자 사용자
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: readonly-role
  apiGroup: rbac.authorization.k8s.io

 

 


📌 적용 후 예상 결과 값

 

1. 개발자가 네임스페이스의 리소스를 조회할 수 있는지 확인

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

 

💡 예상 출력 값

yes

 

2. 개발자가 Pod을 생성할 수 없는지 확인

kubectl auth can-i create pod --namespace=dev-namespace --as=developer

 

💡 예상 출력 값

no

개발자가 dev-namespace 내 리소스를 조회할 수 있지만, 수정은 불가능함

 


2️⃣ 서비스 계정(ServiceAccount) 및 RoleBinding을 활용한 애플리케이션 권한 관리

 

❓ 문제 상황

 

운영팀에서 특정 애플리케이션이 실행되는 서비스 계정에 필요한 최소 권한만 부여해야 합니다.

애플리케이션이 자신이 속한 네임스페이스에서만 Pod 정보를 조회할 수 있도록 설정해야 합니다.

서비스 계정: app-service-account

적용 네임스페이스: app-namespace

권한: Pod 조회(get, list, watch)

 

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

 


🛠️ 해결 방법

 

1. ServiceAccount를 생성하여 애플리케이션에 특정 계정을 부여합니다.

 

2. Role 및 RoleBinding을 사용하여 최소한의 권한만 할당합니다.

 


✅ 정답 Manifest (서비스 계정 및 RoleBinding 설정)

 

🔹 ServiceAccount 생성

apiVersion: v1
kind: ServiceAccount
metadata:
  name: app-service-account
  namespace: app-namespace

 

🔹 Role 생성 (Pod 조회 권한만 부여)

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: app-namespace
  name: app-role
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]  # Pod 조회 권한만 부여

 

🔹 RoleBinding 생성 (ServiceAccount에 Role 부여)

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: app-namespace
  name: app-role-binding
subjects:
- kind: ServiceAccount
  name: app-service-account  # 지정한 서비스 계정
  namespace: app-namespace
roleRef:
  kind: Role
  name: app-role
  apiGroup: rbac.authorization.k8s.io

 

 


📌 적용 후 예상 결과 값

 

1. ServiceAccount가 Pod을 조회할 수 있는지 확인

kubectl auth can-i get pods --namespace=app-namespace --as=system:serviceaccount:app-namespace:app-service-account

 

💡 예상 출력 값

yes

 

2. ServiceAccount가 다른 리소스를 조회할 수 없는지 확인

kubectl auth can-i get secrets --namespace=app-namespace --as=system:serviceaccount:app-namespace:app-service-account

 

💡 예상 출력 값

no

서비스 계정이 Pod 조회 권한만 가지고 있으며, 다른 리소스에는 접근할 수 없음

728x90