将本地设备连接到 Azure Active Directory 域服务
Posted
技术标签:
【中文标题】将本地设备连接到 Azure Active Directory 域服务【英文标题】:Connect local devices to Azure Active Directory Domain Services 【发布时间】:2021-11-02 02:18:15 【问题描述】:找不到将本地设备连接到 Azure AD 域服务 (AADDS) 的明确文档。
已成功设置 Azure WAN + Azure Hub + 用户点对点 *** 连接。
但没有关于如何设置 NSG 规则以连接到 AADDS 域控制器的明确文档。
任何有关后续故障排除步骤的文档/提示都会有所帮助。
【问题讨论】:
你好@RohitMistry,我想知道你是否提到了这个social.technet.microsoft.com/wiki/contents/articles/…? 根据流量和使用情况,可以添加NSG规则,可以参考:docs.microsoft.com/en-us/previous-versions/windows/it-pro/… 感谢@AnsumanBal-MT!在我解决了我的问题后,我来到了这篇文章。但是 NSG 规则建议是正确的。我还必须在 AADDS 端 VNET 对等互连中设置网络转发 + 使用远程网关。再次感谢! 【参考方案1】:如果这可以给出一个想法,请参考
与其他 Azure 资源不同,Azure AD 域服务是一种与您的 Azure 订阅所链接到的 Azure AD 租户直接关联的资源。您需要 Azure AD 租户中的全局管理员权限才能启用 Azure AD DS。
默认情况下,您的帐户应具有订阅的参与者访问权限,因为这是部署期间指定的 RBAC 角色。初始部署不允许所有者角色。要获得对您的 repro 租户的所有者权限:
将您的 @microsoft 别名作为访客添加到您的 repro 租户,分配 GA 角色。
将您的 @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 = "***"
***_type = "RouteBased"
active_active = false
private_ip_address_enabled = true
enable_bgp = false
sku = "***Gw1AZ"
ip_configuration
name = "vnetGatewayConfig"
public_ip_address_id = azurerm_public_ip.external.id
private_ip_address_allocation = "Dynamic"
subnet_id = azurerm_subnet.external.id
***_client_configuration
address_space = ["10.3.0.0/24"]
# Azure AD Authentication Settings
***_client_protocols = ["Open***"]
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
【讨论】:
以上是关于将本地设备连接到 Azure Active Directory 域服务的主要内容,如果未能解决你的问题,请参考以下文章
如何将 VSTS 帐户连接到 Azure Active Directory
如何使用 Active Directory 集成身份验证通过 python SQL alchemy 连接到 Azure sql 数据库
使用 DataGrip - Active Directory 连接到 Azure 数据库