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
- Role: 권한부여 (Name Space 한정)
- ClusterRole: 권한부여 (Global)
-
RoleBinding
- Role ↔ RoleBinding ↔ SA/User
-
ClusterRoleBinding
- ClusterRole ↔ ClusterRoleBinding ↔ SA/User
https://kubernetes.io/docs/reference/access-authn-authz/rbac/
Using RBAC Authorization
Role-based access control (RBAC) is a method of regulating access to computer or network resources based on the roles of individual users within your organization. RBAC authorization uses the rbac.authorization.k8s.io API group to drive authorization decis
kubernetes.io
요청 동사
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 |