Azure Container Apps يسمح لتطبيقك بتخزين قيم التكوين الحساسة بشكل آمن. بمجرد تعريف الأسرار على مستوى التطبيق، تتوفر القيم الآمنة للمراجعات في تطبيقات الحاوية الخاصة بك. بالإضافة إلى ذلك، يمكنك الرجوع إلى القيم المؤمنة داخل قواعد المقياس. للحصول على معلومات حول استخدام الأسرار مع Dapr، راجع تكامل Dapr.
- يتم تحديد نطاق الأسرار لتطبيق ما، خارج أي مراجعة محددة للتطبيق.
- لا يتم إنشاء المراجعات الجديدة من خلال إضافة الأسرار أو إزالتها أو تغييرها.
- يمكن لكل مراجعة تطبيق الرجوع إلى سر واحد أو أكثر.
- يمكن أن تشير المراجعات المتعددة إلى نفس الأسرار.
لا يؤثر السر المحدث أو المحذوف تلقائيا على المراجعات الموجودة في تطبيقك. عند تحديث سر أو حذفه، يمكنك الاستجابة للتغييرات بإحدى طريقتين:
- نشر مراجعة جديدة.
- أعد تشغيل مراجعة موجودة.
قبل حذف سر، انشر مراجعة جديدة لم تعد تشير إلى السر القديم. ثم قم بإلغاء تنشيط كافة المراجعات التي تشير إلى السر.
تعريف الأسرار
يتم تعريف الأسرار على أنها مجموعة من أزواج الاسم/القيمة. يتم تحديد قيمة كل سر مباشرة أو كمرجع لسر مخزن في Azure Key Vault.
تخزين القيمة السرية في Container Apps
يستخدم التالي عند تعريف الأسرار عبر البوابة، أو عبر خيارات سطر أوامر مختلفة.
اذهب إلى تطبيق الحاوية الخاص بك في بوابة Azure.
في قسم الأمان ، اختر الأسرار.
حدد إضافة.
في جزء إضافة سياق سري ، أدخل المعلومات التالية:
-
الاسم: اسم السر.
-
النوع: حدد Container Apps Secret.
-
القيمة: قيمة السر.
حدد إضافة.
يتم تعريف الأسرار على مستوى التطبيق في resources.properties.configuration.secrets القسم.
"resources": [
{
...
"properties": {
"configuration": {
"secrets": [
{
"name": "queue-connection-string",
"value": "<MY-CONNECTION-STRING-VALUE>"
}],
}
}
}
هنا، يتم الإعلان عن سلسلة الاتصال إلى حساب تخزين الطابور في مصفوفة secrets. في هذا المثال، ستستبدل <MY-CONNECTION-STRING-VALUE> بقيمة سلسلة الاتصال الخاصة بك.
عند إنشاء تطبيق حاوية، يتم تعريف الأسرار باستخدام المعلمة --secrets .
- تقبل المعلمة مجموعة محددة بمسافة من أزواج الاسم/القيمة.
- تحدد علامة المساواة (
=) كل زوج.
az containerapp create \
--resource-group "my-resource-group" \
--name queuereader \
--environment "my-environment-name" \
--image demos/queuereader:v1 \
--secrets "queue-connection-string=<CONNECTION_STRING>"
هنا، يتم الإعلان عن سلسلة الاتصال إلى حساب تخزين في قائمة الانتظار في معامل --secrets. استبدل <CONNECTION_STRING> بقيمة سلسلة الاتصال الخاصة بك.
عند إنشاء تطبيق حاوية، يتم تعريف الأسرار على أنها كائن سري واحد أو أكثر يتم تمريره من خلال المعلمة ConfigurationSecrets .
$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
هنا، يتم إعلان سلسلة الاتصال إلى حساب تخزين في قائمة الانتظار. تأتي القيمة من queue-connection-string متغير بيئة يسمى $QueueConnectionString.
سر مرجعي من Key Vault
عندما تحدد سرا، فإنك تنشئ مرجعا لسر مخزن في Azure Key Vault. تقوم تطبيقات الحاويات تلقائيا باسترجاع القيمة السرية من Key Vault وتجعلها متاحة كسر في تطبيق الحاوية الخاص بك.
للرجوع إلى سر من Key Vault، يجب عليك أولا تفعيل الهوية المدارة في تطبيق الحاوية الخاص بك ومنح الهوية الوصول إلى أسرار Key Vault.
لتمكين الهوية المدارة في تطبيق الحاوية، راجع الهويات المدارة.
لمنح الوصول إلى Key Vault الأسرار، امنح دور RBAC Azure Key Vault مستخدم الأسرار للهوية المدارة.
اذهب إلى تطبيق الحاوية الخاص بك في بوابة Azure.
في قسم الأمان ، اختر الهوية.
في علامة التبويب تعيين النظام، قم بتعيين الحالة إلى تشغيل.
إشعار
يمكنك أيضا استخدام هوية مدارة معينة من قبل المستخدم، والتي يمكن إعادة استخدامها عبر موارد متعددة وتستمر بشكل مستقل عن دورة حياة التطبيق. لاستخدامه، حدد علامة التبويب معين من قبل المستخدم واختر هوية موجودة.
حدد حفظ لتمكين الهوية المدارة المعينة من قبل النظام.
تظهر نافذة منبثقة تؤكد أنك تريد تفعيل الهوية المدارة المعينة للنظام وتسجيل تطبيق الحاوية باستخدام Microsoft Entra ID. حدد نعم.
في قسم الأمان ، اختر الأسرار.
حدد إضافة.
في جزء إضافة سياق سري ، أدخل المعلومات التالية:
-
الاسم: اسم السر.
-
Type: اختر Key Vault مرجع.
-
Key Vault الرابط السري: الرابط السري لسرك في Key Vault. يحتوي عنوان URI هذا على النموذج التالي:
https://<YOUR_KEY_VAULT_NAME>.vault.azure.net/secrets/<YOUR_SECRET_NAME>/<32_DIGIT_HEX_ID>
-
الهوية: حدد النظام المعين.
حدد إضافة.
يتم تعريف الأسرار على مستوى التطبيق في resources.properties.configuration.secrets القسم.
"resources": [
{
...
"properties": {
"configuration": {
"secrets": [
{
"name": "queue-connection-string",
"keyVaultUrl": "<KEY_VAULT_SECRET_URI>",
"identity": "system"
}],
}
}
}
هنا، يتم الإعلان عن سلسلة الاتصال إلى حساب تخزين الطابور في مصفوفة secrets. يتم استرجاع قيمته تلقائيا من Key Vault باستخدام الهوية المحددة. لاستخدام هوية مدارة من قبل المستخدم، استبدل system بمعرف مورد الهوية.
استبدل <KEY_VAULT_SECRET_URI> ب URI الخاص بسرك في Key Vault.
عند إنشاء تطبيق حاوية، يتم تعريف الأسرار باستخدام المعلمة --secrets .
- تقبل المعلمة مجموعة محددة بمسافة من أزواج الاسم/القيمة.
- تحدد علامة المساواة (
=) كل زوج.
- لتحديد مرجع Key Vault، استخدم الصيغة
<SECRET_NAME>=keyvaultref:<KEY_VAULT_SECRET_URI>,identityref:<MANAGED_IDENTITY_ID>. على سبيل المثال، 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>"
هنا، يتم الإعلان عن سلسلة الاتصال إلى حساب تخزين في قائمة الانتظار في معامل --secrets. استبدل <KEY_VAULT_SECRET_URI> ب URI الخاص بسرك في Key Vault. استبدل <USER_ASSIGNED_IDENTITY_ID> بمعرف المورد للهوية المعينة للمستخدم.
إشعار
يجب أن يكون لدى المستخدم هوية معينة حق الوصول لقراءة السر في Key Vault. لا يمكن استخدام الهوية المعينة من قبل النظام مع أمر الإنشاء لأنها غير متوفرة إلا بعد إنشاء تطبيق الحاوية.
مراجع Secrets Key Vault غير مدعومة في PowerShell.
رابط السرية في Key Vault والدوران السري
يجب أن يكون رابط الرابط السري ل Key Vault بأحد الصيغ التالية:
-
https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931: الرجوع إلى إصدار معين من البيانات السرية.
-
https://myvault.vault.azure.net/secrets/mysecret: الرجوع إلى أحدث إصدار من البيانات السرية.
إذا لم يتم تحديد إصدار في URI، فسيستخدم التطبيق أحدث إصدار موجود في مخزن المفاتيح. عندما تتوفر إصدارات أحدث، يسترد التطبيق تلقائيا أحدث إصدار في غضون 30 دقيقة. تتم إعادة تشغيل أي مراجعات نشطة تشير إلى السر في متغير بيئة تلقائيا لالتقاط القيمة الجديدة.
للتحكم الكامل في أي إصدار من البيانات السرية يتم استخدامه، حدد الإصدار في URI.
الرجوع إلى البيانات السرية في متغيرات البيئة
بعد الإعلان عن الأسرار على مستوى التطبيق كما هو موضح في قسم تعريف الأسرار ، يمكنك الرجوع إليها في متغيرات البيئة عند إنشاء مراجعة جديدة في تطبيق الحاوية الخاص بك. عندما يشير متغير البيئة إلى سر، يتم ملء قيمته بالقيمة المعرفة في السر.
مثال
المثال التالي يوضح تطبيقا يعلن عن سلسلة الاتصال على مستوى التطبيق. تتم الإشارة إلى هذا الاتصال في متغير بيئة حاوية وفي قاعدة مقياس.
بعد تحديد سر في تطبيق الحاوية، يمكنك الرجوع إليه في متغير بيئة عند إنشاء مراجعة جديدة.
اذهب إلى تطبيق الحاوية الخاص بك في بوابة Azure.
ضمن قسم التطبيق ، حدد المراجعات والنسخ المتماثلة.
في صفحة المراجعات والنسخ المتماثلة ، حدد إنشاء مراجعة جديدة.
في صفحة إنشاء ونشر مراجعة جديدة، في علامة التبويب حاوية ، ضمن قسم صورة الحاوية، حدد حاوية.
حدد تحرير.
في جزء تحرير سياق حاوية ، حدد علامة التبويب متغيرات البيئة.
حدد إضافة.
أدخل المعلومات التالية:
-
الاسم: اسم متغير البيئة.
-
المصدر: حدد مرجع سر.
-
القيمة: حدد السر الذي قمت بتعريفه مسبقا.
حدد حفظ.
في صفحة Create and deploy new revision ، حدد Create لإنشاء المراجعة الجديدة.
في هذا المثال، يتم إعلان سلسلة الاتصال التطبيق ك queue-connection-string ويصبح متاحا في أماكن أخرى في أقسام التكوين.
{
"$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" ⬅️
}
]
}
}
]
}
}
}
}]
}
هنا، يحصل متغير البيئة المسمى connection-string على قيمته من البيانات السرية على مستوى التطبيق queue-connection-string. أيضا، يستخدم تكوين المصادقة في قاعدة Azure Queue Storage المقياس سر queue-connection-string لتعريف اتصاله.
لتجنب تثبيت قيم سرية للتحكم بالمصادر باستخدام قالب ARM الخاص بك، قم بتمرير القيم السرية كمعلمات قالب ARM.
في هذا المثال، تنشئ تطبيق حاوية باستخدام Azure CLI مع سر مشار إليه في متغير البيئة. للإشارة إلى سر في متغير بيئة في Azure CLI، قم بتعيين قيمته إلى secretref:، متبوعا باسم السر.
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"
هنا، يحصل متغير البيئة المسمى connection-string على قيمته من البيانات السرية على مستوى التطبيق queue-connection-string.
مراجع Secrets Key Vault غير مدعومة في PowerShell.
في هذا المثال، تنشئ حاوية باستخدام Azure PowerShell مع سر يشير إليه في متغير البيئة. للإشارة إلى السر في متغير بيئة في PowerShell، قم بتعيين قيمته إلى secretref:، متبوعا باسم السر.
$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
هنا، يحصل متغير البيئة المسمى ConnectionString على قيمته من البيانات السرية على مستوى التطبيق $QueueConnectionString.
إدخال البيانات السرية في وحدة تخزين
بعد الإعلان عن الأسرار على مستوى التطبيق كما هو موضح في قسم تعريف الأسرار ، يمكنك الرجوع إليها في تحميلات وحدة التخزين عند إنشاء مراجعة جديدة في تطبيق الحاوية الخاص بك. عند تحميل البيانات السرية في وحدة تخزين، يتم تحميل كل سر كملف في وحدة التخزين. اسم الملف هو اسم السر، ومحتويات الملف هي قيمة السر. يمكنك تحميل جميع الأسرار في تحميل وحدة تخزين، أو يمكنك تحميل أسرار معينة.
مثال
بعد تحديد سر في تطبيق الحاوية، يمكنك الرجوع إليه في تحميل وحدة تخزين عند إنشاء مراجعة جديدة.
اذهب إلى تطبيق الحاوية الخاص بك في بوابة Azure.
ضمن قسم التطبيق ، حدد المراجعات والنسخ المتماثلة.
في صفحة المراجعات والنسخ المتماثلة ، حدد إنشاء مراجعة جديدة.
في صفحة إنشاء ونشر مراجعة جديدة، في علامة التبويب حاوية ، ضمن قسم صورة الحاوية، حدد حاوية.
حدد تحرير.
في جزء تحرير سياق حاوية ، حدد علامة التبويب تحميلات وحدة التخزين.
حدد إنشاء وحدة تخزين جديدة.
في جزء إضافة سياق وحدة تخزين ، أدخل المعلومات التالية:
-
نوع وحدة التخزين: حدد
Secret.
-
الاسم:
mysecrets
-
تحميل جميع الأسرار: ممكن
إشعار
إذا كنت ترغب في تحميل بيانات سرية معينة، ف قم بتعطيل تحميل جميع الأسرار وحدد الأسرار التي تريد تحميلها.
حدد إضافة.
في جزء تحرير سياق حاوية ، ضمن اسم وحدة التخزين، حدد mysecrets.
ضمن مسار التحميل، أدخل /mnt/secrets.
حدد حفظ.
في صفحة Create and deploy new revision ، حدد Create لإنشاء المراجعة الجديدة مع تحميل وحدة التخزين.
في هذا المثال، يتم الإعلان عن سرين على مستوى التطبيق. يتم تحميل هذه الأسرار في وحدة تخزين تسمى mysecrets من النوع Secret. يتم تحميل وحدة التخزين في المسار /mnt/secrets. يمكن للتطبيق بعد ذلك الرجوع إلى الأسرار في تحميل وحدة التخزين.
{
"$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"
}
]
}
}
}]
}
لتحميل أسرار معينة وتحديد مساراتها داخل وحدة التخزين المثبتة، يمكنك تعريف الأسرار في secrets صفيف كائن وحدة التخزين. يوضح المثال التالي كيفية تحميل السر فقط queue-connection-string في mysecrets تحميل وحدة التخزين باسم 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"
}
]
}
]
}
...
}
...
}
في تطبيقك، يمكنك قراءة السر من ملف موجود في /mnt/secrets/connection-string.txt.
في هذا المثال، يتم الإعلان عن سرين على مستوى التطبيق. يتم تحميل هذه الأسرار في وحدة تخزين تسمى mysecrets من النوع Secret. يتم تحميل وحدة التخزين في المسار /mnt/secrets. يمكن للتطبيق بعد ذلك قراءة الأسرار كملفات في تحميل وحدة التخزين.
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"
لتحميل أسرار معينة وتحديد مساراتها داخل وحدة التخزين المثبتة، حدد تطبيقك باستخدام YAML.
تحميل البيانات السرية كحجم غير مدعوم في PowerShell.
استكشاف أخطاء في مراجع Key Vault
عند الرجوع إلى الأسرار من Azure Key Vault، قد تواجه مشاكل أثناء استرجاع الأسرار أو التزامنها. إليك الأخطاء والحلول الشائعة:
| خطأ |
السبب |
القرار |
| الهوية المدارة غير مفعلة |
تطبيق الحاوية لا يحتوي على هوية مدارة. |
فعل هوية مدارة معينة من النظام أو من قبل المستخدم في تطبيق الحاوية الخاص بك. انظر الهويات المدارة. |
| الهوية غير موجودة |
الهوية المدارة المحددة غير موجودة أو غير مخصصة لتطبيق الحاوية. |
تحقق من إنشاء الهوية وتعيينها لتطبيق الحاوية في قسم الهوية . |
| تم تعطيل السر في Key Vault |
السر معطل في مورد Key Vault. |
اذهب إلى Key Vault الخاص بك في بوابة Azure وفعل السر. |
| فشل المصادقة |
الهوية المدارة تفتقر إلى الأذونات المطلوبة لقراءة السر. |
امنح دور المستخدم Key Vault الأسرار للهوية المدارة على Key Vault الخاص بك. انظر Key Vault Secrets User. |
| رفض إذن RBAC |
الهوية المدارة لا تملك صلاحيات كافية للوصول إلى Key Vault. |
تحقق من تعيين دور RBAC على Key Vault وتأكد من أنه يتضمن أمنات قراءة للأسرار. |
الخطوات التالية