본문으로 건너뛰기

K8s RBAC 관리

런타임 환경 - 권한 관리 탭

"개발팀은 dev 네임스페이스만, 운영팀은 prod 네임스페이스만 접근하도록 하고 싶다면?" KIWI의 RBAC 관리 기능을 사용하면 팀별, 역할별로 Kubernetes 클러스터 접근 권한을 세밀하게 관리할 수 있습니다.

왜 RBAC이 중요할까요?

모든 사용자에게 클러스터 전체 접근 권한을 주면 실수로 인한 장애 위험이 높아집니다. 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 관리 탭 이동

  1. 좌측 메뉴에서 **[런타임 환경]**을 클릭합니다 .
  2. 대상 Kubernetes 클러스터를 선택합니다 .
  3. 클러스터 상세 페이지에서 RBAC 탭을 클릭합니다 .

Step 2: ServiceAccount 생성

  1. ServiceAccount 추가 버튼을 클릭합니다 .
  2. SA 정보를 입력합니다:
    • 이름: ServiceAccount 이름 (예: developer-sa)
    • 설명: SA 용도 설명 (예: 개발팀 접근용 SA)
  3. 생성 버튼을 클릭합니다 .

생성된 SA는 kube-system 또는 지정된 네임스페이스에 생성됩니다.

Step 3: 네임스페이스 바인딩 추가

SA에 특정 네임스페이스 권한을 부여합니다.

  1. 생성된 SA 행에서 바인딩 추가 버튼을 클릭합니다 .
  2. 바인딩 정보를 설정합니다:
    • 네임스페이스: 권한을 부여할 네임스페이스 선택
    • 역할: admin / edit / view 중 선택
  3. 추가 버튼을 클릭합니다 .

여러 네임스페이스에 대해 반복하여 다중 바인딩을 설정할 수 있습니다.

Step 4: 클러스터에 동기화

  1. 클러스터에 동기화 버튼을 클릭합니다 .
  2. KIWI가 K8s 클러스터에 다음 리소스를 생성합니다:
    • ServiceAccount
    • RoleBinding (각 네임스페이스별)
  3. 동기화 완료 메시지를 확인합니다 .

사용자에게 SA 할당

Step 1: SA 할당 탭 이동

  1. RBAC 탭에서 사용자 할당 섹션으로 이동합니다 .
  2. 또는 SA 할당 관리 버튼을 클릭합니다 .

Step 2: 사용자 선택 및 SA 할당

  1. 할당할 사용자를 검색합니다 .
  2. 사용자 행에서 SA 할당 버튼을 클릭합니다 .
  3. 할당할 ServiceAccount를 선택합니다 .
  4. 할당 버튼을 클릭합니다 .

Step 3: 할당 확인

할당이 완료되면:

  • 사용자는 해당 SA가 바인딩된 네임스페이스에 접근할 수 있습니다 .
  • 사용자의 KIWI UI에서 해당 네임스페이스의 리소스가 표시됩니다 .

SA 토큰 생성

외부 도구나 CI/CD에서 사용할 수 있는 토큰을 생성합니다.

Step 1: 토큰 생성

  1. SA 목록에서 대상 SA를 선택합니다 .
  2. 토큰 생성 버튼을 클릭합니다 .
  3. 토큰 옵션을 설정합니다:
    • 만료 기간: 토큰 유효 기간 (예: 30일, 90일, 1년)
  4. 생성 버튼을 클릭합니다 .

Step 2: 토큰 복사

  1. 생성된 토큰이 표시됩니다 .
  2. 복사 버튼으로 토큰을 클립보드에 복사합니다 .

주의: 토큰은 생성 시 한 번만 표시됩니다. 안전한 곳에 보관하세요.

Step 3: 토큰 사용

생성된 토큰으로 kubectl을 사용하는 예시:

kubectl --token=<생성된 토큰> --server=<클러스터 API 서버> get pods -n <네임스페이스>

내 K8s 권한 확인

사용자는 자신에게 할당된 K8s 권한을 확인할 수 있습니다.

확인 방법

  1. 우측 상단의 프로필 아이콘을 클릭합니다 .
  2. 내 K8s 권한 또는 K8s 접근 권한 메뉴를 클릭합니다 .
  3. 할당된 SA와 접근 가능한 네임스페이스 목록이 표시됩니다 .

표시 정보

  • 클러스터: 접근 가능한 K8s 클러스터 목록이 표시됩니다. 여러 클러스터에 권한이 있는 경우 모두 나열됩니다.
  • ServiceAccount: 각 클러스터에서 할당받은 ServiceAccount 이름이 표시됩니다.
  • 네임스페이스: 해당 SA를 통해 접근 가능한 네임스페이스 목록입니다. 바인딩된 모든 네임스페이스가 나열됩니다.
  • 역할: 각 네임스페이스에서의 권한 수준(admin/edit/view)이 표시됩니다.

SA 관리 작업

ServiceAccount 수정

  1. SA 목록에서 대상 SA를 클릭합니다 .
  2. 수정 버튼을 클릭합니다 .
  3. 설명이나 바인딩을 수정합니다 .
  4. 저장클러스터에 동기화를 클릭합니다 .

