إعداد وصول WinRM للأجهزة الظاهرية في Azure Resource Manager

ينطبق على: ✔️ أجهزة Windows ظاهرية ✔️ مجموعات مقاييس مرنة

فيما يلي الخطوات التي تحتاج إلى اتخاذها لإعداد جهاز ظاهري مع اتصال WinRM

  1. إنشاء Key Vault
  2. إنشاء شهادة موقَّعة ذاتيًا
  3. تحميل شهادتك الموقعة ذاتياً إلى Key Vault
  4. احصل على عنوان URL للشهادة الموقعة ذاتياً في Key Vault
  5. الرجوع إلى عنوان URL للشهادات الموقعة ذاتياً أثناء إنشاء جهاز ظاهري

الخطوة 1: إنشاء Key Vault

يمكنك استخدام الأمر أدناه لإنشاء Key Vault

New-AzKeyVault -VaultName "<vault-name>" -ResourceGroupName "<rg-name>" -Location "<vault-location>" -EnabledForDeployment -EnabledForTemplateDeployment

الخطوة 2: إنشاء شهادة موقعة ذاتياً

يمكنك إنشاء شهادة موقعة ذاتياً باستخدام برنامج PowerShell النصي هذا

$certificateName = "somename"

$thumbprint = (New-SelfSignedCertificate -DnsName $certificateName -CertStoreLocation Cert:\CurrentUser\My -KeySpec KeyExchange).Thumbprint

$cert = (Get-ChildItem -Path cert:\CurrentUser\My\$thumbprint)

$password = Read-Host -Prompt "Please enter the certificate password." -AsSecureString

Export-PfxCertificate -Cert $cert -FilePath ".\$certificateName.pfx" -Password $password

الخطوة 3: تحميل شهادتك الموقعة ذاتياً إلى Key Vault

قبل تحميل الشهادة التي أُنشئت في الخطوة 1 إلى Azure Key Vault، يجب تحويلها إلى تنسيق سيفهمه موفر موارد Microsoft.Compute. سيسمح لك برنامج PowerShell النصي أدناه بالقيام بذلك

$fileName = "<Path to the .pfx file>"
$fileContentBytes = Get-Content $fileName -Encoding Byte
$fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes)
[System.Collections.HashTable]$TableForJSON = @{
    "data"     = $fileContentEncoded;
    "dataType" = "pfx";
    "password" = "<password>";
}
[System.String]$jsonObject = $TableForJSON | ConvertTo-Json
$encoding = [System.Text.Encoding]::UTF8
$jsonEncoded = [System.Convert]::ToBase64String($encoding.GetBytes($jsonObject))
$secret = ConvertTo-SecureString -String $jsonEncoded -AsPlainText –Force
Set-AzKeyVaultSecret -VaultName "<vault name>" -Name "<secret name>" -SecretValue $secret

الخطوة 4: احصل على عنوان URL للشهادة الموقعة ذاتياً في Key Vault

يحتاج موفر موارد Microsoft.Compute إلى عنوان URL للبيانات السرية داخل Key Vault أثناء تزويد الجهاز الظاهري. وهذا يمكن موفر موارد Microsoft.Compute من تنزيل البيانات السرية وإنشاء الشهادة المكافئة على الجهاز الظاهري.

ملاحظة

يجب أن يتضمن عنوان URL للبيانات السرية الإصدار أيضاً. مثال على عنوان URL يبدو كما يلي https://contosovault.vault.azure.net:443/secrets/contososecret/01h9db0df2cd4300a20ence585a6s7ve

القوالب

يمكنك الحصول على ارتباط عنوان URL في القالب باستخدام التعليمة البرمجية أدناه

"certificateUrl": "[reference(resourceId(resourceGroup().name, 'Microsoft.KeyVault/vaults/secrets', '<vault-name>', '<secret-name>'), '2015-06-01').secretUriWithVersion]"

PowerShell

يمكنك الحصول على عنوان URL هذا باستخدام الأمر PowerShell أدناه

$secretURL = (Get-AzKeyVaultSecret -VaultName "<vault name>" -Name "<secret name>").Id

الخطوة 5: الرجوع إلى عنوان URL للشهادات الموقعة ذاتياً أثناء إنشاء جهاز ظاهري

قوالب Azure Resource Manager

أثناء إنشاء جهاز ظاهري من خلال القوالب، تتم الإشارة إلى الشهادة في قسم البيانات السرية وقسم winRM على النحو التالي:

"osProfile": {
      ...
      "secrets": [
        {
          "sourceVault": {
            "id": "<resource id of the Key Vault containing the secret>"
          },
          "vaultCertificates": [
            {
              "certificateUrl": "<URL for the certificate you got in Step 4>",
              "certificateStore": "<Name of the certificate store on the VM>"
            }
          ]
        }
      ],
      "windowsConfiguration": {
        ...
        "winRM": {
          "listeners": [
            {
              "protocol": "http"
            },
            {
              "protocol": "https",
              "certificateUrl": "<URL for the certificate you got in Step 4>"
            }
          ]
        },
        ...
      }
    },

يمكن العثور على عينة قالب لما سبق هنا في vm-winrm-keyvault-windows

يمكن إيجاد التعليمة البرمجية المصدر لهذا القالب على GitHub.

PowerShell

$vm = New-AzVMConfig -VMName "<VM name>" -VMSize "<VM Size>"
$credential = Get-Credential
$secretURL = (Get-AzKeyVaultSecret -VaultName "<vault name>" -Name "<secret name>").Id
$vm = Set-AzVMOperatingSystem -VM $vm -Windows -ComputerName "<Computer Name>" -Credential $credential -WinRMHttp -WinRMHttps -ProvisionVMAgent -WinRMCertificateUrl $secretURL
$sourceVaultId = (Get-AzKeyVault -ResourceGroupName "<Resource Group name>" -VaultName "<Vault Name>").ResourceId
$CertificateStore = "My"
$vm = Add-AzVMSecret -VM $vm -SourceVaultId $sourceVaultId -CertificateStore $CertificateStore -CertificateUrl $secretURL

الخطوة 6: الاتصال بالجهاز الظاهري

قبل أن تتمكن من الاتصال بالجهاز الظاهري، ستحتاج إلى التأكد من تكوين جهازك لإدارة WinRM عن بُعد. ابدأ تشغيل PowerShell كمسؤول ونفذ الأمر أدناه للتأكد من إعدادك.

Enable-PSRemoting -Force

ملاحظة

قد تحتاج إلى التأكد من تشغيل خدمة WinRM إذا لم يعمل ما سبق. يمكنك أن تفعل ذلك باستخدام ⁧Get-Service WinRM

بمجرد الانتهاء من الإعداد، يمكنك الاتصال بالجهاز الظاهري باستخدام الأمر أدناه

Enter-PSSession -ConnectionUri https://<public-ip-dns-of-the-vm>:5986 -Credential $cred -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck) -Authentication Negotiate