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
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat untuk Bash di Azure Cloud Shell.
Jika Anda lebih memilih untuk menjalankan perintah referensi CLI secara lokal, pasang Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah login az. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az.
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.
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 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.
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
, aturapiVersion
ke2019-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 PortalkeyName
: nama kunci yang dibuat sebelumnyakeyVersion
: 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 nilaiStandard
. Propertisku
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.
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
, aturapiVersion
ke2022-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 PortalkeyName
: nama kunci yang dibuat sebelumnyakeyVersion
: 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 nilaiStandard
. Propertisku
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 dalamencryptionProperties
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.