Erstellen einer verwalteten Azure-Anwendung, die ein mit einem kundenseitig verwalteten Schlüssel verschlüsseltes Speicherkonto bereitstellt

In diesem Artikel wird beschrieben, wie Sie eine verwaltete Azure-Anwendung erstellen, die ein mit einem kundenseitig verwalteten Schlüssel verschlüsseltes Speicherkonto bereitstellt. Speicherkonto, Cosmos DB und Azure Database for Postgres unterstützen die Verschlüsselung ruhender Daten mithilfe von kundenseitig oder von Microsoft verwalteten Schlüsseln. Sie können Ihren eigenen Verschlüsselungsschlüssel verwenden, um die Daten Ihres Speicherkontos zu schützen. Wenn Sie einen vom Kunden verwalteten Schlüssel angeben, wird dieser zum Schützen und Steuern des Zugriffs auf den Schlüssel verwendet, mit dem Ihre Daten verschlüsselt werden. Vom Kunden verwaltete Schlüssel ermöglichen eine höhere Flexibilität bei der Verwaltung von Zugriffssteuerungen.

Voraussetzungen

Verwaltete Identitäten

Das Konfigurieren eines kundenseitig verwalteten Schlüssels für ein Speicherkonto, das von der verwalteten Anwendung als Ressource innerhalb der verwalteten Ressourcengruppe bereitgestellt wird, erfordert eine benutzerseitig zugewiesene verwaltete Identität. Diese benutzerseitig zugewiesene verwaltete Identität kann verwendet werden, um der verwalteten Anwendung Zugriff auf andere vorhandene Ressourcen zu gewähren. Informationen zum Konfigurieren Ihrer verwalteten Anwendung mit einer benutzerseitig zugewiesenen verwalteten Identität finden Sie unter Verwaltete Azure-Anwendung mit verwalteter Identität.

Ihrer Anwendung können zwei Arten von Identitäten zugewiesen werden:

  • Eine systemseitig zugewiesene verwaltete Identität ist Ihrer Anwendung zugewiesen und wird gelöscht, wenn Ihre App gelöscht wird. Eine App kann nur über eine systemseitig zugewiesene verwaltete Identität verfügen.
  • Eine benutzerseitig zugewiesene verwaltete Identität ist eine eigenständige Azure-Ressource, die Ihrer App zugewiesen werden kann. Eine App kann über mehrere benutzerseitig zugewiesene verwaltete Identitäten verfügen.

Zum Bereitstellen eines Speicherkontos in der verwalteten Ressourcengruppe Ihrer verwalteten Anwendung, das mit Kundenschlüsseln aus dem vorhandenen Schlüsseltresor verschlüsselt ist, sind weitere Konfigurationsschritte erforderlich. Die mit Ihrer verwalteten Anwendung konfigurierte verwaltete Identität benötigt die integrierte rollenbasierte Zugriffssteuerungsrolle Operator für verwaltete Identität in Azure für die verwaltete Identität, die Zugriff auf den Schlüsseltresor hat. Weitere Detailinformationen finden Sie unter Rolle „Operator für verwaltete Identität“.

Erstellen eines Schlüsseltresors mit Löschschutz

  1. Melden Sie sich beim Azure-Portal an.
  2. Wählen Sie im Menü des Azure-Portals oder auf der Startseite die Option Ressource erstellen aus.
  3. Geben Sie Key Vault in das Suchfeld ein.
  4. Wählen Sie in der Ergebnisliste Key Vault aus.
  5. Wählen Sie im Abschnitt Key Vault die Option Erstellen aus.
  6. Geben Sie im Abschnitt „Schlüsseltresor erstellen“ folgende Informationen ein:
    • Abonnement: Wählen Sie Ihr Abonnement aus.
    • Ressourcengruppe: Wählen Sie Neu erstellen aus, und geben Sie einen Namen wie demo-cmek-rg ein.
    • Name: Ein eindeutiger Name ist erforderlich, z. B. demo-keyvault-cmek.
    • Region: Wählen Sie einen Standort wie „USA, Osten“ aus.
    • Tarif: Wählen Sie Standard in der Dropdownliste aus.
    • Löschschutz: Wählen Sie Löschschutz aktivieren aus.
  7. Wählen Sie Weiter aus, und wechseln Sie zur Registerkarte Zugriffsrichtlinie.
    • Zugriffskonfiguration: Wählen Sie Rollenbasierte Zugriffssteuerung in Azure aus.
    • Übernehmen Sie die Standardwerte für alle anderen Optionen.
  8. Klicken Sie auf Überprüfen + erstellen.
  9. Vergewissern Sie sich, dass die Einstellungen richtig sind, und wählen Sie Erstellen aus.

