こんにちは。
クラウドインテグレーション部技術4課の山﨑です。
入社して8ヶ月が経ちました。最近入社した気分でいたのですが、時の流れが早すぎて驚いています(*´・ω・)
さて、今回Amazon EC2 Systems Manager(SSM) を利用して、起動したWindowsServerが自動でドメイン参加する構成を記載してみようと思います。
ADに参加必須のWindowsServerを大量に起動する際、1台ずつ設定しているとすごい時間がかかるので、起動する際にドメイン参加させます。
<目次>
①AD Connector作成
②IAMポリシー、IAMロール作成
③SSMドキュメント作成
④EC2起動
⑤動作確認
⑥最後に
<前提条件>
①ADサーバーが構築されていること。(今回はEC2上にADサーバーを構築しています)
②DHCPオプションセットでADサーバーをDNSとして指定していること。
③起動するWindowsServerにSSMエージェントが導入済みであること。※1
④起動するWindowsServerが外部接続できること。(SSMのエンドポイントが外部にあるため)
※1 Windows Server 2016 インスタンス、2016 年 11 月以降の Amazon Machine Image (AMI) から作成された Windows Server 2003-2012 R2 インスタンスはデフォルトでSSMエージェントがインストールされています。
<検証環境>
ADサーバー
・OS : WindowsServer2016
・管理者名 : Administrator
・ドメイン名 : test.local
・テスト用OU : OU=test,DC=test,DC=local
・機能レベル : Windows Server 2016
①AD Connector作成
SSMより、ADサーバーへ接続する際は、AD Connectorが必要となるので、作成します。(DirectoryServiceを利用の場合は必要ありません)
1. [コンソール]-[Directory Service]-[Set up Directory]-[AD Connector] より、ADサーバーの情報を入力します。
Connected directory DNS : ドメイン名
Connector account username : 管理者ユーザー名
Connector account password : 管理者パスワード
DNS address : ADサーバーのプライベートIPアドレス(セカンダリがある場合は、[Another] に入力してください)
2. AD Connectorを配置するVPC、サブネット情報を入力します。
3. AD Connector が作成されたら、 DirectoryID(d-xxxxx) をメモします。(DirectoryIDは、SSM作成の際に利用します)
②IAMポリシー、IAMロール作成
起動するWindowsServerが利用するIAMロールを作成します。
SSMを利用して、ドメインに参加するので、SSMの利用権限を付与したIAMポリシーを作成し、IAMロールにアタッチします。
1. [コンソール]-[IAM]-[ポリシー]-[ポリシーの作成]-[AWS 管理ポリシーをコピー]-[AmazonEC2RoleforSSM]をクリックします。
2. ["ssm:CreateAssociation"] を画像のように追記し、IAMポリシーを作成します。
※注意
今回作成するIAMポリシーは、すべてのインスタンスに対して、SSMドキュメントの関連付けをすることができます。
上記を制限する場合は、起動するインスタンスに特定のタグをつけ、IAMポリシーにタグベースでアクセス制御する "Condition" 条件を追記してください。
参考)
ユーザーが特定のタグを持つ Amazon EBS ボリュームおよび Amazon EC2 インスタンスを管理できるようにする
3. [ロール]-[新しいロール] より、IAMロールを作成し、2で作成したIAMポリシーをアタッチします。
③SSMドキュメント作成
起動WindowServerがAD Connector経由でドメイン参加するためのSSMドキュメントを作成します。
1. [コンソール]-[EC2]-[ドキュメント]-[ドキュメントの作成]をクリックします。
2. [名前]、[コンテンツ]を入力し、SSMドキュメントを作成します。
[名前] は SSMを実行する際の名称となりますので、わかりやすい名前にすることをお勧めします。
[コンテンツ] は以下のコードをお使いの環境に合わせて編集してください。
<コード>
{ "schemaVersion": "1.0", "description": "Sample configuration to join an instance to a domain", "runtimeConfig": { "aws:domainJoin": { "properties": { "directoryId": "<DirectoryID>", "directoryName": "<ドメイン名>", "directoryOU": "<OU>", "dnsIpAddresses": [ "<ADのプライベートIPアドレス>" ] } } } }
※注意
SSMのスキーマバージョンは頻繁に更新されるため、SSMドキュメントを作成する場合は、一度公式のリファレンスをご確認の上で作成してください。
SSM Plugins
Systems Manager ドキュメントの作成
④EC2起動
③で作成したSSMを使って、起動するWindowsServerをドメイン参加させます。
基本的なEC2作成部分は割愛して、必要な部分のみ記載します。
SSMエンドポイントがインターネット上にあるため、起動するWindowsServerはインターネット接続できる必要があります。(NATGateway経由でも可)
利用したAMI :Windows_Server-2016-Japanese-Full-Base-2016.12.14 - ami-5b95fb3c
1. [インスタンスの詳細の設定] - [IAMロール] より、② で作成したIAMポリシーをアタッチします。
2. [インスタンスの詳細の設定] - [ユーザー] に、SSMを使ったドメイン参加スクリプトを入力します。
以下のスクリプトを入力してください。
<SSM名> は、 ③ で作成したSSM名を入力してください。
<powershell> Set-DefaultAWSRegion -Region ap-northeast-1 Set-Variable -name instance_id -value (Invoke-Restmethod -uri http://169.254.169.254/latest/meta-data/instance-id) New-SSMAssociation -InstanceId $instance_id -Name “<SSM名>" </powershell>
3. アナウンスに従ってEC2を作成します。
EC2を構築した後に、ドメイン参加、再起動がバックグラウンドで実施されるため通常のEC2構築よりも時間がかかるので、ご注意ください。
⑤動作確認
④で作成したWindowsServerがドメイン参加できているかRDP接続して確認します。
1. [スタート]-[コントロールパネル]-[システムとセキュリティ]-[システム]をクリックし、ドメイン参加できているか確認します。
問題なく、ドメイン参加できていますね!
⑥最後に
今回SSMを使ったドメイン参加を行いましたが、ユーザーデータに wmic や Add-Computer コマンドを入力して、ドメイン参加させる方法もあります。ただ、その場合、ユーザーデータにドメイン参加する際のユーザー名とパスワードを入力する必要があるため、セキュリティ的に懸念があります。
SSMを利用すれば、認証情報をユーザーデータに入力する必要がないため、セキュアにドメイン参加を実現することができます。
SSM使ったドメイン参加については、AWS公式ドキュメントもありますので、参考にしていただけますと幸いです。
Windows インスタンスの AWS Directory Service ドメインへの結合