AWSで Active Directory の冗長化をやってみる 最初のドメインコントローラをたてる!

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

くどうです

以前、WorkSpaces の投稿をしました。ただし Active Directory(以下 AD )の構築が既に構築されている状態での投稿でした。その補足投稿として、AWSでADを新規構築する方法を投稿します。
本投稿はMicrosoft Windows Server 2008R2 Directory Services (DS) on Amazon EC2を参考にしております。
Microsoft Windows Server 2008R2 Directory Services (DS) on Amazon EC2

また、ADをクラウド環境(仮想化環境)へ構築する場合の考慮事項を一読することをお勧めします。
仮想ホスト環境で Active Directory ドメイン コントローラーをホストする場合の考慮事項
http://support.microsoft.com/kb/888794/ja

構成図

図1
マルチAZな単純構成です。

Active Directory の構築

AD を構築するため最初にVPCを用意しましょう。
ただし、WorkSpacesはVirginiaおよびOregonのみ対応しています。

region Virginia(us-east-1)
VPC 172.16.0.0/16
Subnet1 172.16.0.0/24(us-east-1d)
Subnet2 172.16.1.0/24(us-east-1c)

の構成になっています。
VPCの作成方法は割愛させてもらいます。

AD を構築するにあたり利用するAMIは下記になります。
Windows_Server-2012-RTM-Japanese-64Bit-Base-2012.03.12 - ami-69c8c100
ad01

インスタンスを各Subnetで立ち上げます。
Primary IP も設定します。デモ環境では以下に設定しました。

コンピュータ名:Sunbet Primary IP
Demo-AD1:Subnet1 172.16.0.10
Demo-AD2:Subnet2 172.16.1.10

ad02

インスタンス起動後、EC2ConfigService Settings の [General] タブ、[Set Computer Name]が有効になっていないことを確認します(デフォルトでは無効)。
[Set Computer Name]の説明は、EC2Config サービスを使用した Windows インスタンスの設定を確認ください。
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/UsingConfig_WinAMI.html
ad04

ファイヤーウォールおよびセキュリティグループの設定を行います。
開けるべきポートは以下を参照します。
ドメイン環境で使用されるポートについて
http://blogs.technet.com/b/jpntsblog/archive/2009/03/04/3208978.aspx
Active Directory and Active Directory Domain Services Port Requirements
http://technet.microsoft.com/en-us/library/dd772723%28WS.10%29.aspx

プロトコル ポート サービス
TCP 389 LDAP
UDP 389 LDAP
TCP 636 LDAP SSL
TCP 3268 LDAP DC
TCP 3269 LDAP DC SSL
TCP 88 Kerberos
UDP 88 Kerberos
TCP 53 DNS
UDP 53 DNS
TCP 445 SMB,CIFS,SMB2, DFSN, LSARPC, NbtSS, NetLogonR, SamR, SrvSvc
UDP 445 SMB,CIFS,SMB2, DFSN, LSARPC, NbtSS, NetLogonR, SamR, SrvSvc
TCP 25 SMTP
TCP 135 RPC, EPM
TCP 49152-65535 RPC, DCOM, EPM, DRSUAPI, NetLogonR, SamR, FRS
TCP 5722 RPC, DFSR (SYSVOL)
UDP 123 Windows Time
TCP 464 Kerberos change/set password
UDP 464 Kerberos change/set password
UDP 49152-65535 DCOM, RPC, EPM
UDP 138 DFSN, NetLogon, NetBIOS Datagram Service
TCP 9389 SOAP
UDP 67 DHCP, MADCAP
UDP 2535 DHCP, MADCAP
UDP 137 NetLogon, NetBIOS Name Resolution
TCP 139 DFSN, NetBIOS Session Service, NetLogon

AWS Tools for Windows PowerShellだとこんな感じでポリシー作成ができます。。
ドメインコントローラはVPC「vpc-aaaaaaaa」に属していて、セキュリティグループ「sg-aaaaaaaa」に属している場合の例です。
[PowerShell] $groupid = New-EC2SecurityGroup -VpcId "vpc-aaaaaaaa" -GroupName "policy-ad-port" -GroupDescription "policy ad and adds request" $sorcegroup = New-Object Amazon.EC2.Model.UserIdGroupPair $sorcegroup.GroupId = 'sg-aaaaaaaa' $policy1 = @{ IpProtocol="tcp"; FromPort="389"; ToPort="389"; UserIdGroupPair = $sorcegroup } $policy2 = @{ IpProtocol="udp"; FromPort="389"; ToPort="389"; UserIdGroupPair = $sorcegroup } $policy3 = @{ IpProtocol="tcp"; FromPort="636"; ToPort="636"; UserIdGroupPair = $sorcegroup } $policy4 = @{ IpProtocol="tcp"; FromPort="3268"; ToPort="3268"; UserIdGroupPair = $sorcegroup } $policy5 = @{ IpProtocol="tcp"; FromPort="3269"; ToPort="3269"; UserIdGroupPair = $sorcegroup } $policy6 = @{ IpProtocol="tcp"; FromPort="88"; ToPort="88"; UserIdGroupPair = $sorcegroup } $policy7 = @{ IpProtocol="udp"; FromPort="88"; ToPort="88"; UserIdGroupPair = $sorcegroup } $policy8 = @{ IpProtocol="tcp"; FromPort="53"; ToPort="53"; UserIdGroupPair = $sorcegroup } $policy9 = @{ IpProtocol="udp"; FromPort="53"; ToPort="53"; UserIdGroupPair = $sorcegroup } $policy10 = @{ IpProtocol="tcp"; FromPort="445"; ToPort="445"; UserIdGroupPair = $sorcegroup } $policy11 = @{ IpProtocol="udp"; FromPort="445"; ToPort="445"; UserIdGroupPair = $sorcegroup } $policy12 = @{ IpProtocol="tcp"; FromPort="25"; ToPort="25"; UserIdGroupPair = $sorcegroup } $policy13 = @{ IpProtocol="tcp"; FromPort="135"; ToPort="135"; UserIdGroupPair = $sorcegroup } $policy14 = @{ IpProtocol="tcp"; FromPort="49152"; ToPort="65535"; UserIdGroupPair = $sorcegroup } $policy15 = @{ IpProtocol="tcp"; FromPort="5722"; ToPort="5722"; UserIdGroupPair = $sorcegroup } $policy16 = @{ IpProtocol="udp"; FromPort="123"; ToPort="123"; UserIdGroupPair = $sorcegroup } $policy17 = @{ IpProtocol="tcp"; FromPort="464"; ToPort="464"; UserIdGroupPair = $sorcegroup } $policy18 = @{ IpProtocol="udp"; FromPort="464"; ToPort="464"; UserIdGroupPair = $sorcegroup } $policy19 = @{ IpProtocol="udp"; FromPort="49152"; ToPort="65535"; UserIdGroupPair = $sorcegroup } $policy20 = @{ IpProtocol="udp"; FromPort="138"; ToPort="138"; UserIdGroupPair = $sorcegroup } $policy21 = @{ IpProtocol="tcp"; FromPort="9389"; ToPort="9389"; UserIdGroupPair = $sorcegroup } $policy22 = @{ IpProtocol="udp"; FromPort="67"; ToPort="67"; UserIdGroupPair = $sorcegroup } $policy23 = @{ IpProtocol="udp"; FromPort="2535"; ToPort="2535"; UserIdGroupPair = $sorcegroup } $policy24 = @{ IpProtocol="udp"; FromPort="137"; ToPort="137"; UserIdGroupPair = $sorcegroup } $policy25 = @{ IpProtocol="tcp"; FromPort="139"; ToPort="139"; UserIdGroupPair = $sorcegroup } Grant-EC2SecurityGroupIngress -GroupId $groupid -IpPermissions @( $policy1, $policy2, $policy3, $policy4, $policy5, $policy6, $policy7, $policy8, $policy9, $policy10, $policy11, $policy12, $policy13, $policy14, $policy15, $policy16, $policy17, $policy18, $policy19, $policy20, $policy21, $policy22, $policy23, $policy24, $policy25 ) [/PowerShell]
コンピュータ名の変更を行います。
システムのプロパティを開きコンピューター名の変更を行います。。
ad05

追加でEBSボリュームを用意します。
別ボリュームとして、Active Directory データベース、 ログファイルおよびSYSVOLを保存します。
ad06

事前にDドライブにマウントしています。

