Kubelet Authentication & Authorization

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

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

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

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

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

  • Анонімний (за замовчуванням): Використовуйте параметр --anonymous-auth=true або конфігурацію:

"authentication": {
"anonymous": {
"enabled": true
},
  • Вебхук: Це дозволить увімкнути токени мисливця API kubectl як авторизацію (будь-який дійсний токен буде дійсним). Дозвольте це за допомогою:

  • переконайтеся, що група API authentication.k8s.io/v1beta1 увімкнена на сервері API

  • запустіть kubelet з прапорцями --authentication-token-webhook та --kubeconfig або використовуйте наступні налаштування:

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

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

  • X509 клієнтські сертифікати: Дозволяють аутентифікуватися за допомогою X509 клієнтських сертифікатів

  • див. документацію з аутентифікації apiserver для отримання додаткової інформації

  • запустіть kubelet з прапорцем --client-ca-file, надаючи пакет CA для перевірки клієнтських сертифікатів. Або з конфігурацією:

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

Авторизація Kubelet

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

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

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

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

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

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

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

  • Дія

HTTP методметод запиту

POST

create

GET, HEAD

get (для окремих ресурсів), list (для колекцій, включаючи повний вміст об'єкта), watch (для перегляду окремого ресурсу або колекції ресурсів)

PUT

update

PATCH

patch

DELETE

delete (для окремих ресурсів), deletecollection (для колекцій)

  • Ресурс, з яким взаємодіє Kubelet API, завжди є nodes, а підресурс визначається зі шляху вхідного запиту:

Kubelet APIресурспідресурс

/stats/*

nodes

stats

/metrics/*

nodes

metrics

/logs/*

nodes

log

/spec/*

nodes

spec

всі інші

nodes

proxy

Наприклад, наступний запит намагався отримати доступ до інформації про pods 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)
  • Ми отримали Заборонено, отже запит пройшов перевірку автентифікації. Якби не це, ми отримали б просто повідомлення Неавторизовано.

  • Ми можемо побачити ім'я користувача (у цьому випадку з токену)

  • Перевірте, яким був ресурс - вузли, і підресурс - проксі (що відповідає попередній інформації)

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated