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ž jsou uložená v cloudu. Toto šifrování chrání vaše data a pomáhá tak plnit 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 abyste mohli využít výhod tohoto šifrování, nemusíte upravovat nasazení ani kontejnery. Patří sem metadata o nasazení, proměnných prostředí, klíčích předávaných do kontejnerů a protokolech, které se zachovají i po zastavení kontejnerů, abyste je pořád viděli. Šifrování nemá vliv na výkon skupiny kontejnerů a za šifrování nejsou žádné další náklady.

Při šifrování dat kontejneru se můžete spolehnout 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ého ve standardním azure Key Vault
  • Šifrování dat pomocí klíče spravovaného zákazníkem uloženého v Key Vault Azure chráněném sítí s povolenými důvěryhodnými službami.

Šifrování dat pomocí klíče spravovaného zákazníkem uloženého ve standardním 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í ACI SP ve vašem prostředí Azure:

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

Ve výstupu spuštění tohoto příkazu by se měl zobrazit instanční objekt, který je nastavený pomocí displayName: Azure Container Instance Service.

V případě, že se vám nedaří úspěšně vytvořit instanční objekt:

  • ověřte, že k tomu máte oprávnění ve svém tenantovi.
  • Zkontrolujte, jestli už ve vašem tenantovi existuje instanční objekt 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 místo toho.

Vytvoření prostředku Key Vault

Vytvořte Key Vault Azure pomocí Azure Portal, Azure CLI nebo Azure PowerShell.

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í.
  • U ostatních možností můžete ponechat výchozí hodnoty nebo je můžete 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 v trezoru klíčů následující dvě vlastnosti: 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 na prostředek v Azure Portal. V levé navigační nabídce okna prostředku v části Nastavení klikněte na Klíče. V zobrazení klíče klikněte na Vygenerovat/importovat a vygenerujte nový klíč. Pro tento klíč použijte libovolný jedinečný název a další předvolby na základě vašich požadavků.

Vygenerování nového klíče

Nastavení zásad přístupu

Vytvořte nové zásady 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í klikněte na Zásady přístupu.
  • Na stránce Zásady přístupu pro váš trezor klíčů klikněte na Přidat zásady přístupu.
  • Nastavení oprávnění ke klíči tak, aby zahrnovala oprávněníklíče Get a Unwrap Key Set
  • V části Vybrat objekt zabezpečení vyberte Azure Container Instance Service.
  • V dolní části klikněte na Přidat .

Zásady přístupu by se teď měly zobrazit 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 právě zavádí. V šabloně nasazení zadejte tuto verzi rozhraní API. 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 najdete v kurzu Nasazení vícekontejnerové skupiny pomocí šablony Resource Manager.

  • V části resourcesnastavte apiVersion na 2019-12-01.
  • V části vlastnosti skupiny kontejnerů v šabloně nasazení přidejte objekt encryptionProperties, který obsahuje následující hodnoty:
    • vaultBaseUrl: Název DNS vašeho trezoru klíčů 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. Najdete ho tak, že kliknete na samotný klíč (v části Klíče v části Nastavení prostředku trezoru klíčů).
  • Do vlastností 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 upravená podle šablony v kurzu Nasazení skupiny s více kontejnery pomocí šablony Resource Manager.

{
  "$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 Shell 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. Po dokončení nasazení se všechna data související s ním uložená službou ACI zašifrují pomocí klíče, který jste zadali.

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

Vytvoření prostředku Key Vault

Vytvořte Key Vault Azure pomocí Azure Portal, Azure CLI nebo Azure PowerShell. Začněte tím, že neuplatníte žá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í.
  • U ostatních možností můžete ponechat výchozí hodnoty nebo je můžete 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 v trezoru klíčů následující dvě vlastnosti: 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 na prostředek v Azure Portal. V levé navigační nabídce okna prostředku v části Nastavení klikněte na Klíče. V zobrazení klíče klikněte na Vygenerovat/importovat a vygenerujte nový klíč. Pro tento klíč použijte libovolný jedinečný název a další předvolby na základě vašich požadavků. Pro další kroky nezapomeňte zaznamenat název a verzi klíče.

Snímek obrazovky s nastavením vytváření klíčů, PNG

Vytvoření spravované identity přiřazené uživatelem pro 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 identitu použít 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)

Nastavení zásad přístupu

Vytvořte novou zásadu přístupu, která identitě přiřazené uživatelem umožní přístup ke klíči a jeho rozbalení pro účely šifrování.

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

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

Následující příkazy nastaví Azure Firewall pro Key Vault Azure a povolí přístup k důvěryhodným službám Azure, jako je například 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 2022-09-01 je k dispozici 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 najdete v kurzu Nasazení vícekontejnerové skupiny pomocí šablony Resource Manager.

  • V části resourcesnastavte apiVersion na 2022-09-01.
  • V části vlastnosti skupiny kontejnerů v šabloně nasazení přidejte objekt encryptionProperties, který obsahuje následující hodnoty:
    • vaultBaseUrl: Název DNS vašeho trezoru klíčů. Najdete ho 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. Najdete ho tak, že kliknete na samotný klíč (v části Klíče v části Nastavení prostředku trezoru klíčů).
    • identity: Toto je identifikátor URI prostředku instance spravované identity vytvořené dříve.
  • Do vlastností skupiny kontejnerů přidejte sku vlastnost s hodnotou Standard. Vlastnost sku se vyžaduje ve verzi rozhraní API 2022-09-01.
  • V části Prostředky přidejte identity objekt požadovaný pro použití spravované identity s ACI, který obsahuje následující hodnoty:
    • type: typ používané identity (buď přiřazené uživatelem, nebo systémem). Tento případ se nastaví na userAssigned.
    • userAssignedIdentities: identifikátor resourceURI stejné identity přiřazené uživatelem, který se používá výše 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 upravená podle šablony v kurzu Nasazení skupiny s více kontejnery pomocí šablony Resource Manager.

{
  "$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 Shell 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. Po dokončení nasazení se všechna data související s ním uložená službou ACI zašifrují pomocí klíče, který jste zadali.