Aktivieren eines kundenseitig verwalteten Schlüssels

Dieser Artikel ist der zweite Teil einer vierteiligen Tutorialserie. Im ersten Teil erhalten Sie eine Übersicht über kundenseitig verwaltete Schlüssel, ihre Features und die Überlegungen, die Sie anstellen sollten, bevor Sie solche Schlüssel in Ihrer Registrierung aktivieren. Dieser Artikel führt Sie Schritt für Schritt durch die Aktivierung eines kundenseitig verwalteten Schlüssels mithilfe der Azure CLI, des Azure-Portals oder einer Azure Resource Manager-Vorlage.

Voraussetzungen

Aktivieren eines kundenseitig verwalteten Schlüssels mithilfe der Azure CLI

Erstellen einer Ressourcengruppe

Führen Sie den Befehl az group create aus, um eine Ressourcengruppe für den Schlüsseltresor, die Containerregistrierung und andere erforderliche Ressourcen zu erstellen.

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

Erstellen einer benutzerseitig zugewiesenen verwalteten Identität

Konfigurieren Sie eine benutzerseitig zugewiesene verwaltete Identität für die Registrierung, damit Sie auf den Schlüsseltresor zugreifen können:

  1. Führen Sie den Befehl az identity create aus, um die verwaltete Identität zu erstellen:

    az identity create \
      --resource-group <resource-group-name> \
      --name <managed-identity-name>
    
  2. Notieren Sie sich in der Befehlsausgabe die Werte id und principalId, um den Zugriff auf die Registrierung mit dem Schlüsseltresor zu konfigurieren:

    {
      "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. Speichern Sie die Werte id und principalId der Einfachheit halber in Umgebungsvariablen:

    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)
    

Erstellen eines Schlüsseltresors

  1. Führen Sie den Befehl az keyvault create aus, um einen Schlüsseltresor zu erstellen, in dem Sie einen kundenseitig verwalteten Schlüssel für die Registrierungsverschlüsselung speichern können.

  2. Standardmäßig aktiviert der neue Schlüsseltresor automatisch die Einstellung zum vorläufigen Löschen. Um Datenverluste durch versehentliches Löschen von Schlüsseln oder Schlüsseltresoren zu vermeiden, empfehlen wir Ihnen, die Einstellung für den Bereinigungsschutz zu aktivieren:

    az keyvault create --name <key-vault-name> \
      --resource-group <resource-group-name> \
      --enable-purge-protection
    
  3. Notieren Sie sich der Einfachheit halber die Ressourcen-ID des Schlüsseltresors, und speichern Sie den Wert in Umgebungsvariablen:

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

Aktivieren von vertrauenswürdigen Diensten für den Zugriff auf den Schlüsseltresor

Wenn der Schlüsseltresor durch eine Firewall oder ein virtuelles Netzwerk (privater Endpunkt) geschützt ist, müssen Sie die Netzwerkeinstellung aktivieren, um den Zugriff durch vertrauenswürdige Azure-Dienste zuzulassen. Weitere Informationen finden Sie unter Konfigurieren von Azure Key Vault-Netzwerkeinstellungen.

Aktivieren von verwalteten Identitäten für den Zugriff auf den Schlüsseltresor

Es gibt zwei Möglichkeiten, verwaltete Identitäten für den Zugriff auf Ihren Schlüsseltresor zu aktivieren.

Die erste Option besteht darin, die Richtlinie für den Zugriff auf den Schlüsseltresor zu konfigurieren und die Schlüsselberechtigungen für den Zugriff mit einer benutzerseitig zugewiesenen verwalteten Identität festzulegen:

  1. Führen Sie den Befehl az keyvault set-policy aus. Übergeben Sie den zuvor erstellten und gespeicherten Umgebungsvariablenwert principalID.

  2. Legen Sie die Schlüsselberechtigungen auf get, unwrapKey und wrapKey fest:

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

Die zweite Option besteht darin, die rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC) in Azure zu verwenden, um Berechtigungen für die benutzerseitig zugewiesene verwaltete Identität des Benutzers zuzuweisen und auf den Schlüsseltresor zuzugreifen. Führen Sie den Befehl az role assignment create aus, und weisen Sie die Rolle Key Vault Crypto Service Encryption User einer benutzerseitig zugewiesenen verwalteten Identität zu:

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

Erstellen eines Schlüssels und Abrufen der Schlüssel-ID

  1. Führen Sie den Befehl az keyvault key create aus, um einen Schlüssel im Schlüsseltresor zu erstellen:

    az keyvault key create \
      --name <key-name> \
      --vault-name <key-vault-name>
    
  2. Notieren Sie sich die Schlüssel-ID (kid) in der Befehlsausgabe:

    [...]
      "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. Speichern Sie der Einfachheit halber das für die Schlüssel-ID ausgewählte Format in der Umgebungsvariablen $keyID. Sie können eine Schlüssel-ID mit oder ohne Version verwenden.

