Självstudie: Förbereda en distribution för en konfidentiell container på Azure Container Instances
I Azure Container Instances kan du använda konfidentiella containrar på den serverlösa plattformen för att köra containerprogram i en maskinvarubaserad och intygad betrodd körningsmiljö (TEE). Den här funktionen kan hjälpa till att skydda data som används och ger minnesintern kryptering via säker kapslad växling.
I den här självstudien lär du dig att:
- Skapa en Azure Resource Manager-mall (ARM-mall) för en konfidentiell containergrupp.
- Generera en cce-princip (confidential computing enforcement).
- Distribuera den konfidentiella containergruppen till Azure.
Förutsättningar
För att slutföra den här självstudien måste du uppfylla följande krav:
Azure CLI: Du måste ha Azure CLI version 2.44.1 eller senare installerat på den lokala datorn. Du hittar din version genom att köra
az --version
. Om du behöver installera eller uppgradera kan du läsa informationen i Installera Azure CLI.Azure CLI-konfigurationstillägg: Du måste ha Azure CLI confcom-tillägget version 0.30+ installerat för att generera principer för efterlevnad av konfidentiell databehandling.
az extension add -n confcom
Docker: Du behöver Docker installerat lokalt. Docker innehåller paket som konfigurerar Docker-miljön på macOS, Windows och Linux.
Den här självstudien förutsätter en grundläggande förståelse av grundläggande Docker-begrepp som containrar, containeravbildningar och grundläggande
docker
kommandon. En introduktion till grunderna för Docker och containrar finns i Docker-översikt.
Viktigt!
Eftersom Azure Cloud Shell inte innehåller Docker-daemon måste du installera både Azure CLI och Docker Engine på den lokala datorn för att slutföra den här självstudien. Du kan inte använda Azure Cloud Shell för den här självstudien.
Skapa en ARM-mall för en containergrupp för containerinstanser
I den här självstudien distribuerar du ett Hello World-program som genererar en rapport om maskinvaruattestering. Du börjar med att skapa en ARM-mall med en containergruppresurs för att definiera egenskaperna för det här programmet. Sedan använder du den här ARM-mallen med Azure CLI-konfigurationsverktyget för att generera en CCE-princip för attestering.
I den här självstudien används den här ARM-mallen som exempel. Information om hur du visar källkoden för det här programmet finns i Azure Confidential Container Instances Hello World.
Exempelmallen lägger till två egenskaper i resursdefinitionen containerinstanser för att göra containergruppen konfidentiell:
sku
: Gör att du kan välja mellan konfidentiella distributioner och standarddistributioner av containergrupper. Om du inte lägger till den här egenskapen i resursen är containergruppen en standarddistribution.confidentialComputeProperties
: Gör att du kan skicka in en anpassad CCE-princip för attestering av din containergrupp. Om du inte lägger till det här objektet i resursen verifieras inte de programvarukomponenter som körs i containergruppen.
Kommentar
Parametern ccePolicy
under confidentialComputeProperties
är tom. Du fyller i den när du genererar principen senare i självstudien.
Använd önskad textredigerare för att spara arm-mallen på den lokala datorn när 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]"
}
}
}
Skapa en anpassad CCE-princip
Med ARM-mallen som du skapade och Azure CLI-konfigurationstillägget kan du generera en anpassad CCE-princip. CCE-principen används för attestering. Verktyget tar ARM-mallen som indata för att generera principen. Principen tillämpar de specifika containeravbildningarna, miljövariablerna, monteringarna och kommandona, som sedan kan verifieras när containergruppen startas. Mer information om Azure CLI-konfigurationstillägget finns i dokumentationen på GitHub.
Om du vill generera CCE-principen kör du följande kommando med hjälp av ARM-mallen som indata:
az confcom acipolicygen -a .\template.json
När det här kommandot är klart visas automatiskt en Base64-sträng som genereras som utdata i
ccePolicy
egenskapen för ARM-mallen.
Distribuera mallen
I följande steg använder du Azure Portal för att distribuera mallen. Du kan också använda Azure PowerShell, Azure CLI eller REST-API:et. Mer information om andra distributionsmetoder finns i Distribuera mallar.
Välj knappen Distribuera till Azure för att logga in på Azure och starta en containerinstansdistribution.
Välj alternativet för att skapa din egen mall i redigeringsprogrammet.
Mallens JSON som visas är mestadels tom.
Välj Läs in fil och ladda upp template.json, som du ändrade genom att lägga till CCE-principen i föregående steg.
Välj Spara.
Välj eller ange följande värden:
- Prenumeration: Välj en Azure-prenumeration.
- Resursgrupp: Välj Skapa ny, ange ett unikt namn för resursgruppen och välj sedan OK.
- Namn: Acceptera det genererade namnet för instansen eller ange ett namn.
- Plats: Välj en plats för resursgruppen. Välj en region där konfidentiella containrar stöds. Exempel: Europa, norra.
- Bild: Acceptera standardbildens namn. Den här Linux-exempelbilden visar en maskinvaruattestering.
Acceptera standardvärden för de återstående egenskaperna och välj sedan Granska + skapa.
Granska villkoren. Om du samtycker väljer du Jag godkänner de villkor som anges ovan.
Vänta tills meddelandet Distributionen lyckades visas. Det bekräftar att du har skapat instansen.
Granska distribuerade resurser
I följande steg använder du Azure Portal för att granska egenskaperna för containerinstansen. Du kan också använda ett verktyg som Azure CLI.
I portalen söker du efter Container Instances och väljer sedan den containerinstans som du skapade.
På sidan Översikt noterar du status för instansen och dess IP-adress.
När statusen för instansen körs går du till IP-adressen i webbläsaren.
Förekomsten av attesteringsrapporten under Azure Container Instances-logotypen bekräftar att containern körs på maskinvara som stöder en TEE.
Om du distribuerar till maskinvara som inte stöder en TEE (till exempel genom att välja en region där konfidentiella containerinstanser inte är tillgängliga) visas ingen attesteringsrapport.
Relaterat innehåll
Nu när du har distribuerat en konfidentiell containergrupp på Container Instances kan du lära dig mer om hur principer tillämpas: