Compartir vía


Tutorial: Preparación de una implementación para un contenedor confidencial en Azure Container Instances

En Azure Container Instances, puede usar contenedores confidenciales en la plataforma sin servidor para ejecutar aplicaciones de contenedor en un entorno de ejecución de confianza (TEE) basado en hardware y atestiguado. Esta funcionalidad puede ayudar a proteger los datos en uso y proporcionar cifrado en memoria a través de paginación anidada segura.

En este tutorial, aprenderá a:

  • Cree una plantilla de Azure Resource Manager (plantilla de ARM) para un grupo de contenedores confidencial.
  • Genere una directiva de cumplimiento de computación confidencial (CCE).
  • Implemente el grupo de contenedores confidenciales en Azure.

Requisitos previos

Para completar este tutorial es preciso cumplir los siguientes requisitos:

  • CLI de Azure: debe tener la versión 2.44.1 de la CLI de Azure o cualquier versión posterior instalada en el equipo local. Para buscar su versión, ejecute az --version. Si necesita instalarla o actualizarla, consulte Instalación de la CLI de Azure.

  • Extensión confcom de la CLI de Azure: debe tener instalada la versión 0.30+ de la extensión confcom de la CLI de Azure para generar directivas de cumplimiento de computación confidencial.

    az extension add -n confcom
    
  • Docker: necesita Docker instalado localmente. Docker dispone de paquetes que configuran el entorno de Docker en macOS, Windows y Linux.

    en este tutorial se supone que el usuario tiene un conocimiento básico de los principales conceptos de Docker, como los contenedores, las imágenes de contenedor y los comandos básicos de docker. Para conocer los principios básicos de Docker y de los contenedores, consulte Introducción a Docker.

Importante

Dado que Azure Cloud Shell no incluye el demonio de Docker, para completar este tutorial es preciso instalar tanto la CLI de Azure como el motor de Docker en el equipo local. Azure Cloud Shell no se puede instalar para este tutorial.

Creación de una plantilla de ARM para un grupo de contenedores de Container Instances

En este tutorial, implementará una aplicación Hola mundo que genera un informe de atestación de hardware. Para empezar, cree una plantilla de ARM con un recurso de grupo de contenedores para definir las propiedades de esta aplicación. Después, use esta plantilla de ARM con las herramientas confcom de la CLI de Azure para generar una directiva de CCE para la atestación.

En este tutorial se usa esta plantilla de ARM como ejemplo. Para ver el código fuente de esta aplicación, consulte Hola mundo de Azure Confidential Container Instances.

La plantilla de ejemplo agrega dos propiedades a la definición de recursos de Container Instances para que el grupo de contenedores sea confidencial:

  • sku: permite seleccionar entre implementaciones de grupos de contenedores confidenciales y estándar. Si no agrega esta propiedad al recurso, el grupo de contenedores es una implementación estándar.
  • confidentialComputeProperties: permite pasar una directiva de CCE personalizada para la atestación del grupo de contenedores. Si no agrega este objeto al recurso, los componentes de software que se ejecutan en el grupo de contenedores no se validarán.

Nota:

El parámetro ccePolicy en confidentialComputeProperties está en blanco. Lo rellenará cuando genere la directiva más adelante en el tutorial.

Use el editor de texto que prefiera para guardar esta plantilla de ARM en el equipo 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]"
      }
    }
  }

Creación de una directiva de CCE personalizada

Con la plantilla de ARM que ha diseñado y la extensión confcom de la CLI de Azure, puede generar una directiva de CCE personalizada. La directiva de CCE se usa para la atestación. La herramienta toma la plantilla de ARM como entrada para generar la directiva. La directiva aplica las imágenes de contenedor específicas, las variables de entorno, los montajes y los comandos, que luego se pueden validar cuando se inicia el grupo de contenedores. Para más información sobre la extensión confcom de la CLI de Azure, consulte la documentación de en GitHub.

  1. Para generar la directiva de CCE, ejecute el siguiente comando con la plantilla de ARM como entrada:

    az confcom acipolicygen -a .\template.json
    

    Cuando finalice este comando, aparecerá automáticamente una cadena base64 generada como salida en la propiedad ccePolicy de la plantilla de ARM.

Implementación de la plantilla

En los pasos siguientes, usará Azure Portal para implementar la plantilla. También puede usar Azure PowerShell, la CLI de Azure o la API de REST. Para obtener información sobre otros métodos de implementación, consulte Implementación de plantillas.

  1. Seleccione el botón Implementar en Azure para iniciar sesión en Azure e iniciar una implementación de Container Instances.

    Botón para implementar la plantilla de Resource Manager en Azure.

  2. Seleccione Cree su propia plantilla en el editor.

    Captura de pantalla del botón para crear su propia plantilla en el editor.

    El JSON de plantilla que aparece está principalmente en blanco.

  3. Seleccione Cargar archivo y cargue template.json, que ha modificado agregando la directiva de CCE en los pasos anteriores.

    Captura de pantalla del botón para cargar un archivo.

  4. Seleccione Guardar.

  5. Seleccione o escriba los siguientes valores:

    • Suscripción: Seleccione una suscripción de Azure.
    • Grupo de recursos: Seleccione Crear nuevo, escriba un nombre único para el grupo de recursos y seleccione Aceptar.
    • Nombre: acepte el nombre que se genera para la instancia o escriba otro nombre.
    • Ubicación: seleccione una ubicación para el grupo de recursos. Elija una región en la que se admitan contenedores confidenciales. Ejemplo: Norte de Europa.
    • Imagen: acepte el nombre de imagen predeterminado. Esta imagen de Linux de ejemplo muestra una atestación de hardware.

    Acepte los valores predeterminados para las propiedades restantes y, a continuación, seleccione Revisar y crear.

    Captura de pantalla de los detalles de una implementación de plantilla de ARM personalizada.

  6. Revise los términos y condiciones. Si está de acuerdo con ellos, seleccione Acepto los términos y condiciones indicados anteriormente.

  7. Espere hasta que aparezca la notificación de Implementación correcta. Confirma que ha creado correctamente la instancia.

    Captura de pantalla de una notificación del portal para una implementación correcta.

Revisión de los recursos implementados

En los pasos siguientes, usará Azure Portal para revisar las propiedades de la instancia de contenedor. También puede usar una herramienta como la CLI de Azure.

  1. En Azure Portal, busque Container Instances y seleccione la instancia de contenedor que creó.

  2. En la página de información general, observe el valor del campo Estado de la instancia y el de Dirección IP.

    Captura de pantalla de la página de información general de una instancia de grupo de contenedores.

  3. Cuando el estado de la instancia es En ejecución, vaya a la dirección IP del explorador.

    Captura de pantalla de una vista del explorador de una aplicación implementada mediante Azure Container Instances.

    La presencia del informe de atestación debajo del logotipo de Azure Container Instances confirma que el contenedor se ejecuta en un hardware que admite un TEE.

    Si implementa en un hardware que no admite un TEE (por ejemplo, eligiendo una región en la que Confidential Container Instances no está disponible), no aparece ningún informe de atestación.

Ahora que ha implementado un grupo de contenedores confidencial en Container Instances, puede obtener más información sobre cómo se aplican las directivas: