Konfigurieren von Bastion für die Kerberos-Authentifizierung mithilfe des Azure-Portals
In diesem Artikel erfahren Sie, wie Sie Bastion zur Verwendung der Kerberos-Authentifizierung konfigurieren. Die Kerberos-Authentifizierung kann sowohl mit der Basic-SKU von Bastion als auch mit der Standard-SKU verwendet werden. Weitere Informationen zur Kerberos-Authentifizierung finden Sie in der Übersicht zur Kerberos-Authentifizierung. Weitere Informationen zu Azure Bastion finden Sie unter Was ist Azure Bastion?.
Überlegungen
- Die Kerberos-Einstellung kann für Azure Bastion nur im Azure-Portal und nicht mit einem nativen Client konfiguriert werden.
- VMs, die von der lokalen Umgebung zu Azure migriert wurden, werden derzeit für Kerberos nicht unterstützt.
- Die bereichsübergreifende Authentifizierung wird für Kerberos derzeit nicht unterstützt.
- Der Domänencontroller muss eine von Azure gehostete VM innerhalb desselben VNet sein, das Bastion bereitgestellt.
- Änderungen an DNS-Servern werden nicht an Bastion weitergegeben. Eine erneute Bereitstellung von Bastion ist erforderlich, damit DNS-Informationen ordnungsgemäß verteilt werden können. Nachdem Sie Änderungen am DNS-Server vorgenommen haben, müssen Sie die Bastion-Ressource löschen und neu erstellen.
- Wenn weitere Domänencontroller (DCs) hinzugefügt werden, erkennt Bastion nur den ersten DC.
- Wenn weitere DCs für verschiedene Domänen hinzugefügt werden, können sich die hinzugefügten Domänen nicht erfolgreich mit Kerberos authentifizieren.
Voraussetzungen
Ein Azure-Konto mit einem aktiven Abonnement. Sollten Sie über keine Organisation verfügen, können Sie kostenlos eine erstellen. Damit Sie über Ihren Browser mithilfe von Bastion eine Verbindung mit einer VM herstellen können, müssen Sie sich am Azure-Portal anmelden können.
Ein virtuelles Azure-Netzwerk Schritte zum Erstellen eines virtuellen Netzwerks finden Sie unter Schnellstart: Erstellen eines virtuellen Netzwerks.
Aktualisieren von VNet-DNS-Servern
Die folgenden Schritte in diesem Abschnitt helfen Ihnen beim Aktualisieren Ihres virtuellen Netzwerks, um benutzerdefinierte DNS-Einstellungen anzugeben.
- Melden Sie sich beim Azure-Portal an.
- Wechseln Sie zum virtuellen Netzwerk, für das Sie die Bastion-Ressourcen bereitstellen möchten.
- Wechseln Sie zur Seite DNS-Server für Ihr virtuelles Netzwerk, und wählen Sie Benutzerdefiniert aus. Fügen Sie die IP-Adresse Ihres in Azure gehosteten Domänencontrollers hinzu, und wählen Sie Speichern aus.
Bereitstellen von Bastion
- Beginnen Sie die Konfiguration Ihrer Bastion-Bereitstellung mithilfe der Schritte im Tutorial: Bereitstellen von Bastion mithilfe manueller Konfigurationseinstellungen. Konfigurieren Sie die Einstellungen auf der Registerkarte Grundlagen. Klicken Sie dann oben auf der Seite auf Erweitert, um zur Registerkarte „Erweitert“ zu wechseln.
- Wählen Sie auf der Registerkarte Erweitert die Option Kerberos aus.
- Wählen Sie unten auf der Seite Überprüfen + erstellen aus und dann Erstellen, um Bastion in Ihrem virtuellen Netzwerk bereitzustellen.
- Sobald die Bereitstellung abgeschlossen ist, können Sie sie verwenden, um sich bei allen erreichbaren Windows-VMs anzumelden, die mit dem benutzerdefinierten DNS verknüpft sind, das Sie in den früheren Schritten angegeben haben.
So ändern Sie eine vorhandene Bastion-Bereitstellung
Die folgenden Schritte in diesem Abschnitt helfen Ihnen dabei, Ihr virtuelles Netzwerk und die vorhandene Bastion-Bereitstellung für die Kerberos-Authentifizierung zu ändern.
- Aktualisieren Sie die DNS-Einstellungen für Ihr virtuelles Netzwerk.
- Wechseln Sie zur Portalseite für Ihre Bastion-Bereitstellung, und wählen Sie Konfiguration aus.
- Wählen Sie auf der Seite „Konfiguration“ die Kerberos-Authentifizierung und dann Übernehmen aus.
- Bastion wird mit den neuen Konfigurationseinstellungen aktualisiert.
So überprüfen Sie, ob Bastion Kerberos verwendet
Hinweis
Sie müssen den Benutzerprinzipalnamen (User Principal Name, UPN) verwenden, um sich mithilfe von Kerberos anzumelden.
Nachdem Sie Kerberos auf Ihrer Bastion-Ressource aktiviert haben, können Sie überprüfen, ob zur Authentifizierung bei der mit der Zieldomäne verknüpften VM tatsächlich Kerberos verwendet wird.
Melden Sie sich bei der Ziel-VM an (entweder über Bastion oder nicht). Suchen Sie in der Taskleiste nach „Gruppenrichtlinie bearbeiten“, und öffnen Sie den Editor für lokale Gruppenrichtlinien.
Wählen Sie Computerkonfiguration > Windows-Einstellungen > Sicherheitseinstellungen > Lokale Richtlinien >Sicherheitsoptionen aus.
Suchen Sie die Richtlinie Netzwerksicherheit: NTLM einschränken: Eingehender NTLM-Datenverkehr, und legen Sie sie auf Alle Domänenkonten verweigert fest. Da Bastion NTLM für die Authentifizierung verwendet, wenn Kerberos deaktiviert ist, stellt diese Einstellung sicher, dass die NTLM-basierte Authentifizierung für zukünftige Anmeldeversuche auf dem virtuellen Computer nicht erfolgreich ist.
Beenden Sie die VM-Sitzung.
Stellen Sie mithilfe von Bastion erneut eine Verbindung mit der Ziel-VM her. Die Anmeldung sollte erfolgreich sein und angeben, dass Bastion Kerberos (und nicht NTLM) für die Authentifizierung verwendet hat.
Hinweis
Führen Sie die vorherigen Schritte unbedingt aus, um ein Failback auf NTLM zu verhindern. Das Aktivieren von Kerberos (ohne das Verfahren zu befolgen) verhindert ein Failback auf NTLM nicht.
Schnellstart: Einrichten von Bastion mit Kerberos – Resource Manager-Vorlage
Überprüfen der Vorlage
{
"$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')]"
}
}
}
]
}
}
]
}
In der Vorlage wurden die folgenden Ressourcen definiert:
Die folgenden Azure-Ressourcen werden bereitgestellt:
- Microsoft.Network/virtualNetworks: Dient zum Erstellen eines virtuellen Azure-Netzwerks.
- Microsoft.Network/bastionHosts: Erstellen Sie eine Bastion-Instanz mit Standard-SKU mit öffentlicher IP-Adresse und aktiviertem Kerberos-Feature.
- Erstelle Sie eine Windows 10-ClientVM-Komponente und eine Windows Server 2019-ServerVM-Komponente.
Lassen Sie den DNS-Server des virtuellen Netzwerks auf die private IP-Adresse der ServerVM-Komponente (Domänencontroller) verweisen.
Führt eine benutzerdefinierte Skripterweiterung auf der ServerVM-Komponente aus, um sie auf einen Domänencontroller mit dem folgenden Domänennamen heraufzustufen:
bastionkrb.test
.Führt eine benutzerdefinierte Skripterweiterung auf der ClientVM-Komponente aus, um Folgendes zu erreichen:
- Festlegen von NTLM einschränken: Eingehender NTLM-Datenverkehr auf „Alle Domänenkonten verweigern“ (Dadurch wird sichergestellt, dass Kerberos für die Authentifizierung verwendet wird.)
- Einbinden des Zielknotens in die Domäne
bastionkrb.test
Bereitstellen der Vorlage
Stellen Sie zum Einrichten von Kerberos die obige ARM-Vorlage bereit, indem Sie den folgenden PowerShell-Befehl ausführen:
New-AzResourceGroupDeployment -ResourceGroupName <your-rg-name> -TemplateFile "<path-to-template>\KerberosDeployment.json"`
Überprüfen der bereitgestellten Ressourcen
Melden Sie sich jetzt mithilfe von Bastion mit Kerberos-Authentifizierung bei der ClientVM-Komponente an:
- Anmeldeinformationen: Benutzername:
serveruser@bastionkrb.test
, Kennwort:<password-entered-during-deployment>
Nächste Schritte
Weitere Informationen zu Azure Bastion finden Sie unter Was ist Azure Bastion?.