Kurz: Příprava nasazení pro důvěrný kontejner ve službě Azure Container Instances

Ve službě Azure Container Instances můžete pomocí důvěrných kontejnerů na bezserverové platformě spouštět kontejnerové aplikace v hardwarovém a ověřeném důvěryhodném spouštěcím prostředí (TEE). Tato funkce může pomoct chránit užitá data a poskytuje šifrování v paměti prostřednictvím zabezpečeného vnořeného stránkování.

V tomto kurzu se naučíte:

  • Vytvořte šablonu Azure Resource Manageru (šablonu ARM) pro důvěrnou skupinu kontejnerů.
  • Vygenerujte zásady vynucení důvěrných výpočetních operací (CCE).
  • Nasaďte důvěrnou skupinu kontejnerů do Azure.

Požadavky

K dokončení tohoto kurzu musíte splnit následující požadavky:

  • Azure CLI: Na místním počítači musíte mít nainstalované Rozhraní příkazového řádku Azure CLI verze 2.44.1 nebo novější. Pokud chcete najít svou verzi, spusťte az --versionpříkaz . Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace rozhraní příkazového řádku Azure CLI.

  • Rozšíření Confcom pro Azure CLI: Abyste mohli generovat důvěrné zásady vynucení výpočetních prostředků, musíte mít nainstalované rozšíření Azure CLI confcom verze 0.30 nebo novější.

    az extension add -n confcom
    
  • Docker: Potřebujete Docker nainstalovaný místně. Docker poskytuje balíčky, které nakonfigurují prostředí Dockeru v systému macOS, Windows a Linux.

    V tomto kurzu se předpokládá základní znalost základních konceptů Dockeru, jako jsou kontejnery, image kontejnerů a základní docker příkazy. Základní informace o Dockeru a kontejnerech najdete v článku Docker Overview (Přehled Dockeru).

Důležité

Vzhledem k tomu, že Azure Cloud Shell neobsahuje démona Dockeru, musíte nainstalovat Azure CLI i Modul Dockeru do místního počítače , abyste mohli absolvovat tento kurz. Pro účely tohoto kurzu nemůžete použít Azure Cloud Shell.

Vytvoření šablony ARM pro skupinu kontejnerů Container Instances

V tomto kurzu nasadíte aplikaci Hello World, která generuje sestavu ověření hardwaru. Začnete vytvořením šablony ARM s prostředkem skupiny kontejnerů, která definuje vlastnosti této aplikace. Tuto šablonu ARM pak použijete s nástroji azure CLI confcom k vygenerování zásad CCE pro ověření identity.

Tento kurz používá tuto šablonu ARM jako příklad. Pokud chcete zobrazit zdrojový kód pro tuto aplikaci, přečtěte si téma Důvěrné Hello World ve službě Azure Container Instances.

Ukázková šablona přidá do definice prostředku Container Instances dvě vlastnosti, aby byla skupina kontejnerů důvěrná:

  • sku: Umožňuje vybrat mezi důvěrnými a standardními nasazeními skupin kontejnerů. Pokud tuto vlastnost do prostředku nepřidáte, skupina kontejnerů bude standardním nasazením.
  • confidentialComputeProperties: Umožňuje předat vlastní zásady CCE pro ověření vaší skupiny kontejnerů. Pokud tento objekt do prostředku nepřidáte, softwarové komponenty, které běží v rámci skupiny kontejnerů, nebudou ověřeny.

Poznámka:

Parametr ccePolicy v části confidentialComputeProperties je prázdný. Po vygenerování zásad ho vyplníte později v kurzu.

Pomocí upřednostňovaného textového editoru uložte tuto šablonu ARM na místní počítač jako 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]"
      }
    }
  }

Vytvoření vlastní zásady CCE

Pomocí šablony ARM, kterou jste vytvořili a rozšíření Confcom pro Azure CLI, můžete vygenerovat vlastní zásady CCE. Zásady CCE se používají k ověření identity. Nástroj vezme šablonu ARM jako vstup pro vygenerování zásady. Zásada vynucuje konkrétní image kontejneru, proměnné prostředí, připojení a příkazy, které se pak dají ověřit při spuštění skupiny kontejnerů. Další informace o rozšíření Confcom v Azure CLI najdete v dokumentaci na GitHubu.

  1. Pokud chcete vygenerovat zásadu CCE, spusťte následující příkaz pomocí šablony ARM jako vstupu:

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

    Po dokončení tohoto příkazu by se měl zobrazit řetězec Base64 vygenerovaný jako výstup v následujícím formátu. Tento řetězec je zásada CCE, kterou zkopírujete a vložíte do šablony ARM jako hodnotu ccePolicy vlastnosti.

    cGFja2FnZSBwb2xpY3kKCmFwaV9zdm4gOj0gIjAuOS4wIgoKaW1wb3J0IGZ1dHVyZS5rZXl3b3Jkcy5ldmVyeQppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCgpmcmFnbWVudHMgOj0gWwpdCgpjb250YWluZXJzIDo9IFsKICAgIHsKICAgICAgICAiY29tbWFuZCI6IFsiL3BhdXNlIl0sCiAgICAgICAgImVudl9ydWxlcyI6IFt7InBhdHRlcm4iOiAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLCAic3RyYXRlZ3kiOiAic3RyaW5nIiwgInJlcXVpcmVkIjogdHJ1ZX0seyJwYXR0ZXJuIjogIlRFUk09eHRlcm0iLCAic3RyYXRlZ3kiOiAic3RyaW5nIiwgInJlcXVpcmVkIjogZmFsc2V9XSwKICAgICAgICAibGF5ZXJzIjogWyIxNmI1MTQwNTdhMDZhZDY2NWY5MmMwMjg2M2FjYTA3NGZkNTk3NmM3NTVkMjZiZmYxNjM2NTI5OTE2OWU4NDE1Il0sCiAgICAgICAgIm1vdW50cyI6IFtdLAogICAgICAgICJleGVjX3Byb2Nlc3NlcyI6IFtdLAogICAgICAgICJzaWduYWxzIjogW10sCiAgICAgICAgImFsbG93X2VsZXZhdGVkIjogZmFsc2UsCiAgICAgICAgIndvcmtpbmdfZGlyIjogIi8iCiAgICB9LApdCmFsbG93X3Byb3BlcnRpZXNfYWNjZXNzIDo9IHRydWUKYWxsb3dfZHVtcF9zdGFja3MgOj0gdHJ1ZQphbGxvd19ydW50aW1lX2xvZ2dpbmcgOj0gdHJ1ZQphbGxvd19lbnZpcm9ubWVudF92YXJpYWJsZV9kcm9wcGluZyA6PSB0cnVlCmFsbG93X3VuZW5jcnlwdGVkX3NjcmF0Y2ggOj0gdHJ1ZQoKCm1vdW50X2RldmljZSA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQp1bm1vdW50X2RldmljZSA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQptb3VudF9vdmVybGF5IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnVubW91bnRfb3ZlcmxheSA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpjcmVhdGVfY29udGFpbmVyIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmV4ZWNfaW5fY29udGFpbmVyIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmV4ZWNfZXh0ZXJuYWwgOj0geyAiYWxsb3dlZCIgOiB0cnVlIH0Kc2h1dGRvd25fY29udGFpbmVyIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnNpZ25hbF9jb250YWluZXJfcHJvY2VzcyA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpwbGFuOV9tb3VudCA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpwbGFuOV91bm1vdW50IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmdldF9wcm9wZXJ0aWVzIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CmR1bXBfc3RhY2tzIDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnJ1bnRpbWVfbG9nZ2luZyA6PSB7ICJhbGxvd2VkIiA6IHRydWUgfQpsb2FkX2ZyYWdtZW50IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnNjcmF0Y2hfbW91bnQgOj0geyAiYWxsb3dlZCIgOiB0cnVlIH0Kc2NyYXRjaF91bm1vdW50IDo9IHsgImFsbG93ZWQiIDogdHJ1ZSB9CnJlYXNvbiA6PSB7ImVycm9ycyI6IGRhdGEuZnJhbWV3b3JrLmVycm9yc30K
    
  2. Uložte změny do místní kopie šablony ARM.

Nasazení šablony

V následujících krocích nasadíte šablonu pomocí webu Azure Portal. Můžete také použít Azure PowerShell, Azure CLI nebo rozhraní REST API. Další informace o dalších metodách nasazení najdete v tématu Nasazení šablon.

  1. Vyberte tlačítko Nasadit do Azure, abyste se přihlásili k Azure a zahájili nasazení služby Container Instances.

    Button to deploy the Resource Manager template to Azure.

  2. Vyberte Vytvořit vlastní šablonu v editoru.

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

    Formát JSON šablony, který se zobrazí, je většinou prázdný.

  3. Vyberte Načíst soubor a nahrajte template.json, které jste upravili přidáním zásad CCE v předchozích krocích.

    Screenshot of the button for loading a file.

  4. Zvolte Uložit.

  5. Vyberte a zadejte následující hodnoty:

    • Předplatné: Vyberte předplatné Azure.
    • Skupina prostředků: Vyberte Vytvořit nový, zadejte jedinečný název skupiny prostředků a pak vyberte OK.
    • Název: Přijměte vygenerovaný název instance nebo zadejte název.
    • Umístění: Vyberte umístění pro skupinu prostředků. Zvolte oblast, ve které se podporují důvěrné kontejnery. Příklad: Severní Evropa.
    • Obrázek: Přijměte výchozí název image. Tato ukázková image Linuxu zobrazuje ověření hardwaru.

    Přijměte výchozí hodnoty pro zbývající vlastnosti a pak vyberte Zkontrolovat a vytvořit.

    Screenshot of details for a custom ARM template deployment.

  6. Přečtěte si podmínky a ujednání. Pokud souhlasíte, vyberte Souhlasím s podmínkami a ujednáními uvedenými výše.

  7. Počkejte, až se zobrazí oznámení o úspěšném nasazení. Potvrdí, že jste instanci úspěšně vytvořili.

    Screenshot of a portal notification for successful deployment.

Kontrola nasazených prostředků

V následujících krocích pomocí webu Azure Portal zkontrolujete vlastnosti instance kontejneru. Můžete také použít nástroj, jako je Azure CLI.

  1. Na portálu vyhledejte službu Container Instances a pak vyberte instanci kontejneru, kterou jste vytvořili.

  2. Na stránce Přehled si poznamenejte stav instance a její IP adresy.

    Screenshot of the overview page for a container group instance.

  3. Pokud je instance spuštěná, přejděte v prohlížeči na IP adresu.

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

    Přítomnost sestavy ověření identity pod logem Azure Container Instances potvrzuje, že kontejner běží na hardwaru, který podporuje TEE.

    Pokud nasadíte na hardware, který nepodporuje TEE (například zvolením oblasti, ve které není k dispozici důvěrné služby Container Instances), nezobrazí se žádná sestava ověření identity.

Teď, když jste nasadili důvěrnou skupinu kontejnerů ve službě Container Instances, najdete další informace o tom, jak se zásady vynucují: