Поделиться через


Использование целостности изображений для проверки подписанных образов перед развертыванием в кластерах Служба Azure Kubernetes (AKS) (предварительная версия)

Служба Azure Kubernetes (AKS) и ее базовая модель контейнера обеспечивают повышенную масштабируемость и управляемость для облачных приложений. С помощью AKS можно запускать гибкие программные приложения в соответствии с потребностями среды выполнения вашей системы. Однако эта гибкость может привести к новым проблемам.

В этих средах приложений использование подписанных образов контейнеров помогает убедиться, что развертывания создаются из доверенной сущности и что образы не были изменены с момента их создания. Целостность изображений — это служба, которая позволяет добавить встроенное определение Политика Azure, чтобы убедиться, что только подписанные образы развертываются в кластерах AKS.

Примечание.

Целостность изображений — это функция, основанная на ратифицирующей функции. В кластере AKS имя функции и имя свойства — ImageIntegrityв то время как соответствующие имена модулей pod целостности изображений содержатся Ratify.

Внимание

Предварительные версии функций AKS доступны на уровне самообслуживания. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS предоставляются с частичной клиентской поддержкой по мере возможности. Следовательно, эти функции не предназначены для использования в рабочей среде. Дополнительные сведения доступны в следующих статьях поддержки.

Необходимые компоненты

  • Подписка Azure. Если у вас еще нет подписки Azure, вы можете создать бесплатную учетную запись.

  • Azure CLI или Azure PowerShell.

  • aks-preview Расширение CLI версии 0.5.96 или более поздней.

  • Убедитесь, что в кластере включена надстройка Политика Azure для AKS. Если у вас нет этой надстройки, см. статью "Установка Политика Azure надстройки для AKS".

  • Кластер AKS, включенный с помощью издателя OIDC. Сведения о создании кластера или обновлении существующего кластера см. в статье "Настройка кластера AKS с помощью издателя OIDC".

  • Флаги EnableImageIntegrityPreview функций, AKS-AzurePolicyExternalData зарегистрированные в подписке Azure. Зарегистрируйте флаги компонентов с помощью следующих команд:

    1. 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"
      

      Может потребоваться несколько минут, чтобы состояние отображалось как зарегистрированное.

    2. Проверьте состояние регистрации с помощью 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"
      
    3. После отображения состояния "Зарегистрировано" обновите регистрацию Microsoft.ContainerService поставщика ресурсов с помощью az provider register команды.

      az provider register --namespace Microsoft.ContainerService
      

Рекомендации и ограничения

  • Кластеры AKS должны запускать Kubernetes версии 1.26 или более поздней.
  • Эту функцию не следует использовать для рабочих Реестр контейнеров Azure (ACR) реестров или рабочих нагрузок.
  • Целостность изображений поддерживает не более 200 уникальных подписей одновременно на уровне кластера.
  • Нотация является единственным поддерживаемым проверятелем.
  • Аудит является единственным поддерживаемым эффектом политики проверки.

Принцип работы целостности изображений

Снимок экрана: базовая архитектура для целостности изображений.

Целостность образов использует ратифицировать, Политика Azure и Gatekeeper для проверки подписанных образов перед развертыванием в кластерах AKS. Включение целостности образов в кластере развертывает Ratify модуль pod. Этот Ratify модуль pod выполняет следующие задачи:

  1. Примиряет сертификаты из Azure Key Vault на конфигурацию, настроенную с помощью Ratify CRD.
  2. Обращается к изображениям, хранящимся в ACR, когда запросы проверки приходят из Политика Azure. Чтобы включить этот интерфейс, Политика Azure расширяет gatekeeper, веб-перехватчик контроллера допуска для агента open Policy Agent (OPA).
  3. Определяет, подписан ли целевой образ доверенным сертификатом и поэтому считается доверенным.
  4. AzurePolicy и Gatekeeper потребляйте результаты проверки в качестве состояния соответствия требованиям, чтобы решить, следует ли разрешить запрос на развертывание.

Включение целостности изображений в кластере AKS

Примечание.

Проверка подписи изображений — это сценарий, ориентированный на управление, и использует Политика Azure для проверки подписей изображений в кластерах AKS в масштабе. Мы рекомендуем использовать встроенную Политика Azure инициативу AKS по целостности изображений, которая доступна в встроенной библиотеке определений Политика 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 --name ${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 --name 'deploy-trustedimages' --scope ${SCOPE} --query id -o tsv)
az policy remediation create --policy-assignment "$assignment_id" --definition-reference-id deployAKSImageIntegrity --name remediation --resource-group ${RESOURCE_GROUP}

Настройка конфигураций проверки

Для правильной проверки целостности изображений целевого подписанного образа необходимо настроить Ratify конфигурации с помощью kubectlK8s CRD.

В этой статье мы используем самозаверяющий сертификат ЦС из официальной документации По проверке подлинности. Дополнительные примеры см. в разделе "Ратифицируемые CRD".

  1. 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:
                - "*"
    
  2. Примените его к кластеру 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 --resource-group myResourceGroup --name MyManagedCluster --disable-image-integrity
    

Удаление инициативы политики

  • Удалите инициативу политики с помощью az policy assignment delete команды.

    az policy assignment delete --name 'deploy-trustedimages'
    

Следующие шаги

В этой статье вы узнали, как использовать целостность изображений для проверки подписанных образов перед развертыванием в кластерах Служба Azure Kubernetes (AKS). Если вы хотите узнать, как подписывать собственные контейнеры, см. статью "Сборка, подпись и проверка образов контейнеров" с помощью Нотари и Azure Key Vault (предварительная версия).