Azure Resource Manager の仮想マシンの WinRM アクセスを設定するSetting up WinRM access for Virtual Machines in Azure Resource Manager

ここでは WinRM 接続を備えた VM のセットアップに必要な手順を説明します。Here are the steps you need to take to set up a VM with WinRM connectivity

  1. Key Vault の作成Create a Key Vault
  2. 自己署名証明書の作成Create a self-signed certificate
  3. 自己署名証明書を Key Vault にアップロードするUpload your self-signed certificate to Key Vault
  4. Key Vault の自己署名証明書の URL を取得するGet the URL for your self-signed certificate in the Key Vault
  5. VM を作成するときに、自己署名証明書の URL を参照するReference your self-signed certificates URL while creating a VM

注意

この記事は、新しい Azure PowerShell Az モジュールを使用するために更新されました。This article has been updated to use the new Azure PowerShell Az module. AzureRM モジュールはまだ使用でき、少なくとも 2020 年 12 月までは引き続きバグ修正が行われます。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 (新しい Azure PowerShell Az モジュールの概要)」を参照してください。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:Key Vault の作成Step 1: Create a Key Vault

次のコマンドを使用して、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 Vault に自己署名証明書をアップロードするStep 3: Upload your self-signed certificate to the Key Vault

手順 1 で作成した Key Vault に証明書をアップロードする前に、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:Key Vault の自己署名証明書の URL を取得するStep 4: Get the URL for your self-signed certificate in the Key Vault

VM をプロビジョニングするときに、Microsoft.Compute リソース プロバイダーには Key Vault 内部のシークレットへの URL が必要です。The Microsoft.Compute resource provider needs a URL to the secret inside the Key Vault while provisioning the VM. これにより、Microsoft.Compute リソース プロバイダーがシークレットをダウンロードして、VM 上に同様の証明書を作成することができます。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

次の PowerShell コマンドを使用して、この URL を取得することができますYou can get this URL using the below PowerShell command

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

手順 5:VM を作成するときに、自己署名証明書の URL を参照するStep 5: Reference your self-signed certificates URL while creating a VM

Azure Resource Manager のテンプレートAzure Resource Manager Templates

テンプレートを使用して VM を作成する場合、"secrets" セクションと "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:VM に接続するStep 6: Connecting to the VM

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

設定が完了すると、次のコマンドを使用して VM に接続することができます。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