Kubelet Authentication & Authorization
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
기본적으로, 다른 구성된 인증 방법에 의해 거부되지 않은 kubelet의 HTTPS 엔드포인트에 대한 요청은 익명 요청으로 처리되며, **system:anonymous
**라는 사용자 이름과 **system:unauthenticated
**라는 그룹이 부여됩니다.
3가지 인증 방법은 다음과 같습니다:
익명 (기본값): 매개변수 --anonymous-auth=true
또는 구성 설정을 사용합니다:
Webhook: 이것은 kubectl API bearer tokens를 인증으로 활성화합니다 (유효한 모든 토큰이 유효합니다). 다음과 같이 허용합니다:
API 서버에서 authentication.k8s.io/v1beta1
API 그룹이 활성화되어 있는지 확인합니다.
--authentication-token-webhook
및 --kubeconfig
플래그로 kubelet을 시작하거나 다음 설정을 사용합니다:
kubelet은 TokenReview
API를 구성된 API 서버에서 호출하여 사용자 정보를 베어러 토큰에서 결정합니다.
X509 클라이언트 인증서: X509 클라이언트 인증서를 통해 인증을 허용합니다.
자세한 내용은 apiserver 인증 문서를 참조하십시오.
--client-ca-file
플래그로 kubelet을 시작하여 클라이언트 인증서를 검증할 CA 번들을 제공합니다. 또는 구성으로:
성공적으로 인증된 모든 요청(익명 요청 포함)은 그 후에 권한이 부여됩니다. 기본 권한 부여 모드는 **AlwaysAllow
**로, 모든 요청을 허용합니다.
그러나 다른 가능한 값은 **webhook
**입니다(대부분의 경우 여기서 찾을 수 있는 것). 이 모드는 인증된 사용자의 권한을 확인하여 작업을 허용하거나 거부합니다.
익명 인증이 활성화되어 있더라도 익명 접근이 어떤 작업을 수행할 권한이 없을 수 있습니다는 점에 유의하십시오.
웹훅을 통한 권한 부여는 **파라미터 --authorization-mode=Webhook
**를 사용하거나 구성 파일을 통해 구성할 수 있습니다:
The kubelet calls the SubjectAccessReview
API on the configured API server to 결정 whether each request is 허가된.
The kubelet authorizes API requests using the same request attributes approach as the apiserver:
Action
HTTP verb | request verb |
---|---|
POST | create |
GET, HEAD | get (for individual resources), list (for collections, including full object content), watch (for watching an individual resource or collection of resources) |
PUT | update |
PATCH | patch |
DELETE | delete (for individual resources), deletecollection (for collections) |
The resource talking to the Kubelet api is 항상 nodes and subresource is 결정됨 from the incoming request's path:
Kubelet API | resource | subresource |
---|---|---|
/stats/* | nodes | stats |
/metrics/* | nodes | metrics |
/logs/* | nodes | log |
/spec/* | nodes | spec |
all others | nodes | proxy |
For example, the following request tried to access the pods info of kubelet without permission:
우리는 금지됨을 받았으므로 요청이 인증 검사를 통과했습니다. 그렇지 않았다면 우리는 단지 권한 없음
메시지를 받았을 것입니다.
사용자 이름(이 경우 토큰에서)을 볼 수 있습니다.
리소스가 노드였고 서브리소스가 프록시였는지 확인합니다(이전 정보와 일치합니다).
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)