Аутентифікація та авторизація Kubelet

Reading time: 4 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

Аутентифікація Kubelet

З документації:

За замовчуванням запити до HTTPS-інтерфейсу kubelet, які не відхилені іншими налаштованими методами аутентифікації, розглядаються як анонімні запити і отримують ім'я користувача system:anonymous та групу system:unauthenticated.

3 методи аутентифікації:

  • Анонімний (за замовчуванням): Використовуйте параметр --anonymous-auth=true або конфігурацію:
json
"authentication": {
"anonymous": {
"enabled": true
},
  • Webhook: Це дозволить токени API bearer kubectl як авторизацію (будь-який дійсний токен буде дійсним). Дозвольте це з:
  • переконайтеся, що група API authentication.k8s.io/v1beta1 увімкнена на сервері API
  • запустіть kubelet з прапорами --authentication-token-webhook та --kubeconfig або використайте наступне налаштування:
json
"authentication": {
"webhook": {
"cacheTTL": "2m0s",
"enabled": true
},

note

Kubelet викликає TokenReview API на налаштованому API сервері, щоб визначити інформацію про користувача з токенів доступу

  • X509 клієнтські сертифікати: Дозволяють аутентифікацію через X509 клієнтські сертифікати
  • дивіться документацію з аутентифікації apiserver для отримання додаткової інформації
  • запустіть kubelet з прапором --client-ca-file, надаючи пакет CA для перевірки клієнтських сертифікатів. Або з конфігурацією:
json
"authentication": {
"x509": {
"clientCAFile": "/etc/kubernetes/pki/ca.crt"
}
}

Kubelet Authorization

Будь-який запит, який успішно аутентифікований (включаючи анонімний запит) потім авторизується. За замовчуванням режим авторизації - AlwaysAllow, який дозволяє всі запити.

Однак інше можливе значення - webhook (що ви в основному будете знаходити там). Цей режим перевіряє дозволи аутентифікованого користувача для дозволу або заборони дії.

warning

Зверніть увагу, що навіть якщо анонімна аутентифікація увімкнена, анонімний доступ може не мати жодних дозволів для виконання будь-якої дії.

Авторизація через webhook може бути налаштована за допомогою параметра --authorization-mode=Webhook або через конфігураційний файл з:

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

Kubelet викликає SubjectAccessReview API на налаштованому API сервері, щоб визначити, чи кожен запит є авторизованим.

Kubelet авторизує API запити, використовуючи той же підхід атрибутів запиту, що й apiserver:

  • Дія
HTTP verbrequest verb
POSTcreate
GET, HEADget (для окремих ресурсів), list (для колекцій, включаючи повний вміст об'єкта), watch (для спостереження за окремим ресурсом або колекцією ресурсів)
PUTupdate
PATCHpatch
DELETEdelete (для окремих ресурсів), deletecollection (для колекцій)
  • Ресурс, що взаємодіє з Kubelet API, завжди вузли, а субресурс визначається з шляху вхідного запиту:
Kubelet APIресурссубресурс
/stats/*вузлиstats
/metrics/*вузлиmetrics
/logs/*вузлиlog
/spec/*вузлиspec
всі іншівузлиproxy

Наприклад, наступний запит намагався отримати доступ до інформації про поди kubelet без дозволу:

bash
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)
  • Ми отримали Заборонено, отже запит пройшов перевірку автентифікації. Якщо б ні, ми отримали б лише повідомлення Неавторизовано.
  • Ми можемо бачити ім'я користувача (в даному випадку з токена)
  • Перевірте, як ресурсом були вузли, а субресурсом проксі (що має сенс з попередньою інформацією)

References

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks