【问题标题】:Connect local devices to Azure Active Directory Domain Services将本地设备连接到 Azure Active Directory 域服务
【发布时间】:2021-11-02 02:18:15
【问题描述】:

找不到将本地设备连接到 Azure AD 域服务 (AADDS) 的明确文档。

已成功设置 Azure WAN + Azure Hub + 用户点对点 VPN 连接。

但没有关于如何设置 NSG 规则以连接到 AADDS 域控制器的明确文档。

任何有关后续故障排除步骤的文档/提示都会有所帮助。

【问题讨论】:

标签: vpn azure-virtual-network domaincontroller azure-vpn azure-nsg


【解决方案1】:

如果这可以给出一个想法,请参考

与其他 Azure 资源不同,Azure AD 域服务是一种与您的 Azure 订阅所链接到的 Azure AD 租户直接关联的资源。您需要 Azure AD 租户中的全局管理员权限才能启用 Azure AD DS。

默认情况下,您的帐户应具有订阅的参与者访问权限,因为这是部署期间指定的 RBAC 角色。初始部署不允许所有者角色。要获得对您的 repro 租户的所有者权限:

  1. 将您的 @microsoft 别名作为访客添加到您的 repro 租户,分配 GA 角色。

  2. 将您的 @microsoft 别名添加为 AAD 组的成员 继承 RBAC 权限。

确保您的 MS 别名帐户在预定租户的订阅中列为共同管理员(或其他旧管理员类型)。如果您没有看到分配并且无法进行任何更改,请将您的 MS 别名添加为 MS 租户中订阅的共同管理员。 Add co-admin?

使用您的 MS 帐户切换到您的 repro 租户并提升权限,(AAD -> 属性 -> Azure 资源的访问管理)。

AAD 域服务部署

根据您的预计 Azure 订阅在测试租户中部署 AADDS 的先决步骤。

如果您的项目订阅驻留在 Microsoft 租户中,则在某些时候,到位的安全策略将添加网络拒绝规则,这些规则将阻止必要的端口,导致部署失败,为避免这种情况,请创建您的网络、子网、堡垒实例和 NSG 手动添加规则到 NSG:

首先,使用Register-AzResourceProvidercmdlet注册 Azure AD 域服务资源提供程序:

Register-AzResourceProvider -ProviderNamespace Microsoft.AAD 

接下来,使用 New-AzResourceGroup cmdlet创建资源组

 $ResourceGroupName = "myResourceGroup" 
    
    $AzureLocation = "westus" 
    
     
    
    # Create the resource group. 
    
    New-AzResourceGroup ` 
    
      -Name $ResourceGroupName ` 
    
      -Location $AzureLocation 

为 Azure AD 域服务创建虚拟网络和子网。

$VnetName = "myVnet" 

 
# Create the dedicated subnet for Azure AD Domain Services. 

$SubnetName = "DomainServices" 

$AaddsSubnet = New-AzVirtualNetworkSubnetConfig ` 

  -Name $SubnetName ` 

  -AddressPrefix 10.0.0.0/24 

 

# Create an additional subnet for your own VM workloads 

$WorkloadSubnet = New-AzVirtualNetworkSubnetConfig ` 

  -Name Workloads ` 

  -AddressPrefix 10.0.1.0/24 

 

# Create the virtual network in which you will enable Azure AD Domain Services. 

