Sdílet prostřednictvím


Nastavení přístupu WinRM pro virtuální počítače v Azure Resource Manageru

Platí pro: ✔️ Flexibilní škálovací sady virtuálních ✔️ počítačů s Windows

Tady je postup nastavení virtuálního počítače s připojením WinRM.

  1. Vytvoření trezoru klíčů
  2. Vytvoření certifikátu podepsaného jeho držitelem (self-signed certificate)
  3. Nahrání certifikátu podepsaného svým držitelem do služby Key Vault
  4. Získání adresy URL certifikátu podepsaného svým držitelem ve službě Key Vault
  5. Odkazování na adresu URL certifikátů podepsaných svým držitelem při vytváření virtuálního počítače

Krok 1: Vytvoření služby Key Vault

K vytvoření služby Key Vault můžete použít následující příkaz.

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

Krok 2: Vytvoření certifikátu podepsaného svým držitelem

Certifikát podepsaný svým držitelem můžete vytvořit pomocí tohoto skriptu PowerShellu.

$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

Krok 3: Nahrání certifikátu podepsaného svým držitelem do služby Key Vault

Před nahráním certifikátu do služby Key Vault vytvořené v kroku 1 je potřeba ho převést do formátu, kterému poskytovatel prostředků Microsoft.Compute rozumí. Následující skript PowerShellu vám to umožní

$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

Krok 4: Získání adresy URL certifikátu podepsaného svým držitelem ve službě Key Vault

Poskytovatel prostředků Microsoft.Compute potřebuje při zřizování virtuálního počítače adresu URL tajného kódu uvnitř služby Key Vault. To umožňuje poskytovateli prostředků Microsoft.Compute stáhnout tajný klíč a vytvořit na virtuálním počítači ekvivalentní certifikát.

Poznámka:

Adresa URL tajného kódu musí obsahovat i verzi. Příklad adresy URL vypadá takto: https://contosovault.vault.azure.net:443/secrets/contososecret/01h9db0df2cd4300a20ence585a6s7ve

Šablony

Pomocí následujícího kódu můžete získat odkaz na adresu URL v šabloně.

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

PowerShell

Tuto adresu URL můžete získat pomocí následujícího příkazu PowerShellu.

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

Krok 5: Odkazování na adresu URL certifikátů podepsaných svým držitelem při vytváření virtuálního počítače

Šablony Azure Resource Manageru

Při vytváření virtuálního počítače prostřednictvím šablon se na certifikát odkazuje v části tajných kódů a v části winRM, jak je uvedeno níže:

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

Ukázkovou šablonu výše uvedené šablony najdete tady na webu vm-winrm-keyvault-windows.

Zdrojový kód pro tuto šablonu najdete na GitHubu.

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

Krok 6: Připojení k virtuálnímu počítači

Než se budete moct připojit k virtuálnímu počítači, musíte se ujistit, že je váš počítač nakonfigurovaný pro vzdálenou správu WinRM. Spusťte PowerShell jako správce a spusťte následující příkaz, abyste měli jistotu, že jste nastavili.

Enable-PSRemoting -Force

Poznámka:

Pokud výše uvedená služba nefunguje, možná budete muset zajistit, aby služba WinRM běžela. Můžete to udělat pomocí Get-Service WinRM

Po dokončení instalace se můžete k virtuálnímu počítači připojit pomocí následujícího příkazu.

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