Membuat Aplikasi Terkelola Azure yang menyebarkan akun penyimpanan yang dienkripsi dengan kunci yang dikelola pelanggan

Artikel ini menjelaskan cara membuat Azure Managed Application yang menyebarkan akun penyimpanan yang dienkripsi menggunakan kunci yang dikelola pelanggan. Akun penyimpanan, Cosmos DB, dan Azure Database for Postgres mendukung enkripsi data tidak aktif menggunakan kunci yang dikelola pelanggan atau kunci yang dikelola Microsoft. Anda dapat menggunakan kunci enkripsi Anda sendiri untuk melindungi data di akun penyimpanan Anda. Saat Anda menentukan kunci yang dikelola pelanggan, kunci tersebut digunakan untuk melindungi dan mengontrol akses ke kunci yang mengenkripsi data Anda. Kunci yang dikelola pelanggan menawarkan fleksibilitas yang lebih besar untuk mengelola kontrol akses.

Prasyarat

Identitas Terkelola

Mengonfigurasi kunci yang dikelola pelanggan untuk akun penyimpanan yang disebarkan oleh aplikasi terkelola sebagai sumber daya dalam grup sumber daya terkelola memerlukan identitas terkelola yang ditetapkan pengguna. Identitas terkelola yang ditetapkan pengguna ini dapat digunakan untuk memberikan akses aplikasi terkelola ke sumber daya lain yang ada. Untuk mempelajari cara mengonfigurasi aplikasi terkelola Anda dengan identitas terkelola yang ditetapkan pengguna, buka Azure Managed Application dengan identitas terkelola.

Aplikasi Anda dapat diberikan dua jenis identitas:

  • Identitas terkelola yang ditetapkan sistem ditetapkan ke aplikasi Anda dan dihapus jika aplikasi Anda dihapus. Aplikasi hanya dapat memiliki satu identitas terkelola yang ditetapkan sistem.
  • Identitas terkelola yang ditetapkan pengguna adalah sumber daya Azure mandiri yang dapat ditetapkan ke aplikasi Anda. Aplikasi dapat memiliki beberapa identitas terkelola yang ditetapkan pengguna.

Untuk menyebarkan akun penyimpanan di grup sumber daya terkelola aplikasi terkelola Anda yang dienkripsi dengan kunci pelanggan dari brankas kunci yang ada, diperlukan lebih banyak konfigurasi. Identitas terkelola yang dikonfigurasi dengan aplikasi terkelola Anda memerlukan Kontrol akses berbasis peran Azure bawaan Operator Identitas Terkelola atas identitas terkelola yang memiliki akses ke brankas kunci. Untuk detail selengkapnya, buka peran Operator Identitas Terkelola.

Membuat brankas kunci dengan perlindungan penghapusan menyeluruh

  1. Masuk ke portal Azure.
  2. Dari menu portal Azure, atau dari halaman Beranda, pilih Buat sumber daya.
  3. Dalam kotak Pencarian, masukkan Key Vault.
  4. Dari daftar hasil, pilih Key Vault.
  5. Pada bagian Key Vault , pilih Buat.
  6. Pada bagian Buat brankas kunci, berikan informasi berikut:
    • Langganan: Pilih langganan Anda.
    • Grup Sumber Daya: Pilih Buat baru dan masukkan nama seperti demo-cmek-rg.
    • Nama: Nama unik diperlukan, seperti demo-keyvault-cmek.
    • Wilayah: Pilih lokasi seperti US Timur.
    • Tingkat harga: Pilih Standar dari daftar drop-down.
    • Perlindungan penghapusan menyeluruh: Pilih Aktifkan perlindungan penghapusan menyeluruh.
  7. Pilih Berikutnya dan buka tab Kebijakan Akses.
    • Konfigurasi akses: Pilih kontrol akses berbasis peran Azure.
    • Terima default untuk semua opsi lainnya.
  8. Pilih Tinjau + buat.
  9. Konfirmasi pengaturan sudah benar dan pilih Buat.

Setelah penyebaran berhasil, pilih Buka sumber daya. Pada tab Gambaran Umum , catat properti berikut ini:

  • Nama Vault: Dalam contoh, nama vault adalah demo-keyvault-cmek. Anda akan menggunakan nama ini untuk langkah lainnya.
  • URI vault: Dalam contoh, URI vault adalah https://demo-keyvault-cmek.vault.azure.net/.

Membuat identitas terkelola yang ditetapkan pengguna

