Sdílet prostřednictvím


Šifrování dat nasazení

Při spouštění prostředků Azure Container Instances (ACI) v cloudu služba ACI shromažďuje a udržuje data související s vašimi kontejnery. ACI tato data automaticky šifruje, když se zachovají v cloudu. Toto šifrování chrání vaše data, aby pomohla splnit závazky vaší organizace v oblasti zabezpečení a dodržování předpisů. ACI také nabízí možnost šifrovat tato data pomocí vlastního klíče, což vám dává větší kontrolu nad daty souvisejícími s nasazeními ACI.

Šifrování dat ACI

Data v ACI se šifrují a dešifrují pomocí 256bitového šifrování AES. Je povolená pro všechna nasazení ACI a nemusíte upravovat nasazení ani kontejnery, abyste mohli toto šifrování využít. Toto pokrytí zahrnuje metadata o nasazení, proměnných prostředí, předání klíčů do kontejnerů a trvalé protokoly po zastavení kontejnerů, abyste je stále viděli. Šifrování nemá vliv na výkon vaší skupiny kontejnerů a žádné další náklady na šifrování.

Při šifrování dat kontejneru můžete spoléhat na klíče spravované Microsoftem nebo můžete šifrování spravovat pomocí vlastních klíčů. Následující tabulka porovnává tyto možnosti:

Klíče spravované Microsoftem Klíče spravované zákazníkem
Operace šifrování/dešifrování Azure Azure
Úložiště klíčů Úložiště klíčů Microsoftu Azure Key Vault
Odpovědnost za obměnu klíčů Microsoft Zákazník
Přístup ke klíči Pouze Microsoft Microsoft, zákazník

Tento článek popisuje dva toky pro šifrování dat pomocí klíče spravovaného zákazníkem:

  • Šifrování dat pomocí klíče spravovaného zákazníkem uloženým ve standardní službě Azure Key Vault
  • Šifrovat data pomocí klíče spravovaného zákazníkem uloženým v síti chráněném službou Azure Key Vault s povolenými důvěryhodnými službami.

Šifrování dat pomocí klíče spravovaného zákazníkem uloženým ve standardní službě Azure Key Vault

Požadavky

Vytvoření instančního objektu pro ACI

Prvním krokem je zajistit, aby váš tenant Azure má přiřazený instanční objekt pro udělení oprávnění ke službě Azure Container Instances.

Důležité

Pokud chcete spustit následující příkaz a úspěšně vytvořit instanční objekt, ověřte, že máte oprávnění k vytváření instančních objektů ve vašem tenantovi.

Následující příkaz rozhraní příkazového řádku nastaví službu ACI SP ve vašem prostředí Azure:

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

Výstup spuštění tohoto příkazu by měl zobrazovat instanční objekt nastavený na displayName: Azure Container Instance Service.

Pokud se vám nedaří úspěšně vytvořit instanční objekt:

  • Potvrďte, že máte oprávnění k tomu ve vašem tenantovi.
  • zkontrolujte, jestli instanční objekt již ve vašem tenantovi existuje pro nasazení do ACI. Můžete to provést spuštěním az ad sp show --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9 a použitím instančního objektu.

Vytvoření prostředku služby Key Vault

Vytvořte službu Azure Key Vault pomocí webu Azure Portal, Azure CLI nebo Azure PowerShellu.

Pro vlastnosti trezoru klíčů použijte následující pokyny:

  • Název: Je potřeba zadat jedinečný název.
  • Předplatné: Zvolte předplatné.
  • V části Skupina prostředků zvolte existující skupinu prostředků nebo vytvořte novou a zadejte název skupiny prostředků.
  • V rozevírací nabídce Umístění zvolte umístění.
  • Ostatní možnosti můžete ponechat na výchozích nastaveních nebo vybrat na základě dalších požadavků.

Důležité

Při použití klíčů spravovaných zákazníkem k šifrování šablony nasazení ACI se doporučuje nastavit následující dvě vlastnosti v trezoru klíčů, obnovitelné odstranění a nevyprázdnit. Tyto vlastnosti nejsou ve výchozím nastavení povolené, ale je možné je povolit pomocí PowerShellu nebo Azure CLI v novém nebo existujícím trezoru klíčů.

Vygenerování nového klíče

Po vytvoření trezoru klíčů přejděte k prostředku na webu Azure Portal. V levé navigační nabídce okna prostředku v části Nastavení vyberte Klíče. V zobrazení klíče vyberte Generovat/Importovat a vygenerovat nový klíč. Pro tento klíč použijte libovolný jedinečný název a jakékoli další předvolby na základě vašich požadavků.

Vygenerování nového klíče

Nastavit zásady přístupu

Vytvořte novou zásadu přístupu, která službě ACI umožní přístup k vašemu klíči.

  • Po vygenerování klíče v okně prostředku trezoru klíčů v části Nastavení vyberte Zásady přístupu.
  • Na stránce Zásady přístupu pro váš trezor klíčů zvolte Přidat zásady přístupu.
  • Nastavení oprávnění ke klíči pro zahrnutí klíče Get a Unwrap KeyNastavení oprávnění ke klíči
  • Pro výběr objektu zabezpečení vyberte službu Azure Container Instance Service.
  • Výběr možnosti Přidat v dolní části

Zásady přístupu by se teď měly zobrazovat v zásadách přístupu trezoru klíčů.

Nové zásady přístupu

Úprava šablony nasazení JSON

Důležité

Šifrování dat nasazení pomocí klíče spravovaného zákazníkem je k dispozici v nejnovější verzi rozhraní API (2019–12-01), která se aktuálně zavádí. Zadejte tuto verzi rozhraní API v šabloně nasazení. Pokud s tím máte nějaké problémy, obraťte se na podporu Azure.

Po nastavení klíče trezoru klíčů a zásad přístupu přidejte do šablony nasazení ACI následující vlastnosti. Další informace o nasazení prostředků ACI pomocí šablony v kurzu: Nasazení skupiny více kontejnerů pomocí šablony Resource Manageru

  • V části resources, nastaveno apiVersion na 2019-12-01.
  • V části vlastností skupiny kontejnerů šablony nasazení přidejte položku encryptionProperties, která obsahuje následující hodnoty:
    • vaultBaseUrl: Název DNS vašeho trezoru klíčů, který najdete v okně přehledu prostředku trezoru klíčů na portálu.
    • keyName: název klíče vygenerovaného dříve
    • keyVersion: aktuální verze klíče. Toto pole najdete tak, že přejdete do samotného klíče (v části Klíče v části Nastavení prostředku trezoru klíčů).
  • Pod vlastnosti skupiny kontejnerů přidejte sku vlastnost s hodnotou Standard. Vlastnost sku je vyžadována ve verzi rozhraní API 2019-12-01.

Následující fragment kódu šablony ukazuje tyto další vlastnosti pro šifrování dat nasazení:

[...]
"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": {
                [...]
            }
        }
    }
]

Následuje kompletní šablona přizpůsobená šabloně v kurzu: Nasazení skupiny s více kontejnery pomocí šablony Resource Manageru.

{
  "$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]"
    }
  }
}

Nasazení prostředků

Pokud jste soubor šablony vytvořili a upravili na ploše, můžete ho nahrát do adresáře Cloud Shellu přetažením souboru do něj.

Vytvořte skupinu prostředků pomocí příkazu az group create.

az group create --name myResourceGroup --location eastus

Nasaďte šablonu pomocí příkazu az deployment group create .

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

Během několika sekund by se měla zobrazit první odezva z Azure. Jakmile se nasazení dokončí, všechna data související s ním uložená službou ACI se zašifrují klíčem, který jste zadali.

Šifrování dat pomocí klíče spravovaného zákazníkem v síti chráněném službou Azure Key Vault s povolenými důvěryhodnými službami

Vytvoření prostředku služby Key Vault

Vytvořte službu Azure Key Vault pomocí webu Azure Portal, Azure CLI nebo Azure PowerShellu. Abyste mohli začít, nepoužívejte žádná omezení sítě, abychom mohli do trezoru přidat potřebné klíče. V dalších krocích přidáme omezení sítě a povolíme důvěryhodné služby.

Pro vlastnosti trezoru klíčů použijte následující pokyny:

  • Název: Je potřeba zadat jedinečný název.
  • Předplatné: Zvolte předplatné.
  • V části Skupina prostředků zvolte existující skupinu prostředků nebo vytvořte novou a zadejte název skupiny prostředků.
  • V rozevírací nabídce Umístění zvolte umístění.
  • Ostatní možnosti můžete ponechat na výchozích nastaveních nebo vybrat na základě dalších požadavků.

Důležité

Při použití klíčů spravovaných zákazníkem k šifrování šablony nasazení ACI se doporučuje nastavit následující dvě vlastnosti v trezoru klíčů, obnovitelné odstranění a nevyprázdnit. Tyto vlastnosti nejsou ve výchozím nastavení povolené, ale je možné je povolit pomocí PowerShellu nebo Azure CLI v novém nebo existujícím trezoru klíčů.

Vygenerování nového klíče

Po vytvoření trezoru klíčů přejděte k prostředku na webu Azure Portal. V levé navigační nabídce okna prostředku v části Nastavení vyberte Klíče. V zobrazení klíče zvolte Generovat/Importovat a vygenerovat nový klíč. Pro tento klíč použijte libovolný jedinečný název a jakékoli další předvolby na základě vašich požadavků. Nezapomeňte zaznamenat název klíče a verzi pro další kroky.

Snímek obrazovky s nastavením vytvoření klíče, PNG

Vytvoření spravované identity přiřazené uživatelem pro vaši skupinu kontejnerů

Vytvořte ve svém předplatném identitu pomocí příkazu az identity create . Můžete použít stejnou skupinu prostředků, kterou jste použili k vytvoření trezoru klíčů, nebo použít jinou.

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

Pokud chcete použít identitu v následujících krocích, pomocí příkazu az identity show uložte ID instančního objektu a ID prostředku identity do proměnných.

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

Nastavit zásady přístupu

Vytvořte novou zásadu přístupu, která umožňuje identitě přiřazené uživatelem přístup k šifrovacím účelům a rozbalení klíče.

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

Úprava síťových oprávnění služby Azure Key Vault

Následující příkazy nastaví bránu Azure Firewall pro službu Azure Key Vault a povolí důvěryhodné služby Azure, jako je například přístup ACI.

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

Úprava šablony nasazení JSON

Důležité

Šifrování dat nasazení pomocí klíče spravovaného zákazníkem je k dispozici ve verzi rozhraní API 2022-09-01 nebo novější. Verze rozhraní API z 9. 9. 2022 je dostupná pouze prostřednictvím ARM nebo REST. Pokud s tím máte nějaké problémy, obraťte se na podporu Azure. Po nastavení klíče trezoru klíčů a zásad přístupu přidejte do šablony nasazení ACI následující vlastnosti. Další informace o nasazení prostředků ACI pomocí šablony v kurzu: Nasazení skupiny více kontejnerů pomocí šablony Resource Manageru

  • V části resources, nastaveno apiVersion na 2022-09-01.
  • V části vlastností skupiny kontejnerů šablony nasazení přidejte položku encryptionProperties, která obsahuje následující hodnoty:
    • vaultBaseUrl: Název DNS vašeho trezoru klíčů. Tuto vlastnost najdete v okně přehledu prostředku trezoru klíčů na portálu.
    • keyName: název klíče vygenerovaného dříve
    • keyVersion: aktuální verze klíče. Tuto vlastnost najdete kliknutím na samotný klíč (v části Klíče v části Nastavení prostředku trezoru klíčů).
    • identity: Tato vlastnost je identifikátor URI prostředku instance spravované identity vytvořené dříve.
  • Pod vlastnosti skupiny kontejnerů přidejte sku vlastnost s hodnotou Standard. Vlastnost je vyžadována sku ve verzi rozhraní API 2022-09-01.
  • V části prostředků přidejte identity objekt potřebný k použití spravované identity s ACI, který obsahuje následující hodnoty:
    • type: typ používané identity (přiřazené uživatelem nebo systémem). Tento případ je nastavený na UserAssigned.
    • userAssignedIdentities: identifikátor resourceURI stejné identity přiřazené uživatelem použitý v objektu encryptionProperties .

Následující fragment kódu šablony ukazuje tyto další vlastnosti pro šifrování dat nasazení:

[...]
"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": {
                [...]
            }
        }
    }
]

Následuje kompletní šablona přizpůsobená šabloně v kurzu: Nasazení skupiny s více kontejnery pomocí šablony Resource Manageru.

{
  "$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]"
    }
  }
}

Nasazení prostředků

Pokud jste soubor šablony vytvořili a upravili na ploše, můžete ho nahrát do adresáře Cloud Shellu přetažením souboru do něj.

Vytvořte skupinu prostředků pomocí příkazu az group create.

az group create --name myResourceGroup --location eastus

Nasaďte šablonu pomocí příkazu az deployment group create .

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

Během několika sekund by se měla zobrazit první odezva z Azure. Jakmile se nasazení dokončí, všechna data související s ním uložená službou ACI se zašifrují klíčem, který jste zadali.