Enkripsi ganda Azure HDInsight untuk data tidak aktif

Artikel ini membahas metode untuk enkripsi data tidak aktif di kluster Azure HDInsight. Enkripsi data tidak aktif mengacu pada enkripsi pada disk terkelola (disk data, disk OS, dan disk sementara) yang terpasang pada komputer virtual kluster HDInsight.

Dokumen ini tidak membahas data yang disimpan di akun Azure Storage Anda. Kluster Anda mungkin memiliki satu atau beberapa akun Azure Storage yang terpasang di mana kunci enkripsi juga dapat dikelola Microsoft atau dikelola pelanggan, tetapi layanan enkripsinya berbeda. Untuk informasi selengkapnya tentang enkripsi Azure Storage, lihat Enkripsi Azure Storage untuk data tidak aktif.

Pengantar

Ada tiga peran utama disk terkelola di Azure: disk data, disk OS, dan disk sementara. Untuk informasi selengkapnya tentang berbagai jenis disk terkelola, lihat Pengantar disk yang dikelola Azure.

HDInsight mendukung beberapa jenis enkripsi dalam dua lapisan yang berbeda:

  • Enkripsi Sisi Server (Server Side Encryption, SSE) - SSE dilakukan oleh layanan penyimpanan. Dalam HDInsight, SSE digunakan untuk mengenkripsi disk OS dan disk data. Enkripsi diaktifkan secara default. SSE adalah layanan enkripsi lapisan 1.
  • Enkripsi di host menggunakan kunci yang dikelola platform - Mirip dengan SSE, jenis enkripsi ini dilakukan oleh layanan penyimpanan. Namun, ini hanya untuk disk sementara dan tidak diaktifkan secara default. Enkripsi di host juga merupakan layanan enkripsi lapisan 1.
  • Enkripsi saat tidak aktif menggunakan kunci yang dikelola pelanggan - Jenis enkripsi ini dapat digunakan pada data dan disk sementara. Ini tidak diaktifkan secara default dan mengharuskan pelanggan untuk menyediakan kunci mereka sendiri melalui brankas kunci Azure. Enkripsi saat tidak aktif merupakan layanan enkripsi lapisan 2.

Jenis ini dirangkum dalam tabel berikut ini.

Jenis kluster Disk OS (Disk terkelola) Disk data (Disk terkelola) Disk data sementara (SSD Lokal)
Kafka, HBase dengan tulisan Dipercepat Lapisan1: Enkripsi SSE secara default Lapisan1: Enkripsi SSE secara default, Lapisan2: Enkripsi opsional saat tidak aktif menggunakan CMK Lapisan1: Enkripsi opsional di host menggunakan PMK, Lapisan2: Enkripsi opsional saat tidak aktif menggunakan CMK
Semua kluster lain (Spark, Interactive, Hadoop, HBase tanpa tulisan Dipercepat) Lapisan1: Enkripsi SSE secara default T/A Lapisan1: Enkripsi opsional di host menggunakan PMK, Lapisan2: Enkripsi opsional saat tidak aktif menggunakan CMK

Enkripsi tidak aktif menggunakan kunci yang dikelola Pelanggan

Enkripsi kunci yang dikelola pelanggan adalah proses satu langkah yang ditangani selama pembuatan kluster tanpa biaya tambahan. Yang perlu Anda lakukan adalah mengotorisasi identitas terkelola dengan Azure Key Vault dan menambahkan kunci enkripsi saat Anda membuat kluster.

Disk data dan disk sementara pada setiap node kluster dienkripsi dengan Kunci Enkripsi Data (DEK) simetris. DEK dilindungi menggunakan Kunci Enkripsi Kunci (KEK) dari brankas kunci Anda. Proses enkripsi dan dekripsi ditangani sepenuhnya oleh Azure HDInsight.

Untuk disk OS yang terpasang pada VM kluster hanya tersedia satu lapisan enkripsi (PMK). Disarankan agar pelanggan menghindari menyalin data sensitif ke disk OS jika memiliki enkripsi CMK diperlukan untuk skenario mereka.

