Udostępnij za pośrednictwem


Szyfrowanie danych wdrożenia

Po uruchomieniu zasobów usługi Azure Container Instances (ACI) w chmurze usługa ACI zbiera i utrwala dane związane z kontenerami. Usługa ACI automatycznie szyfruje te dane, gdy są utrwalane w chmurze. To szyfrowanie chroni dane, aby pomóc w spełnieniu zobowiązań organizacji w zakresie zabezpieczeń i zgodności. Usługa ACI zapewnia również możliwość szyfrowania tych danych przy użyciu własnego klucza, co zapewnia większą kontrolę nad danymi związanymi z wdrożeniami usługi ACI.

Szyfrowanie danych ACI

Dane w usłudze ACI są szyfrowane i odszyfrowywane przy użyciu 256-bitowego szyfrowania AES. Jest ona włączona dla wszystkich wdrożeń usługi ACI i nie trzeba modyfikować wdrożenia ani kontenerów, aby korzystać z tego szyfrowania. To pokrycie obejmuje metadane dotyczące wdrożenia, zmiennych środowiskowych, kluczy przekazywanych do kontenerów i dzienników utrwalone po zatrzymaniu kontenerów, dzięki czemu nadal można je zobaczyć. Szyfrowanie nie ma wpływu na wydajność grupy kontenerów i nie ma dodatkowych kosztów szyfrowania.

Możesz polegać na kluczach zarządzanych przez firmę Microsoft na potrzeby szyfrowania danych kontenera lub zarządzać szyfrowaniem przy użyciu własnych kluczy. W poniższej tabeli porównaliśmy następujące opcje:

Klucze zarządzane przez firmę Microsoft Klucze zarządzane przez klienta
Operacje szyfrowania/odszyfrowywania Azure Azure
Magazyn kluczy Magazyn kluczy firmy Microsoft Azure Key Vault
Odpowiedzialność za rotację kluczy Microsoft Klient
Dostęp do klucza Tylko firma Microsoft Microsoft, Klient

Ten artykuł zawiera przegląd dwóch przepływów szyfrowania danych przy użyciu klucza zarządzanego przez klienta:

  • Szyfrowanie danych przy użyciu klucza zarządzanego przez klienta przechowywanego w standardowej usłudze Azure Key Vault
  • Szyfrowanie danych przy użyciu klucza zarządzanego przez klienta przechowywanego w usłudze Azure Key Vault chronionej przez sieć z włączonymi usługami zaufanymi .

Szyfrowanie danych przy użyciu klucza zarządzanego przez klienta przechowywanego w standardowej usłudze Azure Key Vault

Wymagania wstępne

Tworzenie jednostki usługi dla usługi ACI

Pierwszym krokiem jest upewnienie się, że dzierżawa platformy Azure ma przypisaną jednostkę usługi w celu udzielenia uprawnień do usługi Azure Container Instances.

Ważne

Aby uruchomić następujące polecenie i pomyślnie utworzyć jednostkę usługi, upewnij się, że masz uprawnienia do tworzenia jednostek usługi w dzierżawie.

Następujące polecenie interfejsu wiersza polecenia konfiguruje dostawcę usługi ACI w środowisku platformy Azure:

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

Dane wyjściowe z uruchomienia tego polecenia powinny zawierać jednostkę usługi skonfigurowaną za pomocą polecenia "displayName": "Azure Container Instance Service".

Jeśli nie możesz pomyślnie utworzyć jednostki usługi:

  • upewnij się, że masz uprawnienia do tego w dzierżawie
  • Sprawdź, czy jednostka usługi już istnieje w dzierżawie na potrzeby wdrażania w usłudze ACI. Możesz to zrobić, uruchamiając az ad sp show --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9 i używając tej jednostki usługi.

Tworzenie zasobu usługi Key Vault

Tworzenie usługi Azure Key Vault przy użyciu witryny Azure Portal, interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell.

We właściwościach magazynu kluczy skorzystaj z następujących wskazówek:

  • Nazwa: wymagana jest unikatowa nazwa.
  • Subskrypcja: wybierz subskrypcję.
  • W obszarze Grupa zasobów wybierz istniejącą grupę zasobów lub utwórz nową i wprowadź nazwę grupy zasobów.
  • W menu rozwijanym Lokalizacja wybierz lokalizację.
  • Możesz pozostawić inne opcje do domyślnych lub wybrać na podstawie dodatkowych wymagań.

Ważne

W przypadku szyfrowania szablonu wdrożenia usługi ACI za pomocą kluczy zarządzanych przez klienta zaleca się ustawienie następujących dwóch właściwości w magazynie kluczy, usuwanie nietrwałe i nie przeczyszczanie. Te właściwości nie są domyślnie włączone, ale można je włączyć przy użyciu programu PowerShell lub interfejsu wiersza polecenia platformy Azure w nowym lub istniejącym magazynie kluczy.

Generowanie nowego klucza

