Azure Resource Manager テンプレートを使って Microsoft Entra Domain Services マネージド ドメインを作成する

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

この記事では、Azure Resource Manager テンプレートを使用してマネージド ドメインを作成する方法について説明します。 サポート リソースは、Azure PowerShell を使用して作成されます。

前提条件

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

DNS の名前付けに関する要件

Domain Services マネージド ドメインを作成する際は、DNS 名を指定します。 この DNS 名を選ぶ際のいくつかの考慮事項を次に示します。

  • 組み込みドメイン名: 既定では、ディレクトリの組み込みドメイン名が使用されます ( .onmicrosoft.com サフィックス)。 マネージド ドメインに対するインターネット経由での Secure LDAP アクセスを有効にしたい場合、デジタル証明書を作成して、この既定のドメインとの接続をセキュリティで保護することはできません。 .onmicrosoft.com ドメインを所有するのは Microsoft であるため、証明機関 (CA) からは証明書が発行されません。
  • カスタム ドメイン名: 最も一般的な方法は、カスタム ドメイン名を指定することです。一般に、貴社が既に所有していて、なおかつルーティング可能なものを指定します。 ルーティング可能なカスタム ドメインを使用すれば、ご利用のアプリケーションをサポートするために必要なトラフィックを正しく送信することができます。
  • ルーティング不可能なドメイン サフィックス: 一般に、ルーティング不可能なドメイン名サフィックス (contoso.local など) は避けることをお勧めします。 .local サフィックスはルーティングできないため、DNS 解決で問題の原因となることがあります。

ヒント

カスタム ドメイン名を作成する場合は、既存の DNS 名前空間に注意してください。 Azure およびオンプレミスの既存の DNS 名前空間とは別のドメイン名を使用することをお勧めします。

たとえば、contoso.com の既存の DNS 名前空間がある場合、aaddscontoso.com というカスタム ドメイン名を使用してマネージド ドメインを作成します。 Secure LDAP を使用する必要がある場合は、このカスタム ドメイン名を登録して所有し、必要な証明書を生成する必要があります。

場合によっては、環境内の他のサービス用に追加で DNS レコードを作成したり、環境内に既に存在する 2 つの DNS 名前空間の間に条件付き DNS フォワーダーを作成したりする必要があります。 たとえば、ルート DNS 名を使用するサイトをホストする Web サーバーを実行する場合、名前の競合が発生して、追加の DNS エントリが必要になる可能性があります。

このサンプルと操作方法に関する記事では、簡略な例として aaddscontoso.com というカスタム ドメインを使用しています。 すべてのコマンドで、独自のドメイン名を指定してください。

DNS 名には、次の制限も適用されます。

  • ドメインのプレフィックスの制限: プレフィックスが 15 文字より長いマネージド ドメインを作成できません。 指定するドメイン名のプレフィックス (たとえば、ドメイン名 aaddscontoso.comaaddscontoso など) は、15 文字以内に収める必要があります。
  • ネットワーク名の競合: マネージド ドメインの DNS ドメイン名は、まだ仮想ネットワークに存在していない必要があります。 具体的には、名前の競合につながる次のシナリオをチェックしてください。
    • 同じ DNS ドメイン名の Active Directory ドメインが Azure 仮想ネットワーク上に既にあるかどうか。
    • マネージド ドメインを有効にする仮想ネットワークに、オンプレミス ネットワークとの VPN 接続があるかどうか。 このシナリオでは、オンプレミス ネットワークに同じ DNS ドメイン名のドメインがないことを確認します。
    • その名前の付いた Azure クラウド サービスが Azure 仮想ネットワーク上に既にあるかどうか。

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

Domain Services には、サービス プリンシパルと Microsoft Entra グループが必要です。 これらのリソースにより、マネージド ドメインはデータを同期し、マネージド ドメインで管理アクセス許可を持つユーザーを定義できます。

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

Register-AzResourceProvider -ProviderNamespace Microsoft.AAD

Domain Services が通信し、自身を認証するようにするには、New-MgServicePrincipal コマンドレットを使用して Microsoft Entra サービス プリンシパルを作成します。 Azure Global では、ID 2565bd9d-da50-47d4-8b85-4c97f669dc36 を持つ Domain Controller Services という名前の特定のアプリケーション ID が使用されます。 他の Azure クラウドの場合は、AppId 値 6ba9a5d4-8456-4118-b521-9c5ca10cdf84 を検索します。

New-MgServicePrincipal

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

