SSMを利用し、起動したWindowsServerを自動でドメイン参加させる

記事タイトルとURLをコピーする

こんにちは。
クラウドインテグレーション部技術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 ドメインへの結合