Использование целостности образов для проверки подписанных образов перед их развертыванием в кластерах Служба Azure Kubernetes (AKS) (предварительная версия)
Служба Azure Kubernetes (AKS) и ее базовая модель контейнера обеспечивают повышенную масштабируемость и управляемость облачных приложений. С помощью AKS вы можете запускать гибкие программные приложения в соответствии с потребностями среды выполнения вашей системы. Однако такая гибкость может создать новые проблемы.
В этих средах приложений использование подписанных образов контейнеров помогает убедиться, что развертывания созданы из доверенной сущности и что образы не были изменены с момента их создания. Целостность образов — это служба, которая позволяет добавить Политика Azure встроенное определение, чтобы убедиться, что в кластерах AKS развернуты только подписанные образы.
Примечание
Целостность изображений — это функция, основанная на ратифицирующей функции. В кластере AKS имя компонента и имя свойства — ImageIntegrity
, а соответствующие имена модулей pod image integrity содержат Ratify
.
Важно!
Предварительные версии функций AKS доступны на уровне самообслуживания. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS предоставляются с частичной клиентской поддержкой по мере возможности. Следовательно, эти функции не предназначены для использования в рабочей среде. Дополнительные сведения доступны в следующих статьях поддержки.
Предварительные требования
Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись.
aks-preview
Расширение CLI версии 0.5.96 или более поздней.Убедитесь, что в кластере включена надстройка Политика Azure для AKS. Если у вас нет этой надстройки, см. статью Установка надстройки Политика Azure для AKS.
Кластер AKS, включенный с издателем OIDC. Сведения о создании нового кластера или обновлении существующего кластера см. в статье Настройка кластера AKS с помощью издателя OIDC.
Флаги
EnableImageIntegrityPreview
функций иAKS-AzurePolicyExternalData
, зарегистрированные в подписке Azure. Зарегистрируйте флаги функций с помощью следующих команд:Зарегистрируйте флаги
EnableImageIntegrityPreview
функций иAKS-AzurePolicyExternalData
с помощьюaz feature register
команды .# Register the EnableImageIntegrityPreview feature flag az feature register --namespace "Microsoft.ContainerService" --name "EnableImageIntegrityPreview" # Register the AKS-AzurePolicyExternalData feature flag az feature register --namespace "Microsoft.ContainerService" --name "AKS-AzurePolicyExternalData"
Для отображения состояния " Зарегистрировано" может потребоваться несколько минут.
Проверьте состояние регистрации с помощью
az feature show
команды .# Verify the EnableImageIntegrityPreview feature flag registration status az feature show --namespace "Microsoft.ContainerService" --name "EnableImageIntegrityPreview" # Verify the AKS-AzurePolicyExternalData feature flag registration status az feature show --namespace "Microsoft.ContainerService" --name "AKS-AzurePolicyExternalData"
Когда состояние отобразится Зарегистрировано, обновите регистрацию
Microsoft.ContainerService
поставщика ресурсов с помощьюaz provider register
команды .az provider register --namespace Microsoft.ContainerService
Рекомендации и ограничения
- Кластеры AKS должны работать под управлением Kubernetes версии 1.26 или более поздней.
- Эту функцию не следует использовать для реестров или рабочих нагрузок в рабочей среде Реестр контейнеров Azure (ACR).
- Целостность образа поддерживает не более 200 уникальных сигнатур на уровне кластера.
- Нотация является единственным поддерживаемым проверятелем.
- Аудит — это единственный поддерживаемый эффект политики проверки.
Принцип работы целостности изображений
Для проверки подписанных образов перед их развертыванием в кластерах AKS в службе "Целостность образов" используется компонент "Утверждение", "Политика Azure" и "Привратник". Включение целостности образов в кластере развертывает Ratify
pod. Этот Ratify
модуль pod выполняет следующие задачи:
- Выверка сертификатов из Azure Key Vault в конфигурации, настроенной с помощью
Ratify
CRD. - Обращается к изображениям, хранящимся в ACR, когда запросы на проверку поступают из Политика Azure. Чтобы включить этот интерфейс, Политика Azure расширяет Gatekeeper, веб-перехватчик контроллера допуска для Open Policy Agent (OPA).
- Определяет, подписан ли целевой образ доверенным сертификатом и, следовательно, считается ли он доверенным.
AzurePolicy
иGatekeeper
используют результаты проверки в качестве состояния соответствия, чтобы решить, следует ли разрешить запрос на развертывание.
Включение целостности образов в кластере AKS
Примечание
Проверка подписи образа — это ориентированный на управление сценарий, который использует Политика Azure для проверки подписей образов в кластерах AKS в большом масштабе. Мы рекомендуем использовать встроенную инициативу aks image integrity Политика Azure, которая доступна во встроенной библиотеке определений Политика Azure.
Создайте назначение политики с инициативой
[Preview]: Use Image Integrity to ensure only trusted images are deployed
политики AKS с помощьюaz policy assignment create
команды .export SCOPE="/subscriptions/${SUBSCRIPTION}/resourceGroups/${RESOURCE_GROUP}" export LOCATION=$(az group show -n ${RESOURCE_GROUP} --query location -o tsv) az policy assignment create --name 'deploy-trustedimages' --policy-set-definition 'af28bf8b-c669-4dd3-9137-1e68fdc61bd6' --display-name 'Audit deployment with unsigned container images' --scope ${SCOPE} --mi-system-assigned --role Contributor --identity-scope ${SCOPE} --location ${LOCATION}
Модуль
Ratify
pod развертывается после включения этой функции.
Примечание
Политика развертывает функцию целостности образов в кластере при обнаружении любой операции обновления в кластере. Если вы хотите немедленно включить эту функцию, необходимо создать исправление политики с помощью az policy remediation create
команды .
assignment_id=$(az policy assignment show -n 'deploy-trustedimages' --scope ${SCOPE} --query id -o tsv)
az policy remediation create -a "$assignment_id" --definition-reference-id deployAKSImageIntegrity -n remediation -g ${RESOURCE_GROUP}
Настройка конфигураций проверки
Чтобы целостность образа правильно проверяла подписанный целевой образ, необходимо настроить Ratify
конфигурации с помощью K8s CRD с помощью kubectl
.
В этой статье для настройки конфигураций проверки используется самозаверяющий сертификат ЦС из официальной документации по его сертификации. Дополнительные примеры см. в разделе ОCRи.ии сертификатов для ратифицируемых сертификатов.
Создайте файл с
VerifyConfig
именемverify-config.yaml
и скопируйте его в следующий YAML:apiVersion: config.ratify.deislabs.io/v1beta1 kind: CertificateStore metadata: name: certstore-inline spec: provider: inline parameters: value: | -----BEGIN CERTIFICATE----- MIIDQzCCAiugAwIBAgIUDxHQ9JxxmnrLWTA5rAtIZCzY8mMwDQYJKoZIhvcNAQEL BQAwKTEPMA0GA1UECgwGUmF0aWZ5MRYwFAYDVQQDDA1SYXRpZnkgU2FtcGxlMB4X DTIzMDYyOTA1MjgzMloXDTMzMDYyNjA1MjgzMlowKTEPMA0GA1UECgwGUmF0aWZ5 MRYwFAYDVQQDDA1SYXRpZnkgU2FtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAshmsL2VM9ojhgTVUUuEsZro9jfI27VKZJ4naWSHJihmOki7IoZS8 3/3ATpkE1lGbduJ77M9UxQbEW1PnESB0bWtMQtjIbser3mFCn15yz4nBXiTIu/K4 FYv6HVdc6/cds3jgfEFNw/8RVMBUGNUiSEWa1lV1zDM2v/8GekUr6SNvMyqtY8oo ItwxfUvlhgMNlLgd96mVnnPVLmPkCmXFN9iBMhSce6sn6P9oDIB+pr1ZpE4F5bwa gRBg2tWN3Tz9H/z2a51Xbn7hCT5OLBRlkorHJl2HKKRoXz1hBgR8xOL+zRySH9Qo 3yx6WvluYDNfVbCREzKJf9fFiQeVe0EJOwIDAQABo2MwYTAdBgNVHQ4EFgQUKzci EKCDwPBn4I1YZ+sDdnxEir4wHwYDVR0jBBgwFoAUKzciEKCDwPBn4I1YZ+sDdnxE ir4wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQEL BQADggEBAGh6duwc1MvV+PUYvIkDfgj158KtYX+bv4PmcV/aemQUoArqM1ECYFjt BlBVmTRJA0lijU5I0oZje80zW7P8M8pra0BM6x3cPnh/oZGrsuMizd4h5b5TnwuJ hRvKFFUVeHn9kORbyQwRQ5SpL8cRGyYp+T6ncEmo0jdIOM5dgfdhwHgb+i3TejcF 90sUs65zovUjv1wa11SqOdu12cCj/MYp+H8j2lpaLL2t0cbFJlBY6DNJgxr5qync cz8gbXrZmNbzC7W5QK5J7fcx6tlffOpt5cm427f9NiK2tira50HU7gC3HJkbiSTp Xw10iXXMZzSbQ0/Hj2BF4B40WfAkgRg= -----END CERTIFICATE----- --- apiVersion: config.ratify.deislabs.io/v1beta1 kind: Store metadata: name: store-oras spec: name: oras # If you want to you use Workload Identity for Ratify to access Azure Container Registry, # uncomment the following lines, and fill the proper ClientID: # See more: https://ratify.dev/docs/reference/oras-auth-provider # parameters: # authProvider: # name: azureWorkloadIdentity # clientID: XXX --- apiVersion: config.ratify.deislabs.io/v1beta1 kind: Verifier metadata: name: verifier-notary-inline spec: name: notation artifactTypes: application/vnd.cncf.notary.signature parameters: verificationCertStores: # certificates for validating signatures certs: # name of the trustStore - certstore-inline # name of the certificate store CRD to include in this trustStore trustPolicyDoc: # policy language that indicates which identities are trusted to produce artifacts version: "1.0" trustPolicies: - name: default registryScopes: - "*" signatureVerification: level: strict trustStores: - ca:certs trustedIdentities: - "*"
Примените
VerifyConfig
к кластеруkubectl apply
с помощью команды .kubectl apply -f verify-config.yaml
Развертывание примеров образов в кластере AKS
Разверните подписанный образ с помощью
kubectl run demo
команды .kubectl run demo-signed --image=ghcr.io/deislabs/ratify/notary-image:signed
В следующем примере выходных данных показано, что целостность образа позволяет выполнить развертывание:
ghcr.io/deislabs/ratify/notary-image:signed pod/demo-signed created
Если вы хотите использовать собственные образы, см. руководство по подписывание образов.
Отключение целостности образа
Отключите целостность образов в кластере
az aks update
с помощью команды с флагом--disable-image-integrity
.az aks update -g myResourceGroup -n MyManagedCluster --disable-image-integrity
Удалить инициативу политики
Удалите инициативу политики с помощью
az policy assignment delete
команды .az policy assignment delete --name 'deploy-trustedimages'
Дальнейшие действия
Из этой статьи вы узнали, как использовать целостность образов для проверки подписанных образов перед их развертыванием в кластерах Служба Azure Kubernetes (AKS). Если вы хотите узнать, как подписывать собственные контейнеры, см. статью Создание, подписание и проверка образов контейнеров с помощью Notary и Azure Key Vault (предварительная версия) .