Menyiapkan akses WinRM untuk Virtual Machines di Azure Resource Manager
Berlaku untuk: ✔️ Mesin Virtual Windows ✔️ Set skala fleksibel
Berikut adalah langkah-langkah yang perlu Anda lakukan untuk menyiapkan VM dengan konektivitas WinRM
- Membuat Key Vault
- Buat sertifikat yang ditandatangani sendiri
- Mengunggah sertifikat yang ditandatangani sendiri ke Key Vault
- Mendapatkan URL untuk sertifikat yang ditandatangani sendiri di Key Vault
- Mereferensikan URL sertifikat yang ditandatangani sendiri saat membuat VM
Langkah 1: Membuat Key Vault
Anda dapat menggunakan perintah di bawah untuk membuat Key Vault
New-AzKeyVault -VaultName "<vault-name>" -ResourceGroupName "<rg-name>" -Location "<vault-location>" -EnabledForDeployment -EnabledForTemplateDeployment
Langkah 2: Membuat sertifikat yang ditandatangani sendiri
Anda dapat membuat sertifikat yang ditandatangani sendiri menggunakan skrip PowerShell ini
$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
Langkah 3: Mengunggah sertifikat yang ditandatangani sendiri ke Key Vault
Sebelum mengunggah sertifikat ke Key Vault yang dibuat pada langkah 1, sertifikat itu perlu dikonversi ke format yang akan dipahami oleh penyedia sumber daya Microsoft.Compute. Skrip PowerShell di bawah ini akan memungkinkan Anda melakukannya
$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
Langkah 4: Mendapatkan URL untuk sertifikat yang ditandatangani sendiri di Key Vault
Penyedia sumber daya Microsoft.Compute memerlukan URL untuk rahasia di dalam Key Vault saat memprovisikan VM. Ini memungkinkan penyedia sumber daya Microsoft.Compute mengunduh rahasia dan membuat sertifikat yang setara pada VM.
Catatan
URL rahasia juga perlu menyertakan versi. URL contoh terlihat seperti di bawah ini https://contosovault.vault.azure.net:443/secrets/contososecret/01h9db0df2cd4300a20ence585a6s7ve
Templat
Anda bisa mendapatkan tautan ke URL dalam templat menggunakan kode di bawah
"certificateUrl": "[reference(resourceId(resourceGroup().name, 'Microsoft.KeyVault/vaults/secrets', '<vault-name>', '<secret-name>'), '2015-06-01').secretUriWithVersion]"
PowerShell
Anda bisa mendapatkan URL ini menggunakan perintah PowerShell di bawah
$secretURL = (Get-AzKeyVaultSecret -VaultName "<vault name>" -Name "<secret name>").Id
Langkah 5: Mereferensikan URL sertifikat yang ditandatangani sendiri saat membuat VM
Templat Azure Resource Manager
Saat membuat VM melalui templat, sertifikat akan direferensikan di bagian rahasia dan bagian winRM seperti di bawah:
"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>"
}
]
},
...
}
},
Templat sampel untuk hal di atas dapat ditemukan di sini di vm-winrm-keyvault-windows
Kode sumber untuk templat ini dapat ditemukan di 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
Langkah 6: Menyambungkan ke VM
Sebelum Anda dapat terhubung ke mesin virtual, Anda harus memastikan mesin Anda dikonfigurasi untuk manajemen jarak jauh WinRM. Mulai PowerShell sebagai administrator dan jalankan perintah di bawah untuk memastikan Anda sudah menyiapkannya.
Enable-PSRemoting -Force
Catatan
Anda mungkin perlu memastikan layanan WinRM berjalan jika di atas tidak berfungsi. Anda dapat melakukannya menggunakan Get-Service WinRM
Setelah penyiapan selesai, Anda dapat tersambung ke VM menggunakan perintah di bawah
Enter-PSSession -ConnectionUri https://<public-ip-dns-of-the-vm>:5986 -Credential $cred -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck) -Authentication Negotiate
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk