K8s RBAC 관리

"개발팀은 dev 네임스페이스만, 운영팀은 prod 네임스페이스만 접근하도록 하고 싶다면?" KIWI의 RBAC 관리 기능을 사용하면 팀별, 역할별로 Kubernetes 클러스터 접근 권한을 세밀하게 관리할 수 있습니다.
모든 사용자에게 클러스터 전체 접근 권한을 주면 실수로 인한 장애 위험이 높아집니다. RBAC을 사용하면 "필요한 권한만 필요한 사람에게" 부여하여 보안과 안정성을 높일 수 있습니다.
RBAC이란?
RBAC(Role-Based Access Control, 역할 기반 접근 제어)은 Kubernetes에서 "누가 무엇을 할 수 있는지"를 정의하는 방식입니다. 쉽게 말해, 회사의 출입 카드 시스템과 비슷합니다. 각 직원이 자신의 부서와 필요한 공간에만 접근할 수 있듯이, RBAC은 사용자가 필요한 리소스에만 접근할 수 있도록 합니다.
KIWI의 RBAC 구조
- KIWI ServiceAccount: KIWI가 관리하는 K8s ServiceAccount입니다. 클러스터 내에서 리소스에 접근하기 위한 신원 증명 역할을 합니다.
- 네임스페이스 바인딩: ServiceAccount에 특정 네임스페이스에 대한 권한을 부여합니다. 하나의 SA에 여러 네임스페이스를 바인딩할 수 있습니다.
- 사용자 할당: KIWI 사용자에게 ServiceAccount를 할당합니다. 할당된 사용자는 해당 SA의 권한으로 클러스터에 접근합니다.
- 권한 상속: 사용자는 할당된 ServiceAccount의 모든 네임스페이스 권한을 상속받습니다.
권한 수준
KIWI에서 지원하는 세 가지 권한 수준입니다. 필요한 최소 권한만 부여하세요.
- admin: 네임스페이스 내 모든 리소스를 관리할 수 있습니다. 운영팀이나 관리자에게 적합합니다.
- edit: 리소스를 생성/수정/삭제할 수 있지만 RBAC 설정은 변경할 수 없습니다. 개발팀에게 적합합니다.
- view: 읽기 전용 접근만 가능합니다. 모니터링이나 감사 목적에 적합합니다.
보안을 위해 "최소 권한 원칙"을 따르세요. 사용자에게 필요한 최소한의 권한만 부여하면 실수나 악의적인 행동으로 인한 피해를 최소화할 수 있습니다.
사전 요구사항
- Kubernetes 클러스터가 KIWI에 등록되어 있어야 합니다 .
권한 안내: 이 기능에 접근할 수 없다면 기관 관리자에게 권한을 요청하세요.
ServiceAccount 관리
Step 1: RBAC 관리 탭 이동
- 좌측 메뉴에서 **[런타임 환경]**을 클릭합니다 .
- 대상 Kubernetes 클러스터를 선택합니다 .
- 클러스터 상세 페이지에서 RBAC 탭을 클릭합니다 .
Step 2: ServiceAccount 생성
- ServiceAccount 추가 버튼을 클릭합니다 .
- SA 정보를 입력합니다:
- 이름: ServiceAccount 이름 (예:
developer-sa) - 설명: SA 용도 설명 (예:
개발팀 접근용 SA)
- 이름: ServiceAccount 이름 (예:
- 생성 버튼을 클릭합니다 .
생성된 SA는 kube-system 또는 지정된 네임스페이스에 생성됩니다.
Step 3: 네임스페이스 바인딩 추가
SA에 특정 네임스페이스 권한을 부여합니다.
- 생성된 SA 행에서 바인딩 추가 버튼을 클릭합니다 .
- 바인딩 정보를 설정합니다:
- 네임스페이스: 권한을 부여할 네임스페이스 선택
- 역할: admin / edit / view 중 선택
- 추가 버튼을 클릭합니다 .
여러 네임스페이스에 대해 반복하여 다중 바인딩을 설정할 수 있습니다.
Step 4: 클러스터에 동기화
- 클러스터에 동기화 버튼을 클릭합니다 .
- KIWI가 K8s 클러스터에 다음 리소스를 생성합니다:
- ServiceAccount
- RoleBinding (각 네임스페이스별)
- 동기화 완료 메시지를 확인합니다 .
사용자에게 SA 할당
Step 1: SA 할당 탭 이동
- RBAC 탭에서 사용자 할당 섹션으로 이동합니다 .
- 또는 SA 할당 관리 버튼을 클릭합니다 .
Step 2: 사용자 선택 및 SA 할당
- 할당할 사용자를 검색합니다 .
- 사용자 행에서 SA 할당 버튼을 클릭합니다 .
- 할당할 ServiceAccount를 선택합니다 .
- 할당 버튼을 클릭합니다 .
Step 3: 할당 확인
할당이 완료되면:
- 사용자는 해당 SA가 바인딩된 네임스페이스에 접근할 수 있습니다 .
- 사용자의 KIWI UI에서 해당 네임스페이스의 리소스가 표시됩니다 .
SA 토큰 생성
외부 도구나 CI/CD에서 사용할 수 있는 토큰을 생성합니다.
Step 1: 토큰 생성
- SA 목록에서 대상 SA를 선택합니다 .
- 토큰 생성 버튼을 클릭합니다 .
- 토큰 옵션을 설정합니다:
- 만료 기간: 토큰 유효 기간 (예: 30일, 90일, 1년)
- 생성 버튼을 클릭합니다 .
Step 2: 토큰 복사
- 생성된 토큰이 표시됩니다 .
- 복사 버튼으로 토큰을 클립보드에 복사합니다 .
주의: 토큰은 생성 시 한 번만 표시됩니다. 안전한 곳에 보관하세요.
Step 3: 토큰 사용
생성된 토큰으로 kubectl을 사용하는 예시:
kubectl --token=<생성된 토큰> --server=<클러스터 API 서버> get pods -n <네임스페이스>
내 K8s 권한 확인
사용자는 자신에게 할당된 K8s 권한을 확인할 수 있습니다.
확인 방법
- 우측 상단의 프로필 아이콘을 클릭합니다 .
- 내 K8s 권한 또는 K8s 접근 권한 메뉴를 클릭합니다 .
- 할당된 SA와 접근 가능한 네임스페이스 목록이 표시됩니다 .
표시 정보
- 클러스터: 접근 가능한 K8s 클러스터 목록이 표시됩니다. 여러 클러스터에 권한이 있는 경우 모두 나열됩니다.
- ServiceAccount: 각 클러스터에서 할당받은 ServiceAccount 이름이 표시됩니다.
- 네임스페이스: 해당 SA를 통해 접근 가능한 네임스페이스 목록입니다. 바인딩된 모든 네임스페이스가 나열됩니다.
- 역할: 각 네임스페이스에서의 권한 수준(admin/edit/view)이 표시됩니다.
SA 관리 작업
ServiceAccount 수정
- SA 목록에서 대상 SA를 클릭합니다 .
- 수정 버튼을 클릭합니다 .
- 설명이나 바인딩을 수정합니다 .
- 저장 후 클러스터에 동기화를 클릭합니다 .
네임스페이스 바인딩 제거
- SA 상세에서 바인딩 목록을 확인합니다 .
- 제거할 바인딩 옆의 삭제 버튼을 클릭합니다 .
- 클러스터에 동기화를 클릭합니다 .
사용자 SA 할당 해제
- 사용자 할당 목록에서 대상 사용자를 찾습니다 .
- 할당 해제 버튼을 클릭합니다 .
- 확인 대화상자에서 해제를 클릭합니다 .
ServiceAccount 삭제
- SA 목록에서 대상 SA를 선택합니다 .
- 삭제 버튼을 클릭합니다 .
- 확인 대화상자에서 삭제를 클릭합니다 .
- K8s 클러스터에서 SA와 관련 RoleBinding이 삭제됩니다 .
주의: SA 삭제 시 해당 SA를 사용하는 사용자의 접근 권한이 즉시 제거됩니다.
클러스터에서 SA 가져오기
기존 클러스터에 있는 ServiceAccount를 KIWI로 가져올 수 있습니다.
Step 1: 가져오기 시작
- RBAC 탭에서 클러스터에서 가져오기 버튼을 클릭합니다 .
- KIWI가 클러스터의 SA 목록을 조회합니다 .
Step 2: SA 선택
- 가져올 SA를 체크박스로 선택합니다 .
- 기존 RoleBinding 정보도 함께 표시됩니다 .
- 가져오기 버튼을 클릭합니다 .
Step 3: KIWI에서 관리
가져온 SA는 KIWI에서 관리됩니다:
- 바인딩 추가/제거
- 사용자 할당
- 토큰 생성
실제 사용 시나리오
시나리오 1: 개발팀 네임스페이스 접근 권한 부여
상황: 개발팀 3명에게 dev 네임스페이스 편집 권한 부여
단계:
- SA 생성:
dev-team-sa - 네임스페이스 바인딩:
dev→edit역할 - 클러스터에 동기화
- 개발팀 사용자 3명에게 SA 할당
시나리오 2: 운영팀 다중 네임스페이스 관리
상황: 운영팀에게 prod, staging 네임스페이스 관리 권한 부여
단계:
- SA 생성:
ops-team-sa - 네임스페이스 바인딩:
prod→admin역할staging→admin역할
- 클러스터에 동기화
- 운영팀 사용자에게 SA 할당
시나리오 3: 외부 모니터링 도구 연동
상황: 외부 모니터링 도구가 클러스터에 읽기 전용 접근 필요
단계:
- SA 생성:
monitoring-readonly-sa - 네임스페이스 바인딩: 모든 네임스페이스 →
view역할 - 클러스터에 동기화
- SA 토큰 생성
- 토큰을 모니터링 도구에 설정
문제 해결
SA 동기화 실패
- 권한 오류가 발생하는 경우: KIWI가 사용하는 ServiceAccount에 RBAC 리소스 생성 권한이 부족합니다. 클러스터 관리자에게 ClusterRole 및 RoleBinding 생성 권한을 요청하세요.
- 네임스페이스를 찾을 수 없는 경우: 바인딩하려는 네임스페이스가 클러스터에 존재하지 않습니다. 먼저 해당 네임스페이스를 생성한 후 다시 시도하세요.
- 연결 실패가 발생하는 경우: 클러스터와의 네트워크 연결에 문제가 있습니다. 런타임 환경 페이지에서 클러스터 연결 상태를 확인하고, 필요시 재연결하세요.
사용자가 리소스 접근 불가
- 원인 1: SA가 할당되지 않음 → SA 할당 확인
- 원인 2: 네임스페이스 바인딩 없음 → 바인딩 추가
- 원인 3: 동기화 안됨 → 클러스터에 동기화 실행
토큰이 작동하지 않음
- 만료됨: 새 토큰 생성
- SA 삭제됨: SA 상태 확인
- 네트워크 문제: API 서버 접근 가능 여부 확인
보안 권장사항
RBAC을 안전하게 운영하기 위한 보안 권장사항입니다.
RBAC 설정은 한 번 하고 끝나는 것이 아닙니다. 정기적으로 검토하고 업데이트하세요.
-
최소 권한 원칙: 사용자에게 필요한 최소 권한만 부여합니다. "혹시 필요할지 몰라서" 더 많은 권한을 주지 마세요.
-
정기 검토: 분기별로 SA 할당과 바인딩을 검토합니다. 퇴사자나 프로젝트 종료로 불필요해진 권한을 정리하세요.
-
토큰 관리: 사용하지 않는 토큰은 즉시 삭제합니다. 토큰이 유출되면 보안 사고로 이어질 수 있습니다.
-
감사 로그 확인: RBAC 변경사항을 정기적으로 확인합니다. 비정상적인 변경이 있는지 모니터링하세요.
-
네임스페이스 분리: dev, staging, prod 등 환경별로 네임스페이스를 분리하면 실수로 인한 영향을 최소화할 수 있습니다.