Руководство. Подготовка развертывания для конфиденциального контейнера на Экземпляры контейнеров Azure

В Экземпляры контейнеров Azure можно использовать конфиденциальные контейнеры на бессерверной платформе для запуска приложений контейнеров в аппаратной и проверенной доверенной среде выполнения (TEE). Эта возможность может помочь защитить используемые данные и обеспечить шифрование в памяти с помощью безопасного вложенного разбиения на страницы.

В этом руководстве описано следующее:

  • Создайте шаблон Azure Resource Manager (шаблон ARM) для конфиденциальной группы контейнеров.
  • Создайте политику применения конфиденциальных вычислений (CCE).
  • Разверните конфиденциальную группу контейнеров в Azure.

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

Чтобы завершить работу с этим руководством, необходимо выполнить следующие требования:

  • Azure CLI. На локальном компьютере необходимо установить Azure CLI версии 2.44.1 или более поздней версии. Чтобы узнать, какая версия используется, выполните команду az --version. Если вам необходимо выполнить установку или обновление, обратитесь к статье Установка Azure CLI.

  • Расширение конференц-связи Azure CLI. Для создания политик принудительного применения конфиденциальных вычислений необходимо установить расширение confcom Azure CLI версии 0.30+.

    az extension add -n confcom
    
  • Docker: Вам нужна локальная установка Docker. Docker предоставляет пакеты, которые настраивают среду Docker в ОС macOS, Windows и Linux.

    Для выполнения действий, описанных в этом учебнике, требуется базовое понимание таких основных понятий Docker, как контейнеры и образы контейнеров, а также знание основных команд docker. Ознакомьтесь с общими сведениями о Docker и контейнерах.

Внимание

Так как в Azure Cloud Shell нет управляющей программы Docker, необходимо установить интерфейс командной строки Azure и подсистему Docker на локальном компьютере , чтобы завершить работу с этим руководством. Вы не можете использовать Azure Cloud Shell для этого руководства.

Создание шаблона ARM для группы контейнеров Экземпляры контейнеров

В этом руководстве вы развернете приложение Hello World, которое создает отчет об аттестации оборудования. Сначала создайте шаблон ARM с ресурсом группы контейнеров, чтобы определить свойства этого приложения. Затем вы используете этот шаблон ARM с инструментом конференц-связи Azure CLI для создания политики CCE для аттестации.

В этом руководстве в качестве примера используется этот шаблон ARM. Чтобы просмотреть исходный код для этого приложения, см. Экземпляры контейнеров Azure Конфиденциальный hello World.

Пример шаблона добавляет два свойства в определение ресурса Экземпляры контейнеров, чтобы сделать группу контейнеров конфиденциальной:

  • sku: позволяет выбрать между развертываниями конфиденциальной и стандартной группы контейнеров. Если вы не добавите это свойство в ресурс, группа контейнеров будет стандартным развертыванием.
  • confidentialComputeProperties: позволяет передавать настраиваемую политику CCE для аттестации группы контейнеров. Если этот объект не добавлен в ресурс, компоненты программного обеспечения, выполняемые в группе контейнеров, не будут проверены.

Примечание.

Параметр ccePolicy под confidentialComputeProperties пустым. Вы заполните его после создания политики позже в руководстве.