Untuk membuat identitas terkelola yang ditetapkan pengguna, akun Anda memerlukan penetapan peran Kontributor identitas terkelola.

  1. Dalam kotak pencarian, masukkan identitas terkelola.
  2. Di bawah Layanan, pilih Identitas Terkelola.
  3. Pilih Buat dan masukkan nilai berikut pada tab Dasar :
    • Langganan: Pilih langganan Anda.
    • Grup sumber daya: Pilih grup sumber daya demo-cmek-rg yang Anda buat di langkah-langkah sebelumnya.
    • Wilayah: Pilih wilayah seperti US Timur.
    • Nama: Masukkan nama untuk identitas terkelola yang ditetapkan pengguna Anda, seperti demokeyvaultmi.
  4. Pilih Tinjau + buat.
  5. Setelah Validasi Lulus ditampilkan, pilih Buat.

Setelah penyebaran berhasil, pilih Buka sumber daya.

Membuat penetapan peran

Anda perlu membuat dua penetapan peran untuk brankas kunci Anda. Untuk detailnya, lihat Menetapkan peran Azure menggunakan portal Azure.

Memberikan izin kunci pada brankas kunci ke identitas terkelola

Buat penetapan peran untuk demokeyvaultmi identitas terkelola brankas kunci untuk membungkus dan membongkar kunci.

  1. Buka brankas kunci Anda demo-cmek-keyvault.
  2. Pilih Kontrol Akses (IAM) .
  3. Pilih Tambahkan Tambahkan>penetapan peran.
  4. Tetapkan peran berikut:
    • Peran: Pengguna Enkripsi Layanan Kripto Key Vault
    • Tetapkan Akses ke: Identitas terkelola
    • Anggota: demokeyvaultmi
  5. Pilih Tinjau + tetapkan untuk melihat pengaturan Anda.
  6. Pilih Tinjau + tetapkan untuk membuat penetapan peran.

Membuat penetapan peran untuk akun Anda

Buat penetapan peran lain sehingga akun Anda dapat membuat kunci baru di brankas kunci Anda.

  1. Tetapkan peran berikut:
    • Peran: Petugas Kripto Key Vault
    • Tetapkan Akses ke: Pengguna, grup, atau perwakilan layanan
    • Anggota: Akun Microsoft Entra Anda
  2. Pilih Tinjau + tetapkan untuk melihat pengaturan Anda.
  3. Pilih Tinjau + tetapkan untuk membuat penetapan peran.

Anda dapat memverifikasi penetapan peran brankas kunci dalam Penetapan peran kontrol akses (IAM).>

Membuat kunci

Anda perlu membuat kunci yang digunakan brankas kunci Anda untuk mengenkripsi akun penyimpanan.

  1. Buka brankas kunci Anda, demo-cmek-keyvault.
  2. Pilih Kunci.
  3. Pilih Buat/impor.
  4. Pada halaman Buat kunci , pilih nilai berikut ini:
    • Opsi: Hasilkan
    • Nama: demo-cmek-key
  5. Terima default untuk opsi lainnya.
  6. Pilih Buat.

Catat nama kunci. Anda menggunakannya saat menyebarkan aplikasi terkelola.

Membuat identitas terkelola yang ditetapkan pengguna untuk aplikasi terkelola

Buat identitas terkelola yang ditetapkan pengguna untuk digunakan sebagai identitas terkelola untuk aplikasi terkelola.

  1. Di kotak penelusuran, masukkan Identitas Terkelola.
  2. Di bawah Layanan, pilih Identitas Terkelola.
  3. Pilih Buat.
    • Langganan: Pilih langganan Anda.
    • Grup sumber daya: Pilih grup sumber daya demo-cmek-rg.
    • Wilayah: Pilih wilayah seperti US Timur.
    • Nama: Masukkan nama untuk identitas terkelola yang ditetapkan pengguna Anda, seperti demomanagedappmi.
  4. Pilih Tinjau + buat.
  5. Setelah Validasi Lulus ditampilkan, pilih Buat.

Setelah penyebaran berhasil, pilih Buka sumber daya.

Menetapkan izin peran ke identitas terkelola

Tetapkan peran Operator Identitas Terkelola ke identitas terkelola pada cakupan identitas terkelola yang ditetapkan pengguna bernama demokeyvaultmi.

  1. Buka identitas terkelola yang ditetapkan pengguna bernama demokeyvaultmi.
  2. Pilih Kontrol akses (IAM).
  3. Pilih Tambahkan>Tambahkan penetapan peran untuk membuka halaman Tambahkan penetapan peran.
  4. Tetapkan peran berikut.
    • Peran: Operator Identitas Terkelola
    • Tetapkan Akses ke: Identitas Terkelola
    • Anggota: demomanagedappmi
  5. Pilih Tinjau + tetapkan untuk melihat pengaturan Anda.
  6. Pilih Tinjau + tetapkan untuk membuat penetapan peran.

