Kubelet Authentication & Authorization

Support HackTricks

Kubelet Authentication

From the docss:

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, kubelet рдХреЗ HTTPS рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкрд░ рдЕрдиреБрд░реЛрдз рдЬреЛ рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрд╕реНрд╡реАрдХреГрдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЧреБрдордирд╛рдо рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ system:anonymous рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ system:unauthenticated рдХрд╛ рд╕рдореВрд╣ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

3 рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ:

  • рдЧреБрдордирд╛рдо (рдбрд┐рдлрд╝реЙрд▓реНрдЯ): рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкреИрд░рд╛рдореАрдЯрд░ --anonymous-auth=true рдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧ:

"authentication": {
"anonymous": {
"enabled": true
},
  • Webhook: рдпрд╣ kubectl API bearer tokens рдХреЛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛ (рдХреЛрдИ рднреА рдорд╛рдиреНрдп рдЯреЛрдХрди рдорд╛рдиреНрдп рд╣реЛрдЧрд╛)ред рдЗрд╕реЗ рдЕрдиреБрдорддрд┐ рджреЗрдВ:

  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ authentication.k8s.io/v1beta1 API рд╕рдореВрд╣ API рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ

  • kubelet рдХреЛ --authentication-token-webhook рдФрд░ --kubeconfig рдзреНрд╡рдЬреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

"authentication": {
"webhook": {
"cacheTTL": "2m0s",
"enabled": true
},

kubelet TokenReview API рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП API рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдмрд┐рдпрд░рд░ рдЯреЛрдХрди рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ

  • X509 рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ: X509 рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ

  • рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП apiserver рдкреНрд░рдорд╛рдгреАрдХрд░рдг рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВ

  • --client-ca-file рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде kubelet рд╢реБрд░реВ рдХрд░реЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ CA рдмрдВрдбрд▓ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред рдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧ рдХреЗ рд╕рд╛рде:

"authentication": {
"x509": {
"clientCAFile": "/etc/kubernetes/pki/ca.crt"
}
}

Kubelet Authorization

рдХреЛрдИ рднреА рдЕрдиреБрд░реЛрдз рдЬреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рдорд╛рдгрд┐рдд рд╣реЛрддрд╛ рд╣реИ (рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЧреБрдордирд╛рдо рдЕрдиреБрд░реЛрдз рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ) рдлрд┐рд░ рдЕрдзрд┐рдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдзрд┐рдХрд░рдг рдореЛрдб AlwaysAllow рд╣реИ, рдЬреЛ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рди webhook рд╣реИ (рдЬреЛ рдЖрдк рдЬреНрдпрд╛рджрд╛рддрд░ рд╡рд╣рд╛рдБ рдкрд╛рдПрдВрдЧреЗ)ред рдпрд╣ рдореЛрдб рдкреНрд░рдорд╛рдгрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рддрд╛рдХрд┐ рдХрд┐рд╕реА рдХреНрд░рд┐рдпрд╛ рдХреА рдЕрдиреБрдорддрд┐ рдпрд╛ рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдХреА рдЬрд╛ рд╕рдХреЗред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рднрд▓реЗ рд╣реА рдЧреБрдордирд╛рдо рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рдХреНрд╖рдо рд╣реЛ, рдЧреБрдордирд╛рдо рдкрд╣реБрдВрдЪ рдХреЛ рдХрд┐рд╕реА рднреА рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреАред

рд╡реЗрдмрд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдзрд┐рдХрд░рдг рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ --authorization-mode=Webhook рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

"authorization": {
"mode": "Webhook",
"webhook": {
"cacheAuthorizedTTL": "5m0s",
"cacheUnauthorizedTTL": "30s"
}
},

The kubelet SubjectAccessReview API рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП API рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдХреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рд╣реИред

kubelet API рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЙрд╕реА рдЕрдиреБрд░реЛрдз рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХреГрдд рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ apiserver:

  • рдХреНрд░рд┐рдпрд╛

  • Kubelet API рд╕реЗ рдмрд╛рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕рдВрд╕рд╛рдзрди рд╣рдореЗрд╢рд╛ рдиреЛрдбреНрд╕ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЙрдк-рд╕рдВрд╕рд╛рдзрди рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдкрде рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ:

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрд░реЛрдз рдиреЗ рдЕрдиреБрдорддрд┐ рдХреЗ рдмрд┐рдирд╛ kubelet рдХреЗ рдкреЙрдбреНрд╕ рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:

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)
  • рд╣рдореЗрдВ Forbidden рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдЕрдиреБрд░реЛрдз Authentication check рдХреЛ рдкрд╛рд╕ рдХрд░ рдЧрдпрд╛ред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ Unauthorised рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ред

  • рд╣рдо username рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЯреЛрдХрди рд╕реЗ)

  • рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ resource nodes рдерд╛ рдФрд░ subresource proxy (рдЬреЛ рдкрд┐рдЫрд▓реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ)

References

Support HackTricks

Last updated