WinRM-toegang instellen voor Virtual Machines in Azure Resource Manager

Van toepassing op: ✔️ Flexibele schaalsets voor Windows-VM's ✔️

Dit zijn de stappen die u moet uitvoeren om een VM met WinRM-connectiviteit in te stellen

  1. Een sleutelkluis maken
  2. Een zelfondertekend certificaat maken
  3. Uw zelfondertekend certificaat uploaden naar Key Vault
  4. Haal de URL voor uw zelfondertekende certificaat op in de Key Vault
  5. Verwijzen naar de URL van uw zelfondertekende certificaten tijdens het maken van een VM

Stap 1: een Key Vault maken

U kunt de onderstaande opdracht gebruiken om de Key Vault

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

Stap 2: een zelfondertekend certificaat maken

U kunt een zelfondertekend certificaat maken met dit PowerShell-script

$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

Stap 3: Uw zelfondertekende certificaat uploaden naar de Key Vault

Voordat u het certificaat uploadt naar de Key Vault die u in stap 1 hebt gemaakt, moet het worden geconverteerd naar een indeling die de Microsoft.Compute-resourceprovider begrijpt. Met het onderstaande PowerShell-script kunt u dat doen

$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

Stap 4: haal de URL voor uw zelfondertekende certificaat op in de Key Vault

De resourceprovider Microsoft.Compute heeft een URL nodig naar het geheim in de Key Vault tijdens het inrichten van de VM. Hierdoor kan de resourceprovider Microsoft.Compute het geheim downloaden en het equivalente certificaat op de VM maken.

Notitie

De URL van het geheim moet ook de versie bevatten. Een voorbeeld-URL ziet er als volgt uit https://contosovault.vault.azure.net:443/secrets/contososecret/01h9db0df2cd4300a20ence585a6s7ve

Sjablonen

U kunt de koppeling naar de URL in de sjabloon ophalen met behulp van de onderstaande code

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

PowerShell

U kunt deze URL ophalen met behulp van de onderstaande PowerShell-opdracht

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

Stap 5: Verwijzen naar de URL van uw zelfondertekende certificaten tijdens het maken van een VM

Azure Resource Manager-sjablonen

Tijdens het maken van een VM via sjablonen wordt naar het certificaat verwezen in de sectie geheimen en de sectie winRM, zoals hieronder:

"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>"
            }
          ]
        },
        ...
      }
    },

Een voorbeeldsjabloon voor het bovenstaande vindt u hier op vm-winrm-keyvault-windows

Broncode voor deze sjabloon vindt u op 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

Stap 6: Verbinding maken met de VM

Voordat u verbinding kunt maken met de VM, moet u ervoor zorgen dat uw computer is geconfigureerd voor extern winRM-beheer. Start PowerShell als beheerder en voer de onderstaande opdracht uit om ervoor te zorgen dat u bent ingesteld.

Enable-PSRemoting -Force

Notitie

Mogelijk moet u ervoor zorgen dat de WinRM-service wordt uitgevoerd als het bovenstaande niet werkt. U kunt dat doen met behulp van Get-Service WinRM

Zodra de installatie is voltooid, kunt u verbinding maken met de VM met behulp van de onderstaande opdracht

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