Skapa Azure Managed Application som distribuerar lagringskontot krypterat med kundhanterad nyckel

Den här artikeln beskriver hur du skapar ett Azure-hanterat program som distribuerar ett lagringskonto krypterat med hjälp av en kundhanterad nyckel. Lagringskonto, Cosmos DB och Azure Database for Postgres stöder vilande datakryptering med hjälp av kundhanterade nycklar eller Microsoft-hanterade nycklar. Du kan använda din egen krypteringsnyckel för att skydda data i ditt lagringskonto. När du anger en kundhanterad nyckel används nyckeln för att skydda och kontrollera åtkomsten till nyckeln som krypterar dina data. Kundhanterade nycklar ger större flexibilitet för att hantera åtkomstkontroller.

Förutsättningar

Hanterade identiteter

För att konfigurera en kundhanterad nyckel för ett lagringskonto som distribueras av det hanterade programmet som en resurs i den hanterade resursgruppen krävs en användartilldelad hanterad identitet. Den här användartilldelade hanterade identiteten kan användas för att ge det hanterade programmet åtkomst till andra befintliga resurser. Om du vill lära dig hur du konfigurerar ditt hanterade program med en användartilldelad hanterad identitet går du till Azure Managed Application med hanterad identitet.

Ditt program kan beviljas två typer av identiteter:

  • En systemtilldelad hanterad identitet tilldelas till ditt program och tas bort om appen tas bort. En app kan bara ha en systemtilldelad hanterad identitet.
  • En användartilldelad hanterad identitet är en fristående Azure-resurs som kan tilldelas till din app. En app kan ha flera användartilldelade hanterade identiteter.

Om du vill distribuera ett lagringskonto i det hanterade programmets hanterade resursgrupp som krypteras med kundnycklar från ett befintligt nyckelvalv krävs mer konfiguration. Den hanterade identitet som konfigurerats med ditt hanterade program behöver den inbyggda rollbaserade åtkomstkontrollen i Azure hanterad identitetsoperator över den hanterade identitet som har åtkomst till nyckelvalvet. Mer information finns i rollen Hanterad identitetsoperator.

Skapa ett nyckelvalv med rensningsskydd

  1. Logga in på Azure-portalen.
  2. På Menyn i Azure-portalen eller på sidan Start väljer du Skapa en resurs.
  3. Skriv Key Vault i sökrutan.
  4. I resultatlistan väljer du Key Vault.
  5. I avsnittet Key Vault väljer du Skapa.
  6. I avsnittet Skapa nyckelvalv anger du följande information:
    • Prenumeration: Välj din prenumeration.
    • Resursgrupp: Välj Skapa ny och ange ett namn som demo-cmek-rg.
    • Namn: Ett unikt namn krävs, till exempel demo-keyvault-cmek.
    • Region: Välj en plats som USA, östra.
    • Prisnivå: Välj Standard i listrutan.
    • Rensningsskydd: Välj Aktivera rensningsskydd.
  7. Välj Nästa och gå till fliken Åtkomstprincip .
    • Åtkomstkonfiguration: Välj rollbaserad åtkomstkontroll i Azure.
    • Acceptera standardinställningarna för alla andra alternativ.
  8. Välj Granska + skapa.
  9. Bekräfta att inställningarna är korrekta och välj Skapa.

När distributionen har slutförts väljer du Gå till resurs. Anteckna följande egenskaper på fliken Översikt :

  • Valvnamn: I exemplet är valvnamnet demo-keyvault-cmek. Du använder det här namnet för andra steg.
  • Valv-URI: I exemplet är https://demo-keyvault-cmek.vault.azure.net/valvets URI .

Skapa en användartilldelad hanterad identitet

För att skapa en användartilldelad hanterad identitet behöver ditt konto rolltilldelningen hanterad identitetsdeltagare.

  1. I sökrutan anger du hanterade identiteter.
  2. Under Tjänster väljer du Hanterade identiteter.
  3. Välj Skapa och ange följande värden på fliken Grundläggande :
    • Prenumeration: Välj din prenumeration.
    • Resursgrupp: Välj resursgruppen demo-cmek-rg som du skapade i föregående steg.
    • Region: Välj en region som USA, östra.
    • Namn: Ange namnet på din användartilldelade hanterade identitet, till exempel demokeyvaultmi.
  4. Välj Granska + skapa.
  5. När verifieringen har godkänts väljer du Skapa.

