Compartilhar via


Tutorial: preparar uma implantação para um contêiner confidencial em Instâncias de Contêiner do Azure

Nas Instâncias de Contêiner do Azure, use os contêineres confidenciais na plataforma sem servidor, para executar aplicativos de contêiner em um TEE (Ambiente de Execução Confiável) baseado em hardware e atestado. Essa funcionalidade pode ajudar a proteger os dados em uso e fornece criptografia na memória por meio da Paginação Aninhada Segura.

Neste tutorial, você aprenderá a:

  • Crie um modelo do ARM (modelo do Azure Resource Manager) para um grupo de contêineres confidencial.
  • Gerar uma política de CCE (aplicação de computação confidencial).
  • Implantar o grupo de contêineres confidencial no Azure.

Pré-requisitos

Para concluir este tutorial, é necessário atender aos requisitos a seguir:

  • CLI do Azure: você precisa ter a versão 2.44.1 ou posterior da CLI do Azure instalada no computador local. Para encontrar suas versões, execute az --version. Se você precisar instalar ou atualizar, confira Instalar a CLI do Azure.

  • Extensão de configuração da CLI do Azure: você precisará ter a versão 0.30+ da extensão confcom da CLI do Azure instalada para gerar políticas de implementação de computação confidencial.

    az extension add -n confcom
    
  • Docker: você precisará do Docker instalado localmente. O Docker fornece pacotes que configuram o ambiente do Docker no macOS, no Windows e no Linux.

    este tutorial pressupõe uma compreensão básica dos conceitos fundamentais do Docker, como contêineres, imagens de contêineres e comandos básicos do docker. Para instruções sobre conceitos básicos do Docker e de contêiner, consulte a visão geral do Docker.

Importante

Como o Azure Cloud Shell não inclui o daemon do Docker, você precisará instalar a CLI do Azure e o Mecanismo do Docker no computador local para concluir este tutorial. Não é possível usar o Azure Cloud Shell para este tutorial.

Criar um modelo do ARM para um grupo de contêineres de Instâncias de Contêiner

Neste tutorial, você implantará um aplicativo Olá, Mundo, que gera um relatório de atestado de hardware. Você deve começar criando um modelo de ARM com um recurso de grupo de contêineres para definir as propriedades desse aplicativo. Em seguida, use esse modelo do ARM com as ferramentas de configuração da CLI do Azure para gerar uma política de CCE para atestado.

Este tutorial usa este modelo do ARM como exemplo. Para ver o código-fonte para esse aplicativo, confira Olá, Mundo de Instâncias de Contêiner Confidenciais do Azure.

O modelo de exemplo adiciona duas propriedades à definição de recurso instâncias de contêiner para tornar o grupo de contêineres confidencial:

  • sku: permite selecionar uma entre as implantações de grupo de contêineres padrão e confidencial. Caso não adicione essa propriedade ao recurso, o grupo de contêineres será uma implantação padrão.
  • confidentialComputeProperties: permite passar uma política de CCE personalizada para atestado do seu grupo de contêineres. Caso não adicione esse objeto ao recurso, os componentes de software executados no grupo de contêineres não serão validados.

Observação

O parâmetro ccePolicy sob confidentialComputeProperties está em branco. Você irá preenchê-lo quando gerar a política, mais adiante no tutorial.

Use seu editor de texto favorito para salvar esse modelo do ARM no seu computador local como 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/acc/samples/aci/helloworld:2.8",
        "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]"
      }
    }
  }

Criar uma política de CCE personalizada

Com o modelo do ARM que elaborou e a extensão confcom da CLI do Azure, é possível gerar uma política de CCE personalizada. A política de CCE é usada para atestar. A ferramenta utiliza o modelo do ARM como uma entrada de dados para gerar a política. A política implementa as imagens de contêiner específicas, variáveis do ambiente, montagens e comandos, que podem ser validados quando o grupo de contêineres é iniciado. Para obter mais informações sobre a extensão de configuração da CLI do Azure, consulte a documentação no GitHub.

  1. Para gerar uma política de CCE, execute o seguinte comando usando como entrada de dados o modelo do ARM:

    az confcom acipolicygen -a .\template.json
    

    Quando esse comando for concluído, uma cadeia de caracteres Base64 gerada como saída aparecerá automaticamente na propriedade ccePolicy do modelo do ARM.

Implantar o modelo

Nas etapas a seguir, use o portal do Azure para implantar o modelo. Também é possível usar o Azure PowerShell, a CLI do Azure ou a API REST. Para saber mais sobre outros métodos de implantação, confira Implantar modelos.

  1. Selecione o botão Implantar no Azure para entrar no Azure e iniciar uma implantação de Instâncias de Contêiner.

    Botão para implantar o modelo do Resource Manager no Azure.

  2. Selecione Criar seu próprio modelo no editor.

    Captura de tela do botão para criar seu próprio modelo no editor.

    O JSON do modelo que aparece está em branco.

  3. Selecione Carregar arquivo e fazer upload de template.json, que você modificou adicionando a política de CCE nas etapas anteriores.

    Captura de tela do botão para carregar um arquivo.

  4. Selecione Salvar.

  5. Selecione ou insira os valores a seguir:

    • Assinatura: Selecione uma assinatura do Azure.
    • Grupo de recursos: selecione Criar, insira um nome exclusivo para o grupo de recursos e selecione OK.
    • Nome: aceite o nome gerado para a instância ou insira um nome.
    • Local: selecione um local para o grupo de recursos. Escolha uma região em que haja suporte para contêineres confidenciais. Exemplo: Norte da Europa.
    • Imagem: aceite o nome da imagem padrão. Esse exemplo de imagem do Linux mostra um atestado de hardware.

    Aceite valores padrão para as propriedades restantes e selecione Examinar + criar.

    Captura de tela dos detalhes de uma implantação personalizada do modelo do ARM.

  6. Examine os termos e condições. Se concordar, selecione Concordo com os termos e condições declarados acima.

  7. Aguarde até que a notificação bem-sucedida da Implantação seja exibida. Ele confirma que a instância foi criada com êxito.

    Captura de tela de uma notificação do portal para uma implantação bem-sucedida.

Examinar os recursos implantados

Nas etapas a seguir, você usará o portal do Azure para examinar as propriedades da instância de contêiner. Também é possível usar uma ferramenta como a CLI do Azure.

  1. No portal, pesquise Instâncias de Contêiner e, em seguida selecione a instância de contêiner criada.

  2. Na página Visão geral, observe o status da instância do e seu endereço IP.

    Captura de tela da página de visão geral da instância de grupo de contêineres.

  3. Quando o status da instância estiver em execução, acesse o endereço IP no navegador.

    Captura de tela de uma exibição de navegador de um aplicativo implantado por meio das Instâncias de Contêiner do Azure.

    A presença do relatório de atestado abaixo do logotipo de Instâncias de Contêiner do Azure confirma que o contêiner está em execução no hardware que dá suporte a um TEE.

    Se você implantar em um hardware que não seja compatível com um TEE (por exemplo, ao escolher uma região em que as Instâncias de Contêiner Confidenciais não estão disponíveis), nenhum relatório de atestado será exibido.

Agora que você implantou um grupo de contêineres confidencial em Instâncias de Contêiner, saiba mais sobre como as políticas são implementadas: