Configurare l'accesso WinRM per le macchine virtuali in Azure Resource ManagerSetting up WinRM access for Virtual Machines in Azure Resource Manager

WinRM nella gestione del servizio Azure e Azure Resource ManagerWinRM in Azure Service Management vs Azure Resource Manager

Nota

Azure offre due modelli di distribuzione per creare e usare le risorse: Gestione risorse e la distribuzione classica.Azure has two different deployment models for creating and working with resources: Resource Manager and classic. Questo articolo illustra il modello di distribuzione Resource Manager, che Microsoft consiglia di usare per le nuove distribuzioni in sostituzione del modello di distribuzione classica.This article covers using the Resource Manager deployment model, which Microsoft recommends for new deployments instead of the classic deployment model.

  • Per una panoramica di Azure Resource Manager, vedere questo articoloFor an overview of the Azure Resource Manager, please see this article
  • Per conoscere le differenze tra la gestione del servizio Azure e Azure Resource Manager, consultare questo articoloFor differences between Azure Service Management and Azure Resource Manager, please see this article

La differenza principale nell'impostazione della configurazione di WinRM tra i due stack consiste nelle modalità di installazione del certificato nella VM.The key difference in setting up WinRM configuration between the two stacks is how the certificate gets installed on the VM. Nello stack di Azure Resource Manager, i certificati vengono modellati come risorse gestite dal provider di risorse dell'insieme di credenziali delle chiavi.In the Azure Resource Manager stack, the certificates are modeled as resources managed by the Key Vault Resource Provider. Pertanto, l'utente deve fornire il proprio certificato e caricarlo in un insieme di credenziali delle chiavi per poterlo utilizzare in una VM.Therefore, the user needs to provide their own certificate and upload it to a Key Vault before using it in a VM.

Di seguito è descritta la procedura per configurare una VM con connettività WinRMHere are the steps you need to take to set up a VM with WinRM connectivity

  1. Creare un insieme di credenziali delle chiaviCreate a Key Vault
  2. Creare un certificato autofirmatoCreate a self-signed certificate
  3. Caricare il certificato autofirmato per l'insieme di credenziali delle chiaviUpload your self-signed certificate to Key Vault
  4. Ottenere l'URL del certificato autofirmato nell'insieme di credenziali delle chiaviGet the URL for your self-signed certificate in the Key Vault
  5. Fare riferimento all'URL del certificato autofirmato durante la creazione di una VMReference your self-signed certificates URL while creating a VM

Passaggio 1: Creare un insieme di credenziali delle chiaviStep 1: Create a Key Vault

Il seguente comando consente di creare l'insieme di credenziali delle chiaviYou can use the below command to create the Key Vault

New-AzureRmKeyVault -VaultName "<vault-name>" -ResourceGroupName "<rg-name>" -Location "<vault-location>" -EnabledForDeployment -EnabledForTemplateDeployment

Passaggio 2: Creare un certificato autofirmatoStep 2: Create a self-signed certificate

Per creare un certificato autofirmato, è possibile utilizzare questo script PowerShellYou can create a self-signed certificate using this 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

Passaggio 3: Caricare il certificato autofirmato per l'insieme di credenziali delle chiaviStep 3: Upload your self-signed certificate to the Key Vault

Prima di caricare il certificato nell'insieme di credenziali delle chiavi creato al Passaggio 1, è necessario convertirlo in un formato comprensibile per il provider di risorse Microsoft.Compute.Before uploading the certificate to the Key Vault created in step 1, it needs to converted into a format the Microsoft.Compute resource provider will understand. Per farlo, utilizzare lo script PowerShell qui di seguitoThe below PowerShell script will allow you do that

$fileName = "<Path to the .pfx file>"
$fileContentBytes = Get-Content $fileName -Encoding Byte
$fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes)

$jsonObject = @"
{
  "data": "$filecontentencoded",
  "dataType" :"pfx",
  "password": "<password>"
}
"@

$jsonObjectBytes = [System.Text.Encoding]::UTF8.GetBytes($jsonObject)
$jsonEncoded = [System.Convert]::ToBase64String($jsonObjectBytes)

$secret = ConvertTo-SecureString -String $jsonEncoded -AsPlainText –Force
Set-AzureKeyVaultSecret -VaultName "<vault name>" -Name "<secret name>" -SecretValue $secret

