Azure Container Apps memungkinkan aplikasi Anda menyimpan nilai konfigurasi sensitif dengan aman. Setelah rahasia ditentukan di tingkat aplikasi, nilai aman tersedia untuk revisi di aplikasi kontainer Anda. Selain itu, Anda dapat mereferensikan nilai aman di dalam aturan skala. Untuk informasi tentang menggunakan rahasia dengan Dapr, lihat Integrasi Dapr.
- Rahasia terbatas pada aplikasi, terlepas dari revisi aplikasi tertentu.
- Revisi baru tidak dihasilkan melalui penambahan, penghapusan, atau perubahan rahasia.
- Setiap revisi aplikasi dapat merujuk satu atau lebih rahasia.
- Beberapa revisi dapat mereferensikan rahasia yang sama.
Rahasia yang diperbarui atau dihapus tidak secara otomatis memengaruhi revisi yang ada di aplikasi Anda. Ketika rahasia diperbarui atau dihapus, Anda dapat menanggapi perubahan dalam salah satu dari dua cara:
- Menyebarkan revisi baru.
- Menghidupkan ulang revisi yang sudah ada.
Sebelum Anda menghapus rahasia, gunakan revisi baru yang tidak lagi merujuk pada rahasia lama. Kemudian nonaktifkan semua revisi yang mereferensikan rahasia.
Mendefinisikan rahasia
Rahasia didefinisikan sebagai sekumpulan pasangan nama/nilai. Nilai setiap rahasia ditentukan secara langsung atau sebagai referensi ke rahasia yang disimpan dalam Azure Key Vault.
Catatan
Hindari menentukan nilai rahasia secara langsung di lingkungan produksi. Sebagai gantinya, gunakan referensi ke rahasia yang disimpan di Azure Key Vault, seperti yang dijelaskan dalam nilai rahasia Store di bagian Aplikasi Kontainer.
Simpan nilai rahasia di Aplikasi Kontainer
Berikut ini digunakan saat Anda menentukan rahasia melalui portal, atau melalui opsi baris perintah yang berbeda.
Buka aplikasi kontainer Anda di portal Azure.
Di bawah bagian Keamanan , pilih Rahasia.
Pilih Tambahkan.
Di panel Tambahkan konteks rahasia , masukkan informasi berikut ini:
-
Nama: Nama rahasia.
-
Jenis: Pilih Rahasia Container Apps.
-
Nilai: Nilai rahasia.
Pilih Tambahkan.
Rahasia didefinisikan pada tingkat aplikasi di bagian resources.properties.configuration.secrets.
"resources": [
{
...
"properties": {
"configuration": {
"secrets": [
{
"name": "queue-connection-string",
"value": "<MY-CONNECTION-STRING-VALUE>"
}],
}
}
}
Di sini, string koneksi ke akun penyimpanan antrean dideklarasikan dalam array secrets. Dalam contoh ini, Anda akan mengganti <MY-CONNECTION-STRING-VALUE> dengan nilai string koneksi Anda.
Saat Anda membuat aplikasi kontainer, rahasia ditentukan menggunakan --secrets parameter .
- Parameter menerima sekumpulan pasangan nama/nilai yang dibatasi spasi.
- Tanda sama dengan (
=) memisahkan setiap pasangan.
az containerapp create \
--resource-group "my-resource-group" \
--name queuereader \
--environment "my-environment-name" \
--image demos/queuereader:v1 \
--secrets "queue-connection-string=<CONNECTION_STRING>"
Di sini, string koneksi ke akun penyimpanan antrean dideklarasikan dalam parameter --secrets. Ganti <CONNECTION_STRING> dengan nilai string koneksi Anda.
Saat Anda membuat aplikasi kontainer, rahasia didefinisikan sebagai satu atau beberapa objek Rahasia yang diteruskan melalui ConfigurationSecrets parameter .
$EnvId = (Get-AzContainerAppManagedEnv -ResourceGroupName my-resource-group -EnvName my-environment-name).Id
$TemplateObj = New-AzContainerAppTemplateObject -Name queuereader -Image demos/queuereader:v1
$SecretObj = New-AzContainerAppSecretObject -Name queue-connection-string -Value $QueueConnectionString
$ContainerAppArgs = @{
Name = 'my-resource-group'
Location = '<location>'
ResourceGroupName = 'my-resource-group'
ManagedEnvironmentId = $EnvId
TemplateContainer = $TemplateObj
ConfigurationSecret = $SecretObj
}
New-AzContainerApp @ContainerAppArgs
Di sini, string koneksi ke akun penyimpanan antrian dinyatakan. Nilai untuk queue-connection-string berasal dari variabel lingkungan bernama $QueueConnectionString.
Rahasia referensi dari Key Vault
Saat Anda menentukan rahasia, Anda membuat referensi ke rahasia yang disimpan di Azure Key Vault. Container Apps secara otomatis mengambil nilai rahasia dari Key Vault dan membuatnya tersedia sebagai rahasia di aplikasi kontainer Anda.
Untuk mereferensikan rahasia dari Key Vault, Anda harus terlebih dahulu mengaktifkan identitas terkelola di aplikasi kontainer Anda dan memberikan akses identitas ke rahasia Key Vault.
Untuk mengaktifkan identitas terkelola di aplikasi kontainer Anda, lihat Identitas terkelola.
Untuk memberikan akses ke rahasia Key Vault, berikan peran RBAC Azure Pengguna Rahasia Key Vault kepada identitas terkelola.
Buka aplikasi kontainer Anda di portal Azure.
Di bawah bagian Keamanan , pilih Identitas.
Pada tab Sistem yang ditetapkan, atur Status ke Aktif.
Catatan
Anda juga dapat menggunakan identitas terkelola yang ditetapkan pengguna, yang dapat digunakan kembali di beberapa sumber daya dan bertahan secara independen dari siklus hidup aplikasi. Untuk menggunakannya, pilih tab Pengguna yang ditetapkan dan pilih identitas yang sudah ada.
Pilih Simpan untuk mengaktifkan identitas terkelola yang ditetapkan sistem.
Popup tampaknya mengonfirmasi bahwa Anda ingin mengaktifkan identitas terkelola yang ditetapkan sistem dan mendaftarkan aplikasi kontainer Anda dengan Microsoft Entra ID. Pilih Ya.
Di bawah bagian Keamanan , pilih Rahasia.
Pilih Tambahkan.
Di panel Tambahkan konteks rahasia , masukkan informasi berikut ini:
-
Nama: Nama rahasia.
-
Type: Pilih referensi Key Vault.
-
Key Vault URL rahasia: URI rahasia Anda di Key Vault. URI ini memiliki formulir berikut:
https://<YOUR_KEY_VAULT_NAME>.vault.azure.net/secrets/<YOUR_SECRET_NAME>/<32_DIGIT_HEX_ID>
-
Identitas: Pilih Sistem yang ditetapkan.
Pilih Tambahkan.
Rahasia didefinisikan pada tingkat aplikasi di bagian resources.properties.configuration.secrets.
"resources": [
{
...
"properties": {
"configuration": {
"secrets": [
{
"name": "queue-connection-string",
"keyVaultUrl": "<KEY_VAULT_SECRET_URI>",
"identity": "system"
}],
}
}
}
Di sini, string koneksi ke akun penyimpanan antrean dideklarasikan dalam array secrets. Nilainya secara otomatis diambil dari Key Vault menggunakan identitas yang ditentukan. Untuk menggunakan identitas terkelola pengguna, ganti system dengan ID sumber daya identitas.
Ganti <KEY_VAULT_SECRET_URI> dengan URI rahasia Anda di Key Vault.
Saat Anda membuat aplikasi kontainer, rahasia ditentukan menggunakan --secrets parameter .
- Parameter menerima sekumpulan pasangan nama/nilai yang dibatasi spasi.
- Tanda sama dengan (
=) memisahkan setiap pasangan.
- Untuk menentukan referensi Key Vault, gunakan format
<SECRET_NAME>=keyvaultref:<KEY_VAULT_SECRET_URI>,identityref:<MANAGED_IDENTITY_ID>. Misalnya, queue-connection-string=keyvaultref:https://mykeyvault.vault.azure.net/secrets/queuereader,identityref:/subscriptions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/resourcegroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-identity.
az containerapp create \
--resource-group "my-resource-group" \
--name queuereader \
--environment "my-environment-name" \
--image demos/queuereader:v1 \
--user-assigned "<USER_ASSIGNED_IDENTITY_ID>" \
--secrets "queue-connection-string=keyvaultref:<KEY_VAULT_SECRET_URI>,identityref:<USER_ASSIGNED_IDENTITY_ID>"
Di sini, string koneksi ke akun penyimpanan antrean dideklarasikan dalam parameter --secrets. Ganti <KEY_VAULT_SECRET_URI> dengan URI rahasia Anda di Key Vault. Ganti <USER_ASSIGNED_IDENTITY_ID> dengan ID sumber daya identitas yang ditetapkan pengguna.
Catatan
Identitas yang ditetapkan pengguna harus memiliki akses untuk membaca rahasia di Key Vault. Identitas yang ditetapkan sistem tidak dapat digunakan dengan perintah buat karena tidak tersedia sampai setelah aplikasi kontainer dibuat.
Referensi Secrets dalam Key Vault tidak didukung di PowerShell.
Key Vault URI rahasia dan rotasi rahasia
URI rahasia Key Vault harus dalam salah satu format berikut:
-
https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931: Mereferensikan versi rahasia tertentu.
-
https://myvault.vault.azure.net/secrets/mysecret: Rujuk versi terbaru dari sebuah rahasia.
Jika versi tidak ditentukan dalam URI, maka aplikasi menggunakan versi terbaru yang ada di brankas kunci. Saat versi yang lebih baru tersedia, aplikasi secara otomatis mengambil versi terbaru dalam waktu 30 menit. Setiap revisi aktif yang mereferensikan rahasia dalam variabel lingkungan secara otomatis dimulai ulang untuk mengambil nilai baru.
Untuk kontrol penuh dari versi rahasia mana yang digunakan, tentukan versi dalam URI.
Mereferensikan rahasia dalam variabel lingkungan
Setelah mendeklarasikan rahasia di tingkat aplikasi seperti yang dijelaskan di bagian menentukan rahasia , Anda dapat mereferensikannya dalam variabel lingkungan saat membuat revisi baru di aplikasi kontainer Anda. Ketika variabel lingkungan mereferensikan rahasia, nilainya diisi dengan nilai yang ditentukan dalam rahasia.
Contoh
Contoh berikut menunjukkan aplikasi yang mendeklarasikan string koneksi di tingkat aplikasi. Koneksi ini dirujuk dalam variabel lingkungan kontainer dan dalam aturan skala.
Setelah menentukan rahasia di aplikasi kontainer, Anda dapat mereferensikannya dalam variabel lingkungan saat membuat revisi baru.
Buka aplikasi kontainer Anda di portal Azure.
Di bawah bagian Aplikasi, pilih Revisi dan replika.
Di halaman Revisi dan replika , pilih Buat revisi baru.
Di halaman Buat dan sebarkan revisi baru, di tab Kontainer , di bawah bagian Gambar kontainer, pilih kontainer.
Pilih Edit.
Di panel Edit konteks kontainer , pilih tab Variabel lingkungan .
Pilih Tambahkan.
Masukkan informasi berikut:
-
Nama: Nama variabel lingkungan.
-
Sumber: Pilih Referensi rahasia.
-
Nilai: Pilih rahasia yang Anda tentukan sebelumnya.
Pilih Simpan.
Di halaman Buat dan sebarkan revisi baru, pilih Buat untuk membuat revisi baru.
Dalam contoh ini, string koneksi aplikasi dinyatakan sebagai queue-connection-string dan tersedia di tempat lain di bagian konfigurasi.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "String"
},
"environment_id": {
"type": "String"
},
"key_vault_secret_uri": { ⬅️
"type": "String" ⬅️
} ⬅️
},
"variables": {},
"resources": [
{
"name": "queuereader",
"type": "Microsoft.App/containerApps",
"apiVersion": "2022-03-01",
"kind": "containerapp",
"location": "[parameters('location')]",
"properties": {
"managedEnvironmentId": "[parameters('environment_id')]",
"configuration": {
"activeRevisionsMode": "single",
"secrets": [ ⬅️
{ ⬅️
"name": "queue-connection-string", ⬅️
"keyVaultUrl": "[parameters('key_vault_secret_uri')", ⬅️
"identity": "system" ⬅️
}] ⬅️
},
"template": {
"containers": [
{
"image": "myregistry/myQueueApp:v1",
"name": "myQueueApp",
"env": [
{
"name": "QueueName",
"value": "myqueue"
},
{
"name": "ConnectionString", ⬅️
"secretRef": "queue-connection-string" ⬅️
}
]
}
],
"scale": {
"minReplicas": 0,
"maxReplicas": 10,
"rules": [
{
"name": "myqueuerule",
"azureQueue": {
"queueName": "demoqueue",
"queueLength": 100,
"auth": [
{
"secretRef": "queue-connection-string", ⬅️
"triggerParameter": "connection" ⬅️
}
]
}
}
]
}
}
}
}]
}
Di sini, variabel lingkungan bernama connection-string mendapatkan nilainya dari rahasia queue-connection-string tingkat aplikasi. Selain itu, konfigurasi autentikasi aturan skala Azure Queue Storage menggunakan rahasia queue-connection-string untuk menentukan koneksinya.
Untuk menghindari menyimpan nilai rahasia ke dalam kontrol sumber dengan templat ARM Anda, tentukan nilai rahasia sebagai parameter templat ARM.
Dalam contoh ini, Anda membuat aplikasi kontainer menggunakan Azure CLI dengan rahasia yang direferensikan dalam variabel lingkungan. Untuk mereferensikan rahasia dalam variabel lingkungan di Azure CLI, atur nilainya ke secretref:, diikuti dengan nama rahasia.
az containerapp create \
--resource-group "my-resource-group" \
--name myQueueApp \
--environment "my-environment-name" \
--image demos/myQueueApp:v1 \
--user-assigned "<USER_ASSIGNED_IDENTITY_ID>" \
--secrets "queue-connection-string=keyvaultref:<KEY_VAULT_SECRET_URI>,identityref:<USER_ASSIGNED_IDENTITY_ID>" \
--env-vars "QueueName=myqueue" "ConnectionString=secretref:queue-connection-string"
Di sini, variabel lingkungan bernama connection-string mendapatkan nilainya dari rahasia queue-connection-string tingkat aplikasi.
Referensi Secrets dalam Key Vault tidak didukung di PowerShell.
Dalam contoh ini, Anda membuat kontainer menggunakan Azure PowerShell dengan rahasia yang direferensikan dalam variabel lingkungan. Untuk mereferensikan rahasia dalam variabel lingkungan di PowerShell, atur nilainya ke secretref:, diikuti dengan nama rahasia.
$EnvId = (Get-AzContainerAppManagedEnv -ResourceGroupName my-resource-group -EnvName my-environment-name).Id
$SecretObj = New-AzContainerAppSecretObject -Name queue-connection-string -Value $QueueConnectionString
$EnvVarObjQueue = New-AzContainerAppEnvironmentVarObject -Name QueueName -Value myqueue
$EnvVarObjConn = New-AzContainerAppEnvironmentVarObject -Name ConnectionString -SecretRef queue-connection-string -Value secretref
$TemplateObj = New-AzContainerAppTemplateObject -Name myQueueApp -Image demos/myQueueApp:v1 -Env $EnvVarObjQueue, $EnvVarObjConn
$ContainerAppArgs = @{
Name = 'myQueueApp'
Location = '<location>'
ResourceGroupName = 'my-resource-group'
ManagedEnvironmentId = $EnvId
TemplateContainer = $TemplateObj
ConfigurationSecret = $SecretObj
}
New-AzContainerApp @ContainerAppArgs
Di sini, variabel lingkungan bernama ConnectionString mendapatkan nilainya dari rahasia $QueueConnectionString tingkat aplikasi.
Memasang kunci rahasia dalam volume data
Setelah mendeklarasikan rahasia di tingkat aplikasi seperti yang dijelaskan di bagian menentukan rahasia , Anda dapat mereferensikannya dalam pemasangan volume saat membuat revisi baru di aplikasi kontainer Anda. Saat Anda memasang rahasia dalam volume, setiap rahasia dipasang sebagai file dalam volume. Nama file adalah nama rahasia, dan konten file adalah nilai rahasia. Anda dapat memuat semua rahasia dalam pemasangan volume, atau Anda dapat memuat rahasia tertentu.
Contoh
Setelah mengonfigurasi rahasia di aplikasi kontainer, Anda dapat mengacu padanya dalam mount volume saat membuat revisi baru.
Buka aplikasi kontainer Anda di portal Azure.
Di bawah bagian Aplikasi, pilih Revisi dan replika.
Di halaman Revisi dan replika , pilih Buat revisi baru.
Di halaman Buat dan sebarkan revisi baru, di tab Kontainer , di bawah bagian Gambar kontainer, pilih kontainer.
Pilih Edit.
Di panel Edit konteks sebuah kontainer pilih tab Pemasangan Volume.
Pilih Buat volume baru.
Di panel Tambahkan konteks volume , masukkan informasi berikut ini:
-
Tipe volume: Pilih
Secret.
-
Nama:
mysecrets
-
Sambungkan semua data rahasia: diaktifkan
Catatan
Jika Anda ingin memuat rahasia tertentu, nonaktifkan Pasang semua rahasia dan pilih rahasia yang ingin Anda muat.
Pilih Tambahkan.
Di panel Mengedit konteks kontainer, di bawah Nama Volume, pilih mysecrets.
Di bawah Jalur pemasangan, masukkan /mnt/secrets.
Pilih Simpan.
Di halaman Buat dan Sebarkan Revisi Baru, pilih Buat untuk membuat revisi baru dengan penyandian volume.
Dalam contoh ini, dua rahasia dideklarasikan di tingkat aplikasi. Rahasia ini dipasang dalam volume bernama mysecrets jenis Secret. Volume dipasang di jalur /mnt/secrets. Aplikasi kemudian dapat mereferensikan rahasia dalam pemasangan volume.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "String"
},
"environment_id": {
"type": "String"
},
"key_vault_secret_uri": {
"type": "Securestring"
},
"api-key": {
"type": "Securestring"
}
},
"variables": {},
"resources": [
{
"name": "queuereader",
"type": "Microsoft.App/containerApps",
"apiVersion": "2022-11-01-preview",
"kind": "containerapp",
"location": "[parameters('location')]",
"properties": {
"managedEnvironmentId": "[parameters('environment_id')]",
"configuration": {
"activeRevisionsMode": "single",
"secrets": [
{
"name": "queue-connection-string",
"keyVaultUrl": "[parameters('key_vault_secret_uri')",
"identity": "system"
},
{
"name": "api-key",
"value": "[parameters('api-key')]"
}
]
},
"template": {
"containers": [
{
"image": "myregistry/myQueueApp:v1",
"name": "myQueueApp",
"volumeMounts": [
{
"name": "mysecrets",
"mountPath": "/mnt/secrets"
}
]
}
],
"volumes": [
{
"name": "mysecrets",
"storageType": "Secret"
}
]
}
}
}]
}
Untuk memuat rahasia tertentu dan menentukan jalurnya dalam volume yang dipasang, Anda menentukan rahasia dalam secrets array objek volume. Contoh berikut menunjukkan cara memuat hanya rahasia queue-connection-string dalam pemasangan volume mysecrets dengan nama file connection-string.txt.
{
"properties": {
...
"configuration": {
...
"secrets": [
{
"name": "queue-connection-string",
"keyVaultUrl": "[parameters('key_vault_secret_uri')",
"identity": "system"
},
{
"name": "api-key",
"value": "[parameters('api-key')]"
}
]
},
"template": {
"containers": [
{
"image": "myregistry/myQueueApp:v1",
"name": "myQueueApp",
"volumeMounts": [
{
"name": "mysecrets",
"mountPath": "/mnt/secrets"
}
]
}
],
"volumes": [
{
"name": "mysecrets",
"storageType": "Secret",
"secrets": [
{
"secretRef": "queue-connection-string",
"path": "connection-string.txt"
}
]
}
]
}
...
}
...
}
Di aplikasi, Anda dapat membaca rahasia dari file yang terletak di /mnt/secrets/connection-string.txt.
Dalam contoh ini, dua rahasia dideklarasikan di tingkat aplikasi. Rahasia ini dipasang dalam volume bernama mysecrets jenis Secret. Volume dipasang di jalur /mnt/secrets. Aplikasi kemudian dapat membaca rahasia sebagai file dalam pemasangan volume penyimpanan.
az containerapp create \
--resource-group "my-resource-group" \
--name myQueueApp \
--environment "my-environment-name" \
--image demos/myQueueApp:v1 \
--user-assigned "<USER_ASSIGNED_IDENTITY_ID>" \
--secrets "queue-connection-string=keyvaultref:<KEY_VAULT_SECRET_URI>,identityref:<USER_ASSIGNED_IDENTITY_ID>" "api-key=$API_KEY" \
--secret-volume-mount "/mnt/secrets"
Untuk memuat rahasia tertentu dan menentukan jalurnya dalam volume yang dipasang, tentukan aplikasi Anda menggunakan YAML.
Memasang rahasia sebagai volume tidak didukung di PowerShell.
Memecahkan masalah referensi Key Vault
Saat mereferensikan rahasia dari Azure Key Vault, Anda mungkin mengalami masalah selama pengambilan atau sinkronisasi rahasia. Berikut adalah kesalahan dan resolusi umum:
| Kesalahan |
Penyebab |
Resolution |
| Identitas terkelola tidak diaktifkan |
Aplikasi kontainer tidak memiliki identitas terkelola yang ditetapkan. |
Aktifkan identitas terkelola yang ditetapkan sistem atau ditetapkan pengguna di aplikasi kontainer Anda. Lihat Identitas terkelola. |
| Identitas tidak ditemukan |
Identitas terkelola yang ditentukan tidak ada atau tidak ditetapkan ke aplikasi kontainer. |
Pastikan identitas telah dibuat dan ditetapkan ke aplikasi kontainer di bagian Identitas. |
| Rahasia dinonaktifkan di Key Vault |
Rahasia dinonaktifkan di sumber daya Key Vault. |
Buka Key Vault Anda di portal Azure dan aktifkan rahasia. |
| Autentikasi gagal |
Identitas terkelola tidak memiliki izin yang diperlukan untuk membaca rahasia. |
Berikan peran Key Vault Secrets User ke identitas terkelola pada Key Vault Anda. Lihat Pengguna Rahasia Key Vault. |
| Izin RBAC ditolak |
Identitas terkelola tidak memiliki cukup izin untuk mengakses Key Vault. |
Periksa penetapan peran RBAC pada Key Vault dan pastikan menyertakan izin baca untuk data rahasia. |
Langkah berikutnya