Настройка доступа WinRM для виртуальных машин в Azure Resource ManagerSetting up WinRM access for Virtual Machines in Azure Resource Manager

Ниже приведены шаги, которые необходимо выполнить для настройки виртуальной машины с возможностью подключения WinRM:Here are the steps you need to take to set up a VM with WinRM connectivity

  1. Создание хранилища ключейCreate a Key Vault
  2. создать самозаверяющий сертификат;Create a self-signed certificate
  3. передать самозаверяющий сертификат в хранилище ключей;Upload your self-signed certificate to Key Vault
  4. получить URL-адрес для самозаверяющего сертификата в хранилище ключей;Get the URL for your self-signed certificate in the Key Vault
  5. сослаться на URL-адрес самозаверяющего сертификата при создании виртуальной машины.Reference your self-signed certificates URL while creating a VM

Примечание

Эта статья была изменена и теперь содержит сведения о новом модуле Az для Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Вы по-прежнему можете использовать модуль AzureRM, исправления ошибок для которого будут продолжать выпускаться как минимум до декабря 2020 г.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Дополнительные сведения о совместимости модуля Az с AzureRM см. в статье Introducing the new Azure PowerShell Az module (Знакомство с новым модулем Az для Azure PowerShell).To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Инструкции по установке модуля Az см. в статье об установке Azure PowerShell.For Az module installation instructions, see Install Azure PowerShell.

Шаг 1. Создание хранилища ключейStep 1: Create a Key Vault

Для создания хранилища ключей можно воспользоваться следующей командой:You can use the below command to create the Key Vault

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

Шаг 2. Создание самозаверяющего сертификатаStep 2: Create a self-signed certificate

Можно создать самозаверяющий сертификат с помощью этого сценария PowerShell.You 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

Шаг 3. Передача самозаверяющего сертификата в Key VaultStep 3: Upload your self-signed certificate to the Key Vault

Перед передачей сертификата в хранилище ключей, созданное на шаге 1, необходимо преобразовать его в формат, который будет понятен для поставщика ресурсов 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. Следующий сценарий PowerShell позволит это сделать:The 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-AzKeyVaultSecret -VaultName "<vault name>" -Name "<secret name>" -SecretValue $secret

Шаг 4. получить URL-адрес для самозаверяющего сертификата в хранилище ключей;Step 4: Get the URL for your self-signed certificate in the Key Vault

При подготовке виртуальной машины поставщику ресурсов Microsoft.Compute требуется URL-адрес для секрета в хранилище ключей.The Microsoft.Compute resource provider needs a URL to the secret inside the Key Vault while provisioning the VM. Это позволяет поставщику ресурсов Microsoft.Compute скачать секрет и создать эквивалент сертификата на виртуальной машине.This enables the Microsoft.Compute resource provider to download the secret and create the equivalent certificate on the VM.

Примечание

URL-адрес секрета также должен включать в себя версию.The URL of the secret needs to include the version as well. Пример URL-адреса выглядит https://contosovault.vault.azure.net:443/secrets/contososecret/01h9db0df2cd4300a20ence585a6s7veAn example URL looks like below https://contosovault.vault.azure.net:443/secrets/contososecret/01h9db0df2cd4300a20ence585a6s7ve

ШаблоныTemplates

Получить ссылку на URL-адрес в шаблоне можно с помощью следующего кода:You 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

Также для получения этого URL-адреса можно воспользоваться следующей командой PowerShell:You can get this URL using the below PowerShell command

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

Шаг 5. сослаться на URL-адрес самозаверяющего сертификата при создании виртуальной машины.Step 5: Reference your self-signed certificates URL while creating a VM

Шаблоны Azure Resource ManagerAzure Resource Manager Templates

При создании виртуальной машины с помощью шаблонов ссылки на сертификат задаются в разделе секретов и разделе winRM, как показано ниже.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>"
            }
          ]
        },
        ...
      }
    },

Пример шаблона для описанного выше сценария можно найти здесь: 201-vm-winrm-keyvault-windowsA sample template for the above can be found here at 201-vm-winrm-keyvault-windows

Исходный код для этого шаблона можно найти на портале GitHubSource code for this template can be found on GitHub

PowerShellPowerShell

$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 -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

Шаг 6. Подключение к виртуальной машинеStep 6: Connecting to the VM

Перед подключением к виртуальной машине убедитесь, что машина настроена для удаленного управления WinRM.Before you can connect to the VM you'll need to make sure your machine is configured for WinRM remote management. Запустите PowerShell от имени администратора и выполните следующую команду, чтобы убедиться в правильности настроек:Start PowerShell as an administrator and execute the below command to make sure you're set up.

Enable-PSRemoting -Force

Примечание

Если вышеописанные действия не дали результата, убедитесь, что служба WinRM запущена.You might need to make sure the WinRM service is running if the above does not work. Это можно сделать с помощью команды Get-Service WinRMYou can do that using Get-Service WinRM

Когда настройки выполнены, можно подключиться к виртуальной машине с помощью следующей команды:Once 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