Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье вы используете Azure CLI для развертывания кластера Служба Azure Kubernetes (AKS) и настройки конфиденциальных контейнеров (предварительная версия) с помощью автоматически созданной политики безопасности. Затем вы развернете приложение как конфиденциальный контейнер. Дополнительные сведения см. в обзоре конфиденциальных контейнеров AKS.
Как правило, приступая к работе с конфиденциальными контейнерами AKS, необходимо выполнить следующие действия.
- Развертывание или обновление кластера AKS с помощью Azure CLI
- Добавьте аннотацию в YAML-манифест pod, чтобы пометить pod как использующий конфиденциальные контейнеры
- Добавление политики безопасности в манифест YAML pod
- Разверните свое приложение с использованием конфиденциальных вычислений
Внимание
Начиная с 30 ноября 2025 г. служба Azure Kubernetes (AKS) больше не поддерживает или предоставляет обновления безопасности для Azure Linux 2.0. Образ узла Linux 2.0 Azure заморожен в выпуске 202512.06.0. Начиная с 31 марта 2026 г. образы узлов будут удалены, и вы не сможете масштабировать пулы узлов. Выполните миграцию в поддерживаемую версию Linux Azure, обновив пулы узлов до поддерживаемой версии Kubernetes или переключив ее на osSku AzureLinux3. Дополнительную информацию см. в запросе на GitHub об устаревании и в объявлении об устаревании обновлений Azure. Чтобы оставаться в курсе объявлений и обновлений, следуйте заметкам о выпуске AKS.
Предварительные требования
Azure CLI версии 2.44.1 или более поздней. Запустите
az --version, чтобы определить версию и запуститеaz upgradeдля обновления версии. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.Расширение
aks-previewAzure CLI версии 0.5.169 или более поздней.Расширение Azure CLI для
confcomConfidential Container версии 0.3.3 или выше.confcomтребуется для создания политики безопасности.Зарегистрируйте функцию
Previewв своей подписке Azure.AKS поддерживает конфиденциальные контейнеры (предварительная версия) версии 1.25.0 и выше.
Идентификатор рабочей нагрузки и учетные данные федеративной идентификации. Учетные данные удостоверения рабочей нагрузки позволяют приложениям Kubernetes безопасно получать доступ к ресурсам Azure с помощью Microsoft Entra ID на основе аннотированных учетных записей служб. Если вы не знакомы с идентификатором рабочей нагрузки Microsoft Entra, ознакомьтесь с обзором идентификатора рабочей нагрузки Microsoft Entra и узнайте, как идентификатор рабочей нагрузки работает с AKS.
Учетная запись, которую вы используете для создания кластера, обладает необходимыми минимальными разрешениями. Дополнительные сведения о доступе и управлении удостоверениями для AKS см. в разделе Параметры доступа и управления удостоверениями для Службы Azure Kubernetes (AKS).
Чтобы управлять кластером Kubernetes, используйте клиент командной строки Kubernetes kubectl. Azure Cloud Shell поставляется с
kubectl. Kubectl можно установить локально с помощью команды az aks install-cli .Конфиденциальные контейнеры в AKS предоставляют sidecar-контейнер с открытым исходным кодом для аттестации и безопасной выдачи ключей. Контейнер sidecar интегрируется со службой управления ключами (KMS), например Azure Key Vault, для предоставления ключа группе контейнеров после завершения проверки. Развертывание Azure Key Vault Managed HSM (управляемого аппаратного модуля безопасности) необязательно, но рекомендуется для поддержки целостности и аттестации на уровне контейнера. См. статью «Создание и активация Управляемого модуля HSM», чтобы развернуть Управляемый модуль HSM.
Установите расширение aks-preview для Azure CLI
Внимание
Функции AKS в предварительной версии доступны в режиме самообслуживания и по желанию. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS предоставляются с частичной клиентской поддержкой по мере возможности. Следовательно, эти функции не предназначены для использования в рабочей среде. Дополнительные сведения доступны в следующих статьях поддержки.
Чтобы установить расширение aks-preview, выполните следующую команду:
az extension add --name aks-preview
Выполните следующую команду, чтобы обновить до последней версии расширения:
az extension update --name aks-preview
Установка расширения Azure CLI для конференц-связи
Чтобы установить расширение confcom, выполните следующую команду:
az extension add --name confcom
Выполните следующую команду, чтобы обновить до последней версии расширения:
az extension update --name confcom
Регистрация флага компонента KataCcIsolationPreview
Зарегистрируйте флаг компонента KataCcIsolationPreview, используя команду az feature register, как показано в указанном ниже примере.
az feature register --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"
Через несколько минут отобразится состояние Registered (Зарегистрировано). Проверьте состояние регистрации с помощью команды az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"
Когда отображается состояние Registered, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью команды az provider register:
az provider register --namespace "Microsoft.ContainerService"
Развертывание нового кластера
Создайте кластер AKS с помощью команды az aks create и укажите следующие параметры:
- --os-sku: AzureLinux. В этой предварительной версии эта функция поддерживается только для SKU ОС Azure Linux.
- --node-vm-size: подходит любой размер виртуальной машины Azure, поддерживающий защищённые дочерние виртуальные машины AMD SEV-SNP. Например, Standard_DC8as_cc_v5 виртуальные машины.
- --enable-workload-identity: включает создание идентификатора рабочей нагрузки Microsoft Entra, позволяющего подам использовать удостоверение Kubernetes.
- --enable-oidc-issuer: включает издателя OpenID Connect (OIDC). Он позволяет идентификатору Microsoft Entra или другой платформе управления удостоверениями поставщика облачных служб и платформой управления доступом обнаруживать открытые ключи подписывания сервера API.
- --workload-runtime: укажите KataCcIsolation , чтобы включить функцию конфиденциальных контейнеров в пуле узлов.
az aks create --resource-group myResourceGroup --name myAKSCluster --kubernetes-version <1.25.0 and above> --os-sku AzureLinux --node-vm-size Standard_DC8as_cc_v5 --workload-runtime KataCcIsolation --node-count 1 --enable-oidc-issuer --enable-workload-identity --generate-ssh-keysЧерез несколько минут выполнение команды завершается и отображаются сведения о кластере в формате JSON.
Когда кластер готов, получите учетные данные кластера с помощью команды az aks get-credentials .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Развертывание в существующем кластере
Чтобы использовать эту функцию с существующим кластером AKS, необходимо выполнить следующие требования:
- Выполните действия, чтобы зарегистрировать флаг компонента KataCcIsolationPreview .
- Убедитесь, что кластер работает под управлением Kubernetes версии 1.25.0 и выше.
- Включите идентификацию рабочей нагрузки в кластере, если она еще не включена.
Используйте следующую команду, чтобы включить конфиденциальные контейнеры (предварительная версия), создав пул узлов для размещения.
Добавьте пул узлов в кластер AKS с помощью команды az aks nodepool add . Укажите следующие параметры:
- --resource-group: введите имя существующей группы ресурсов, чтобы создать кластер AKS в.
- --cluster-name: введите уникальное имя кластера AKS, например myAKSCluster.
- --name: введите уникальное имя для пула узлов кластеров, например nodepool2.
-
--workload-runtime: укажите KataCcIsolation , чтобы включить функцию в пуле узлов. Наряду с параметром
--workload-runtimeэти другие параметры должны соответствовать следующим требованиям. В противном случае команда завершается ошибкой и сообщает о проблеме с соответствующими параметрами. - --os-sku: AzureLinux. Только os-sku Azure Linux поддерживает эту функцию в этой предварительной версии.
- --node-vm-size: подходит любой размер виртуальной машины Azure, который поддерживает вложенную виртуализацию для защищённых дочерних виртуальных машин AMD SEV-SNP. Например, Standard_DC8as_cc_v5 виртуальные машины.
В следующем примере пул узлов пользователя добавляется в myAKSCluster с двумя узлами в nodepool2 в myResourceGroup:
az aks nodepool add --resource-group myResourceGroup --name nodepool2 –-cluster-name myAKSCluster --node-count 2 --os-sku AzureLinux --node-vm-size Standard_DC8as_cc_v5 --workload-runtime KataCcIsolationЧерез несколько минут выполнение команды завершается и отображаются сведения о кластере в формате JSON.
Выполните команду az aks update, чтобы включить конфиденциальные контейнеры (предварительная версия) в кластере.
az aks update --name myAKSCluster --resource-group myResourceGroupЧерез несколько минут выполнение команды завершается и отображаются сведения о кластере в формате JSON.
Когда кластер готов, получите учетные данные кластера с помощью команды az aks get-credentials .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Настройка контейнера
Прежде чем настроить доступ к Azure Key Vault и к секрету, а также развернуть приложение в качестве конфиденциального контейнера, необходимо завершить настройку удостоверения рабочей нагрузки.
Чтобы настроить удостоверение рабочей нагрузки, выполните следующие действия, описанные в статье Развертывание и настройка удостоверения рабочей нагрузки:
- Получение URL-адреса издателя OIDC
- Создайте управляемый идентификатор
- Создание учетной записи службы Kubernetes
- Настроить учетные данные федеративного идентификатора
Внимание
Необходимо установить переменные среды из раздела «Экспорт переменных среды» в статье «Развертывание и настройка удостоверения рабочей нагрузки», чтобы продолжить выполнение этого руководства. Не забудьте задать переменной SERVICE_ACCOUNT_NAMESPACE значение kafka и выполнить команду kubectl create namespace kafka перед настройкой идентификатора рабочей нагрузки.
Развертывание доверенного приложения с kata-cc и контейнером аттестации
Следующие шаги позволяют настроить сквозное шифрование сообщений Kafka с использованием ключей шифрования, управляемых управляемыми модулями аппаратной безопасности Azure (mHSM). Ключ освобождается только в том случае, если потребитель Kafka выполняется в конфиденциальном контейнере с контейнером подготовки секретов аттестации Azure, внедренным в модуль pod.
Эта конфигурация основана на следующих четырех компонентах:
- Кластер Kafka: простой кластер Kafka, развернутый в пространстве имен Kafka в кластере.
- Продюсер Kafka: продюсер Kafka, работающий как стандартный pod Kubernetes и отправляющий в топик Kafka сообщения, настроенные пользователем и зашифрованные с использованием открытого ключа.
- Потребитель Kafka: под потребителя Kafka, который работает в среде выполнения kata-cc, оснащён контейнером для безопасной выдачи ключа, предназначенным для получения закрытого ключа для расшифровки сообщений Kafka и отображения сообщений в веб-интерфейсе.
В этом выпуске предварительной версии мы рекомендуем для тестирования и оценки создавать или использовать существующий ресурс уровня Azure Key Vault Premium для поддержки хранения ключей в аппаратном модуле безопасности (HSM). Мы не рекомендуем использовать ваше рабочее хранилище ключей. Если у вас нет Azure Key Vault, см. статью "Создание хранилища ключей" с помощью Azure CLI.
Предоставьте созданному ранее управляемому удостоверению и учетной записи доступ к хранилищу ключей. Назначьте обоим удостоверениям роли Azure RBAC Key Vault Crypto Officer и Key Vault Crypto User.
Примечание.
Управляемая идентичность — это значение, присваиваемое переменной
USER_ASSIGNED_IDENTITY_NAME.Чтобы добавить назначения ролей, необходимо обладать разрешениями
Microsoft.Authorization/roleAssignments/writeиMicrosoft.Authorization/roleAssignments/delete, например Администратор доступа к данным Key Vault, Администратор доступа пользователей или Владелец.Для поддержки ключей, защищенных HSM, необходимо использовать номер SKU Хранилища ключей уровня "Премиум".
Выполните следующую команду, чтобы задать область:
AKV_SCOPE=$(az keyvault show --name <AZURE_AKV_RESOURCE_NAME> --query id --output tsv)Выполните следующую команду, чтобы назначить роль Key Vault Crypto Officer.
az role assignment create --role "Key Vault Crypto Officer" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPEВыполните следующую команду, чтобы назначить роль Key Vault Crypto User.
az role assignment create --role "Key Vault Crypto User" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPEУстановите кластер Kafka в пространстве имен kafka, выполнив следующую команду:
kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafkaВыполните следующую команду, чтобы применить
kafkaфайл CR кластера.kubectl apply -f https://strimzi.io/examples/latest/kafka/kafka-persistent-single.yaml -n kafkaПодготовьте ключ шифрования и расшифровки RSA с помощью скрипта Bash для рабочей нагрузки из GitHub. Сохраните файл как
setup-key.sh.Задайте переменную среды
MAA_ENDPOINT, указав в ней полное доменное имя URI аттестации, выполнив следующую команду.export MAA_ENDPOINT="$(az attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-)"Проверьте, что FQDN URI Attest имеет правильный формат (MAA_ENDPOINT не должен включать префикс "https://"):
echo $MAA_ENDPOINTПримечание.
Чтобы настроить Microsoft Аттестация Azure, см. Краткое руководство. Настройка Аттестация Azure с помощью Azure CLI.
Скопируйте следующий манифест YAML и сохраните его как
consumer.yaml.apiVersion: v1 kind: Pod metadata: name: kafka-golang-consumer namespace: kafka labels: azure.workload.identity/use: "true" app.kubernetes.io/name: kafka-golang-consumer spec: serviceAccountName: workload-identity-sa runtimeClassName: kata-cc-isolation containers: - image: "mcr.microsoft.com/aci/skr:2.7" imagePullPolicy: Always name: skr env: - name: SkrSideCarArgs value: ewogICAgImNlcnRjYWNoZSI6IHsKCQkiZW5kcG9pbnRfdHlwZSI6ICJMb2NhbFRISU0iLAoJCSJlbmRwb2ludCI6ICIxNjkuMjU0LjE2OS4yNTQvbWV0YWRhdGEvVEhJTS9hbWQvY2VydGlmaWNhdGlvbiIKCX0gIAp9 command: - /bin/skr volumeMounts: - mountPath: /opt/confidential-containers/share/kata-containers/reference-info-base64 name: endor-loc - image: "mcr.microsoft.com/acc/samples/kafka/consumer:1.0" imagePullPolicy: Always name: kafka-golang-consumer env: - name: SkrClientKID value: kafka-encryption-demo - name: SkrClientMAAEndpoint value: sharedeus2.eus2.test.attest.azure.net - name: SkrClientAKVEndpoint value: "myKeyVault.vault.azure.net" - name: TOPIC value: kafka-demo-topic command: - /consume ports: - containerPort: 3333 name: kafka-consumer resources: limits: memory: 1Gi cpu: 200m volumes: - name: endor-loc hostPath: path: /opt/confidential-containers/share/kata-containers/reference-info-base64 --- apiVersion: v1 kind: Service metadata: name: consumer namespace: kafka spec: type: LoadBalancer selector: app.kubernetes.io/name: kafka-golang-consumer ports: - protocol: TCP port: 80 targetPort: kafka-consumerПримечание.
Обновите значение переменной окружения pod
SkrClientAKVEndpointтак, чтобы оно соответствовало URL-адресу вашего Azure Key Vault, не включая значение протоколаhttps://. Текущее значение заполнителя значения равноmyKeyVault.vault.azure.net. Обновите значение переменной среды podSkrClientMAAEndpointна значениеMAA_ENDPOINT. Можно найти значениеMAA_ENDPOINT, выполнив командуecho $MAA_ENDPOINTили командуaz attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-.Создайте политику безопасности для манифеста YAML потребителя Kafka и получите хэш политики безопасности, хранящейся в переменной
WORKLOAD_MEASUREMENT, выполнив следующую команду:export WORKLOAD_MEASUREMENT=$(az confcom katapolicygen -y consumer.yaml --print-policy | base64 -d | sha256sum | cut -d' ' -f1)Чтобы создать асимметричную пару ключей RSA (открытые и закрытые ключи), запустите
setup-key.shскрипт с помощью следующей команды. Значение<Azure Key Vault URL>должно быть равно<your-unique-keyvault-name>.vault.azure.netexport MANAGED_IDENTITY=${USER_ASSIGNED_CLIENT_ID} bash setup-key.sh "kafka-encryption-demo" <Azure Key Vault URL>Примечание.
Переменная среды
MANAGED_IDENTITYтребуется для bash-скриптаsetup-key.sh.Открытый ключ будет сохранён как
kafka-encryption-demo-pub.pemпосле выполнения bash-скрипта.
Внимание
Если вы получаете сообщение об ошибке
ForbiddenByRbac, возможно, потребуется подождать до 24 часов, так как внутренние службы управляемых удостоверений поддерживают отдельный кэш для каждого URI ресурса в течение 24 часов. См. также: устранение неполадок Azure RBAC.Чтобы убедиться, что ключи успешно отправлены в хранилище ключей, выполните следующие команды:
az account set --subscription <Subscription ID> az keyvault key list --vault-name <KeyVault Name> -o tableСкопируйте следующий манифест YAML и сохраните его как
producer.yaml.apiVersion: v1 kind: Pod metadata: name: kafka-producer namespace: kafka spec: containers: - image: "mcr.microsoft.com/acc/samples/kafka/producer:1.0" name: kafka-producer command: - /produce env: - name: TOPIC value: kafka-demo-topic - name: MSG value: "Azure Confidential Computing" - name: PUBKEY value: |- -----BEGIN PUBLIC KEY----- MIIBojAN***AE= -----END PUBLIC KEY----- resources: limits: memory: 1Gi cpu: 200mПримечание.
Обновите значение, которое начинается с
-----BEGIN PUBLIC KEY-----и заканчивается строками-----END PUBLIC KEY-----с содержимым, изkafka-encryption-demo-pub.pemкоторого было создано на предыдущем шаге.Разверните YAML-манифесты
consumerиproducer, используя файлы, сохранённые ранее.kubectl apply -f consumer.yamlkubectl apply -f producer.yamlПолучите IP-адрес веб-службы с помощью следующей команды:
kubectl get svc consumer -n kafkaСкопируйте и вставьте внешний IP-адрес службы потребителей в браузер и просмотрите расшифрованное сообщение.
Следующий пример напоминает выходные данные команды:
Welcome to Confidential Containers on AKS! Encrypted Kafka Message: Msg 1: Azure Confidential ComputingКроме того, следует также попытаться запустить консюмер как обычный pod Kubernetes, удалив спецификацию
skr containerиkata-cc runtime class. Поскольку вы не запускаете консюмер с runtime-классом kata-cc, политика больше не нужна.Удалите всю политику и снова просмотрите сообщения в браузере после повторного развертывания рабочей нагрузки. Сообщения отображаются как зашифрованный в кодировке Base64 зашифрованный текст, так как закрытый ключ шифрования не может быть извлечен. Невозможно получить ключ, так как потребитель больше не работает в конфиденциальной среде, и
skr containerотсутствует, предотвращая расшифровку сообщений.
Очистка
После завершения оценки этой функции, чтобы избежать расходов Azure, очистите ненужные ресурсы. Если вы развернули новый кластер в рамках оценки или тестирования, можно удалить кластер с помощью команды az aks delete .
az aks delete --resource-group myResourceGroup --name myAKSCluster
Если вы включили функцию «Конфиденциальные контейнеры» (предварительная версия) в существующем кластере, вы можете удалить поды с помощью команды kubectl delete pod.
kubectl delete pod pod-name
Следующие шаги
- Дополнительные сведения о выделенных узлах Azure для узлов с кластером AKS для использования аппаратной изоляции и контроля за событиями обслуживания платформы Azure.