Povolení klíče spravovaného zákazníkem

Tento článek je druhou částí čtyřdílné série kurzů. První část poskytuje přehled klíčů spravovaných zákazníkem, jejich funkcí a důležitých informací před tím, než je v registru povolíte. Tento článek vás provede postupem povolení klíče spravovaného zákazníkem pomocí Azure CLI, Azure Portal nebo šablony Azure Resource Manager.

Požadavky

Povolení klíče spravovaného zákazníkem pomocí Azure CLI

Vytvoření skupiny prostředků

Spuštěním příkazu az group create vytvořte skupinu prostředků, která bude obsahovat trezor klíčů, registr kontejneru a další požadované prostředky:

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

Vytvoření spravované identity přiřazené uživatelem

Nakonfigurujte spravovanou identitu přiřazenou uživatelem pro registr, abyste měli přístup k trezoru klíčů:

  1. Spuštěním příkazu az identity create vytvořte spravovanou identitu:

    az identity create \
      --resource-group <resource-group-name> \
      --name <managed-identity-name>
    
  2. Ve výstupu příkazu si poznamenejte id hodnoty a principalId pro konfiguraci přístupu k registru s trezorem klíčů:

    {
      "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. Pro usnadnění si uložte id hodnoty a principalId do proměnných prostředí:

    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)
    

Vytvořte trezor klíčů.

  1. Spuštěním příkazu az keyvault create vytvořte trezor klíčů, do kterého můžete uložit klíč spravovaný zákazníkem pro šifrování registru.

  2. Ve výchozím nastavení nový trezor klíčů automaticky povolí nastavení obnovitelného odstranění . Pokud chcete zabránit ztrátě dat v případě náhodného odstranění klíčů nebo trezorů klíčů, doporučujeme povolit nastavení ochrany před vymazáním :

    az keyvault create --name <key-vault-name> \
      --resource-group <resource-group-name> \
      --enable-purge-protection
    
  3. Pro usnadnění si poznamenejte ID prostředku trezoru klíčů a uložte hodnotu do proměnných prostředí:

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

Povolení přístupu k trezoru klíčů důvěryhodným službám

Pokud je trezor klíčů v ochraně pomocí brány firewall nebo virtuální sítě (privátního koncového bodu), musíte povolit nastavení sítě, aby se povolil přístup důvěryhodným službám Azure. Další informace najdete v tématu Konfigurace nastavení sítě Azure Key Vault.

Povolení přístupu k trezoru klíčů spravovaným identitám

Existují dva způsoby, jak povolit spravovaným identitám přístup k trezoru klíčů.

První možností je nakonfigurovat zásady přístupu pro trezor klíčů a nastavit oprávnění ke klíči pro přístup pomocí spravované identity přiřazené uživatelem:

  1. Spusťte příkaz az keyvault set policy . Předejte dříve vytvořenou a uloženou proměnnou prostředí hodnotu principalID.

  2. Nastavte oprávnění klíče na get, unwrapKeya wrapKey:

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

Druhou možností je použít řízení přístupu na základě role (RBAC) v Azure k přiřazení oprávnění spravované identitě přiřazené uživatelem a přístup k trezoru klíčů. Spusťte příkaz az role assignment create a přiřaďte Key Vault Crypto Service Encryption User roli spravované identitě přiřazené uživatelem:

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

