Service account default:default в k8s
Автор: S0ER
Кратко рассмотрим что из себя представляет сервисный аккаунт default:default в Kubernates, чем опасно его использование
default:default в Kubernetes — это ServiceAccount (учётная запись пода) в namespace default, который создаётся автоматически в каждом кластере.
🔍 Что это значит?
default (первое) — это namespace (пространство имён), где работают ресурсы, если не указано другое. default (второе) — это имя ServiceAccount, который автоматически присваивается подам, если не задан явно.
⚠️ Почему это опасно?
По умолчанию, default ServiceAccount имеет минимальные права (но их можно случайно расширить). Однако:
Если RBAC не настроен — этот аккаунт может получить слишком много прав (например, cluster-admin).
Любой под в default namespace может использовать этот токен для доступа к API Kubernetes.
Если злоумышленник получит доступ к поду — он может украсть этот токен и атаковать кластер.
🛡️ Как исправить? Не использовать default namespace для рабочих нагрузок:
kubectl create namespace my-safe-app
kubectl config set-context --current --namespace=my-safe-app
Создавать отдельные ServiceAccount для каждого приложения:
kubectl create serviceaccount my-app-sa
И указывать его в манифесте пода:
spec:
serviceAccountName: my-app-sa # вместо default
Ограничивать права через RBAC:
kubectl create rolebinding my-app-sa-view \
--clusterrole=view \
--serviceaccount=my-safe-app:my-app-sa \
--namespace=my-safe-app
🔥 Пример атаки Если под с default:default имеет слишком много прав, злоумышленник может:
# Получить токен:
cat /var/run/secrets/kubernetes.io/serviceaccount/token
# И использовать его для управления кластером:
curl -k -H "Authorization: Bearer <TOKEN>" https://kubernetes-api/
Вывод: default:default — это мина замедленного действия. Всегда настраивайте RBAC и изолируйте приложения!