Kubelet Authentication & Authorization
Reading time: 5 minutes
tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Kubelet Authentication
Por padrão, as solicitações para o endpoint HTTPS do kubelet que não são rejeitadas por outros métodos de autenticação configurados são tratadas como solicitações anônimas, e recebem um nome de usuário de system:anonymous e um grupo de system:unauthenticated.
Os 3 métodos de autenticação são:
- Anônimo (padrão): Use definindo o parâmetro
--anonymous-auth=trueou a configuração:
"authentication": {
"anonymous": {
"enabled": true
},
- Webhook: Isso irá habilitar os tokens bearer da API kubectl como autorização (qualquer token válido será aceito). Permita com:
- certifique-se de que o grupo de API
authentication.k8s.io/v1beta1está habilitado no servidor da API - inicie o kubelet com as flags
--authentication-token-webhooke--kubeconfigou use a seguinte configuração:
"authentication": {
"webhook": {
"cacheTTL": "2m0s",
"enabled": true
},
note
O kubelet chama a TokenReview API no servidor API configurado para determinar informações do usuário a partir de tokens bearer
- Certificados de cliente X509: Permitem autenticar via certificados de cliente X509
- veja a documentação de autenticação do apiserver para mais detalhes
- inicie o kubelet com a flag
--client-ca-file, fornecendo um bundle CA para verificar os certificados de cliente. Ou com a configuração:
"authentication": {
"x509": {
"clientCAFile": "/etc/kubernetes/pki/ca.crt"
}
}
Kubelet Authorization
Qualquer solicitação que seja autenticada com sucesso (incluindo uma solicitação anônima) é então autorizada. O modo de autorização padrão é AlwaysAllow, que permite todas as solicitações.
No entanto, o outro valor possível é webhook (que é o que você encontrará principalmente por aí). Este modo verificará as permissões do usuário autenticado para permitir ou negar uma ação.
warning
Observe que mesmo se a autenticação anônima estiver habilitada, o acesso anônimo pode não ter permissões para realizar qualquer ação.
A autorização via webhook pode ser configurada usando o param --authorization-mode=Webhook ou via o arquivo de configuração com:
"authorization": {
"mode": "Webhook",
"webhook": {
"cacheAuthorizedTTL": "5m0s",
"cacheUnauthorizedTTL": "30s"
}
},
O kubelet chama a SubjectAccessReview API no servidor API configurado para determinar se cada solicitação está autorizada.
O kubelet autoriza solicitações de API usando a mesma abordagem de atributos de solicitação que o apiserver:
- Ação
| Verbo HTTP | verbo de solicitação |
|---|---|
| POST | criar |
| GET, HEAD | obter (para recursos individuais), listar (para coleções, incluindo conteúdo completo do objeto), assistir (para assistir a um recurso individual ou coleção de recursos) |
| PUT | atualizar |
| PATCH | patch |
| DELETE | deletar (para recursos individuais), deletecollection (para coleções) |
- O recurso que se comunica com a API do Kubelet é sempre nós e o subrecurso é determinado a partir do caminho da solicitação recebida:
| API do Kubelet | recurso | subrecurso |
|---|---|---|
| /stats/* | nós | stats |
| /metrics/* | nós | metrics |
| /logs/* | nós | log |
| /spec/* | nós | spec |
| todos os outros | nós | proxy |
Por exemplo, a seguinte solicitação tentou acessar as informações dos pods do kubelet sem permissão:
curl -k --header "Authorization: Bearer ${TOKEN}" 'https://172.31.28.172:10250/pods'
Forbidden (user=system:node:ip-172-31-28-172.ec2.internal, verb=get, resource=nodes, subresource=proxy)
- Recebemos um Forbidden, então a solicitação passou na verificação de Autenticação. Se não, teríamos recebido apenas uma mensagem
Unauthorised. - Podemos ver o nome de usuário (neste caso, do token)
- Verifique como o recurso era nodes e o subrecurso proxy (o que faz sentido com as informações anteriores)
Referências
tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
HackTricks Cloud