Aktivera en kundhanterad nyckel

Den här artikeln är del två i en självstudieserie i fyra delar. Del ett ger en översikt över kundhanterade nycklar, deras funktioner och överväganden innan du aktiverar en i registret. Den här artikeln vägleder dig genom stegen för att aktivera en kundhanterad nyckel med hjälp av Azure CLI, Azure Portal eller en Azure Resource Manager-mall.

Förutsättningar

Aktivera en kundhanterad nyckel med hjälp av Azure CLI

Skapa en resursgrupp

Kör kommandot az group create för att skapa en resursgrupp som ska innehålla nyckelvalvet, containerregistret och andra nödvändiga resurser:

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

Skapa en användartilldelad hanterad identitet

Konfigurera en användartilldelad hanterad identitet för registret så att du kan komma åt nyckelvalvet:

  1. Kör kommandot az identity create för att skapa den hanterade identiteten:

    az identity create \
      --resource-group <resource-group-name> \
      --name <managed-identity-name>
    
  2. Anteckna värdena och principalId i kommandoutdata id för att konfigurera registeråtkomst med nyckelvalvet:

    {
      "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. För enkelhetens id skull lagrar du värdena och principalId i miljövariabler:

    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)
    

Skapa ett nyckelvalv

  1. Kör kommandot az keyvault create för att skapa ett nyckelvalv där du kan lagra en kundhanterad nyckel för registerkryptering.

  2. Som standard aktiverar det nya nyckelvalvet automatiskt inställningen mjuk borttagning . För att förhindra dataförlust från oavsiktlig borttagning av nycklar eller nyckelvalv rekommenderar vi att du aktiverar rensningsskyddsinställningen :

    az keyvault create --name <key-vault-name> \
      --resource-group <resource-group-name> \
      --enable-purge-protection
    
  3. För enkelhetens skull bör du anteckna nyckelvalvets resurs-ID och lagra värdet i miljövariabler:

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

Aktivera betrodda tjänster för åtkomst till nyckelvalvet

Om nyckelvalvet är i skydd med en brandvägg eller ett virtuellt nätverk (privat slutpunkt) måste du aktivera nätverksinställningarna för att tillåta åtkomst med betrodda Azure-tjänster. Mer information finns i Konfigurera Azure Key Vault nätverksinställningar.

Aktivera hanterade identiteter för åtkomst till nyckelvalvet

Det finns två sätt att aktivera hanterade identiteter för åtkomst till ditt nyckelvalv.

Det första alternativet är att konfigurera åtkomstprincipen för nyckelvalvet och ange nyckelbehörigheter för åtkomst med en användartilldelad hanterad identitet:

  1. Kör kommandot az keyvault set policy . Skicka det tidigare skapade och lagrade miljövariabelvärdet för principalID.

  2. Ange nyckelbehörigheter till get, unwrapKeyoch wrapKey:

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

Det andra alternativet är att använda rollbaserad åtkomstkontroll i Azure (RBAC) för att tilldela behörigheter till den användartilldelade hanterade identiteten och komma åt nyckelvalvet. Kör kommandot az role assignment create och tilldela Key Vault Crypto Service Encryption User rollen till en användartilldelad hanterad identitet:

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

