Kryptera distributionsdata

När du kör Azure Container Instances-resurser (ACI) i molnet samlar ACI-tjänsten in och bevarar data som är relaterade till dina containrar. ACI krypterar automatiskt dessa data när de sparas i molnet. Den här krypteringen skyddar dina data för att uppfylla organisationens säkerhets- och efterlevnadsåtaganden. ACI ger dig också möjlighet att kryptera dessa data med din egen nyckel, vilket ger dig större kontroll över de data som är relaterade till dina ACI-distributioner.

Om ACI-datakryptering

Data i ACI krypteras och dekrypteras med hjälp av 256-bitars AES-kryptering. Den är aktiverad för alla ACI-distributioner och du behöver inte ändra distributionen eller containrarna för att dra nytta av den här krypteringen. Detta inkluderar metadata om distributionen, miljövariabler, nycklar som skickas till dina containrar och loggar som sparas när containrarna har stoppats så att du fortfarande kan se dem. Kryptering påverkar inte containergruppens prestanda och det finns ingen extra kostnad för kryptering.

Du kan förlita dig på Microsoft-hanterade nycklar för kryptering av dina containerdata, eller så kan du hantera krypteringen med dina egna nycklar. I följande tabell jämförs dessa alternativ:

Microsoft-hanterade nycklar Kundhanterade nycklar
Krypterings-/dekrypteringsåtgärder Azure Azure
Nyckellagring Microsoft Key Store Azure Key Vault
Ansvar för nyckelrotation Microsoft Kund
Nyckelåtkomst Endast Microsoft Microsoft, kund

Den här artikeln granskar två flöden för kryptering av data med en kundhanterad nyckel:

  • Kryptera data med en kundhanterad nyckel som lagras i en Standard Azure-Key Vault
  • Kryptera data med en kundhanterad nyckel som lagras i en nätverksskyddad Azure-Key Vault med Betrodda tjänster aktiverat.

Kryptera data med en kundhanterad nyckel som lagras i en Standard Azure-Key Vault

Förutsättningar

Skapa tjänstens huvudnamn för ACI

Det första steget är att se till att din Azure-klientorganisation har ett tjänsthuvudnamn tilldelat för att bevilja behörigheter till Azure Container Instances-tjänsten.

Viktigt

Kontrollera att du har behörighet att skapa tjänstens huvudnamn i klientorganisationen för att kunna köra följande kommando och skapa ett huvudnamn för tjänsten.

Följande CLI-kommando konfigurerar ACI SP i Din Azure-miljö:

az ad sp create --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9

Utdata från körningen av det här kommandot bör visa ett huvudnamn för tjänsten som har konfigurerats med "displayName": "Azure Container Instance Service".

Om du inte kan skapa tjänstens huvudnamn:

  • bekräfta att du har behörighet att göra det i din klientorganisation
  • kontrollera om det redan finns ett huvudnamn för tjänsten i klientorganisationen för distribution till ACI. Du kan göra det genom att köra az ad sp show --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9 och använda tjänstens huvudnamn i stället

Skapa en Key Vault resurs

Skapa en Azure-Key Vault med Azure Portal, Azure CLI eller Azure PowerShell.

Använd följande riktlinjer för egenskaperna för ditt nyckelvalv:

  • Namn: Ett unikt namn krävs.
  • Prenumeration: Välj en prenumeration.
  • Under Resursgrupp väljer du antingen en befintlig resursgrupp eller skapar en ny och anger ett resursgruppsnamn.
  • Välj en plats i listrutan Plats.
  • Du kan lämna de andra alternativen till standardinställningarna eller välja baserat på ytterligare krav.

Viktigt

När du använder kundhanterade nycklar för att kryptera en ACI-distributionsmall rekommenderar vi att följande två egenskaper anges i nyckelvalvet, Mjuk borttagning och Rensa inte. Dessa egenskaper är inte aktiverade som standard, men kan aktiveras med antingen PowerShell eller Azure CLI i ett nytt eller befintligt nyckelvalv.

Generera en ny nyckel

När ditt nyckelvalv har skapats navigerar du till resursen i Azure Portal. Klicka på Nycklar under Inställningar på den vänstra navigeringsmenyn på resursbladet. I vyn "Nycklar" klickar du på "Generera/importera" för att generera en ny nyckel. Använd ett unikt namn för den här nyckeln och andra inställningar baserat på dina krav.

Generera en ny nyckel

Ange åtkomstprincip

