Sdílet prostřednictvím


Konfigurace Bastionu pro ověřování protokolem Kerberos pomocí webu Azure Portal

V tomto článku se dozvíte, jak nakonfigurovat Službu Azure Bastion tak, aby používala ověřování protokolem Kerberos. Ověřování protokolem Kerberos je možné použít s skladovými položkami Basic i Standard Bastion. Další informace o ověřování protokolem Kerberos najdete v přehledu ověřování kerberos. Další informace o službě Azure Bastion najdete v tématu Co je Azure Bastion?

Důležité informace

  • Nastavení Kerberos pro Azure Bastion je možné nakonfigurovat jenom na webu Azure Portal, a ne s nativním klientem.
  • Virtuální počítače migrované z místního prostředí do Azure se v současné době nepodporují pro Kerberos. 
  • Ověřování mezi sférou se v současné době nepodporuje pro Kerberos.
  • Řadič domény musí být virtuální počítač hostovaný v Azure ve stejné virtuální síti, ve které je nasazený bastion.
  • Změny serveru DNS se v současné době nepodporují pro Protokol Kerberos. Po provedení jakýchkoli změn serveru DNS budete muset prostředek Bastion odstranit a znovu vytvořit.
  • Pokud přidáte další řadiče domény, Bastion rozpozná pouze první řadič domény.
  • Pokud jsou přidány další řadiče domény pro různé domény, přidané domény se nedají úspěšně ověřit pomocí protokolu Kerberos.

Požadavky

  • Účet Azure s aktivním předplatným. Pokud ho nemáte, vytvořte si ho zdarma. Abyste se mohli připojit k virtuálnímu počítači přes prohlížeč pomocí Bastionu, musíte se přihlásit k webu Azure Portal.

  • Virtuální síť Azure. Postup vytvoření virtuální sítě najdete v tématu Rychlý start: Vytvoření virtuální sítě.

Aktualizace serverů DNS virtuální sítě

V této části vám následující kroky pomůžou aktualizovat virtuální síť tak, aby určila vlastní nastavení DNS.

  1. Přihlaste se k portálu Azure.
  2. Přejděte do virtuální sítě, pro kterou chcete nasadit prostředky Bastionu.
  3. Přejděte na stránku serverů DNS pro vaši virtuální síť a vyberte Vlastní. Přidejte IP adresu řadiče domény hostovaného v Azure a uložte ji.

Nasazení Bastionu

  1. Začněte konfigurovat nasazení bastionu pomocí kroků v kurzu: Nasazení Bastionu pomocí ručního nastavení konfigurace. Nakonfigurujte nastavení na kartě Základy . Potom v horní části stránky klikněte na Upřesnit a přejděte na kartu Upřesnit.

  2. Na kartě Upřesnit vyberte Kerberos.

    Screenshot of select bastion features.

  3. V dolní části stránky vyberte Zkontrolovat a vytvořit a pak vytvořte bastion do virtuální sítě.

  4. Jakmile se nasazení dokončí, můžete se pomocí něj přihlásit ke všem dostupným virtuálním počítačům s Windows připojeným k vlastnímu DNS, který jste zadali v předchozích krocích.

Úprava existujícího nasazení Bastionu

V této části vám následující kroky pomůžou upravit virtuální síť a stávající nasazení Bastionu pro ověřování protokolem Kerberos.

  1. Aktualizujte nastavení DNS pro vaši virtuální síť.
  2. Přejděte na stránku portálu pro nasazení Bastionu a vyberte Konfigurace.
  3. Na stránce Konfigurace vyberte ověřování protokolem Kerberos a pak vyberte Použít.
  4. Bastion aktualizuje nové nastavení konfigurace.

Ověření, že Bastion používá kerberos

Poznámka:

K přihlášení pomocí protokolu Kerberos musíte použít hlavní název uživatele (UPN).

