Vytvoření spravované aplikace Azure, která nasazuje účet úložiště šifrovaný pomocí klíče spravovaného zákazníkem

Tento článek popisuje, jak vytvořit spravovanou aplikaci Azure, která nasadí účet úložiště šifrovaný pomocí klíče spravovaného zákazníkem. Účet úložiště, Cosmos DB a Azure Database for Postgres podporují šifrování neaktivních uložených dat pomocí klíčů spravovaných zákazníkem nebo klíčů spravovaných Microsoftem. K ochraně dat v účtu úložiště můžete použít vlastní šifrovací klíč. Když zadáte klíč spravovaný zákazníkem, použije se tento klíč k ochraně a řízení přístupu ke klíči, který šifruje vaše data. Klíče spravované zákazníkem nabízejí větší flexibilitu při správě řízení přístupu.

Předpoklady

Spravované identity

Konfigurace klíče spravovaného zákazníkem pro účet úložiště nasazený spravovanou aplikací jako prostředek ve spravované skupině prostředků vyžaduje spravovanou identitu přiřazenou uživatelem. Tuto spravovanou identitu přiřazenou uživatelem lze použít k udělení přístupu spravované aplikace k dalším existujícím prostředkům. Pokud chcete zjistit, jak nakonfigurovat spravovanou aplikaci s spravovanou identitou přiřazenou uživatelem, přejděte do spravované aplikace Azure se spravovanou identitou.

Vaší aplikaci je možné udělit dva typy identit:

  • Spravovaná identita přiřazená systémem se přiřadí vaší aplikaci a odstraní se, pokud je vaše aplikace odstraněná. Aplikace může mít jenom jednu spravovanou identitu přiřazenou systémem.
  • Spravovaná identita přiřazená uživatelem je samostatný prostředek Azure, který se dá přiřadit k vaší aplikaci. Aplikace může mít více spravovaných identit přiřazených uživatelem.

Pokud chcete nasadit účet úložiště ve spravované skupině prostředků spravované aplikace, která je šifrovaná pomocí klíčů zákazníků z existujícího trezoru klíčů, je potřeba provést další konfiguraci. Spravovaná identita nakonfigurovaná pro spravovanou aplikaci potřebuje integrovaného operátora řízení přístupu na základě role v Azure nad spravovanou identitou, která má přístup k trezoru klíčů. Další podrobnosti najdete v části Role operátora spravované identity.

Vytvoření trezoru klíčů s ochranou před vymazáním

  1. Přihlaste se k portálu Azure.
  2. V nabídce webu Azure Portal nebo na domovské stránce vyberte Vytvořit prostředek.
  3. Do vyhledávacího pole zadejte Key Vault.
  4. V seznamu výsledků vyberte Key Vault.
  5. V části Key Vault vyberte Vytvořit.
  6. V části Vytvořit trezor klíčů zadejte následující informace:
    • Předplatné: Vyberte předplatné.
    • Skupina prostředků: Vyberte Vytvořit nový a zadejte název, například demo-cmek-rg.
    • Název: Vyžaduje se jedinečný název, například demo-keyvault-cmek.
    • Oblast: Vyberte umístění, jako je USA – východ.
    • Cenová úroveň: V rozevíracím seznamu vyberte Standard .
    • Ochrana před vymazáním: Vyberte Povolit ochranu před vymazáním.
  7. Vyberte Další a přejděte na kartu Zásady přístupu.
    • Konfigurace přístupu: Vyberte řízení přístupu na základě role Azure.
    • U všech ostatních možností přijměte výchozí hodnoty.
  8. Vyberte Zkontrolovat a vytvořit.
  9. Potvrďte správnost nastavení a vyberte Vytvořit.

Po úspěšném nasazení vyberte Přejít k prostředku. Na kartě Přehled si poznamenejte následující vlastnosti:

  • Název trezoru: V příkladu je název trezoru demo-keyvault-cmek. Tento název použijete pro další kroky.
  • Identifikátor URI trezoru: V příkladu je https://demo-keyvault-cmek.vault.azure.net/identifikátor URI trezoru .

Vytvoření spravované identity přiřazené uživatelem

