Een door de klant beheerde sleutel inschakelen

Dit artikel is deel twee in een vierdelige reeks zelfstudies. Deel 1 biedt een overzicht van door de klant beheerde sleutels, hun functies en overwegingen voordat u er een inschakelt in uw register. 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, de 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 sleutelkluis, containerregister en andere vereiste resources 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 u toegang hebt tot de sleutelkluis:

  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 uitvoer van de opdracht de waarden en principalId voor het id configureren van registertoegang met de sleutelkluis:

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

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

  2. Standaard schakelt de nieuwe sleutelkluis automatisch de instelling voor voorlopig verwijderen in. Als u wilt voorkomen dat gegevens verloren gaan door onbedoelde verwijdering van sleutels of sleutelkluizen, raden we u aan de instelling voor 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 inschakelen voor toegang tot de sleutelkluis

Als de sleutelkluis wordt 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 inschakelen voor toegang tot de sleutelkluis

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

De eerste optie is om 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 waarde van de eerder gemaakte en opgeslagen omgevingsvariabele door.principalID

  2. Stel sleutelmachtigingen in 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 om op rollen gebaseerd toegangsbeheer (RBAC) van Azure te gebruiken om machtigingen toe te wijzen aan de door de gebruiker toegewezen beheerde identiteit en toegang te krijgen tot de sleutelkluis. 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 en de sleutel-id ophalen

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

    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 $keyID omgevingsvariabele. U kunt een sleutel-id met of zonder versie gebruiken.

Sleutelroulatie

U kunt kiezen voor handmatige of automatische sleutelrotatie.

Als u een register versleutelt met een door de klant beheerde sleutel met een sleutelversie, is alleen handmatige sleutelrotatie in Azure Container Registry toegestaan. In dit voorbeeld wordt de eigenschap van kid de sleutel 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, wordt automatische sleutelrotatie ingeschakeld om een nieuwe sleutelversie in Azure Key Vault te detecteren. In dit voorbeeld wordt de versie verwijderd uit de eigenschap van kid 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 register maken met een door de klant beheerde sleutel

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

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

    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 de 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 de Azure Portal.

Een sleutelkluis maken

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

  2. Wanneer u een sleutelkluis maakt voor een door de klant beheerde sleutel, schakelt u op het tabblad Basisinformatie de instelling Beveiliging opschonen in. Met deze instelling voorkomt u gegevensverlies door onbedoelde verwijdering van sleutels of sleutelkluizen.

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

Vertrouwde services inschakelen voor toegang tot de sleutelkluis

Als de sleutelkluis wordt 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.

Beheerde identiteiten inschakelen voor toegang tot de sleutelkluis

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

De eerste optie is om 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 vervolgens Ophalen, Sleutel uitpakken en Sleutel verpakken.
  4. Selecteer in Principal selecteren de resourcenaam van uw door de gebruiker toegewezen beheerde identiteit.
  5. Selecteer Toevoegen en selecteer vervolgens Opslaan.

Schermopname van opties voor het maken van 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 binnen het bereik van de sleutelkluis. Raadpleeg Azure-rollen toewijzen met de Azure Portal voor meer details.

Een sleutel maken

Maak een sleutel in de sleutelkluis en gebruik deze om het register 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 register maakt als de toegang tot de sleutelkluis is beperkt tot een privé-eindpunt of geselecteerde netwerken.

  1. Ga naar uw sleutelkluis.
  2. SelecteerInstellingenSleutels>.
  3. Selecteer +Genereren/importeren en voer een unieke naam in voor de sleutel.
  4. Accepteer de resterende standaardwaarden en selecteer vervolgens Maken.
  5. Selecteer na het maken de sleutel en selecteer vervolgens de huidige versie. Kopieer de sleutel-id voor de sleutelversie.

Een containerregister maken

  1. Selecteer Een resource maken>Containers>Container Registry.
  2. Selecteer of maak een resourcegroep op het tabblad Basisinformatie en voer vervolgens een registernaam in. Selecteer Premium in SKU.
  3. Selecteer op het tabblad Versleuteling voor Door de klant beheerde sleutelde optie Ingeschakeld.
  4. Selecteer bij Identiteit de beheerde identiteit die u hebt gemaakt.
  5. Kies voor Versleuteling een van de volgende opties:
    • Kies Selecteren in Key Vault en selecteer vervolgens een bestaande sleutelkluis en sleutel of selecteer Nieuwe maken. De sleutel die u selecteert, is niet-omkeren en schakelt automatische sleutelrotatie in.
    • Selecteer Sleutel-URI invoeren en geef de id van een bestaande sleutel op. U kunt een versieversie van de sleutel-URI opgeven (voor een sleutel die handmatig moet worden geroteerd) of een niet-omgekeerde sleutel-URI (die automatische sleutelrotatie mogelijk maakt). Zie de vorige sectie voor stappen voor het maken van een sleutel.
  6. Selecteer Controleren + maken.
  7. Selecteer Maken om het registerexemplaar te implementeren.

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

De versleutelingsstatus weergeven

Als u de versleutelingsstatus van uw register in de portal wilt bekijken, gaat u naar uw register. Selecteer onder Instellingende optie Versleuteling.

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

U kunt een Resource Manager sjabloon gebruiken om een containerregister te maken en versleuteling in te schakelen met een door de klant beheerde sleutel:

  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": {
        "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. Volg de stappen in de vorige secties om de volgende resources te maken:

    • Sleutelkluis, aangeduid met naam
    • Sleutelkluissleutel, geïdentificeerd door sleutel-id
  3. Voer de opdracht az deployment group create uit om het register te maken met behulp van het voorgaande sjabloonbestand. Geef, indien aangegeven, een nieuwe registernaam en een door de gebruiker toegewezen beheerde identiteit op, samen met de naam van de sleutelkluis 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> \
        vault_name=<key-vault-name> \
        key_id=<key-vault-key-id>
    
  4. Voer de opdracht az acr encryption show uit om de status van registerversleuteling weer te geven:

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

Volgende stappen

Ga naar het volgende artikel om door de klant beheerde sleutels te roteren, sleutelversies bij te werken en een door de klant beheerde sleutel in te trekken.