Jakmile pro prostředek Bastionu povolíte protokol Kerberos, můžete ověřit, že k ověřování cílového virtuálního počítače připojeného k doméně ve skutečnosti používá protokol Kerberos.

  1. Přihlaste se k cílovému virtuálnímu počítači (buď přes Bastion, nebo ne). Na hlavním panelu vyhledejte "Upravit zásady skupiny" a otevřete Editor místních zásad skupiny.

  2. Vyberte Možnosti zabezpečení Nastavení Místní zásady > konfigurace > počítače Nastavení > Zabezpečení > systému Windows.

  3. Vyhledejte zabezpečení sítě zásad : Omezit protokol NTLM: Příchozí provoz NTLM a nastavit ho na Odepřít všechny účty domény. Vzhledem k tomu, že Bastion používá k ověřování protokol NTLM při zakázání protokolu Kerberos, toto nastavení zajistí, že ověřování založené na protokolu NTLM nebude úspěšné pro budoucí pokusy o přihlášení na virtuálním počítači.

  4. Ukončete relaci virtuálního počítače.

  5. Připojení k cílovému virtuálnímu počítači znovu pomocí Bastionu. Přihlášení by mělo proběhnout úspěšně, což znamená, že Bastion k ověřování používal protokol Kerberos (a ne NTLM).

    Poznámka:

    Pokud chcete zabránit navrácení služeb po obnovení do ntLM, ujistěte se, že postupujete podle předchozích kroků. Povolení protokolu Kerberos (bez následujícího postupu) nezabrání navrácení služeb po obnovení do protokolu NTLM.

Rychlý start: Nastavení Bastionu pomocí protokolu Kerberos – šablona Resource Manageru

