K8S

사용자 및 CSR 생성

푸른바다거북이14 2025. 12. 9. 23:55

사용자 권한 부여

1. 개인 key 및 csr 생성

https://kubernetes.io/docs/tasks/administer-cluster/certificates/


openssl genrsa -out jane.key 2048
openssl req -new -key jane.key -out jane.csr -subj "/CN=jane/O=developers"

 

2. k8s csr 객체 생성

$ cat jane.csr | base64 | tr -d "\n"

 

# jane-csr.yaml
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: jane-access-request
spec:
  groups:
  - system:authenticated
  request: <BASE64_ENCODED_CSR_STRING_HERE>
  signerName: kubernetes.io/kube-apiserver-client
  usages:
  - client auth

 

 

3. csr 승인

$kubectl get csr

$ kubectl certificate approve jane-access-request

 

4. 서명된 인증서 추출

$ kubectl get csr jane-access-request -o jsonpath='{.status.certificate}' | base64 -d > jane.crt

 

5. kubeconfig 사용자 등록

# 1. 사용자 자격 증명(Credential) 추가
kubectl config set-credentials jane \
  --client-certificate=jane.crt \
  --client-key=jane.key

# 2. 컨텍스트(Context) 생성 (사용자-클러스터 연결)
kubectl config set-context jane-context \
  --cluster=<YOUR_CLUSTER_NAME> \
  --namespace=default \
  --user=jane

 

6. RBAC 권한 부여

# role-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods", "pods/log"]
  verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: jane # 위에서 CSR 만들 때 지정한 CN
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

 

7. 검증

# 1. 컨텍스트 전환
kubectl config use-context jane-context

# 2. 권한 테스트 (Pod 조회 - 성공해야 함)
kubectl get pods

# 3. 권한 없는 작업 테스트 (Service 조회 - 실패해야 함)
kubectl get services
# 결과: Error from server (Forbidden): services is forbidden: User "jane" ...