最初のドメインコントローラを構築します。
サーバーマネージャーより役割と機能の追加ウィザードを開きます。
サーバーの役割で[Active Directory ドメイン サービス]を追加します。
ad07

Tips:Windows Server 2012では構成設定のエクスポートを行い、PowerShellでの読み込むことで同じ構成を構築することが可能です。
ad09
[PowerShell] PS C:\Users\Administrator> Install-WindowsFeature -ConfigurationFilePath [エクスポートした構成ファイル(XML)] [/PowerShell]
次に、サーバーをドメインコントローラに昇格します。
サーバーマネージャーから設定を行います。
通知アイコンから「このサーバーをドメインコントローラーに昇格する」をクリックします。
Windows Server 2012 からはdcpromo.exeは推奨されていません。注意してください。
ad10

Active Directory ドメイン サービス構成ウィザードが起動します。
配置構成で、新規フォレストを追加します。

ルートドメイン名 hoge.local

ad11

ドメインコントローラーオプションで、機能レベルを選択します。

Windows Server 2003
Windows Server 2008
Windows Server 2008 R2
Windows Server 2012

が選択できますが、新規構築のためドメインコントローラはWindows Server 2012のみのため以下の設定にします。

フォレストの機能レベル Windows Server 2012
ドメインの機能レベル Windows Server 2012

また、ディレクトリ復元モード(DSRM)のパスワード設定を行います。
ad12

DNSオプションでは委任するDNSがないためそのまま進めます。
Windows DNS が自動的にインストールされます。
ad13

追加オプションでは、NetBIOS ドメイン名を確認します。
NetBIOS ドメイン名:HOGE
ad14

パスではActive Directory データベース、 ログファイルおよびSYSVOLを保存します。
追加したボリュームを指定します。
データベースのフォルダー:D:\Windows\NTDS
ログファイルのフォルダー:D:\Windows\NTDS
SYSVOLフォルダー:D:\Windows\SYSVOL
ad15

オプションの確認を行います。
[PowerShell] 新しいフォレストの最初の Active Directory ドメイン コントローラーとしてこのサーバーを構成します。 新しいドメイン名は "hoge.local" です。これは新しいフォレスト名にもなります。 ドメインの NetBIOS 名: HOGE フォレストの機能レベル: Windows Server 2012 ドメインの機能レベル: Windows Server 2012 追加オプション: グローバル カタログ: はい DNS サーバー: はい DNS 委任の作成: いいえ データベース フォルダー: D:\Windows\NTDS ログ ファイル フォルダー: D:\Windows\NTDS SYSVOL フォルダー: D:\Windows\SYSVOL DNS サーバー サービスはこのコンピューターに構成されます。 このコンピューターは、この DNS サーバーを優先 DNS サーバーとして使用するように構成されます。 新しいドメイン Administrator アカウントのパスワードはこのコンピューターのローカル Administrator アカウントのパスワードと同じものに設定されます。 [/PowerShell]
AD DS 配置用の Windows PowerShell スクリプト
ad16

