
kubeaudit помогает вам проводить аудит ваших кластеров Kubernetes на соответствие общим средствам контроля безопасности.
Теперь требуется, чтобы кластеры работали на Kubernetes >=1.19.
Переопределяющие метки с незарегистрированными аннотациями
kubernetes.ioбудут объявлены устаревшими. Скоро станет обязательным использованиеkubeaudit.ioвместо них. Дополнительный контекст см. в этом обсуждении.
Kubeaudit планируется к устареванию к октябрю 2024 года.
Мы активно ищем мейнтейнеров, заинтересованных в том, чтобы взять на себя управление этим проектом. Если вы хотите продолжать его развитие и поддержку, свяжитесь с нами.
Для пользователей, которые ищут альтернативы, мы рекомендуем перейти на Kubebench, который предлагает аналогичную функциональность и активно поддерживается.
Спасибо сообществу за ваш вклад и поддержку.
kubeaudit — это инструмент командной строки и пакет Go для аудита кластеров Kubernetes на предмет различных
проблем безопасности, таких как:
Кратко: kubeaudit гарантирует, что вы развёртываете безопасные контейнеры!
Чтобы использовать kubeaudit как пакет Go, смотрите документацию пакета.
Остальная часть этого README будет посвящена использованию kubeaudit как инструмента командной строки.
brew install kubeaudit
Kubeaudit имеет официальные релизы, которые одобрены и стабильны: Официальные релизы
Ветка main может содержать новые функции, которых ещё нет в стабильных релизах. Если вам нужна новая функция, ещё не включённая в релиз, убедитесь, что у вас установлена последняя версия Go, и выполните следующее:
go get -v github.com/Shopify/kubeaudit
Начните использовать kubeaudit с Быстрого старта или посмотрите все поддерживаемые команды.
Требование: kubectl v1.12.0 или новее
С выходом kubectl v1.12.0, в котором появилась простая подключаемость внешних функций, kubeaudit можно вызывать как kubectl audit, выполнив
make plugin и добавив $GOPATH/bin в ваш PATH.или
kubectl-audit и добавив его в PATH.Мы больше не публикуем образы в Docker Hub (поскольку Docker Hub прекратил поддержку бесплатных организаций Team). Пока что старые образы всё ещё доступны, но могут перестать быть доступными в любое время. Вскоре мы начнём публиковать образы в реестре контейнеров Github.
Чтобы запустить kubeaudit как задание в вашем кластере, смотрите Запуск kubeaudit в кластере.
У kubeaudit есть три режима:
Если указан файл манифеста Kubernetes с помощью флага -f/--manifest, kubeaudit выполнит аудит этого файла.
Пример команды:
kubeaudit all -f "/path/to/manifest.yml"
Пример вывода:
$ kubeaudit all -f "internal/test/fixtures/all_resources/deployment-apps-v1.yml"
---------------- Results for ---------------
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
namespace: deployment-apps-v1
--------------------------------------------
-- [error] AppArmorAnnotationMissing
Message: AppArmor annotation missing. The annotation 'container.apparmor.security.beta.kubernetes.io/container' should be added.
Metadata:
Container: container
MissingAnnotation: container.apparmor.security.beta.kubernetes.io/container
-- [error] AutomountServiceAccountTokenTrueAndDefaultSA
Message: Default service account with token mounted. automountServiceAccountToken should be set to 'false' or a non-default service account should be used.
-- [error] CapabilityShouldDropAll
Message: Capability not set to ALL. Ideally, you should drop ALL capabilities and add the specific ones you need to the add list.
Metadata:
Container: container
Capability: AUDIT_WRITE
...
Если ошибок с заданным минимальным уровнем серьёзности не найдено, возвращается следующее:
All checks completed. 0 high-risk vulnerabilities found
Режим манифеста также поддерживает автоматическое исправление всех проблем безопасности с помощью команды autofix:
kubeaudit autofix -f "/path/to/manifest.yml"
Чтобы записать исправленный манифест в новый файл вместо изменения исходного, используйте флаг -o/--output.
kubeaudit autofix -f "/path/to/manifest.yml" -o "/path/to/fixed"
Чтобы исправить манифест на основе пользовательских правил, указанных в файле конфигурации kubeaudit, используйте флаг -k/--kconfig.
kubeaudit autofix -k "/path/to/kubeaudit-config.yml" -f "/path/to/manifest.yml" -o "/path/to/fixed"
Kubeaudit может определить, запущен ли он внутри контейнера в кластере. Если да, то он попытается выполнить аудит всех ресурсов Kubernetes в этом кластере:
kubeaudit all
Kubeaudit попытается подключиться к кластеру, используя локальный файл kubeconfig ($HOME/.kube/config). Можно указать другое расположение kubeconfig с помощью флага --kubeconfig. Чтобы указать контекст kubeconfig, используйте флаг -c/--context.
kubeaudit all --kubeconfig "/path/to/config" --context my_cluster
Дополнительную информацию о конфигурационных файлах kubernetes см. на странице https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/
Kubeaudit выдаёт результаты с тремя уровнями серьёзности:
Error: Проблема безопасности или недопустимая конфигурация kubernetesWarning: Рекомендация по лучшей практикеInfo: Информационное сообщение, никаких действий не требуется. Сюда входят результаты, которые были переопределеныМинимальный уровень серьёзности можно задать с помощью флага --minSeverity/-m.
По умолчанию kubeaudit выводит результаты в удобочитаемом виде. Если вывод предназначен для дальнейшей обработки, его можно переключить на JSON с помощью флага --format json. Для вывода результатов в виде логов (как было раньше по умолчанию) используйте --format logrus. Некоторые форматы вывода включают цвета, чтобы облегчить чтение результатов в терминале. Чтобы отключить цвета (например, если вы отправляете вывод в текстовый файл), можно использовать флаг --no-color.
Вы можете сгенерировать отчёт kubeaudit в формате SARIF с помощью флага --format sarif. Чтобы записать результаты SARIF в файл, можно перенаправить вывод с помощью >. Например:
kubeaudit all -f path-to-my-file.yaml --format="sarif" > example.sarif
Если есть результаты уровня серьёзности error, kubeaudit завершится с кодом выхода 2. Это можно изменить с помощью флага --exitcode/-e.
Все способы настройки kubeaudit см. в разделе Глобальные флаги.
Аудиторы также могут запускаться по отдельности.
Конфиг kubeaudit можно использовать для двух целей:
Любая конфигурация, которая может быть задана с помощью флагов для отдельных аудиторов, может быть представлена с помощью конфига.
Конфиг имеет следующий формат:
enabledAuditors:
# Auditors are enabled by default if they are not explicitly set to "false"
apparmor: false
asat: false
capabilities: true
deprecatedapis: true
hostns: true
image: true
limits: true
mounts: true
netpols: true
nonroot: true
privesc: true
privileged: true
rootfs: true
seccomp: true
auditors:
capabilities:
# add capabilities needed to the add list, so kubeaudit won't report errors
allowAddList: ['AUDIT_WRITE', 'CHOWN']
deprecatedapis:
# If no versions are specified and the'deprecatedapis' auditor is enabled, WARN
# results will be genereted for the resources defined with a deprecated API.
currentVersion: '1.22'
targetedVersion: '1.25'
image:
# If no image is specified and the 'image' auditor is enabled, WARN results
# will be generated for containers which use an image without a tag
image: 'myimage:mytag'
limits:
# If no limits are specified and the 'limits' auditor is enabled, WARN results
# will be generated for containers which have no cpu or memory limits specified
cpu: '750m'
memory: '500m'
Дополнительные сведения о каждом аудиторе, включая описание конфигурации для конкретного аудитора, см. в Документации аудиторов.
Примечание: Конфиг kubeaudit — это не то же самое, что файл kubeconfig, указанный с помощью флага --kubeconfig, который относится к конфигурационному файлу Kubernetes (см. Локальный режим). Также обратите внимание, что только команды all и autofix поддерживают использование конфига kubeaudit. С другими командами он работать не будет.
Примечание: Если флаги используются в сочетании с файлом конфигурации, флаги имеют приоритет.
Проблемы безопасности можно игнорировать для определённых контейнеров или подов, добавляя метки переопределения. Это означает, что аудитор будет выдавать результаты info вместо error, и к имени результата аудита будет добавлено Allowed. Метки описаны в документации каждого аудитора, но общий формат для аудиторов, поддерживающих переопределение, следующий:
Метка переопределения состоит из ключа и значения.
Ключ представляет собой комбинацию типа переопределения (контейнер или под) и идентификатора переопределения, который уникален для каждого аудитора (см. документацию соответствующего аудитора). Ключ может принимать одну из двух форм в зависимости от типа переопределения:
container.kubeaudit.io/[container name].[override identifier]
kubeaudit.io/[override identifier]
Если значение задано непустой строкой, оно будет отображено в результате info как OverrideReason:
$ kubeaudit asat -f "auditors/asat/fixtures/service-account-token-true-allowed.yml"
---------------- Results for ---------------
apiVersion: v1
kind: ReplicationController
metadata:
name: replicationcontroller
namespace: service-account-token-true-allowed
--------------------------------------------
-- [info] AutomountServiceAccountTokenTrueAndDefaultSAAllowed
Message: Audit result overridden: Default service account with token mounted. automountServiceAccountToken should be set to 'false' or a non-default service account should be used.
Metadata:
OverrideReason: SomeReason
В соответствии со спецификацией Kubernetes, значение должно состоять не более чем из 63 символов и должно быть пустым или начинаться и заканчиваться буквенно-цифровым символом ([a-z0-9A-Z]), с дефисами (-), подчёркиваниями (_), точками (.) и буквенно-цифровыми символами между ними.
К одному ресурсу можно добавить несколько меток переопределения (для нескольких аудиторов).
Примеры см. в документации конкретного аудитора, который вы хотите переопределить.
Чтобы узнать больше о метках, см. https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
Если вы хотите исправить ошибку, добавить функцию или просто исправить опечатку, пожалуйста, делайте это, соблюдая наш Кодекс поведения.
go get github.com/Shopify/kubeauditcd $GOPATH/src/github.com/Shopify/kubeauditgit remote add fork https://github.com/you-are-awesome/kubeauditgit checkout -b awesome-new-featureUSE_KIND=true make test (для запуска тестов без Kind: make test)git commit -am 'Adds awesome feature'git push forkОбратите внимание: если вы не подписали CLA до открытия PR, вы можете повторно запустить проверку, добавив в PR комментарий «I've signed the CLA!»!
| Команда | Описание | Документация |
|---|
all | Запускает все доступные аудиторы или те, которые указаны в конфиге kubeaudit. | docs |
autofix | Автоматически исправляет проблемы безопасности. | docs |
version | Выводит текущую версию kubeaudit. |
| Команда | Описание | Документация |
|---|
apparmor | Находит контейнеры, запущенные без AppArmor. | docs |
asat | Находит поды, использующие автоматически смонтированный сервисный аккаунт по умолчанию. | docs |
capabilities | Находит контейнеры, которые не удаляют рекомендуемые возможности или добавляют новые. | docs |
deprecatedapis | Находит ресурсы, определённые с устаревшей версией API. | docs |
hostns | Находит контейнеры, у которых включены HostPID, HostIPC или HostNetwork. | docs |
image | Находит контейнеры, которые не используют нужную версию образа (по тегу) или используют образ без тега. | docs |
limits | Находит контейнеры, которые превышают указанные лимиты CPU и памяти или не указывают их вовсе. | docs |
mounts | Находит контейнеры, которые монтируют чувствительные пути хоста. | docs |
netpols | Находит пространства имён, в которых нет сетевой политики по умолчанию, запрещающей весь трафик. | docs |
nonroot | Находит контейнеры, работающие от root. | docs |
privesc | Находит контейнеры, которые допускают повышение привилегий. | docs |
privileged | Находит контейнеры, работающие в привилегированном режиме. | docs |
rootfs | Находит контейнеры, у которых нет файловой системы только для чтения. | docs |
seccomp | Находит контейнеры, работающие без Seccomp. | docs |
| Краткий | Полный | Описание |
|---|
| --format | Формат вывода (один из "sarif", "pretty", "logrus", "json") (по умолчанию "pretty") | |
| --kubeconfig | Путь к локальному конфигурационному файлу Kubernetes. Используется только в локальном режиме (по умолчанию $HOME/.kube/config) | |
| -c | --context | Имя контекста kubeconfig для использования |
| -f | --manifest | Путь к yaml-конфигурации для аудита. Используется только в режиме манифеста. Можно использовать - для чтения из stdin. |
| -n | --namespace | Аудит только ресурсов в указанном пространстве имён. Не поддерживается в режиме манифеста. |
| -g | --includegenerated | Включение в сканирование сгенерированных ресурсов (например, подов, созданных развёртываниями). Если вы хотите, чтобы kubeaudit выдавал результаты для сгенерированных ресурсов (например, если у вас есть пользовательские ресурсы или вы хотите отследить осиротевшие ресурсы, чей родительский ресурс больше не существует), используйте этот флаг. |
| -m | --minseverity | Устанавливает наименьший уровень серьёзности для отчёта (один из "error", "warning", "info") (по умолчанию "info") |
| -e | --exitcode | Код выхода, если есть результаты с уровнем серьёзности "error". Обычно 0 используется для успеха, а все ненулевые коды — для ошибки. (по умолчанию 2) |
| --no-color | Не использовать цвета в выводе (по умолчанию false) |