New-MgGroup -DisplayName "AAD DC Administrators" `
  -Description "Delegated group to administer Microsoft Entra Domain Services" `
  -SecurityEnabled:$true -MailEnabled:$false `
  -MailNickName "AADDCAdministrators"

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

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

# First, retrieve the object ID of the newly created 'AAD DC Administrators' group.
$GroupObjectId = Get-MgGroup `
  -Filter "DisplayName eq 'AAD DC Administrators'" | `
  Select-Object Id

# Now, 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 $GroupObjectId.Id -DirectoryObjectId $UserObjectId.Id

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

New-AzResourceGroup `
  -Name "myResourceGroup" `
  -Location "WestUS"

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

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

Domain Services のリソース定義

Resource Manager リソース定義の一部として、次の構成パラメーターが必要です。

パラメーター
domainName マネージド ドメインの DNS ドメイン名。プレフィックスの名前付けや競合に関する前のポイントを考慮に入れてください。
filteredSync Domain Services では、Microsoft Entra ID に存在する "すべて" のユーザーとグループを同期できるほか、特定のグループのみを "範囲指定" して同期することもできます。

範囲指定された同期の詳細については、Microsoft Entra Domain Services の範囲指定された同期に関するページを参照してください。
notificationSettings マネージド ドメインで生成されたアラートがある場合は、電子メール通知を送信できます。

Azure テナントの全体管理者AAD DC Administrators グループのメンバーは、これらの通知に対して [有効] にすることができます。

必要に応じて、注意が必要なアラートがある場合に通知用に他の受信者を追加できます。
domainConfigurationType 既定では、マネージド ドメインは "ユーザー" フォレストとして作成されます。 このタイプのフォレストでは、オンプレミスの AD DS 環境で作成されたユーザー アカウントも含め、Microsoft Entra ID 内のすべてのオブジェクトが同期されます。 ユーザー フォレストを作成するために domainConfiguration 値を指定する必要はありません。

"リソース" フォレストでは、Microsoft Entra ID に直接作成されたユーザーとグループだけが同期されます。 リソース フォレストを作成するには、この値を ResourceTrusting に設定します。

"リソース" フォレストを使用する理由や、オンプレミスの AD DS ドメインを使用してフォレストの信頼を作成する方法など、"リソース" フォレストの詳細については、Domain Services リソース フォレストの概要に関するページを参照してください。

次の圧縮されたパラメーターの定義は、これらの値がどのように宣言されるかを示しています。 aaddscontoso.com という名前のユーザー フォレストは、マネージド ドメインに同期されている Microsoft Entra ID のすべてのユーザーで作成されます。

"parameters": {
    "domainName": {
        "value": "aaddscontoso.com"
    },
    "filteredSync": {
        "value": "Disabled"
    },
    "notificationSettings": {
        "value": {
            "notifyGlobalAdmins": "Enabled",
            "notifyDcAdmins": "Enabled",
            "additionalRecipients": []
        }
    },
    [...]
}

その後、次の圧縮された Resource Manager テンプレート リソースの種類を使用して、マネージド ドメインが定義および作成されます。 Azure 仮想ネットワークとサブネットが既に存在するか、または Resource Manager テンプレートの一部として作成される必要があります。 マネージド ドメインは、このサブネットに接続されます。

"resources": [
    {
        "apiVersion": "2017-06-01",
        "type": "Microsoft.AAD/DomainServices",
        "name": "[parameters('domainName')]",
        "location": "[parameters('location')]",
        "dependsOn": [
            "[concat('Microsoft.Network/virtualNetworks/', parameters('vnetName'))]"
        ],
        "properties": {
            "domainName": "[parameters('domainName')]",
            "subnetId": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/virtualNetworks/', parameters('vnetName'), '/subnets/', parameters('subnetName'))]",
            "filteredSync": "[parameters('filteredSync')]",
            "notificationSettings": "[parameters('notificationSettings')]"
        }
    },
    [...]
]

次のセクションに示すように、これらのパラメーターとリソースの種類は、マネージド ドメインをデプロイするためのより広範囲の Resource Manager テンプレートの一部として使用できます。

サンプル テンプレートを使用してマネージド ドメインを作成する

次の完全な Resource Manager サンプル テンプレートでは、マネージド ドメインとサポートする仮想ネットワーク、サブネット、ネットワーク セキュリティ グループの規則が作成されます。 ネットワーク セキュリティ グループの規則は、マネージド ドメインをセキュリティで保護し、トラフィックを正常に送受信できることを確認するために必要です。 aaddscontoso.com の DNS 名を持つユーザー フォレストが作成され、すべてのユーザーが Microsoft Entra ID から同期されます。

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "apiVersion": {
            "value": "2017-06-01"
        },
        "domainConfigurationType": {
            "value": "FullySynced"
        },
        "domainName": {
            "value": "aaddscontoso.com"
        },
        "filteredSync": {
            "value": "Disabled"
        },
        "location": {
            "value": "westus"
        },
        "notificationSettings": {
            "value": {
                "notifyGlobalAdmins": "Enabled",
                "notifyDcAdmins": "Enabled",
                "additionalRecipients": []
            }
        },
        "subnetName": {
            "value": "aadds-subnet"
        },
        "vnetName": {
            "value": "aadds-vnet"
        },
        "vnetAddressPrefixes": {
            "value": [
                "10.1.0.0/24"
            ]
        },
        "subnetAddressPrefix": {
            "value": "10.1.0.0/24"
        },
        "nsgName": {
            "value": "aadds-nsg"
        }
    },
    "resources": [
        {
            "apiVersion": "2017-06-01",
            "type": "Microsoft.AAD/DomainServices",
            "name": "[parameters('domainName')]",
            "location": "[parameters('location')]",
            "dependsOn": [
                "[concat('Microsoft.Network/virtualNetworks/', parameters('vnetName'))]"
            ],
            "properties": {
                "domainName": "[parameters('domainName')]",
                "subnetId": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/virtualNetworks/', parameters('vnetName'), '/subnets/', parameters('subnetName'))]",
                "filteredSync": "[parameters('filteredSync')]",
                "domainConfigurationType": "[parameters('domainConfigurationType')]",
                "notificationSettings": "[parameters('notificationSettings')]"
            }
        },
        {
            "type": "Microsoft.Network/NetworkSecurityGroups",
            "name": "[parameters('nsgName')]",
            "location": "[parameters('location')]",
            "properties": {
                "securityRules": [
                    {
                        "name": "AllowSyncWithAzureAD",
                        "properties": {
                            "access": "Allow",
                            "priority": 101,
                            "direction": "Inbound",
                            "protocol": "Tcp",
                            "sourceAddressPrefix": "AzureActiveDirectoryDomainServices",
                            "sourcePortRange": "*",
                            "destinationAddressPrefix": "*",
                            "destinationPortRange": "443"
                        }
                    },
                    {
                        "name": "AllowPSRemoting",
                        "properties": {
                            "access": "Allow",
                            "priority": 301,
                            "direction": "Inbound",
                            "protocol": "Tcp",
                            "sourceAddressPrefix": "AzureActiveDirectoryDomainServices",
                            "sourcePortRange": "*",
                            "destinationAddressPrefix": "*",
                            "destinationPortRange": "5986"
                        }
                    },
                    {
                        "name": "AllowRD",
                        "properties": {
                            "access": "Allow",
                            "priority": 201,
                            "direction": "Inbound",
                            "protocol": "Tcp",
                            "sourceAddressPrefix": "CorpNetSaw",
                            "sourcePortRange": "*",
                            "destinationAddressPrefix": "*",
                            "destinationPortRange": "3389"
                        }
                    }
                ]
            },
            "apiVersion": "2018-04-01"
        },
        {
            "type": "Microsoft.Network/virtualNetworks",
            "name": "[parameters('vnetName')]",
            "location": "[parameters('location')]",
            "apiVersion": "2018-04-01",
            "dependsOn": [
                "[concat('Microsoft.Network/NetworkSecurityGroups/', parameters('nsgName'))]"
            ],
            "properties": {
                "addressSpace": {
                    "addressPrefixes": "[parameters('vnetAddressPrefixes')]"
                },
                "subnets": [
                    {
                        "name": "[parameters('subnetName')]",
                        "properties": {
                            "addressPrefix": "[parameters('subnetAddressPrefix')]",
                            "networkSecurityGroup": {
                                "id": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/NetworkSecurityGroups/', parameters('nsgName'))]"
                            }
                        }
                    }
                ]
            }
        }
    ],
    "outputs": {}
}

このテンプレートは、Microsoft Entra 管理センターAzure PowerShell、CI/CD パイプラインなどの、推奨されるデプロイ方法を使ってデプロイできます。 次の例では、New-AzResourceGroupDeployment コマンドレットを使用します。 独自のリソース グループ名とテンプレート ファイル名を指定します。

New-AzResourceGroupDeployment -ResourceGroupName "myResourceGroup" -TemplateFile <path-to-template>

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

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

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

次のステップ

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