Schlüsselrotation

Sie können manuelle oder automatische Schlüsselrotation auswählen.

Die Verschlüsselung einer Registrierung mit einem kundenseitig verwalteten Schlüssel mit einer Schlüsselversion ermöglicht nur eine manuelle Schlüsselrotation in Azure Container Registry. In diesem Beispiel wird die kid-Eigenschaft des Schlüssels gespeichert:

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

Wenn Sie eine Registrierung mit einem kundenseitig verwalteten Schlüssel verschlüsseln, indem Sie eine Schlüsselversion auslassen, wird die automatische Schlüsselrotation aktiviert, um eine neue Schlüsselversion in Azure Key Vault zu erkennen. In diesem Beispiel wird die Version aus der kid-Eigenschaft des Schlüssels entfernt:

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

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

Erstellen einer Registrierung mit einem kundenseitig verwaltetem Schlüssel

  1. Führen Sie den Befehl az acr create aus, um eine Registrierung im Premium-Tarif zu erstellen und den kundenseitig verwalteten Schlüssel zu aktivieren.

  2. Übergeben Sie die Werte für die ID der verwalteten Identität (id) und die Schlüssel-ID (kid), die Sie in den vorherigen Schritten in den Umgebungsvariablen gespeichert haben:

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

Anzeigen des Verschlüsselungsstatus

Führen Sie den Befehl az acr encryption show aus, um den Status der Registrierungsverschlüsselung mit einem kundenseitig verwalteten Schlüssel anzuzeigen:

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

Abhängig vom Schlüssel, der zum Verschlüsseln der Registrierung verwendet wird, sieht die Ausgabe etwa wie folgt aus:

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

Aktivieren eines kundenseitig verwalteten Schlüssels mithilfe des Azure-Portals

Erstellen einer benutzerseitig zugewiesenen verwalteten Identität

So erstellen Sie eine benutzerseitig zugewiesene verwaltete Identität für Azure-Ressourcen im Azure-Portal

  1. Führen Sie die Schritte zum Erstellen einer benutzerseitig zugewiesenen Identität aus.

  2. Speichern Sie den Namen der Identität zur späteren Verwendung.

Screenshot: Optionen zum Erstellen einer benutzerseitig zugewiesenen Identität im Azure-Portal

Erstellen eines Schlüsseltresors

  1. Folgen Sie den Schritten unter Schnellstart: Erstellen eines Schlüsseltresors über das Azure-Portal.

  2. Wenn Sie einen Schlüsseltresor für einen kundenseitig verwalteten Schlüssel erstellen, aktivieren Sie auf der Registerkarte Grundlagen die Einstellung Bereinigungsschutz. Diese Einstellung hilft bei der Verhinderung von Datenverlusten aufgrund versehentlich gelöschter Schlüssel oder Schlüsseltresore.

    Screenshot: Optionen zum Erstellen eines Schlüsseltresors im Azure-Portal

Aktivieren von vertrauenswürdigen Diensten für den Zugriff auf den Schlüsseltresor

Wenn der Schlüsseltresor durch eine Firewall oder ein virtuelles Netzwerk (privater Endpunkt) geschützt ist, aktivieren Sie die Netzwerkeinstellung, um den Zugriff durch vertrauenswürdige Azure-Dienste zuzulassen. Weitere Informationen finden Sie unter Konfigurieren von Azure Key Vault-Netzwerkeinstellungen.

Aktivieren von verwalteten Identitäten für den Zugriff auf den Schlüsseltresor

Es gibt zwei Möglichkeiten, verwaltete Identitäten für den Zugriff auf Ihren Schlüsseltresor zu aktivieren.

Die erste Option besteht darin, die Richtlinie für den Zugriff auf den Schlüsseltresor zu konfigurieren und die Schlüsselberechtigungen für den Zugriff mit einer benutzerseitig zugewiesenen verwalteten Identität festzulegen:

  1. Navigieren Sie zu Ihrem Schlüsseltresor.
  2. Klicken Sie auf Einstellungen>Zugriffsrichtlinien > +Zugriffsrichtlinie hinzufügen.
  3. Wählen Sie Schlüsselberechtigungen und dann Abrufen, Schlüssel entpacken und Schlüssel packen aus.
  4. Wählen Sie unter Prinzipal auswählen den Ressourcennamen der benutzerseitig zugewiesenen verwalteten Identität aus.
  5. Klicken Sie auf Hinzufügen und dann auf Speichern.

Screenshot: Optionen zum Erstellen einer Schlüsseltresor-Zugriffsrichtlinie