Wählen Sie nach der erfolgreichen Bereitstellung Zu Ressource wechseln aus. Notieren Sie sich die folgenden Eigenschaften von der Registerkarte Übersicht:

  • Tresorname: Im Beispiel lautet der Tresorname demo-keyvault-cmek. Sie verwenden diesen Namen noch für andere Schritte.
  • Tresor-URI: Im Beispiel lautet der Tresor-URI https://demo-keyvault-cmek.vault.azure.net/.

Erstellen einer benutzerseitig zugewiesenen verwalteten Identität

Ihrem Konto muss die Rolle „Mitwirkender für verwaltete Identität“ zugewiesen sein, damit eine benutzerseitig zugewiesene verwaltete Identität erstellt werden kann.

  1. Geben Sie im Suchfeld Verwaltete Identitäten ein.
  2. Wählen Sie unter „Dienste“ die Option Verwaltete Identitäten aus.
  3. Wählen Sie Erstellen aus, und geben Sie auf der Registerkarte Grundlagen die folgenden Werte ein:
    • Abonnement: Wählen Sie Ihr Abonnement aus.
    • Ressourcengruppe: Wählen Sie die Ressourcengruppe demo-cmek-rg aus, die Sie in den vorherigen Schritten erstellt haben.
    • Region: Wählen Sie eine Region aus, etwa „USA, Osten“.
    • Name: Geben Sie den Namen für die benutzerseitig zugewiesene verwaltete Identität ein, z. B. demokeyvaultmi.
  4. Klicken Sie auf Überprüfen + erstellen.
  5. Wenn Überprüfung erfolgreich angezeigt wird, wählen Sie Erstellen aus.

Wählen Sie nach einer erfolgreichen Bereitstellung Zu Ressource wechseln aus.

Erstellen von Rollenzuweisung

Sie müssen zwei Rollenzuweisungen für Ihren Schlüsseltresor erstellen. Ausführliche Informationen finden Sie unter Zuweisen von Azure-Rollen über das Azure-Portal.

Erteilen der Schlüsselberechtigung für den Schlüsseltresor an die verwaltete Identität

Erstellen Sie eine Rollenzuweisung für die verwaltete Identität demokeyvaultmi des Schlüsseltresors, um Schlüssel zu umschließen und zu entpacken.

  1. Wechseln Sie zu Ihrem Schlüsseltresor demo-cmek-keyvault.
  2. Wählen Sie die Option Zugriffssteuerung (IAM) aus.
  3. Wählen Sie Hinzufügen>Rollenzuweisung hinzufügen.
  4. Weisen Sie die folgende Rolle zu:
    • Rolle: Key Vault Crypto Service Encryption-Benutzer
    • Zugriff zuweisen zu: Verwaltete Identität
    • Mitglied: demokeyvaultmi
  5. Wählen Sie Überprüfen und zuweisen aus, um Ihre Einstellungen anzuzeigen.
  6. Wählen Sie Überprüfen + zuweisen aus, um die Rollenzuweisung zu erstellen.

Erstellen einer Rollenzuweisung für Ihr Konto

Erstellen Sie eine weitere Rollenzuweisung, damit Ihr Konto einen neuen Schlüssel in Ihrem Schlüsseltresor erstellen kann.

  1. Weisen Sie die folgende Rolle zu:
    • Rolle: Kryptografiebeauftragter für Schlüsseltresore
    • Zugriff zuweisen zu: Benutzer, Gruppe oder Dienstprinzipal
    • Member: Verwenden Ihres Microsoft Entra-Kontos
  2. Wählen Sie Überprüfen und zuweisen aus, um Ihre Einstellungen anzuzeigen.
  3. Wählen Sie Überprüfen + zuweisen aus, um die Rollenzuweisung zu erstellen.

