Configurando o acesso do WinRM para máquinas virtuais no Azure Resource Manager
Aplica-se a: ✔️ VMs ✔️ do Windows Conjuntos de escala flexíveis
Aqui estão as etapas que você precisa seguir para configurar uma VM com conectividade WinRM
- Criar um Key Vault
- Criar um certificado autoassinado
- Carregue o seu certificado autoassinado para o Cofre da Chave
- Obter o URL do seu certificado autoassinado no Cofre da Chave
- Fazer referência à URL de seus certificados autoassinados ao criar uma VM
Etapa 1: Criar um cofre de chaves
Você pode usar o comando abaixo para criar o Cofre da Chave
New-AzKeyVault -VaultName "<vault-name>" -ResourceGroupName "<rg-name>" -Location "<vault-location>" -EnabledForDeployment -EnabledForTemplateDeployment
Etapa 2: Criar um certificado autoassinado
Você pode criar um certificado autoassinado usando este script do PowerShell
$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
Etapa 3: Carregue seu certificado autoassinado para o Cofre da Chave
Antes de carregar o certificado para o Cofre da Chave criado na etapa 1, ele precisa ser convertido em um formato que o provedor de recursos Microsoft.Compute entenderá. O script do PowerShell abaixo permitirá que você faça isso
$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
Etapa 4: Obter a URL do seu certificado autoassinado no Cofre da Chave
O provedor de recursos Microsoft.Compute precisa de uma URL para o segredo dentro do Cofre da Chave durante o provisionamento da VM. Isso permite que o provedor de recursos Microsoft.Compute baixe o segredo e crie o certificado equivalente na VM.
Nota
O URL do segredo também precisa incluir a versão. Um exemplo de URL se parece abaixo https://contosovault.vault.azure.net:443/secrets/contososecret/01h9db0df2cd4300a20ence585a6s7ve
Modelos
Você pode obter o link para o URL no modelo usando o código abaixo
"certificateUrl": "[reference(resourceId(resourceGroup().name, 'Microsoft.KeyVault/vaults/secrets', '<vault-name>', '<secret-name>'), '2015-06-01').secretUriWithVersion]"
PowerShell
Você pode obter essa URL usando o comando PowerShell abaixo
$secretURL = (Get-AzKeyVaultSecret -VaultName "<vault name>" -Name "<secret name>").Id
Etapa 5: Fazer referência à URL de certificados autoassinados ao criar uma VM
Modelos do Azure Resource Manager
Ao criar uma VM por meio de modelos, o certificado é referenciado na seção segredos e na seção winRM, conforme abaixo:
"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>"
}
]
},
...
}
},
Um modelo de exemplo para o acima pode ser encontrado aqui em vm-winrm-keyvault-windows
O código-fonte deste modelo pode ser encontrado no 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
Etapa 6: Conectando-se à VM
Antes de se conectar à VM, você precisará verificar se sua máquina está configurada para o gerenciamento remoto do WinRM. Inicie o PowerShell como administrador e execute o comando abaixo para garantir que você esteja configurado.
Enable-PSRemoting -Force
Nota
Talvez seja necessário certificar-se de que o serviço WinRM está em execução se o acima não funcionar. Pode fazê-lo utilizando Get-Service WinRM
Quando a configuração estiver concluída, você poderá se conectar à VM usando o comando abaixo
Enter-PSSession -ConnectionUri https://<public-ip-dns-of-the-vm>:5986 -Credential $cred -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck) -Authentication Negotiate