Die andere Option besteht darin, die Rolle Key Vault Crypto Service Encryption User der benutzerseitig zugewiesenen verwalteten Identität im Schlüsseltresorbereich zuzuweisen. Ausführliche Informationen finden Sie unter Zuweisen von Azure-Rollen über das Azure-Portal.

Erstellen eines Schlüssels

Erstellen Sie einen Schlüssel im Schlüsseltresor und verwenden Sie ihn, um die Registrierung zu verschlüsseln. Führen Sie die folgenden Schritte aus, wenn Sie eine bestimmte Schlüsselversion als kundenseitig verwalteten Schlüssel auswählen möchten. Möglicherweise müssen Sie vor dem Erstellen der Registrierung auch einen Schlüssel erstellen, wenn der Zugriff auf den Schlüsseltresor auf einen privaten Endpunkt oder ausgewählte Netzwerke beschränkt ist.

  1. Navigieren Sie zu Ihrem Schlüsseltresor.
  2. Wählen Sie Einstellungen>Schlüssel aus.
  3. Wählen Sie +Generieren/Importieren aus, und geben Sie einen eindeutigen Namen für den Schlüssel ein.
  4. Akzeptieren Sie die verbleibenden Standardwerte, und wählen Sie dann Erstellen aus.
  5. Wählen Sie nach der Erstellung den Schlüssel aus, und wählen Sie dann die aktuelle Version aus. Kopieren Sie den Schlüsselbezeichner für die Schlüsselversion.

Erstellen einer Containerregistrierung

  1. Klicken Sie auf Ressource erstellen>Container>Container Registry.
  2. Wählen Sie auf der Registerkarte Grundlagen eine Ressourcengruppe aus, oder erstellen Sie eine, und geben Sie dann einen Registrierungsnamen ein. Wählen Sie unter SKU die Option Premium aus.
  3. Wählen Sie auf der Registerkarte Verschlüsselung unter Kundenseitig verwalteter Schlüssel die Option Aktiviert aus.
  4. Wählen Sie unter Identität die verwaltete Identität aus, die Sie erstellt haben.
  5. Wählen Sie unter Verschlüsselung eine der folgenden Optionen aus:
    • Wählen Sie Aus Schlüsseltresor auswählen und dann einen vorhandenen Schlüsseltresor und Schlüssel aus, oder wählen Sie Neu erstellen aus. Der ausgewählte Schlüssel ist nicht versioniert und ermöglicht automatische Schlüsselrotation.
    • Wählen Sie Schlüssel-URI eingeben aus, und geben Sie den Bezeichner eines vorhandenen Schlüssels an. Sie können den URI eines versionierten Schlüssels (der Schlüssel muss manuell rotiert werden) oder eines Schlüssels ohne Versionsangabe (aktiviert die automatische Schlüsselrotation) angeben. Schritte zum Erstellen eines Schlüssels finden Sie im vorherigen Abschnitt.
  6. Klicken Sie auf Überprüfen + erstellen.
  7. Wählen Sie Erstellen, um die Registrierungsinstanz bereitzustellen.

Screenshot: Optionen zum Erstellen einer verschlüsselten Registrierung im Azure-Portal

Anzeigen des Verschlüsselungsstatus

Navigieren Sie zu Ihrer Registrierung, um den Verschlüsselungsstatus Ihrer Registrierung im Portal anzuzeigen. Wählen Sie unter Einstellungen die Option Verschlüsselung aus.

Aktivieren eines kundenseitig verwalteten Schlüssels mithilfe einer Azure Resource Manager-Vorlage

Sie können eine Resource Manager-Vorlage verwenden, um eine Containerregistrierung zu erstellen und die Verschlüsselung mit einem kundenseitig verwalteten Schlüssel zu aktivieren:

  1. Kopieren Sie den folgenden Inhalt einer Resource Manager-Vorlage in eine neue Datei, und speichern Sie diese unter 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ühren Sie zum Erstellen der folgenden Ressourcen die Schritte aus den vorherigen Abschnitten durch:

    • Schlüsseltresor, identifiziert anhand des Namens.
    • Schlüsseltresorschlüssel, identifiziert anhand der Schlüssel-ID.
  3. Führen Sie den Befehl az deployment group create aus, um die Registrierung mithilfe der vorherigen Vorlagendatei zu erstellen. Geben Sie, wo angegeben, einen neuen Registrierungsnamen und den Namen der benutzerseitig zugewiesenen verwalteten Identität sowie den Namen des Schlüsseltresors und die Schlüssel-ID an, die Sie erstellt haben.

    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. Führen Sie den Befehl az acr encryption show aus, um den Status der Registrierungsverschlüsselung anzuzeigen:

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

Nächste Schritte

Im nächsten Artikel wird Schritt für Schritt erläutert, wie Sie kundenseitig verwaltete Schlüssel rotieren, Schlüsselversionen aktualisieren und einen kundenseitig verwalteten Schlüssel widerrufen.