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, witryny 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 przechowuje 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 rejestr mógł uzyskać dostęp do klucza szyfrowania:

  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 wartości id i principalId, aby skonfigurować dostęp rejestru do klucza:

    {
      "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "clientSecretUrl": "https://control-eastus.identity.azure.net/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myresourcegroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myidentityname/credentials?tid=aaaabbbb-0000-cccc-1111-dddd2222eeee&oid=aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb&aid=00001111-aaaa-2222-bbbb-3333cccc4444",
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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, przechowuj wartości id 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 i konfigurowanie 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 miękkiego usuwania. Aby zapobiec przypadkowemu usunięciu kluczy lub magazynów kluczy, zalecamy włączenie ustawienia ochrony czyszczenia:

    az keyvault create --name <key-vault-name> \
      --resource-group <resource-group-name> \
      --enable-purge-protection
    
  3. Aby ułatwić pracę, zanotuj identyfikator zasobu magazynu kluczy i zapisz tę wartość w zmiennych środowiskowych.

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

Włącz zaufane usługi, aby uzyskać dostęp do skarbca 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łącz tożsamości zarządzane, aby uzyskać dostęp 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ń do kluczy przy użyciu zarządzanej tożsamości 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 w magazynie kluczy i uzyskiwanie identyfikatora klucza

  1. Aby utworzyć klucz w magazynie kluczy, uruchom polecenie az keyvault key create:

    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 niej.

Rotacja klucza

Możesz wybrać ręczną lub automatyczną rotację kluczy.

Szyfrowanie rejestru przy użyciu klucza zarządzanego przez klienta, który ma wersję klucza, umożliwi tylko ręczną rotację kluczy w usłudze 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 i konfigurowanie zarządzanego modułu HSM

Aby można było utworzyć klucze lub przypisać role płaszczyzny danych, musisz aprowizować i aktywować Managed HSM. Postępuj zgodnie z przewodnikiem Szybki start: aprowizuj i aktywuj zarządzany moduł HSM przy użyciu Azure CLI, a następnie wróć do tego artykułu.

Jeśli zapora zarządzanego modułu HSM jest włączona, przed utworzeniem rejestru skonfiguruj zaufane usługi lub inny dostęp sieciowy. Aby uzyskać więcej informacji, zobacz Zabezpieczenia sieciowe dla Managed HSM.

Użytkownik tworzący klucz szyfrowania musi mieć rolę w usłudze Managed HSM, która zezwala na tworzenie kluczy, taką jak Managed HSM Crypto User. Aby uzyskać więcej informacji, zobacz Zarządzanie rolami zarządzanego modułu HSM na płaszczyźnie danych.

Utwórz klucz RSA-HSM obsługujący zawijanie kluczy:

az keyvault key create \
  --hsm-name <managed-hsm-name> \
  --name <key-name> \
  --kty RSA-HSM \
  --ops wrapKey unwrapKey

Zarządzany moduł HSM używa lokalnej kontroli dostępu opartej na rolach zamiast zasad dostępu usługi Key Vault. Przypisz rolę Managed HSM Crypto Service Encryption User do tożsamości przypisanej przez użytkownika. Poniższy przykład ogranicza przypisanie do klucza używanego przez rejestr:

az keyvault role assignment create \
  --hsm-name <managed-hsm-name> \
  --role "Managed HSM Crypto Service Encryption User" \
  --assignee-object-id $identityPrincipalID \
  --assignee-principal-type MSI \
  --scope /keys/<key-name>

Zapisz identyfikator klucza z jego wersją do ręcznej rotacji:

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

Aby włączyć automatyczną rotację kluczy, usuń wersję z identyfikatora klucza:

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

Note

Identyfikator URI klucza zarządzanego modułu HSM używa formatu https://<managed-hsm-name>.managedhsm.azure.net/keys/<key-name>/<version>. Sufiks DNS może się różnić w zależności od chmury Azure.

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 () i identyfikatora klucza (idkid) 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 witryny 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 witrynie 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 witrynie Azure Portal.

Utwórz magazyn kluczy

  1. Wykonaj kroki opisane w przewodniku Szybki start: tworzenie magazynu kluczy przy użyciu witryny 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 witrynie Azure Portal.

Włącz zaufane usługi, aby uzyskać dostęp do skarbca kluczy

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

Włącz tożsamości zarządzane, aby uzyskać dostęp 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ń do kluczy przy użyciu zarządzanej tożsamości przypisanej przez użytkownika.

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

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

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

Tworzenie i konfigurowanie zarządzanego modułu HSM

  1. Postępuj zgodnie z przewodnikiem Szybki start: aprowizuj zarządzany moduł HSM i aktywuj go przy użyciu portalu Azure.
  2. Upewnij się, że użytkownik tworzący klucz szyfrowania ma rolę w usłudze Managed HSM, która zezwala na tworzenie kluczy, taką jak Managed HSM Crypto User.
  3. W obszarze Ustawienia wybierz pozycję Klucze, a następnie utwórz lub zaimportuj klucz RSA-HSM obsługujący operacje wrapKey i unwrapKey.
  4. W obszarze Ustawienia wybierz pozycję Local RBAC.
  5. Dodaj przypisanie roli Managed HSM Crypto Service Encryption User dla tożsamości przypisanej przez użytkownika. Zgodnie z zasadą najmniejszych uprawnień przypisz rolę w zakresie klucza szyfrowania. Aby uzyskać więcej informacji, zobacz Zarządzanie rolami zarządzanego modułu HSM na płaszczyźnie danych.
  6. Jeśli włączono zaporę Managed HSM, skonfiguruj zaufane usługi lub inny dostęp sieciowy. Aby uzyskać więcej informacji, zobacz Zabezpieczenia sieciowe dla Managed HSM.

Important

Azure Container Registry nie tworzy ani nie aktualizuje przypisań ról zarządzanego modułu HSM. Przed utworzeniem rejestru lub zmianą jego klucza szyfrowania skonfiguruj przypisanie roli.

Utwórz klucz w magazynie kluczy

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. Wybierz Ustawienia>Klucze.
  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>Kontenery>Rejestr kontenerów.

  2. Na karcie Podstawy wybierz lub utwórz grupę zasobów, a następnie wprowadź nazwę rejestru. W SKU wybierz 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ącą key vault lub zarządzany moduł HSM i klucz. Wybierz pozycję Utwórz nowy , aby utworzyć magazyn kluczy i klucz. Wybrany klucz jest niewersjowany i włącza automatyczną rotację kluczy.
    • Wybierz Wprowadź identyfikator URI klucza i podaj identyfikator istniejącego magazynu Key Vault lub klucza Managed HSM. Możesz podać URI klucza z wersją (dla klucza, który trzeba rotować ręcznie) lub niewersyjny identyfikator URI klucza (który umożliwia automatyczną rotację kluczy).

    Jeśli zapora zarządzanego modułu HSM uniemożliwia wyświetlenie listy kluczy w portalu, zezwól na dostęp z adresu IP klienta lub wybierz pozycję Wprowadź identyfikator URI klucza. Zezwalanie na zaufane usługi umożliwia usłudze Azure Container Registry dostęp do Managed HSM, ale nie zezwala klientowi spoza skonfigurowanej granicy sieci na korzystanie z selektora 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 witrynie 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 usługi Resource Manager

Szablonu Resource Manager można użyć do utworzenia rejestru kontenerów i włączenia szyfrowania przy użyciu klucza zarządzanego przez klienta przechowywanego w Key Vault lub zarządzanym module HSM.

Przed wdrożeniem szablonu utwórz tożsamość przypisaną przez użytkownika i skonfiguruj jej dostęp do klucza:

  • W przypadku Key Vault przyznaj tożsamości uprawnienia get, wrapKey i unwrapKey przy użyciu zasad dostępu lub roli RBAC platformy Azure Key Vault Crypto Service Encryption User.
  • W przypadku zarządzanego modułu HSM przypisz tożsamości lokalną rolę RBAC Managed HSM Crypto Service Encryption User w zakresie klucza.

Szablon deklaruje istniejącą tożsamość, aby rejestr mógł od niej zależeć. Wdróż szablon w tej samej grupie zasobów co tożsamość.

  1. Skopiuj następującą zawartość szablonu usługi 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": {
        "registry_name": {
          "type": "String"
        },
        "identity_name": {
          "type": "String"
        },
        "kek_id": {
          "type": "String"
        }
      },
      "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.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:

    • Tożsamość zarządzana przypisana do użytkownika, identyfikowana nazwą
    • Key Vault lub klucz Managed HSM identyfikowany przez identyfikator klucza
    • Wymagane uprawnienia Key Vault lub lokalne przypisanie roli RBAC zarządzanego modułu HSM
  3. Uruchom polecenie az deployment group create, aby utworzyć rejestr przy użyciu powyższego pliku szablonu. Podaj nową nazwę rejestru, istniejącą nazwę tożsamości zarządzanej przypisanej przez użytkownika oraz utworzony identyfikator klucza.

    az deployment group create \
      --resource-group <resource-group-name> \
      --template-file CMKtemplate.json \
      --parameters \
        registry_name=<registry-name> \
        identity_name=<managed-identity> \
        kek_id=<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 zapoznać się z rotacją kluczy zarządzanych przez klienta, aktualizowaniem wersji kluczy i odwołowaniem klucza zarządzanego przez klienta.