Bastion configureren voor Kerberos-verificatie met behulp van Azure Portal

In dit artikel leest u hoe u Azure Bastion configureert voor het gebruik van Kerberos-verificatie. Kerberos-verificatie kan worden gebruikt met zowel de Basic- als de Standard Bastion-SKU's. Zie het kerberos-verificatieoverzicht voor meer informatie over Kerberos-verificatie. Zie Wat is Azure Bastion?

Overwegingen

  • De Kerberos-instelling voor Azure Bastion kan alleen worden geconfigureerd in Azure Portal en niet met een systeemeigen client.
  • VM's die van on-premises naar Azure zijn gemigreerd, worden momenteel niet ondersteund voor Kerberos. 
  • Verificatie tussen realms wordt momenteel niet ondersteund voor Kerberos.
  • De domeincontroller moet een door Azure gehoste VM zijn binnen hetzelfde VNET dat bastion is geïmplementeerd.
  • Wijzigingen in de DNS-server worden momenteel niet ondersteund voor Kerberos. Nadat u wijzigingen hebt aangebracht in de DNS-server, moet u de Bastion-resource verwijderen en opnieuw maken.
  • Als er extra domeincontrollers (domeincontrollers) worden toegevoegd, herkent Bastion alleen de eerste DC.
  • Als er extra DC's worden toegevoegd voor verschillende domeinen, kunnen de toegevoegde domeinen niet worden geverifieerd met Kerberos.

Vereisten

  • Een Azure-account met een actief abonnement. Als u dit niet hebt, kunt u er gratis een maken. Als u via uw browser verbinding wilt maken met een VM met behulp van Bastion, moet u zich kunnen aanmelden bij Azure Portal.

  • Een Azure Virtual Network. Zie Quickstart: Een virtueel netwerk maken voor stappen voor het maken van een VNet.

VNet DNS-servers bijwerken

In deze sectie kunt u met de volgende stappen uw virtuele netwerk bijwerken om aangepaste DNS-instellingen op te geven.

  1. Meld u aan bij de Azure-portal.
  2. Ga naar het virtuele netwerk waarvoor u de Bastion-resources wilt implementeren.
  3. Ga naar de pagina DNS-servers voor uw VNet en selecteer Aangepast. Voeg het IP-adres van uw door Azure gehoste domeincontroller toe en Sla het op.

Bastion implementeren

  1. Begin met het configureren van uw bastionimplementatie met behulp van de stappen in de zelfstudie: Bastion implementeren met behulp van handmatige configuratie-instellingen. Configureer de instellingen op het tabblad Basisbeginselen . Klik vervolgens boven aan de pagina op Geavanceerd om naar het tabblad Geavanceerd te gaan.

  2. Selecteer Kerberos op het tabblad Geavanceerd.

    Screenshot of select bastion features.

  3. Selecteer onder aan de pagina Beoordelen en maken en vervolgens Maken om Bastion in uw virtuele netwerk te implementeren.

  4. Zodra de implementatie is voltooid, kunt u deze gebruiken om u aan te melden bij alle bereikbaar Windows-VM's die zijn gekoppeld aan de aangepaste DNS die u in de vorige stappen hebt opgegeven.

Een bestaande Bastion-implementatie wijzigen

In deze sectie helpen de volgende stappen u bij het wijzigen van uw virtuele netwerk en de bestaande Bastion-implementatie voor Kerberos-verificatie.

  1. Werk de DNS-instellingen voor uw virtuele netwerk bij.
  2. Ga naar de portalpagina voor uw Bastion-implementatie en selecteer Configuratie.
  3. Selecteer Kerberos-verificatie op de pagina Configuratie en selecteer Vervolgens Toepassen.
  4. Bastion wordt bijgewerkt met de nieuwe configuratie-instellingen.

Controleren of Bastion Kerberos gebruikt

Notitie

U moet de User Principal Name (UPN) gebruiken om u aan te melden met Kerberos.

Zodra u Kerberos hebt ingeschakeld voor uw Bastion-resource, kunt u controleren of kerberos daadwerkelijk wordt gebruikt voor verificatie bij de doel-VM die lid is van het domein.

  1. Meld u aan bij de doel-VM (via Bastion of niet). Zoek op de taakbalk naar Groepsbeleid bewerken en open de editor voor lokaal groepsbeleid.

  2. Selecteer Computerconfiguratie > Windows Instellingen > Security Instellingen > Local Policies > Security Options.

  3. Zoek de netwerkbeveiliging van het beleid : NTLM beperken: binnenkomend NTLM-verkeer en stel dit in op Alle domeinaccounts weigeren. Omdat Bastion NTLM gebruikt voor verificatie wanneer Kerberos is uitgeschakeld, zorgt deze instelling ervoor dat verificatie op basis van NTLM mislukt voor toekomstige aanmeldingspogingen op de VIRTUELE machine.

  4. Beëindig de VM-sessie.

  5. Verbinding maken opnieuw naar de doel-VM met behulp van Bastion. Aanmelden moet slagen, wat aangeeft dat Bastion Kerberos (en niet NTLM) heeft gebruikt voor verificatie.

    Notitie

    Als u failback naar NTLM wilt voorkomen, moet u de voorgaande stappen uitvoeren. Als u Kerberos inschakelt (zonder de procedure te volgen), wordt failback naar NTLM niet voorkomen.

Quickstart: Bastion instellen met Kerberos - Resource Manager-sjabloon

De sjabloon controleren

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

De volgende resources zijn gedefinieerd in de sjabloon:

  • Implementeert de volgende Azure-resources:
  • Laat de DNS-server van het VNet verwijzen naar het privé-IP-adres van de ServerVM (domeincontroller).
  • Voert een aangepaste scriptextensie uit op de ServerVM om deze te promoveren naar een domeincontroller met domeinnaam: bastionkrb.test.
  • Voert een aangepaste scriptextensie uit op de ClientVM om deze te kunnen gebruiken:
    • NTLM beperken: binnenkomend NTLM-verkeer = Alle domeinaccounts weigeren (dit is om ervoor te zorgen dat Kerberos wordt gebruikt voor verificatie).
    • Domeindeelname van het bastionkrb.test domein.

De sjabloon implementeren

Als u Kerberos wilt instellen, implementeert u de voorgaande ARM-sjabloon door de volgende PowerShell-cmd uit te voeren:

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

Geïmplementeerde resources bekijken

Meld u nu aan bij ClientVM met behulp van Bastion met Kerberos-verificatie:

  • referenties: gebruikersnaam = serveruser@bastionkrb.test en wachtwoord = <password-entered-during-deployment>.

Volgende stappen

Zie Wat is Azure Bastion?