PowerShell を使用して Microsoft Entra Domain Services を有効にする

Microsoft Entra Domain Services では、Windows Server Active Directory と完全に互換性のあるマネージド ドメイン サービス (ドメイン参加、グループ ポリシー、LDAP、Kerberos または NTLM 認証など) が提供されます。 ドメイン コントローラーのデプロイ、管理、パッチの適用を自分で行わなくても、これらのドメイン サービスを使用することができます。 Domain Services は、既存の Microsoft Entra テナントと統合されます。 この統合により、ユーザーは、各自の会社の資格情報を使用してサインインすることができます。また管理者は、既存のグループとユーザー アカウントを使用してリソースへのアクセスをセキュリティで保護することができます。

この記事では、PowerShell を使用して Domain Services を有効にする方法について説明します。

注意

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を開始するには、Azure PowerShell のインストールに関する記事を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

前提条件

この記事を完了するには、以下のリソースが必要です。

  • Azure PowerShell のインストールおよび構成。

  • MS Graph PowerShell をインストールして構成します。

  • Domain Services を有効にするには、Microsoft Entra テナントでのグローバル管理者特権が必要です。

  • 必要な Domain Services リソースを作成するためには、ご利用の Azure サブスクリプションに "共同作成者" 特権が必要です。

    重要

    Az.ADDomainServices PowerShell モジュールがプレビュー段階にある間は、Install-Module コマンドレットを使用して、これを個別にインストールする必要があります。

    Install-Module -Name Az.ADDomainServices
    

必要な Microsoft Entra リソースを作成する

Domain Services を使用するには、認証と通信を行うためのサービス プリンシパルと、マネージド ドメインで管理アクセス許可を持つユーザーを定義するための Microsoft Entra グループが必要です。

まず、Domain Controller Services という名前の特定のアプリケーション ID を使用して、Microsoft Entra サービス プリンシパルを作成します。 ID 値は、グローバル Azure の場合は 2565bd9d-da50-47d4-8b85-4c97f669dc36、他の Azure クラウドの場合は 6ba9a5d4-8456-4118-b521-9c5ca10cdf84 です。 このアプリケーション ID は変更しないでください。

New-MgServicePrincipal コマンドレットを使用して Microsoft Entra サービス プリンシパルを作成します。

New-MgServicePrincipal -AppId "2565bd9d-da50-47d4-8b85-4c97f669dc36"

次に、AAD DC Administrators という名前の Microsoft Entra グループを作成します。 このグループに追加されたユーザーには、マネージド ドメインで管理タスクを実行するためのアクセス許可が付与されます。

まず、Get-MgGroup コマンドレットを使用して、AAD DC Administrators グループ オブジェクト ID を取得します。 AAD DC Administrators グループが存在しない場合は、New-MgGroup コマンドレットを使用して作成します。

# First, retrieve the object ID of the 'AAD DC Administrators' group.
$GroupObject = Get-MgGroup `
  -Filter "DisplayName eq 'AAD DC Administrators'"

# If the group doesn't exist, create it
if (!$GroupObject) {
  $GroupObject = New-MgGroup -DisplayName "AAD DC Administrators" `
    -Description "Delegated group to administer Microsoft Entra Domain Services" `
    -SecurityEnabled:$true `
    -MailEnabled:$false `
    -MailNickName "AADDCAdministrators"
  } else {
  Write-Output "Admin group already exists."
}

AAD DC Administrators グループを作成したら、Get-MgUser コマンドレットを使用して目的のユーザーのオブジェクト ID を取得し、New-MgGroupMember コマンドレットを使用してそのユーザーをグループに追加します。

次の例では、UPN が admin@contoso.onmicrosoft.com のアカウントのユーザー オブジェクト ID です。 このユーザー アカウントを、AAD DC Administrators グループに追加するユーザーの UPN に置き換えます。

# Retrieve the object ID of the user you'd like to add to the group.
$UserObjectId = Get-MgUser `
  -Filter "UserPrincipalName eq 'admin@contoso.onmicrosoft.com'" | `
  Select-Object Id

# Add the user to the 'AAD DC Administrators' group.
New-MgGroupMember -GroupId $GroupObject.Id -DirectoryObjectId $UserObjectId.Id

ネットワーク リソースを作成する

まず、Register-AzResourceProvider コマンドレットを使用して、Microsoft Entra Domain Services リソース プロバイダーを登録します。

Register-AzResourceProvider -ProviderNamespace Microsoft.AAD

次に、New-AzResourceGroup コマンドレットを使用してリソース グループを作成します。 次の例では、リソース グループは myResourceGroup という名前が付けられ、westus リージョンに作成されます。 独自の名前と希望するリージョンを使用します。

$ResourceGroupName = "myResourceGroup"
$AzureLocation = "westus"

# Create the resource group.
New-AzResourceGroup `
  -Name $ResourceGroupName `
  -Location $AzureLocation

Microsoft Entra Domain Services の仮想ネットワークとサブネットを作成します。 DomainServices 用と Workloads 用の 2 つのサブネットが作成されます。 Domain Services は、専用の DomainServices サブネットにデプロイされます。 このサブネットには、他のアプリケーションやワークロードをデプロイしないでください。 残りの VM には、別個の Workloads または他のサブネットを使用します。

New-AzVirtualNetworkSubnetConfig コマンドレットを使用してサブネットを作成し、次に New-AzVirtualNetwork コマンドレットを使用して仮想ネットワークを作成します。

$VnetName = "myVnet"

# Create the dedicated subnet for Microsoft Entra 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 Microsoft Entra Domain Services.
$Vnet= New-AzVirtualNetwork `
  -ResourceGroupName $ResourceGroupName `
  -Location westus `
  -Name $VnetName `
  -AddressPrefix 10.0.0.0/16 `
  -Subnet $AaddsSubnet,$WorkloadSubnet

