إعداد وصول WinRM للأجهزة الظاهرية في Azure Resource Manager
ينطبق على: ✔️ أجهزة ظاهرية تعمل بنظام التشغيل Windows ✔️ مجموعات تغيير السعة المرنة
فيما يلي الخطوات التي تحتاج إلى اتخاذها لإعداد جهاز ظاهري مع اتصال WinRM
- إنشاء Key Vault
- إنشاء شهادة موقَّعة ذاتيًا
- تحميل شهادتك الموقعة ذاتياً إلى Key Vault
- احصل على عنوان URL للشهادة الموقعة ذاتياً في Key Vault
- الرجوع إلى عنوان 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