Po utworzeniu magazynu kluczy przejdź do zasobu w witrynie Azure Portal. W menu nawigacji po lewej stronie bloku zasobu w obszarze Ustawienia wybierz pozycję Klucze. W widoku "Klucze" wybierz pozycję "Generuj/Importuj", aby wygenerować nowy klucz. Użyj dowolnej unikatowej nazwy dla tego klucza i wszelkich innych preferencji na podstawie Twoich wymagań.

Generowanie nowego klucza

Ustaw zasady dostępu

Utwórz nowe zasady dostępu umożliwiające usłudze ACI dostęp do klucza.

  • Po wygenerowaniu klucza w bloku zasobów magazynu kluczy w obszarze Ustawienia wybierz pozycję Zasady dostępu.
  • Na stronie "Zasady dostępu" dla magazynu kluczy wybierz pozycję Dodaj zasady dostępu.
  • Ustaw uprawnienia klucza, aby uwzględnić pobieranie i odpakowywanie kluczaUstawianie uprawnień klucza
  • W obszarze Wybierz jednostkę wybierz pozycję Azure Container Instance Service
  • Wybierz pozycję Dodaj u dołu

Zasady dostępu powinny być teraz wyświetlane w zasadach dostępu magazynu kluczy.

Nowe zasady dostępu

Modyfikowanie szablonu wdrożenia JSON

Ważne

Szyfrowanie danych wdrożenia przy użyciu klucza zarządzanego przez klienta jest dostępne w najnowszej wersji interfejsu API (2019-12-01), która jest obecnie wdrażana. Określ tę wersję interfejsu API w szablonie wdrożenia. Jeśli masz jakiekolwiek problemy z tym, skontaktuj się z pomocą techniczną platformy Azure.

Po skonfigurowaniu klucza magazynu kluczy i zasad dostępu dodaj następujące właściwości do szablonu wdrożenia usługi ACI. Dowiedz się więcej o wdrażaniu zasobów usługi ACI przy użyciu szablonu w samouczku : wdrażanie grupy z wieloma kontenerami przy użyciu szablonu usługi Resource Manager.

  • W obszarze resourcesustaw wartość 2019-12-01apiVersion .
  • W sekcji właściwości grupy kontenerów szablonu wdrożenia dodaj encryptionPropertieselement , który zawiera następujące wartości:
    • vaultBaseUrl: nazwa DNS magazynu kluczy, który można znaleźć w bloku przeglądu zasobu magazynu kluczy w portalu
    • keyName: nazwa wygenerowanego wcześniej klucza
    • keyVersion: bieżąca wersja klucza. To pole można znaleźć, przechodząc do samego klucza (w obszarze "Klucze" w sekcji Ustawienia zasobu magazynu kluczy)
  • W obszarze właściwości grupy kontenerów dodaj sku właściwość z wartością Standard. Właściwość jest wymagana sku w interfejsie API w wersji 2019-12-01.

Poniższy fragment kodu szablonu przedstawia następujące dodatkowe właściwości służące do szyfrowania danych wdrożenia:

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

Poniżej znajduje się kompletny szablon dostosowany z szablonu w artykule Samouczek: wdrażanie grupy z wieloma kontenerami przy użyciu szablonu usługi 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]"
    }
  }
}

Wdrażanie zasobów

Jeśli plik szablonu został utworzony i edytowany na pulpicie, możesz przekazać go do katalogu usługi Cloud Shell, przeciągając do niego plik.

Utwórz grupę zasobów za pomocą polecenia az group create.

az group create --name myResourceGroup --location eastus

Wdróż szablon za pomocą polecenia az deployment group create .

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

W ciągu kilku sekund powinna pojawić się początkowa odpowiedź z platformy Azure. Po zakończeniu wdrażania wszystkie dane związane z nim utrwalone przez usługę ACI są szyfrowane przy użyciu podanego klucza.

Szyfrowanie danych przy użyciu klucza zarządzanego przez klienta w chronionej sieci usłudze Azure Key Vault z włączonymi zaufanymi usługami

Tworzenie zasobu usługi Key Vault

Tworzenie usługi Azure Key Vault przy użyciu witryny Azure Portal, interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell. Aby rozpocząć, nie stosuj żadnych ograniczeń sieciowych, aby można było dodać niezbędne klucze do magazynu. W kolejnych krokach dodamy ograniczenia sieciowe i włączymy zaufane usługi.

We właściwościach magazynu kluczy skorzystaj z następujących wskazówek:

  • Nazwa: wymagana jest unikatowa nazwa.
  • Subskrypcja: wybierz subskrypcję.
  • W obszarze Grupa zasobów wybierz istniejącą grupę zasobów lub utwórz nową i wprowadź nazwę grupy zasobów.
  • W menu rozwijanym Lokalizacja wybierz lokalizację.
  • Możesz pozostawić inne opcje do domyślnych lub wybrać na podstawie dodatkowych wymagań.

Ważne