Jika firewall brankas kunci diaktifkan pada brankas kunci tempat kunci enkripsi disk disimpan, alamat IP Penyedia Sumber regional HDInsight untuk wilayah tempat kluster akan disebarkan harus ditambahkan ke konfigurasi firewall brankas kunci. Ini diperlukan karena HDInsight bukan layanan brankas kunci Azure tepercaya.

Anda dapat menggunakan portal Microsoft Azure atau Azure CLI untuk dengan aman memutar kunci di brankas kunci. Saat kunci berputar, kluster HDInsight mulai menggunakan kunci baru dalam hitungan menit. Aktifkan fitur perlindungan kunci Penghapusan Sementara untuk melindungi dari skenario ransomware dan penghapusan yang tidak disengaja. Brankas kunci tanpa fitur perlindungan ini tidak didukung.

Mulai dengan kunci yang dikelola pelanggan

Untuk membuat kluster HDInsight yang diaktifkan oleh kunci yang dikelola pelanggan, kita akan melalui langkah-langkah berikut:

  1. Buat identitas terkelola untuk sumber daya Azure
  2. Buat Azure Key Vault
  3. Buat kunci
  4. Buat kebijakan akses
  5. Buat kluster HDInsight dengan kunci yang dikelola pelanggan diaktifkan
  6. Memutar kunci enkripsi

Setiap langkah dijelaskan dalam salah satu bagian berikut secara rinci.

Buat identitas terkelola untuk sumber daya Azure

Buat identitas terkelola yang ditetapkan pengguna untuk mengautentikasi ke Key Vault.

Lihat Buat identitas terkelola yang ditetapkan pengguna untuk langkah-langkah tertentu. Untuk informasi selengkapnya tentang cara kerja identitas terkelola di Azure HDInsight, lihat Identitas terkelola di Azure HDInsight. Pastikan untuk menyimpan ID sumber daya identitas terkelola saat Anda menambahkannya ke kebijakan akses Key Vault.

Buat Azure Key Vault

Membuat brankas kunci. Lihat Membuat Azure Key Vault untuk langkah-langkah tertentu.

HDInsight hanya mendukung Azure Key Vault. Jika Anda memiliki brankas kunci sendiri, Anda dapat mengimpor kunci Anda ke Azure Key Vault. Ingat bahwa brankas kunci harus mengaktifkan Penghapusan sementara. Untuk informasi selengkapnya tentang mengimpor kunci yang sudah ada, kunjungi Tentang kunci, rahasia, dan sertifikat.

Buat kunci

  1. Dari brankas kunci baru Anda, arahkan ke Pengaturan>Kunci>+ Hasilkan/Impor.

    Generate a new key in Azure Key Vault.

  2. Berikan nama, lalu pilih Buat. Pertahankan Tipe KunciRSA default.

    generates key name.

  3. Saat Anda kembali ke halaman Kunci, pilih kunci yang Anda buat.

    key vault key list.

  4. Pilih versi untuk membuka halaman Versi Kunci. Ketika Anda menggunakan kunci Anda sendiri untuk enkripsi kluster HDInsight, Anda perlu menyediakan URI kunci. Salin pengidentifikasi Kunci dan simpan di suatu tempat hingga Anda siap membuat kluster.

    get key identifier.

Buat kebijakan akses

  1. Dari brankas kunci baru Anda, arahkan ke Pengaturan>Kebijakan Akses>+ Tambahkan Kebijakan Akses.

    Create new Azure Key Vault access policy.

  2. Dari halaman Tambahkan kebijakan akses, berikan informasi berikut ini:

    Properti Deskripsi
    Izin Kunci Pilih Dapatkan, Buka Kunci, dan Bungkus Kunci.
    Izin Rahasia Pilih Dapatkan, Atur, dan Hapus.
    Pilih prinsipal Pilih identitas terkelola yang ditetapkan pengguna, yang anda buat sebelumnya.

    Set Select Principal for Azure Key Vault access policy.

  3. Pilih Tambahkan.

  4. Pilih Simpan.

    Save Azure Key Vault access policy.

Buat kluster dengan enkripsi disk kunci yang dikelola pelanggan