Skapa en ny åtkomstprincip för att tillåta att ACI-tjänsten får åtkomst till din nyckel.

  • När nyckeln har genererats går du tillbaka till resursbladet för nyckelvalvet och klickar på Åtkomstprinciper under Inställningar.
  • På sidan Åtkomstprinciper för nyckelvalvet klickar du på Lägg till åtkomstprincip.
  • Ange nyckelbehörigheterna så att de omfattar behörigheter för att hämta och ta bortnyckeluppsättningar
  • För Välj huvudnamn väljer du Azure Container Instance Service
  • Klicka på Lägg till längst ned

Åtkomstprincipen bör nu visas i nyckelvalvets åtkomstprinciper.

Ny åtkomstprincip

Ändra JSON-distributionsmallen

Viktigt

Kryptering av distributionsdata med en kundhanterad nyckel är tillgängligt i den senaste API-versionen (2019-12-01) som för närvarande lanseras. Ange den här API-versionen i distributionsmallen. Om du har problem med detta kontaktar du Azure-supporten.

När nyckelvalvets nyckel och åtkomstprincip har konfigurerats lägger du till följande egenskaper i ACI-distributionsmallen. Läs mer om hur du distribuerar ACI-resurser med en mall i Självstudie: Distribuera en grupp med flera containrar med hjälp av en Resource Manager mall.

  • Under resourcesanger du apiVersion till 2019-12-01.
  • Under avsnittet egenskaper för containergrupper i distributionsmallen lägger du till en encryptionProperties, som innehåller följande värden:
    • vaultBaseUrl: DNS-namnet på ditt nyckelvalv finns på översiktsbladet för nyckelvalvsresursen i portalen
    • keyName: namnet på nyckeln som genererades tidigare
    • keyVersion: den aktuella versionen av nyckeln. Du hittar detta genom att klicka på själva nyckeln (under "Nycklar" i avsnittet Inställningar i nyckelvalvsresursen)
  • Under egenskaperna för containergruppen lägger du till en sku egenskap med värdet Standard. Egenskapen sku krävs i API-version 2019-12-01.

Följande mallfragment visar dessa ytterligare egenskaper för att kryptera distributionsdata:

[...]
"resources": [
    {
        "name": "[parameters('containerGroupName')]",
        "type": "Microsoft.ContainerInstance/containerGroups",
        "apiVersion": "2019-12-01",
        "location": "[resourceGroup().location]",    
        "properties": {
            "encryptionProperties": {
                "vaultBaseUrl": "https://example.vault.azure.net",
                "keyName": "acikey",
                "keyVersion": "xxxxxxxxxxxxxxxx"
            },
            "sku": "Standard",
            "containers": {
                [...]
            }
        }
    }
]

Följande är en fullständig mall som är anpassad från mallen i Självstudie: Distribuera en grupp med flera containrar med hjälp av en Resource Manager mall.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "containerGroupName": {
      "type": "string",
      "defaultValue": "myContainerGroup",
      "metadata": {
        "description": "Container Group name."
      }
    }
  },
  "variables": {
    "container1name": "aci-tutorial-app",
    "container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
    "container2name": "aci-tutorial-sidecar",
    "container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
  },
  "resources": [
    {
      "name": "[parameters('containerGroupName')]",
      "type": "Microsoft.ContainerInstance/containerGroups",
      "apiVersion": "2019-12-01",
      "location": "[resourceGroup().location]",
      "properties": {
        "encryptionProperties": {
            "vaultBaseUrl": "https://example.vault.azure.net",
            "keyName": "acikey",
            "keyVersion": "xxxxxxxxxxxxxxxx"
        },
        "sku": "Standard",  
        "containers": [
          {
            "name": "[variables('container1name')]",
            "properties": {
              "image": "[variables('container1image')]",
              "resources": {
                "requests": {
                  "cpu": 1,
                  "memoryInGb": 1.5
                }
              },
              "ports": [
                {
                  "port": 80
                },
                {
                  "port": 8080
                }
              ]
            }
          },
          {
            "name": "[variables('container2name')]",
            "properties": {
              "image": "[variables('container2image')]",
              "resources": {
                "requests": {
                  "cpu": 1,
                  "memoryInGb": 1.5
                }
              }
            }
          }
        ],
        "osType": "Linux",
        "ipAddress": {
          "type": "Public",
          "ports": [
            {
              "protocol": "tcp",
              "port": "80"
            },
            {
                "protocol": "tcp",
                "port": "8080"
            }
          ]
        }
      }
    }
  ],
  "outputs": {
    "containerIPv4Address": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
    }
  }
}

