Partilhar via


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

  1. Criar um Key Vault
  2. Criar um certificado autoassinado
  3. Carregue o seu certificado autoassinado para o Cofre da Chave
  4. Obter o URL do seu certificado autoassinado no Cofre da Chave
  5. 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