Anda dapat memverifikasi penetapan peran untuk demokeyvaultmi dalam Penetapan peran Kontrol akses (IAM).>

Contoh templat aplikasi terkelola

Buat aplikasi terkelola yang menyebarkan akun penyimpanan di grup sumber daya terkelola dan gunakan kunci brankas kunci yang sudah ada sebelumnya untuk mengenkripsi data di akun penyimpanan.

Untuk menerbitkan aplikasi terkelola ke katalog layanan Anda, lakukan tugas berikut:

  1. Buat file creatUIDefinition.json dari sampel di artikel ini. Templat menentukan elemen antarmuka pengguna portal saat menyebarkan aplikasi terkelola.
  2. Buat templat Azure Resource Manager bernama mainTemplate.json dengan mengonversi file Bicep dalam artikel ini ke JSON. Templat menentukan sumber daya yang akan disebarkan dengan aplikasi terkelola.
  3. Buat paket .zip yang berisi file JSON yang diperlukan: createUiDefinition.json dan mainTemplate.json.
  4. Terbitkan definisi aplikasi terkelola sehingga tersedia di katalog layanan Anda. Untuk informasi selengkapnya, buka Mulai Cepat: Membuat dan menerbitkan definisi Azure Managed Application.

Membuat templat createUiDefinition.json

Templat berikut membuat identitas terkelola yang ditetapkan pengguna untuk aplikasi terkelola. Dalam contoh ini, kami menonaktifkan identitas terkelola yang ditetapkan sistem karena kami memerlukan identitas terkelola yang ditetapkan pengguna untuk dikonfigurasi terlebih dahulu dengan izin Operator Identitas Terkelola atas identitas terkelola brankas kunci.

  1. Buat file baru di Visual Studio Code bernama creatUIDefinition.json.
  2. Salin dan tempel kode berikut ke dalam file.
  3. Simpan 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)]"
      }
    }
  }
}

Membuat templat mainTemplate.json

File Bicep berikut adalah kode sumber untuk mainTemplate.json Anda. Templat menggunakan identitas terkelola yang ditetapkan pengguna yang ditentukan dalam file createUiDefinition.json .

  1. Buat file baru di Visual Studio Code bernama mainTemplate.bicep.
  2. Salin dan tempel kode berikut ke dalam file.
  3. Simpan 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}'
      }
    }
  }
}

Gunakan PowerShell atau Azure CLI untuk membangun file mainTemplate.json . Buka direktori tempat Anda menyimpan file Bicep dan jalankan build perintah .

bicep build mainTemplate.bicep

Setelah file Bicep dikonversi ke JSON, file mainTemplate.json Anda harus cocok dengan contoh berikut. Anda mungkin memiliki nilai yang berbeda dalam metadata properti untuk version dan 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)]"
          }
        }
      }
    }
  ]
}

Menyebarkan aplikasi terkelola

Setelah definisi katalog layanan dibuat, Anda dapat menyebarkan aplikasi terkelola. Untuk informasi selengkapnya, buka Mulai Cepat: Menyebarkan aplikasi terkelola katalog layanan.

Selama penyebaran, Anda menggunakan identitas terkelola yang ditetapkan pengguna, nama brankas kunci, URL brankas kunci, nama kunci brankas kunci. File createUiDefinition.json membuat antarmuka penggunaan.

Misalnya, dalam penyebaran portal, pada tab Aplikasi Pengaturan, Anda menambahkan demomanagedappmi.

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

Pada tab Konfigurasi , Anda mengaktifkan kunci yang dikelola pelanggan dan menambahkan identitas terkelola yang ditetapkan pengguna untuk brankas kunci, demokeyvaultmi. Anda juga menentukan URL brankas kunci dan nama kunci brankas kunci yang Anda buat.

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

Verifikasi penyebaran

Setelah penyebaran selesai, Anda dapat memverifikasi penetapan identitas aplikasi terkelola. Demomanagedappmi identitas terkelola yang ditetapkan pengguna ditetapkan ke aplikasi terkelola.

  1. Buka grup sumber daya tempat Anda menyebarkan aplikasi terkelola.
  2. Di bawah Pengaturan> Identitas pilih Pengguna yang ditetapkan (pratinjau).

Anda juga dapat memverifikasi akun penyimpanan yang disebarkan aplikasi terkelola. Tab Enkripsi memperlihatkan kunci demo-cmek-key dan ID sumber daya untuk identitas terkelola yang ditetapkan pengguna.

  1. Buka grup sumber daya terkelola tempat akun penyimpanan aplikasi terkelola disebarkan.
  2. Di bawah Keamanan + jaringan pilih Enkripsi.

Langkah berikutnya