Share via


Creare un'applicazione gestita di Azure che distribuisce l'account di archiviazione crittografato con la chiave gestita dal cliente

Questo articolo descrive come creare un'applicazione gestita di Azure che distribuisce un account di archiviazione crittografato usando una chiave gestita dal cliente. Archiviazione account, Cosmos DB e Database di Azure per Postgres supportano la crittografia dei dati inattivi usando chiavi gestite dal cliente o chiavi gestite da Microsoft. È possibile usare la propria chiave di crittografia per proteggere i dati nell'account di archiviazione. Quando si specifica una chiave gestita dal cliente, tale chiave viene usata per proteggere e controllare l'accesso alla chiave che crittografa i dati. Le chiavi gestite dal cliente offrono maggiore flessibilità per gestire i controlli di accesso.

Prerequisiti

Identità gestite

La configurazione di una chiave gestita dal cliente per un account di archiviazione distribuito dall'applicazione gestita come risorsa all'interno del gruppo di risorse gestite richiede un'identità gestita assegnata dall'utente. Questa identità gestita assegnata dall'utente può essere usata per concedere all'applicazione gestita l'accesso ad altre risorse esistenti. Per informazioni su come configurare l'applicazione gestita con un'identità gestita assegnata dall'utente, passare ad Applicazione gestita di Azure con identità gestita.

All'applicazione possono essere concessi due tipi di identità:

  • Un'identità gestita assegnata dal sistema viene assegnata all'applicazione e viene eliminata se l'app viene eliminata. Un'app può avere solo un'identità gestita assegnata dal sistema.
  • Un'identità gestita assegnata dall'utente è una risorsa di Azure autonoma che può essere assegnata all'app. Un'app può avere più identità gestite assegnate dall'utente.

Per distribuire un account di archiviazione nel gruppo di risorse gestite dell'applicazione gestita crittografato con le chiavi del cliente dall'insieme di credenziali delle chiavi esistente, è necessaria una maggiore configurazione. L'identità gestita configurata con l'applicazione gestita richiede il controllo di identità gestito in base al ruolo di Azure predefinito sull'identità gestita che ha accesso all'insieme di credenziali delle chiavi. Per altri dettagli, vedere Ruolo Operatore identità gestita.

Creare un insieme di credenziali delle chiavi con protezione ripulita

  1. Accedi al portale di Azure.
  2. Dal menu portale di Azure o dalla home page selezionare Crea una risorsa.
  3. Nella casella di ricerca immettere Key Vault.
  4. Nell'elenco dei risultati scegliere Key Vault.
  5. Nella sezione Key Vault selezionare Crea.
  6. Nella sezione Crea insieme di credenziali delle chiavi specificare le informazioni seguenti:
    • Sottoscrizione: selezionare la propria sottoscrizione.
    • Gruppo di risorse: selezionare Crea nuovo e immettere un nome come demo-cmek-rg.
    • Nome: è necessario un nome univoco, ad esempio demo-keyvault-cmek.
    • Area: selezionare una località come Stati Uniti orientali.
    • Piano tariffario: selezionare Standard nell'elenco a discesa.
    • Ripulitura protezione: selezionare Abilita protezione ripulitura.
  7. Selezionare Avanti e passare alla scheda Criteri di accesso.
    • Configurazione dell'accesso: selezionare Controllo degli accessi in base al ruolo di Azure.
    • Accettare le impostazioni predefinite per tutte le altre opzioni.
  8. Selezionare Rivedi e crea.
  9. Verificare che le impostazioni siano corrette e selezionare Crea.

Al termine della distribuzione, selezionare Vai alla risorsa. Nella scheda Panoramica prendere nota delle proprietà seguenti:

  • Nome insieme di credenziali: nell'esempio il nome dell'insieme di credenziali è demo-keyvault-cmek. Questo nome viene usato per altri passaggi.
  • URI dell'insieme di credenziali: nell'esempio l'URI dell'insieme di credenziali è https://demo-keyvault-cmek.vault.azure.net/.

Creare un'identità gestita assegnata dall'utente

Per creare un'identità gestita assegnata dall'utente, l'account deve avere l'assegnazione di ruolo Collaboratore identità gestita.

  1. Nella casella di ricerca immettere identità gestite.
  2. In Servizi selezionare Identità gestite.
  3. Selezionare Crea e immettere i valori seguenti nella scheda Informazioni di base:
    • Sottoscrizione: selezionare la propria sottoscrizione.
    • Gruppo di risorse: selezionare il gruppo di risorse demo-cmek-rg creato nei passaggi precedenti.
    • Area: selezionare un'area come Stati Uniti orientali.
    • Nome: immettere il nome per l'identità gestita assegnata dall'utente, ad esempio demokeyvaultmi.
  4. Selezionare Rivedi e crea.
  5. Dopo la visualizzazione convalida superata , selezionare Crea.

