본문 바로가기
INFRA/Operation

쿠버네티스 이론 STEP8 RBAC

by BTC_김쿼카 2022. 8. 29.

ABTCEFG♪  안녕하세요, 여러분!

BTC_김쿼카입니다.

 

이번 시간에는 쿠버네티스의 RBAC(Role-Based Access Control)에 대해 알아볼게요!

 

 


 

RBAC

  • 역할 기반으로 쿠버네티스 시스템의 권한 관리
  • API Server에서 제공하는 인가 방식 중 하나
    - 어떤 역할(Role)이 어디서 무엇을 어떻게 하는가에 대해 정의함

Role

  • 특정 API나 리소스(pod, deploy...), 사용 권한(get.list...)을 매니페스트 파일에 명시해둔 규칙의 집합
  • 특정 네임스페이스에 대한 권한 관리
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

 

RoleBinding

  • 롤과 특정 사용자를 묶어주는 역할 수행
  • 지정한 사용자들에 한해 롤에 명시한 규칙들을 기준으로 권한을 사용할 수 있도록 권한 관리
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: jane
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role #this must be Role or ClusterRole
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

 

ClusterRole

  • 특정 API나 리소스(pod, deploy...), 사용 권한(get.list...)을 매니페스트 파일에 명시해둔 규칙의 집합
  • 클러스터 전체 사용 권한 설정
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]

 

ClusterRoleBinding

  • 사용자와 클러스터롤을 묶어주는 역할 수행
  • 지정한 사용자들에 한해 롤에 명시한 규칙들을 기준으로 권한 사용할 수 있도록 관리
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-secrets-global
subjects:
- kind: Group
  name: manager # Name is case sensitive
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: secret-reader
  apiGroup: rbac.authorization.k8s.io

 

 

간단하게 정리해보면 다음과 같습니다.

  • Role: 특정 네임스페이스에 한정된 정책 (특정 네임스페이스 + 어디서 무엇을 어떻게)
  • RoleBinding : 역할이 특정 네임스페이스에 한정된 정책을 따르도록 적용
  • ClusterRole : 클러스터 전체에 한정된 정책 (클러스터 전체 + 어디서 무엇을 어떻게)
  • ClusterRoleBinding : 역할이 클러스터 전체에 한정된 정책을 따르도록 적용

 


실습을 하고 싶으신 분들은 아래 코드를 참고해주세요.

다음 시간에 만나요.

# 1. serviceaccount 만들기
kubectl create serviceaccount devuser -n devops

# 2. role 만들기
kubectl create role podreader --resource=pods --verb=get,list,watch

# 3. rolebinding
kubectl create rolebinding devuser-podreader-binding --role=podreader --serviceaccount=devops.devuser --namespace=devops

# 4. devuser 서비스어카운트로 실행되는 모든 컨테이너 운영
kubectl run devops-pod --image=nginx --port=80 --dry-run=client -o yaml > devops-pod.yaml

# yaml 파일에 serviceaccount 부분 추가
vi devops-pod.yaml

# yaml 실행 및 pod 생성 확인
kubectl apply -f devops-pod.yaml
kubectl get pod devops-pod -o yaml

 

댓글