Sie können die Rollenzuweisungen des Schlüsseltresors unter Zugriffssteuerung (IAM)>Rollenzuweisungen überprüfen.

Erstellen eines Schlüssels

Sie müssen einen Schlüssel erstellen, den Ihr Schlüsseltresor zum Verschlüsseln eines Speicherkontos verwendet.

  1. Wechseln Sie zu Ihrem Schlüsseltresor demo-cmek-keyvault.
  2. Wählen Sie Schlüssel aus.
  3. Wählen Sie die Option Generieren/Importieren aus.
  4. Wählen Sie auf der Seite Schlüssel erstellen die folgenden Werte aus:
    • Optionen: Generieren
    • Name: demo-cmek-key
  5. Übernehmen Sie die Standardwerte für alle anderen Optionen.
  6. Klicken Sie auf Erstellen.

Notieren Sie sich den Schlüsselnamen. Sie verwenden ihn, wenn Sie die verwaltete Anwendung bereitstellen.

Erstellen einer benutzerseitig zugewiesenen verwalteten Identität für die verwaltete Anwendung

Erstellen Sie eine benutzerseitig zugewiesene verwaltete Identität, die als verwaltete Identität für die verwaltete Anwendung verwendet werden soll.

  1. Geben Sie im Suchfeld Verwaltete Identitäten ein.
  2. Wählen Sie unter „Dienste“ die Option Verwaltete Identitäten aus.
  3. Klicken Sie auf Erstellen.
    • Abonnement: Wählen Sie Ihr Abonnement aus.
    • Ressourcengruppe: Wählen Sie die Ressourcengruppe demo-cmek-rg aus.
    • Region: Wählen Sie eine Region aus, etwa „USA, Osten“.
    • Name: Geben Sie den Namen für Ihre benutzerseitig zugewiesene verwaltete Identität ein, z. B. demomanagedappmi.
  4. Klicken Sie auf Überprüfen + erstellen.
  5. Wenn Überprüfung erfolgreich angezeigt wird, wählen Sie Erstellen aus.

Wählen Sie nach einer erfolgreichen Bereitstellung Zu Ressource wechseln aus.

Zuweisen der Rollenberechtigung zur verwalteten Identität

Weisen Sie der verwalteten Identität die Rolle Operator für verwaltete Identität im Bereich der vom Benutzer zugewiesenen verwalteten Identität namens demokeyvaultmi zu.

  1. Wechseln Sie zur benutzerseitig zugewiesenen verwalteten Identität namens demokeyvaultmi.
  2. Wählen Sie Zugriffssteuerung (IAM) aus.
  3. Wählen Sie Hinzufügen>Rollenzuweisung hinzufügen aus, um den Bereich „Rollenzuweisung hinzufügen“ zu öffnen.
  4. Weisen Sie die folgende Rolle zu.
    • Rolle: Operator für verwaltete Identität
    • Zugriff zuweisen zu: Verwaltete Identität
    • Mitglied: demomanagedappmi
  5. Wählen Sie Überprüfen und zuweisen aus, um Ihre Einstellungen anzuzeigen.
  6. Wählen Sie Überprüfen + zuweisen aus, um die Rollenzuweisung zu erstellen.

Sie können die Rollenzuweisung für demokeyvaultmi unter Zugriffssteuerung (IAM)>Rollenzuweisungen überprüfen.

Beispielvorlage für verwaltete Anwendungen

Erstellen Sie eine verwaltete Anwendung, die ein Speicherkonto in einer verwalteten Ressourcengruppe bereitstellt, und verwenden Sie den Schlüssel eines bereits vorhandenen Schlüsseltresors, um die Daten im Speicherkonto zu verschlüsseln.