Efter en lyckad distribution väljer du Gå till resurs.

Skapa rolltilldelningar

Du måste skapa två rolltilldelningar för ditt nyckelvalv. Mer information finns i Tilldela Azure-roller med hjälp av Azure-portalen.

Bevilja nyckelbehörighet för nyckelvalv till den hanterade identiteten

Skapa en rolltilldelning för nyckelvalvets hanterade identitet demokeyvaultmi för att omsluta och packa upp nycklar.

  1. Gå till key vault demo-cmek-keyvault.
  2. Välj Åtkomstkontroll (IAM) .
  3. Välj Lägg till>Lägg till rolltilldelning.
  4. Tilldela följande roll:
    • Roll: Key Vault Crypto Service Encryption User
    • Tilldela åtkomst till: Hanterad identitet
    • Medlem: demokeyvaultmi
  5. Välj Granska + tilldela för att visa dina inställningar.
  6. Välj Granska + tilldela för att skapa rolltilldelningen.

Skapa en rolltilldelning för ditt konto

Skapa en annan rolltilldelning så att ditt konto kan skapa en ny nyckel i nyckelvalvet.

  1. Tilldela följande roll:
    • Roll: Key Vault Crypto Officer
    • Tilldela åtkomst till: Användare, grupp eller tjänstens huvudnamn
    • Medlem: Ditt Microsoft Entra-konto
  2. Välj Granska + tilldela för att visa dina inställningar.
  3. Välj Granska + tilldela för att skapa rolltilldelningen.

Du kan verifiera nyckelvalvets rolltilldelningar i Rolltilldelningar för åtkomstkontroll (IAM).>

Skapa en nyckel

Du måste skapa en nyckel som nyckelvalvet använder för att kryptera ett lagringskonto.

  1. Gå till ditt nyckelvalv, demo-cmek-keyvault.
  2. Välj Nycklar.
  3. Välj Generera/Importera.
  4. På sidan Skapa en nyckel väljer du följande värden:
    • Alternativ: Generera
    • Namn: demo-cmek-key
  5. Acceptera standardinställningarna för de andra alternativen.
  6. Välj Skapa.

Anteckna nyckelnamnet. Du använder det när du distribuerar det hanterade programmet.

Skapa en användartilldelad hanterad identitet för det hanterade programmet

Skapa en användartilldelad hanterad identitet som ska användas som hanterad identitet för det hanterade programmet.

  1. I sökrutan anger du Hanterade identiteter.
  2. Under Tjänster väljer du Hanterade identiteter.
  3. Välj Skapa.
    • Prenumeration: Välj din prenumeration.
    • Resursgrupp: Välj resursgruppen demo-cmek-rg.
    • Region: Välj en region som USA, östra.
    • Namn: Ange namnet på din användartilldelade hanterade identitet, till exempel demomanagedappmi.
  4. Välj Granska + skapa.
  5. När verifieringen har godkänts väljer du Skapa.

Efter en lyckad distribution väljer du Gå till resurs.

Tilldela rollbehörighet till hanterad identitet

Tilldela rollen Hanterad identitetsoperator till den hanterade identiteten i omfånget för den användartilldelade hanterade identiteten med namnet demokeyvaultmi.

  1. Gå till den användartilldelade hanterade identiteten med namnet demokeyvaultmi.
  2. Välj Åtkomstkontroll (IAM) .
  3. Välj Lägg till>rolltilldelning för att öppna sidan Lägg till rolltilldelning.
  4. Tilldela följande roll.
    • Roll: Hanterad identitetsoperator
    • Tilldela åtkomst till: Hanterad identitet
    • Medlem: demomanagedappmi
  5. Välj Granska + tilldela för att visa dina inställningar.
  6. Välj Granska + tilldela för att skapa rolltilldelningen.