Distribuera dina resurser

Om du har skapat och redigerat mallfilen på skrivbordet kan du ladda upp den till Cloud Shell-katalogen genom att dra filen till den.

Skapa en resursgrupp med kommandot az group create.

az group create --name myResourceGroup --location eastus

Distribuera mallen med kommandot az deployment group create .

az deployment group create --resource-group myResourceGroup --template-file deployment-template.json

Inom några sekunder bör du få ett första svar från Azure. När distributionen är klar krypteras alla data som är relaterade till den som behålls av ACI-tjänsten med den nyckel som du angav.

Kryptera data med en kundhanterad nyckel i ett nätverksskyddat Azure-Key Vault med Betrodda tjänster aktiverat

Skapa en Key Vault resurs

Skapa en Azure-Key Vault med hjälp av Azure Portal, Azure CLI eller Azure PowerShell. Börja med att inte tillämpa några nätverksbegränsningar så att vi kan lägga till nödvändiga nycklar i valvet. I efterföljande steg lägger vi till nätverksbegränsningar och aktiverar betrodda tjänster.

Använd följande riktlinjer för egenskaperna för ditt nyckelvalv:

  • Namn: Ett unikt namn krävs.
  • Prenumeration: Välj en prenumeration.
  • Under Resursgrupp väljer du antingen en befintlig resursgrupp eller skapar en ny och anger ett resursgruppsnamn.
  • Välj en plats i listrutan Plats.
  • Du kan lämna standardinställningarna för de andra alternativen eller välja dem baserat på ytterligare krav.

Viktigt

När du använder kundhanterade nycklar för att kryptera en ACI-distributionsmall rekommenderar vi att följande två egenskaper anges för nyckelvalvet, Mjuk borttagning och Rensa inte. De här egenskaperna är inte aktiverade som standard, men kan aktiveras med antingen PowerShell eller Azure CLI i ett nytt eller befintligt nyckelvalv.

Generera en ny nyckel

När ditt nyckelvalv har skapats går du till resursen i Azure Portal. Klicka på Nycklar under Inställningar på den vänstra navigeringsmenyn på resursbladet. I vyn för "Nycklar" klickar du på "Generera/importera" för att generera en ny nyckel. Använd ett unikt namn för den här nyckeln och andra inställningar baserat på dina krav. Se till att avbilda nyckelnamn och version för efterföljande steg.

Skärmbild av inställningar för nyckelskapande, PNG.

Skapa en användartilldelad hanterad identitet för din containergrupp

Skapa en identitet i din prenumeration med kommandot az identity create . Du kan använda samma resursgrupp som används för att skapa nyckelvalvet eller använda en annan.

az identity create \
  --resource-group myResourceGroup \
  --name myACIId

Om du vill använda identiteten i följande steg använder du kommandot az identity show för att lagra identitetens tjänsthuvudnamns-ID och resurs-ID i variabler.

# Get service principal ID of the user-assigned identity
spID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACIId \
  --query principalId --output tsv)

Ange åtkomstprincip

Skapa en ny åtkomstprincip för att tillåta att den användartilldelade identiteten får åtkomst till och packa upp nyckeln i krypteringssyfte.

az keyvault set-policy \
    --name mykeyvault \
    --resource-group myResourceGroup \
    --object-id $spID \
    --key-permissions get unwrapKey

Ändra nätverksbehörigheter för Azure Key Vault

Följande kommandon konfigurerar en Azure Firewall för din Azure-Key Vault och tillåter Azure Trusted Services, till exempel ACI-åtkomst.

az keyvault update \
    --name mykeyvault \
    --resource-group myResourceGroup \
    --default-action Deny
az keyvault update \
    --name mykeyvault \
    --resource-group myResourceGroup \
    --bypass AzureServices

Ändra JSON-distributionsmallen

Viktigt

