Role-Based Access Control (RBAC)

Yu Sang Min·2025년 6월 20일

CKA

목록 보기
54/110
post-thumbnail

🛡️ Kubernetes Role-Based Access Control (RBAC) 구성 방법


📄 역할(Role) 정의

  • RBAC 설정의 시작은 Role 오브젝트 생성

  • 정의 파일 생성 시 사용되는 필드:

    • apiVersion: rbac.authorization.k8s.io/v1
    • kind: Role
    • metadata.name: 예시로 developer 지정
  • 역할은 **하나 이상의 규칙(rules)**으로 구성

  • 각 규칙은 다음 세 가지 필드 포함:

    • apiGroups: API 그룹명 (Core 그룹은 빈 문자열로 설정)
    • resources: 접근할 리소스 이름 (예: pods, configmaps)
    • verbs: 허용할 동작 (예: get, list, create, delete)

🧾 Role 정의 YAML 예시

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: developer
  namespace: default
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "list", "create", "delete"]
  - apiGroups: [""]
    resources: ["configmaps"]
    verbs: ["create"]
  • 역할은 특정 네임스페이스 범위에서만 적용
  • 위 예시에서는 default 네임스페이스에서 권한 부여

🔗 사용자와 역할 연결: RoleBinding

  • RoleBinding 오브젝트는 사용자(Subject)와 Role을 연결

  • 주요 필드 구성:

    • subjects: 연결할 사용자 또는 서비스 계정 지정
    • roleRef: 연결할 Role 이름과 타입 지정

🧾 RoleBinding 정의 YAML 예시

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: dev-user-to-developer-binding
  namespace: default
subjects:
  - kind: User
    name: dev-user
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: developer
  apiGroup: rbac.authorization.k8s.io
  • dev-userdeveloper 역할과 연결되어 default 네임스페이스에서 pods, configmaps에 대한 권한 부여

📋 Role, RoleBinding 조회 및 설명

  • 생성된 Role 목록 조회:

    kubectl get roles -n default
  • RoleBinding 목록 조회:

    kubectl get rolebindings -n default
  • Role 상세 정보 확인:

    kubectl describe role developer -n default
  • RoleBinding 상세 정보 확인:

    kubectl describe rolebinding dev-user-to-developer-binding -n default

🧪 권한 확인 방법: kubectl auth can-i

  • 특정 작업에 대한 권한 확인 명령:

    kubectl auth can-i create deployments
  • 네임스페이스 지정 포함:

    kubectl auth can-i create pods -n test

👤 사용자 권한 테스트 (Impersonation)

  • 다른 사용자의 권한 테스트:

    kubectl auth can-i create deployments --as dev-user
  • 예: dev-userpods 생성은 가능하나, deployments 생성은 권한 없음


🎯 리소스 단위 권한 제한: resourceNames

  • 전체 리소스가 아닌 특정 리소스 이름에 한정하여 권한 부여 가능
  • 예: 특정 파드(blue-pod, orange-pod)에만 접근 허용

🧾 특정 리소스 제한 예시

rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "delete"]
    resourceNames: ["blue-pod", "orange-pod"]

✅ 요약

  • RBAC는 Kubernetes 권한 관리를 위한 표준 방식
  • Role 오브젝트로 권한을 정의하고, RoleBinding으로 사용자 연결
  • namespace 기반의 권한 범위 지정 가능
  • kubectl auth can-i 명령으로 권한 테스트 가능
  • resourceNames 필드를 활용하여 리소스 단위로 세부 권한 제어 가능
profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0개의 댓글