البرنامج التعليمي: دمج Azure Key Vault في توزيع قالب ARM خاصتك
تعرف على كيفية استرداد الأسرار من Azure key vault وتمرير الأسرار كمعلمات عند نشر قالب Azure Resource Manager (قالب ARM). لا يتم كشف قيمة المعلمة أبدًا، لأنك تشير فقط إلى معرف key vault الخاص بها. يمكنك الرجوع إلى سر key vault باستخدام معرف ثابت أو معرف ديناميكي. يستخدم هذا البرنامج التعليمي معرفًا ثابتًا. باستخدام نهج المعرف الثابت، يمكنك الرجوع إلى key vault في ملف معلمة القالب، وليس ملف القالب. لمزيد من المعلومات حول كلا النهجين، راجع استخدام Azure Key Vault لتمرير قيمة المعلمة الآمنة في أثناء النشر.
في البرنامج التعليمي تعيين ترتيب نشر الموارد، تقوم بإنشاء جهاز ظاهري (VM). تحتاج إلى تزويد مسؤول الجهاز الظاهري باسم المستخدم وكلمة المرور. بدلاً من توفير كلمة المرور، يمكنك تخزين كلمة المرور مسبقًا في Azure key vault ثم تخصيص القالب لاسترداد كلمة المرور من key vault في أثناء النشر.
يغطي هذا البرنامج التعليمي المهام التالية:
- إعداد Key Vault
- فتح قالب بدء التشغيل السريع
- تحرير ملف المعلمات
- نشر القالب
- التحقق من صحة النشر
- تنظيف الموارد
إذا لم يكن لديك اشتراك في Azure، فأنشئ free account قبل البدء.
بالنسبة إلى الوحدة النمطية Learn التي تستخدم قيمة آمنة من مخزن المفاتيح، راجع إدارة عمليات النشر السحابية المعقدة باستخدام ميزات قالب ARM المتقدمة.
المتطلبات الأساسية
لإكمال هذه المقالة، تحتاج إلى الآتي:
"Visual Studio Code" إلى جانب ملحق "Resource Manager Tools". راجع بدء التشغيل السريع: إنشاء قوالب ARM باستخدام التعليمة البرمجية Visual Studio.
لزيادة الأمان، استخدم كلمة مرور تم إنشاؤها لحساب مسؤول جهاز ظاهري. يمكنك استخدام Azure Cloud Shell لتشغيل الأمر التالي في PowerShell أو Bash:
openssl rand -base64 32
لمعرفة المزيد، قم بتشغيل
man openssl rand
لفتح الصفحة اليدوية.تحقق من أن كلمة المرور التي تم إنشاؤها تفي بمتطلبات كلمة مرور الجهاز الظاهري. تحتوي كل خدمة من خدمات Azure على متطلبات كلمة مرور محددة. لمعرفة متطلبات كلمة مرور الجهاز الظاهري، راجع ما هي متطلبات كلمة المرور عند إنشاء جهاز ظاهري؟.
إعداد Key Vault
في هذا القسم، يمكنك إنشاء key vault وإضافة سر إليه، بحيث يمكنك استرداد السر عند نشر القالب الخاص بك. هناك العديد من الطرق لإنشاء key vault. في هذا البرنامج التعليمي، يمكنك استخدام Azure PowerShell لنشر قالب ARM. يقوم هذا القالب بأمرين:
- إنشاء key vault مع تمكين الخاصية
enabledForTemplateDeployment
. يجب أن تكون هذه الخاصية صحيحة قبل أن تتمكن عملية نشر القالب من الوصول إلى الأسرار التي تم تعريفها في key vault. - إضافة سر إلى key vault. يقوم السر بتخزين كلمة مرور مسؤول الجهاز الظاهري.
ملاحظة
بما أن المستخدم يقوم بنشر قالب الجهاز الظاهري، فإذا لم تكن مالكًا أو مساهمًا في key vault، يجب على المالك أو المساهم منحك حق الوصول إلى Microsoft.KeyVault/vaults/deploy/action
إذن key vault. لمزيد من المعلومات، راجع استخدام Azure Key Vault لتمرير قيمة المعلمة الآمنة في أثناء النشر.
لتشغيل البرنامج النصي Azure PowerShell التالي، حدد Try it لفتح Cloud Shell للصق البرنامج النصي، انقر بزر الماوس الأيمن فوق جزء shell، ثم حدد Paste.
$projectName = Read-Host -Prompt "Enter a project name that is used for generating resource names"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
$upn = Read-Host -Prompt "Enter your user principal name (email address) used to sign in to Azure"
$secretValue = Read-Host -Prompt "Enter the virtual machine administrator password" -AsSecureString
$resourceGroupName = "${projectName}rg"
$keyVaultName = $projectName
$adUserId = (Get-AzADUser -UserPrincipalName $upn).Id
$templateUri = "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorials-use-key-vault/CreateKeyVault.json"
New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri -keyVaultName $keyVaultName -adUserId $adUserId -secretValue $secretValue
Write-Host "Press [ENTER] to continue ..."
هام
- اسم مجموعة الموارد هو اسم المشروع مع إلحاق rg له. لتسهيل تنظيف الموارد التي قمت بإنشائها في هذا البرنامج التعليمي، استخدم نفس اسم المشروع واسم مجموعة الموارد عند نشر القالب التالي.
- الاسم الافتراضي للسر هو vmAdminPassword. وهو مشفر في القالب.
- لتمكين القالب لاسترداد السر، يجب تمكين نهج وصول يسمى تمكين الوصول إلى Azure Resource Manager لنشر قالب لـ key vault. يتم تمكين هذا النهج في القالب. لمزيد من المعلومات حول نهج الوصول، راجع Deploy key vaults and secrets.
يحتوي القالب على قيمة إخراج واحدة، تسمى keyVaultId
. سوف تستخدم هذا المعرف جنبًا إلى جنب مع اسم السر لاسترداد قيمة السر في وقت لاحق في البرنامج التعليمي. تنسيق معرف المورد هو:
/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>
عند نسخ ولصق معرف، قد يتم تقسيمه إلى أسطر متعددة. قم بدمج الأسطر والتخلص من المسافات الإضافية.
للتحقق من صحة النشر، قم بتشغيل الأمر PowerShell التالي في نفس جزء shell لاسترداد السر بنص واضح. يعمل الأمر فقط في نفس جلسة عمل shell لأنه يستخدم المتغير $keyVaultName
، الذي تم تعريفه في البرنامج النصي PowerShell السابق.
$secret = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name "vmAdminPassword"
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret.SecretValue)
try {
$secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
} finally {
[System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
Write-Output $secretValueText
الآن قمت بإعداد key vault وسر. تعرض لك المقاطع التالية كيفية تخصيص قالب موجود لاسترداد السر في أثناء النشر.
فتح قالب بدء التشغيل السريع
قوالب Azure Quickstart هي مستودع لقوالب ARM. بدلاً من إنشاء قالب من البداية، يمكنك العثور على نموذج قالب وتخصيصه. يسمى القالب المستخدم في هذا البرنامج التعليمي نشر جهاز ظاهري بسيط في Windows.
في التعليمة البرمجية Visual Studio، حدد File>Open File.
في المربع File Name، الصق عنوان URL التالي:
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json
حدد Open لفتح الملف. السيناريو هو نفس السيناريو المستخدم في البرنامج التعليمي: إنشاء قوالب ARM باستخدام موارد تابعة. يحدد القالب ستة موارد:
- Microsoft.Storage/storageAccounts.
- Microsoft.Network/publicIPAddresses.
- Microsoft.Network/networkSecurityGroups.
- Microsoft.Network/virtualNetworks.
- Microsoft.Network/networkInterfaces.
- Microsoft.Compute/virtualMachines.
من المفيد أن يكون لديك بعض الفهم الأساسي للقالب قبل تخصيصه.
حدد File>Save As، ثم احفظ نسخة من الملف في الكمبيوتر المحلي باسم azuredeploy.js.
كرر الخطوات 1-3 لفتح عنوان URL التالي، ثم احفظ الملف باسم azuredeploy.parameters.json.
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.parameters.json
تحرير ملف المعلمات
باستخدام أسلوب المعرف الثابت، لا تحتاج إلى إجراء أي تغييرات على ملف القالب. يتم استرداد قيمة السر عن طريق تكوين ملف معلمة القالب.
في التعليمة البرمجية Visual Studio، افتح azuredeploy.parameters.json إذا لم يكن مفتوحًا بالفعل.
قم بتحديث المعلمة
adminPassword
إلى:"adminPassword": { "reference": { "keyVault": { "id": "/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>" }, "secretName": "vmAdminPassword" } },
هام
استبدل القيمة
id
بمعرف المورد الخاص بـ key vault التي قمت بإنشائها في الإجراء السابق. يتم ترميزsecretName
باسم vmAdminPassword. راجع إعداد key vault.قم بتحديث القيم التالية:
-
adminUsername
: اسم حساب مسؤول الجهاز الظاهري. -
dnsLabelPrefix
اسم القيمةdnsLabelPrefix
.
للحصول على أمثلة للأسماء، راجع الصورة السابقة.
-
حفظ التغييرات.
نشر القالب
تسجيل الدخول إلى Cloud Shell.
يمكنك اختيار بيئتك المفضلة عن طريق تحديد PowerShell أو Bash (لـ CLI) في الزاوية العلوية اليسرى. يلزم إعادة تشغيل Shell عند التبديل.
حدد Upload/download files، ثم حدد Upload. حمّل كلاً من azuredeploy.json وazuredeploy.parameters.json على Cloud Shell. بعد تحميل الملف، يمكنك استخدام الأمر
ls
والأمرcat
للتحقق من تحميل الملف بنجاح.شغّل البرنامج النصي PowerShell التالي لنشر القالب.
$projectName = Read-Host -Prompt "Enter the same project name that is used for creating the key vault" $location = Read-Host -Prompt "Enter the same location that is used for creating the key vault (i.e. centralus)" $resourceGroupName = "${projectName}rg" New-AzResourceGroupDeployment ` -ResourceGroupName $resourceGroupName ` -TemplateFile "$HOME/azuredeploy.json" ` -TemplateParameterFile "$HOME/azuredeploy.parameters.json" Write-Host "Press [ENTER] to continue ..."
عند نشر القالب، استخدم نفس مجموعة الموارد التي استخدمتها في key vault. يسهل هذا الأسلوب تنظيف الموارد، لأنك تحتاج إلى حذف مجموعة موارد واحدة فقط بدلاً من مجموعتين.
التحقق من صحة النشر
بعد نشر الجهاز الظاهري بنجاح، اختبر بيانات اعتماد تسجيل الدخول باستخدام كلمة المرور المخزنة في key vault.
قم بفتح مدخل Azure.
حدد مجموعات الموارد><YourResourceGroupName>>simpleWinVM.
حدد Connect في الأعلى.
حدد Download RDP File، ثم اتبع الإرشادات لتسجيل الدخول إلى الجهاز الظاهري باستخدام كلمة المرور المخزنة في key vault.
تنظيف الموارد
عندما لا تعود بحاجة إلى موارد Azure، قم بتنظيف الموارد التي قمت بنشرها عن طريق حذف مجموعة الموارد.
$projectName = Read-Host -Prompt "Enter the same project name that is used for creating the key vault"
$resourceGroupName = "${projectName}rg"
Remove-AzResourceGroup -Name $resourceGroupName
Write-Host "Press [ENTER] to continue ..."
الخطوات التالية
في هذا البرنامج التعليمي، تمكنت من استرداد سر من Azure Key vault الخاص بك. ثم استخدمت السر في نشر القالب. لمعرفة كيفية استخدام ملحقات الجهاز الظاهري لتنفيذ مهام ما بعد النشر، راجع: