Een door de klant beheerde sleutel inschakelen

Dit artikel is deel twee in een vierdelige reeks zelfstudies. Deel één biedt een overzicht van door de klant beheerde sleutels, hun functies en overwegingen voordat u er een inschakelt in uw registerinstantie. In dit artikel wordt u begeleid bij de stappen voor het inschakelen van een door de klant beheerde sleutel met behulp van de Azure CLI, Azure Portal of een Azure Resource Manager-sjabloon.

Vereisten

Een door de klant beheerde sleutel inschakelen met behulp van de Azure CLI

Een resourcegroep maken

Voer de opdracht az group create uit om een resourcegroep te maken die uw sleutelarchief, Container Registry en andere vereiste hulpbronnen bevat:

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

Een door de gebruiker toegewezen beheerde identiteit maken

Configureer een door de gebruiker toegewezen beheerde identiteit voor het register, zodat deze toegang heeft tot de versleutelingssleutel:

  1. Voer de opdracht az identity create uit om de beheerde identiteit te maken:

    az identity create \
      --resource-group <resource-group-name> \
      --name <managed-identity-name>
    
  2. Noteer in de opdrachtuitvoer de waarden id en principalId voor het configureren van registertoegang tot de sleutel:

    {
      "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. Sla voor het gemak de id en principalId waarden op in omgevingsvariabelen:

    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)
    

Een sleutelkluis maken en configureren

  1. Voer de opdracht az keyvault create uit om een sleutelkluis te maken waarin u een door de klant beheerde sleutel voor registerversleuteling kunt opslaan.

  2. De nieuwe sleutelkluis schakelt standaard automatisch de instelling soft delete in. Als u wilt voorkomen dat gegevens verloren gaan door onbedoelde verwijdering van sleutels of sleutelkluizen, raden we u aan de instelling beveiliging tegen opschonen in te schakelen:

    az keyvault create --name <key-vault-name> \
      --resource-group <resource-group-name> \
      --enable-purge-protection
    
  3. Noteer voor het gemak de resource-id van de sleutelkluis en sla de waarde op in omgevingsvariabelen:

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

Vertrouwde services toegang tot de sleutelkluis geven inschakelen

Als de sleutelkluis is beveiligd met een firewall of virtueel netwerk (privé-eindpunt), moet u de netwerkinstellingen inschakelen om toegang door vertrouwde Azure-services toe te staan. Zie Azure Key Vault-netwerkinstellingen configureren voor meer informatie.

Beheerde identiteiten toegang geven tot de sleutelkluis

Er zijn twee manieren om beheerde identiteiten toegang te geven tot uw sleutelkluis.

De eerste optie is het toegangsbeleid voor de sleutelkluis te configureren en sleutelmachtigingen in te stellen voor toegang met een door de gebruiker toegewezen beheerde identiteit:

  1. Voer de opdracht az keyvault set policy uit. Geef de eerder gemaakte en opgeslagen omgevingsvariabelewaarde van principalID.

  2. Sleutelmachtigingen instellen op get, unwrapKeyen wrapKey:

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

De tweede optie is het gebruik van op rollen gebaseerd toegangsbeheer van Azure (RBAC) om machtigingen toe te wijzen aan de door de gebruiker toegewezen beheerde identiteit en toegang te krijgen tot de Key Vault. Voer de opdracht az role assignment create uit en wijs de Key Vault Crypto Service Encryption User rol toe aan een door de gebruiker toegewezen beheerde identiteit:

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

Een sleutel maken in de sleutelkluis en de sleutel-id ophalen

  1. Voer de opdracht az keyvault key create uit om een sleutel te maken in de sleutelkluis:

    az keyvault key create \
      --name <key-name> \
      --vault-name <key-vault-name>
    
  2. Noteer in de uitvoer van de opdracht de sleutel-id (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. Sla voor het gemak de indeling op die u kiest voor de sleutel-id in de omgevingsvariabele $keyID. U kunt een sleutel-id gebruiken met of zonder een versie.

Sleutelrotatie

U kunt handmatige of automatische sleutelrotatie kiezen.

Als u een register versleutelt met een door de klant beheerde sleutel met een sleutelversie, kan alleen handmatig sleutelrotatie in Azure Container Registry worden uitgevoerd. In dit voorbeeld wordt de eigenschap van de sleutel kid opgeslagen:

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

Als u een register versleutelt met een door de klant beheerde sleutel door een sleutelversie weg te laten, kan automatische sleutelrotatie een nieuwe sleutelversie in Azure Key Vault detecteren. In dit voorbeeld wordt de versie verwijderd uit de eigenschap kid van de sleutel:

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

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

Een beheerde HSM maken en configureren

U moet een Managed HSM inrichten en activeren voordat u sleutels kunt maken of data-plane-rollen kunt toewijzen. Volg de quickstart: Een beheerde HSM inrichten en activeren met behulp van de Azure CLI en ga vervolgens terug naar dit artikel.

Als de beheerde HSM-firewall is ingeschakeld, configureert u vertrouwde services of andere netwerktoegang voordat u de registry maakt. Zie Netwerkbeveiliging voor beheerde HSM voor meer informatie.

De gebruiker die de versleutelingssleutel maakt, heeft een beheerde HSM-rol nodig die het maken van sleutels toestaat, zoals Managed HSM Crypto User. Zie Rolbeheer voor het gegevensvlak van Managed HSM voor meer informatie.

Maak een RSA-HSM-sleutel die ondersteuning biedt voor sleutelverpakking:

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

Beheerde HSM maakt gebruik van lokale RBAC in plaats van Key Vault toegangsbeleid. Wijs de rol Managed HSM Crypto Service Encryption User toe aan de door de gebruiker toegewezen identiteit. In het volgende voorbeeld wordt de toewijzing beperkt tot de sleutel die door de registerdatabase wordt gebruikt:

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>

Sla de sleutel-id op met de bijbehorende versie voor handmatige rotatie:

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

Als u automatische sleutelrotatie wilt inschakelen, verwijdert u de versie uit de sleutel-id:

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

Note

Een beheerde HSM-sleutel-URI maakt gebruik van de indeling https://<managed-hsm-name>.managedhsm.azure.net/keys/<key-name>/<version>. Het DNS-achtervoegsel kan variëren per Azure cloud.

Een registry maken met een door de klant beheerde sleutel

  1. Voer de opdracht az acr create uit om een containerregister te maken in de Premium-servicelaag en schakel de door de klant beheerde sleutel in.

  2. Geef de waarden van de id van de beheerde identiteit (id) en sleutel-id (kid) door die zijn opgeslagen in de omgevingsvariabelen in de vorige stappen:

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

Versleutelingsstatus weergeven

Voer de opdracht az acr encryption show uit om de status van de registerversleuteling weer te geven met een door de klant beheerde sleutel:

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

Afhankelijk van de sleutel die wordt gebruikt om het register te versleutelen, is de uitvoer vergelijkbaar met:

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

Een door de klant beheerde sleutel inschakelen met behulp van Azure Portal

Een door de gebruiker toegewezen beheerde identiteit maken

Een door de gebruiker toegewezen beheerde identiteit maken voor Azure-resources in de Azure-portal:

  1. Volg de stappen om een door de gebruiker toegewezen identiteit te maken.

  2. Sla de naam van de identiteit op om deze in latere stappen te gebruiken.

Schermopname van de opties voor het maken van een door de gebruiker toegewezen identiteit in Azure Portal.

Maak een sleutelkluis.

  1. Volg de stappen in quickstart: Een sleutelkluis maken met behulp van Azure Portal.

  2. Wanneer u een sleutelkluis maakt voor een door de klant beheerde sleutel, schakelt u op het tabblad Basisinstellingen de instelling Beveiliging tegen opschonen in. Met deze instelling voorkomt u dat gegevens verloren gaan door onbedoelde verwijdering van sleutels of sleutelkluizen.

    Schermopname van de opties voor het maken van een sleutelkluis in Azure Portal.

Toegang voor vertrouwde services tot de sleutelkluis inschakelen

Als de sleutelkluis is beveiligd met een firewall of virtueel netwerk (privé-eindpunt), schakelt u de netwerkinstelling in om toegang door vertrouwde Azure-services toe te staan. Zie Azure Key Vault-netwerkinstellingen configureren voor meer informatie.

Toegang voor beheerde identiteiten tot de sleutelkluis inschakelen

Er zijn twee manieren om beheerde identiteiten toegang te geven tot uw sleutelkluis.

De eerste optie is het toegangsbeleid voor de sleutelkluis te configureren en sleutelmachtigingen in te stellen voor toegang met een door de gebruiker toegewezen beheerde identiteit:

  1. Ga naar uw sleutelkluis.
  2. Selecteer Instellingen>Toegangsbeleid > +Toegangsbeleid toevoegen.
  3. Selecteer Sleutelmachtigingen en selecteer Ophalen, Sleutel uitpakken en Sleutel verpakken.
  4. Selecteer in Select principal de resourcenaam van uw door de gebruiker toegewezen beheerde identiteit.
  5. Selecteer Toevoegen en vervolgens Opslaan.

Schermopname van opties voor het maken van een toegangsbeleid voor een sleutelkluis.

De andere optie is om de Key Vault Crypto Service Encryption User RBAC-rol toe te wijzen aan de door de gebruiker toegewezen beheerde identiteit in het bereik van de sleutelkluis. Zie Azure-rollen toewijzen met behulp van de Azure-portal voor gedetailleerde stappen.

Een beheerde HSM maken en configureren

  1. Volg de quickstart: Een beheerde HSM inrichten en activeren met behulp van de Azure-portal.
  2. Zorg ervoor dat de gebruiker die de versleutelingssleutel maakt, een beheerde HSM-rol heeft die het maken van sleutels toestaat, zoals Managed HSM Crypto User.
  3. Selecteer onder Instellingen, Sleutels en maak of importeer vervolgens een RSA-HSM sleutel die ondersteuning biedt voor de wrapKey en unwrapKey bewerkingen.
  4. Selecteer onder InstellingenLokaal RBAC.
  5. Voeg de roltoewijzing Managed HSM Crypto Service Encryption User toe voor de door de gebruiker toegewezen identiteit. Wijs volgens het principe van minimale bevoegdheden de rol toe aan het bereik van de versleutelingssleutel. Zie Rolbeheer voor beheerde HSM-gegevensvlak voor meer informatie.
  6. Als de beheerde HSM-firewall is ingeschakeld, configureert u vertrouwde services of andere netwerktoegangsmethoden. Zie Netwerkbeveiliging voor beheerde HSM voor meer informatie.

Important

Azure Container Registry maakt geen beheerde HSM-roltoewijzingen en werkt deze niet bij. Configureer de roltoewijzing voordat u het containerregister maakt of de versleutelingssleutel wijzigt.

Een sleutel maken in een Key Vault

Maak een sleutel in de Key Vault en gebruik deze om de registerdatabase te versleutelen. Volg deze stappen als u een specifieke sleutelversie wilt selecteren als een door de klant beheerde sleutel. Mogelijk moet u ook een sleutel maken voordat u het containerregister maakt als de toegang tot de sleutelkluis is beperkt tot een privé-eindpunt of geselecteerde netwerken.

  1. Ga naar uw sleutelkluis.
  2. Selecteer Instellingen>Sleutels.
  3. Selecteer +Generate/Import en voer een unieke naam in voor de sleutel.
  4. Accepteer de resterende standaardwaarden en selecteer Maken.
  5. Nadat u deze hebt gemaakt, selecteert u de sleutel en selecteert u vervolgens de huidige versie. Kopieer de sleutelidentificatie voor de sleutelversie.

Een containerregistry maken

  1. Selecteer Een resource maken>Containers>Container Registry.

  2. Selecteer of maak een resourcegroep op het tabblad Basis en voer vervolgens een registernaam in. Selecteer SKU in Premium.

  3. Selecteer op het tabblad Versleuteling voor door de klant beheerde sleutelIngeschakeld.

  4. Selecteer voor Identiteit de beheerde identiteit die u hebt gemaakt.

  5. Kies voor Versleuteling een van de volgende opties:

    • Kies Select from Key Vault en selecteer vervolgens een bestaande key vault of beheerde HSM en een sleutel. Selecteer Nieuw om een sleutelkluis en sleutel te maken. De sleutel die u selecteert, heeft geen versie en maakt automatische sleutelrotatie mogelijk.
    • Selecteer Voer sleutel-URI in en geef de id op van een bestaande Key Vault of beheerde HSM-sleutel. U kunt een sleutel-URI met versie opgeven (voor een sleutel die u handmatig moet roteren) of een sleutel-URI zonder versie (waarmee automatische sleutelrotatie mogelijk is).

    Als een beheerde HSM-firewall voorkomt dat de portal sleutels weergeeft, staat u het IP-adres van de client toe of selecteert u Enter key URI. Door vertrouwde services toe te staan, kan Azure Container Registry de Managed HSM bereiken, maar staat het niet toe dat een client buiten de geconfigureerde netwerkgrens de sleutelkiezer gebruikt.

  6. Selecteer Review + create.

  7. Selecteer Create om de registerinstantie te implementeren.

Schermopname van opties voor het maken van een versleuteld register in Azure Portal.

De versleutelingsstatus weergeven

Als u de versleutelingsstatus van uw containerregister in de portal wilt zien, gaat u naar het containerregister. Onder Instellingen, selecteer Versleuteling.

Een door de klant beheerde sleutel inschakelen met behulp van een Resource Manager-sjabloon

U kunt een Resource Manager-sjabloon gebruiken om een container registry te maken en versleuteling in te schakelen met een door de klant beheerde sleutel die is opgeslagen in Key Vault of Managed HSM.

Voordat u de sjabloon implementeert, maakt u de door de gebruiker toegewezen identiteit en configureert u de toegang tot de sleutel:

  • Voor Key Vault verleent u de identiteit de get, wrapKey en unwrapKey machtigingen met behulp van een toegangsbeleid of de Azure RBAC-rol Key Vault Crypto Service Encryption User.
  • Wijs voor beheerde HSM de identiteit de lokale RBAC-rol Managed HSM Crypto Service Encryption User toe in het sleutelbereik.

De sjabloon declareert de bestaande identiteit, zodat het register daarvan afhankelijk kan zijn. Implementeer de sjabloon in dezelfde resourcegroep als de identiteit.

  1. Kopieer de volgende inhoud van een Resource Manager-sjabloon naar een nieuw bestand en sla deze op als 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. Volg de stappen in de vorige secties om de volgende resources te maken:

    • Door de gebruiker toegewezen beheerde identiteit, geïdentificeerd aan de hand van de naam
    • Key Vault of beheerde HSM-sleutel, geïdentificeerd door sleutel-id
    • Vereiste Key Vault-machtigingen of lokale RBAC-roltoewijzing van Managed HSM
  3. Voer de opdracht az deployment group create uit om het containerregister te maken met behulp van het voorgaande sjabloonbestand. Geef een nieuwe registernaam op, de naam van de bestaande door de gebruiker toegewezen beheerde identiteit en de sleutel-id die u hebt gemaakt.

    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. Voer de opdracht az acr encryption show uit om de status van containerregisterversleuteling weer te geven:

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

Volgende stappen

Ga naar het volgende artikel voor een uitleg over het roteren van klantbeheerde sleutels, het bijwerken van sleutelversies en het intrekken van een klantbeheerde sleutel.