Sdílet prostřednictvím


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

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

Požadavky

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

Vytvoření skupiny zdrojů

Spuštěním příkazu az group create vytvořte skupinu prostředků, která bude obsahovat váš 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 nakonfigurujte přístup k registru pomocí trezoru klíčů:

    {
      "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. Pro usnadnění práci uložte id hodnoty do principalId 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 před náhodným odstraněním 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í koncový bod), musíte povolit nastavení sítě, aby bylo možné povolit přístup důvěryhodnými službami Azure. Další informace najdete v tématu Konfigurace nastavení sítě služby Azure Key Vault.

Povolení spravovaných identit pro přístup k trezoru klíčů

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í klíče 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 hodnotu principalIDproměnné prostředí .

  2. Nastavte oprávnění ke klíči 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) Azure k přiřazení oprávnění spravované identitě přiřazené uživatelem a přístupu 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í použití uložte formát, který zvolíte pro ID klíče v $keyID proměnné prostředí. ID klíče můžete použít s verzí nebo bez této verze.

Obměna klíčů

Můžete zvolit ruční nebo automatické obměně klíčů.

Šifrování registru pomocí klíče spravovaného zákazníkem, který má verzi klíče, umožní v Azure Container Registry pouze ruční obměnu klíčů. 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í automatické obměně klíčů zjistit novou verzi klíče ve službě 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 pomocí klíče spravovaného zákazníkem:

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

V závislosti na klíči použitém k šifrování registru se výstup podobá:

{
  "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í webu Azure Portal

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

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

  1. Podle pokynů vytvořte identitu přiřazenou uživatelem.

  2. Uložte název identity, abyste ho mohli použít v dalších krocích.

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

Vytvořte trezor klíčů.

  1. Postupujte podle kroků v rychlém startu: Vytvoření trezoru klíčů pomocí webu Azure Portal.

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

    Snímek obrazovky s možnostmi vytvoření trezoru klíčů na webu 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ě tak, aby umožňovalo přístup důvěryhodnými službami Azure. Další informace najdete v tématu Konfigurace nastavení sítě služby Azure Key Vault.

Povolení spravovaných identit pro přístup k trezoru klíčů

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í klíče pro přístup pomocí spravované identity přiřazené uživatelem:

  1. Přejděte do trezoru klíčů.
  2. Vyberte Nastavení>zásad > přístupu + Přidat zásady přístupu.
  3. Vyberte Oprávnění ke klíči a pak vyberte Získat, Rozbalit klíč a Zalamovat 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 potom Uložit.

Snímek obrazovky s možnostmi pro vytvoření zásad přístupu 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 +Generovat/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 Vytvořit prostředek>Kontejnery>Container Registry.
  2. Na kartě Základy vyberte nebo vytvořte skupinu prostředků a zadejte název registru. V SKU vyberte Premium.
  3. Na kartě Šifrování u klíče spravovaného zákazníkem vyberte Povoleno.
  4. V části Identita vyberte spravovanou identitu, kterou jste vytvořili.
  5. Pro šifrování zvolte jednu z následujících možností:
    • Zvolte Vybrat ze služby Key Vault a pak vyberte existující trezor klíčů a klíč nebo vyberte Vytvořit nový. Vybraný klíč není převedený a umožňuje automatické obměně klíčů.
    • Vyberte Enter key URI a zadejte identifikátor existujícího klíče. Můžete zadat identifikátor URI klíče s verzí (pro klíč, který se musí otočit ručně) nebo identifikátor URI neversionovaného klíče (který umožňuje automatickou obměnu klíčů). Postup vytvoření klíče najdete v předchozí části.
  6. Vyberte Zkontrolovat a vytvořit.
  7. Vyberte Vytvořit a nasaďte instanci registru.

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

Zobrazení stavu šifrování

Pokud chcete zobrazit stav šifrování vašeho 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 Manageru

Pomocí šablony Resource Manageru 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 Manageru 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:

    • Key Vault identifikovaný podle názvu
    • Klíč trezoru klíčů identifikovaný podle 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 uvedeno, 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

Přejděte k dalšímu článku a projděte si obměně klíčů spravovaných zákazníkem, aktualizaci verzí klíčů a odvolání klíče spravovaného zákazníkem.