Du kan verifiera rolltilldelningen för demokeyvaultmi i Rolltilldelningar för åtkomstkontroll (IAM).>

Exempel på mall för hanterat program

Skapa ett hanterat program som distribuerar ett lagringskonto i en hanterad resursgrupp och använd en befintlig nyckel för nyckelvalvet för att kryptera data i lagringskontot.

Gör följande för att publicera ett hanterat program i tjänstkatalogen:

  1. Skapa filen creatUIDefinition.json från exemplet i den här artikeln. Mallen definierar portalens användargränssnittselement när du distribuerar det hanterade programmet.
  2. Skapa en Azure Resource Manager-mall med namnet mainTemplate.json genom att konvertera Bicep-filen i den här artikeln till JSON. Mallen definierar de resurser som ska distribueras med det hanterade programmet.
  3. Skapa ett .zip-paket som innehåller de JSON-filer som krävs: createUiDefinition.json och mainTemplate.json.
  4. Publicera definitionen för det hanterade programmet så att den är tillgänglig i tjänstkatalogen. Mer information finns i Snabbstart: Skapa och publicera en Azure Managed Application-definition.

Skapa mallen createUiDefinition.json

Följande mall skapar en användartilldelad hanterad identitet för det hanterade programmet. I det här exemplet inaktiverar vi den systemtilldelade hanterade identiteten eftersom vi behöver att vår användartilldelade hanterade identitet konfigureras i förväg med behörigheterna hanterad identitetsoperatör över nyckelvalvets hanterade identitet.

  1. Skapa en ny fil i Visual Studio Code med namnet creatUIDefinition.json.
  2. Kopiera och klistra in följande kod i filen.
  3. Spara filen.
{
  "$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)]"
      }
    }
  }
}

Skapa mallen mainTemplate.json

Följande Bicep-fil är källkoden för mainTemplate.json. Mallen använder den användartilldelade hanterade identiteten som definierats i filen createUiDefinition.json .

  1. Skapa en ny fil i Visual Studio Code med namnet mainTemplate.bicep.
  2. Kopiera och klistra in följande kod i filen.
  3. Spara filen.
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}'
      }
    }
  }
}

Använd PowerShell eller Azure CLI för att skapa filen mainTemplate.json . Gå till katalogen där du sparade Bicep-filen och kör build kommandot .

bicep build mainTemplate.bicep

När Bicep-filen har konverterats till JSON ska filen mainTemplate.json matcha följande exempel. Du kan ha olika värden i metadata egenskaperna för version och 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)]"
          }
        }
      }
    }
  ]
}

Distribuera det hanterade programmet

När tjänstkatalogdefinitionen har skapats kan du distribuera det hanterade programmet. Mer information finns i Snabbstart: Distribuera ett tjänstkataloghanterat program.

Under distributionen använder du dina användartilldelade hanterade identiteter, nyckelvalvsnamn, nyckelvalvs-URL, nyckelvalvets nyckelnamn. Filen createUiDefinition.json skapar användargränssnittet.

I en portaldistribution lägger du till demomanagedappmifliken Program Inställningar.

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

På fliken Konfiguration aktiverar du den kundhanterade nyckeln och lägger till den användartilldelade hanterade identiteten för nyckelvalvet demokeyvaultmi. Du kan också ange nyckelvalvets URL och nyckelnamnet för nyckelvalvet som du skapade.

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

Verifiera distributionen

När distributionen är klar kan du verifiera det hanterade programmets identitetstilldelning. Den användartilldelade hanterade identiteten demomanagedappmi tilldelas till det hanterade programmet.

  1. Gå till resursgruppen där du distribuerade det hanterade programmet.
  2. Under Inställningar> Identitet väljer du Användartilldelad (förhandsversion).

Du kan också verifiera lagringskontot som det hanterade programmet distribuerade. Fliken Kryptering visar nyckeln demo-cmek-key och resurs-ID:t för den användartilldelade hanterade identiteten.

  1. Gå till den hanterade resursgrupp där det hanterade programmets lagringskonto distribueras.
  2. Under Säkerhet + nätverk väljer du Kryptering.

Nästa steg