네임스페이스 바인딩 제거

  1. SA 상세에서 바인딩 목록을 확인합니다 .
  2. 제거할 바인딩 옆의 삭제 버튼을 클릭합니다 .
  3. 클러스터에 동기화를 클릭합니다 .

사용자 SA 할당 해제

  1. 사용자 할당 목록에서 대상 사용자를 찾습니다 .
  2. 할당 해제 버튼을 클릭합니다 .
  3. 확인 대화상자에서 해제를 클릭합니다 .

ServiceAccount 삭제

  1. SA 목록에서 대상 SA를 선택합니다 .
  2. 삭제 버튼을 클릭합니다 .
  3. 확인 대화상자에서 삭제를 클릭합니다 .
  4. K8s 클러스터에서 SA와 관련 RoleBinding이 삭제됩니다 .

주의: SA 삭제 시 해당 SA를 사용하는 사용자의 접근 권한이 즉시 제거됩니다.


클러스터에서 SA 가져오기

기존 클러스터에 있는 ServiceAccount를 KIWI로 가져올 수 있습니다.

Step 1: 가져오기 시작

  1. RBAC 탭에서 클러스터에서 가져오기 버튼을 클릭합니다 .
  2. KIWI가 클러스터의 SA 목록을 조회합니다 .

Step 2: SA 선택

  1. 가져올 SA를 체크박스로 선택합니다 .
  2. 기존 RoleBinding 정보도 함께 표시됩니다 .
  3. 가져오기 버튼을 클릭합니다 .

Step 3: KIWI에서 관리

가져온 SA는 KIWI에서 관리됩니다:

  • 바인딩 추가/제거
  • 사용자 할당
  • 토큰 생성

실제 사용 시나리오

시나리오 1: 개발팀 네임스페이스 접근 권한 부여

상황: 개발팀 3명에게 dev 네임스페이스 편집 권한 부여

단계:

  1. SA 생성: dev-team-sa
  2. 네임스페이스 바인딩: devedit 역할
  3. 클러스터에 동기화
  4. 개발팀 사용자 3명에게 SA 할당

시나리오 2: 운영팀 다중 네임스페이스 관리

상황: 운영팀에게 prod, staging 네임스페이스 관리 권한 부여

단계:

  1. SA 생성: ops-team-sa
  2. 네임스페이스 바인딩:
    • prodadmin 역할
    • stagingadmin 역할
  3. 클러스터에 동기화
  4. 운영팀 사용자에게 SA 할당

시나리오 3: 외부 모니터링 도구 연동

상황: 외부 모니터링 도구가 클러스터에 읽기 전용 접근 필요

단계:

  1. SA 생성: monitoring-readonly-sa
  2. 네임스페이스 바인딩: 모든 네임스페이스 → view 역할
  3. 클러스터에 동기화
  4. SA 토큰 생성
  5. 토큰을 모니터링 도구에 설정

문제 해결

SA 동기화 실패

  • 권한 오류가 발생하는 경우: KIWI가 사용하는 ServiceAccount에 RBAC 리소스 생성 권한이 부족합니다. 클러스터 관리자에게 ClusterRole 및 RoleBinding 생성 권한을 요청하세요.
  • 네임스페이스를 찾을 수 없는 경우: 바인딩하려는 네임스페이스가 클러스터에 존재하지 않습니다. 먼저 해당 네임스페이스를 생성한 후 다시 시도하세요.
  • 연결 실패가 발생하는 경우: 클러스터와의 네트워크 연결에 문제가 있습니다. 런타임 환경 페이지에서 클러스터 연결 상태를 확인하고, 필요시 재연결하세요.

사용자가 리소스 접근 불가

  • 원인 1: SA가 할당되지 않음 → SA 할당 확인
  • 원인 2: 네임스페이스 바인딩 없음 → 바인딩 추가
  • 원인 3: 동기화 안됨 → 클러스터에 동기화 실행

토큰이 작동하지 않음

  • 만료됨: 새 토큰 생성
  • SA 삭제됨: SA 상태 확인
  • 네트워크 문제: API 서버 접근 가능 여부 확인

보안 권장사항

RBAC을 안전하게 운영하기 위한 보안 권장사항입니다.

보안은 지속적인 과정입니다

RBAC 설정은 한 번 하고 끝나는 것이 아닙니다. 정기적으로 검토하고 업데이트하세요.

  1. 최소 권한 원칙: 사용자에게 필요한 최소 권한만 부여합니다. "혹시 필요할지 몰라서" 더 많은 권한을 주지 마세요.

  2. 정기 검토: 분기별로 SA 할당과 바인딩을 검토합니다. 퇴사자나 프로젝트 종료로 불필요해진 권한을 정리하세요.

  3. 토큰 관리: 사용하지 않는 토큰은 즉시 삭제합니다. 토큰이 유출되면 보안 사고로 이어질 수 있습니다.

  4. 감사 로그 확인: RBAC 변경사항을 정기적으로 확인합니다. 비정상적인 변경이 있는지 모니터링하세요.

  5. 네임스페이스 분리: dev, staging, prod 등 환경별로 네임스페이스를 분리하면 실수로 인한 영향을 최소화할 수 있습니다.


관련 가이드