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
'INFRA > Operation' 카테고리의 다른 글
Terraform 리소스에 대한 이해 - Azure 4편 (0) | 2022.09.06 |
---|---|
Terraform 리소스에 대한 이해 - Azure 3편 (0) | 2022.09.03 |
Terraform 리소스에 대한 이해 - Azure 2편 (0) | 2022.08.23 |
쿠버네티스 이론 STEP7 PV, PVC (1) | 2022.08.23 |
쿠버네티스 이론 STEP6 Service (3) Ingress - 2 (0) | 2022.08.23 |
댓글