تمرين - إدارة البيانات السرية في قالب ARM خاصتك
في التمرين السابق، شغلت قالب Azure Resource Manager (ARM) الأساسي الذي يزود جهاز ظاهري يعمل بنظام Linux. في هذا الجزء، يمكنك اتباع عملية مماثلة.
هذه المرة، بدلًا من تمرير كلمة المرور باعتبارها معلمة، يمكنك تخزين كلمة المرور في Azure Key Vault. لتمكين قالب ARM من الوصول إلى كلمة المرور، يمكنك إنشاء ملف معلمة يشير إلى بيانات المخزن الرئيسي السرية في اشتراكك.
توزيع Azure Key Vault
إشعار
نظرًا للقيود المفروضة على بيئة الاختبار المعزولة، يمكنك هنا إنشاء مخزن رئيسي في Azure Key Vault من مدخل Azure. عادةً ما يمكنك استخدام New-AzKeyVault
cmdlet لإنشاء مخزن رئيسي من Azure PowerShell.
أنشئ مخزنًا رئيسيًا واسمح بالوصول إلى وقت التوزيع. للقيام بذلك:
أنشئ متغيّر PowerShell يحمل اسم المخزن الرئيسي:
$KVNAME="tailwind-secrets" + (Get-Random -Count 1 -Maximum 9999999)
شغَّل
$KVNAME
لطباعة قيمته:$KVNAME
يشبه مُخرجك هذا (الرقم الذي تراه سيكون مختلفًا):
tailwind-secrets5978564
انسخ القيمة في مكان مناسب للخطوة التالية.
سجِّل الدخول إلى مدخل Azure باستخدام الحساب نفسه الذي استخدمته في تنشيط بيئة الاختبار المعزولة.
في قائمة مدخل Microsoft Azure أو من صفحة الصفحة الرئيسية، حدد إنشاء مورد.
في مربع البحث، أدخِل Key Vault.
حدد Key Vault من القائمة، وحدد Create لبدء تكوين المخزن الرئيسي.
في جزء الإنشاء، حدد هذه القيم:
- Resource group:
اسم مجموعة الموارد . - Key vault name: قيمتك لـ
$KVNAME
، على سبيل المثال، tailwind-secrets5978564.
- Resource group:
حدد "Review + create".
حدد إنشاء. هذا يجب أن يستغرق دقيقة أو نحو ذلك. بعد إنشاء المورد، حدد Go to resource.
حدد Access Configuration ضمن الإعدادات. قم بتمكين الخيار Azure Resource Manager لنشر القالب وحدد Apply.
من جلسة عمل PowerShell خاصتك، شغَّل الأمر
ConvertTo-SecureString
cmdlet وتعيين النتيجة إلى المتغيرsecretSecureString
:$secretSecureString = ConvertTo-SecureString 'insecurepassword123!' -AsPlainText -Force
شغّل الأمر
Set-AzKeyVaultSecret
التالي لتعيين البيانات السرية في المخزن الرئيسي. البيانات السرية تُسمىvmPassword
، مع القيمةinsecurepassword123!
:$secret = Set-AzKeyVaultSecret -VaultName $KVNAME -Name vmPassword -SecretValue $secretSecureString
إنشاء ملف المعلمة
هنا، تُنشئ ملف معلمة يحتوي على اسم الجهاز الظاهري واسم المستخدم المسؤول و مرجع إلى كلمة مرور الجهاز الظاهري في المخزن الرئيسي.
يمكنك تمرير المعلمات إلى قوالب من سطر الأوامر. تذكر أن ملف معلمة هو طريقة بديلة لتمرير المعلمات إلى قالب ARM خاصتك أثناء التوزيع. يمكِّنك ملف المعلمة من الوصول إلى بيانات المخزن الرئيسي السرية من قالبك.
شغَّل الأمر
Get-AzKeyVault
التالي لطباعة معرف المخزن الرئيسي خاصتك:Get-AzKeyVault -VaultName $KVNAME | Select-Object -ExpandProperty ResourceId
يكون الإخراج مشابهًا لما يلي:
/subscriptions/7c7df858-93a0-4f38-8990-304c836a4e8d/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
لاحظ المُخرج للخطوة التالية.
في Visual Studio Code، أنشئ ملفًا بالاسم azuredeploy.parameters.json في الدليل نفسه الذي يحتوي على azuredeploy.json.
أضِف هذه المحتويات إلى azuredeploy.parameters.json:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "adminUsername": { "value": "azureuser" }, "vmName": { "value": "vm2" }, "adminPasswordOrKey": { "reference": { "keyVault": { "id": "" }, "secretName": "vmPassword" } } } }
استبدل بقيمة
id
(سلسلة فارغة) القيمة التي نسختها في الخطوة السابقة. ثم احفظ الملف.
توزيع جهاز ظاهري يعمل بنظام Linux
هنا، يمكنك توزيع قالب ARM نفسه الذي تم توزيعه في التمرين السابق. هذه المرة، يمكنك تزويد ملف المعلمة الذي يشير إلى كلمة مرور الجهاز الظاهري في المخزن الرئيسي.
شغّل الأمر
New-AzResourceGroupDeployment
التالي:New-AzResourceGroupDeployment ` -TemplateFile "./azuredeploy.json" ` -TemplateParameterFile "./azuredeploy.parameters.json" ` -dnsLabelPrefix ("vm2-" + (Get-Random -Count 1 -Maximum 9999999))
في التمرين السابق، زودت زوج قيم المفاتيح جميعها مباشرةً من سطر الأوامر. هنا، يمكنك تحديد
"./azuredeploy.parameters.json"
لتزويد ملف المعلمات.يُعين
dnsLabelPrefix
إلىvm2-
متبوعًا برقم عشوائي. هذا مطلوب للتأكد من أن اسم DNS يختلف عن اسم DNS الذي استخدمته في التمرين السابق.
تحقق من النشر
تحقق من أن الجهاز الظاهري مزود وأنه قابل للاتصال عبر SSH. للقيام بذلك:
شغَّل الأمر
Invoke-Expression
للاتصال بجهاز ظاهري عبر SSH:Invoke-Expression (Get-AzResourceGroupDeployment -Name azuredeploy -ResourceGroupName <rgn>your resource group</rgn>).outputs.sshCommand.value
عند مطالبتك، أدخِل
yes
لمتابعة الاتصال. ثم أدخِل كلمة مرور المسؤول،insecurepassword123!
.هام
حافظ على أمان كلمات المرور عمليًا. يمكنك أيضًا استخدام مصادقة المفتاح العام، والتي عادةً ما تكون أكثر أمانًا من استخدام كلمات المرور.
من اتصال SSH خاصتك بالجهاز الظاهري، شغَّل
hostname
لطباعة اسم مضيف الجهاز الظاهري:hostname
يمكنك أن ترى اسم المضيف الداخلي للجهاز الظاهري،
vm1
:vm2
شغَّل
exit
لمغادرة جلسة عمل SSH خاصتك.exit
عمل جيد! لقد وسعت نطاق التوزيع خاصتك ليشمل ملف معلمات يقرأ معلومات سرية من Key Vault.
توزيع Azure Key Vault
أنشئ في Azure Key Vault مخزنًا رئيسيًا وأضِف كلمة مرور الجهاز الظاهري باعتبارها بيانات سرية آمنة. للقيام بذلك:
أنشئ متغيّر Bash الذي يحمل اسم المخزن الرئيسي.
KVNAME=tailwind-secrets$RANDOM
يجب أن تكون أسماء المخزن الرئيسي مميزة. يضمن الجزء
$RANDOM
أن اسم المخزن الرئيسي ينتهي بسلسلة عشوائية من الأرقام.شغَّل الأمر
az keyvault create
التالي لإنشاء المخزن الرئيسي:az keyvault create \ --name $KVNAME \ --enabled-for-template-deployment true
تسمح الوسيطة
--enabled-for-template-deployment
لقالب Azure Resource Manager (ARM) باسترداد البيانات السرية من المخزن الرئيسي.شغّل الأمر
az keyvault secret set
التالي لتعيين البيانات السرية في المخزن الرئيسي. البيانات السرية تُسمىvmPassword
، مع القيمةinsecurepassword123!
:az keyvault secret set \ --vault-name $KVNAME \ --name vmPassword \ --value 'insecurepassword123!'
إنشاء ملف المعلمة
هنا، تُنشئ ملف معلمة يحتوي على اسم الجهاز الظاهري واسم المستخدم المسؤول و مرجع إلى كلمة مرور الجهاز الظاهري في المخزن الرئيسي.
يمكنك تمرير المعلمات إلى قوالب من سطر الأوامر. تذكر أن ملف معلمة هو طريقة بديلة لتمرير المعلمات إلى قالب ARM خاصتك أثناء التوزيع. يمكِّنك ملف المعلمة من الوصول إلى بيانات المخزن الرئيسي السرية من قالبك.
شغَّل الأمر
az keyvault show
التالي لطباعة معرف المخزن الرئيسي خاصتك:az keyvault show \ --name $KVNAME \ --query id \ --output tsv
يكون الإخراج مشابهًا لما يلي:
/subscriptions/7c7df858-93a0-4f38-8990-304c836a4e8d/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
لاحظ المُخرج للخطوة التالية.
في Visual Studio Code، أنشئ ملفًا بالاسم azuredeploy.parameters.json في الدليل نفسه الذي يحتوي على azuredeploy.json.
أضِف هذه المحتويات إلى azuredeploy.parameters.json:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "adminUsername": { "value": "azureuser" }, "vmName": { "value": "vm2" }, "adminPasswordOrKey": { "reference": { "keyVault": { "id": "" }, "secretName": "vmPassword" } } } }
استبدل بقيمة
id
(سلسلة فارغة) القيمة التي نسختها في الخطوة السابقة. ثم احفظ الملف.
توزيع جهاز ظاهري يعمل بنظام Linux
هنا، يمكنك توزيع قالب ARM نفسه الذي تم توزيعه في التمرين السابق. هذه المرة، يمكنك تزويد ملف المعلمة الذي يشير إلى كلمة مرور الجهاز الظاهري في المخزن الرئيسي.
شغّل الأمر az deployment group create
التالي لتوزيع القالب:
az deployment group create \
--template-file azuredeploy.json \
--parameters @azuredeploy.parameters.json dnsLabelPrefix="vm2-$RANDOM"
في التمرين السابق، زودت كل زوج قيم المفاتيح في الوسيطة --parameters
. هنا، يمكنك تحديد @azuredeploy.parameters.json
لتزويد ملف المعلمات.
يُعين dnsLabelPrefix
إلى vm2-
متبوعًا برقم عشوائي. هذا مطلوب للتأكد من أن اسم DNS يختلف عن اسم DNS الذي استخدمته في التمرين السابق.
تحقق من التوزيع
كما فعلت في التمرين السابق، تحقق من أن الجهاز الظاهري مزود وأنه قابل للاتصال عبر SSH. اختصارًا، ستتخطى هذه المرة بعض الخطوات الوسيطة.
شغَّل ما يلي للاتصال بجهازك الظاهري عبر SSH:
$(az deployment group show \ --name azuredeploy \ --query properties.outputs.sshCommand.value \ --output tsv)
عند مطالبتك، أدخِل
yes
لمتابعة الاتصال. ثم أدخِل كلمة مرور المسؤول،insecurepassword123!
.من اتصال SSH خاصتك بالجهاز الظاهري، شغَّل
hostname
لطباعة اسم مضيف الجهاز الظاهري:hostname
يمكنك أن ترى اسم المضيف الداخلي للجهاز الظاهري،
vm2
:vm2
شغَّل
exit
لمغادرة جلسة عمل SSH خاصتك.exit
عمل جيد! لقد وسعت نطاق التوزيع خاصتك ليشمل ملف معلمات يقرأ معلومات سرية من Key Vault.