PaaS/Kubernetes

OIDC 인증으로 특정 Service Account에 대해 Kubelet API 호출하기

armyost 2023. 11. 8. 22:18
728x90

Kubernetes의 각 노드는 모두 API로 통신한다. 이를 활용하여 CI/CD 파이프라인이나, 어플리케이션에서 k8s자원에 대한 쿼리를 API로 하면 손쉽고 보안이 좋다. 

 

이전 포스팅의 연장선에서 진행하겠다.

https://armyost.tistory.com/417

 

k8s 보안, 최소권한으로 특정 NameSpace에 대한 권한만 부여하기

Zero Trust가 유행함에 따라서 모든 영역이 보안의 영역이 되었다. 과거에는 k8s Cluster Wide한 권한을 편의상 사용해왔는데, 점점 보안이 강화되는 분위기라 Service Account와 Role에 대한 이해도가 필요

armyost.tistory.com

 

 

 

우선 현재 Kubelet에서 통용되는 CA 인증서를 내려 받자

$ kubectl config view --minify --raw --output 'jsonpath={..cluster.certificate-authority-data}' | base64 -d > ca.cert

 

내려받은 인증서와 SA(Service Account)에 대한 Token 정보로 OIDC인증을 받자

## curl --cacert [인증서 경로] -H "Authorization: Bearer [Service Account Token] [API주소]
$ curl --cacert ca.cert -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Il9QQ0N1VmVLY2ItODZSQ0pEVWRYLV9mX25vWXZFUFZrd1ZieERERnFtUFUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJzYW1wbGUtbnMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoic2FtcGxlLXNlY3JldCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJzYW1wbGUtc2EiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJjZTc3NmY5NC05MDFiLTRiZWUtYmI3NS1jYThmM2U3ZDYyMWYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6c2FtcGxlLW5zOnNhbXBsZS1zYSJ9.SaQybTH_cS2c-4UZyW1zhZ4KW1XiU-u7SZkVqb-RiEnAscQ33beV1Co4K-SeSwzCQC4eOX8x3pSBn51PKsCGEMb1tWKmcsQM-4LiCkjTWFcwsNuSs-2ppvd8XX7ZaFLQ57F2TBmDWmI7tMHPvmdD9VElYdTdPGUipeZWaeI-oIO4yWraefSc-GTarnK6abouYy18GTyh5eng9AMuCKi62lfhXkxx1cFC-p1aaVPnVUgIqbqSCMKiafctSmdW0BO4WNNtyGFrO6Yl9G0AbVJ6bkote_kfcucauoR5GaB44VHpNwgkl9UuT1JzjDA601R-x8edC4TW0nwuVzdjc3xX2g" https://192.168.122.181:6443/api/v1/namespaces/sample-ns/pods

 

sample-ns NameSpace에는 정상적인 쿼리를, sample-ns-temp에는 403이 뜬다.

 

아래는 kubelet API 사용 가이드 이다.

https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#api-conventions