📝 쿠버네티스 클러스터 권한 관리 시험 부록
📑 목차
🎓 CKA/CKAD 실습 문제
시험 팁
CKA/CKAD에서 RBAC 문제는 보통 15-20분 내에 해결해야 하는 실습 문제로 출제됩니다. 문법을 외우기보다는 패턴을 이해하는 것이 중요합니다.
🔥 문제 1: ServiceAccount와 Role 생성 (CKA 단골)
실제 시험 문제 유형
문제:
finance네임스페이스에budget-viewerServiceAccount를 생성하고, 해당 SA가 pods와 services를 읽을 수 있도록 Role과 RoleBinding을 설정하세요.
❌ 많이 틀리는 실수들:
apiGroups: ["apps"]써서 pods 접근 안됨 →apiGroups: [""]써야 함verbs: ["read"]써서 오류 →verbs: ["get", "list", "watch"]써야 함- RoleBinding에서 subjects 필드 문법 틀림
# ✅ 정답 풀이 과정
# 1. 네임스페이스 생성
kubectl create namespace finance
# 2. ServiceAccount 생성
kubectl create serviceaccount budget-viewer -n finance
# 3. Role 생성 (YAML 방식)
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: finance
name: budget-viewer-role
rules:
- apiGroups: [""] # 핵심: pods, services는 core API
resources: ["pods", "services"]
verbs: ["get", "list", "watch"] # 핵심: read 권한은 이 3개
EOF
# 4. RoleBinding 생성
kubectl create rolebinding budget-viewer-binding \
--role=budget-viewer-role \
--serviceaccount=finance:budget-viewer \
-n finance
# 5. 검증
kubectl auth can-i get pods -n finance --as=system:serviceaccount:finance:budget-viewer🔥 문제 2: 네임스페이스별 제한 권한 (CKAD 단골)
실제 시험 문제 유형
문제:
developer사용자가development네임스페이스에서는 모든 리소스를 관리할 수 있지만,production네임스페이스에서는 읽기만 가능하도록 설정하세요.
❌ 많이 틀리는 실수들:
- ClusterRole을 써야 할 곳에 Role 사용
- 네임스페이스 지정 누락
- edit vs view ClusterRole 혼동
# ✅ 정답 풀이 과정
# 1. development 네임스페이스에서 편집 권한
kubectl create rolebinding dev-admin-binding \
--clusterrole=edit \
--user=developer \
-n development
# 2. production 네임스페이스에서 읽기 권한
kubectl create rolebinding prod-view-binding \
--clusterrole=view \
--user=developer \
-n production
# 3. 검증
kubectl auth can-i create deployments -n development --as=developer
kubectl auth can-i create deployments -n production --as=developer
kubectl auth can-i get deployments -n production --as=developer🔥 문제 3: 클러스터 전체 권한 관리 (CKA 고급)
실제 시험 문제 유형
문제:
cluster-readerServiceAccount를 생성하고, 클러스터 전체에서 nodes와 persistentvolumes를 조회할 수 있지만 수정은 불가능하도록 설정하세요.
❌ 많이 틀리는 실수들:
- Role 대신 ClusterRole 써야 하는데 헷갈림
- ClusterRoleBinding에서 네임스페이스 지정
- 클러스터 리소스 vs 네임스페이스 리소스 구분 못함
# ✅ 정답 풀이 과정
# 1. ServiceAccount 생성 (기본 네임스페이스)
kubectl create serviceaccount cluster-reader
# 2. 커스텀 ClusterRole 생성
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-reader-role
rules:
- apiGroups: [""]
resources: ["nodes", "persistentvolumes"] # 클러스터 리소스
verbs: ["get", "list", "watch"]
EOF
# 3. ClusterRoleBinding 생성 (네임스페이스 지정하면 안됨!)
kubectl create clusterrolebinding cluster-reader-binding \
--clusterrole=cluster-reader-role \
--serviceaccount=default:cluster-reader
# 4. 검증
kubectl auth can-i get nodes --as=system:serviceaccount:default:cluster-reader
kubectl auth can-i delete nodes --as=system:serviceaccount:default:cluster-reader🏗️ GCP Professional Cloud Architect 시나리오 문제
GCP PCA 시험 특징
GCP Professional Cloud Architect는 실제 비즈니스 시나리오를 기반으로 한 복합적인 아키텍처 문제가 출제됩니다. 단순한 명령어보다는 설계 원칙과 최선의 사례를 묻습니다.
🏢 시나리오 1: 엔터프라이즈 멀티 환경 권한 설계
실제 GCP PCA 시험 문제 유형
배경: 글로벌 핀테크 회사에서 GKE를 사용하여 마이크로서비스를 운영합니다. 개발팀은 서울, 운영팀은 도쿄, 보안팀은 싱가포르에 위치합니다. 각 팀은 서로 다른 권한이 필요하며, 규정 준수를 위해 감사 로그가 필요합니다.
요구사항:
- 개발팀: development 네임스페이스에서 모든 작업, production은 읽기만
- 운영팀: 모든 네임스페이스에서 배포 관리, 단 RBAC 설정은 불가
- 보안팀: 클러스터 전체 감사, 모든 권한 변경 모니터링
- 지역별 데이터 보호 법규 준수
질문: 이 요구사항을 만족하는 최적의 GKE 권한 아키텍처는?
A) 각 팀별로 별도 GKE 클러스터 생성, Cloud IAM으로만 권한 관리 B) 단일 GKE 클러스터, Kubernetes RBAC + Google Cloud IAM 통합, Workload Identity 활성화 C) GKE Autopilot 모드, 팀별 Google Group 생성, 네임스페이스별 IAM 정책 적용 D) 멀티 클러스터 구성, 지역별 클러스터 분리, Binary Authorization 적용
정답 및 해설
정답: B) 단일 GKE 클러스터, Kubernetes RBAC + Google Cloud IAM 통합, Workload Identity 활성화
해설:
- 단일 클러스터: 비용 효율적이며 중앙집중식 관리 가능
- RBAC + IAM 통합: 세밀한 권한 제어 + 구글 계정 연동
- Workload Identity: 파드가 GCP 서비스 접근 시 보안 강화
- 감사 로그: Cloud Audit Logs로 모든 RBAC 변경 추적 가능
구현 예시:
# 개발팀용 Google Group 권한
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="group:developers@company.com" \
--role="roles/container.developer"
# Kubernetes RBAC 설정
kubectl create rolebinding dev-full-access \
--clusterrole=edit \
--group=developers@company.com \
-n development
kubectl create rolebinding dev-read-prod \
--clusterrole=view \
--group=developers@company.com \
-n production다른 선택지가 부적절한 이유:
- A) 클러스터 분리는 비용 증가, 관리 복잡성 증가
- C) Autopilot은 RBAC 커스터마이징 제한
- D) 과도한 복잡성, 요구사항에 Binary Authorization 불필요
🚀 시나리오 2: CI/CD 파이프라인 보안 설계
실제 GCP PCA 시험 문제 유형
배경: 스타트업에서 Cloud Build를 사용하여 GKE에 자동 배포하는 CI/CD 파이프라인을 구축합니다. 보안팀에서는 파이프라인이 최소 권한 원칙을 따르고, 프로덕션 배포는 추가 승인이 필요하다고 요구했습니다.
제약사항:
- Cloud Build 서비스 계정은 필요한 최소 권한만 보유
- 개발 환경은 자동 배포, 프로덕션은 수동 승인 후 배포
- 모든 배포 과정은 감사 가능해야 함
- 비용 최적화 필수
질문: 이 요구사항을 충족하는 최적의 아키텍처는?
A) Cloud Build 서비스 계정에 Editor 권한 부여, Cloud Functions로 승인 프로세스 구현 B) 환경별 서로 다른 Cloud Build 트리거, 최소 권한 커스텀 Role, Binary Authorization 적용 C) Cloud Deploy 사용, 환경별 파이프라인 분리, Workload Identity로 권한 관리 D) Jenkins on GKE 구축, Kubernetes RBAC으로 배포 권한 관리, Spinnaker 추가
정답 및 해설
정답: C) Cloud Deploy 사용, 환경별 파이프라인 분리, Workload Identity로 권한 관리
해설:
- Cloud Deploy: Google의 관리형 CD 서비스, 승인 워크플로우 내장
- 환경별 분리: development → staging → production 단계적 배포
- Workload Identity: 서비스 계정 최소 권한 원칙 적용
- 감사: Cloud Deploy는 모든 배포 과정 자동 로깅
구현 아키텍처:
# Cloud Deploy 파이프라인 예시
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: app-pipeline
spec:
stages:
- targetId: dev-cluster
profiles: [dev]
- targetId: staging-cluster
profiles: [staging]
strategy:
canary:
runtimeConfig:
kubernetes:
serviceNetworking:
service: app-service
- targetId: prod-cluster
profiles: [prod]
requireApproval: true # 수동 승인 필요비용 효율성:
- Cloud Deploy는 사용한만큼 과금
- 별도 인프라 관리 불필요
- Google 관리형 서비스로 운영 오버헤드 최소
다른 선택지 문제점:
- A) Editor 권한은 과도한 권한, 보안 위험
- B) Binary Authorization은 요구사항에 과도함
- D) Jenkins 관리 비용, 복잡성 증가
🔐 시나리오 3: 멀티 테넌트 SaaS 권한 설계
실제 GCP PCA 시험 문제 유형
배경: SaaS 플랫폼을 운영하는 회사에서 각 고객사별로 격리된 환경을 제공해야 합니다. 고객사는 자신의 애플리케이션만 관리할 수 있어야 하고, 플랫폼 팀은 모든 고객사 환경을 모니터링할 수 있어야 합니다.
요구사항:
- 고객사별 네임스페이스 격리
- 고객사는 자신의 네임스페이스만 접근
- 플랫폼 팀은 모든 환경 모니터링
- 리소스 쿼터 적용으로 비용 제어
- GDPR 준수를 위한 데이터 위치 제어
질문: 이 멀티 테넌트 요구사항에 가장 적합한 GKE 아키텍처는?
A) 고객사별 별도 GKE 클러스터, VPC Peering으로 연결 B) 단일 클러스터, 네임스페이스 기반 테넌시, Network Policy + Resource Quota 적용 C) GKE Autopilot, 고객사별 Google Project 분리, Shared VPC 사용 D) 멀티 리전 클러스터, Binary Authorization, Pod Security Standards 적용
정답 및 해설
정답: C) GKE Autopilot, 고객사별 Google Project 분리, Shared VPC 사용
해설:
- Project 분리: 완전한 테넌트 격리, 청구 분리
- GKE Autopilot: 자동 리소스 관리, 보안 강화, 비용 최적화
- Shared VPC: 중앙집중식 네트워크 관리, GDPR 준수 용이
- IAM 프로젝트 레벨: 고객사별 완전 격리 보장
아키텍처 예시:
# 고객사별 프로젝트 생성
gcloud projects create customer-a-project
gcloud projects create customer-b-project
# Shared VPC 연결 (중앙 관리)
gcloud compute shared-vpc associated-projects add customer-a-project \
--host-project=platform-shared-vpc
# 고객사별 Autopilot 클러스터
gcloud container clusters create-auto customer-a-cluster \
--project=customer-a-project \
--region=europe-west1 # GDPR 준수장점:
- 완전한 격리: 프로젝트 레벨 분리로 최강 보안
- 자동 스케일링: Autopilot의 서버리스 특성
- 비용 투명성: 고객사별 청구 분리
- 규정 준수: 프로젝트별 데이터 위치 제어
다른 선택지 한계:
- A) 네트워크 복잡성, 관리 오버헤드 증가
- B) 네임스페이스 격리는 완전한 멀티테넌시에 부족
- D) Binary Authorization은 요구사항과 무관
🧩 실전 미니퀴즈
퀴즈 1: RBAC 리소스 매칭
문제
다음 중 네임스페이스 리소스가 아닌 것은? A) pods B) services C) nodes D) deployments
정답 확인
정답: C) nodes
해설:
- nodes는 클러스터 리소스로 네임스페이스에 속하지 않음
- pods, services, deployments는 모두 네임스페이스 리소스
- 클러스터 리소스에는 nodes, persistentvolumes, clusterroles 등이 있음
# 확인 방법
kubectl api-resources --namespaced=false | grep nodes
kubectl api-resources --namespaced=true | grep pods퀴즈 2: verbs 권한 이해
문제
kubectl get pods를 실행하려면 최소 어떤 verbs 권한이 필요한가? A) get B) list C) watch D) get, list
정답 확인
정답: B) list
해설:
kubectl get pods(복수형)는 list 권한 필요kubectl get pod my-pod(단수형)는 get 권한 필요- watch는 실시간 변경 감시용 (
kubectl get pods -w)
# 권한 테스트
kubectl auth can-i get pods # list 권한으로도 가능
kubectl auth can-i list pods # 정확한 권한퀴즈 3: GCP 아키텍처 선택
문제
스타트업에서 개발 속도를 최우선으로 하면서도 기본적인 보안은 유지하려고 합니다. 가장 적합한 GKE 설정은? A) GKE Standard, cluster-admin 권한으로 시작 B) GKE Autopilot, Workload Identity 활성화, 기본 RBAC 유지
C) GKE Standard, Binary Authorization + Pod Security Standards D) 멀티 클러스터, 환경별 분리, 복잡한 RBAC 설계
정답 확인
정답: B) GKE Autopilot, Workload Identity 활성화, 기본 RBAC 유지
해설:
- 개발 속도: Autopilot은 설정 최소화, 자동 관리
- 기본 보안: Workload Identity, Pod Security Standards 기본 적용
- 단순성: 복잡한 설정 없이 Google 모범 사례 적용
- 비용 효율: 사용한 리소스만 과금
스타트업에게 적합한 이유:
- 인프라 관리 부담 최소
- 자동 보안 설정 적용
- 빠른 시작 가능
- 성장에 따라 추가 설정 가능
퀴즈 4: ClusterRole vs Role 선택
문제
모든 네임스페이스의 pods를 조회할 수 있는 권한을 주려면? A) Role + RoleBinding (각 네임스페이스마다) B) ClusterRole + ClusterRoleBinding C) ClusterRole + RoleBinding (각 네임스페이스마다) D) B와 C 모두 가능
정답 확인
정답: D) B와 C 모두 가능
해설:
- 방법 B: ClusterRole + ClusterRoleBinding = 모든 네임스페이스에 대한 권한
- 방법 C: ClusterRole + RoleBinding = 특정 네임스페이스에서만 ClusterRole 권한 사용
- 방법 A는 네임스페이스별로 중복 설정해야 하므로 비효율적
# 방법 B (추천)
kubectl create clusterrolebinding all-pods-reader \
--clusterrole=view \
--user=reader
# 방법 C (네임스페이스별 제한)
kubectl create rolebinding pods-reader \
--clusterrole=view \
--user=reader \
-n specific-namespace📚 시험 대비 전략
🎯 CKA/CKAD 실습 시험 전략
실습 시험 핵심 팁
- 명령어 암기:
kubectl create role/rolebinding기본 문법- YAML 구조: apiGroups, resources, verbs 관계 이해
- 검증 습관:
kubectl auth can-i로 항상 확인- 시간 관리: RBAC 문제는 10분 이내 해결 목표
📝 암기 필수 명령어
# Role 생성
kubectl create role pod-reader --verb=get,list,watch --resource=pods
# RoleBinding 생성 (사용자)
kubectl create rolebinding pod-reader-binding --role=pod-reader --user=jane
# RoleBinding 생성 (ServiceAccount)
kubectl create rolebinding sa-binding --role=pod-reader --serviceaccount=default:my-sa
# ClusterRoleBinding 생성
kubectl create clusterrolebinding cluster-reader --clusterrole=view --user=jane
# 권한 확인
kubectl auth can-i create pods --as=jane
kubectl auth can-i get pods --namespace=default --as=system:serviceaccount:default:my-sa🏗️ GCP Professional Cloud Architect 전략
GCP PCA 시험 핵심 팁
- 시나리오 이해: 비즈니스 요구사항을 기술적 해결책으로 변환
- 비용 최적화: 항상 비용 효율성 고려
- Google 서비스 활용: 관리형 서비스 우선 선택
- 확장성: 미래 성장을 고려한 아키텍처 설계
📋 GCP 권한 관리 핵심 개념
| 상황 | 권장 솔루션 | 이유 |
|---|---|---|
| 스타트업 | GKE Autopilot + 기본 RBAC | 관리 부담 최소, 빠른 시작 |
| 엔터프라이즈 | GKE Standard + 커스텀 RBAC | 세밀한 제어, 규정 준수 |
| 멀티테넌트 | 프로젝트 분리 + Shared VPC | 완전한 격리, 중앙 관리 |
| CI/CD | Cloud Deploy + Workload Identity | 자동 승인, 최소 권한 |
💡 실전 연습 방법
효과적인 학습 전략
- 매일 10분 연습: 간단한 RBAC 시나리오 반복 실습
- 실수 노트: 틀린 문제와 이유를 기록하여 패턴 파악
- 시간 측정: 각 문제 유형별 해결 시간 단축 연습
- 검증 습관: 모든 설정 후
kubectl auth can-i로 확인
⚠️ 시험 시 주의사항
공통 실수 방지
CKA/CKAD:
- 네임스페이스 확인: 문제에서 요구하는 네임스페이스 정확히 사용
- 문법 정확성: 하이픈(-) vs 언더스코어(_) 구분
- 검증 필수: 설정 완료 후 반드시 권한 확인
GCP PCA:
- 비즈니스 요구사항: 기술적 해결책보다 비즈니스 목표 우선
- 비용 고려: 과도한 솔루션보다는 적절한 수준의 해결책
- Google Way: GCP 네이티브 서비스 활용 우선
🎯 마지막 점검 종합 문제
CKA 종합 문제
monitoring네임스페이스의prometheusServiceAccount가 클러스터의 모든 pods, services, endpoints를 읽을 수 있도록 설정하세요. (5분 내 해결)
정답 및 해설
# 1. 네임스페이스와 ServiceAccount 생성
kubectl create namespace monitoring
kubectl create serviceaccount prometheus -n monitoring
# 2. ClusterRole 생성 (클러스터 전체 리소스 접근)
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: prometheus-reader
rules:
- apiGroups: [""]
resources: ["pods", "services", "endpoints"]
verbs: ["get", "list", "watch"]
EOF
# 3. ClusterRoleBinding으로 연결
kubectl create clusterrolebinding prometheus-reader-binding \
--clusterrole=prometheus-reader \
--serviceaccount=monitoring:prometheus
# 4. 검증
kubectl auth can-i get pods --all-namespaces \
--as=system:serviceaccount:monitoring:prometheus핵심 포인트:
- 모든 네임스페이스 접근 = ClusterRole + ClusterRoleBinding 필요
- ServiceAccount 형식:
namespace:name - 검증 시
--all-namespaces옵션으로 확인
GCP PCA 종합 시나리오
글로벌 이커머스 회사에서 블랙 프라이데이 트래픽 급증에 대비해 GKE 기반 마이크로서비스를 준비합니다. 평시 대비 10배 트래픽 증가가 예상되며, 비용은 최소화하면서 안정성은 보장해야 합니다. 가장 적절한 아키텍처는?
정답 및 해설
권장 아키텍처:
- GKE Autopilot + Horizontal Pod Autoscaler: 트래픽에 따른 자동 스케일링
- Global Load Balancer + Cloud CDN: 글로벌 트래픽 분산
- Cloud Armor: DDoS 보호 및 보안
- Preemptible Nodes(Standard 클러스터 사용 시): 비용 최적화
핵심 설계 원칙:
- 비용 최적화: Autopilot의 사용한 만큼 과금
- 자동 확장: HPA + VPA로 예측 불가능한 트래픽 대응
- 글로벌 가용성: 멀티 리전 배포
- 모니터링: Cloud Operations Suite로 실시간 모니터링