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
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
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ń.
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 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.
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
resources
ustaw wartość2019-12-01
apiVersion
. - W sekcji właściwości grupy kontenerów szablonu wdrożenia dodaj
encryptionProperties
element , 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 portalukeyName
: nazwa wygenerowanego wcześniej kluczakeyVersion
: 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 wymaganasku
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.
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
resources
ustaw wartość2022-09-01
apiVersion
. - W sekcji właściwości grupy kontenerów szablonu wdrożenia dodaj
encryptionProperties
element , 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 portalukeyName
: nazwa wygenerowanego wcześniej kluczakeyVersion
: 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 wymaganasku
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 wencryptionProperties
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.