Mengenkripsi data penyebaran

Saat menjalankan sumber daya Azure Container Instances (ACI) di cloud, layanan ACI mengumpulkan dan mempertahankan data yang terkait dengan kontainer Anda. ACI secara otomatis mengenkripsi data ini ketika dipertahankan di cloud. Enkripsi melindungi data dan membantu Anda memenuhi komitmen keamanan dan kepatuhan organisasi Anda. ACI juga memberikan opsi untuk mengenkripsi data ini dengan kunci Anda sendiri, memberi Anda kontrol yang lebih besar atas data yang terkait dengan penyebaran ACI.

Tentang enkripsi data ACI

Data di ACI dienkripsi dan didekripsi menggunakan enkripsi AES 256-bit. Enkripsi ini diaktifkan untuk semua penyebaran ACI, dan Anda tidak perlu memodifikasi penyebaran atau kontainer Anda untuk memanfaatkan enkripsi ini. Enkripsi ini mencakup metadata tentang penyebaran, variabel lingkungan, kunci yang diteruskan ke kontainer, dan log yang dipertahankan setelah kontainer dihentikan sehingga Anda masih dapat melihatnya. Enkripsi tidak memengaruhi kinerja grup kontainer Anda, dan tidak ada biaya tambahan untuk enkripsi.

Anda dapat mengandalkan kunci yang dikelola Microsoft untuk enkripsi data kontainer, atau dapat mengelola enkripsi dengan kunci Anda sendiri. Tabel berikut membandingkan opsi-opsi ini:

Kunci yang dikelola Microsoft Kunci yang dikelola pelanggan
Operasi enkripsi/dekripsi Azure Azure
Penyimpanan kunci Penyimpanan kunci Microsoft Azure Key Vault
Tanggung jawab rotasi kunci Microsoft Pelanggan
Akses kunci Hanya Microsoft Microsoft, Customer

Artikel ini meninjau dua alur untuk mengenkripsi data dengan kunci yang dikelola pelanggan:

  • Mengenkripsi data dengan kunci yang dikelola pelanggan yang disimpan di Azure Key Vault standar
  • Enkripsi data dengan kunci yang dikelola pelanggan yang disimpan dalam Key Vault Azure yang dilindungi jaringan dengan Layanan Tepercaya diaktifkan.

Mengenkripsi data dengan kunci yang dikelola pelanggan yang disimpan di Azure Key Vault standar

Prasyarat

Membuat Perwakilan Layanan ( Service Principal (SP)) untuk ACI

Langkah pertama adalah memastikan bahwa penyewa Azure Anda memiliki perwakilan layanan yang ditetapkan untuk memberikan izin ke layanan Azure Container Instances.

Penting

Untuk menjalankan perintah berikut dan membuat perwakilan layanan dengan lancar, konfirmasikan bahwa Anda memiliki izin untuk membuat perwakilan layanan di penyewa Anda.

Perintah CLI berikut ini akan menyiapkan SP ACI di lingkungan Azure Anda:

az ad sp create --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9

Output dari menjalankan perintah ini akan memperlihatkan kepada Anda perwakilan layanan yang telah disiapkan dengan "displayName": "Layanan Azure Container Instance."

Jika Anda tidak berhasil membuat perwakilan layanan:

  • konfirmasikan bahwa Anda memiliki izin untuk melakukannya di penyewa Anda
  • periksa untuk melihat apakah perwakilan layanan sudah ada di penyewa Anda untuk disebarkan ke ACI. Anda dapat melakukannya dengan menjalankan az ad sp show --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9 dan menggunakan perwakilan layanan tersebut sebagai gantinya

Membuat sumber daya Key Vault

Buat Azure Key Vault menggunakan portal Microsoft Azure, Azure CLI, atau Azure PowerShell.

