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
- Een sleutelkluis maken
- Een zelfondertekend certificaat maken
- Uw zelfondertekend certificaat uploaden naar Key Vault
- Haal de URL voor uw zelfondertekende certificaat op in de Key Vault
- 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