ネットワーク セキュリティ グループの作成

Domain Services には、マネージド ドメインに必要なポートをセキュリティで保護し、その他すべての受信トラフィックをブロックするネットワーク セキュリティ グループが必要です。 ネットワーク セキュリティ グループ (NSG) には、Azure 仮想ネットワーク内のトラフィックへのネットワーク トラフィックを許可または拒否するルールの一覧が含まれています。 Domain Services では、ネットワーク セキュリティ グループは、マネージド ドメインへのアクセスをロックダウンするための追加の保護レイヤーとして機能します。 必要なポートを確認するには、「ネットワーク セキュリティ グループと必要なポート」を参照してください。

次の PowerShell コマンドレットでは、New-AzNetworkSecurityRuleConfig を使用してルールを作成し、New-AzNetworkSecurityGroup を使用してネットワーク セキュリティ グループを作成します。 ネットワーク セキュリティ グループとルールは、Set-AzVirtualNetworkSubnetConfig コマンドレットを使用して仮想ネットワーク サブネットに関連付けられます。

$NSGName = "dsNSG"

# 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

マネージド ドメインの作成

次に、マネージド ドメインを作成しましょう。 お使いの Azure サブスクリプション ID を設定し、マネージド ドメインの名前 (dscontoso.com など) を指定します。 お使いのサブスクリプション ID は、Get-AzSubscription コマンドレットを使用して取得できます。

Availability Zones がサポートされているリージョンを選択すると、Domain Services リソースが、冗長性のために複数のゾーンに分散されます。

Availability Zones は、Azure リージョン内の一意の物理的な場所です。 それぞれのゾーンは、独立した電源、冷却手段、ネットワークを備えた 1 つまたは複数のデータセンターで構成されています。 回復性を確保するため、有効になっているリージョンにはいずれも最低 3 つのゾーンが別個に存在しています。

Domain Services を複数のゾーンに分散するために、ご自身で構成するものは何もありません。 Azure プラットフォームでは、ゾーンへのリソース分散が自動的に処理されます。 詳細情報および利用可能なリージョンについては、「Azure の Availability Zones の概要」を参照してください。

$AzureSubscriptionId = "YOUR_AZURE_SUBSCRIPTION_ID"
$ManagedDomainName = "dscontoso.com"

# Enable Microsoft Entra Domain Services for the directory.
$replicaSetParams = @{
  Location = $AzureLocation
  SubnetId = "/subscriptions/$AzureSubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.Network/virtualNetworks/$VnetName/subnets/DomainServices"
}
$replicaSet = New-AzADDomainServiceReplicaSetObject @replicaSetParams

$domainServiceParams = @{
  Name = $ManagedDomainName
  ResourceGroupName = $ResourceGroupName
  DomainName = $ManagedDomainName
  ReplicaSet = $replicaSet
}
New-AzADDomainService @domainServiceParams

リソースが作成され、PowerShell プロンプトに制御が戻るまで数分かかります。 マネージド ドメインは引き続きバックグラウンドでプロビジョニングされ、デプロイが完了するまでには最大 1 時間かかる場合があります。 Microsoft Entra 管理センターでは、お使いのマネージド ドメインの [概要] ページに、このデプロイ ステージ全体の現在の状態が表示されます。

マネージド ドメインがプロビジョニングを完了したことが Microsoft Entra 管理センターに表示されたら、次のタスクを完了する必要があります。

  • 仮想マシンがマネージド ドメインを検出してドメイン参加または認証を行うことができるように、仮想ネットワークの DNS 設定を更新します。
    • DNS を構成するには、ポータルでマネージド ドメインを選択します。 [概要] ウィンドウで、これらの DNS 設定を自動的に構成するように求められます。
  • Domain Services とのパスワード同期を有効にして、エンド ユーザーが会社の資格情報を使用してマネージド ドメインにサインインできるようにします。

完全な PowerShell スクリプト

次の完全な PowerShell スクリプトは、この記事に示されているすべてのタスクを結合します。 スクリプトをコピーし、.ps1 拡張子付きのファイルに保存します。 Azure Global の場合は、AppId 値 2565bd9d-da50-47d4-8b85-4c97f669dc36 を使用します。 他の Azure クラウドの場合は、AppId 値 6ba9a5d4-8456-4118-b521-9c5ca10cdf84 を使用します。 ローカルの PowerShell コンソール、または Azure Cloud Shell でスクリプトを実行します。

