CKA-Security-CSR

Albert·2025년 2월 22일

CSR

CertificateSigningRequest(CSR) 리소스는 지정된 서명자에게 인증서 서명을 요청하는 데 사용됩니다. 요청이 승인되거나 거부된 후 최종적으로 서명됩니다.
인증과정 참고

Cluster, Contexts, Users

Kubernetes 에서 접근제한을 Clusters, Contexts, Users 로 나눠서 관리합니다.
Clusters 는 파드(서버)들이 올라가 있는 장소이고 User는 해당 클러스터에 접근하려는 사용자입니다.
사용자마다 Cluster 에 접근 권한을 따로 관리하면 관리성이 복잡해 지기 때문에 Contexts 를 두어 아래의 그림과 같이 묶어서 관리를 합니다.

사용자는 openssl 을 통해서 개인키와 공개키를 만듭니다.
Signing Sample

-----BEGIN CERTIFICATE-----
MIIDgjCCAmqgAwIBAgIUC1N1EJ4Qnsd322BhDPRwmg3b/oAwDQYJKoZIhvcNAQEL
BQAwXDELMAkGA1UEBhMCeHgxCjAIBgNVBAgMAXgxCjAIBgNVBAcMAXgxCjAIBgNV
BAoMAXgxCjAIBgNVBAsMAXgxCzAJBgNVBAMMAmNhMRAwDgYJKoZIhvcNAQkBFgF4
MB4XDTIwMDcwNjIyMDcwMFoXDTI1MDcwNTIyMDcwMFowNzEVMBMGA1UEChMMc3lz
dGVtOm5vZGVzMR4wHAYDVQQDExVzeXN0ZW06bm9kZToxMjcuMC4wLjEwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDne5X2eQ1JcLZkKvhzCR4Hxl9+ZmU3
+e1zfOywLdoQxrPi+o4hVsUH3q0y52BMa7u1yehHDRSaq9u62cmi5ekgXhXHzGmm
kmW5n0itRECv3SFsSm2DSghRKf0mm6iTYHWDHzUXKdm9lPPWoSOxoR5oqOsm3JEh
Q7Et13wrvTJqBMJo1GTwQuF+HYOku0NF/DLqbZIcpI08yQKyrBgYz2uO51/oNp8a
sTCsV4OUfyHhx2BBLUo4g4SptHFySTBwlpRWBnSjZPOhmN74JcpTLB4J5f4iEeA7
2QytZfADckG4wVkhH3C2EJUmRtFIBVirwDn39GXkSGlnvnMgF3uLZ6zNAgMBAAGj
YTBfMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDAjAMBgNVHRMB
Af8EAjAAMB0GA1UdDgQWBBTREl2hW54lkQBDeVCcd2f2VSlB1DALBgNVHREEBDAC
ggAwDQYJKoZIhvcNAQELBQADggEBABpZjuIKTq8pCaX8dMEGPWtAykgLsTcD2jYr
L0/TCrqmuaaliUa42jQTt2OVsVP/L8ofFunj/KjpQU0bvKJPLMRKtmxbhXuQCQi1
qCRkp8o93mHvEz3mTUN+D1cfQ2fpsBENLnpS0F4G/JyY2Vrh19/X8+mImMEK5eOy
o0BMby7byUj98WmcUvNCiXbC6F45QTmkwEhMqWns0JZQY+/XeDhEcg+lJvz9Eyo2
aGgPsye1o3DpyXnyfJWAWMhOz7cikS5X2adesbgI86PhEHBXPIJ1v13ZdfCExmdd
M1fLPhLyR54fGaY+7/X8P9AZzPefAkwizeXwe9ii6/a08vWoiE4=
-----END CERTIFICATE-----

이 만든 키를 통해서 CertificateSingingRequest(CSR)을 요청합니다.

apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
...
status:
  certificate: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JS..."

요청된 CSR 은 기본적으로 PENDING 상태가 되며, 아래 명령어를 통해서 approve 해주어야 합니다.

kubectl certificate apporve <csr-name>

반대로 deny 하고 싶다면 아래와 같이 진행하면 됩니다.

kubectl certificate deny <csr-name>

이제 해당하는 csr 을 통해서 context 를 만들어보도록 하겠습니다.

kubectl config set-credentials my-user \
    --client-certificate=my-user.crt \
    --client-key=my-user.key \
    --embed-certs=true

kubectl config set-context my-user-context \
    --cluster=my-cluster \
    --user=my-user

kubectl config use-context my-user-context

위와 같은 명령어를 통해서 my-user 를 생성하고, my-cluster 와 my-user 을 context 로 묶어줍니다. 그리고 지금 현재의 kubernetes 의 config 를 my-user-context 로 설정해주면, 해당 유저의 인증으로 kube-apiserver 와 통신할 수 있습니다.

profile
개발 블로그

0개의 댓글