AWSで Active Directory の冗長化をやってみる 最初のドメインコントローラをたてる!
はじめに
くどうです
以前、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
構成図
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
インスタンスを各Subnetで立ち上げます。
Primary IP も設定します。デモ環境では以下に設定しました。
コンピュータ名:Sunbet | Primary IP |
---|---|
Demo-AD1:Subnet1 | 172.16.0.10 |
Demo-AD2:Subnet2 | 172.16.1.10 |
インスタンス起動後、EC2ConfigService Settings の [General] タブ、[Set Computer Name]が有効になっていないことを確認します(デフォルトでは無効)。
[Set Computer Name]の説明は、EC2Config サービスを使用した Windows インスタンスの設定を確認ください。
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/UsingConfig_WinAMI.html
ファイヤーウォールおよびセキュリティグループの設定を行います。
開けるべきポートは以下を参照します。
ドメイン環境で使用されるポートについて
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]
コンピュータ名の変更を行います。
システムのプロパティを開きコンピューター名の変更を行います。。
追加でEBSボリュームを用意します。
別ボリュームとして、Active Directory データベース、 ログファイルおよびSYSVOLを保存します。
事前にDドライブにマウントしています。
最初のドメインコントローラを構築します。
サーバーマネージャーより役割と機能の追加ウィザードを開きます。
サーバーの役割で[Active Directory ドメイン サービス]を追加します。
Tips:Windows Server 2012では構成設定のエクスポートを行い、PowerShellでの読み込むことで同じ構成を構築することが可能です。
[PowerShell]
PS C:\Users\Administrator> Install-WindowsFeature -ConfigurationFilePath [エクスポートした構成ファイル(XML)]
[/PowerShell]
次に、サーバーをドメインコントローラに昇格します。
サーバーマネージャーから設定を行います。
通知アイコンから「このサーバーをドメインコントローラーに昇格する」をクリックします。
Windows Server 2012 からはdcpromo.exeは推奨されていません。注意してください。
Active Directory ドメイン サービス構成ウィザードが起動します。
配置構成で、新規フォレストを追加します。
ルートドメイン名 | hoge.local |
ドメインコントローラーオプションで、機能レベルを選択します。
Windows Server 2003 |
Windows Server 2008 |
Windows Server 2008 R2 |
Windows Server 2012 |
が選択できますが、新規構築のためドメインコントローラはWindows Server 2012のみのため以下の設定にします。
フォレストの機能レベル | Windows Server 2012 |
ドメインの機能レベル | Windows Server 2012 |
また、ディレクトリ復元モード(DSRM)のパスワード設定を行います。
DNSオプションでは委任するDNSがないためそのまま進めます。
Windows DNS が自動的にインストールされます。
追加オプションでは、NetBIOS ドメイン名を確認します。
NetBIOS ドメイン名:HOGE
パスではActive Directory データベース、 ログファイルおよびSYSVOLを保存します。
追加したボリュームを指定します。
データベースのフォルダー:D:\Windows\NTDS
ログファイルのフォルダー:D:\Windows\NTDS
SYSVOLフォルダー:D:\Windows\SYSVOL
オプションの確認を行います。
[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 スクリプト
「スクリプトの表示」を行うと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は変わることのないためそのまま進めます。
完了後再起動されます。
簡易的な動作確認ため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つ目のドメインコントローラを追加していきたいと思います。