Delen via


WinRM-toegang instellen voor virtuele machines in Azure Resource Manager

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

Hier volgen de stappen die u moet uitvoeren om een VIRTUELE machine in te stellen met WinRM-connectiviteit

  1. Een sleutelkluis maken
  2. Een zelfondertekend certificaat maken
  3. Uw zelfondertekende certificaat uploaden naar Key Vault
  4. De URL voor uw zelfondertekende certificaat ophalen in de Key Vault
  5. Verwijzen naar uw zelfondertekende certificaat-URL tijdens het maken van een VIRTUELE machine

Stap 1: Een sleutelkluis maken

U kunt de onderstaande opdracht gebruiken om de Sleutelkluis te maken

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 behulp van 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 sleutelkluis 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 op voor uw zelfondertekende certificaat in Key Vault

De Resourceprovider Microsoft.Compute heeft een URL naar het geheim in de Sleutelkluis nodig tijdens het inrichten van de VIRTUELE machine. Hierdoor kan de Microsoft.Compute-resourceprovider het geheim downloaden en het equivalente certificaat op de VIRTUELE machine 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 uw zelfondertekende certificaat-URL tijdens het maken van een VIRTUELE machine

Azure Resource Manager-sjablonen

Tijdens het maken van een VIRTUELE machine via sjablonen krijgt het certificaat een verwijzing in de sectie geheimen en de winRM-sectie 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>"
            }
          ]
        },
        ...
      }
    },

Hier vindt u een voorbeeldsjabloon voor 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 virtuele machine, moet u ervoor zorgen dat uw computer is geconfigureerd voor extern beheer van WinRM. Start PowerShell als beheerder en voer de onderstaande opdracht uit om ervoor te zorgen dat u klaar bent.

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 virtuele machine 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