Configurar o Bastion para a autenticação Kerberos usando o portal do Azure
Este artigo mostra como configurar o Azure Bastion para usar a autenticação Kerberos. A autenticação Kerberos pode ser usada com os SKUs Básico e Bastion Standard. Para obter mais informações sobre a autenticação Kerberos, consulte a Visão geral da autenticação Kerberos. Para obter mais informações sobre o Azure Bastion, confira O que é o Azure Bastion?
Considerações
- A configuração do Kerberos para o Azure Bastion pode ser definida somente no portal do Azure e não com cliente nativo.
- Atualmente, as VMs migradas do local para o Azure não têm suporte para Kerberos.
- Atualmente, a autenticação entre realms não tem suporte para Kerberos.
- O controlador de domínio deve ser uma VM hospedada do Azure na mesma VNET que o bastion está implantado.
- Atualmente, as alterações no servidor DNS não têm suporte para Kerberos. Depois de fazer alterações no servidor DNS, você precisará excluir e recriar o recurso do Bastion.
- Se forem adicionados outros DCs (controladores de domínio), o Bastion reconhecerá apenas o primeiro DC.
- Se DCs adicionais forem adicionados para domínios diferentes, os domínios adicionados não poderão se autenticar com êxito com o Kerberos.
Pré-requisitos
Uma conta do Azure com uma assinatura ativa. Caso não tenha uma, crie uma gratuitamente. Para se conectar a uma VM pelo navegador usando o Bastion, você precisa conseguir entrar no portal do Azure.
Uma rede virtual do Azure. Para obter as etapas para criar uma VNet, consulte Início Rápido: Criar uma rede virtual.
Atualizar servidores DNS da VNet
Nesta seção, as etapas a seguir ajudam você a atualizar sua rede virtual para especificar configurações de DNS personalizadas.
- Entre no portal do Azure.
- Vá para a rede virtual para a qual você deseja implantar os recursos do Bastion.
- Vá para a página de Servidores DNS para sua VNet e selecione Personalizar. Adicione o endereço IP do controlador de domínio hospedado pelo Azure e selecione Salvar.
Implantar o Bastion
Comece a configurar a implantação do Bastion seguindo as etapas em Tutorial: Implantar o Bastion usando definições de configuração manuais. Defina as configurações na guia Noções básicas. Em seguida, na parte superior da página, clique em Avançado para ir para a guia Avançado.
Na guia Avançado, selecione Kerberos.
Na parte inferior da página, selecione Examinar + criar e, em seguida, Criar para implantar o Bastion em sua rede virtual.
Depois que a implantação for concluída, você poderá usá-la para entrar em qualquer VM Windows acessível ingressada no DNS personalizado especificado nas etapas anteriores.
Para modificar uma implantação existente do Bastion
Nesta seção, as etapas a seguir ajudam você a modificar sua rede virtual e a implantação existente do Bastion para a autenticação Kerberos.
- Atualize as configurações de DNS para a sua rede virtual.
- Acesse a página do portal para a implantação do Bastion e selecione Configuração.
- Na página Configuração, selecione Autenticação Kerberos e, em seguida, Aplicar.
- O Bastion será atualizado com as novas configurações.
Para verificar se o Bastion está usando Kerberos
Observação
Use o nome UPN para se conectar usando o Kerberos.
Depois de habilitar o Kerberos no recurso do Bastion, você poderá verificar se ele está realmente usando o Kerberos para autenticação na VM de destino conectada ao domínio.
Entre na VM de destino (via Bastion ou não). Procure por "Editar Política de Grupo" na barra de tarefas e abra o Editor de Política de Grupo Local.
Selecione Configuração do Computador > Configurações do Windows > Configurações de Segurança > Políticas Locais > Opções de Segurança.
Localize a política Segurança de rede: Restringir NTLM: Tráfego NTLM de entrada e defina-o como Negar todas as contas de domínio. Como o Bastion usa o NTLM para autenticação quando o Kerberos está desabilitado, essa configuração garante que a autenticação baseada em NTLM não tenha êxito para tentativas futuras de entrada na VM.
Encerrar a sessão da VM.
Conecte-se à VM de destino novamente usando o Bastion. A entrada deve ser bem-sucedida, indicando que o Bastion usou Kerberos (e não NTLM) para autenticação.
Observação
Para evitar o failback para o NTLM, siga as etapas anteriores. Habilitar o Kerberos (sem seguir o procedimento) não impedirá o failback para o NTLM.
Início Rápido: Configurar o Bastion com o Kerberos – Modelo do Resource Manager
Examinar o modelo
{
"$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')]"
}
}
}
]
}
}
]
}
Os seguintes recursos foram definidos no modelo:
- Implanta os seguintes recursos do Azure:
- Microsoft.Network/virtualNetworks: criar uma rede virtual do Azure.
- Microsoft.Network/bastionHosts: crie um Bastion do SKU Standard com um IP público e um recurso do Kerberos habilitado.
- Crie uma ClientVM do Windows 10 e uma ServerVM do Windows Server 2019.
- Aponte o servidor DNS da VNet para o endereço IP privado da ServerVM (controlador de domínio).
- Executa uma extensão de script personalizado na ServerVM para promovê-la a um controlador de domínio com o nome de domínio:
bastionkrb.test
. - Executa uma extensão de script personalizado no ClientVM para tê-lo:
- Restrinja o NTLM: tráfego NTLM de entrada = negue todas as contas de domínio (isso serve para garantir que o Kerberos seja usado para autenticação).
- Ingresse no domínio
bastionkrb.test
.
Implantar o modelo
Para configurar o Kerberos, implante o modelo do ARM anterior executando o seguinte cmd do PowerShell:
New-AzResourceGroupDeployment -ResourceGroupName <your-rg-name> -TemplateFile "<path-to-template>\KerberosDeployment.json"`
Examinar os recursos implantados
Agora, entre na ClientVM usando o Bastion com a autenticação Kerberos:
- credenciais: nome de usuário =
serveruser@bastionkrb.test
e senha =<password-entered-during-deployment>
.
Próximas etapas
Para obter mais informações sobre o Azure Bastion, confira O que é o Azure Bastion?