본문 바로가기
IT/Kubernetes

[Kubernetes] RBAC

by 깅지수 2022. 5. 27.

RBAC

  • KubeConfig
  • 인증
  • RBAC
  • x509 인증서

 

 


 

 

RBAC: Role Based Access Control

 

Kubeconfig

~/.kube/config : kubectl → apiServer에 접근할 때 필요한 인증정보

apiVersion: v1
kind: Config
preferences: {}
clusters:
- name: cluster.local
  cluster:
    certificate-authority-data: LS0tLS1...	#CA인증서
    server: https://127.0.0.1:6443		#실제 apiServer 주소
- name: mycluster
  cluster:
    server: https://1.2.3.4:6443
users:
- name: myadmin					#사용자 계정 이름
- name: kubernetes-admin
  user:
    client-certificate-data: LS0tLS1...		#client 인증서 (공개키)
    client-key-data: LS0tLS1...			#개인키
contexts:					#사용자와 클러스터 연결
- context:
    cluster: mycluster
    user: myadmin
  name: myadmin@mycluster
- context:
    cluster: cluster.local
    user: kubernetes-admin
  name: kubernetes-admin@cluster.local
current-context: kubernetes-admin@cluster.local	#현재 사용자@클러스터

 

kubectl config view

 

kubectl config get-clusters
kubectl config get-contexts
kubectl config get-users

 

context 전환

kubectl config use-context myadmin@mycluster
 

 

인증

쿠버네티스의 사용자

  • Service Account (sa) : 쿠버네티스가 관리하는 SA 사용자
    • 사용자 사용하지 X / Pod가 사용 O
  • Normal User : 일반 사용자 (쿠버네티스가 관리 X)
    • 사용자가 사용 O / Pod가 사용하지 X

 

인증 방법:

  • x509 인증서
  • 토큰
    • Bearer Token
           - http 헤더 : Authorization: Bearer 31ada4fd-adec-460c-809a-9e56ceb75269
    • SA Token → Pod가 사용
           - JSON Web Token : JWT
    • OpenID Connect (OIDC) : 외부 인증 표준화 인터페이스
      • okta, AWS IAM
      • OAuth2 Provider

 

 

* 식별 Identification vs 인증 Authentication vs 인가(권한부여) Authorization vs 자격증명 Credential

 

RBAC

 

요청 동사

create

kubectl create
kubectl apply


get

kubectl get po myweb


list

kubectl get pods


watch

kubectl get po -w


update

kubectl edit, replace


patch

kubectl patch


delete

kubectl delete po myweb


deletecollection

kubectl delete po --all

 

ClusterRole

  • view: 읽을 수 있는 권한
  • edit: 생성/삭제/변경 할 수 있는 권한
  • admin: 모든것 관리(-RBAC: ClusterRole 제외)
  • cluster-admin: 모든것 관리
 

SA 생성

kubectl create sa <NAME>
 

사용자 생성을 위한 x509 인증서 생성

Private Key

openssl genrsa -out myuser.key 2048

 

x509 인증서 요청 생성

openssl req -new -key myuser.key -out myuser.csr -subj "/CN=myuser"
cat myuser.csr | base64 | tr -d "\n"

 

csr.yaml

apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: myuser-csr
spec:
  usages:
  - client auth
  signerName: kubernetes.io/kube-apiserver-client
  request: LS0tLS1CRUdJTiB

 

kubectl create -f csr.yaml

 

kubectl get csr

상태: Pending → 아직 승인이 안됐기 때문

 

승인

kubectl certificate approve myuser-csr

 

kubectl get csr

상태: Approved, Issued

 

kubectl get csr myuser-csr -o yaml

 

status.certificates

kubectl get csr myuser-csr -o jsonpath='{.status.certificate}' | base64 -d > myuser.crt

 

Kubeconfig 사용자 생성

kubectl config set-credentials myuser --client-certificate=myuser.crt --client-key=myuser.key --embed-certs=true

 

Kubeconfig 컨텍스트 생성

kubectl config set-context myuser@cluster.local --cluster=cluster.local --user=myuser --namespace=default

 

kubectl config get-users
kubectl config get-clusters
kubectl config get-contexts

 

kubectl config use-context myuser@cluster.local

 

클러스터 롤 바인딩 생성

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: myuser-view-crb
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: view
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: myuser

 

'IT > Kubernetes' 카테고리의 다른 글

[Kubernetes] Monitoring & Logging  (0) 2022.05.27
[Kubernetes] Helm  (0) 2022.05.27
[Kubernetes] Pod Scheduling  (0) 2022.05.27
[Kubernetes] Auto Scaling  (0) 2022.05.27
[Kubernetes] StatefulSet  (0) 2022.05.27