Bagikan melalui


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

  1. Membuat Key Vault
  2. Buat sertifikat yang ditandatangani sendiri
  3. Mengunggah sertifikat yang ditandatangani sendiri ke Key Vault
  4. Mendapatkan URL untuk sertifikat yang ditandatangani sendiri di Key Vault
  5. 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