Kontrola šablony

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "defaultValue": "[resourceGroup().location]",
      "type": "string"
    },
    "defaultNsgName": {
      "type": "string",
      "defaultValue": "Default-nsg"
    },
    "VnetName": {
      "type": "string",
      "defaultValue": "myVnet"
    },
    "ClientVMName": {
      "defaultValue": "Client-vm",
      "type": "string"
    },
    "ServerVMName": {
      "defaultValue": "Server-vm",
      "type": "string"
    },
    "vmsize": {
      "defaultValue": "Standard_DS1_v2",
      "type": "string",
      "metadata": {
        "description": "VM SKU to deploy"
      }
    },
    "ServerVMUsername": {
      "type": "string",
      "defaultValue": "serveruser",
      "metadata": {
        "description": "Admin username on all VMs."
      }
    },
    "ServerVMPassword": {
      "type": "securestring",
      "metadata": {
        "description": "Admin password on all VMs."
      }
    },
    "SafeModeAdministratorPassword": {
      "type": "securestring",
      "metadata": {
        "description": "See https://learn.microsoft.com/en-us/powershell/module/addsdeployment/install-addsdomaincontroller?view=windowsserver2022-ps#-safemodeadministratorpassword"
      }
    },
    "ClientVMUsername": {
      "type": "string",
      "defaultValue": "clientuser",
      "metadata": {
        "description": "username on ClientVM."
      }
    },
    "ClientVMPassword": {
      "type": "securestring",
      "metadata": {
        "description": "password on ClientVM."
      }
    },
    "ServerVmImage": {
      "type": "object",
      "defaultValue": {
        "offer": "WindowsServer",
        "publisher": "MicrosoftWindowsServer",
        "sku": "2019-Datacenter",
        "version": "latest"
      }
    },
    "ClientVmImage": {
      "type": "object",
      "defaultValue": {
        "offer": "Windows",
        "publisher": "microsoftvisualstudio",
        "sku": "Windows-10-N-x64",
        "version": "latest"
      }
    },
    "publicIPAllocationMethod": {
      "type": "string",
      "defaultValue": "Static"
    },
    "BastionName": {
      "defaultValue": "Bastion",
      "type": "string"
    },
    "BastionPublicIPName": {
        "defaultValue": "Bastion-ip",
        "type": "string"
    }
  },
  "variables": {
    "DefaultSubnetId": "[concat(resourceId('Microsoft.Network/virtualNetworks', parameters('VnetName')), '/subnets/default')]",
    "ClientVMSubnetId": "[concat(resourceId('Microsoft.Network/virtualNetworks', parameters('VnetName')), '/subnets/clientvm-subnet')]",
    "DNSServerIpAddress": "10.16.0.4",
    "ClientVMPrivateIpAddress": "10.16.1.4"
  },
  "resources": [
    {
      "apiVersion": "2020-03-01",
      "name": "[parameters('VnetName')]",
      "type": "Microsoft.Network/virtualNetworks",
      "location": "[parameters('location')]",
      "properties": {
        "dhcpOptions": {
          "dnsServers": [ "[variables('DNSServerIpAddress')]" ]
        },
        "subnets": [
          {
            "name": "default",
            "properties": {
              "addressPrefix": "10.16.0.0/24"
            }
          },
          {
            "name": "clientvm-subnet",
            "properties": {
              "addressPrefix": "10.16.1.0/24"
            }
          },
          {
            "name": "AzureBastionSubnet",
            "properties": {
              "addressPrefix": "10.16.2.0/24"
            }
          }
        ],
        "addressSpace": {
          "addressPrefixes": [
            "10.16.0.0/16"
          ]
        }
      }
    },
    {
      "type": "Microsoft.Network/networkInterfaces",
      "apiVersion": "2018-10-01",
      "name": "[concat(parameters('ServerVMName'), 'Nic')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[concat('Microsoft.Network/virtualNetworks/', parameters('VnetName'))]"
      ],
      "properties": {
        "ipConfigurations": [
          {
            "name": "[concat(parameters('ServerVMName'), 'NicIpConfig')]",
            "properties": {
              "privateIPAllocationMethod": "Static",
              "privateIPAddress": "[variables('DNSServerIpAddress')]",
              "subnet": {
                "id": "[variables('DefaultSubnetId')]"
              }
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Compute/virtualMachines",
      "apiVersion": "2020-06-01",
      "name": "[parameters('ServerVMName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[concat('Microsoft.Network/networkInterfaces/', parameters('ServerVMName'), 'Nic')]"
      ],
      "properties": {
        "hardwareProfile": {
          "vmSize": "[parameters('vmSize')]"
        },
        "osProfile": {
          "AdminUsername": "[parameters('ServerVMUsername')]",
          "AdminPassword": "[parameters('ServerVMPassword')]",
          "computerName": "[parameters('ServerVMName')]"
        },
        "storageProfile": {
          "imageReference": "[parameters('ServerVmImage')]",
          "osDisk": {
            "createOption": "FromImage",
            "managedDisk": {
              "storageAccountType": "Standard_LRS"
            }
          }
        },
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "[ResourceId('Microsoft.Network/networkInterfaces/', concat(parameters('ServerVMName'), 'Nic'))]"
            }
          ]
        }
      }
    },
    {
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "apiVersion": "2021-04-01",
      "name": "[concat(parameters('ServerVMName'),'/', 'PromoteToDomainController')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/',parameters('ServerVMName'))]"
      ],
      "properties": {
        "publisher": "Microsoft.Compute",
        "type": "CustomScriptExtension",
        "typeHandlerVersion": "1.7",
        "autoUpgradeMinorVersion": true,
        "settings": {
          "commandToExecute": "[concat('powershell.exe -Command \"Install-windowsfeature AD-domain-services; Import-Module ADDSDeployment;$Secure_String_Pwd = ConvertTo-SecureString ',parameters('SafeModeAdministratorPassword'),' -AsPlainText -Force; Install-ADDSForest -DomainName \"bastionkrb.test\" -SafeModeAdministratorPassword $Secure_String_Pwd -Force:$true')]"
          }
      }
    },
    {
      "type": "Microsoft.Network/networkInterfaces",
      "apiVersion": "2018-10-01",
      "name": "[concat(parameters('ClientVMName'), 'Nic')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[concat('Microsoft.Network/virtualNetworks/', parameters('VnetName'))]",
        "[concat('Microsoft.Compute/virtualMachines/', parameters('ServerVMName'))]"
      ],
      "properties": {
        "ipConfigurations": [
          {
            "name": "[concat(parameters('ClientVMName'), 'NicIpConfig')]",
            "properties": {
              "privateIPAllocationMethod": "Static",
              "privateIPAddress": "[variables('ClientVMPrivateIpAddress')]",
              "subnet": {
                "id": "[variables('ClientVMSubnetId')]"
              }
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Compute/virtualMachines",
      "apiVersion": "2020-06-01",
      "name": "[parameters('ClientVMName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[concat('Microsoft.Network/networkInterfaces/', parameters('ClientVMName'), 'Nic')]"
      ],
      "properties": {
        "hardwareProfile": {
          "vmSize": "[parameters('vmSize')]"
        },
        "osProfile": {
          "AdminUsername": "[parameters('ClientVMUsername')]",
          "AdminPassword": "[parameters('ClientVMPassword')]",
          "computerName": "[parameters('ClientVMName')]"
        },
        "storageProfile": {
          "imageReference": "[parameters('ClientVmImage')]",
          "osDisk": {
            "createOption": "FromImage",
            "managedDisk": {
              "storageAccountType": "Standard_LRS"
            }
          }
        },
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "[ResourceId('Microsoft.Network/networkInterfaces/', concat(parameters('ClientVMName'), 'Nic'))]"
            }
          ]
        }
      }
    },
    {
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "apiVersion": "2021-04-01",
      "name": "[concat(parameters('ClientVMName'),'/', 'DomainJoin')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/',parameters('ClientVMName'))]",
        "[concat('Microsoft.Compute/virtualMachines/', parameters('ServerVMName'),'/extensions/', 'PromoteToDomainController')]",
        "[concat('Microsoft.Network/bastionHosts/', parameters('BastionName'))]"
      ],
      "properties": {
        "publisher": "Microsoft.Compute",
        "type": "CustomScriptExtension",
        "typeHandlerVersion": "1.7",
        "autoUpgradeMinorVersion": true,
        "settings": {
          "commandToExecute": "[concat('powershell.exe -Command Set-ItemProperty -Path HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1_0\\ -Name RestrictReceivingNTLMTraffic -Value 1; $Pass= ConvertTo-SecureString -String ',parameters('ServerVMPassword'),' -AsPlainText -Force; $Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList \"AD\\serveruser\", $Pass; do { try { $joined = add-computer -computername Client-vm -domainname bastionkrb.test –credential $Credential -passthru -restart –force; } catch {}} while ($joined.HasSucceeded -ne $true)')]"
          }
      }
    },
    {
      "apiVersion": "2020-11-01",
      "type": "Microsoft.Network/publicIPAddresses",
      "name": "[parameters('BastionPublicIPName')]",
      "location": "[resourceGroup().location]",
      "sku": {
        "name": "Standard"
      },
      "properties": {
        "publicIPAllocationMethod": "Static"
      },
      "tags": {}
    },
    {
        "type": "Microsoft.Network/bastionHosts",
        "apiVersion": "2020-11-01",
        "name": "[parameters('BastionName')]",
        "location": "[resourceGroup().location]",
        "dependsOn": [
            "[concat('Microsoft.Network/virtualNetworks/', parameters('VnetName'))]",
            "[concat('Microsoft.Network/publicIpAddresses/', parameters('BastionPublicIPName'))]"
        ],
        "sku": {
            "name": "Standard"
        },
        "properties": {
            "enableKerberos": "true",
            "ipConfigurations": [
                {
                    "name": "IpConf",
                    "properties": {
                        "privateIPAllocationMethod": "Dynamic",
                        "publicIPAddress": {
                            "id": "[resourceId('Microsoft.Network/publicIpAddresses', parameters('BastionPublicIPName'))]"
                        },
                        "subnet": {
                            "id": "[concat(resourceId('Microsoft.Network/virtualNetworks', parameters('VnetName')), '/subnets/AzureBastionSubnet')]"
                        }
                    }
                }
            ]
        }
    }
  ]
}