Um eine verwaltete Anwendung im Dienstkatalog zu veröffentlichen, gehen Sie folgendermaßen vor:

  1. Erstellen Sie die Datei creatUIDefinition.json aus dem Beispiel in diesem Artikel. Die Vorlage definiert die Benutzeroberflächenelemente des Portals beim Bereitstellen der verwalteten Anwendung.
  2. Erstellen Sie eine Azure Resource Manager-Vorlage namens mainTemplate.json, indem Sie die Bicep-Datei in diesem Artikel in JSON konvertieren. Die Vorlage definiert die Ressourcen, die mit der verwalteten Anwendung bereitgestellt werden sollen.
  3. Erstellen Sie ein ZIP-Paket, das die erforderlichen JSON-Dateien enthält: createUiDefinition.json und mainTemplate.json.
  4. Veröffentlichen Sie die Definition der verwalteten Anwendung, damit sie in Ihrem Dienstkatalog verfügbar ist. Weitere Informationen finden Sie unter Schnellstart: Erstellen und Veröffentlichen einer Definition für eine verwaltete Azure-Anwendung.

Erstellen der Vorlage „createUiDefinition.json“

Die folgende Vorlage erstellt eine benutzerseitig zugewiesene verwaltete Identität für die verwaltete Anwendung. In diesem Beispiel deaktivieren wir die systemseitig zugewiesene verwaltete Identität, da die benutzerseitig zugewiesene verwaltete Identität im Voraus mit den Berechtigungen der Rolle Operator für verwaltete Identität für die verwaltete Identität des Schlüsseltresors konfiguriert sein muss.

  1. Erstellen Sie in Visual Studio Code eine neue Datei namens creatUIDefinition.json.
  2. Kopieren Sie den folgenden Code, und fügen Sie ihn in die Datei ein.
  3. Speichern Sie die Datei .
{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [],
    "steps": [
      {
        "name": "managedApplicationSetting",
        "label": "Application Settings",
        "subLabel": {
          "preValidation": "Configure your application settings and Managed Identity for the application",
          "postValidation": "Done"
        },
        "bladeTitle": "Application Settings - Config",
        "elements": [
          {
            "name": "appIdentity",
            "type": "Microsoft.ManagedIdentity.IdentitySelector",
            "label": "Managed Identity Configuration for the Application (Needs Managed Identity Operator permissions over KV Managed Identity).",
            "toolTip": {
              "systemAssignedIdentity": "Enable system assigned identity to grant the managed application access to additional existing resources.",
              "userAssignedIdentity": "Add user assigned identities to grant the managed application access to additional existing resources."
            },
            "defaultValue": {
              "systemAssignedIdentity": "Off"
            },
            "options": {
              "hideSystemAssignedIdentity": true,
              "hideUserAssignedIdentity": false,
              "readOnlySystemAssignedIdentity": true
            },
            "visible": true
          }
        ]
      },
      {
        "name": "configuration",
        "type": "Microsoft.Common.Section",
        "label": "Configuration",
        "elements": [
          {
            "name": "cmek",
            "type": "Microsoft.Common.Section",
            "label": "Customer Managed Encryption Key (CMEK)",
            "elements": [
              {
                "name": "cmekEnable",
                "type": "Microsoft.Common.CheckBox",
                "label": "Enable CMEK",
                "toolTip": "Enable to provide a CMEK",
                "constraints": {
                  "required": false
                }
              },
              {
                "name": "cmekKeyVaultUrl",
                "type": "Microsoft.Common.TextBox",
                "label": "Key Vault URL",
                "toolTip": "Specify the CMEK Key Vault URL",
                "defaultValue": "",
                "constraints": {
                  "required": "[steps('configuration').cmek.cmekEnable]",
                  "regex": ".*",
                  "validationMessage": "The value must not be empty."
                },
                "visible": "[steps('configuration').cmek.cmekEnable]"
              },
              {
                "name": "cmekKeyName",
                "type": "Microsoft.Common.TextBox",
                "label": "Key Name",
                "toolTip": "Specify the key name from your key vault.",
                "defaultValue": "",
                "constraints": {
                  "required": "[steps('configuration').cmek.cmekEnable]",
                  "regex": ".*",
                  "validationMessage": "The value must not be empty."
                },
                "visible": "[steps('configuration').cmek.cmekEnable]"
              },
              {
                "name": "cmekKeyIdentity",
                "type": "Microsoft.ManagedIdentity.IdentitySelector",
                "label": "Managed Identity Configuration for Key Vault Access",
                "toolTip": {
                  "systemAssignedIdentity": "Enable system assigned identity to grant the managed application access to additional existing resources.",
                  "userAssignedIdentity": "Add user assigned identities to grant the managed application access to additional existing resources."
                },
                "defaultValue": {
                  "systemAssignedIdentity": "Off"
                },
                "options": {
                  "hideSystemAssignedIdentity": true,
                  "hideUserAssignedIdentity": false,
                  "readOnlySystemAssignedIdentity": true
                },
                "visible": "[steps('configuration').cmek.cmekEnable]"
              }
            ],
            "visible": true
          }
        ]
      }
    ],
    "outputs": {
      "location": "[location()]",
      "managedIdentity": "[steps('managedApplicationSetting').appIdentity]",
      "cmekConfig": {
        "kvUrl": "[if(empty(steps('configuration').cmek.cmekKeyVaultUrl), '', steps('configuration').cmek.cmekKeyVaultUrl)]",
        "keyName": "[if(empty(steps('configuration').cmek.cmekKeyName), '', steps('configuration').cmek.cmekKeyName)]",
        "identityId": "[if(empty(steps('configuration').cmek.cmekKeyIdentity), '', steps('configuration').cmek.cmekKeyIdentity)]"
      }
    }
  }
}

