Włączanie klucza zarządzanego przez klienta

Ten artykuł jest drugą częścią czteroczęściowej serii samouczków. Część pierwsza zawiera omówienie kluczy zarządzanych przez klienta, ich funkcji i zagadnień przed włączeniem ich w rejestrze. W tym artykule przedstawiono kroki włączania klucza zarządzanego przez klienta przy użyciu interfejsu wiersza polecenia platformy Azure, Azure Portal lub szablonu usługi Azure Resource Manager.

Wymagania wstępne

Włączanie klucza zarządzanego przez klienta przy użyciu interfejsu wiersza polecenia platformy Azure

Tworzenie grupy zasobów

Uruchom polecenie az group create , aby utworzyć grupę zasobów, która będzie przechowywać magazyn kluczy, rejestr kontenerów i inne wymagane zasoby:

az group create --name <resource-group-name> --location <location>

Tworzenie tożsamości zarządzanej przypisanej przez użytkownika

Skonfiguruj tożsamość zarządzaną przypisaną przez użytkownika dla rejestru, aby można było uzyskać dostęp do magazynu kluczy:

  1. Uruchom polecenie az identity create , aby utworzyć tożsamość zarządzaną:

    az identity create \
      --resource-group <resource-group-name> \
      --name <managed-identity-name>
    
  2. W danych wyjściowych polecenia zanotuj id wartości i principalId , aby skonfigurować dostęp do rejestru za pomocą magazynu kluczy:

    {
      "clientId": "xxxx2bac-xxxx-xxxx-xxxx-192cxxxx6273",
      "clientSecretUrl": "https://control-eastus.identity.azure.net/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myresourcegroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myidentityname/credentials?tid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&oid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&aid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myresourcegroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myresourcegroup",
      "location": "eastus",
      "name": "myidentityname",
      "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "resourceGroup": "myresourcegroup",
      "tags": {},
      "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    
  3. Dla wygody id przechowuj wartości i principalId w zmiennych środowiskowych:

    identityID=$(az identity show --resource-group <resource-group-name> --name <managed-identity-name> --query 'id' --output tsv)
    
    identityPrincipalID=$(az identity show --resource-group <resource-group-name> --name <managed-identity-name> --query 'principalId' --output tsv)
    

Tworzenie magazynu kluczy

  1. Uruchom polecenie az keyvault create , aby utworzyć magazyn kluczy, w którym można przechowywać klucz zarządzany przez klienta na potrzeby szyfrowania rejestru.

  2. Domyślnie nowy magazyn kluczy automatycznie włącza ustawienie usuwania nietrwałego . Aby zapobiec przypadkowemu usunięciu kluczy lub magazynów kluczy, zalecamy włączenie ustawienia ochrony przed przeczyszczeniem :

    az keyvault create --name <key-vault-name> \
      --resource-group <resource-group-name> \
      --enable-purge-protection
    
  3. Dla wygody zanotuj identyfikator zasobu magazynu kluczy i zapisz wartość w zmiennych środowiskowych:

    keyvaultID=$(az keyvault show --resource-group <resource-group-name> --name <key-vault-name> --query 'id' --output tsv)
    

Włączanie zaufanych usług w celu uzyskania dostępu do magazynu kluczy

Jeśli magazyn kluczy jest w ochronie za pomocą zapory lub sieci wirtualnej (prywatnego punktu końcowego), musisz włączyć ustawienia sieciowe, aby zezwolić na dostęp przez zaufane usługi platformy Azure. Aby uzyskać więcej informacji, zobacz Konfigurowanie ustawień sieci usługi Azure Key Vault.

Włączanie tożsamości zarządzanych w celu uzyskania dostępu do magazynu kluczy

Istnieją dwa sposoby włączania tożsamości zarządzanych w celu uzyskania dostępu do magazynu kluczy.

Pierwszą opcją jest skonfigurowanie zasad dostępu dla magazynu kluczy i ustawienie uprawnień klucza na potrzeby dostępu przy użyciu tożsamości zarządzanej przypisanej przez użytkownika:

  1. Uruchom polecenie az keyvault set policy . Przekaż wcześniej utworzoną i przechowywaną wartość zmiennej środowiskowej .principalID

  2. Ustaw uprawnienia klucza na get, unwrapKeyi wrapKey:

    az keyvault set-policy \
      --resource-group <resource-group-name> \
      --name <key-vault-name> \
      --object-id $identityPrincipalID \
      --key-permissions get unwrapKey wrapKey
    
    

Drugą opcją jest użycie kontroli dostępu opartej na rolach (RBAC) platformy Azure w celu przypisania uprawnień do tożsamości zarządzanej przypisanej przez użytkownika i uzyskania dostępu do magazynu kluczy. Uruchom polecenie az role assignment create i przypisz Key Vault Crypto Service Encryption User rolę do tożsamości zarządzanej przypisanej przez użytkownika:

az role assignment create --assignee $identityPrincipalID \
  --role "Key Vault Crypto Service Encryption User" \
  --scope $keyvaultID

Tworzenie klucza i uzyskiwanie identyfikatora klucza

  1. Uruchom polecenie az keyvault key create , aby utworzyć klucz w magazynie kluczy:

    az keyvault key create \
      --name <key-name> \
      --vault-name <key-vault-name>
    
  2. W danych wyjściowych polecenia zanotuj identyfikator klucza (kid):

    [...]
      "key": {
        "crv": null,
        "d": null,
        "dp": null,
        "dq": null,
        "e": "AQAB",
        "k": null,
        "keyOps": [
          "encrypt",
          "decrypt",
          "sign",
          "verify",
          "wrapKey",
          "unwrapKey"
        ],
        "kid": "https://mykeyvault.vault.azure.net/keys/mykey/<version>",
        "kty": "RSA",
    [...]
    
  3. Dla wygody zapisz format wybrany dla identyfikatora klucza w zmiennej środowiskowej $keyID . Możesz użyć identyfikatora klucza z wersją lub bez niego.

Wymiana kluczy

Możesz wybrać ręczne lub automatyczne obracanie kluczy.

Szyfrowanie rejestru przy użyciu klucza zarządzanego przez klienta, który ma wersję klucza, umożliwi tylko ręczną rotację kluczy w Azure Container Registry. W tym przykładzie jest przechowywana właściwość klucza kid :

keyID=$(az keyvault key show \
  --name <keyname> \
  --vault-name <key-vault-name> \
  --query 'key.kid' --output tsv)

Szyfrowanie rejestru przy użyciu klucza zarządzanego przez klienta przez pominięcie wersji klucza umożliwi automatyczne obracanie kluczy w celu wykrycia nowej wersji klucza w usłudze Azure Key Vault. W tym przykładzie usunięto wersję z właściwości klucza kid :

keyID=$(az keyvault key show \
  --name <keyname> \
  --vault-name <key-vault-name> \
  --query 'key.kid' --output tsv)

keyID=$(echo $keyID | sed -e "s/\/[^/]*$//")

Tworzenie rejestru przy użyciu klucza zarządzanego przez klienta

  1. Uruchom polecenie az acr create , aby utworzyć rejestr w warstwie usługi Premium i włączyć klucz zarządzany przez klienta.

  2. Przekaż wartości identyfikatora tożsamości zarządzanej (id) i identyfikatora klucza (kid) przechowywane w zmiennych środowiskowych w poprzednich krokach:

    az acr create \
      --resource-group <resource-group-name> \
      --name <container-registry-name> \
      --identity $identityID \
      --key-encryption-key $keyID \
      --sku Premium
    

Pokaż stan szyfrowania

Uruchom polecenie az acr encryption show , aby wyświetlić stan szyfrowania rejestru przy użyciu klucza zarządzanego przez klienta:

az acr encryption show --name <container-registry-name>

W zależności od klucza używanego do szyfrowania rejestru dane wyjściowe są podobne do następujących:

{
  "keyVaultProperties": {
    "identity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "keyIdentifier": "https://myvault.vault.azure.net/keys/myresourcegroup/abcdefg123456789...",
    "keyRotationEnabled": true,
    "lastKeyRotationTimestamp": xxxxxxxx
    "versionedKeyIdentifier": "https://myvault.vault.azure.net/keys/myresourcegroup/abcdefg123456789...",
  },
  "status": "enabled"
}

Włączanie klucza zarządzanego przez klienta przy użyciu Azure Portal

Tworzenie tożsamości zarządzanej przypisanej przez użytkownika

Aby utworzyć tożsamość zarządzaną przypisaną przez użytkownika dla zasobów platformy Azure w Azure Portal:

  1. Wykonaj kroki tworzenia tożsamości przypisanej przez użytkownika.

  2. Zapisz nazwę tożsamości, aby użyć jej w kolejnych krokach.

Zrzut ekranu przedstawiający opcje tworzenia tożsamości przypisanej przez użytkownika w Azure Portal.

Tworzenie magazynu kluczy

  1. Wykonaj kroki opisane w przewodniku Szybki start: tworzenie magazynu kluczy przy użyciu Azure Portal.

  2. Podczas tworzenia magazynu kluczy dla klucza zarządzanego przez klienta na karcie Podstawy włącz ustawienie Przeczyść ochronę . To ustawienie pomaga zapobiec przypadkowemu usunięciu kluczy lub magazynów kluczy przez utratę danych.

    Zrzut ekranu przedstawiający opcje tworzenia magazynu kluczy w Azure Portal.

Włączanie zaufanych usług w celu uzyskania dostępu do magazynu kluczy

Jeśli magazyn kluczy jest w ochronie za pomocą zapory lub sieci wirtualnej (prywatnego punktu końcowego), włącz ustawienie sieciowe, aby zezwolić na dostęp przez zaufane usługi platformy Azure. Aby uzyskać więcej informacji, zobacz Konfigurowanie ustawień sieci usługi Azure Key Vault.

Włączanie tożsamości zarządzanych w celu uzyskania dostępu do magazynu kluczy

Istnieją dwa sposoby włączania tożsamości zarządzanych w celu uzyskania dostępu do magazynu kluczy.

Pierwszą opcją jest skonfigurowanie zasad dostępu dla magazynu kluczy i ustawienie uprawnień klucza na potrzeby dostępu przy użyciu tożsamości zarządzanej przypisanej przez użytkownika:

  1. Przejdź do magazynu kluczy.
  2. Wybierz pozycję Ustawienia Zasady>> dostępu +Dodaj zasady dostępu.
  3. Wybierz pozycję Uprawnienia klucza, a następnie wybierz pozycję Pobierz, Odpakuj klucz i Opakuj klucz.
  4. W obszarze Wybierz podmiot zabezpieczeń wybierz nazwę zasobu tożsamości zarządzanej przypisanej przez użytkownika.
  5. Wybierz pozycję Dodaj, a następnie wybierz pozycję Zapisz.

Zrzut ekranu przedstawiający opcje tworzenia zasad dostępu do magazynu kluczy.

Drugą opcją jest przypisanie Key Vault Crypto Service Encryption User roli RBAC do tożsamości zarządzanej przypisanej przez użytkownika w zakresie magazynu kluczy. Aby uzyskać szczegółowe instrukcje, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.

Utwórz klucz

Utwórz klucz w magazynie kluczy i użyj go do zaszyfrowania rejestru. Wykonaj następujące kroki, jeśli chcesz wybrać określoną wersję klucza jako klucz zarządzany przez klienta. Może być również konieczne utworzenie klucza przed utworzeniem rejestru, jeśli dostęp do magazynu kluczy jest ograniczony do prywatnego punktu końcowego lub wybranych sieci.

  1. Przejdź do magazynu kluczy.
  2. Wybierzpozycję Kluczeustawień>.
  3. Wybierz pozycję +Generuj/Importuj i wprowadź unikatową nazwę klucza.
  4. Zaakceptuj pozostałe wartości domyślne, a następnie wybierz pozycję Utwórz.
  5. Po utworzeniu wybierz klucz, a następnie wybierz bieżącą wersję. Skopiuj identyfikator klucza dla wersji klucza.

Tworzenie rejestru kontenerów

  1. Wybierz pozycję Utwórz zasób>Container>Registry.
  2. Na karcie Podstawy wybierz lub utwórz grupę zasobów, a następnie wprowadź nazwę rejestru. W obszarze SKU wybierz pozycję Premium.
  3. Na karcie Szyfrowanie w polu Klucz zarządzany przez klienta wybierz pozycję Włączone.
  4. W obszarze Tożsamość wybierz utworzoną tożsamość zarządzaną.
  5. W obszarze Szyfrowanie wybierz jedną z następujących opcji:
    • Wybierz pozycję Wybierz z Key Vault, a następnie wybierz istniejący magazyn kluczy i klucz lub wybierz pozycję Utwórz nowy. Wybrany klucz jest niewersjowany i włącza automatyczne obracanie kluczy.
    • Wybierz pozycję Wprowadź identyfikator URI klucza i podaj identyfikator istniejącego klucza. Możesz podać identyfikator URI klucza w wersji (dla klucza, który musi zostać obrócony ręcznie) lub niewersyjny identyfikator URI klucza (który umożliwia automatyczne obracanie kluczy). Zapoznaj się z poprzednią sekcją, aby uzyskać instrukcje tworzenia klucza.
  6. Wybierz pozycję Przejrzyj i utwórz.
  7. Wybierz pozycję Utwórz , aby wdrożyć wystąpienie rejestru.

Zrzut ekranu przedstawiający opcje tworzenia zaszyfrowanego rejestru w Azure Portal.

Pokaż stan szyfrowania

Aby wyświetlić stan szyfrowania rejestru w portalu, przejdź do rejestru. W obszarze Ustawienia wybierz pozycję Szyfrowanie.

Włączanie klucza zarządzanego przez klienta przy użyciu szablonu Resource Manager

Możesz użyć szablonu Resource Manager do utworzenia rejestru kontenerów i włączenia szyfrowania przy użyciu klucza zarządzanego przez klienta:

  1. Skopiuj następującą zawartość szablonu Resource Manager do nowego pliku i zapisz go jako CMKtemplate.json:

    {
      "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "vault_name": {
          "defaultValue": "",
          "type": "String"
        },
        "registry_name": {
          "defaultValue": "",
          "type": "String"
        },
        "identity_name": {
          "defaultValue": "",
          "type": "String"
        },
        "kek_id": {
          "type": "String"
        }
      },
      "variables": {},
      "resources": [
        {
          "type": "Microsoft.ContainerRegistry/registries",
          "apiVersion": "2019-12-01-preview",
          "name": "[parameters('registry_name')]",
          "location": "[resourceGroup().location]",
          "sku": {
            "name": "Premium",
            "tier": "Premium"
          },
          "identity": {
            "type": "UserAssigned",
            "userAssignedIdentities": {
              "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name'))]": {}
            }
          },
          "dependsOn": [
            "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name'))]"
          ],
          "properties": {
            "adminUserEnabled": false,
            "encryption": {
              "status": "enabled",
              "keyVaultProperties": {
                "identity": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name')), '2018-11-30').clientId]",
                "KeyIdentifier": "[parameters('kek_id')]"
              }
            },
            "networkRuleSet": {
              "defaultAction": "Allow",
              "virtualNetworkRules": [],
              "ipRules": []
            },
            "policies": {
              "quarantinePolicy": {
                "status": "disabled"
              },
              "trustPolicy": {
                "type": "Notary",
                "status": "disabled"
              },
              "retentionPolicy": {
                "days": 7,
                "status": "disabled"
              }
            }
          }
        },
        {
          "type": "Microsoft.KeyVault/vaults/accessPolicies",
          "apiVersion": "2018-02-14",
          "name": "[concat(parameters('vault_name'), '/add')]",
          "dependsOn": [
            "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name'))]"
          ],
          "properties": {
            "accessPolicies": [
              {
                "tenantId": "[subscription().tenantId]",
                "objectId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name')), '2018-11-30').principalId]",
                "permissions": {
                  "keys": [
                    "get",
                    "unwrapKey",
                    "wrapKey"
                  ]
                }
              }
            ]
          }
        },
        {
          "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
          "apiVersion": "2018-11-30",
          "name": "[parameters('identity_name')]",
          "location": "[resourceGroup().location]"
        }
      ]
    }
    
  2. Wykonaj kroki opisane w poprzednich sekcjach, aby utworzyć następujące zasoby:

    • Magazyn kluczy zidentyfikowany według nazwy
    • Klucz magazynu kluczy identyfikowany przez identyfikator klucza
  3. Uruchom polecenie az deployment group create , aby utworzyć rejestr przy użyciu poprzedniego pliku szablonu. Po wskazaniu podaj nową nazwę rejestru i nazwę tożsamości zarządzanej przypisanej przez użytkownika wraz z nazwą magazynu kluczy i utworzonym identyfikatorem klucza.

    az deployment group create \
      --resource-group <resource-group-name> \
      --template-file CMKtemplate.json \
      --parameters \
        registry_name=<registry-name> \
        identity_name=<managed-identity> \
        vault_name=<key-vault-name> \
        key_id=<key-vault-key-id>
    
  4. Uruchom polecenie az acr encryption show , aby wyświetlić stan szyfrowania rejestru:

    az acr encryption show --name <registry-name>
    

Następne kroki

Przejdź do następnego artykułu , aby przejść przez rotację kluczy zarządzanych przez klienta, aktualizowanie wersji kluczy i odwołowanie klucza zarządzanego przez klienta.