Condividi tramite


Abilitare una chiave gestita dal cliente

Questo articolo fa parte di due serie di esercitazioni in quattro parti. La parte 1 offre una panoramica delle chiavi gestite dal cliente, delle relative funzionalità e considerazioni prima di abilitare una nel Registro di sistema. Questo articolo illustra i passaggi per abilitare una chiave gestita dal cliente usando l'interfaccia della riga di comando di Azure, la portale di Azure o un modello di Azure Resource Manager.

Prerequisiti

Abilitare una chiave gestita dal cliente usando l'interfaccia della riga di comando di Azure

Creare un gruppo di risorse

Eseguire il comando az group create per creare un gruppo di risorse che conterrà l'insieme di credenziali delle chiavi, il registro contenitori e altre risorse necessarie:

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

Creare un'identità gestita assegnata dall'utente

Configurare un'identità gestita assegnata dall'utente per il Registro di sistema in modo che sia possibile accedere all'insieme di credenziali delle chiavi:

  1. Eseguire il comando az identity create per creare l'identità gestita:

    az identity create \
      --resource-group <resource-group-name> \
      --name <managed-identity-name>
    
  2. Nell'output del comando prendere nota dei valori e principalId per configurare l'accesso al Registro di sistema con l'insieme di credenziali delle id chiavi:

    {
      "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. Per praticità, archiviare i id valori e principalId nelle variabili di ambiente:

    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)
    

Creare un insieme di credenziali delle chiavi

  1. Eseguire il comando az keyvault create per creare un insieme di credenziali delle chiavi in cui è possibile archiviare una chiave gestita dal cliente per la crittografia del Registro di sistema.

  2. Per impostazione predefinita, il nuovo insieme di credenziali delle chiavi abilita automaticamente l'impostazione di eliminazione temporanea . Per impedire la perdita di dati dall'eliminazione accidentale delle chiavi o degli insiemi di credenziali delle chiavi, è consigliabile abilitare l'impostazione di protezione dell'eliminazione :

    az keyvault create --name <key-vault-name> \
      --resource-group <resource-group-name> \
      --enable-purge-protection
    
  3. Per praticità, prendere nota dell'ID risorsa dell'insieme di credenziali delle chiavi e archiviare il valore nelle variabili di ambiente:

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

Abilitare i servizi attendibili per accedere all'insieme di credenziali delle chiavi

Se l'insieme di credenziali delle chiavi è in protezione con un firewall o una rete virtuale (endpoint privato), è necessario abilitare le impostazioni di rete per consentire l'accesso dai servizi di Azure attendibili. Per altre informazioni, vedere Configurare le impostazioni di rete di Azure Key Vault.

Abilitare le identità gestite per accedere all'insieme di credenziali delle chiavi

Esistono due modi per abilitare le identità gestite per accedere all'insieme di credenziali delle chiavi.

La prima opzione consiste nel configurare i criteri di accesso per l'insieme di credenziali delle chiavi e impostare le autorizzazioni di chiave per l'accesso con un'identità gestita assegnata dall'utente:

  1. Eseguire il comando az keyvault set policy . Passare il valore della variabile di ambiente creata e archiviata in precedenza di principalID.

  2. Impostare le autorizzazioni chiave su get, unwrapKeye wrapKey:

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

La seconda opzione consiste nell'usare il controllo degli accessi in base al ruolo di Azure per assegnare le autorizzazioni all'identità gestita assegnata dall'utente e accedere all'insieme di credenziali delle chiavi. Eseguire il comando az role assignment create e assegnare il Key Vault Crypto Service Encryption User ruolo a un'identità gestita assegnata dall'utente:

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

