Аутентифікація та авторизація 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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Аутентифікація Kubelet
За замовчуванням запити до HTTPS-інтерфейсу kubelet, які не відхилені іншими налаштованими методами аутентифікації, розглядаються як анонімні запити і отримують ім'я користувача system:anonymous
та групу system:unauthenticated
.
3 методи аутентифікації:
- Анонімний (за замовчуванням): Використовуйте параметр
--anonymous-auth=true
або конфігурацію:
"authentication": {
"anonymous": {
"enabled": true
},
- Webhook: Це дозволить токени API bearer kubectl як авторизацію (будь-який дійсний токен буде дійсним). Дозвольте це з:
- переконайтеся, що група API
authentication.k8s.io/v1beta1
увімкнена на сервері API - запустіть kubelet з прапорами
--authentication-token-webhook
та--kubeconfig
або використайте наступне налаштування:
"authentication": {
"webhook": {
"cacheTTL": "2m0s",
"enabled": true
},
note
Kubelet викликає TokenReview
API на налаштованому API сервері, щоб визначити інформацію про користувача з токенів доступу
- X509 клієнтські сертифікати: Дозволяють аутентифікацію через X509 клієнтські сертифікати
- дивіться документацію з аутентифікації apiserver для отримання додаткової інформації
- запустіть kubelet з прапором
--client-ca-file
, надаючи пакет CA для перевірки клієнтських сертифікатів. Або з конфігурацією:
"authentication": {
"x509": {
"clientCAFile": "/etc/kubernetes/pki/ca.crt"
}
}
Kubelet Authorization
Будь-який запит, який успішно аутентифікований (включаючи анонімний запит) потім авторизується. За замовчуванням режим авторизації - AlwaysAllow
, який дозволяє всі запити.
Однак інше можливе значення - webhook
(що ви в основному будете знаходити там). Цей режим перевіряє дозволи аутентифікованого користувача для дозволу або заборони дії.
warning
Зверніть увагу, що навіть якщо анонімна аутентифікація увімкнена, анонімний доступ може не мати жодних дозволів для виконання будь-якої дії.
Авторизація через webhook може бути налаштована за допомогою параметра --authorization-mode=Webhook
або через конфігураційний файл з:
"authorization": {
"mode": "Webhook",
"webhook": {
"cacheAuthorizedTTL": "5m0s",
"cacheUnauthorizedTTL": "30s"
}
},
Kubelet викликає SubjectAccessReview
API на налаштованому API сервері, щоб визначити, чи кожен запит є авторизованим.
Kubelet авторизує API запити, використовуючи той же підхід атрибутів запиту, що й apiserver:
- Дія
HTTP verb | request verb |
---|---|
POST | create |
GET, HEAD | get (для окремих ресурсів), list (для колекцій, включаючи повний вміст об'єкта), watch (для спостереження за окремим ресурсом або колекцією ресурсів) |
PUT | update |
PATCH | patch |
DELETE | delete (для окремих ресурсів), deletecollection (для колекцій) |
- Ресурс, що взаємодіє з Kubelet API, завжди вузли, а субресурс визначається з шляху вхідного запиту:
Kubelet API | ресурс | субресурс |
---|---|---|
/stats/* | вузли | stats |
/metrics/* | вузли | metrics |
/logs/* | вузли | log |
/spec/* | вузли | spec |
всі інші | вузли | proxy |
Наприклад, наступний запит намагався отримати доступ до інформації про поди 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)
- Ми отримали Заборонено, отже запит пройшов перевірку автентифікації. Якщо б ні, ми отримали б лише повідомлення
Неавторизовано
. - Ми можемо бачити ім'я користувача (в даному випадку з токена)
- Перевірте, як ресурсом були вузли, а субресурсом проксі (що має сенс з попередньою інформацією)
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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.