Azure portalını kullanarak Kerberos kimlik doğrulaması için Bastion'ı yapılandırma

Bu makalede, Azure Bastion'ı Kerberos kimlik doğrulamasını kullanacak şekilde yapılandırma adımları gösterilmektedir. Kerberos kimlik doğrulaması hem Temel hem de Standart Bastion SKU'ları ile kullanılabilir. Kerberos kimlik doğrulaması hakkında daha fazla bilgi için bkz. Kerberos kimlik doğrulamasına genel bakış. Azure Bastion hakkında daha fazla bilgi için bkz. Azure Bastion nedir?

Dikkat edilmesi gereken noktalar

  • Azure Bastion için Kerberos ayarı yalnızca Azure portalında yapılandırılabilir ve yerel istemciyle yapılandırılamaz.
  • Şirket içinden Azure'a geçirilen VM'ler şu anda Kerberos için desteklenmemektedir. 
  • Bölgeler arası kimlik doğrulaması şu anda Kerberos için desteklenmiyor.
  • Etki alanı denetleyicisi, bastion'ın dağıtılacağı sanal ağ içinde azure tarafından barındırılan bir VM olmalıdır.
  • DNS sunucusunda yapılan değişiklikler şu anda Kerberos için desteklenmiyor. DNS sunucusunda herhangi bir değişiklik yaptıktan sonra Bastion kaynağını silmeniz ve yeniden oluşturmanız gerekir.
  • Ek DC (etki alanı denetleyicileri) eklenirse Bastion yalnızca ilk DC'yi tanır.
  • Farklı etki alanları için ek DC'ler eklenirse, eklenen etki alanları Kerberos ile başarıyla kimlik doğrulaması yapamaz.

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabı. Yoksa ücretsiz bir tane oluşturun. Bastion kullanarak tarayıcınız aracılığıyla bir VM'ye bağlanabilmek için Azure portalında oturum açabilmeniz gerekir.

  • Bir Azure sanal ağı. Sanal ağ oluşturma adımları için bkz . Hızlı Başlangıç: Sanal ağ oluşturma.

Sanal ağ DNS sunucularını güncelleştirme

Bu bölümde, aşağıdaki adımlar sanal ağınızı özel DNS ayarlarını belirtecek şekilde güncelleştirmenize yardımcı olur.

  1. Azure Portal oturum açın.
  2. Bastion kaynaklarını dağıtmak istediğiniz sanal ağa gidin.
  3. Sanal ağınızın DNS sunucuları sayfasına gidin ve Özel'i seçin. Azure'da barındırılan etki alanı denetleyicinizin IP adresini ekleyin ve Kaydet'i seçin.

Bastion’ı dağıtma

  1. Öğretici: Bastion'ı el ile yapılandırma ayarlarını kullanarak dağıtma başlığı altındaki adımları kullanarak savunma dağıtımınızı yapılandırmaya başlayın. Temel Bilgiler sekmesindeki ayarları yapılandırın. Ardından, sayfanın üst kısmındaki Gelişmiş'e tıklayarak Gelişmiş sekmesine gidin.

  2. Gelişmiş sekmesinde Kerberos'ı seçin.

    Screenshot of select bastion features.

  3. Sayfanın en altında Gözden geçir + oluştur'u ve ardından Bastion'ı sanal ağınıza dağıtmak için Oluştur'u seçin.

  4. Dağıtım tamamlandıktan sonra, önceki adımlarda belirttiğiniz özel DNS'ye katılmış tüm erişilebilir Windows VM'lerinde oturum açmak için bunu kullanabilirsiniz.

Mevcut Bastion dağıtımlarını değiştirmek için

Bu bölümde, aşağıdaki adımlar Kerberos kimlik doğrulaması için sanal ağınızı ve mevcut Bastion dağıtımını değiştirmenize yardımcı olur.

  1. Sanal ağınız için DNS ayarlarını güncelleştirin.
  2. Bastion dağıtımınızın portal sayfasına gidin ve Yapılandırma'ya tıklayın.
  3. Yapılandırma sayfasında Kerberos kimlik doğrulaması'nı ve ardından Uygula'yı seçin.
  4. Bastion, yeni yapılandırma ayarlarıyla güncelleştirilir.

Bastion'ın Kerberos kullandığını doğrulamak için

Dekont

Kerberos kullanarak oturum açmak için Kullanıcı Asıl Adı'nı (UPN) kullanmanız gerekir.

Bastion kaynağınızda Kerberos'ı etkinleştirdikten sonra, hedef etki alanına katılmış VM'de kimlik doğrulaması için Kerberos kullandığını doğrulayabilirsiniz.

  1. Hedef VM'de oturum açın (Bastion aracılığıyla veya değil). Görev çubuğundan "Grup İlkesini Düzenle" araması yapın ve Yerel Grup İlkesi Düzenleyicisi'ni açın.

  2. Bilgisayar Yapılandırması Windows Ayarlar > Güvenlik Ayarlar > Yerel İlkeler Güvenlik Seçenekleri'ni >seçin.>

  3. Ağ güvenliği: NTLM'yi kısıtla: Gelen NTLM Trafiği ilkesini bulun ve Tüm etki alanı hesaplarını reddet olarak ayarlayın. Bastion, Kerberos devre dışı bırakıldığında kimlik doğrulaması için NTLM kullandığından, bu ayar NTLM tabanlı kimlik doğrulamasının VM'de gelecekteki oturum açma girişimleri için başarısız olmasını sağlar.

  4. VM oturumunu sonlandırın.

  5. Bastion'ı kullanarak hedef VM'ye yeniden Bağlan. Bastion'ın kimlik doğrulaması için Kerberos (NTLM değil) kullandığını gösteren oturum açma başarılı olmalıdır.

    Dekont

    NTLM'de yeniden çalışma önlemek için önceki adımları izlediğinize emin olun. Kerberos'un etkinleştirilmesi (yordamı izlemeden) NTLM'ye yeniden çalışma işlemini engellemez.

Hızlı Başlangıç: Kerberos ile Bastion ayarlama - Resource Manager şablonu

Şablonu gözden geçirme

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

Şablonda aşağıdaki kaynaklar tanımlanmıştır:

  • Aşağıdaki Azure kaynaklarını dağıtır:
  • Sanal ağın DNS Sunucusu'nun ServerVM'nin (etki alanı denetleyicisi) özel IP adresine işaret etmelerini sağlayın.
  • ServerVM'de bir Özel Betik Uzantısı çalıştırarak bunu etki alanı adına sahip bir etki alanı denetleyicisine yükseltin: bastionkrb.test.
  • ClientVM'de bir Özel Betik Uzantısı çalıştırarak bu uzantıya sahip olur:
    • NTLM'yi kısıtla: Gelen NTLM trafiği = Tüm etki alanı hesaplarını reddet (kimlik doğrulaması için Kerberos kullanıldığından emin olmak için).
    • Etki alanına katılma bastionkrb.test .

Şablonu dağıtma

Kerberos'ı ayarlamak için aşağıdaki PowerShell cmd'sini çalıştırarak önceki ARM şablonunu dağıtın:

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

Dağıtılan kaynakları gözden geçirme

Şimdi Bastion'ı Kerberos kimlik doğrulamasıyla kullanarak ClientVM'de oturum açın:

  • kimlik bilgileri: kullanıcı adı = serveruser@bastionkrb.test ve parola = <password-entered-during-deployment>.

Sonraki adımlar

Azure Bastion hakkında daha fazla bilgi için bkz. Azure Bastion nedir?