Konfigurera Bastion för Kerberos-autentisering med hjälp av Azure-portalen

Den här artikeln visar hur du konfigurerar Azure Bastion att använda Kerberos-autentisering. Kerberos-autentisering kan användas med både Basic- och Standard Bastion-SKU:er. Mer information om Kerberos-autentisering finns i översikten över Kerberos-autentisering. Mer information om Azure Bastion finns i Vad är Azure Bastion?

Att tänka på

  • Kerberos-inställningen för Azure Bastion kan endast konfigureras i Azure-portalen och inte med den interna klienten.
  • Virtuella datorer som migrerats från lokala datorer till Azure stöds för närvarande inte för Kerberos. 
  • Autentisering mellan områden stöds för närvarande inte för Kerberos.
  • Domänkontrollanten måste vara en virtuell Azure-värddator inom samma virtuella nätverk som bastionen distribueras.
  • Ändringar av DNS-servern stöds för närvarande inte för Kerberos. När du har gjort ändringar i DNS-servern måste du ta bort och återskapa Bastion-resursen.
  • Om ytterligare domänkontrollanter läggs till känner Bastion bara igen den första domänkontrollanten.
  • Om ytterligare domäner läggs till för olika domäner kan de tillagda domänerna inte autentiseras med Kerberos.

Förutsättningar

  • Ett Azure-konto med en aktiv prenumeration. Om du inte har en kan du skapa en kostnadsfritt. För att kunna ansluta till en virtuell dator via webbläsaren med Bastion måste du kunna logga in på Azure-portalen.

  • Ett virtuellt Azure-nätverk. Anvisningar för hur du skapar ett virtuellt nätverk finns i Snabbstart: Skapa ett virtuellt nätverk.

Uppdatera VNet DNS-servrar

I det här avsnittet hjälper följande steg dig att uppdatera ditt virtuella nätverk för att ange anpassade DNS-inställningar.

  1. Logga in på Azure-portalen.
  2. Gå till det virtuella nätverk som du vill distribuera Bastion-resurserna för.
  3. Gå till sidan DNS-servrar för ditt virtuella nätverk och välj Anpassad. Lägg till IP-adressen för din Azure-värdbaserade domänkontrollant och Spara.

Distribuera Bastion

  1. Börja konfigurera bastionsdistributionen med hjälp av stegen i Självstudie: Distribuera Bastion med hjälp av manuella konfigurationsinställningar. Konfigurera inställningarna på fliken Grundläggande. Klicka sedan på Avancerat överst på sidan för att gå till fliken Avancerat.

  2. På fliken Avancerat väljer du Kerberos.

    Screenshot of select bastion features.

  3. Längst ned på sidan väljer du Granska + skapa och sedan Skapa för att distribuera Bastion till ditt virtuella nätverk.

  4. När distributionen är klar kan du använda den för att logga in på alla nåbara virtuella Windows-datorer som är anslutna till den anpassade DNS som du angav i de tidigare stegen.

Ändra en befintlig Bastion-distribution

I det här avsnittet hjälper följande steg dig att ändra ditt virtuella nätverk och befintliga Bastion-distribution för Kerberos-autentisering.

  1. Uppdatera DNS-inställningarna för ditt virtuella nätverk.
  2. Gå till portalsidan för din Bastion-distribution och välj Konfiguration.
  3. På sidan Konfiguration väljer du Kerberos-autentisering och sedan Använd.
  4. Bastion uppdateras med de nya konfigurationsinställningarna.

Så här kontrollerar du att Bastion använder Kerberos

Kommentar

Du måste använda UPN (User Principal Name) för att logga in med Kerberos.

När du har aktiverat Kerberos på din Bastion-resurs kan du kontrollera att den faktiskt använder Kerberos för autentisering till den domänanslutna måldatorn.

  1. Logga in på den virtuella måldatorn (antingen via Bastion eller inte). Sök efter "Redigera grupprincip" från aktivitetsfältet och öppna redigeraren för lokal grupprincip.

  2. Välj Säkerhetsalternativ för windows > Inställningar > säkerhet Inställningar > lokala principer>.

  3. Hitta principen Nätverkssäkerhet: Begränsa NTLM: Inkommande NTLM-trafik och ställ in den på Neka alla domänkonton. Eftersom Bastion använder NTLM för autentisering när Kerberos är inaktiverat säkerställer den här inställningen att NTLM-baserad autentisering misslyckas för framtida inloggningsförsök på den virtuella datorn.

  4. Avsluta vm-sessionen.

  5. Anslut till den virtuella måldatorn igen med Bastion. Inloggningen bör lyckas, vilket anger att Bastion använde Kerberos (och inte NTLM) för autentisering.

    Kommentar

    Om du vill förhindra återställning efter fel till NTLM kontrollerar du att du följer föregående steg. Om du aktiverar Kerberos (utan att följa proceduren) förhindras inte återställning efter fel till NTLM.

Snabbstart: Konfigurera Bastion med Kerberos – Resource Manager-mall

Granska mallen

{
  "$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')]"
                        }
                    }
                }
            ]
        }
    }
  ]
}

Följande resurser har definierats i mallen:

  • Distribuerar följande Azure-resurser:
  • Låt DNS-servern för det virtuella nätverket peka på den privata IP-adressen för ServerVM (domänkontrollant).
  • Kör ett anpassat skripttillägg på ServerVM för att höja upp det till en domänkontrollant med domännamn: bastionkrb.test.
  • Kör ett anpassat skripttillägg på ClientVM för att ha det:
    • Begränsa NTLM: Inkommande NTLM-trafik = Neka alla domänkonton (detta är för att säkerställa att Kerberos används för autentisering).
    • Domänansluta domänen bastionkrb.test .

Distribuera mallen

Om du vill konfigurera Kerberos distribuerar du den föregående ARM-mallen genom att köra följande PowerShell-cmd:

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

Granska distribuerade resurser

Logga nu in på ClientVM med Bastion med Kerberos-autentisering:

  • autentiseringsuppgifter: användarnamn = serveruser@bastionkrb.test och lösenord = <password-entered-during-deployment>.

Nästa steg

Mer information om Azure Bastion finns i Vad är Azure Bastion?