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