Dela via


Kryptera distributionsdata

När du kör ACI-resurser (Azure Container Instances) i molnet samlar ACI-tjänsten in och bevarar data som är relaterade till dina containrar. ACI krypterar automatiskt dessa data när de bevaras 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.

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. Den här täckningen omfattar metadata om distributionen, miljövariabler, nycklar som skickas till dina containrar och loggar som sparas efter att containrarna har stoppats så att du fortfarande kan se dem. Kryptering påverkar inte containergruppens prestanda och det finns ingen ytterligare 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-nyckelarkiv 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 ett Standard Azure Key Vault
  • Kryptera data med en kundhanterad nyckel som lagras i ett nätverksskyddat Azure Key Vault med Betrodda tjänster aktiverat.

Kryptera data med en kundhanterad nyckel som lagras i ett 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!

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

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 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 ett Azure Key Vault med hjälp av Azure-portalen, 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 deras standardvärden 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. 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 navigerar du till resursen i Azure-portalen. På den vänstra navigeringsmenyn på resursbladet går du till Inställningar och väljer Nycklar. I vyn för "Nycklar" väljer du "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

Konfigurera å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 under Inställningar och väljer Åtkomstprinciper.
  • På sidan Åtkomstprinciper för nyckelvalvet väljer du Lägg till åtkomstprincip.
  • Ange nyckelbehörigheterna så att de inkluderar Hämta och Packa upp nyckelAnge nyckelbehörigheter
  • För Välj huvudnamn väljer du Azure Container Instance Service
  • Välj 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änglig 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 att distribuera 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, som finns på översiktsbladet för nyckelvalvsresursen i portalen
    • keyName: namnet på nyckeln som genererades tidigare
    • keyVersion: den aktuella versionen av nyckeln. Det här fältet kan hittas genom att gå till 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 aktiverade

Skapa en Key Vault-resurs

Skapa ett Azure Key Vault med hjälp av Azure-portalen, 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 de andra alternativen till deras standardvärden 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. 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 navigerar du till resursen i Azure-portalen. På den vänstra navigeringsmenyn på resursbladet går du till Inställningar och väljer Nycklar. I vyn "Nycklar" väljer du "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 samla in nyckelnamn och version för efterföljande steg.

Skärmbild av inställningar för att skapa nycklar, 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)

Konfigurera å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 ditt 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 att distribuera 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. Den här egenskapen finns på översiktsbladet för nyckelvalvsresursen i portalen
    • keyName: namnet på nyckeln som genererades tidigare
    • keyVersion: den aktuella versionen av nyckeln. Du hittar den här egenskapen genom att klicka på själva nyckeln (under "Nycklar" i avsnittet Inställningar i nyckelvalvsresursen)
    • identity: Den här egenskapen ä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: den typ av identitet som används (antingen användartilldelad eller systemtilldelad). Det här fallet är inställt på "UserAssigned"
    • userAssignedIdentities: resourceURI för samma användartilldelade identitet som används i encryptionProperties objektet.

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 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.