Erstellen der Vorlage „mainTemplate.json“

Die folgende Bicep-Datei ist der Quellcode für Ihre Datei mainTemplate.json. Die Vorlage verwendet die benutzerseitig zugewiesene verwaltete Identität, die in der Datei createUiDefinition.json definiert ist.

  1. Erstellen Sie in Visual Studio Code eine neue Datei namens mainTemplate.bicep.
  2. Kopieren Sie den folgenden Code, und fügen Sie ihn in die Datei ein.
  3. Speichern Sie die Datei .
param cmekConfig object = {
  kvUrl: ''
  keyName: ''
  identityId: {}
}
@description('Specify the Azure region to place the application definition.')
param location string = resourceGroup().location
/////////////////////////////////
// Common Resources Configuration
/////////////////////////////////
var commonproperties = {
  name: 'cmekdemo'
  displayName: 'Common Resources'
  storage: {
    sku: 'Standard_LRS'
    kind: 'StorageV2'
    accessTier: 'Hot'
    minimumTlsVersion: 'TLS1_2'

  }
}
var identity = items(cmekConfig.identityId.userAssignedIdentities)[0].key

resource storage 'Microsoft.Storage/storageAccounts@2022-05-01' = {
  name: '${commonproperties.name}${uniqueString(resourceGroup().id)}'
  location: location
  sku: {
    name: commonproperties.storage.sku
  }
  kind: commonproperties.storage.kind
  identity: cmekConfig.identityId
  properties: {
    accessTier: commonproperties.storage.accessTier
    minimumTlsVersion: commonproperties.storage.minimumTlsVersion
    encryption: {
      identity: {
        userAssignedIdentity: identity
      }
      services: {
        blob: {
          enabled: true
        }
        table: {
          enabled: true
        }
        file: {
          enabled: true
        }
      }
      keySource: 'Microsoft.Keyvault'
      keyvaultproperties: {
        keyname: '${cmekConfig.keyName}'
        keyvaulturi: '${cmekConfig.kvUrl}'
      }
    }
  }
}

Verwenden Sie PowerShell oder die Azure CLI, um die Datei mainTemplate.json zu erstellen. Wechseln Sie zu dem Verzeichnis, in dem Sie Ihre Bicep-Datei gespeichert haben, und führen Sie den Befehl build aus.

bicep build mainTemplate.bicep