$Vnet= New-AzVirtualNetwork ` 

  -ResourceGroupName $ResourceGroupName ` 

  -Location westus ` 

  -Name $VnetName ` 

  -AddressPrefix 10.0.0.0/16 ` 

  -Subnet $AaddsSubnet,$WorkloadSubnet 

 

创建网络安全组

以下 PowerShell cmdlet 使用New-AzNetworkSecurityRuleConfig创建规则,然后使用New-AzNetworkSecurityGroup创建网络安全组。然后使用Set-AzVirtualNetworkSubnetConfigcmdlet 将网络安全组和规则与虚拟网络子网相关联。

$NSGName = "aaddsNSG" 

 

# Create a rule to allow inbound TCP port 3389 traffic from Microsoft secure access workstations for troubleshooting 

$nsg201 = New-AzNetworkSecurityRuleConfig -Name AllowRD ` 

    -Access Allow ` 

    -Protocol Tcp ` 

    -Direction Inbound ` 

    -Priority 201 ` 

    -SourceAddressPrefix CorpNetSaw ` 

    -SourcePortRange * ` 

    -DestinationAddressPrefix * ` 

    -DestinationPortRange 3389 

 

# Create a rule to allow TCP port 5986 traffic for PowerShell remote management 

$nsg301 = New-AzNetworkSecurityRuleConfig -Name AllowPSRemoting ` 

    -Access Allow ` 

    -Protocol Tcp ` 

    -Direction Inbound ` 

    -Priority 301 ` 

    -SourceAddressPrefix AzureActiveDirectoryDomainServices ` 

    -SourcePortRange * ` 

    -DestinationAddressPrefix * ` 

    -DestinationPortRange 5986 

 

# Create the network security group and rules 

$nsg = New-AzNetworkSecurityGroup -Name $NSGName ` 

    -ResourceGroupName $ResourceGroupName ` 

    -Location $AzureLocation ` 

    -SecurityRules $nsg201,$nsg301 

 

# Get the existing virtual network resource objects and information 

$vnet = Get-AzVirtualNetwork -Name $VnetName -ResourceGroupName $ResourceGroupName 

$subnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name $SubnetName 

$addressPrefix = $subnet.AddressPrefix 

 

# Associate the network security group with the virtual network subnet 