Skapa en nyckel och hämta nyckel-ID:t

  1. Kör kommandot az keyvault key create för att skapa en nyckel i nyckelvalvet:

    az keyvault key create \
      --name <key-name> \
      --vault-name <key-vault-name>
    
  2. Anteckna nyckel-ID:t i kommandots utdata (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. Lagra det format som du väljer för nyckel-ID:t i miljövariabeln för enkelhetens $keyID skull. Du kan använda ett nyckel-ID med eller utan en version.

Nyckelrotation

Du kan välja manuell eller automatisk nyckelrotation.

Kryptering av ett register med en kundhanterad nyckel som har en nyckelversion tillåter endast manuell nyckelrotation i Azure Container Registry. I det här exemplet lagras nyckelns kid egenskap:

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

Om du krypterar ett register med en kundhanterad nyckel genom att utelämna en nyckelversion aktiveras automatisk nyckelrotation för att identifiera en ny nyckelversion i Azure Key Vault. Det här exemplet tar bort versionen från nyckelns kid egenskap:

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

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

Skapa ett register med en kundhanterad nyckel

  1. Kör kommandot az acr create för att skapa ett register på Premium-tjänstnivån och aktivera den kundhanterade nyckeln.

  2. Skicka värdena för hanterad identitets-ID (id) och nyckel-ID (kid) som lagras i miljövariablerna i föregående steg:

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

Visa krypteringsstatus

Kör kommandot az acr encryption show för att visa status för registerkryptering med en kundhanterad nyckel:

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

Beroende på vilken nyckel som används för att kryptera registret liknar utdata:

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

Aktivera en kundhanterad nyckel med hjälp av Azure Portal

Skapa en användartilldelad hanterad identitet

Så här skapar du en användartilldelad hanterad identitet för Azure-resurser i Azure Portal:

  1. Följ stegen för att skapa en användartilldelad identitet.

  2. Spara identitetens namn om du vill använda det i senare steg.

Skärmbild av alternativen för att skapa en användartilldelad identitet i Azure Portal.

Skapa ett nyckelvalv

  1. Följ stegen i Snabbstart: Skapa ett nyckelvalv med hjälp av Azure Portal.

  2. När du skapar ett nyckelvalv för en kundhanterad nyckel aktiverar du inställningen Rensa skydd på fliken Grundläggande. Den här inställningen hjälper till att förhindra dataförlust från oavsiktlig borttagning av nycklar eller nyckelvalv.

    Skärmbild av alternativen för att skapa ett nyckelvalv i Azure Portal.

Aktivera betrodda tjänster för åtkomst till nyckelvalvet

Om nyckelvalvet är i skydd med en brandvägg eller ett virtuellt nätverk (privat slutpunkt) aktiverar du nätverksinställningen för att tillåta åtkomst med betrodda Azure-tjänster. Mer information finns i Konfigurera Azure Key Vault nätverksinställningar.

Aktivera hanterade identiteter för åtkomst till nyckelvalvet

Det finns två sätt att aktivera hanterade identiteter för åtkomst till ditt nyckelvalv.

Det första alternativet är att konfigurera åtkomstprincipen för nyckelvalvet och ange nyckelbehörigheter för åtkomst med en användartilldelad hanterad identitet:

  1. Gå till nyckelvalvet.
  2. Välj Inställningar>Åtkomstprinciper > +Lägg till åtkomstprincip.
  3. Välj Nyckelbehörigheter och välj sedan Hämta, Packa upp nyckel och Radbryt nyckel.
  4. I Välj huvudnamn väljer du resursnamnet för din användartilldelade hanterade identitet.
  5. Välj Lägg till och välj sedan Spara.

Skärmbild av alternativ för att skapa en åtkomstprincip för nyckelvalvet.

Det andra alternativet är att tilldela Key Vault Crypto Service Encryption User RBAC-rollen till den användartilldelade hanterade identiteten i nyckelvalvsomfånget. Läs mer om att tilldela roller i Tilldela Azure-roller via Azure Portal.

Skapa en nyckel

Skapa en nyckel i nyckelvalvet och använd den för att kryptera registret. Följ dessa steg om du vill välja en specifik nyckelversion som kundhanterad nyckel. Du kan också behöva skapa en nyckel innan du skapar registret om åtkomsten till nyckelvalvet är begränsad till en privat slutpunkt eller valda nätverk.

  1. Gå till nyckelvalvet.
  2. Välj Inställningar>Nycklar.
  3. Välj +Generera/importera och ange ett unikt namn för nyckeln.
  4. Acceptera de återstående standardvärdena och välj sedan Skapa.
  5. När du har skapat den väljer du nyckeln och väljer sedan den aktuella versionen. Kopiera nyckelidentifieraren för nyckelversionen.

Skapa ett containerregister

  1. Välj Skapa ett containerregisterförresurscontainrar>>.
  2. På fliken Grundläggande väljer eller skapar du en resursgrupp och anger sedan ett registernamn. I SKU väljer du Premium.
  3. På fliken Kryptering väljer du Aktiverad förKundhanterad nyckel.
  4. För Identitet väljer du den hanterade identitet som du skapade.
  5. För Kryptering väljer du något av följande alternativ:
    • Välj Välj från Key Vault och välj sedan ett befintligt nyckelvalv och nyckel eller välj Skapa nytt. Nyckeln som du väljer är oversionerad och aktiverar automatisk nyckelrotation.
    • Välj Ange nyckel-URI och ange identifieraren för en befintlig nyckel. Du kan ange antingen en versionsnyckel-URI (för en nyckel som måste roteras manuellt) eller en oversionerad nyckel-URI (som möjliggör automatisk nyckelrotation). Se föregående avsnitt för steg för att skapa en nyckel.
  6. Välj Granska + skapa.
  7. Välj Skapa för att distribuera registerinstansen.

Skärmbild som visar alternativ för att skapa ett krypterat register i Azure Portal.

Visa krypteringsstatus

Om du vill se krypteringsstatusen för registret i portalen går du till registret. Under Inställningar väljer du Kryptering.

Aktivera en kundhanterad nyckel med hjälp av en Resource Manager mall

Du kan använda en Resource Manager mall för att skapa ett containerregister och aktivera kryptering med en kundhanterad nyckel:

  1. Kopiera följande innehåll i en Resource Manager mall till en ny fil och spara den som 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. Följ stegen i föregående avsnitt för att skapa följande resurser:

    • Nyckelvalv, identifierat med namn
    • Nyckelvalvsnyckel identifierad av nyckel-ID
  3. Kör kommandot az deployment group create för att skapa registret med hjälp av föregående mallfil. När du anger det anger du ett nytt registernamn och ett användartilldelat hanterat identitetsnamn, tillsammans med nyckelvalvets namn och nyckel-ID som du skapade.

    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. Kör kommandot az acr encryption show för att visa status för registerkryptering:

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

Nästa steg

Gå vidare till nästa artikel för att gå igenom roterande kundhanterade nycklar, uppdatera nyckelversioner och återkalla en kundhanterad nyckel.