Pokud chcete vytvořit spravovanou identitu přiřazenou uživatelem, váš účet potřebuje přiřazení role Přispěvatel spravované identity.

  1. Do vyhledávacího pole zadejte spravované identity.
  2. V části Služby vyberte Spravované identity.
  3. Na kartě Základy vyberte Vytvořit a zadejte následující hodnoty:
    • Předplatné: Vyberte předplatné.
    • Skupina prostředků: Vyberte skupinu prostředků demo-cmek-rg, kterou jste vytvořili v předchozích krocích.
    • Oblast: Vyberte oblast, například USA – východ.
    • Název: Zadejte název spravované identity přiřazené uživatelem, například demokeyvaultmi.
  4. Vyberte Zkontrolovat a vytvořit.
  5. Po zobrazení Úspěšné ověření vyberte Vytvořit.

Po úspěšném nasazení vyberte Přejít k prostředku.

Vytvoření přiřazení rolí

Pro trezor klíčů musíte vytvořit dvě přiřazení rolí. Podrobnosti najdete v tématu Přiřazení rolí Azure pomocí webu Azure Portal.

Udělení oprávnění ke klíči v trezoru klíčů spravované identitě

Vytvořte přiřazení role pro spravovanou identitu trezoru klíčů demokeyvaultmi pro zabalení a rozbalení klíčů.

  1. Přejděte do trezoru klíčů demo-cmek-keyvault.
  2. Vyberte Řízení přístupu (IAM) .
  3. Vyberte Přidat>Přidat přiřazení role.
  4. Přiřaďte následující roli:
    • Role: Uživatel šifrování šifrovací služby Key Vault
    • Přiřazení přístupu: Spravovaná identita
    • Člen: demokeyvaultmi
  5. Pokud chcete zobrazit nastavení, vyberte Zkontrolovat a přiřadit .
  6. Výběrem možnosti Zkontrolovat a přiřadit vytvořte přiřazení role.

Vytvoření přiřazení role pro váš účet

Vytvořte další přiřazení role, aby váš účet mohl vytvořit nový klíč v trezoru klíčů.

  1. Přiřaďte následující roli:
    • Role: Kryptografický důstojník služby Key Vault
    • Přiřazení přístupu: Uživatel, skupina nebo instanční objekt
    • Člen: Váš účet Microsoft Entra
  2. Pokud chcete zobrazit nastavení, vyberte Zkontrolovat a přiřadit .
  3. Výběrem možnosti Zkontrolovat a přiřadit vytvořte přiřazení role.

Přiřazení rolí trezoru klíčů můžete ověřit v přiřazení rolí řízení přístupu (IAM).>

Vytvoření klíče

Musíte vytvořit klíč, který váš trezor klíčů používá k šifrování účtu úložiště.

  1. Přejděte do trezoru klíčů demo-cmek-keyvault.
  2. Vyberte Klíče.
  3. Vyberte Generovat/importovat.
  4. Na stránce Vytvořit klíč vyberte následující hodnoty:
    • Možnosti: Generování
    • Název: demo-cmek-key
  5. U ostatních možností přijměte výchozí hodnoty.
  6. Vyberte Vytvořit.

Poznamenejte si název klíče. Použijete ho při nasazení spravované aplikace.

Vytvoření spravované identity přiřazené uživatelem pro spravovanou aplikaci

Vytvořte spravovanou identitu přiřazenou uživatelem, která se použije jako spravovaná identita spravované aplikace.

  1. Do vyhledávacího pole zadejte spravované identity.
  2. V části Služby vyberte Spravované identity.
  3. Vyberte Vytvořit.
    • Předplatné: Vyberte předplatné.
    • Skupina prostředků: Vyberte skupinu prostředků demo-cmek-rg.
    • Oblast: Vyberte oblast, například USA – východ.
    • Název: Zadejte název spravované identity přiřazené uživatelem, například demomanagedappmi.
  4. Vyberte Zkontrolovat a vytvořit.
  5. Po zobrazení Úspěšné ověření vyberte Vytvořit.

Po úspěšném nasazení vyberte Přejít k prostředku.

Přiřazení oprávnění role ke spravované identitě

Přiřaďte spravované identitě roli Operátor spravované identity v oboru spravované identity přiřazené uživatelem s názvem demokeyvaultmi.

  1. Přejděte na spravovanou identitu přiřazenou uživatelem s názvem demokeyvaultmi.
  2. Vyberte Řízení přístupu (IAM) .
  3. Výběrem možnosti Přidat>přiřazení role otevřete stránku Přidat přiřazení role.
  4. Přiřaďte následující roli.
    • Role: Operátor spravované identity
    • Přiřazení přístupu: Spravovaná identita
    • Člen: demomanagedappmi
  5. Pokud chcete zobrazit nastavení, vyberte Zkontrolovat a přiřadit .
  6. Výběrem možnosti Zkontrolovat a přiřadit vytvořte přiřazení role.