Используйте предпочитаемый текстовый редактор, чтобы сохранить этот шаблон ARM на локальном компьютере как template.json.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "name": {
        "type": "string",
        "defaultValue": "helloworld",
        "metadata": {
          "description": "Name for the container group"
        }
      },
      "location": {
        "type": "string",
        "defaultValue": "North Europe",
        "metadata": {
          "description": "Location for all resources."
        }
      },
      "image": {
        "type": "string",
        "defaultValue": "mcr.microsoft.com/aci/aci-confidential-helloworld:v1",
        "metadata": {
          "description": "Container image to deploy. Should be of the form repoName/imagename:tag for images stored in public Docker Hub, or a fully qualified URI for other registries. Images from private registries require additional registry credentials."
        }
      },
      "port": {
        "type": "int",
        "defaultValue": 80,
        "metadata": {
          "description": "Port to open on the container and the public IP address."
        }
      },
      "cpuCores": {
        "type": "int",
        "defaultValue": 1,
        "metadata": {
          "description": "The number of CPU cores to allocate to the container."
        }
      },
      "memoryInGb": {
        "type": "int",
        "defaultValue": 1,
        "metadata": {
          "description": "The amount of memory to allocate to the container in gigabytes."
        }
      },
      "restartPolicy": {
        "type": "string",
        "defaultValue": "Never",
        "allowedValues": [
          "Always",
          "Never",
          "OnFailure"
        ],
        "metadata": {
          "description": "The behavior of Azure runtime if container has stopped."
        }
      }
    },
    "resources": [
      {
        "type": "Microsoft.ContainerInstance/containerGroups",
        "apiVersion": "2023-05-01",
        "name": "[parameters('name')]",
        "location": "[parameters('location')]",
        "properties": {
          "confidentialComputeProperties": {
            "ccePolicy": ""
          },
          "containers": [
            {
              "name": "[parameters('name')]",
              "properties": {
                "image": "[parameters('image')]",
                "ports": [
                  {
                    "port": "[parameters('port')]",
                    "protocol": "TCP"
                  }
                ],
                "resources": {
                  "requests": {
                    "cpu": "[parameters('cpuCores')]",
                    "memoryInGB": "[parameters('memoryInGb')]"
                  }
                }
              }
            }
          ],
          "sku": "Confidential",
          "osType": "Linux",
          "restartPolicy": "[parameters('restartPolicy')]",
          "ipAddress": {
            "type": "Public",
            "ports": [
              {
                "port": "[parameters('port')]",
                "protocol": "TCP"
              }
            ]
          }
        }
      }
    ],
    "outputs": {
      "containerIPv4Address": {
        "type": "string",
        "value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups', parameters('name'))).ipAddress.ip]"
      }
    }
  }

Создание настраиваемой политики CCE

С помощью созданного шаблона ARM и расширения конференц-связи Azure CLI можно создать настраиваемую политику CCE. Политика CCE используется для аттестации. Средство принимает шаблон ARM в качестве входных данных для создания политики. Политика применяет определенные образы контейнеров, переменные среды, подключения и команды, которые затем можно проверить при запуске группы контейнеров. Дополнительные сведения о расширении конференц-связи Azure CLI см . в документации на сайте GitHub.

  1. Чтобы создать политику CCE, выполните следующую команду с помощью шаблона ARM в качестве входных данных:

    az confcom acipolicygen -a .\template.json --print-policy
    

    По завершении этой команды строка Base64, созданная в виде выходных данных, должна отображаться в следующем формате. Эта строка — это политика CCE, которую вы копируете и вставляете в шаблон ARM в качестве значения ccePolicy свойства.

    cGFja2FnZSBwb2xpY3kKCmFwaV9zdm4gOj0gIjAuOS4wIgoKaW1wb3J0IGZ1dHVyZS5rZXl3b3Jkcy5ldmVyeQppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCgpmcmFnbWVudHMgOj0gWwpdCgpjb250YWluZXJzIDo9IFsKICAgIHsKICAgICAgICAiY29tbWFuZCI6IFsiL3BhdXNlIl0sCiAgICAgICAgImVudl9ydWxlcyI6IFt7InBhdHRlcm4iOiAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLCAic3RyYXRlZ3kiOiAic3RyaW5nIiwgInJlcXVpcmVkIjogdHJ1ZX0seyJwYXR0ZXJuIjogIlRFUk09eHRlcm0iLCAic3RyYXRlZ3kiOiAic3RyaW5nIiwgInJlcXVpcmVkIjogZmFsc2V9XSwKICAgICAgICAibGF5ZXJzIjogWyIxNmI1MTQwNTdhMDZhZDY2NWY5MmMwMjg2M2FjYTA3NGZkNTk3NmM3NTVkMjZiZmYxNjM2NTI5OTE2OWU4NDE1Il0sCiAgICAgICAgIm1vdW50cyI6IFtdLAogICAgICAgICJleGVjX3Byb2Nlc3NlcyI6IFtdLAogICAgICAgICJzaWduYWxzIjogW10sCiAgICAgICAgImFsbG93X2VsZXZhdGVkIjogZmFsc2UsCiAgICAgICAgIndvcmtpbmdfZGlyIjogIi8iCiAgICB9LApdCmFsbG93X3Byb3BlcnRpZXNfYWNjZXNzIDo9IHRydWUKYWxsb3dfZHVtcF9zdGFja3MgOj0gdHJ1ZQphbGxvd19ydW50aW1lX2xvZ2dpbmcgOj0gdHJ1ZQphbGxvd19lbnZpcm9ubWVudF92YXJpYWJsZV9kcm9wcGluZyA6PSB0cnVlCmFsbG93X3VuZW5jcnlwdGVkX3NjcmF0Y2ggOj0gdHJ1ZQoKCm1vdW50X2RldmljZSA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQp1bm1vdW50X2RldmljZSA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQptb3VudF9vdmVybGF5IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnVubW91bnRfb3ZlcmxheSA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpjcmVhdGVfY29udGFpbmVyIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmV4ZWNfaW5fY29udGFpbmVyIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmV4ZWNfZXh0ZXJuYWwgOj0geyAiYWxsb3dlZCIgOiB0cnVlIH0Kc2h1dGRvd25fY29udGFpbmVyIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnNpZ25hbF9jb250YWluZXJfcHJvY2VzcyA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpwbGFuOV9tb3VudCA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpwbGFuOV91bm1vdW50IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmdldF9wcm9wZXJ0aWVzIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmR1bXBfc3RhY2tzIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnJ1bnRpbWVfbG9nZ2luZyA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpsb2FkX2ZyYWdtZW50IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnNjcmF0Y2hfbW91bnQgOj0geyAiYWxsb3dlZCIgOiB0cnVlIH0Kc2NyYXRjaF91bm1vdW50IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnJlYXNvbiA6PSB7ImVycm9ycyI6IGRhdGEuZnJhbWV3b3JrLmVycm9yc30K
    
  2. Сохраните изменения в локальной копии шаблона ARM.