W przypadku szyfrowania szablonu wdrożenia usługi ACI za pomocą kluczy zarządzanych przez klienta zaleca się ustawienie następujących dwóch właściwości w magazynie kluczy, usuwanie nietrwałe i nie przeczyszczanie. Te właściwości nie są domyślnie włączone, ale można je włączyć przy użyciu programu PowerShell lub interfejsu wiersza polecenia platformy Azure w nowym lub istniejącym magazynie kluczy.

Generowanie nowego klucza

Po utworzeniu magazynu kluczy przejdź do zasobu w witrynie Azure Portal. W menu nawigacji po lewej stronie bloku zasobu w obszarze Ustawienia wybierz pozycję Klucze. W widoku "Klucze" wybierz pozycję "Generuj/Importuj", aby wygenerować nowy klucz. Użyj dowolnej unikatowej nazwy dla tego klucza i wszelkich innych preferencji na podstawie Twoich wymagań. Pamiętaj, aby przechwycić nazwę i wersję klucza, aby wykonać kolejne kroki.

Zrzut ekranu przedstawiający ustawienia tworzenia klucza, PNG.

Tworzenie tożsamości zarządzanej przypisanej przez użytkownika dla grupy kontenerów

Utwórz tożsamość w subskrypcji przy użyciu polecenia az identity create . Możesz użyć tej samej grupy zasobów użytej do utworzenia magazynu kluczy lub użyć innej.

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

Aby użyć tożsamości w poniższych krokach, użyj polecenia az identity show , aby zapisać identyfikator jednostki usługi tożsamości i identyfikator zasobu w zmiennych.

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

Ustaw zasady dostępu

Utwórz nowe zasady dostępu umożliwiające tożsamości przypisanej przez użytkownika dostęp do klucza i odpakowywanie go do celów szyfrowania.

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

Modyfikowanie uprawnień sieci usługi Azure Key Vault

Następujące polecenia konfigurują usługę Azure Firewall dla usługi Azure Key Vault i zezwalają na dostęp do zaufanych usług platformy Azure, takich jak ACI.

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

Modyfikowanie szablonu wdrożenia JSON

Ważne

Szyfrowanie danych wdrożenia przy użyciu klucza zarządzanego przez klienta jest dostępne w wersji interfejsu API 2022-09-01 lub nowszej. Wersja interfejsu API 2022-09-01 jest dostępna tylko za pośrednictwem usługi ARM lub REST. Jeśli masz jakiekolwiek problemy z tym, skontaktuj się z pomocą techniczną platformy Azure. Po skonfigurowaniu klucza magazynu kluczy i zasad dostępu dodaj następujące właściwości do szablonu wdrożenia usługi ACI. Dowiedz się więcej o wdrażaniu zasobów usługi ACI przy użyciu szablonu w samouczku : wdrażanie grupy z wieloma kontenerami przy użyciu szablonu usługi Resource Manager.

  • W obszarze resourcesustaw wartość 2022-09-01apiVersion .
  • W sekcji właściwości grupy kontenerów szablonu wdrożenia dodaj encryptionPropertieselement , który zawiera następujące wartości:
    • vaultBaseUrl: nazwa DNS magazynu kluczy. Tę właściwość można znaleźć w bloku przeglądu zasobu magazynu kluczy w portalu
    • keyName: nazwa wygenerowanego wcześniej klucza
    • keyVersion: bieżąca wersja klucza. Tę właściwość można znaleźć, klikając sam klucz (w obszarze "Klucze" w sekcji Ustawienia zasobu magazynu kluczy)
    • identity: ta właściwość jest identyfikatorem URI zasobu utworzonego wcześniej wystąpienia tożsamości zarządzanej
  • W obszarze właściwości grupy kontenerów dodaj sku właściwość z wartością Standard. Właściwość jest wymagana sku w interfejsie API w wersji 2022-09-01.
  • W obszarze zasobów dodaj obiekt wymagany do używania identity tożsamości zarządzanej z usługą ACI, która zawiera następujące wartości:
    • type: typ używanej tożsamości (przypisany przez użytkownika lub przypisany przez system). Ten przypadek ma wartość "UserAssigned"
    • userAssignedIdentities: identyfikator resourceURI tej samej tożsamości przypisanej przez użytkownika używany w encryptionProperties obiekcie .

Poniższy fragment kodu szablonu przedstawia następujące dodatkowe właściwości służące do szyfrowania danych wdrożenia:

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

Poniżej znajduje się kompletny szablon dostosowany z szablonu w artykule Samouczek: wdrażanie grupy z wieloma kontenerami przy użyciu szablonu usługi 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]"
    }
  }
}

Wdrażanie zasobów

Jeśli plik szablonu został utworzony i edytowany na pulpicie, możesz przekazać go do katalogu usługi Cloud Shell, przeciągając do niego plik.

Utwórz grupę zasobów za pomocą polecenia az group create.

az group create --name myResourceGroup --location eastus

Wdróż szablon za pomocą polecenia az deployment group create .

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

W ciągu kilku sekund powinna pojawić się początkowa odpowiedź z platformy Azure. Po zakończeniu wdrażania wszystkie dane związane z nim utrwalone przez usługę ACI są szyfrowane przy użyciu podanego klucza.