ドメインコントローラーにDatadog Agentを導入する際に気を付ける事

ADよく分かってない私がよく調べもせずドメインコントローラーにインストールしようとしてハマったので備忘として残しておきます。
本当に書きたかった記事は本稿で、[WindowsにDatadog Agentインストール](https://qiita.com/hiren/items/8c45fb59845e89759046)は前座だった。

# 環境
[基本的なインストールを実施した時](https://qiita.com/hiren/items/8c45fb59845e89759046#環境)と同様
Datadog Agent Version：7.26.0 ※2021/04/02 時点最新の[インストーラー](https://s3.amazonaws.com/ddagent-windows-stable/datadog-agent-7-latest.amd64.msi)を使用
AD DS機能追加とドメコンへの昇格については[こちら](https://soma-engineering.com/server/activedirectory/promote-domaincontroller-win2016/2018/04/24/)を参考にしました。

# 結論
`Datadog Agent実行専用のドメインユーザー`を作成して、Administrator権限を持ったユーザーでCUIから`専用のユーザー`を指定しながらDatadog Agentをインストールする

```cmd
> msiexec /i datadog-agent-7-latest.amd64.msi DDAGENTUSER_NAME=<DOMAIN>\<USERNAME> DDAGENTUSER_PASSWORD=<PASSWORD>
```

# ハマったところ
## 専用のドメインユーザーが必要
ドメインコントローラーの役割を持つサーバーへ基本的なインストール手順を用いてGUIからインストール試行したところ、以下画像のようなエラーが出てインストールに失敗。メッセージ通り後で何度実行しようとも結果は同じです。
どうしてエラーになっているかこの画像のメッセージからでは全く分かりません...
![Datadog Agent Setup error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/83da1772-4ad2-5a76-5d6e-ebe5caec7e3b.png)

なので、Datadog Agentのインストールログから確認します。（`%temp%`フォルダ内に MSIxxx.LOG のようなファイル名で存在）

```
CA: FinalizeInstall:  Initialized.
CA: FinalizeInstall:  machine is type SV_TYPE_WORKSTATION
CA: FinalizeInstall:  machine is type SV_TYPE_SERVER
CA: FinalizeInstall:  machine is type SV_TYPE_DOMAIN_CTRL
CA: FinalizeInstall:  Computername is ec2amaz-395bb4m (15)
CA: FinalizeInstall:  Computer is joined to domain "example"
CA: FinalizeInstall:  Domain Controller is Writable
CA: FinalizeInstall:  Creating/opening key SOFTWARE\Datadog\Datadog Agent
CA: FinalizeInstall:  previous user registration not found in registry
CA: FinalizeInstall:  Supplied qualified domain '.', using hostname
CA: FinalizeInstall:  No account "ec2amaz-395bb4m\ddagentuser" found.
CA: FinalizeInstall:  SYSPROBE_PRESENT is false
CA: FinalizeInstall:  SYSPROBE_PRESENT explicitly disabled false
CA: FinalizeInstall:  Creating/opening key SOFTWARE\Datadog\Datadog Agent
CA: FinalizeInstall:  Creating/opening subkey installRollback
CA: FinalizeInstall:  Creating/opening subkey uninstallStatus
CA: FinalizeInstall:  checking to see if the service is installed
CA: FinalizeInstall:  Requested service does not exist
CA: FinalizeInstall:  (Configuration Error)  Must supply password for dd-agent-user to create user and/or install service in a domain
CA: FinalizeInstall:  (Configuration Error) Can't create a user that's not in this Domain Controller's domain.
CustomAction FinalizeInstall returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
Action ended 11:11:05: InstallFinalize. Return value 3.
Action 11:11:06: Rollback. Rolling back action:
```
どうやらユーザー指定が無かったからDatadog Agentインストーラーはデフォルトの通りローカルユーザーアカウントを作成しようとするけど、ドメコンなので作成できなくて、エラーになっているようです。

### Datadog Agentの仕様（[ドキュメント](https://docs.datadoghq.com/ja/agent/faq/windows-agent-ddagent-user/#domain-controllers)より引用）
 - Datadog Agentは専用のユーザーアカウントで実行される為、操作者が実際にログインするアカウント以外にユーザーが必要です。
 - Datadog Agentインストーラーはデフォルトで新しいローカルユーザーアカウントを作成し、Datadog Agentの実行ユーザーとして設定します。
 - ドメインコントローラーの役割を持つWindowsはローカルユーザーアカウントの概念が無く、ドメインユーザーしか作成できません。
 - コマンドラインでユーザーアカウントが指定されていない場合、インストーラーはコントローラーのドメインに`ddagentuser`という名前のドメインアカウントを作成します。
 - コマンドラインでユーザーアカウントが指定されているが、このユーザーアカウントがドメインに見つからない場合、インストーラーはそれを作成しようとします。 パスワードが指定されている場合、インストーラーはそのパスワードを使用します。 それ以外の場合は、ランダムなパスワードが生成されます。

### 検証
GUIからはインストーラー起動時にオプションの指定が出来ないので、CUIでインストーラーを起動します。

#### ドメインのAdministratorユーザーでコマンドプロンプトから未作成ドメインユーザー名を指定して起動（パスワード未指定）
```
C:\Users\Administrator\Downloads>msiexec /i datadog-agent-7-latest.amd64.msi DDAGENTUSER_NAME=example.corp\ddagentuser
```
⇒インストール失敗

#### ドメインのAdministratorユーザーでコマンドプロンプトから未作成ドメインユーザー名を指定して起動（パスワード有）
```
C:\Users\Administrator\Downloads>msiexec /i datadog-agent-7-latest.amd64.msi DDAGENTUSER_NAME=example.corp\ddagentuser DDAGENTUSER_PASSWORD=P@ssw0rd
```
⇒インストール失敗

#### ドメインのAdministratorユーザーでPowershellからドメインユーザーを作成し、そのユーザーを指定してコマンドプロンプトから起動（パスワード未指定）
```
PS> Start-Process -FilePath "net" -ArgumentList "user ddagentuser P@ssw0rd /add" -Verb runAs
C:\Users\Administrator\Downloads>msiexec /i datadog-agent-7-latest.amd64.msi DDAGENTUSER_NAME=example.corp\ddagentuser
```
⇒インストール失敗

#### ドメインのAdministratorユーザーで作成したドメインユーザー指定してコマンドプロンプトから起動（パスワード有）
```
C:\Users\Administrator\Downloads>msiexec /i datadog-agent-7-latest.amd64.msi DDAGENTUSER_NAME=example.corp\ddagentuser DDAGENTUSER_PASSWORD=P@ssw0rd
```
⇒**インストール成功**

#### ドメインのAdministratorユーザーでPowershellからインストール用のドメインユーザーを作成し、AdministratorGPOに所属させないままログインしGUI|CUIで起動

```
PS> Start-Process -FilePath "net" -ArgumentList "user hiren P@ssw0rd /add" -Verb runAs
```
⇒当然ながら起動時に管理者ユーザーのアカウント情報求められるので権限の無いユーザーのみではインストール不可

#### ドメインのAdministratorユーザーでPowershellから作成したインストール用のドメインユーザーの所属GPOにAdministratorのみ追加してからログインしてコマンドプロンプトから起動
```
PS> Start-Process -FilePath "net" -ArgumentList "localgroup administrators hiren /add" -Verb runAs
C:\Users\hiren\Downloads>msiexec /i datadog-agent-7-latest.amd64.msi DDAGENTUSER_NAME=example.corp\ddagentuser DDAGENTUSER_PASSWORD=P@ssw0rd
```
⇒**インストール成功**

#### （番外編）Datadog Agentインストール後にAD,DNSインストールし、ドメコンへ昇格
⇒問題無し。作成されていたddagentuserはそのままドメインユーザーとなっていた

### サポートへ問い合わせ
[ドキュメント](https://docs.datadoghq.com/ja/agent/faq/windows-agent-ddagent-user/#domain-controllers)には特にユーザーやパスワードを指定せずとも自動で作成されると記載があるのに検証結果と一致しないので、Datadogサポートへ問い合わせてみました。

>現状ドメインコントローラーへのインストールは、ユーザを指定していただく必要があり、
指定をしない状態でのインストールについては未サポートとなっておりました。

>ご確認をいただいたドキュメントについては修正に向け担当チームと確認をしております。
ご不便をおかけし大変申し訳ございません。

>大変恐れ入りますが、事前にユーザを作成していただき、ユーザを指定してインストールをいただけますと幸いです。

・・・との事です。
ドキュメントの方が誤っていたようで、文面からは 2021/04/13 回答時点では将来的なサポートの予定も無さそうです。
なので、回答の通り事前にユーザーを作成し、指定してインストールが必要なようです。

## 指定したユーザーはログイン不可になる
ここからはドメインコントローラーでない環境でも考慮が必要な内容になります。
Datadog Agentのインストール時に指定したユーザーは、インストール中に下記の通りログインを制限するように権限が変更されます。
>It has local login disabled
>It has remote login disabled
>It has network login disabled

実際に操作するユーザーアカウントを指定してしまうとログインできなくなってしまうので、Datadog Agent実行専用のアカウントを作成してインストール時に指定してください。

## サービスとしてログオンのポリシーを許可する
こちらも非ドメインコントローラー環境でも注意が必要です。
Datadog Agentのインストール時に指定した実行ユーザーは一切ログインできなくなりますが、サービスを実行するには適切な権限が必要です。
Datadog Agentのインストール時に指定したユーザーへは通常以下の権限が付与されますが、何らかの理由によりインストール後変更した/されたりするとAgentが起動出来なくなります。

1. 「サービスとしてログオン」にDatadog Agent実行ユーザーもしくは所属グループを追加
1. 「サービスとしてのログオンを拒否」にDatadog Agent実行ユーザーや所属グループが存在しない

### ポリシーが個々のホストにて管理されている場合
以下より確認ができます。
ローカル セキュリティポリシー＞ローカルポリシー＞ユーザー権限の割り当て

![2021-04-06_19h23_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/8ff62036-f38c-2952-0ff3-53bc2e49d5fc.png)

### グループポリシー（GP）を用いてドメイン上のオブジェクト単位で管理している場合
以下より確認ができます。
グループ ポリシーの管理＞対象のGPを選択し、右クリックより「編集」＞コンピューターの構成＞ポリシー＞Windows の設定＞セキュリティの設定＞ローカル ポリシー＞ユーザー権限の割り当て

![2021-04-06_19h41_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/4a14af01-bfc2-ad08-bfa5-6973fcddc4f0.png)

## パスワードが期限切れにならないようにする
こちらも非ドメインコントローラー環境でも注意が必要です。
Datadog Agentのサービス開始時に実行ユーザーでログオンが必要なのは前項に記載の通りで、ログオンにはパスワードが必要です。
パスワードのポリシー設定がデフォルトのままなら42日後にパスワードの有効期限が切れ、サービスやサーバー自体を（再）起動後にログオンできないエラーでDatadog Agentが起動しなくなります。
なので、パスワードの期限が切れる前に変更するか、アカウントのパスワードを無期限にします。

パスワードのポリシーは以下より確認できます。
####ポリシーが個々のホストにて管理されている場合
・ローカル セキュリティポリシー＞アカウント ポリシー＞パスワードのポリシー
####グループポリシー（GP）を用いてドメイン上のオブジェクト単位で管理している場合
・グループ ポリシーの管理＞対象のGPを選択し、右クリックより「編集」＞コンピューターの構成＞ポリシー＞Windows の設定＞セキュリティの設定＞アカウント ポリシー＞パスワードのポリシー

![2021-04-07_13h17_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/a2ca2bf5-64f0-ef9c-c391-c1e3ca0adda3.png)


パスワードを無期限にする場合は以下から設定できます。
Active Directory ユーザーとコンピューター＞所属ドメイン＞所属OU＞対象ユーザー＞プロパティ＞アカウント＞アカウントオプション
![2021-04-07_13h11_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/21643a7b-c17b-aae0-d162-377b505daa8c.png)

# 参考
[ドメイン環境へのインストール](https://docs.datadoghq.com/ja/agent/faq/windows-agent-ddagent-user/#installation-in-a-domain-environment)
[【Active Directory】ドメインコントローラーに昇格する](https://soma-engineering.com/server/activedirectory/promote-domaincontroller-win2016/2018/04/24/)
[ADユーザーをAdministratorに所属させずRDPできるようにする方法](https://www.projectgroup.info/tips/Windows/WindowsSvr2012_0016.html)