Azure Resource Manager'da Sanal Makineler için WinRM erişimini ayarlama

Şunlar için geçerlidir: ✔️ Windows VM'leri ✔️ Esnek ölçek kümeleri

WinRM bağlantısına sahip bir VM ayarlamak için izlemeniz gereken adımlar aşağıdadır

  1. Anahtar kasası oluşturma
  2. Otomatik olarak imzalanan sertifika oluşturma
  3. Otomatik olarak imzalanan sertifikanızı Key Vault'a yükleme
  4. Key Vault'ta otomatik olarak imzalanan sertifikanızın URL'sini alma
  5. VM oluştururken otomatik olarak imzalanan sertifikaLAR URL'nize başvurma

1. Adım: Key Vault oluşturma

Key Vault'u oluşturmak için aşağıdaki komutu kullanabilirsiniz

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

2. Adım: Otomatik olarak imzalanan sertifika oluşturma

Bu PowerShell betiğini kullanarak otomatik olarak imzalanan bir sertifika oluşturabilirsiniz

$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. Adım: Otomatik olarak imzalanan sertifikanızı Key Vault'a yükleme

Sertifikayı 1. adımda oluşturulan Key Vault'a yüklemeden önce, Microsoft.Compute kaynak sağlayıcısının anlayacağı bir biçime dönüştürülmesi gerekir. Aşağıdaki PowerShell betiği bunu yapmanıza olanak sağlar

$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

4. Adım: Key Vault'ta otomatik olarak imzalanan sertifikanızın URL'sini alma

Microsoft.Compute kaynak sağlayıcısı, VM'yi sağlarken Key Vault içindeki gizli diziye yönelik bir URL'ye ihtiyaç duyar. Bu, Microsoft.Compute kaynak sağlayıcısının gizli diziyi indirmesine ve sanal makinede eşdeğer sertifika oluşturmasına olanak tanır.

Not

Gizli dizinin URL'sinin sürümü de içermesi gerekir. Örnek BIR URL aşağıdaki gibi görünür https://contosovault.vault.azure.net:443/secrets/contososecret/01h9db0df2cd4300a20ence585a6s7ve

Şablonlar

Aşağıdaki kodu kullanarak şablondaki URL'nin bağlantısını alabilirsiniz

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

PowerShell

Aşağıdaki PowerShell komutunu kullanarak bu URL'yi alabilirsiniz

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

5. Adım: VM oluştururken otomatik olarak imzalanan sertifikalar URL'nize başvurma

Azure Resource Manager Şablonları

Şablonlar aracılığıyla vm oluştururken, sertifikaya gizli diziler bölümünde ve winRM bölümünde aşağıdaki gibi başvurulur:

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

Yukarıdakiler için örnek şablon burada vm-winrm-keyvault-windows adresinde bulunabilir

Bu şablonun kaynak kodu GitHub'da bulunabilir

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

6. Adım: VM'ye bağlanma

VM'ye bağlanabilmeniz için önce makinenizin WinRM uzaktan yönetimi için yapılandırıldığından emin olmanız gerekir. PowerShell'i yönetici olarak başlatın ve aşağıdaki komutu yürüterek ayarlandığından emin olun.

Enable-PSRemoting -Force

Not

Yukarıdakiler işe yaramazsa WinRM hizmetinin çalıştığından emin olmanız gerekebilir. Bunu şu şekilde yapabilirsiniz: Get-Service WinRM

Kurulum tamamlandıktan sonra aşağıdaki komutu kullanarak VM'ye bağlanabilirsiniz

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