Untuk properti brankas kunci Anda, gunakan panduan berikut:

  • Nama: Nama yang unik diperlukan.
  • Langganan: Pilih langganan.
  • Di Grup Sumber Daya, pilih grup sumber daya yang sudah ada, atau buat baru dan masukkan nama grup sumber daya.
  • Di menu tarik-turun Lokasi, pilih lokasi.
  • Anda dapat meninggalkan opsi lain dengan default-nya atau memilih berdasarkan persyaratan tambahan.

Penting

Saat menggunakan kunci yang dikelola pelanggan untuk mengenkripsi templat penyebaran ACI, sebaiknya dua properti berikut diatur di brankas kunci, Penghapusan Sementara dan Jangan Dihapus Menyeluruh. Properti ini tidak diaktifkan secara default, tetapi dapat diaktifkan menggunakan PowerShell atau Azure CLI di brankas kunci baru atau yang sudah ada.

Membuat kunci baru

Setelah brankas kunci Anda dibuat, navigasi ke sumber daya di portal Microsoft Azure. Di menu navigasi kiri bilah sumber daya, di Pengaturan, klik Kunci. Di tampilan untuk "Kunci", klik "Buat/Impor" untuk membuat kunci baru. Gunakan Nama unik apa pun untuk kunci ini, dan preferensi lainnya berdasarkan persyaratan Anda.

Membuat kunci baru

Mengatur kebijakan akses

Buat kebijakan akses baru untuk memungkinkan layanan ACI mengakses Kunci Anda.

  • Setelah kunci Anda dibuat, kembali ke bilah sumber daya brankas kunci, di Pengaturan, klik Kebijakan Akses.
  • Di halaman "Kebijakan Akses" untuk brankas kunci, klik Tambahkan Kebijakan Akses.
  • Atur Izin Kunci untuk menyertakan Dapatkan dan Buka KunciAtur izin kunci
  • Untuk Pilih Perwakilan, pilih Layanan Azure Container Instance
  • Klik Tambahkan di bagian bawah

Kebijakan akses sekarang akan muncul di kebijakan akses brankas kunci Anda.

Membuat kebijakan akses

Memodifikasi templat penyebaran JSON Anda

Penting

Mengenkripsi data penyebaran dengan kunci yang dikelola pelanggan tersedia dalam versi API terbaru (2019-12-01) yang saat ini diluncurkan. Tetapkan versi API ini di templat penyebaran Anda. Jika Anda mengalami masalah dengan ini, silakan hubungi Dukungan Azure.

Setelah kunci brankas kunci dan kebijakan akses disiapkan, tambahkan properti berikut ke templat penyebaran ACI Anda. Pelajari selengkapnya tentang menyebarkan sumber daya ACI dengan templat dalam Tutorial: Menyebarkan grup multikontainer menggunakan templat Resource Manager.

  • Di resources, atur apiVersion ke 2019-12-01.
  • Di bagian properti grup kontainer dari templat penyebaran, tambahkan encryptionProperties, yang berisi nilai berikut:
    • vaultBaseUrl: Nama DNS brankas kunci Anda, dapat ditemukan di bilah ringkasan sumber daya brankas kunci di Portal
    • keyName: nama kunci yang dibuat sebelumnya
    • keyVersion: versi kunci saat ini. Ini dapat ditemukan dengan mengklik kunci itu sendiri (di "Kunci" di bagian Pengaturan sumber daya brankas kunci Anda)
  • Di properti grup kontainer, tambahkan sku properti dengan nilai Standard. Properti sku diperlukan dalam API versi 2019-12-01.

Cuplikan templat berikut memperlihatkan properti tambahan ini untuk mengenkripsi data penyebaran:

[...]
"resources": [
    {
        "name": "[parameters('containerGroupName')]",
        "type": "Microsoft.ContainerInstance/containerGroups",
        "apiVersion": "2019-12-01",
        "location": "[resourceGroup().location]",    
        "properties": {
            "encryptionProperties": {
                "vaultBaseUrl": "https://example.vault.azure.net",
                "keyName": "acikey",
                "keyVersion": "xxxxxxxxxxxxxxxx"
            },
            "sku": "Standard",
            "containers": {
                [...]
            }
        }
    }
]

Berikut ini adalah templat lengkap, diambil dari templat di Tutorial: Menyebarkan grup multikontainer menggunakan templat Resource Manager.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "containerGroupName": {
      "type": "string",
      "defaultValue": "myContainerGroup",
      "metadata": {
        "description": "Container Group name."
      }
    }
  },
  "variables": {
    "container1name": "aci-tutorial-app",
    "container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
    "container2name": "aci-tutorial-sidecar",
    "container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
  },
  "resources": [
    {
      "name": "[parameters('containerGroupName')]",
      "type": "Microsoft.ContainerInstance/containerGroups",
      "apiVersion": "2019-12-01",
      "location": "[resourceGroup().location]",
      "properties": {
        "encryptionProperties": {
            "vaultBaseUrl": "https://example.vault.azure.net",
            "keyName": "acikey",
            "keyVersion": "xxxxxxxxxxxxxxxx"
        },
        "sku": "Standard",  
        "containers": [
          {
            "name": "[variables('container1name')]",
            "properties": {
              "image": "[variables('container1image')]",
              "resources": {
                "requests": {
                  "cpu": 1,
                  "memoryInGb": 1.5
                }
              },
              "ports": [
                {
                  "port": 80
                },
                {
                  "port": 8080
                }
              ]
            }
          },
          {
            "name": "[variables('container2name')]",
            "properties": {
              "image": "[variables('container2image')]",
              "resources": {
                "requests": {
                  "cpu": 1,
                  "memoryInGb": 1.5
                }
              }
            }
          }
        ],
        "osType": "Linux",
        "ipAddress": {
          "type": "Public",
          "ports": [
            {
              "protocol": "tcp",
              "port": "80"
            },
            {
                "protocol": "tcp",
                "port": "8080"
            }
          ]
        }
      }
    }
  ],
  "outputs": {
    "containerIPv4Address": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
    }
  }
}

Menyebarkan sumber daya Anda

Jika file templat dibuat dan diedit di desktop, Anda dapat mengunggahnya ke direktori Cloud Shell dengan menyeret file tersebut ke dalamnya.

Buat grup sumber daya dengan perintah az group create.

az group create --name myResourceGroup --location eastus

Sebarkan templat dengan perintah az deployment group create.

az deployment group create --resource-group myResourceGroup --template-file deployment-template.json

Dalam beberapa detik, Anda akan menerima respons awal dari Azure. Setelah penyebaran selesai, semua data yang terkait dengannya yang dipertahankan oleh layanan ACI akan dienkripsi dengan kunci yang Anda berikan.

Mengenkripsi data dengan kunci yang dikelola pelanggan dalam Key Vault Azure yang dilindungi jaringan dengan Layanan Tepercaya diaktifkan

Membuat sumber daya Key Vault

Buat Azure Key Vault menggunakan portal Microsoft Azure, Azure CLI, atau Azure PowerShell. Untuk memulai, jangan terapkan batasan jaringan apa pun sehingga kita dapat menambahkan kunci yang diperlukan ke vault. Pada langkah-langkah berikutnya, kami akan menambahkan batasan jaringan dan mengaktifkan layanan tepercaya.

Untuk properti brankas kunci Anda, gunakan panduan berikut:

  • Nama: Nama yang unik diperlukan.
  • Langganan: Pilih langganan.
  • Di Grup Sumber Daya, pilih grup sumber daya yang sudah ada, atau buat baru dan masukkan nama grup sumber daya.
  • Di menu tarik-turun Lokasi, pilih lokasi.
  • Anda dapat meninggalkan opsi lain dengan default-nya atau memilih berdasarkan persyaratan tambahan.

Penting

Saat menggunakan kunci yang dikelola pelanggan untuk mengenkripsi templat penyebaran ACI, sebaiknya dua properti berikut diatur di brankas kunci, Penghapusan Sementara dan Jangan Dihapus Menyeluruh. Properti ini tidak diaktifkan secara default, tetapi dapat diaktifkan menggunakan PowerShell atau Azure CLI di brankas kunci baru atau yang sudah ada.

Membuat kunci baru

Setelah brankas kunci Anda dibuat, navigasi ke sumber daya di portal Microsoft Azure. Di menu navigasi kiri bilah sumber daya, di Pengaturan, klik Kunci. Di tampilan untuk "Kunci", klik "Buat/Impor" untuk membuat kunci baru. Gunakan Nama unik apa pun untuk kunci ini, dan preferensi lainnya berdasarkan persyaratan Anda. Pastikan untuk mengambil nama dan versi kunci untuk langkah-langkah berikutnya.

Cuplikan layar pengaturan pembuatan kunci, PNG.

Membuat identitas terkelola yang ditetapkan pengguna untuk grup kontainer Anda

Buat identitas di langganan Anda menggunakan perintah buat identitas az. Anda dapat menggunakan grup sumber daya yang sama dengan yang digunakan untuk membuat brankas kunci, atau menggunakan yang berbeda.

az identity create \
  --resource-group myResourceGroup \
  --name myACIId

Untuk menggunakan identitas dalam langkah-langkah berikut, gunakan perintah az identity show untuk menyimpan ID perwakilan layanan dan ID sumber daya identitas dalam variabel.

# Get service principal ID of the user-assigned identity
spID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACIId \
  --query principalId --output tsv)

Mengatur kebijakan akses

Buat kebijakan akses baru untuk mengizinkan identitas yang ditetapkan pengguna mengakses dan membuka bungkus kunci Anda untuk tujuan enkripsi.

az keyvault set-policy \
    --name mykeyvault \
    --resource-group myResourceGroup \
    --object-id $spID \
    --key-permissions get unwrapKey

Mengubah izin jaringan Azure Key Vault

Perintah berikut menyiapkan Azure Firewall untuk Azure Key Vault Anda dan mengizinkan Layanan Tepercaya Azure seperti akses ACI.

az keyvault update \
    --name mykeyvault \
    --resource-group myResourceGroup \
    --default-action Deny
az keyvault update \
    --name mykeyvault \
    --resource-group myResourceGroup \
    --bypass AzureServices

Memodifikasi templat penyebaran JSON Anda

Penting

Mengenkripsi data penyebaran dengan kunci yang dikelola pelanggan tersedia dalam versi API 2022-09-01 atau yang lebih baru. Versi API 2022-09-01 hanya tersedia melalui ARM atau REST. Jika Anda mengalami masalah dengan ini, silakan hubungi Dukungan Azure. Setelah kunci brankas kunci dan kebijakan akses disiapkan, tambahkan properti berikut ke templat penyebaran ACI Anda. Pelajari selengkapnya tentang menyebarkan sumber daya ACI dengan templat dalam Tutorial: Menyebarkan grup multikontainer menggunakan templat Resource Manager.

  • Di resources, atur apiVersion ke 2022-09-01.
  • Di bagian properti grup kontainer dari templat penyebaran, tambahkan encryptionProperties, yang berisi nilai berikut:
    • vaultBaseUrl: Nama DNS brankas kunci Anda. Ini dapat ditemukan pada bilah gambaran umum sumber daya brankas kunci di Portal
    • keyName: nama kunci yang dibuat sebelumnya
    • keyVersion: versi kunci saat ini. Ini dapat ditemukan dengan mengklik kunci itu sendiri (di "Kunci" di bagian Pengaturan sumber daya brankas kunci Anda)
    • identity: ini adalah URI sumber daya dari instans Identitas Terkelola yang dibuat sebelumnya
  • Di properti grup kontainer, tambahkan sku properti dengan nilai Standard. Properti sku diperlukan dalam API versi 2022-09-01.
  • Di bawah sumber daya, tambahkan objek yang identity diperlukan untuk menggunakan Identitas Terkelola dengan ACI, yang berisi nilai berikut:
    • type: jenis identitas yang digunakan (baik yang ditetapkan pengguna atau ditetapkan sistem). Kasus ini akan diatur ke "UserAssigned"
    • userAssignedIdentities: resourceURI dari identitas yang ditetapkan pengguna yang sama yang digunakan di atas dalam encryptionProperties objek .

Cuplikan templat berikut memperlihatkan properti tambahan ini untuk mengenkripsi data penyebaran:

[...]
"resources": [
    {
        "name": "[parameters('containerGroupName')]",
        "type": "Microsoft.ContainerInstance/containerGroups",
        "apiVersion": "2019-12-01",
        "location": "[resourceGroup().location]",    
        "identity": {
         "type": "UserAssigned",
         "userAssignedIdentities": {
           "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {}
         }
        },
        "properties": {
            "encryptionProperties": {
                "vaultBaseUrl": "https://example.vault.azure.net",
                "keyName": "acikey",
                "keyVersion": "xxxxxxxxxxxxxxxx",
                "identity": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId"
            },
            "sku": "Standard",
            "containers": {
                [...]
            }
        }
    }
]

Berikut ini adalah templat lengkap, diambil dari templat di Tutorial: Menyebarkan grup multikontainer menggunakan templat Resource Manager.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "containerGroupName": {
      "type": "string",
      "defaultValue": "myContainerGroup",
      "metadata": {
        "description": "Container Group name."
      }
    }
  },
  "variables": {
    "container1name": "aci-tutorial-app",
    "container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
    "container2name": "aci-tutorial-sidecar",
    "container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
  },
  "resources": [
    {
      "name": "[parameters('containerGroupName')]",
      "type": "Microsoft.ContainerInstance/containerGroups",
      "apiVersion": "2022-09-01",
      "location": "[resourceGroup().location]",
      "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {}
        }
      },
      "properties": {
        "encryptionProperties": {
          "vaultBaseUrl": "https://example.vault.azure.net",
          "keyName": "acikey",
          "keyVersion": "xxxxxxxxxxxxxxxx",
          "identity": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId"
        },
        "sku": "Standard",
        "containers": [
          {
            "name": "[variables('container1name')]",
            "properties": {
              "image": "[variables('container1image')]",
              "resources": {
                "requests": {
                  "cpu": 1,
                  "memoryInGb": 1.5
                }
              },
              "ports": [
                {
                  "port": 80
                },
                {
                  "port": 8080
                }
              ]
            }
          },
          {
            "name": "[variables('container2name')]",
            "properties": {
              "image": "[variables('container2image')]",
              "resources": {
                "requests": {
                  "cpu": 1,
                  "memoryInGb": 1.5
                }
              }
            }
          }
        ],
        "osType": "Linux",
        "ipAddress": {
          "type": "Public",
          "ports": [
            {
              "protocol": "tcp",
              "port": "80"
            },
            {
              "protocol": "tcp",
              "port": "8080"
            }
          ]
        }
      }
    }
  ],
  "outputs": {
    "containerIPv4Address": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
    }
  }
}

Menyebarkan sumber daya Anda

Jika file templat dibuat dan diedit di desktop, Anda dapat mengunggahnya ke direktori Cloud Shell dengan menyeret file tersebut ke dalamnya.

Buat grup sumber daya dengan perintah az group create.

az group create --name myResourceGroup --location eastus

Sebarkan templat dengan perintah az deployment group create.

az deployment group create --resource-group myResourceGroup --template-file deployment-template.json

Dalam beberapa detik, Anda akan menerima respons awal dari Azure. Setelah penyebaran selesai, semua data yang terkait dengannya yang dipertahankan oleh layanan ACI akan dienkripsi dengan kunci yang Anda berikan.