Anda sekarang siap untuk membuat kluster HDInsight baru. Kunci yang dikelola pelanggan hanya dapat diterapkan ke kluster baru selama pembuatan kluster. Enkripsi tidak dapat dihapus dari kluster kunci yang dikelola pelanggan, dan kunci yang dikelola pelanggan tidak dapat ditambahkan ke kluster yang ada.

Dimulai dengan rilis November 2020, HDInsight mendukung pembuatan kluster menggunakan URI kunci berversi dan tanpa versi. Jika Anda membuat kluster dengan URI kunci tanpa versi, maka kluster HDInsight akan mencoba melakukan rotasi otomatis kunci saat kunci diperbarui di Azure Key Vault Anda. Jika Anda membuat kluster dengan URI kunci berversi, Anda harus melakukan rotasi kunci manual seperti yang dibahas dalam Memutar kunci enkripsi.

Untuk kluster yang dibuat sebelum rilis November 2020, Anda harus melakukan rotasi kunci secara manual menggunakan URI kunci berversi.

Jenis VM yang mendukung enkripsi disk

Ukuran vCPU Memori: GiB
Standard_D4a_v4 4 16
Standard_D8a_v4 8 32
Standard_D16a_v4 16 64
Standard_D32a_v4 32 128
Standard_D48a_v4 48 192
Standard_D64a_v4 64 256
Standard_D96a_v4 96 384
Standard_E64is_v3 64 432
Standard_E20s_V3 20 160
Standard_E2s_V3 2 16
Standard_E2a_v4 2 16
Standard_E4a_v4 4 32
Standard_E8a_v4 8 64
Standard_E16a_v4 16 128
Standard_E20a_v4 20 160
Standard_E32a_v4 32 256
Standard_E48a_v4 48 384
Standard_E64a_v4 64 512
Standard_E96a_v4 96 672
Standard_DS3_v2 4 14
Standard_DS4_v2 8 28
Standard_DS5_v2 16 56
Standard_DS12_v2 4 28
Standard_DS13_v2 8 56
Standard_DS14_v2 16 112

Menggunakan portal Azure

Selama pembuatan kluster, Anda dapat menggunakan kunci berversi, atau kunci tanpa versi dengan cara berikut:

  • Berversi - Selama pembuatan kluster, berikan pengidentifikasi Kunci lengkap, termasuk versi kunci. Contohnya,https://contoso-kv.vault.azure.net/keys/myClusterKey/46ab702136bc4b229f8b10e8c2997fa4.
  • Tanpa versi - Selama pembuatan kluster, hanya berikan pengidentifikasi Kunci. Contohnya,https://contoso-kv.vault.azure.net/keys/myClusterKey.

Anda juga perlu menetapkan identitas terkelola untuk kluster.

Create new cluster.

Menggunakan Azure CLI

Contoh berikut menunjukkan cara menggunakan Azure CLI untuk membuat kluster Apache Spark baru dengan enkripsi disk diaktifkan. Untuk informasi selengkapnya, lihat Azure CLI az hdinsight create. Parameter encryption-key-version bersifat opsional.

az hdinsight create -t spark -g MyResourceGroup -n MyCluster \
-p "HttpPassword1234!" --workernode-data-disks-per-node 2 \
--storage-account MyStorageAccount \
--encryption-key-name SparkClusterKey \
--encryption-key-version 00000000000000000000000000000000 \
--encryption-vault-uri https://MyKeyVault.vault.azure.net \
--assign-identity MyMSI

Menggunakan templat Azure Resource Manager

Contoh berikut menunjukkan cara menggunakan templat Azure Resource Manager untuk membuat kluster Apache Spark baru dengan enkripsi disk diaktifkan. Untuk informasi selengkapnya, lihat Apa itu templat ARM?. Properti templat manajer sumber daya diskEncryptionKeyVersion bersifat opsional.

Contoh ini menggunakan PowerShell untuk memanggil templat.

$templateFile = "azuredeploy.json"
$ResourceGroupName = "MyResourceGroup"
$clusterName = "MyCluster"
$password = ConvertTo-SecureString 'HttpPassword1234!' -AsPlainText -Force
$diskEncryptionVaultUri = "https://MyKeyVault.vault.azure.net"
$diskEncryptionKeyName = "SparkClusterKey"
$diskEncryptionKeyVersion = "00000000000000000000000000000000"
$managedIdentityName = "MyMSI"