Creare una chiave e ottenere l'ID chiave

  1. Eseguire il comando az keyvault key create per creare una chiave nell'insieme di credenziali delle chiavi:

    az keyvault key create \
      --name <key-name> \
      --vault-name <key-vault-name>
    
  2. Nell'output del comando prendere nota dell'ID chiave (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. Per praticità, archiviare il formato scelto per l'ID chiave nella $keyID variabile di ambiente. È possibile usare un ID chiave con o senza una versione.

Rotazione delle chiavi

È possibile scegliere rotazione manuale o automatica delle chiavi.

La crittografia di un Registro di sistema con una chiave gestita dal cliente con una versione chiave consentirà solo la rotazione manuale delle chiavi in Registro Azure Container. In questo esempio viene archiviata la proprietà della kid chiave:

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

La crittografia di un Registro di sistema con una chiave gestita dal cliente omettendo una versione della chiave consente la rotazione automatica delle chiavi per rilevare una nuova versione della chiave in Azure Key Vault. Questo esempio rimuove la versione dalla proprietà della kid chiave:

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

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

Creare un registro con una chiave gestita dal cliente

  1. Eseguire il comando az acr create per creare un Registro di sistema nel livello di servizio Premium e abilitare la chiave gestita dal cliente.

  2. Passare i valori id identità gestita () e ID chiave (idkid) archiviati nelle variabili di ambiente nei passaggi precedenti:

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

Visualizzare lo stato della crittografia

Eseguire il comando az acr encryption show per visualizzare lo stato della crittografia del Registro di sistema con una chiave gestita dal cliente:

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

A seconda della chiave usata per crittografare il Registro di sistema, l'output è simile a:

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

Abilitare una chiave gestita dal cliente usando il portale di Azure

Creare un'identità gestita assegnata dall'utente

Per creare un'identità gestita assegnata dall'utente per le risorse di Azure nel portale di Azure:

  1. Seguire la procedura per creare un'identità assegnata dall'utente.

  2. Salvare il nome dell'identità per usarlo nei passaggi successivi.

Screenshot delle opzioni per la creazione di un'identità assegnata dall'utente nella portale di Azure.

Creare un insieme di credenziali delle chiavi

  1. Seguire la procedura descritta in Avvio rapido: Creare un insieme di credenziali delle chiavi usando il portale di Azure.

  2. Quando si crea un insieme di credenziali delle chiavi per una chiave gestita dal cliente, nella scheda Nozioni di base abilitare l'impostazione Di eliminazione della protezione . Questa impostazione consente di impedire la perdita di dati dall'eliminazione accidentale di chiavi o insiemi di credenziali delle chiavi.

    Screenshot delle opzioni per la creazione di un insieme di credenziali delle chiavi nel portale di Azure.

Abilitare i servizi attendibili per accedere all'insieme di credenziali delle chiavi

Se l'insieme di credenziali delle chiavi è in protezione con un firewall o una rete virtuale (endpoint privato), abilitare l'impostazione di rete per consentire l'accesso dai servizi di Azure attendibili. Per altre informazioni, vedere Configurare le impostazioni di rete di Azure Key Vault.

Abilitare le identità gestite per accedere all'insieme di credenziali delle chiavi

Esistono due modi per abilitare le identità gestite per accedere all'insieme di credenziali delle chiavi.

La prima opzione consiste nel configurare i criteri di accesso per l'insieme di credenziali delle chiavi e impostare le autorizzazioni di chiave per l'accesso con un'identità gestita assegnata dall'utente:

  1. Passare all'insieme di credenziali delle chiavi.
  2. Selezionare Impostazioni Criteri>di accesso +Aggiungi criteri di accesso>.
  3. Selezionare Autorizzazioni chiave e quindi Get, Unwrap Key e Wrapping Key.
  4. In Seleziona entità selezionare il nome della risorsa dell'identità gestita assegnata dall'utente.
  5. Selezionare Aggiungi e quindi Salva.

Screenshot delle opzioni per la creazione di criteri di accesso all'insieme di credenziali delle chiavi.

L'altra opzione consiste nell'assegnare il ruolo di controllo degli Key Vault Crypto Service Encryption User accessi in base al ruolo all'identità gestita assegnata dall'utente nell'ambito dell'insieme di credenziali delle chiavi. Per la procedura dettagliata, vedere Assegnare ruoli di Azure usando il portale di Azure.

Creare una chiave

Creare una chiave nell'insieme di credenziali delle chiavi e usarla per crittografare il Registro di sistema. Seguire questa procedura se si vuole selezionare una versione chiave specifica come chiave gestita dal cliente. È anche necessario creare una chiave prima di creare il Registro di sistema se l'accesso all'insieme di credenziali delle chiavi è limitato a un endpoint privato o a reti selezionate.

  1. Passare all'insieme di credenziali delle chiavi.
  2. Selezionare Impostazioni>Chiavi.
  3. Selezionare +Genera/Importa e immettere un nome univoco per la chiave.
  4. Accettare i valori predefiniti rimanenti e quindi selezionare Crea.
  5. Dopo la creazione, selezionare la chiave e quindi selezionare la versione corrente. Copiare l'identificatore chiave per la versione della chiave.

Creare un registro contenitori

  1. Selezionare Crea una risorsa>Contenitori>Registro Container.
  2. Nella scheda Nozioni di base selezionare o creare un gruppo di risorse e quindi immettere un nome del Registro di sistema. In SKU selezionare Premium.
  3. Nella scheda Crittografia selezionare Abilitato per la chiave gestita dal cliente.
  4. Per Identità selezionare l'identità gestita creata.
  5. Per Crittografia scegliere una delle opzioni seguenti:
    • Scegliere Seleziona da Key Vault e quindi selezionare un insieme di credenziali delle chiavi esistente e una chiave oppure selezionare Crea nuovo. La chiave selezionata è unversioned e abilita la rotazione automatica delle chiavi.
    • Selezionare Invio URI chiave e specificare l'identificatore di una chiave esistente. È possibile specificare un URI chiave con versione (per una chiave che deve essere ruotata manualmente) o un URI chiave non modificato (che consente la rotazione automatica delle chiavi). Per la creazione di una chiave, vedere la sezione precedente.
  6. Selezionare Rivedi e crea.
  7. Selezionare Crea per distribuire l'istanza del registro.

Screenshot che mostra le opzioni per la creazione di un Registro di sistema crittografato nella portale di Azure.

Visualizzare lo stato della crittografia

Per visualizzare lo stato di crittografia del registro nel portale, passare al registro. In Impostazioni selezionare Crittografia.

Abilitare una chiave gestita dal cliente usando un modello di Resource Manager

È possibile usare un modello di Resource Manager per creare un registro contenitori e abilitare la crittografia con una chiave gestita dal cliente:

  1. Copiare il contenuto seguente di un modello di Resource Manager in un nuovo file e salvarlo come 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. Seguire i passaggi delle sezioni precedenti per creare le risorse seguenti:

    • Insieme di credenziali delle chiavi, identificato dal nome
    • Insieme di credenziali delle chiavi, identificato dall'ID chiave
  3. Eseguire il comando az deployment group create per creare il Registro di sistema usando il file modello precedente. Se indicato, specificare un nuovo nome del Registro di sistema e un nome di identità gestita assegnato dall'utente, insieme al nome dell'insieme di credenziali delle chiavi e all'ID chiave creati.

    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. Eseguire il comando az acr encryption show per visualizzare lo stato della crittografia del Registro di sistema:

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

Passaggi successivi

Passare all'articolo successivo per esaminare la rotazione delle chiavi gestite dal cliente, l'aggiornamento delle versioni delle chiavi e la revoca di una chiave gestita dal cliente.