「スクリプトの表示」を行うとPowerShell Scriptが表示されます。
以下を行うと同じ構成のサーバーを展開できます。
[PowerShell] Import-Module ADDSDeployment Install-ADDSForest ` -CreateDnsDelegation:$false ` -DatabasePath "D:\Windows\NTDS" ` -DomainMode "Win2012" ` -DomainName "hoge.local" ` -DomainNetbiosName "HOGE" ` -ForestMode "Win2012" ` -InstallDns:$true ` -LogPath "D:\Windows\NTDS" ` -NoRebootOnCompletion:$false ` -SysvolPath "D:\Windows\SYSVOL" ` -Force:$true [/PowerShell]
前提条件のチェックが行われます。
ここではIPアドレスが固定になっていないため、注意が出ますがそのまま進めます。
通常、ADサーバーはIPアドレスを固定にする必要がありますが、AWSよりDHCPにて配布されるプライベートIPは変わることのないためそのまま進めます。
ad17

完了後再起動されます。

簡易的な動作確認ためPowerShellからdcdiagを起動します。

[PowerShell] PS C:\Users\Administrator> dcdiag.exe

ディレクトリ サーバー診断

初期セットアップを実行しています: ホーム サーバーの検索を試みています... ホーム サーバー = Demo-AD1 * AD フォレストが識別されました。 初期情報の収集が完了しました。

必須の初期テストを実行しています

サーバーをテストしています: Default-First-Site-Name\DEMO-AD1 テストを開始しています: Connectivity ......................... DEMO-AD1 はテスト Connectivity に合格しました

プライマリ テストを実行しています

サーバーをテストしています: Default-First-Site-Name\DEMO-AD1 テストを開始しています: Advertising ......................... DEMO-AD1 はテスト Advertising に合格しました テストを開始しています: FrsEvent ......................... DEMO-AD1 はテスト FrsEvent に合格しました テストを開始しています: DFSREvent SYSVOL の共有後、この 24 時間以内に発生した警告またはエラー イベントがあります。 SYSVOL レプリケーション失敗の問題があると、グループ ポリシーの問題が発生する場合 があります。 ......................... DEMO-AD1 はテスト DFSREvent に失敗しました テストを開始しています: SysVolCheck ......................... DEMO-AD1 はテスト SysVolCheck に合格しました テストを開始しています: KccEvent ......................... DEMO-AD1 はテスト KccEvent に合格しました テストを開始しています: KnowsOfRoleHolders ......................... DEMO-AD1 はテスト KnowsOfRoleHolders に合格しました テストを開始しています: MachineAccount ......................... DEMO-AD1 はテスト MachineAccount に合格しました テストを開始しています: NCSecDesc ......................... DEMO-AD1 はテスト NCSecDesc に合格しました テストを開始しています: NetLogons ......................... DEMO-AD1 はテスト NetLogons に合格しました テストを開始しています: ObjectsReplicated ......................... DEMO-AD1 はテスト ObjectsReplicated に合格しました テストを開始しています: Replications ......................... DEMO-AD1 はテスト Replications に合格しました テストを開始しています: RidManager ......................... DEMO-AD1 はテスト RidManager に合格しました テストを開始しています: Services ......................... DEMO-AD1 はテスト Services に合格しました テストを開始しています: SystemLog ......................... DEMO-AD1 はテスト SystemLog に合格しました テストを開始しています: VerifyReferences ......................... DEMO-AD1 はテスト VerifyReferences に合格しました

パーティション テストを実行しています: ForestDnsZones テストを開始しています: CheckSDRefDom ......................... ForestDnsZones はテスト CheckSDRefDom に合格しました テストを開始しています: CrossRefValidation ......................... ForestDnsZones はテスト CrossRefValidation に合格しました

パーティション テストを実行しています: DomainDnsZones テストを開始しています: CheckSDRefDom ......................... DomainDnsZones はテスト CheckSDRefDom に合格しました テストを開始しています: CrossRefValidation ......................... DomainDnsZones はテスト CrossRefValidation に合格しました

パーティション テストを実行しています: Schema テストを開始しています: CheckSDRefDom ......................... Schema はテスト CheckSDRefDom に合格しました テストを開始しています: CrossRefValidation ......................... Schema はテスト CrossRefValidation に合格しました

パーティション テストを実行しています: Configuration テストを開始しています: CheckSDRefDom ......................... Configuration はテスト CheckSDRefDom に合格しました テストを開始しています: CrossRefValidation ......................... Configuration はテスト CrossRefValidation に合格しました

パーティション テストを実行しています: hoge テストを開始しています: CheckSDRefDom ......................... hoge はテスト CheckSDRefDom に合格しました テストを開始しています: CrossRefValidation ......................... hoge はテスト CrossRefValidation に合格しました

エンタープライズ テストを実行しています: hoge.local テストを開始しています: LocatorCheck ......................... hoge.local はテスト LocatorCheck に合格しました テストを開始しています: Intersite ......................... hoge.local はテスト Intersite に合格しました[] [/PowerShell] 通常、エラーは出ませんがDFSREventでエラーが不合格が出る場合があります。
その場合、イベントビューアー[アプリケーションとサービスログ]→[DFS Replication]を確認しエラーが解消されていることを確認します。

以上で最初のドメインコントローラの設定は完了です。

まとめ

今回は最初のドメインコントローラを作成しました。
基本的な作業はオンプレと変わりません。お気軽につくれます。
次回は2つ目のドメインコントローラを追加していきたいと思います。