FSx for Windows File Server＋セルフマネージドなActive Directoryを構築した際のトラブル集

## はじめに
FSx for Windows File ServerをCloudFormationから作成した際に起きたトラブルをまとめてみたので、備忘録として残しておきます。

## 今回の構成
今回は以下の構成でFSx for Windows File Serverを利用します。
* マルチAZ構成
* セルフマネージドAD（オンプレのADを利用します）
```
# ------------------------------------------------------------#
# FSx
# ------------------------------------------------------------#
  MyFSs:
    Type: "AWS::FSx::FileSystem"
    Properties: 
      FileSystemType: "WINDOWS"
      SecurityGroupIds:
        - !Ref FSxSecurityGroup1
        - !Ref FSxSecurityGroup2
      StorageCapacity: 2000
      StorageType: HDD
      WindowsConfiguration: 
        DeploymentType: "MULTI_AZ_1"
        PreferredSubnetId:!Ref FsxSecurityGroup1
        ThroughputCapacity: 128        
        SelfManagedActiveDirectoryConfiguration: 
          DnsIps:
            - A.A.A.A
            - B.B.B.B        
          DomainName:xxxxx.com
          UserName: Admin
          Password: !Sub "{{resolve:secretsmanager:${FSxPasswordArn}:SecretString:password::}}"
          FileSystemAdministratorsGroup: AdminGroup
          OrganizationalUnitDistinguishedName: OU=aws,DC=demo,DC=com
```
## エラー①　DNSサーバのIPアドレスの上限
```
1 validation error detected: Value at 'windowsConfiguration.selfManagedActiveDirectoryConfiguration.dnsIps' failed to satisfy constraint: Member must have length less than or equal to 3 
```
これはDnsIpsフィールドで指定できるIPアドレスの上限を超えたというエラーです。

FSxでは、DnsIpsフィールドに指定できるDNSサーバのIPアドレス数は**最大3つ**という制約があります。

指定するIPアドレスを3つ以下に変更します。

## エラー②　優先サブネットの指定忘れ
```
A preferred subnet ID must be specified for MULTI_AZ_1. 
```
これは「DeploymentType: "MULTI_AZ_1"」とマルチAZ構成としているにも関わらず、優先サブネットを指定していないというエラーです。

FSxでは、複数のAZを利用する場合、どのサブネットを優先的に利用するか明示的に指定する必要があります。

**PreferredSubnetId** を使って優先サブネットを指定します。

## エラー③　FSxがDNSサーバまたはドメインコントローラへ到達できない
```
Failure details message: File system creation failed. Amazon FSx is unable to communicate with your Microsoft Active Directory domain controllers. This is because Amazon FSx can't reach the DNS servers provided or domain controllers for your domain. 
```

これはFSx が Microsoft Active Directory (AD) ドメインコントローラー (DC) に到達できないというエラーです。

以下のトラブルシューティングを行います。

### ネットワーク設定の確認
* セキュリティグループやNACLでFSxからADへの必要な通信が許可されていることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115411/d444a6a5-5dcd-480d-a8e2-a8f30be7ecdf.png)

参照：

https://docs.aws.amazon.com/ja_jp/fsx/latest/WindowsGuide/self-managed-AD.html#self-manage-prereqs

* ルートテーブルのルーティング設定を確認し、ADへのルートが確立されているか確認します。**FSx アクティブディレクトリ検証ツール**を利用すれば、テスト及び検証することが可能です。
 
 https://docs.aws.amazon.com/ja_jp/fsx/latest/WindowsGuide/validate-ad-config.html

### AD周りの確認
・　ADドメインのDNSサーバ及びドメインコントローラがアクティブなことを確認します。

・　FSxと同じサブネットに配置したEC2から、nslookupコマンドなどを利用し、DNSサーバが実際にFSxから到達できるかテストします。
```
nslookup xxxxx.com <DNS-SERVER-IP>
```

## エラー④　FSxがOUにアクセスできない
```
Failure details message: File system creation failed. Amazon FSx is unable to establish a connection with your Microsoft Active Directory domain controllers. This is because the organizational unit you specified either doesn't exist or isn't accessible to the service account provided. 
```
これはFSxがOUへのアクセスに失敗したというエラーです。

以下を確認しましょう。

・　**指定したOUがADに存在するか。**

今回のテンプレートでは、「OrganizationalUnitDistinguishedName：OU=aws,DC=demo,DC=com」と設定しています。
この場合、ADのドメイン名：demo.com、OU：awsと指定しています。
OU名、ドメイン名に間違いがない状態でAD上に存在するか確認しましょう。


・　**指定したサービスアカウントに必要な権限が委任されているか。**

今回のテンプレートでは、「UserName: Admin」と設定しています。
サービスアカウントは、FSxに結合するADドメインのOUでコンピュータオブジェクトを作成及び削除できる必要があります。
また、少なくとも以下の権限を付与サービスアカウントへ付与する必要があります。
* パスワードのリセット
* アカウントのデータの読み取りと書き込みを制限する
* DNSホスト名への書き込み許可
* サービスプリンシパル名への書き込みを許可
* コンピュータオブジェクトを作成および削除するためのコントロールを委任されます
* アカウントの検証を読み書きするための検証済みの機能

## おわりに
かなり詰まったので今後同じことが起きないようまとめｍ