Set-AzVirtualNetworkSubnetConfig -Name $SubnetName ` 

    -VirtualNetwork $vnet ` 

    -AddressPrefix $addressPrefix ` 

    -NetworkSecurityGroup $nsg 

$vnet | Set-AzVirtualNetwork 

 

或者例如,您可以使用以下脚本创建允许 RDP 的规则:(Reference)

Get-AzNetworkSecurityGroup  

-Name "nsg-name" 

 -ResourceGroupName "resource-group-name" 

 | Add-AzNetworkSecurityRuleConfig  

-Name "new-rule-name" 

-Access "Allow"  

-Protocol "TCP" -Direction "Inbound"  

-Priority "priority-number"  

-SourceAddressPrefix "CorpNetSaw"   // $serviceTagName  

-SourcePortRange "*"  

-DestinationPortRange "3389"  

-DestinationAddressPrefix "*"  

| Set-AzNetworkSecurityGroup 

 

然后按照参考>Enable Azure DS Domain Services using PowerShell | Microsoft Docs创建一个托管域

浏览 Azure AD -> 企业应用程序 -> 所有应用程序 -> 搜索以下每个应用程序 ID。

如果未在企业应用程序下的所有应用程序下找到任何企业应用程序,如 AzureActiveDirectoryDomainControllerServices 或 DomainControllerServices,则需要通过以下 PowerShell 示例手动创建它们(将 appID 变量替换为您缺少 repro 租户的 appID。

创建三个服务主体后,将它们添加到之前创建的组中。您可以通过在“添加成员”对话框中搜索他们的应用 ID 来添加他们

Connect-AzureAD 

$appID = "d87dcbc6-a371-462e-88e3-28ad15ec4e64" 

$displayname = "Domain Controller Services" 

New-AzureADServicePrincipal -AccountEnabled $true -AppId $appID -AppRoleAssignmentRequired $false -DisplayName $displayname -ServicePrincipalType Application  

创建三个服务主体后,将它们添加到先前创建的组(域控制器服务)。您可以通过在“添加成员”对话框中搜索他们的应用 ID 来添加他们

您现在可以enable AAD DS in the portal UI。通过您的代理租户的全局管理员帐户登录到您的代理租户时。

配置可能需要一些时间。您在配置时也可能会遇到一些错误,但只要该过程继续进行,请继续观察部署,因为部署可能会在一段时间后成功。

另见Troubleshoot domain-join with Azure AD Domain Services | Microsoft Docs

还有Tutorial - Create an Azure Active Directory Domain Services managed domain | Microsoft Docs

【讨论】:

    【解决方案2】:

    现在可以使用了。

    关键是在 Azure Active Directory 域服务子网上设置 NSG 规则,并在 AADDS 服务和网关服务之间启用 VNET 对等互连。

    然后,默认 NSG 规则允许流量在 VNET 之间流动。

    关键在于分配安全规则以允许来自服务"AzureActiveDirectoryDomainServices"的流量

    以下是用于部署网关的 Terraform 代码:​​

    
    # ...
    
    data "azurerm_client_config" "default" {}
    
    # ...
    
    # VNET
    resource "azurerm_virtual_network" "external" {
      name                = "external-vnet"
      location            = azurerm_resource_group.external.location
      resource_group_name = azurerm_resource_group.external.name
      address_space       = ["10.2.0.0/16"]
      tags                = var.azure_tags
      dns_servers = [
        "10.0.0.4",
        "10.0.0.5",
      ]
    }
    
    # Subnet
    resource "azurerm_subnet" "external" {
      name                 = "GatewaySubnet"
      resource_group_name  = azurerm_resource_group.external.name
      virtual_network_name = azurerm_virtual_network.external.name
      address_prefixes     = ["10.2.0.0/24"]
    }
    
    # Public Ip for Gateway
    resource "azurerm_public_ip" "external" {
      name                = "external-vnet-gateway-public-ip"
      location            = azurerm_resource_group.external.location
      resource_group_name = azurerm_resource_group.external.name
      sku                 = "Standard"
      sku_tier            = "Regional"
      allocation_method   = "Static"
      tags                = var.azure_tags
    }
    
    # Virtual Network Gateway
    resource "azurerm_virtual_network_gateway" "external" {
      name                = "external-vnet-gateway"
      location            = azurerm_resource_group.external.location
      resource_group_name = azurerm_resource_group.external.name
      tags                = var.azure_tags
    
      type                       = "Vpn"
      vpn_type                   = "RouteBased"
      active_active              = false
      private_ip_address_enabled = true
      enable_bgp                 = false
      sku                        = "VpnGw1AZ"
    
      ip_configuration {
        name                          = "vnetGatewayConfig"
        public_ip_address_id          = azurerm_public_ip.external.id
        private_ip_address_allocation = "Dynamic"
        subnet_id                     = azurerm_subnet.external.id
      }
    
      vpn_client_configuration {
        address_space = ["10.3.0.0/24"]
    
        # Azure AD Authentication Settings
        vpn_client_protocols = ["OpenVPN"]
        aad_tenant           = "https://login.microsoftonline.com/${data.azurerm_client_config.default.tenant_id}/"
        aad_audience         = "...<REDACTED_FOR_PRIVACY>..."
        aad_issuer           = "https://sts.windows.net/${data.azurerm_client_config.default.tenant_id}/"
      }
    }
    
    # ###########################################################
    # This is important!
    # enable global peering between the two virtual network
    resource "azurerm_virtual_network_peering" "aadds_external" {
      name                         = "peering-${data.azurerm_virtual_network.aadds.name}-to-${azurerm_virtual_network.external.name}"
      resource_group_name          = data.azurerm_resource_group.aadds.name
      virtual_network_name         = data.azurerm_virtual_network.aadds.name
      remote_virtual_network_id    = azurerm_virtual_network.external.id
      allow_virtual_network_access = true
      allow_forwarded_traffic      = true
      allow_gateway_transit        = false
      use_remote_gateways          = true
    }
    
    resource "azurerm_virtual_network_peering" "external_aadds" {
      name                         = "peering-${azurerm_virtual_network.external.name}-to-${data.azurerm_virtual_network.aadds.name}"
      resource_group_name          = azurerm_resource_group.external.name
      virtual_network_name         = azurerm_virtual_network.external.name
      remote_virtual_network_id    = data.azurerm_virtual_network.aadds.id
      allow_virtual_network_access = true
      allow_forwarded_traffic      = true
      allow_gateway_transit        = true
      use_remote_gateways          = false
    }
    
    

    【讨论】:

      猜你喜欢
      • 2020-07-02
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      相关资源
      最近更新 更多