Dopo aver completato la distribuzione, selezionare Vai alla risorsa.

Creare assegnazioni di ruolo

È necessario creare due assegnazioni di ruolo per l'insieme di credenziali delle chiavi. Per informazioni dettagliate, vedere Assegnare ruoli di Azure usando il portale di Azure.

Concedere l'autorizzazione della chiave per l'insieme di credenziali delle chiavi all'identità gestita

Creare un'assegnazione di ruolo per l'identità gestita dell'insieme di credenziali delle chiavi demokeyvaultmi per eseguire il wrapping e annullare il wrapping delle chiavi.

  1. Passare all'insieme di credenziali delle chiavi demo-cmek-keyvault.
  2. Seleziona Controllo di accesso (IAM).
  3. Seleziona Aggiungi>Aggiungi assegnazione ruolo.
  4. Assegnare il ruolo seguente:
    • Ruolo: utente di crittografia del servizio di crittografia dell'insieme di credenziali delle chiavi
    • Assegnare l'accesso a: Identità gestita
    • Membro: demokeyvaultmi
  5. Selezionare Rivedi e assegna per visualizzare le impostazioni.
  6. Selezionare Rivedi e assegna per creare l'assegnazione di ruolo.

Creare un'assegnazione di ruolo per l'account

Creare un'altra assegnazione di ruolo in modo che l'account possa creare una nuova chiave nell'insieme di credenziali delle chiavi.

  1. Assegnare il ruolo seguente:
    • Ruolo: Key Vault Crypto Officer
    • Assegnare l'accesso a: utente, gruppo o entità servizio
    • Membro: l'account Microsoft Entra
  2. Selezionare Rivedi e assegna per visualizzare le impostazioni.
  3. Selezionare Rivedi e assegna per creare l'assegnazione di ruolo.

È possibile verificare le assegnazioni di ruolo dell'insieme di credenziali delle chiavi nelle assegnazioni di ruolo di Controllo di accesso (IAM).>

Creazione di una chiave

È necessario creare una chiave usata dall'insieme di credenziali delle chiavi per crittografare un account di archiviazione.

  1. Passare all'insieme di credenziali delle chiavi, demo-cmek-keyvault.
  2. Selezionare Chiavi.
  3. Seleziona Genera/Importa.
  4. Nella pagina Crea una chiave selezionare i valori seguenti:
    • Opzioni: Genera
    • Nome: demo-cmek-key
  5. Accettare le impostazioni predefinite per le altre opzioni.
  6. Seleziona Crea.

Prendere nota del nome della chiave. Viene usato quando si distribuisce l'applicazione gestita.

Creare un'identità gestita assegnata dall'utente per l'applicazione gestita

Creare un'identità gestita assegnata dall'utente da usare come identità gestita per l'applicazione gestita.

  1. Nella casella di ricerca immettere Identità gestite.
  2. In Servizi selezionare Identità gestite.
  3. Seleziona Crea.
    • Sottoscrizione: selezionare la propria sottoscrizione.
    • Gruppo di risorse: selezionare il gruppo di risorse demo-cmek-rg.
    • Area: selezionare un'area come Stati Uniti orientali.
    • Nome: immettere il nome per l'identità gestita assegnata dall'utente, ad esempio demomanagedappmi.
  4. Selezionare Rivedi e crea.
  5. Dopo la visualizzazione convalida superata , selezionare Crea.

Dopo aver completato la distribuzione, selezionare Vai alla risorsa.

Assegnare l'autorizzazione del ruolo all'identità gestita

Assegnare il ruolo Operatore identità gestita all'identità gestita nell'ambito dell'identità gestita assegnata dall'utente denominata demokeyvaultmi.

  1. Passare all'identità gestita assegnata dall'utente denominata demokeyvaultmi.
  2. Seleziona Controllo di accesso (IAM).
  3. Selezionare Aggiungi>Aggiungi assegnazione di ruolo per aprire la pagina Aggiungi assegnazione di ruolo.
  4. Assegnare il ruolo seguente.
    • Ruolo: Operatore identità gestita
    • Assegnare l'accesso a: Identità gestita
    • Membro: demomanagedappmi
  5. Selezionare Rivedi e assegna per visualizzare le impostazioni.
  6. Selezionare Rivedi e assegna per creare l'assegnazione di ruolo.

È possibile verificare l'assegnazione di ruolo per demokeyvaultmi in Assegnazioni di ruolo (IAM)>Controllo di accesso.

Modello di applicazione gestita di esempio

Creare un'applicazione gestita che distribuisce un account di archiviazione in un gruppo di risorse gestite e usare una chiave dell'insieme di credenziali delle chiavi preesistente per crittografare i dati nell'account di archiviazione.

Per pubblicare un'applicazione gestita nel catalogo di servizi, eseguire le attività seguenti:

  1. Creare il file creatUIDefinition.json dall'esempio in questo articolo. Il modello definisce gli elementi dell'interfaccia utente del portale durante la distribuzione dell'applicazione gestita.
  2. Creare un modello di Azure Resource Manager denominato mainTemplate.json convertendo il file Bicep in questo articolo in JSON. Il modello definisce le risorse da distribuire con l'applicazione gestita.
  3. Creare un pacchetto zip contenente i file JSON necessari: createUiDefinition.json e mainTemplate.json.
  4. Pubblicare la definizione dell'applicazione gestita in modo che sia disponibile nel catalogo dei servizi. Per altre informazioni, vedere Avvio rapido: Creare e pubblicare una definizione di applicazione gestita di Azure.

Creare un modello createUiDefinition.json

Il modello seguente crea un'identità gestita assegnata dall'utente per l'applicazione gestita. In questo esempio si disabilita l'identità gestita assegnata dal sistema perché è necessaria la configurazione anticipata dell'identità gestita assegnata dall'utente con le autorizzazioni dell'operatore identità gestita sull'identità gestita dell'insieme di credenziali delle chiavi.

  1. Creare un nuovo file in Visual Studio Code denominato creatUIDefinition.json.
  2. Copiare e incollare il codice seguente nel file.
  3. Salva il file.
{
  "$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)]"
      }
    }
  }
}

Creare il modello mainTemplate.json

Il file Bicep seguente è il codice sorgente per mainTemplate.json. Il modello usa l'identità gestita assegnata dall'utente definita nel file createUiDefinition.json .

  1. Creare un nuovo file in Visual Studio Code denominato mainTemplate.bicep.
  2. Copiare e incollare il codice seguente nel file.
  3. Salva il file.
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}'
      }
    }
  }
}

Usare PowerShell o l'interfaccia della riga di comando di Azure per compilare il file mainTemplate.json . Passare alla directory in cui è stato salvato il file Bicep ed eseguire il build comando .

bicep build mainTemplate.bicep

Dopo la conversione del file Bicep in JSON, il file mainTemplate.json deve corrispondere all'esempio seguente. È possibile che siano presenti valori diversi nelle metadata proprietà per version e 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)]"
          }
        }
      }
    }
  ]
}

Distribuire l'applicazione gestita

Dopo aver creato la definizione del catalogo dei servizi, è possibile distribuire l'applicazione gestita. Per altre informazioni, vedere Avvio rapido: Distribuire un'applicazione gestita del catalogo di servizi.

Durante la distribuzione si usano le identità gestite assegnate dall'utente, il nome dell'insieme di credenziali delle chiavi, l'URL dell'insieme di credenziali delle chiavi, il nome della chiave dell'insieme di credenziali delle chiavi. Il file createUiDefinition.json crea l'interfaccia use.

Ad esempio, in una distribuzione del portale, nella scheda Application Impostazioni aggiungere demomanagedappmi.

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

Nella scheda Configurazione si abilita la chiave gestita dal cliente e si aggiunge l'identità gestita assegnata dall'utente per l'insieme di credenziali delle chiavi demokeyvaultmi. È anche possibile specificare l'URL dell'insieme di credenziali delle chiavi e il nome della chiave dell'insieme di credenziali delle chiavi creato.

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

Verificare la distribuzione

Al termine della distribuzione, è possibile verificare l'assegnazione di identità dell'applicazione gestita. L'identità gestita assegnata dall'utente demomanagedappmi viene assegnata all'applicazione gestita.

  1. Passare al gruppo di risorse in cui è stata distribuita l'applicazione gestita.
  2. In Impostazioni> Identity selezionare Assegnata dall'utente (anteprima).

È anche possibile verificare l'account di archiviazione distribuito dall'applicazione gestita. La scheda Crittografia mostra la chiave demo-cmek-key e l'ID risorsa per l'identità gestita assegnata dall'utente.

  1. Passare al gruppo di risorse gestite in cui viene distribuito l'account di archiviazione dell'applicazione gestita.
  2. In Sicurezza e rete selezionare Crittografia.

Passaggi successivi