CloudNet@ 팀의 가시다님께서 Leading 하시는 PKOS 2기 Study 내용 요약
해당 Kubernetes Study 는 '24단계 실습으로 정복하는 쿠버네티스' 책을 기반으로 진행 중입니다.
이번 포스팅에서는 쿠버네티스 RBAC(Role Based Access Contol)에 대해 알아보겠습니다.
1. RBAC
RBAC 은 쿠버네티스 인가(Authorization) 방식 중 하나
인증(Authentication): 로그인 등의 절차를 걸쳐 사용자가 누구인지 확인하는 과정
인가(Authorization) : 인증 과정을 거친 사용자가 어떤 권한을 가지는지 확인하는 과정
RBAC 구성 요소
Role / ClusterRole / Service Account - 롤 & 클러스터롤은 쿠버네티스 리소스에 부여되는 권한 / ServiceAccount(SA)는 리소스의 역할
RoleBinding / ClusterRoleBinding - 특정 네임스페이스에 한정된 권한 '부여' / 클러스터 전체 수준의 권한 '부여'
1.1. Service Account
# Namespace 생성
kubectl create ns dev-team
kubectl create ns infra-team
# 네임스페이스에 각각 서비스 어카운트 생성
kubectl create sa dev-k8s -n dev-team
kubectl create sa infra-k8s -n infra-team
# Service Account 적용 확인
kubectl get pod -o dev-kubectl -n dev-team -o yaml | grep -i serviceaccount
kubectl get pod -o infra-kubectl -n infra-team -o yaml | grep -i serviceaccount
# Pod 접속 별칭 설정
alias k1='kubectl exec -it dev-kubectl -n dev-team -- kubectl'
alias k2='kubectl exec -it infra-kubectl -n infra-team -- kubectl'
# 권한 테스트
k1 run nginx --image nginx:1.20-alpine
k1 get pods -n kube-system
해당 Service Account 가 Pod 를 조회하고 생성할 수 있는 권한이 없는 것을 알 수 있다.
ServiceAccount 에 Pod 권한을 부여하기 위해서는 Role 이 필요하다.
1.2. Role
사용 가능한 Verb
*(모두 처리)
create(생성)
delete(삭제)
get(조회)
list(목록조회)
patch(일부업데이트)
update(업데이트)
watch(변경감시)
# dev-team Role 생성 - List(조회) 권한
cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: role-dev-team
namespace: dev-team
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["list"]
EOF
# infra-team Role 생성 - 모든 권한
cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: role-infra-team
namespace: infra-team
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
EOF
# Role 상세 내역 확인
kubectl describe roles role-dev-team -n dev-team