
KubeClarity — это инструмент для обнаружения и управления Software Bill Of Materials (SBOM) и уязвимостями контейнерных образов и файловых систем.
[!IMPORTANT] KubeClarity устарел и заменен на openclarity/openclarity.
См. объявление о выпуске для получения дополнительной информации.
Этот проект не получает обновлений. Рекомендуем перейти на новую версию.
KubeClarity — это инструмент для обнаружения и управления Software Bill Of Materials (SBOM) и уязвимостями образов контейнеров и файловых систем. Он сканирует как работающие кластеры K8s, так и конвейеры CI/CD для повышения безопасности цепочки поставок программного обеспечения.

Анализатор содержимого KubeClarity интегрируется со следующими генераторами SBOM:
Сканер уязвимостей KubeClarity интегрируется со следующими сканерами:

Добавьте Helm-репозиторий ```shell helm repo add kubeclarity https://openclarity.github.io/kubeclarity
Сохраните значения диаграммы KubeClarity по умолчанию
helm show values kubeclarity/kubeclarity > values.yaml
Проверьте конфигурацию в values.yaml и обновите необходимые значения, если
это требуется. Чтобы включить и настроить поддерживаемые генераторы SBOM и
сканеры уязвимостей, проверьте конфигурацию "analyzer" и "scanner" под
разделом "vulnerability-scanner" в значениях Helm.
Разверните KubeClarity с помощью Helm ```shell helm install --values values.yaml --create-namespace kubeclarity kubeclarity/kubeclarity -n kubeclarity
или для установки, совместимой с OpenShift Restricted SCC: ```shell
helm install --values values.yaml --create-namespace kubeclarity kubeclarity/kubeclarity -n kubeclarity --set global.openShiftRestricted=true
--set kubeclarity-postgresql.securityContext.enabled=false --set kubeclarity-postgresql.containerSecurityContext.enabled=false
--set kubeclarity-postgresql.volumePermissions.enabled=true --set kubeclarity-postgresql.volumePermissions.securityContext.runAsUser="auto"
--set kubeclarity-postgresql.shmVolume.chmod.enabled=false
3. Проброс порта к KubeClarity UI: ```shell
kubectl port-forward -n kubeclarity svc/kubeclarity-kubeclarity 9999:8080
ПРИМЕЧАНИЕ
KubeClarity требует следующих разрешений K8s:
Разрешение Причина Чтение секретов в CREDS_SECRET_NAMESPACE (по умолчанию: kubeclarity) Это позволяет настроить секреты извлечения образов для сканирования частных репозиториев образов. Чтение config maps в пространстве имен развертывания KubeClarity. Это необходимо для получения настроенного шаблона задания сканера. Просмотр списка подов в области кластера. Это необходимо для вычисления целевых подов, которые нужно отсканировать. Просмотр списка пространств имен. Это необходимо для получения целевых пространств имен для сканирования в интерфейсе сканирования среды выполнения K8s. Создание и удаление заданий в области кластера. Это необходимо для управления заданиями, которые будут сканировать целевые поды в их пространствах имен.
Helm uninstall ```shell helm uninstall kubeclarity -n kubeclarity
Очистка ресурсов
По умолчанию Helm не удаляет PVC и PV для StatefulSets. Выполните следующую команду, чтобы удалить их все:
kubectl delete pvc -l app.kubernetes.io/instance=kubeclarity -n kubeclarity
Сборка UI и бэкенда и запуск бэкенда локально (2 варианта):
VERSION=test make docker-backend
docker run -p 8080:8080 -e FAKE_RUNTIME_SCANNER=true -e FAKE_DATA=true -e ENABLE_DB_INFO_LOGS=true -e DATABASE_DRIVER=LOCAL ghcr.io/openclarity/kubeclarity:test run
make ui && make backend
cp -r ./ui/build ./site
FAKE_RUNTIME_SCANNER=true DATABASE_DRIVER=LOCAL FAKE_DATA=true ENABLE_DB_INFO_LOGS=true ./backend/bin/backend run
Откройте UI KubeClarity в браузере: http://localhost:8080/
KubeClarity включает CLI, который можно запускать локально и который особенно полезен для конвейеров CI/CD. Он позволяет анализировать образы и каталоги для генерации SBOM и сканировать их на наличие уязвимостей. Результаты могут быть экспортированы в бэкенд KubeClarity.
Загрузите дистрибутив релиза для вашей ОС с страницы релизов
Распакуйте бинарный файл kubeclarity-cli, добавьте его в PATH, и всё готово!
Docker-образ доступен по адресу ghcr.io/openclarity/kubeclarity-cli со списком
доступных тегов здесь.
``` make cli ``` Copy `./cli/bin/cli` to your PATH под именем `kubeclarity-cli`.
Использование:``` kubeclarity-cli analyze <image/directory name> --input-type <dir|file|image(default)> -o
Пример:```
kubeclarity-cli analyze --input-type image nginx:latest -o nginx.sbom
Optionally a list of the content analyzers to use can be configured using the ANALYZER_LIST env
variable seperated by a space (e.g ANALYZER_LIST="<analyzer 1 name> <analyzer 2 name>")
Example:``` ANALYZER_LIST="syft gomod" kubeclarity-cli analyze --input-type image nginx:latest -o nginx.sbom
### Сканирование уязвимостей
Использование:```
kubeclarity-cli scan <image/sbom/directoty/file name> --input-type <sbom|dir|file|image(default)> -f <output file>
Пример:``` kubeclarity-cli scan nginx.sbom --input-type sbom
По желанию можно настроить список используемых сканеров уязвимостей с помощью переменной окружения `SCANNERS_LIST`, разделенных пробелом (например, `SCANNERS_LIST="<Scanner1 name> <Scanner2 name>"`)```
SCANNERS_LIST="grype trivy" kubeclarity-cli scan nginx.sbom --input-type sbom
Для экспорта результатов CLI в бэкенд KubeClarity необходимо использовать идентификатор приложения, определённый бэкендом KubeClarity. Идентификатор приложения можно найти на экране «Приложения» в пользовательском интерфейсе или с помощью API KubeClarity.
BACKEND_HOST= BACKEND_DISABLE_TLS=true kubeclarity-cli analyze --application-id -e -o
BACKEND_HOST=localhost:9999 BACKEND_DISABLE_TLS=true kubeclarity-cli analyze nginx:latest --application-id 23452f9c-6e31-5845-bf53-6566b81a2906 -e -o nginx.sbom
#### Экспорт результатов сканирования уязвимостей```
# The vulnerability scan result can be exported to KubeClarity backend by setting the BACKEND_HOST env variable and the -e flag.
# Note: Until TLS is supported, BACKEND_DISABLE_TLS=true should be set.
BACKEND_HOST=<KubeClarity backend address> BACKEND_DISABLE_TLS=true kubeclarity-cli scan <image> --application-id <application ID> -e
# For example:
SCANNERS_LIST="grype" BACKEND_HOST=localhost:9999 BACKEND_DISABLE_TLS=true kubeclarity-cli scan nginx.sbom --input-type sbom --application-id 23452f9c-6e31-5845-bf53-6566b81a2906 -e
LOCAL_IMAGE_SCAN=true kubeclarity-cli analyze nginx:latest -o nginx.sbom
## Сканирование уязвимостей с использованием локального образа docker в качестве входных данных```
# Local docker images can be scanned using the LOCAL_IMAGE_SCAN env variable
# For example:
LOCAL_IMAGE_SCAN=true kubeclarity-cli scan nginx.sbom
KubeClarity CLI может читать файл конфигурации, который хранит учетные данные для частных реестров.
Пример раздела реестра в файле конфигурации:``` registry: auths: - authority: <registry 1> username: <username for registry 1> password: <password for registry 1> - authority: <registry 2> token: <token for registry 2>
Пример конфигурации реестра без авторизации: (в этом случае эти учетные данные будут использоваться для всех реестров)```
registry:
auths:
- username: <username>
password: <password>
--config command line flag.kubeclarity scan registry/nginx:private --config $HOME/own-kubeclarity-config
## Private registries support for K8s runtime scan
Kubeclarity использует [k8schain](https://github.com/google/go-containerregistry/tree/main/pkg/authn/k8schain#k8schain) от google/go-containerregistry для аутентификации в реестрах. Если необходимые учетные данные службы не обнаруживаются k8schain, их можно задать через секреты, описанные ниже.
Кроме того, если учетные данные службы не находятся в пространстве имен "kubeclarity", установите CREDS_SECRET_NAMESPACE в развертывании kubeclarity. При использовании helm [charts](https://github.com/openclarity/kubeclarity/blob/main/charts) CREDS_SECRET_NAMESPACE устанавливается в пространство имен релиза, в котором установлен kubeclarity.
### Amazon ECR
Создайте [пользователя AWS IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console) с разрешениями `AmazonEC2ContainerRegistryFullAccess`.
Используйте учетные данные пользователя (`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_DEFAULT_REGION`) для создания следующего секрета:```
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: ecr-sa
namespace: kubeclarity
type: Opaque
data:
AWS_ACCESS_KEY_ID: $(echo -n 'XXXX'| base64 -w0)
AWS_SECRET_ACCESS_KEY: $(echo -n 'XXXX'| base64 -w0)
AWS_DEFAULT_REGION: $(echo -n 'XXXX'| base64 -w0)
EOF
Примечание:
ecr-saAWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY и AWS_DEFAULT_REGIONСоздайте сервисный аккаунт Google с разрешениями Artifact Registry Reader.
Используйте файл JSON сервисного аккаунта для создания следующего секрета``` kubectl -n kubeclarity create secret generic --from-file=sa.json gcr-sa
Примечание:
1. Имя секрета должно быть `gcr-sa`
1. `sa.json` должно быть именем файла JSON сервисного аккаунта при генерации секрета
2. KubeClarity использует [стандартные учетные данные приложения](https://developers.google.com/identity/protocols/application-default-credentials). Они работают только при запуске KubeClarity из GCP.
## Слияние SBOM и уязвимостей между различными этапами CI/CD```
# Additional SBOM will be merged into the final results when '--merge-sbom' is defined during analysis. The input SBOM can be CycloneDX XML or CyclonDX json format.
# For example:
ANALYZER_LIST="syft" kubeclarity-cli analyze nginx:latest -o nginx.sbom --merge-sbom inputsbom.xml
Команда kubeclarity-cli analyze может форматировать полученный SBOM в разные форматы, если необходимо интегрироваться с другой системой. Поддерживаемые форматы:
| Формат | Имя конфигурации |
|---|---|
| CycloneDX JSON (по умолчанию) | cyclonedx-json |
| CycloneDX XML | cyclonedx-xml |
| SPDX JSON | spdx-json |
| SPDX Tag Value | spdx-tv |
| Syft JSON | syft-json |
ПРЕДУПРЕЖДЕНИЕ
KubeClarity внутренне обрабатывает CycloneDX, другие форматы поддерживаются через преобразование. Процесс преобразования может быть необратимым из-за несовместимости между форматами, поэтому не гарантируется, что все поля/информация будут присутствовать в результирующем выводе.
Чтобы настроить kubeclarity-cli на использование формата, отличного от стандартного, можно использовать переменную окружения ANALYZER_OUTPUT_FORMAT с именем конфигурации из таблицы выше:``` ANALYZER_OUTPUT_FORMAT="spdx-json" kubeclarity-cli analyze nginx:latest -o nginx.sbom
## Серверы удалённого сканирования для CLI
При запуске CLI kubeclarity для сканирования уязвимостей, CLI потребуется загрузить соответствующие базы данных уязвимостей в то место, где запущен CLI kubeclarity. Запуск CLI в конвейере CI/CD приведет к загрузке БД при каждом запуске, что тратит время и пропускную способность. По этой причине несколько поддерживаемых сканеров имеют удаленный режим, в котором сервер отвечает за управление БД и, возможно, сканирование артефактов.
> ***Примечание***
>
> Приведенные ниже примеры предназначены для каждого из сканеров, но их можно комбинировать для совместной работы так же, как и в не-удаленном режиме.
### Trivy
Сканер Trivy поддерживает удаленный режим с использованием сервера Trivy. Сервер Trivy можно развернуть, как описано здесь: [режим клиент-сервер Trivy](https://aquasecurity.github.io/trivy/v0.34/docs/references/modes/client-server/). Инструкции по установке CLI Trivy доступны здесь: [установка Trivy](https://aquasecurity.github.io/trivy/v0.34/getting-started/installation/). Команда Aqua предоставляет официальный образ контейнера, который можно использовать для запуска сервера в kubernetes/docker, который мы будем использовать в примерах здесь.
Чтобы запустить сервер:```
docker run -p 8080:8080 --rm aquasec/trivy:0.41.0 server --listen 0.0.0.0:8080
Чтобы запустить сканирование с использованием сервера:``` SCANNERS_LIST="trivy" SCANNER_TRIVY_SERVER_ADDRESS="http://:8080" ./kubeclarity_cli scan --input-type sbom nginx.sbom
Сервер trivy также предоставляет аутентификацию на основе токенов для предотвращения несанкционированного использования экземпляра сервера trivy. Вы можете включить её, запустив сервер с дополнительным флагом:```
docker run -p 8080:8080 --rm aquasec/trivy:0.41.0 server --listen 0.0.0.0:8080 --token mytoken
и передача токена сканеру:``` SCANNERS_LIST="trivy" SCANNER_TRIVY_SERVER_ADDRESS="http://:8080" SCANNER_TRIVY_SERVER_TOKEN="mytoken" ./kubeclarity_cli scan --input-type sbom nginx.sbom
### Grype
Grype поддерживает удаленный режим с использованием [grype-server](https://github.com/portshift/grype-server) — RESTful обёртки для Grype, которая предоставляет API, принимающее SBOM и возвращающее результаты сканирования Grype для этого SBOM. Grype-server поставляется в виде контейнерного образа, поэтому может запускаться в kubernetes или с помощью docker как отдельное приложение.
To start the server:```
docker run -p 9991:9991 --rm gcr.io/eticloud/k8sec/grype-server:v0.1.5
Чтобы запустить сканирование с помощью сервера:``` SCANNERS_LIST="grype" SCANNER_GRYPE_MODE="remote" SCANNER_REMOTE_GRYPE_SERVER_ADDRESS=":9991" SCANNER_REMOTE_GRYPE_SERVER_SCHEMES="https" ./kubeclarity_cli scan --input-type sbom nginx.sbom
Если сервер Grype развернут с TLS, вы можете переопределить схему URL по умолчанию, например:```
SCANNERS_LIST="grype" SCANNER_GRYPE_MODE="remote" SCANNER_REMOTE_GRYPE_SERVER_ADDRESS="<grype server address>:9991" SCANNER_REMOTE_GRYPE_SERVER_SCHEMES="https" ./kubeclarity_cli scan --input-type sbom nginx.sbom
Пример конфигурации см. здесь
Приветствуются Pull requests и сообщения об ошибках.
Для более крупных изменений, пожалуйста, сначала создайте Issue в GitHub, чтобы обсудить предлагаемые изменения и возможные последствия.
Более подробную информацию можно найти в руководстве по внесению вклада в этот проект