Share via


Tutoriel : préparer un déploiement pour un conteneur confidentiel sur Azure Container Instances

Dans Azure Container Instances, vous pouvez utiliser des conteneurs confidentiels sur la plateforme serverless pour exécuter des applications de conteneur dans un environnement d’exécution de confiance (TEE) basé sur le matériel et attesté. Cette capacité peut aider à protéger les données en cours d'utilisation et fournit un cryptage en mémoire via la pagination imbriquée sécurisée (Secure Nested Paging).

Dans ce tutoriel, vous allez apprendre à :

  • Créez un modèle Azure Resource Manager (modèle ARM) pour un groupe de conteneurs confidentiel.
  • Générer une stratégie d’application de l’informatique confidentielle (CCE).
  • Déployer le groupe de conteneurs confidentiels sur Azure.

Prérequis

Pour suivre ce didacticiel, vous devez satisfaire aux exigences suivantes :

  • Azure CLI : vous devez disposer d’Azure CLI version 2.44.1 ou ultérieure sur votre ordinateur local. Pour déterminer votre version, exécutez az --version. Si vous devez effectuer une installation ou une mise à niveau, consultez Installer Azure CLI.

  • Extension confcom Azure CLI : vous devez avoir installé l’extension confcom Azure CLI version 0.30+ pour générer des stratégies d’application de l’informatique confidentielle.

    az extension add -n confcom
    
  • Docker : vous avez besoin de Docker installé localement. Docker fournit des packages qui configurent l’environnement Docker sur macOS, Windows et Linux.

    ce tutoriel présuppose une compréhension de base des concepts Docker essentiels, tels que les conteneurs, les images conteneur et les commandes docker de base. Pour apprendre les principes de base de Docker et des conteneurs, consultez la vue d’ensemble de Docker.

Important

Étant donné qu’Azure Cloud Shell n’inclut pas le démon Docker, vous devez installer Azure CLI et le moteur Docker sur votre ordinateur local pour suivre ce didacticiel. Vous ne pouvez pas utiliser Azure Cloud Shell pour ce didacticiel.

Créer un modèle ARM pour un groupe de conteneurs Container Instances

Dans ce tutoriel, vous allez déployer une application Hello World qui génère un rapport d’attestation matérielle. Commencez par créer un modèle ARM avec une ressource de groupe de conteneurs pour définir les propriétés de cette application. Vous utilisez ensuite ce modèle ARM avec les outils confcom Azure CLI pour générer une stratégie de CCE pour l’attestation.

Ce tutoriel utilise ce modèle ARM comme exemple. Pour afficher le code source de cette application, veuillez consultez Azure Container Instances Confidential Hello World.

Le modèle d’exemple ajoute deux propriétés à la définition de ressource Container Instances pour rendre le groupe de conteneurs confidentiel :

  • sku : vous permet de choisir entre des déploiements de groupes de conteneurs confidentiels et standard. Si vous n'ajoutez pas cette propriété à la ressource, le groupe de conteneurs sera un déploiement standard.
  • confidentialComputeProperties : vous permet de transmettre une stratégie CCE personnalisée pour l’attestation de votre groupe de conteneurs. Si vous n'ajoutez pas cet objet à la ressource, les composants logiciels qui s'exécutent dans le groupe de conteneurs ne seront pas validés.

Remarque

Le paramètre ccePolicy sous confidentialComputeProperties est vide. Vous le remplirez ultérieurement, après avoir créé la police.

Utilisez votre éditeur de texte préféré pour enregistrer ce modèle ARM sur votre ordinateur local sous le nom 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]"
      }
    }
  }

Créer une stratégie CCE personnalisée