Kryptering av distributionsdata med en kundhanterad nyckel är tillgängligt i API-versionen 2022-09-01 eller senare. API-versionen 2022-09-01 är endast tillgänglig via ARM eller REST. Om du har problem med detta kontaktar du Azure-supporten. När nyckelvalvets nyckel och åtkomstprincip har konfigurerats lägger du till följande egenskaper i ACI-distributionsmallen. Läs mer om hur du distribuerar ACI-resurser med en mall i Självstudie: Distribuera en grupp med flera containrar med hjälp av en Resource Manager mall.

  • Under resourcesanger du apiVersion till 2022-09-01.
  • Under avsnittet egenskaper för containergrupper i distributionsmallen lägger du till en encryptionProperties, som innehåller följande värden:
    • vaultBaseUrl: DNS-namnet på ditt nyckelvalv. Detta finns på översiktsbladet för nyckelvalvsresursen i portalen
    • keyName: namnet på nyckeln som genererades tidigare
    • keyVersion: den aktuella versionen av nyckeln. Du hittar detta genom att klicka på själva nyckeln (under "Nycklar" i avsnittet Inställningar i nyckelvalvsresursen)
    • identity: det här är resurs-URI:n för den hanterade identitetsinstansen som skapades tidigare
  • Under egenskaperna för containergruppen lägger du till en sku egenskap med värdet Standard. Egenskapen sku krävs i API-version 2022-09-01.
  • Under resurser lägger du till det identity objekt som krävs för att använda hanterad identitet med ACI, som innehåller följande värden:
    • type: typen av identitet som används (antingen användartilldelad eller systemtilldelad). Det här ärendet anges till "UserAssigned" (Användartilldelats)
    • userAssignedIdentities: resurs-URI:n för samma användartilldelade identitet som används ovan i -objektet encryptionProperties .

Följande mallfragment visar dessa ytterligare egenskaper för att kryptera distributionsdata:

[...]
"resources": [
    {
        "name": "[parameters('containerGroupName')]",
        "type": "Microsoft.ContainerInstance/containerGroups",
        "apiVersion": "2019-12-01",
        "location": "[resourceGroup().location]",    
        "identity": {
         "type": "UserAssigned",
         "userAssignedIdentities": {
           "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {}
         }
        },
        "properties": {
            "encryptionProperties": {
                "vaultBaseUrl": "https://example.vault.azure.net",
                "keyName": "acikey",
                "keyVersion": "xxxxxxxxxxxxxxxx",
                "identity": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId"
            },
            "sku": "Standard",
            "containers": {
                [...]
            }
        }
    }
]

Följande är en fullständig mall som är anpassad från mallen i Självstudie: Distribuera en grupp med flera containrar med hjälp av en Resource Manager mall.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "containerGroupName": {
      "type": "string",
      "defaultValue": "myContainerGroup",
      "metadata": {
        "description": "Container Group name."
      }
    }
  },
  "variables": {
    "container1name": "aci-tutorial-app",
    "container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
    "container2name": "aci-tutorial-sidecar",
    "container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
  },
  "resources": [
    {
      "name": "[parameters('containerGroupName')]",
      "type": "Microsoft.ContainerInstance/containerGroups",
      "apiVersion": "2022-09-01",
      "location": "[resourceGroup().location]",
      "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {}
        }
      },
      "properties": {
        "encryptionProperties": {
          "vaultBaseUrl": "https://example.vault.azure.net",
          "keyName": "acikey",
          "keyVersion": "xxxxxxxxxxxxxxxx",
          "identity": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId"
        },
        "sku": "Standard",
        "containers": [
          {
            "name": "[variables('container1name')]",
            "properties": {
              "image": "[variables('container1image')]",
              "resources": {
                "requests": {
                  "cpu": 1,
                  "memoryInGb": 1.5
                }
              },
              "ports": [
                {
                  "port": 80
                },
                {
                  "port": 8080
                }
              ]
            }
          },
          {
            "name": "[variables('container2name')]",
            "properties": {
              "image": "[variables('container2image')]",
              "resources": {
                "requests": {
                  "cpu": 1,
                  "memoryInGb": 1.5
                }
              }
            }
          }
        ],
        "osType": "Linux",
        "ipAddress": {
          "type": "Public",
          "ports": [
            {
              "protocol": "tcp",
              "port": "80"
            },
            {
              "protocol": "tcp",
              "port": "8080"
            }
          ]
        }
      }
    }
  ],
  "outputs": {
    "containerIPv4Address": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
    }
  }
}

Distribuera dina resurser

Om du har skapat och redigerat mallfilen på skrivbordet kan du ladda upp den till din Cloud Shell-katalog genom att dra filen till den.

Skapa en resursgrupp med kommandot az group create.

az group create --name myResourceGroup --location eastus

Distribuera mallen med kommandot az deployment group create .

az deployment group create --resource-group myResourceGroup --template-file deployment-template.json

Inom några sekunder bör du få ett första svar från Azure. När distributionen är klar krypteras alla data som är relaterade till den som behålls av ACI-tjänsten med den nyckel som du angav.