Udostępnij przez


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. Zakres ten obejmuje metadane dotyczące wdrożenia, zmienne środowiskowe, klucze przekazywane do kontenerów oraz dzienniki zapisywane po zatrzymaniu kontenerów, dzięki czemu nadal można je przeglądać. 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
Skład kluczy Magazyn kluczy firmy Microsoft Azure Key Vault
Odpowiedzialność za rotację kluczy Microsoft Klient
Kluczowy dostęp 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

Utwórz Service Principal dla 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ć podmiot usługi, upewnij się, że masz odpowiednie uprawnienia do tworzenia podmiotów usługi w swoim dzierżawie/kliencie.

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 Twojej 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 oraz zamiast tego 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.

Dla właściwości 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 ACI za pomocą kluczy zarządzanych przez klienta zaleca się ustawienie następujących dwóch właściwości w magazynie kluczy: miękkie usuwanie i nie usuwaj. 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 panelu 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 skarbca kluczy i zasad dostępu, dodaj następujące właściwości do szablonu wdrożenia 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 resources ustaw apiVersion na 2019-12-01.
  • W sekcji właściwości grupy kontenerów szablonu wdrożenia dodaj element encryptionProperties, który zawiera następujące wartości:
    • vaultBaseUrl: nazwa DNS magazynu kluczy, którą można znaleźć na zakładce przeglądowej 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 sekcji właściwości grupy kontenerów dodaj właściwość sku z wartością Standard. Właściwość sku jest wymagana w wersji interfejsu API 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 Samouczek: Wdrożenie 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]"
    }
  }
}

Rozmieść swoje zasoby

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 używając 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 za pomocą klucza zarządzanego przez klienta w usłudze Azure Key Vault chronionej sieciowo, z włączoną obsługą Zaufanych Usług.

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 sejfu. W kolejnych krokach dodamy ograniczenia sieciowe i włączymy zaufane usługi.

Dla właściwości twojego magazynu kluczy, użyj 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 za pomocą polecenia az identity create. Możesz użyć tej samej grupy zasobów używanej 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 głównego użytkownika 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 resources ustaw apiVersion na 2022-09-01.
  • W sekcji właściwości grupy kontenerów szablonu wdrożenia dodaj element encryptionProperties, który zawiera następujące wartości:
    • vaultBaseUrl: nazwa DNS magazynu kluczy. Tę właściwość można znaleźć w panelu 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 w sam klucz (w obszarze "Klucze" w sekcji Ustawienia w zasobie magazynu kluczy)
    • identity: ta właściwość jest adresem URI zasobu instancji tożsamości zarządzanej, która została utworzona wcześniej
  • W właściwościach grupy kontenerów dodaj sku właściwość z wartością Standard. Właściwość sku jest wymagana w interfejsie API w wersji 2022-09-01.
  • W sekcji zasobów dodaj obiekt identity wymagany do używania tożsamości zarządzanej z ACI, który zawiera następujące wartości:
    • type: typ używanej tożsamości (przypisany przez użytkownika lub przypisany przez system). Ten przypadek jest ustawiony na "UserAssigned"
    • userAssignedIdentities: resourceURI tej samej tożsamości użytkownika przypisanej w obiekcie encryptionProperties.

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 Samouczku: Wdrażanie grupy z wieloma kontenerami przy użyciu szablonu Menedżera Zasobów.

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

Wdróż swoje zasoby

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 przy użyciu 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.