Note

Domain Services を有効にするには、Microsoft Entra テナントのグローバル管理者である必要があります。 また、Azure サブスクリプションで、少なくとも共同作成者権限が必要です。

# Change the following values to match your deployment.
$AaddsAdminUserUpn = "admin@contoso.onmicrosoft.com"
$ResourceGroupName = "myResourceGroup"
$VnetName = "myVnet"
$AzureLocation = "westus"
$AzureSubscriptionId = "YOUR_AZURE_SUBSCRIPTION_ID"
$ManagedDomainName = "dscontoso.com"

# Connect to your Microsoft Entra directory.
Connect-MgGraph -Scopes "Application.ReadWrite.All","Directory.ReadWrite.All"

# Login to your Azure subscription.
Connect-AzAccount

# Create the service principal for Microsoft Entra Domain Services.
New-MgServicePrincipal -AppId "2565bd9d-da50-47d4-8b85-4c97f669dc36"

# First, retrieve the object of the 'AAD DC Administrators' group.
$GroupObject = Get-MgGroup `
  -Filter "DisplayName eq 'AAD DC Administrators'"

# Create the delegated administration group for Microsoft Entra Domain Services if it doesn't already exist.
if (!$GroupObject) {
  $GroupObject = New-MgGroup -DisplayName "AAD DC Administrators" `
    -Description "Delegated group to administer Microsoft Entra Domain Services" `
    -SecurityEnabled:$true `
    -MailEnabled:$false `
    -MailNickName "AADDCAdministrators"
  } else {
  Write-Output "Admin group already exists."
}

# Now, retrieve the object ID of the user you'd like to add to the group.
$UserObjectId = Get-MgUser `
  -Filter "UserPrincipalName eq '$AaddsAdminUserUpn'" | `
  Select-Object Id

# Add the user to the 'AAD DC Administrators' group.
New-MgGroupMember -GroupId $GroupObject.Id -DirectoryObjectId $UserObjectId.Id

# Register the resource provider for Microsoft Entra Domain Services with Resource Manager.
Register-AzResourceProvider -ProviderNamespace Microsoft.AAD

# Create the resource group.
New-AzResourceGroup `
  -Name $ResourceGroupName `
  -Location $AzureLocation

# Create the dedicated subnet for Microsoft Entra Domain Services.
$SubnetName = "DomainServices"
$AaddsSubnet = New-AzVirtualNetworkSubnetConfig `
  -Name DomainServices `
  -AddressPrefix 10.0.0.0/24

$WorkloadSubnet = New-AzVirtualNetworkSubnetConfig `
  -Name Workloads `
  -AddressPrefix 10.0.1.0/24

# Create the virtual network in which you will enable Microsoft Entra Domain Services.
$Vnet=New-AzVirtualNetwork `
  -ResourceGroupName $ResourceGroupName `
  -Location $AzureLocation `
  -Name $VnetName `
  -AddressPrefix 10.0.0.0/16 `
  -Subnet $AaddsSubnet,$WorkloadSubnet

$NSGName = "dsNSG"

# 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

# Enable Microsoft Entra Domain Services for the directory.
$replicaSetParams = @{
  Location = $AzureLocation
  SubnetId = "/subscriptions/$AzureSubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.Network/virtualNetworks/$VnetName/subnets/DomainServices"
}
$replicaSet = New-AzADDomainServiceReplicaSet @replicaSetParams

$domainServiceParams = @{
  Name = $ManagedDomainName
  ResourceGroupName = $ResourceGroupName
  DomainName = $ManagedDomainName
  ReplicaSet = $replicaSet
}
New-AzADDomainService @domainServiceParams

リソースが作成され、PowerShell プロンプトに制御が戻るまで数分かかります。 マネージド ドメインは引き続きバックグラウンドでプロビジョニングされ、デプロイが完了するまでには最大 1 時間かかる場合があります。 Microsoft Entra 管理センターでは、お使いのマネージド ドメインの [概要] ページに、このデプロイ ステージ全体の現在の状態が表示されます。

マネージド ドメインがプロビジョニングを完了したことが Microsoft Entra 管理センターに表示されたら、次のタスクを完了する必要があります。

  • 仮想マシンがマネージド ドメインを検出してドメイン参加または認証を行うことができるように、仮想ネットワークの DNS 設定を更新します。
    • DNS を構成するには、ポータルでマネージド ドメインを選択します。 [概要] ウィンドウで、これらの DNS 設定を自動的に構成するように求められます。
  • Domain Services とのパスワード同期を有効にして、エンド ユーザーが会社の資格情報を使用してマネージド ドメインにサインインできるようにします。

次のステップ

動作中のマネージド ドメインを確認するために、Windows VM のドメイン参加Secure LDAP の構成パスワード ハッシュ同期の構成を実行できます。