Avec le modèle ARM que vous avez conçu et l’extension confcom Azure CLI, vous pouvez générer une stratégie CCE personnalisée. La stratégie CCE est utilisée pour l’attestation. L’outil prend le modèle ARM comme entrée pour générer la stratégie. La stratégie applique les images conteneurs, les variables d’environnement, les montages et les commandes spécifiques, qui peuvent ensuite être validés au démarrage du groupe de conteneurs. Si vous souhaitez en savoir plus sur l’extension confcom Azure CLI, consultez la documentation sur GitHub.

  1. Pour générer la stratégie CCE, exécutez la commande suivante en utilisant le modèle ARM comme entrée :

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

    Lorsque cette commande se termine, une chaîne Base64 générée en sortie doit apparaître dans le format suivant. Cette chaîne est la stratégie CCE que vous copiez et collez dans votre modèle ARM en tant que valeur de la propriété ccePolicy.

    cGFja2FnZSBwb2xpY3kKCmFwaV9zdm4gOj0gIjAuOS4wIgoKaW1wb3J0IGZ1dHVyZS5rZXl3b3Jkcy5ldmVyeQppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCgpmcmFnbWVudHMgOj0gWwpdCgpjb250YWluZXJzIDo9IFsKICAgIHsKICAgICAgICAiY29tbWFuZCI6IFsiL3BhdXNlIl0sCiAgICAgICAgImVudl9ydWxlcyI6IFt7InBhdHRlcm4iOiAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLCAic3RyYXRlZ3kiOiAic3RyaW5nIiwgInJlcXVpcmVkIjogdHJ1ZX0seyJwYXR0ZXJuIjogIlRFUk09eHRlcm0iLCAic3RyYXRlZ3kiOiAic3RyaW5nIiwgInJlcXVpcmVkIjogZmFsc2V9XSwKICAgICAgICAibGF5ZXJzIjogWyIxNmI1MTQwNTdhMDZhZDY2NWY5MmMwMjg2M2FjYTA3NGZkNTk3NmM3NTVkMjZiZmYxNjM2NTI5OTE2OWU4NDE1Il0sCiAgICAgICAgIm1vdW50cyI6IFtdLAogICAgICAgICJleGVjX3Byb2Nlc3NlcyI6IFtdLAogICAgICAgICJzaWduYWxzIjogW10sCiAgICAgICAgImFsbG93X2VsZXZhdGVkIjogZmFsc2UsCiAgICAgICAgIndvcmtpbmdfZGlyIjogIi8iCiAgICB9LApdCmFsbG93X3Byb3BlcnRpZXNfYWNjZXNzIDo9IHRydWUKYWxsb3dfZHVtcF9zdGFja3MgOj0gdHJ1ZQphbGxvd19ydW50aW1lX2xvZ2dpbmcgOj0gdHJ1ZQphbGxvd19lbnZpcm9ubWVudF92YXJpYWJsZV9kcm9wcGluZyA6PSB0cnVlCmFsbG93X3VuZW5jcnlwdGVkX3NjcmF0Y2ggOj0gdHJ1ZQoKCm1vdW50X2RldmljZSA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQp1bm1vdW50X2RldmljZSA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQptb3VudF9vdmVybGF5IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnVubW91bnRfb3ZlcmxheSA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpjcmVhdGVfY29udGFpbmVyIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmV4ZWNfaW5fY29udGFpbmVyIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmV4ZWNfZXh0ZXJuYWwgOj0geyAiYWxsb3dlZCIgOiB0cnVlIH0Kc2h1dGRvd25fY29udGFpbmVyIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnNpZ25hbF9jb250YWluZXJfcHJvY2VzcyA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpwbGFuOV9tb3VudCA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpwbGFuOV91bm1vdW50IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmdldF9wcm9wZXJ0aWVzIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmR1bXBfc3RhY2tzIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnJ1bnRpbWVfbG9nZ2luZyA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpsb2FkX2ZyYWdtZW50IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnNjcmF0Y2hfbW91bnQgOj0geyAiYWxsb3dlZCIgOiB0cnVlIH0Kc2NyYXRjaF91bm1vdW50IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnJlYXNvbiA6PSB7ImVycm9ycyI6IGRhdGEuZnJhbWV3b3JrLmVycm9yc30K
    
  2. Enregistrez les modifications de votre copie locale du modèle ARM.

Déployer le modèle

Dans les étapes suivantes, vous utilisez le Portail Microsoft Azure pour déployer un modèle. Vous pouvez également utiliser Azure PowerShell, Azure CLI ou l’API REST. Pour en savoir plus sur les autres méthodes de déploiement, consultez Déployer des modèles.

  1. Sélectionnez le bouton Déployer sur Azure pour vous connecter à Azure, puis commencer un déploiement d’instances de conteneur.

    Button to deploy the Resource Manager template to Azure.

  2. Sélectionnez Générer votre propre modèle dans l’éditeur.

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

    Le modèle JSON qui apparaît est en grande partie vide.

  3. Sélectionnez Charger le fichier afin de charger le fichier template.json que vous avez modifié en ajoutant la stratégie CCE dans les étapes précédentes.

    Screenshot of the button for loading a file.

  4. Sélectionnez Enregistrer.

  5. Sélectionnez ou entrez les valeurs suivantes :

    • Abonnement: Sélectionnez un abonnement Azure.
    • Groupe de ressources : Sélectionnez Créer, entrez un nom unique pour le groupe de ressources, puis sélectionnez OK.
    • Nom : acceptez le nom généré pour l’instance, ou entrez un nom.
    • Emplacement : sélectionnez un emplacement pour le groupe de ressources. Choisissez une région où les conteneurs confidentiels sont pris en charge. Exemple : Europe Nord.
    • Image : acceptez le nom d’image par défaut. Cet échantillon d’image Linux affiche une attestation matérielle.

    Acceptez les valeurs par défaut pour les propriétés restantes, puis sélectionnez Vérifier + créer.

    Screenshot of details for a custom ARM template deployment.

  6. Passez en revue les conditions générales. Si vous acceptez, sélectionnez J’accepte les termes et conditions mentionnés ci-dessus.

  7. Attendez que la notification Déploiement réussi s’affiche. Cela confirme que vous avez créé l'instance avec succès.

    Screenshot of a portal notification for successful deployment.

Vérifier les ressources déployées

Dans les étapes suivantes, vous utiliserez le Portail Microsoft Azure pour examiner les propriétés de l'instance de conteneur. Vous pourrez également utiliser un outil tel qu’Azure CLI.

  1. Dans le portail, recherchez Instances de conteneur, puis sélectionnez l’instance de conteneur que vous avez créée.

  2. Dans la page Vue d’ensemble, notez l’état de l’instance et son adresse IP.

    Screenshot of the overview page for a container group instance.

  3. Lorsque l’état de l’instance est En cours d’exécution, accédez à l’adresse IP dans votre navigateur.

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

    La présence du rapport d’attestation sous le logo Azure Container Instances confirme que le conteneur s’exécute sur du matériel qui prend en charge un TEE.

    Si vous effectuez un déploiement sur du matériel qui ne prend pas en charge de TEE (par exemple en choisissant une région où la référence Container Instances Confidential n’est pas disponible), aucun rapport d’attestation n’apparaît.

Maintenant que vous avez déployé un groupe de conteneurs confidentiels sur Container Instances, vous pouvez en savoir plus sur l’application des stratégies :