Mirtov Alexey 32ee847136 Update README.md | 2 years ago | |
---|---|---|
.. | ||
README.md | 2 years ago |
Starboard - это замечательный бесплатный инструмент, который позволяет: As a Kubernetes operator to automatically update security reports in response to workload and other changes on a Kubernetes cluster - for example, initiating a vulnerability scan when a new Pod is started or running CIS Benchmarks when a new Node is added.
Интеграция Starboard и Yandex Cloud Container Registry позволит выполнять автоматическое сканирование на уязвимости образов при старте новых подов.
В Yandex Cloud Managed Service for Kubernetes для аутентификации в Yandex Cloud Container Registry используется сервисный аккаунт, назначенный на k8s ноду с ролью container-registry.images.puller. Однако Starboard для аутентификации в приватных регистри использует свой собственный механизм.
Starboard умеет аутентифицироваться в различных приватных Container Registry и это описано в документации Private Registries. Для этого он просто копирует себе k8s image pull secret. Это секрет, который содержит аутентификационные данные и назначается на поды для аутентификации в регистри.
Для того, чтобы снабдить starboard operator необходимым секретом возможно использовать аутентификацию в registry с помощью авторизованных ключей отдельного сервисного аккаунта.
Для этого выполните следующие шаги:
Создайте сервисный аккаунт через ui либо через cli:
yc iam service-account create --name yc-cr-starboard
Назначьте сервисному аккаунту роль container-registry.images.puller через ui либо cli:
yc container registry add-access-binding \
--service-account-name yc-cr-starboard \
--role container-registry.images.puller
Создайте авторизованный ключ для сервисного аккаунта и сохраните его в файл через ui либо cli:
yc iam key create --service-account-name yc-cr-starboard --output authorized-key.json
Создайте k8s secret специальным образом для аутентификации с помощью авторизованного ключа сервисного аккаунта:
cat <<EOF | kubectl apply -f -
apiVersion: v1
data:
.dockerconfigjson: $(kubectl create secret docker-registry regcred --docker-server=cr.yandex --docker-username=json_key --docker-password="$(cat ./key.json)" --dry-run=client --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode | jq 'del(.auths."cr.yandex".auth)' | base64 )
kind: Secret
metadata:
name: regcred
type: kubernetes.io/dockerconfigjson
EOF
Подробности формата secret..........⬇️
По умолчанию, если создавать docker secret согласно документации Create a Secret by providing credentials on the command line, например командой:
kubectl create secret docker-registry regcred --docker-server=cr.yandex --docker-username=json_key --docker-password="$(cat ./key.json)" --dry-run=client -o yaml
у вас на выходе образуется секрет со следующим форматом:
apiVersion: v1
data:
.dockerconfigjson: {"auths":{"cr.yandex":{"username":"json_key","password":"something__","auth":"anNvbl9rZXk6ewogICAiaWQiOi..."}}}
kind: Secret
metadata:
creationTimestamp: null
name: regcred
type: kubernetes.io/dockerconfigjson
а для успешной аутентификации в starboard необходим другой формат без второго поля auth. Поэтому мы его отрезаем командой выше
Назначьте созданный секрет на необходимые нагрузки, которые скачивают образы с Yandex Cloud Container Registry согласно документации Create a Pod that uses your Secret либо назначьте этот секрет на default сервисный аккаунт примапленный к подам Add ImagePullSecrets to a service account
После чего следуйте стандартным инструкциям starboard по установке, настройке и использованию starboard operator.
Результаты сканирований Starboard:
можно анализировать вручную путем вычитывания CRD vulnerability-report
можно визуализировать с помощью octant и lens
можно разработать автоматизацию, которая будет считывать CRD vulnarebility report и отправлять их в SIEM, например Yandex Managed Service for Elasticsearch
анализировать на Security Dashboard с помощью Cluster image scanning в Yandex Managed Service for GitLab.