Přiřazení role pro demokeyvaultmi můžete ověřit v přiřazení rolí řízení přístupu (IAM).>

Ukázková šablona spravované aplikace

Vytvořte spravovanou aplikaci, která nasadí účet úložiště ve spravované skupině prostředků a pomocí klíče existujícího trezoru klíčů zašifruje data v účtu úložiště.

Pokud chcete do katalogu služeb publikovat spravovanou aplikaci, proveďte následující úlohy:

  1. Vytvořte soubor creatUIDefinition.json z ukázky v tomto článku. Šablona definuje prvky uživatelského rozhraní portálu při nasazování spravované aplikace.
  2. Vytvořte šablonu Azure Resource Manageru s názvem mainTemplate.json převodem souboru Bicep v tomto článku na JSON. Šablona definuje prostředky, které se mají nasadit se spravovanou aplikací.
  3. Vytvořte balíček .zip , který obsahuje požadované soubory JSON: createUiDefinition.json a mainTemplate.json.
  4. Publikujte definici spravované aplikace, aby byla dostupná v katalogu služeb. Další informace najdete v tématu Rychlý start: Vytvoření a publikování definice spravované aplikace Azure.

Vytvoření šablony createUiDefinition.json

Následující šablona vytvoří spravovanou identitu přiřazenou uživatelem pro spravovanou aplikaci. V tomto příkladu zakážeme spravovanou identitu přiřazenou systémem, protože potřebujeme, aby byla spravovaná identita přiřazená uživatelem nakonfigurovaná předem s oprávněními operátora spravované identity pro spravovanou identitu trezoru klíčů.

  1. Vytvořte nový soubor v editoru Visual Studio Code s názvem creatUIDefinition.json.
  2. Zkopírujte a vložte do souboru následující kód.
  3. Soubor uložte.
{
  "$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)]"
      }
    }
  }
}

Vytvoření šablony mainTemplate.json

Následující soubor Bicep je zdrojový kód pro váš mainTemplate.json. Šablona používá spravovanou identitu přiřazenou uživatelem definovanou v souboru createUiDefinition.json .

  1. V editoru Visual Studio Code vytvořte nový soubor s názvem mainTemplate.bicep.
  2. Zkopírujte a vložte do souboru následující kód.
  3. Soubor uložte.
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}'
      }
    }
  }
}

K sestavení souboru mainTemplate.json použijte PowerShell nebo Azure CLI. Přejděte do adresáře, do kterého jste uložili soubor Bicep, a spusťte build příkaz.

bicep build mainTemplate.bicep

Po převodu souboru Bicep na JSON by se měl váš soubor mainTemplate.json shodovat s následujícím příkladem. Ve vlastnostech metadata pro version a 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)]"
          }
        }
      }
    }
  ]
}

Nasazení spravované aplikace

Po vytvoření definice katalogu služeb můžete spravovanou aplikaci nasadit. Další informace najdete v části Rychlý start: Nasazení spravované aplikace katalogu služeb.

Během nasazování použijete spravované identity přiřazené uživatelem, název trezoru klíčů, adresu URL trezoru klíčů, název klíče trezoru klíčů. Soubor createUiDefinition.json vytvoří rozhraní use.

Například v nasazení portálu na kartě Nastavení aplikace přidáte demomanagedappmi.

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

Na kartě Konfigurace povolíte klíč spravovaný zákazníkem a přidáte spravovanou identitu přiřazenou uživatelem pro trezor klíčů demokeyvaultmi. Zadáte také adresu URL trezoru klíčů a název klíče trezoru klíčů, který jste vytvořili.

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

Ověření nasazení

Po dokončení nasazení můžete ověřit přiřazení identity spravované aplikace. Demomanagedappmi přiřazené uživatelem je přiřazená spravované aplikaci.

  1. Přejděte do skupiny prostředků, do které jste nasadili spravovanou aplikaci.
  2. V části Nastavení> Identity vyberte Přiřazený uživatel (Preview).

Můžete také ověřit účet úložiště, který spravovaná aplikace nasadila. Na kartě Šifrování se zobrazuje klíč demo-cmek-key a ID prostředku pro spravovanou identitu přiřazenou uživatelem.

  1. Přejděte do spravované skupiny prostředků, ve které je nasazený účet úložiště spravované aplikace.
  2. V části Zabezpečení a sítě vyberte Šifrování.

Další kroky