Azure Resource Manager에서 Virtual Machines에 대한 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. 주요 자격 증명 모음 만들기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. 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 호환성에 대한 자세한 내용은 새 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단계: 주요 자격 증명 모음 만들기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단계: 키 자격 증명 모음에 자체 서명된 인증서 업로드Step 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 리소스 공급자는 VM을 프로비전하는 동안 주요 자격 증명 모음 내에 포함된 암호에 대한 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/01h9db0df2cd4300a20ence585a6s7ve 아래/와 같습니다.An 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 리소스 관리자 템플릿Azure Resource Manager Templates

템플릿을 통해 VM을 만드는 동안 인증서가 아래와 같이 암호 섹션 및 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