Passaggio 4: Ottenere l'URL del certificato autofirmato nell'insieme di credenziali delle chiaviStep 4: Get the URL for your self-signed certificate in the Key Vault

Durante il provisioning della VM, il provider di risorse Microsoft.Compute necessita dell'URL della chiave privata all'interno dell'insieme di credenziali delle chiavi.The Microsoft.Compute resource provider needs a URL to the secret inside the Key Vault while provisioning the VM. Ciò consente al provider di risorse Microsoft.Compute di scaricare la chiave privata e creare il certificato equivalente nella VM.This enables the Microsoft.Compute resource provider to download the secret and create the equivalent certificate on the VM.

Nota

L'URL della chiave privata deve includerne anche la versione.The URL of the secret needs to include the version as well. Di seguito è riportato un esempio di URL: https://contosovault.vault.azure.net:443/secrets/contososecret/01h9db0df2cd4300a20ence585a6s7veAn example URL looks like below https://contosovault.vault.azure.net:443/secrets/contososecret/01h9db0df2cd4300a20ence585a6s7ve

ModelliTemplates

Per ottenere il collegamento all'URL nel modello, è possibile utilizzre il codice seguenteYou can get the link to the URL in the template using the below code

"certificateUrl": "[reference(resourceId(resourceGroup().name, 'Microsoft.KeyVault/vaults/secrets', '<vault-name>', '<secret-name>'), '2015-06-01').secretUriWithVersion]"

PowerShellPowerShell

Questo URL può essere ottenuto utilizzando il seguente comando PowerShellYou can get this URL using the below PowerShell command

$secretURL = (Get-AzureKeyVaultSecret -VaultName "<vault name>" -Name "<secret name>").Id

Passaggio 5: Durante la creazione di una VM, fare riferimento all'URL dei certificati autofirmatiStep 5: Reference your self-signed certificates URL while creating a VM

Modelli di Azure Resource ManagerAzure Resource Manager Templates

Quando si crea una VM tramite modelli, viene fatto riferimento al certificato nelle sezioni delle chiavi private e di WinRM, come indicato di seguito:While creating a VM through templates, the certificate gets referenced in the secrets section and the winRM section as below:

"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>"
            }
          ]
        },
        ...
      }
    },

Un modello di esempio per quanto detto sopra è disponibile qui: 201-vm-winrm-keyvault-windowsA sample template for the above can be found here at 201-vm-winrm-keyvault-windows

Il codice sorgente di questo modello è reperibile in GitHubSource code for this template can be found on GitHub

PowerShellPowerShell

$vm = New-AzureRmVMConfig -VMName "<VM name>" -VMSize "<VM Size>"
$credential = Get-Credential
$secretURL = (Get-AzureKeyVaultSecret -VaultName "<vault name>" -Name "<secret name>").Id
$vm = Set-AzureRmVMOperatingSystem -VM $vm -Windows -ComputerName "<Computer Name>" -Credential $credential -WinRMHttp -WinRMHttps -WinRMCertificateUrl $secretURL
$sourceVaultId = (Get-AzureRmKeyVault -ResourceGroupName "<Resource Group name>" -VaultName "<Vault Name>").ResourceId
$CertificateStore = "My"
$vm = Add-AzureRmVMSecret -VM $vm -SourceVaultId $sourceVaultId -CertificateStore $CertificateStore -CertificateUrl $secretURL

Passaggio 6: Connettersi alla VMStep 6: Connecting to the VM

Per potersi connettere alla VM è necessario controllare di aver configurato il computer per la gestione remota di WinRM.Before you can connect to the VM you'll need to make sure your machine is configured for WinRM remote management. Avviare PowerShell come amministratore ed eseguire il comando seguente per verificare la configurazione.Start PowerShell as an administrator and execute the below command to make sure you're set up.

Enable-PSRemoting -Force

Nota

Se non si riesce, potrebbe essere necessario verificare che il servizio WinRM sia in esecuzione.You might need to make sure the WinRM service is running if the above does not work. Per farlo, utilizzare Get-Service WinRMYou can do that using Get-Service WinRM

Dopo avere completato l'installazione, è possibile connettersi alla VM utilizzando il comando seguenteOnce the setup is done, you can connect to the VM using the below command

Enter-PSSession -ConnectionUri https://<public-ip-dns-of-the-vm>:5986 -Credential $cred -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck) -Authentication Negotiate