Configurare Bastion per l'autenticazione Kerberos usando il portale di Azure
Questo articolo illustra come configurare Azure Bastion per l'uso dell'autenticazione Kerberos. L'autenticazione Kerberos può essere usata con gli SKU Basic e Standard Bastion. Per altre informazioni sull'autenticazione Kerberos, vedere La panoramica dell'autenticazione Kerberos. Per altre informazioni su Azure Bastion, vedere Che cos'è Azure Bastion?
Considerazioni
- L'impostazione Kerberos per Azure Bastion può essere configurata solo nel portale di Azure e non con il client nativo.
- Le macchine virtuali migrate dall'ambiente locale ad Azure non sono attualmente supportate per Kerberos.
- L'autenticazione tra aree di autenticazione non è attualmente supportata per Kerberos.
- Il controller di dominio deve essere una macchina virtuale ospitata in Azure all'interno della stessa rete virtuale distribuita da bastion.
- Le modifiche apportate ai server DNS non vengono propagate a Bastion. Per propagare correttamente le informazioni DNS, è necessaria la ri-distribuzione bastion. Dopo aver apportato modifiche al server DNS, è necessario eliminare e ricreare la risorsa Bastion.
- Se vengono aggiunti controller di dominio aggiuntivi (controller di dominio), Bastion riconoscerà solo il primo controller di dominio.
- Se vengono aggiunti controller di dominio aggiuntivi per domini diversi, i domini aggiunti non possono eseguire correttamente l'autenticazione con Kerberos.
Prerequisiti
Un account Azure con una sottoscrizione attiva. Se non è disponibile, crearne uno gratuitamente. Per potersi connettere a una VM tramite il browser con Bastion, è necessario essere in grado di accedere al portale di Azure.
Una rete virtuale di Azure. Per la procedura per creare una rete virtuale, vedere Avvio rapido: Creare una rete virtuale.
Aggiornare i server DNS della rete virtuale
In questa sezione, i passaggi seguenti consentono di aggiornare la rete virtuale per specificare le impostazioni DNS personalizzate.
- Accedere al portale di Azure.
- Passare alla rete virtuale per cui si vogliono distribuire le risorse Bastion.
- Passare alla pagina Server DNS per la rete virtuale e selezionare Personalizzato. Aggiungere l'indirizzo IP del controller di dominio ospitato in Azure e salvare.
Distribuire Bastion
Iniziare a configurare la distribuzione bastion seguendo la procedura descritta in Esercitazione: Distribuire Bastion usando le impostazioni di configurazione manuali. Configurare le impostazioni nella scheda Informazioni di base . Quindi, nella parte superiore della pagina, fare clic su Avanzate per passare alla scheda Avanzate.
Nella scheda Avanzate selezionare Kerberos.
Nella parte inferiore della pagina selezionare Rivedi e crea e quindi Crea per distribuire Bastion nella rete virtuale.
Al termine della distribuzione, è possibile usarlo per accedere a tutte le macchine virtuali Windows raggiungibili aggiunte al DNS personalizzato specificato nei passaggi precedenti.
Per modificare una distribuzione Bastion esistente
In questa sezione vengono illustrati i passaggi seguenti che consentono di modificare la rete virtuale e la distribuzione bastion esistente per l'autenticazione Kerberos.
- Aggiornare le impostazioni DNS per la rete virtuale.
- Passare alla pagina del portale per la distribuzione di Bastion e selezionare Configurazione.
- Nella pagina Configurazione selezionare Autenticazione Kerberos, quindi selezionare Applica.
- Bastion viene aggiornato con le nuove impostazioni di configurazione.
Per verificare che Bastion usi Kerberos
Nota
È necessario usare il nome dell'entità utente (UPN) per accedere con Kerberos.
Dopo aver abilitato Kerberos nella risorsa Bastion, è possibile verificare che usi effettivamente Kerberos per l'autenticazione nella macchina virtuale aggiunta a un dominio di destinazione.
Accedere alla macchina virtuale di destinazione (tramite Bastion o no). Cercare "Modifica Criteri di gruppo" dalla barra delle applicazioni e aprire l'Editor Criteri di gruppo locali.
Selezionare Configurazione > computer Impostazioni di Windows Impostazioni > > di sicurezza Opzioni di sicurezza dei criteri > locali.
Trovare i criteri Sicurezza rete: Limita NTLM: Traffico NTLM in ingresso e impostalo su Nega tutti gli account di dominio. Poiché Bastion usa NTLM per l'autenticazione quando Kerberos è disabilitato, questa impostazione garantisce che l'autenticazione basata su NTLM non abbia esito positivo per i tentativi di accesso futuri nella macchina virtuale.
Terminare la sessione della macchina virtuale.
Connettersi di nuovo alla macchina virtuale di destinazione usando Bastion. L'accesso dovrebbe avere esito positivo, a indicare che Bastion ha usato Kerberos (e non NTLM) per l'autenticazione.
Nota
Per evitare il failback in NTLM, assicurarsi di seguire i passaggi precedenti. L'abilitazione di Kerberos (senza seguire la procedura) non impedisce il failback a NTLM.
Guida introduttiva: Configurare Bastion con Kerberos - Modello di Resource Manager
Rivedere il modello
{
"$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')]"
}
}
}
]
}
}
]
}
Nel modello sono state definite le risorse seguenti:
- Distribuisce le risorse di Azure seguenti:
- Microsoft.Network/virtualNetworks: per creare una rete virtuale di Azure.
- Microsoft.Network/bastionHosts: creare uno SKU Standard Bastion con un indirizzo IP pubblico e una funzionalità Kerberos abilitata.
- Creare una Macchina virtuale client Windows 10 e una ServerVM di Windows Server 2019.
- Fare in modo che il server DNS del punto di rete virtuale punti all'indirizzo IP privato di ServerVM (controller di dominio).
- Esegue un'estensione script personalizzata in ServerVM per alzarla di livello a un controller di dominio con nome di dominio:
bastionkrb.test
. - Esegue un'estensione script personalizzata in ClientVM per renderla disponibile:
- Limita NTLM: traffico NTLM in ingresso = Nega tutti gli account di dominio (per assicurarsi che Kerberos venga usato per l'autenticazione).
- Aggiunta al
bastionkrb.test
dominio.
Distribuire il modello
Per configurare Kerberos, distribuire il modello di Resource Manager precedente eseguendo il comando powerShell seguente:
New-AzResourceGroupDeployment -ResourceGroupName <your-rg-name> -TemplateFile "<path-to-template>\KerberosDeployment.json"`
Esaminare le risorse distribuite
Accedere ora a ClientVM usando Bastion con l'autenticazione Kerberos:
- credentials: username =
serveruser@bastionkrb.test
e password =<password-entered-during-deployment>
.
Passaggi successivi
Per altre informazioni su Azure Bastion, vedere Che cos'è Azure Bastion?