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
- Ett Azure-konto med en aktiv prenumeration och behörigheter till Microsoft Entra-resurser som användare, grupper eller tjänstens huvudnamn. Om du inte har något konto skapar du ett kostnadsfritt konto innan du börjar.
- Visual Studio Code med det senaste Azure Resource Manager Tools-tillägget. För Bicep-filer installerar du Bicep-tillägget för Visual Studio Code.
- Installera den senaste versionen av Azure PowerShell eller Azure CLI.
- Var bekant med hur du skapar och distribuerar en tjänstkatalogdefinition.
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
- Logga in på Azure-portalen.
- På Menyn i Azure-portalen eller på sidan Start väljer du Skapa en resurs.
- Skriv Key Vault i sökrutan.
- I resultatlistan väljer du Key Vault.
- I avsnittet Key Vault väljer du Skapa.
- 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.
- Välj Nästa och gå till fliken Åtkomstprincip .
- Åtkomstkonfiguration: Välj rollbaserad åtkomstkontroll i Azure.
- Acceptera standardinställningarna för alla andra alternativ.
- Välj Granska + skapa.
- 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.
- I sökrutan anger du hanterade identiteter.
- Under Tjänster väljer du Hanterade identiteter.
- 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.
- Välj Granska + skapa.
- 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.
- Gå till key vault demo-cmek-keyvault.
- Välj Åtkomstkontroll (IAM) .
- Välj Lägg till>Lägg till rolltilldelning.
- Tilldela följande roll:
- Roll: Key Vault Crypto Service Encryption User
- Tilldela åtkomst till: Hanterad identitet
- Medlem: demokeyvaultmi
- Välj Granska + tilldela för att visa dina inställningar.
- 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.
- Tilldela följande roll:
- Roll: Key Vault Crypto Officer
- Tilldela åtkomst till: Användare, grupp eller tjänstens huvudnamn
- Medlem: Ditt Microsoft Entra-konto
- Välj Granska + tilldela för att visa dina inställningar.
- 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.
- Gå till ditt nyckelvalv, demo-cmek-keyvault.
- Välj Nycklar.
- Välj Generera/Importera.
- På sidan Skapa en nyckel väljer du följande värden:
- Alternativ: Generera
- Namn: demo-cmek-key
- Acceptera standardinställningarna för de andra alternativen.
- 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.
- I sökrutan anger du Hanterade identiteter.
- Under Tjänster väljer du Hanterade identiteter.
- 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.
- Välj Granska + skapa.
- 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.
- Gå till den användartilldelade hanterade identiteten med namnet demokeyvaultmi.
- Välj Åtkomstkontroll (IAM) .
- Välj Lägg till>rolltilldelning för att öppna sidan Lägg till rolltilldelning.
- Tilldela följande roll.
- Roll: Hanterad identitetsoperator
- Tilldela åtkomst till: Hanterad identitet
- Medlem: demomanagedappmi
- Välj Granska + tilldela för att visa dina inställningar.
- 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:
- 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.
- 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.
- Skapa ett .zip-paket som innehåller de JSON-filer som krävs: createUiDefinition.json och mainTemplate.json.
- 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.
- Skapa en ny fil i Visual Studio Code med namnet creatUIDefinition.json.
- Kopiera och klistra in följande kod i filen.
- 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 .
- Skapa en ny fil i Visual Studio Code med namnet mainTemplate.bicep.
- Kopiera och klistra in följande kod i filen.
- 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 demomanagedappmi på fliken Program Inställningar.
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.
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.
- Gå till resursgruppen där du distribuerade det hanterade programmet.
- 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.
- Gå till den hanterade resursgrupp där det hanterade programmets lagringskonto distribueras.
- Under Säkerhet + nätverk väljer du Kryptering.
Nästa steg
- Mer information om lagringskryptering finns i Kundhanterade nycklar för Azure Storage-kryptering.
- Mer information om användartilldelad hanterad identitet med behörighet att komma åt nyckeln i nyckelvalvet finns i Konfigurera kundhanterade nycklar i samma klientorganisation för ett befintligt lagringskonto.