Nachdem die Bicep-Datei in JSON konvertiert wurde, sollte Ihre Datei mainTemplate.json dem folgenden Beispiel entsprechen. Möglicherweise haben Sie andere Werte in den metadata-Eigenschaften für version und templateHash.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.16.2.56959",
      "templateHash": "1234567891234567890"
    }
  },
  "parameters": {
    "cmekConfig": {
      "type": "object",
      "defaultValue": {
        "kvUrl": "",
        "keyName": "",
        "identityId": {}
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Specify the Azure region to place the application definition."
      }
    }
  },
  "variables": {
    "commonproperties": {
      "name": "cmekdemo",
      "displayName": "Common Resources",
      "storage": {
        "sku": "Standard_LRS",
        "kind": "StorageV2",
        "accessTier": "Hot",
        "minimumTlsVersion": "TLS1_2"
      }
    },
    "identity": "[items(parameters('cmekConfig').identityId.userAssignedIdentities)[0].key]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-05-01",
      "name": "[format('{0}{1}', variables('commonproperties').name, uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[variables('commonproperties').storage.sku]"
      },
      "kind": "[variables('commonproperties').storage.kind]",
      "identity": "[parameters('cmekConfig').identityId]",
      "properties": {
        "accessTier": "[variables('commonproperties').storage.accessTier]",
        "minimumTlsVersion": "[variables('commonproperties').storage.minimumTlsVersion]",
        "encryption": {
          "identity": {
            "userAssignedIdentity": "[variables('identity')]"
          },
          "services": {
            "blob": {
              "enabled": true
            },
            "table": {
              "enabled": true
            },
            "file": {
              "enabled": true
            }
          },
          "keySource": "Microsoft.Keyvault",
          "keyvaultproperties": {
            "keyname": "[format('{0}', parameters('cmekConfig').keyName)]",
            "keyvaulturi": "[format('{0}', parameters('cmekConfig').kvUrl)]"
          }
        }
      }
    }
  ]
}

Bereitstellen der verwalteten Anwendung

Nachdem die Dienstkatalogdefinition erstellt wurde, können Sie die verwaltete Anwendung bereitstellen. Weitere Informationen finden Sie unter Schnellstart: Bereitstellen einer verwalteten Dienstkataloganwendung.

Während der Bereitstellung verwenden Sie Ihre benutzerseitig zugewiesenen verwalteten Identitäten, den Schlüsseltresornamen, die Schlüsseltresor-URL sowie den Schlüsselnamen des Schlüsseltresors. Die Datei createUiDefinition.json erstellt die use-Schnittstelle.

Beispielsweise fügen Sie in einer Portalbereitstellung auf der Registerkarte Anwendungseinstellungen die demomanagedappmi hinzu.

Screenshot of the Application Settings tab to add a user-assigned managed identity.

Auf der Registerkarte Konfiguration aktivieren Sie den kundenseitig verwalteten Schlüssel und fügen die benutzerseitig zugewiesene verwaltete Identität für den Schlüsseltresor demokeyvaultmi hinzu. Außerdem geben Sie die URL des Schlüsseltresors und den Schlüsselnamen des Schlüsseltresors an, den Sie erstellt haben.

Screenshot of the Configuration to enable the customer-managed key, add key vault URL and key name, and add a user-assigned managed identity.

Überprüfen der Bereitstellung

Nach Abschluss der Bereitstellung können Sie die Identitätszuweisung der verwalteten Anwendung überprüfen. Die benutzerseitig zugewiesene verwaltete Identität demomanagedappmi wird der verwalteten Anwendung zugewiesen.

  1. Wechseln Sie zu der Ressourcengruppe, in der Sie die verwaltete Anwendung bereitgestellt haben.
  2. Wählen Sie unter Einstellungen>Identität die Option Benutzerseitig zugewiesen (Vorschau) aus.

Sie können auch das Speicherkonto überprüfen, das von der verwalteten Anwendung bereitgestellt wurde. Auf der Registerkarte Verschlüsselung werden der Schlüssel demo-cmek-key und die Ressourcen-ID für die benutzerseitig zugewiesene verwaltete Identität angezeigt.

  1. Wechseln Sie zu der verwalteten Ressourcengruppe, in der das Speicherkonto der verwalteten Anwendung bereitgestellt ist.
  2. Wählen Sie unter Sicherheit + Netzwerk die Option Verschlüsselung aus.

Nächste Schritte