V šabloně byly definovány následující prostředky:

  • Nasadí následující prostředky Azure:
  • Nasměrujte server DNS virtuální sítě na privátní IP adresu virtuálního počítače ServerVM (řadič domény).
  • Spustí na virtuálním počítači ServerVM rozšíření vlastních skriptů, které ho upřednostní na řadič domény s názvem domény: bastionkrb.test.
  • Spustí na virtuálním počítači ClientVM rozšíření vlastních skriptů, které ho bude mít:
    • Omezit protokol NTLM: Příchozí provoz NTLM = Odepřít všechny účty domény (to znamená zajistit, aby se pro ověřování používal protokol Kerberos).
    • Doména se připojí k doméně bastionkrb.test .

Nasazení šablony

Pokud chcete nastavit Kerberos, nasaďte předchozí šablonu ARM spuštěním následujícího příkazu PowerShellu:

New-AzResourceGroupDeployment -ResourceGroupName <your-rg-name> -TemplateFile "<path-to-template>\KerberosDeployment.json"`

Kontrola nasazených prostředků

Teď se přihlaste k virtuálnímu počítači ClientVM pomocí bastionu s ověřováním kerberos:

  • přihlašovací údaje: uživatelské jméno = serveruser@bastionkrb.test a heslo = <password-entered-during-deployment>.

Další kroky

Další informace o službě Azure Bastion najdete v tématu Co je Azure Bastion?