Vytvoření klíče a získání ID klíče

  1. Spuštěním příkazu az keyvault key create vytvořte klíč v trezoru klíčů:

    az keyvault key create \
      --name <key-name> \
      --vault-name <key-vault-name>
    
  2. Ve výstupu příkazu si poznamenejte ID klíče (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. Pro usnadnění si uložte formát, který zvolíte pro ID klíče, do $keyID proměnné prostředí. ID klíče můžete použít s verzí nebo bez.

Obměna klíčů

Můžete zvolit ruční nebo automatickou obměnu klíčů.

Šifrování registru pomocí klíče spravovaného zákazníkem, který má verzi klíče, umožní pouze ruční obměně klíčů v Azure Container Registry. Tento příklad ukládá vlastnost klíče kid :

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

Šifrování registru pomocí klíče spravovaného zákazníkem vynecháním verze klíče umožní automatickou obměně klíčů ke zjištění nové verze klíče v Azure Key Vault. Tento příklad odebere verzi z vlastnosti klíče kid :

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

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

Vytvoření registru s klíčem spravovaným zákazníkem

  1. Spuštěním příkazu az acr create vytvořte registr na úrovni služby Premium a povolte klíč spravovaný zákazníkem.

  2. Předejte hodnoty ID spravované identity (id) a ID klíče (kid) uložené v proměnných prostředí v předchozích krocích:

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

Zobrazit stav šifrování

Spuštěním příkazu az acr encryption show zobrazte stav šifrování registru s klíčem spravovaným zákazníkem:

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

V závislosti na klíči použitém k šifrování registru je výstup podobný následujícímu:

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

Povolení klíče spravovaného zákazníkem pomocí Azure Portal

Vytvoření spravované identity přiřazené uživatelem

Vytvoření spravované identity přiřazené uživatelem pro prostředky Azure v Azure Portal:

  1. Postupujte podle pokynů k vytvoření identity přiřazené uživatelem.

  2. Uložte název identity, abyste ji mohli použít v pozdějších krocích.

Snímek obrazovky s možnostmi pro vytvoření identity přiřazené uživatelem v Azure Portal

Vytvořte trezor klíčů.

  1. Postupujte podle kroků v tématu Rychlý start: Vytvoření trezoru klíčů pomocí Azure Portal.

  2. Při vytváření trezoru klíčů pro klíč spravovaný zákazníkem povolte na kartě Základy nastavení Ochrana před vymazáním . Toto nastavení pomáhá zabránit ztrátě dat v případě náhodného odstranění klíčů nebo trezorů klíčů.

    Snímek obrazovky s možnostmi pro vytvoření trezoru klíčů v Azure Portal

Povolení přístupu k trezoru klíčů důvěryhodným službám

Pokud je trezor klíčů v ochraně pomocí brány firewall nebo virtuální sítě (privátní koncový bod), povolte nastavení sítě a povolte přístup důvěryhodným službám Azure. Další informace najdete v tématu Konfigurace nastavení sítě Azure Key Vault.

Povolení přístupu k trezoru klíčů spravovaným identitám

Existují dva způsoby, jak povolit spravovaným identitám přístup k trezoru klíčů.

První možností je nakonfigurovat zásady přístupu pro trezor klíčů a nastavit oprávnění ke klíči pro přístup pomocí spravované identity přiřazené uživatelem:

  1. Přejděte do trezoru klíčů.
  2. Vyberte Nastavení>Zásady > přístupu + Přidat zásady přístupu.
  3. Vyberte Oprávnění ke klíči a pak vyberte Získat, Rozbalit klíč a Zabalit klíč.
  4. V části Vybrat objekt zabezpečení vyberte název prostředku spravované identity přiřazené uživatelem.
  5. Vyberte Přidat a pak vyberte Uložit.

Snímek obrazovky s možnostmi pro vytvoření zásad přístupu k trezoru klíčů

Druhou možností je přiřadit Key Vault Crypto Service Encryption User roli RBAC spravované identitě přiřazené uživatelem v oboru trezoru klíčů. Podrobný postup najdete v tématu Přiřazování rolí Azure s využitím webu Azure Portal.

Vytvoření klíče

Vytvořte klíč v trezoru klíčů a použijte ho k šifrování registru. Pokud chcete jako klíč spravovaný zákazníkem vybrat konkrétní verzi klíče, postupujte podle těchto kroků. Pokud je přístup k trezoru klíčů omezený na privátní koncový bod nebo vybrané sítě, možná budete muset před vytvořením registru vytvořit klíč.

  1. Přejděte do trezoru klíčů.
  2. Vyberte Klíče nastavení>.
  3. Vyberte +Vygenerovat/importovat a zadejte jedinečný název klíče.
  4. Přijměte zbývající výchozí hodnoty a pak vyberte Vytvořit.
  5. Po vytvoření vyberte klíč a pak vyberte aktuální verzi. Zkopírujte identifikátor klíče pro verzi klíče.

Vytvoření registru kontejneru

  1. Vyberte Create a resource ContainersContainer Registry (Vytvořit registr kontejneru prostředků>).>
  2. Na kartě Základy vyberte nebo vytvořte skupinu prostředků a pak zadejte název registru. V části SKU vyberte Premium.
  3. Na kartě Šifrování v části Klíč spravovaný zákazníkem vyberte Povoleno.
  4. V části Identita vyberte spravovanou identitu, kterou jste vytvořili.
  5. V části Šifrování zvolte jednu z následujících možností:
    • Zvolte Vybrat z Key Vault a pak buď vyberte existující trezor klíčů a klíč, nebo vyberte Vytvořit nový. Klíč, který vyberete, není převedený a umožňuje automatickou obměnu klíčů.
    • Vyberte Zadat identifikátor URI klíče a zadejte identifikátor existujícího klíče. Můžete zadat buď identifikátor URI klíče s verzí (pro klíč, který se musí ručně obměňovat), nebo identifikátor URI klíče bez verze (který umožňuje automatickou obměnu klíčů). Postup vytvoření klíče najdete v předchozí části.
  6. Vyberte Zkontrolovat a vytvořit.
  7. Výběrem možnosti Vytvořit nasaďte instanci registru.

Snímek obrazovky znázorňující možnosti pro vytvoření šifrovaného registru v Azure Portal

Zobrazit stav šifrování

Pokud chcete zobrazit stav šifrování registru na portálu, přejděte do svého registru. V části Nastavení vyberte Šifrování.

Povolení klíče spravovaného zákazníkem pomocí šablony Resource Manager

Pomocí šablony Resource Manager můžete vytvořit registr kontejneru a povolit šifrování pomocí klíče spravovaného zákazníkem:

  1. Zkopírujte následující obsah šablony Resource Manager do nového souboru a uložte ho 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. Postupujte podle kroků v předchozích částech a vytvořte následující prostředky:

    • Trezor klíčů identifikovaný názvem
    • Klíč trezoru klíčů identifikovaný id klíče
  3. Spuštěním příkazu az deployment group create vytvořte registr pomocí předchozího souboru šablony. Pokud je to uvedené, zadejte nový název registru a název spravované identity přiřazené uživatelem spolu s názvem trezoru klíčů a ID klíče, které jste vytvořili.

    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. Spuštěním příkazu az acr encryption show zobrazte stav šifrování registru:

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

Další kroky

V dalším článku si projdete obměněmi klíčů spravovaných zákazníkem, aktualizací verzí klíčů a odvoláním klíče spravovaného zákazníkem.