البرنامج التعليمي: دمج 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 في أثناء النشر.

مخطط يعرض تكامل قالب Resource Manager مع key vault

يغطي هذا البرنامج التعليمي المهام التالية:

  • إعداد Key Vault
  • فتح قالب بدء التشغيل السريع
  • تحرير ملف المعلمات
  • نشر القالب
  • التحقق من صحة النشر
  • تنظيف الموارد

إذا لم يكن لديك اشتراك في Azure، فأنشئ free account قبل البدء.

بالنسبة إلى الوحدة النمطية Learn التي تستخدم قيمة آمنة من مخزن المفاتيح، راجع إدارة عمليات النشر السحابية المعقدة باستخدام ميزات قالب ARM المتقدمة.

المتطلبات الأساسية

لإكمال هذه المقالة، تحتاج إلى الآتي:

إعداد 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 ..."

هام

يحتوي القالب على قيمة إخراج واحدة، تسمى 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.

  1. في التعليمة البرمجية Visual Studio، حدد File>Open File.

  2. في المربع File Name، الصق عنوان URL التالي:

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json
    
  3. حدد Open لفتح الملف. السيناريو هو نفس السيناريو المستخدم في البرنامج التعليمي: إنشاء قوالب ARM باستخدام موارد تابعة. يحدد القالب ستة موارد:

    من المفيد أن يكون لديك بعض الفهم الأساسي للقالب قبل تخصيصه.

  4. حدد File>Save As، ثم احفظ نسخة من الملف في الكمبيوتر المحلي باسم azuredeploy.js.

  5. كرر الخطوات 1-3 لفتح عنوان URL التالي، ثم احفظ الملف باسم azuredeploy.parameters.json.

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.parameters.json
    

تحرير ملف المعلمات

باستخدام أسلوب المعرف الثابت، لا تحتاج إلى إجراء أي تغييرات على ملف القالب. يتم استرداد قيمة السر عن طريق تكوين ملف معلمة القالب.

  1. في التعليمة البرمجية Visual Studio، افتح azuredeploy.parameters.json إذا لم يكن مفتوحًا بالفعل.

  2. قم بتحديث المعلمة adminPassword إلى:

    "adminPassword": {
      "reference": {
        "keyVault": {
          "id": "/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>"
        },
        "secretName": "vmAdminPassword"
      }
    },
    

    هام

    استبدل القيمة id بمعرف المورد الخاص بـ key vault التي قمت بإنشائها في الإجراء السابق. يتم ترميز secretNameباسم vmAdminPassword. راجع إعداد key vault.

    دمج ملف معلمات نشر الجهاز الظاهري لقالب key vault وResource Manager

  3. قم بتحديث القيم التالية:

    • adminUsername: اسم حساب مسؤول الجهاز الظاهري.
    • dnsLabelPrefixاسم القيمة dnsLabelPrefix.

    للحصول على أمثلة للأسماء، راجع الصورة السابقة.

  4. حفظ التغييرات.

نشر القالب

  1. تسجيل الدخول إلى Cloud Shell.

  2. يمكنك اختيار بيئتك المفضلة عن طريق تحديد PowerShell أو Bash (لـ CLI) في الزاوية العلوية اليسرى. يلزم إعادة تشغيل Shell عند التبديل.

    ملف تحميل Cloud Shell في مدخل Microsoft Azure

  3. حدد Upload/download files، ثم حدد Upload. حمّل كلاً من azuredeploy.json وazuredeploy.parameters.json على Cloud Shell. بعد تحميل الملف، يمكنك استخدام الأمر ls والأمر cat للتحقق من تحميل الملف بنجاح.

  4. شغّل البرنامج النصي 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.

  1. قم بفتح ⁧⁩مدخل Azure⁧⁩.

  2. حدد مجموعات الموارد><YourResourceGroupName>>simpleWinVM.

  3. حدد Connect في الأعلى.

  4. حدد 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 الخاص بك. ثم استخدمت السر في نشر القالب. لمعرفة كيفية استخدام ملحقات الجهاز الظاهري لتنفيذ مهام ما بعد النشر، راجع: