Condividi tramite


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 per mezzo di una chiave gestita dal cliente. L'account di archiviazione, Cosmos DB e Il 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, andare a 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 in caso di eliminazione dell'app. A un'app può essere associata una sola 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 degli accessi in base al ruolo di Azure predefinito Operatore identità gestitarispetto all'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 dalle rimozioni

  1. Accedere al portale di Azure.
  2. Nel menu del portale di Azure o dalla pagina Home 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 pagina Crea insieme di credenziali delle chiavi specificare le informazioni seguenti:
    • Sottoscrizione: selezionare la propria sottoscrizione.
    • Gruppo di risorse: selezionare Crea nuovo, immettere un nome tipo emo-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.
    • Protezione dalle rimozioni: selezionare Abilita protezione dalle rimozioni.
  7. Selezionare Avanti e andare 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.

Dopo aver completato la 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 verrà usato per altri passaggi.
  • URI dell'insieme di credenziali: in questo esempio è https://demo-keyvault-cmek.vault.azure.net/.

Creare un'identità gestita assegnata dall'utente

Per creare un'identità gestita assegnata dall'utente, all'account deve essere assegnato il ruolo Collaboratore di identità gestite.

  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, ad esempio Stati Uniti occidentali.
    • Nome: immettere il nome per l'identità gestita assegnata dall'utente, ad esempio demokeyvaultmi.
  4. Selezionare Rivedi e crea.
  5. Dopo la visualizzazione di 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 la procedura dettagliata, 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 ritorno a capo delle chiavi.

  1. Andare 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 di Key Vault
    • Assegnare l'accesso a: identità gestita
    • Membro: demokeyvaultmi
  5. Selezionare Rivedi + assegna per visualizzare le impostazioni.
  6. Selezionare Rivedi + 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 Responsabile della crittografia di Key Vault
    • Assegnare l'accesso a: utente, gruppo o entità servizio
    • Membro: l'account Microsoft Entra
  2. Selezionare Rivedi + assegna per visualizzare le impostazioni.
  3. Selezionare Rivedi + assegna per creare l'assegnazione di ruolo.

È possibile verificare le assegnazioni di ruolo dell'insieme di credenziali delle chiavi in Controllo degli accessi (IAM)>Assegnazioni di ruoli.

Creazione di una chiave

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

  1. Andare 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, ad esempio Stati Uniti occidentali.
    • Nome: immettere il nome per l'identità gestita assegnata dall'utente, ad esempio demomanagedappmi.
  4. Selezionare Rivedi e crea.
  5. Dopo la visualizzazione di Convalida superata, selezionare Crea.

Dopo aver completato la distribuzione, selezionare Vai alla risorsa.

Assegnare l'autorizzazione del ruolo all'identità gestita

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

  1. Andare 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 per identità gestita
    • Assegnare l'accesso a: identità gestita
    • Membro: demomanagedappmi
  5. Selezionare Rivedi + assegna per visualizzare le impostazioni.
  6. Selezionare Rivedi + assegna per creare l'assegnazione di ruolo.

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

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, seguire questa procedura:

  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 di applicazione gestita in modo che sia disponibile nel catalogo di servizi. Per altre informazioni, vedere Avvio rapido: creare e pubblicare una definizione di applicazione gestita di Azure.

Creare il 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 Operatore identità gestita rispetto all'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 seguente codice nel file.
  3. Salvare 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)]"
      }
    }
  }
}

Create template mainTemplate.json

Il file Bicep seguente è il codice sorgente per il 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 seguente codice nel file.
  3. Salvare 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. Andare alla directory in cui è stato salvato il file Bicep ed eseguire il comando build.

bicep build mainTemplate.bicep

Dopo la conversione del file Bicep in JSON, il file mainTemplate.json corrisponderà all'esempio seguente. È possibile che siano presenti valori diversi nelle proprietà metadata 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 genera l'interfaccia d'uso.

Ad esempio, in una distribuzione del portale, nella scheda Impostazioni applicazione aggiungere il 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. Andare al gruppo di risorse in cui è stata distribuita l'applicazione gestita.
  2. In Impostazioni>Identità 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. Andare al gruppo di risorse gestite in cui viene distribuito l'account di archiviazione dell'applicazione gestita.
  2. In Sicurezza + networking selezionare Crittografia.

Passaggi successivi