New-AzResourceGroupDeployment `
  -Name mySpark `
  -TemplateFile $templateFile `
  -ResourceGroupName $ResourceGroupName `
  -clusterName $clusterName `
  -clusterLoginPassword $password `
` -sshPassword $password `
  -diskEncryptionVaultUri $diskEncryptionVaultUri `
  -diskEncryptionKeyName $diskEncryptionKeyName `
  -diskEncryptionKeyVersion $diskEncryptionKeyVersion `
  -managedIdentityName $managedIdentityName

Isi templat manajemen sumber daya, azuredeploy.json:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "0.9.0.0",
  "parameters": {
    "clusterName": {
      "type": "string",
      "metadata": {
        "description": "The name of the HDInsight cluster to create."
      }
    },
    "clusterLoginUserName": {
      "type": "string",
      "defaultValue": "admin",
      "metadata": {
        "description": "These credentials can be used to submit jobs to the cluster and to log into cluster dashboards."
      }
    },
    "clusterLoginPassword": {
      "type": "securestring",
      "metadata": {
        "description": "The password must be at least 10 characters in length and must contain at least one digit, one non-alphanumeric character, and one upper or lower case letter."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The location where all azure resources will be deployed."
      }
    },
    "sshUserName": {
      "type": "string",
      "defaultValue": "sshuser",
      "metadata": {
        "description": "These credentials can be used to remotely access the cluster."
      }
    },
    "sshPassword": {
      "type": "securestring",
      "metadata": {
        "description": "The password must be at least 10 characters in length and must contain at least one digit, one non-alphanumeric character, and one upper or lower case letter."
      }
    },
    "headNodeSize": {
      "type": "string",
      "defaultValue": "Standard_D12_v2",
      "metadata": {
        "description": "The VM size of the head nodes."
      }
    },
    "workerNodeSize": {
      "type": "string",
      "defaultValue": "Standard_D13_v2",
      "metadata": {
        "description": "The VM size of the worker nodes."
      }
    },
    "diskEncryptionVaultUri": {
      "type": "string",
      "metadata": {
        "description": "The Key Vault DNSname."
      }
    },
    "diskEncryptionKeyName": {
      "type": "string",
      "metadata": {
        "description": "The Key Vault key name."
      }
    },
    "diskEncryptionKeyVersion": {
      "type": "string",
      "metadata": {
        "description": "The Key Vault key version for the selected key."
      }
    },
    "managedIdentityName": {
      "type": "string",
      "metadata": {
        "description": "The user-assigned managed identity."
      }
    }
  },
  "variables": {
    "defaultStorageAccount": {
      "name": "[uniqueString(resourceGroup().id)]",
      "type": "Standard_LRS"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[variables('defaultStorageAccount').name]",
      "location": "[parameters('location')]",
      "apiVersion": "2019-06-01",
      "sku": {
        "name": "[variables('defaultStorageAccount').type]"
      },
      "kind": "Storage",
      "properties": {}
    },
    {
      "apiVersion": "2018-06-01-preview",
      "name": "[parameters('clusterName')]",
      "type": "Microsoft.HDInsight/clusters",
      "location": "[parameters('location')]",
      "properties": {
        "clusterVersion": "3.6",
        "osType": "Linux",
        "tier": "standard",
        "clusterDefinition": {
          "kind": "spark",
          "componentVersion": {
            "Spark": "2.3"
          },
          "configurations": {
            "gateway": {
              "restAuthCredential.isEnabled": true,
              "restAuthCredential.username": "[parameters('clusterLoginUserName')]",
              "restAuthCredential.password": "[parameters('clusterLoginPassword')]"
            }
          }
        },
        "storageProfile": {
          "storageaccounts": [
            {
              "name": "[replace(replace(reference(resourceId('Microsoft.Storage/storageAccounts', variables('defaultStorageAccount').name), '2019-06-01').primaryEndpoints.blob,'https://',''),'/','')]",
              "isDefault": true,
              "container": "[parameters('clusterName')]",
              "key": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('defaultStorageAccount').name), '2019-06-01').keys[0].value]"
            }
          ]
        },
        "computeProfile": {
          "roles": [
            {
              "name": "headnode",
              "minInstanceCount": 1,
              "targetInstanceCount": 2,
              "hardwareProfile": {
                "vmSize": "[parameters('headNodeSize')]"
              },
              "osProfile": {
                "linuxOperatingSystemProfile": {
                  "username": "[parameters('sshUserName')]",
                  "password": "[parameters('sshPassword')]"
                },
              },
            },
            {
              "name": "workernode",
              "targetInstanceCount": 1,
              "hardwareProfile": {
                "vmSize": "[parameters('workerNodeSize')]"
              },
              "osProfile": {
                "linuxOperatingSystemProfile": {
                  "username": "[parameters('sshUserName')]",
                  "password": "[parameters('sshPassword')]"
                },
              },
            }
          ]
        },
        "minSupportedTlsVersion": "1.2",
        "diskEncryptionProperties": {
          "vaultUri": "[parameters('diskEncryptionVaultUri')]",
          "keyName": "[parameters('diskEncryptionKeyName')]",
          "keyVersion": "[parameters('diskEncryptionKeyVersion')]",
          "msiResourceId": "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('managedIdentityName'))]"
        }
      },
      "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('managedIdentityName'))]": {}
        }
      }
    }
  ]
}

Memutar kunci enkripsi

Anda dapat mengubah kunci enkripsi yang digunakan pada kluster yang sedang berjalan, menggunakan portal Microsoft Azure atau Azure CLI. Untuk operasi ini, kluster harus memiliki akses ke kunci saat ini dan kunci baru yang dimaksudkan, jika tidak, operasi kunci putar akan gagal. Untuk kluster yang dibuat setelah rilis November 2020, Anda dapat memilih apakah Anda ingin kunci baru Anda memiliki versi atau tidak. Untuk kluster yang dibuat sebelum rilis November 2020, Anda harus menggunakan kunci berversi saat memutar kunci enkripsi.

Menggunakan portal Azure

Untuk memutar kunci, Anda memerlukan URI brankas kunci dasar. Setelah Anda melakukannya, buka bagian properti kluster HDInsight di portal dan klik Ubah Kunci di bawah URL Kunci Enkripsi Disk. Masukkan di url kunci baru dan kirim untuk memutar kunci.

rotate disk encryption key.

Menggunakan Azure CLI

Contoh berikut menunjukkan cara memutar kunci enkripsi disk untuk kluster HDInsight yang ada. Untuk informasi selengkapnya, lihat Azure CLI az hdinsight rotate-disk-encryption-key.

az hdinsight rotate-disk-encryption-key \
--encryption-key-name SparkClusterKey \
--encryption-key-version 00000000000000000000000000000000 \
--encryption-vault-uri https://MyKeyVault.vault.azure.net \
--name MyCluster \
--resource-group MyResourceGroup

FAQ untuk enkripsi kunci yang dikelola pelanggan

Bagaimana kluster HDInsight mengakses brankas kunci saya?

HDInsight mengakses instans Azure Key Vault Anda menggunakan identitas terkelola yang Anda kaitkan dengan kluster HDInsight. Identitas terkelola ini dapat dibuat sebelum atau selama pembuatan kluster. Anda juga perlu memberikan akses identitas terkelola ke brankas kunci tempat kunci disimpan.

Apakah fitur ini tersedia untuk semua kluster di HDInsight?

Enkripsi kunci yang dikelola pelanggan tersedia untuk semua jenis kluster kecuali Spark 2.1 dan 2.2.

Bisakah saya menggunakan beberapa kunci untuk mengenkripsi disk atau folder yang berbeda?

Tidak, semua disk terkelola dan disk sumber daya dienkripsi oleh kunci yang sama.

Apa yang terjadi jika kluster kehilangan akses ke brankas kunci atau kunci?

Jika kluster kehilangan akses ke kunci, peringatan akan ditampilkan di portal Apache Ambari. Dalam keadaan ini, Ubah Kunci akan gagal. Setelah akses kunci dipulihkan, peringatan Ambari akan hilang dan operasi seperti rotasi kunci dapat berhasil dilakukan.

key access Ambari alert.

Bagaimana cara memulihkan kluster jika kunci dihapus?

Karena hanya kunci yang diaktifkan "Penghapusan Sementara" yang didukung, jika kunci dipulihkan di brankas kunci, kluster harus mendapatkan kembali akses ke kunci. Untuk memulihkan kunci Azure Key Vault, lihat Undo-AzKeyVaultKeyRemoval atau az-keyvault-key-recover.

Jika kluster mengalami peningkatan skala, apakah node baru akan mendukung kunci yang dikelola pelanggan dengan mulus?

Ya. Kluster membutuhkan akses ke kunci dalam brankas kunci selama peningkatan skala. Kunci yang sama digunakan untuk mengenkripsi disk terkelola dan disk sumber daya dalam kluster.

Apakah kunci yang dikelola pelanggan tersedia di lokasi saya?

Kunci yang dikelola pelanggan HDInsight tersedia di semua awan publik dan awan nasional.

Enkripsi di host menggunakan kunci yang dikelola platform

Aktifkan di portal Microsoft Azure

Enkripsi di host dapat diaktifkan selama pembuatan kluster di portal Microsoft Azure.

Catatan

Saat enkripsi di host diaktifkan, Anda tidak dapat menambahkan aplikasi ke kluster HDInsight Anda dari Azure marketplace.

Enable encryption at host.

Opsi ini memungkinkan enkripsi di host untuk disk data temp VM HDInsight menggunakan PMK. Enkripsi di host hanya didukung pada SKU VM tertentu di wilayah terbatas dan HDInsight mendukung konfigurasi node dan SKU berikut.

Untuk memahami ukuran VM yang tepat untuk kluster HDInsight Anda, lihat Memilih ukuran VM yang tepat untuk kluster Azure HDInsight Anda. VM SKU default untuk node Zookeeper ketika enkripsi di host diaktifkan adalah DS2V2.

Aktifkan menggunakan PowerShell

Cuplikan kode berikut menunjukkan bagaimana Anda dapat membuat kluster Azure HDInsight baru yang memiliki enkripsi di host yang diaktifkan menggunakan PowerShell. Ini menggunakan parameter -EncryptionAtHost $true untuk mengaktifkan fitur tersebut.

$storageAccountResourceGroupName = "Group"
$storageAccountName = "yourstorageacct001"
$storageAccountKey = Get-AzStorageAccountKey `
    -ResourceGroupName $storageAccountResourceGroupName `
    -Name $storageAccountName | %{ $_.Key1 }
$storageContainer = "container002"
# Cluster configuration info
$location = "East US 2"
$clusterResourceGroupName = "Group"
$clusterName = "your-hadoop-002"
$clusterCreds = Get-Credential
# If the cluster's resource group doesn't exist yet, run:
# New-AzResourceGroup -Name $clusterResourceGroupName -Location $location
# Create the cluster
New-AzHDInsightCluster `
    -ClusterType Hadoop `
    -ClusterSizeInNodes 4 `
    -ResourceGroupName $clusterResourceGroupName `
    -ClusterName $clusterName `
    -HttpCredential $clusterCreds `
    -Location $location `
    -DefaultStorageAccountName "$storageAccountName.blob.core.contoso.net" `
    -DefaultStorageAccountKey $storageAccountKey `
    -DefaultStorageContainer $storageContainer `
    -SshCredential $clusterCreds `
    -EncryptionAtHost $true `

Aktifkan menggunakan Azure CLI

Cuplikan kode berikut menunjukkan bagaimana Anda dapat membuat kluster Azure HDInsight baru yang memiliki enkripsi di host yang diaktifkan, menggunakan PowerShell. Ini menggunakan parameter --encryption-at-host true untuk mengaktifkan fitur tersebut.

az hdinsight create -t spark -g MyResourceGroup -n MyCluster \\
-p "yourpass" \\
--storage-account MyStorageAccount --encryption-at-host true

Langkah berikutnya