Развертывание шаблона

В следующих шагах для развертывания шаблона используется портал Azure. Вы также можете использовать Azure PowerShell, Azure CLI или REST API. Дополнительные сведения о других методах развертывания см. в статье "Развертывание шаблонов".

  1. Нажмите кнопку "Развернуть в Azure", чтобы войти в Azure и начать развертывание Экземпляры контейнеров.

    Button to deploy the Resource Manager template to Azure.

  2. Выберите Создать собственный шаблон в редакторе.

    Screenshot of the button for building your own template in the editor.

    Отображаемый шаблон JSON в основном пуст.

  3. Выберите файл загрузки и отправьте template.json, который был изменен путем добавления политики CCE на предыдущих шагах.

    Screenshot of the button for loading a file.

  4. Выберите Сохранить.

  5. Введите или выберите следующие значения:

    • Подписка— выберите подписку Azure.
    • Группа ресурсов: выберите "Создать", введите уникальное имя группы ресурсов и нажмите кнопку "ОК".
    • Имя: примите созданное имя для экземпляра или введите имя.
    • Расположение. Выберите расположение группы ресурсов. Выберите регион, в котором поддерживаются конфиденциальные контейнеры. Пример: Северная Европа.
    • Изображение. Примите имя образа по умолчанию. В этом примере образа Linux отображается аттестация оборудования.

    Примите значения по умолчанию для оставшихся свойств и нажмите кнопку "Проверить и создать".

    Screenshot of details for a custom ARM template deployment.

  6. Ознакомьтесь с условиями использования. Если вы согласны с ними, щелкните Я принимаю указанные выше условия.

  7. Подождите, пока появится уведомление об успешном развертывании. Он подтверждает успешное создание экземпляра.

    Screenshot of a portal notification for successful deployment.

Просмотр развернутых ресурсов

В следующих шагах вы используете портал Azure для просмотра свойств экземпляра контейнера. Вы также можете использовать средство, например Azure CLI.

  1. На портале найдите Экземпляры контейнеров и выберите созданный экземпляр контейнера.

  2. На странице обзора обратите внимание на состояние экземпляра и его IP-адрес.

    Screenshot of the overview page for a container group instance.

  3. Когда состояние экземпляра запущено, перейдите по IP-адресу в браузере.

    Screenshot of a browser view of an app deployed via Azure Container Instances.

    Наличие отчета аттестации под логотипом Экземпляры контейнеров Azure подтверждает, что контейнер работает на оборудовании, поддерживающем TEE.

    Если вы развертываете на оборудовании, которое не поддерживает TEE (например, выбрав регион, в котором Экземпляры контейнеров конфиденциальность недоступна), отчет аттестации не отображается.

Теперь, когда вы развернули конфиденциальную группу контейнеров в Экземпляры контейнеров, вы можете узнать больше о том, как применяются политики: