تسمح Azure Container Apps لتطبيقك بتخزين قيم التكوين الحساسة بشكل آمن. بمجرد تعريف الأسرار على مستوى التطبيق، تتوفر القيم الآمنة للمراجعات في تطبيقات الحاوية الخاصة بك. بالإضافة إلى ذلك، يمكنك الرجوع إلى القيم المؤمنة داخل قواعد المقياس. للحصول على معلومات حول استخدام الأسرار مع Dapr، راجع تكامل Dapr.
- يتم تحديد نطاق الأسرار لتطبيق ما، خارج أي مراجعة محددة للتطبيق.
- لا يتم إنشاء المراجعات الجديدة من خلال إضافة الأسرار أو إزالتها أو تغييرها.
- يمكن لكل مراجعة تطبيق الرجوع إلى سر واحد أو أكثر.
- يمكن أن تشير المراجعات المتعددة إلى نفس السر(الأسرار).
لا يؤثر السر المحدث أو المحذوف تلقائيا على المراجعات الموجودة في تطبيقك. عند تحديث سر أو حذفه، يمكنك الاستجابة للتغييرات بإحدى طريقتين:
- نشر مراجعة جديدة.
- أعد تشغيل مراجعة موجودة.
قبل حذف سر، انشر مراجعة جديدة لم تعد تشير إلى السر القديم. ثم قم بإلغاء تنشيط كافة المراجعات التي تشير إلى السر.
تعريف الأسرار
يتم تعريف الأسرار على أنها مجموعة من أزواج الاسم/القيمة. يتم تحديد قيمة كل سر مباشرة أو كمرجع إلى سر مخزن في Azure Key Vault.
إشعار
تجنب تحديد قيمة سر مباشرة في بيئة الإنتاج. بدلا من ذلك، استخدم مرجعا إلى سر مخزن في Azure Key Vault، كما هو موضح في قسم القيمة السرية ل Store في Container Apps.
تخزين القيمة السرية في Container Apps
عند تعريف الأسرار من خلال المدخل، أو عبر خيارات سطر أوامر مختلفة.
انتقل إلى تطبيق الحاوية في مدخل Microsoft Azure.
ضمن قسم Settings ، حدد Secrets.
حدد إضافة.
في جزء إضافة سياق سري ، أدخل المعلومات التالية:
-
الاسم: اسم السر.
-
النوع: حدد 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، امنح دور Azure RBAC مستخدم Key Vault Secrets للهوية المدارة.
انتقل إلى تطبيق الحاوية في مدخل Microsoft Azure.
ضمن قسم Settings ، حدد Identity.
في علامة التبويب تعيين النظام، قم بتعيين الحالة إلى تشغيل.
إشعار
يمكنك أيضا استخدام هوية مدارة معينة من قبل المستخدم، والتي يمكن إعادة استخدامها عبر موارد متعددة وتستمر بشكل مستقل عن دورة حياة التطبيق. لاستخدامه، حدد علامة التبويب معين من قبل المستخدم واختر هوية موجودة.
حدد حفظ لتمكين الهوية المدارة المعينة من قبل النظام.
تظهر نافذة منبثقة لتأكيد رغبتك في تمكين الهوية المدارة المعينة من قبل النظام وتسجيل تطبيق الحاوية باستخدام معرف Microsoft Entra. حدد نعم.
ضمن قسم Settings ، حدد Secrets.
حدد إضافة.
في جزء إضافة سياق سري ، أدخل المعلومات التالية:
-
الاسم: اسم السر.
-
النوع: حدد مرجع Key Vault.
-
عنوان URL السري ل Key Vault: عنوان URI لسرك في 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.
URI السري ل Key Vault والتناوب السري
يجب أن يكون عنوان URI السري ل Key Vault بأحد التنسيقات التالية:
-
https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931: الرجوع إلى إصدار معين من البيانات السرية.
-
https://myvault.vault.azure.net/secrets/mysecret: الرجوع إلى أحدث إصدار من البيانات السرية.
إذا لم يتم تحديد إصدار في URI، فسيستخدم التطبيق أحدث إصدار موجود في مخزن المفاتيح. عندما تتوفر إصدارات أحدث، يسترد التطبيق تلقائيا أحدث إصدار في غضون 30 دقيقة. تتم إعادة تشغيل أي مراجعات نشطة تشير إلى السر في متغير بيئة تلقائيا لالتقاط القيمة الجديدة.
للتحكم الكامل في أي إصدار من البيانات السرية يتم استخدامه، حدد الإصدار في URI.
الرجوع إلى البيانات السرية في متغيرات البيئة
بعد الإعلان عن الأسرار على مستوى التطبيق كما هو موضح في قسم تعريف الأسرار ، يمكنك الرجوع إليها في متغيرات البيئة عند إنشاء مراجعة جديدة في تطبيق الحاوية الخاص بك. عندما يشير متغير البيئة إلى سر، يتم ملء قيمته بالقيمة المعرفة في السر.
مثال
يوضح المثال التالي تطبيقا يعلن عن سلسلة الاتصال على مستوى التطبيق. تتم الإشارة إلى هذا الاتصال في متغير بيئة حاوية وفي قاعدة مقياس.
بعد تحديد سر في تطبيق الحاوية، يمكنك الرجوع إليه في متغير بيئة عند إنشاء مراجعة جديدة.
انتقل إلى تطبيق الحاوية في مدخل Microsoft 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. أيضا، يستخدم queue-connection-string تكوين مصادقة قاعدة مقياس Azure Queue Storage السر لتعريف اتصاله.
لتجنب تثبيت قيم سرية للتحكم بالمصادر باستخدام قالب 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.
إدخال البيانات السرية في وحدة تخزين
بعد الإعلان عن الأسرار على مستوى التطبيق كما هو موضح في قسم تعريف الأسرار ، يمكنك الرجوع إليها في تحميلات وحدة التخزين عند إنشاء مراجعة جديدة في تطبيق الحاوية الخاص بك. عند تحميل البيانات السرية في وحدة تخزين، يتم تحميل كل سر كملف في وحدة التخزين. اسم الملف هو اسم السر، ومحتويات الملف هي قيمة السر. يمكنك تحميل جميع الأسرار في تحميل وحدة تخزين، أو يمكنك تحميل أسرار معينة.
مثال
بعد تحديد سر في تطبيق الحاوية، يمكنك الرجوع إليه في تحميل وحدة تخزين عند إنشاء مراجعة جديدة.
انتقل إلى تطبيق الحاوية في مدخل Microsoft 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.
الخطوات التالية