Amazon FSx for Windows File ServerをTerraformで実装してみた 2 ~Amazon FSx構築編~

AWS

2024.8.26

Topics

はじめに

こんにちは、amaebiです。
前回に引き続き、Amazon FSx for Windows File ServerをTerraformで実装していきます。
今回は、Amazon FSx for Windows File Serverの構築、動作テストを行っていきます。前回の自己管理型ADサーバー構築編の記事はこちらに載せておきますので、まだ読まれていない方はご覧ください。

関連記事
Amazon FSx for Windows File ServerをTerraformで実装してみた 1 ~自己管理型ADサーバー構築編~

Amazon FSx for Windows File Serverとは

では、そもそもAmazon FSx for Windows File Serverとは何なのか、軽く触れていきます。

概要

Amazon FSx for Windows File Server は、フルマネージド型の Microsoft Windows ファイルサーバーを提供し、完全にネイティブな Windows ファイルシステムによってバックアップされています。FSx for Windows File Server には、エンタープライズアプリケーションを簡単に にリフトアンドシフトするための機能、パフォーマンス、および互換性があります AWS クラウド。
出典:FSx for Windows File Server とは

Active Directoryの認証を利用して、フルマネージド型 Windows File Serverを提供するサービスになっております。Microsoft Windowsと親和性が高く、フルマネージドサービスであるため、ハードウェアやミドルウェアの管理も不要です。こちらを使ってファイル共有をしていきます。

前回までのおさらい

前回までは、AWS上にADサーバー用の環境をTerraformで構築し、AWS Systems Manager Fleet Managerを利用してプライベートサブネット内のWindows Serverにログイン後、Active Directoryの構築を行いました。

今回は、以下のような手順でAmazon FSx for Windows File Serverを構築していきます。

  • Amazon FSx for Windows File Server用のOU、ユーザーグループ、ユーザーを作成
  • Terraformを使用してAmazon FSx for Windows File Server構築
  • 動作テスト

Amazon FSx for Windows File Server用のOU、ユーザーグループ、ユーザーを作成

Amazon FSx for Windows File Serverの構築の際に使用するOU、ユーザーグループ、ユーザーを作成し、そのユーザーグループに対して制御の委任を行っていきます。
参考:Amazon FSxサービスアカウントまたはグループへのアクセス許可の委任

Amazon FSx for Windows File Server用のユーザー関係図は以下の通りです。

Amazon FSx for Windows File Server用のOU作成

Amazon FSx for Windows File Server用のOUを作成していきます。
前回と同様、AWS Systems Manager Fleet ManagerからADサーバーにログインし、Server Managerを開き、Tools(ツール)からActive Directory Users and Computers(ユーザーとコンピューター)を開きます。

該当のドメイン名を右クリックし、NewからOrganizational Unitをクリックします。

任意のOU名を入力し、OKを押します。(OU名は必ずメモ書きしておきます。)

Amazon FSx for Windows File Server用のAdminユーザーグループ作成

Amazon FSx for Windows File Serverを制御するための管理者権限を有したユーザーグループを作成していきます。
先ほど作成したOUを右クリックし、NewからGroupをクリックします。

任意のユーザーグループ名を入力し、OKを押します。(ユーザーグループ名は必ずメモ書きしておきます。)

ユーザーグループの作成が完了したら、そのグループ内に所属させるユーザーを作成します。
OUを右クリックし、NewからUserをクリックします。

First nameとLast name(任意のユーザー名)、User logon name(ユーザーログオン名)を入力し、Nextを押します。(ユーザー名、ユーザーログオン名は必ずメモ書きしておきます。)
※Full nameとUser logon name (pre-Windows 2000)は上記内容を入力すると自動的に入力されます。

任意のパスワードを入力後、項目別に以下のようなアクションをしてください。すべての入力が完了後、Nextをクリックします。(パスワードは必ずメモ書きしておきます。)

  • User must change password at next logon(ユーザーは次回ログオン時にパスワード変更が必要)のチェックを外す
  • Password never expires(パスワードを無期限にする)にチェックを付ける

設定項目を確認後、問題がなければFinishをクリックします。
こちらのユーザーは後の「ログインの設定」にてFSx操作ユーザーとして扱います。

次に作成したユーザーをグループに追加します。
作成したユーザーを右クリックし、Add to group …をクリックします。

2つのユーザーグループを追加します。

  • 先ほど作成したユーザーグループ
  • Enterprise Admins(Amazon FSx for Windows File Serverのファイル操作を行う際に必要)


Amazon FSx for Windows File Server用のサービスアカウント作成

Amazon FSx for Windows File Serverの制御を委任するためのユーザーを作成します。
ユーザーの作成方法については、上記と同様になりますので、今回は割愛させていただきます。
(ユーザー名、ユーザーログオン名、パスワードは必ずメモ書きしておきます。グループの追加等は必要ありません。)

制御の委任

先ほど作成したサービスアカウントに、Delegate Control(制御の委任)を行います。
OUを右クリックし、Delegate Control…をクリックします。

Nextをクリックします。

Addをクリックします。

先ほど作成したサービスアカウントを選択し、OKをクリックします。

サービスアカウントが追加されていることを確認できたら、Nextをクリックします。

Create a custom task to delegate(委任するカスタムタスクの作成)を選択し、Nextをクリックします。

オブジェクトの種類を選択します。以下の項目を選択、チェックを入れていください。その後、Nextをクリックします。

  • Only the following objects in hte folder(フォルダー内の次のオブジェクトのみ)を選択
  • Computer objects(コンピューターオブジェクト)をチェック
  • Create selected objects in this folder(選択されたオブジェクトをこのフォルダーに作成する)をチェック
  • Delete selected objects in this folder(選択されたオブジェクトをこのフォルダーから削除する)をチェック

委任するアクセス許可を選択します。
General(全般)をチェックし、以下4つのアクセス許可をチェックします。その後、Nextをクリックします。

  • Reset password(パスワードのリセット)
  • Read and write account restrictions(アカウントの制限の読み取りと書き込み)
  • Validated write to DNS host name(DNSホスト名への検証された書き込み)
  • Validated write to service principal name(サービスプリンシパル名への検証された書き込み)


委任した内容に問題がなければ、Finishをクリックします。

Terraformを使用してAmazon FSx for Windows File Server構築

Terraformを使用してAmazon FSx for Windows File Serverとそれを操作するためのクライアントサーバー(Amazon EC2)を構築していきます。

Terraform コード

実際のTerraformコードがこちらになります。
– Terraform v1.7.4
※前回の自己管理型ADサーバー構築編のTerraformコードを一部参照しているリソースもあるため、まだ確認していない方はこちらからご覧ください。

関連記事
Amazon FSx for Windows File ServerをTerraformで実装してみた 1 ~自己管理型ADサーバー構築編~

client_ec2.tf

主にAmazon FSx for Windows File Serverにアクセスして操作するためのAmazon EC2に関する設定項目が記述されたtfファイルです。

#--------------------------------------
# EC2 (Client Server)
#--------------------------------------

resource "aws_instance" "client_ec2" {
  ami           = data.aws_ami.windows_server_2022.id
  instance_type = "t3.medium"
  subnet_id     = aws_subnet.private_subnet_1a.id

  vpc_security_group_ids      = [aws_security_group.windows_ec2_sg.id]
  associate_public_ip_address = false

  iam_instance_profile = aws_iam_instance_profile.ssm_profile.name

  key_name = data.aws_key_pair.key_pair.key_name

  root_block_device {
    volume_size           = 30
    volume_type           = "gp3"
    iops                  = 3000
    throughput            = 125
    delete_on_termination = true

    tags = {
      Name = "${local.name_prefix}-client-ebs"
    }
  }

  tags = {
    Name = "${local.name_prefix}-client-server"
  }
}

fsx_windows.tf

主にAmazon FSx for Windows File Serverを実装するための設定項目が記述されたtfファイルです。
パスワードをtfファイル自体に記述することはセキュリティ上問題があるため、variableを使用しています。
環境変数名などを利用してセキュアにパスワードを管理するよう個別に対応してください。

variable "service_account_password" {
  type = string
}

#--------------------------------------
# FSx for Windows File System
#--------------------------------------

resource "aws_fsx_windows_file_system" "fsx_windows" {
  deployment_type  = "SINGLE_AZ_1"
  storage_type     = "SSD"
  storage_capacity = 32

  throughput_capacity = 32

  subnet_ids         = [aws_subnet.private_subnet_1a.id]
  security_group_ids = [aws_security_group.fsx_windows_sg.id]

  self_managed_active_directory {
    domain_name                            = "<ADサーバーのドメイン名>"
    dns_ips                                = [aws_instance.ad_ec2.private_ip]
    username                               = "<サービスアカウントのユーザー名>"
    password                               = var.service_account_password # <サービスアカウントのパスワード>
    organizational_unit_distinguished_name = "OU=<FSx用のOU名>, DC=<ADサーバーのNetBIOS名>, DC=<ADサーバーのトップレベルドメイン>"
    file_system_administrators_group       = "<FSx用のユーザーグループ名>"
  }

  tags = {
    Name = "${local.name_prefix}-fsx"
  }
}

上記のself_managed_active_directoryだと、少し分かりにくいため入力例も記載しておきます。

  self_managed_active_directory {
    domain_name                            = "amaebi.local"
    dns_ips                                = [aws_instance.ad_ec2.private_ip]
    username                               = "fsxServiceAccount"
    password                               = var.service_account_password
    organizational_unit_distinguished_name = "OU=FSxOU, DC=amaebi, DC=local"
    file_system_administrators_group       = "fsxadmingroup"
  }

Amazon FSx for Windows File Serverの確認

“terraform apply”を実行後、実際にAmazon FSx for Windows File Serverが作成できたか確認します。
マネジメントコンソール > Amazon FSx > 該当のFSxを確認します。
無事作成されていることが確認できました。

ADサーバー側でもドメイン参加できているか確認します。
Tools(ツール)からActive Directory Users and Computers(ユーザーとコンピューター)を選択し、FSxOUの中身を確認します。
無事ドメイン参加されていることが確認できました。

クライアントサーバーのドメイン参加を行う

クライアントサーバー(xxx-client-server)のドメイン参加を行います。
参考:コンピューターをドメインに参加させる

AWS Systems Manager Fleet Managerからクライアントサーバーにログインし、ncpa.cplを実行します。
その後、ネットワークアダプターのプロパティからInternet Protocol Version 4(TPC/IPv4)のプロパティを開きます。
ADサーバー側のプライベートIPv4アドレスを入力して、OKを押します。

ドメイン解決ができるか確認します。

C:\Users\Administrator>nslookup amaebi.local
Server:  ip-10-0-0-155.ap-northeast-1.compute.internal
Address:  10.0.0.155

Name:    amaebi.local
Address:  10.0.0.155


C:\Users\Administrator>

ドメイン解決が確認できたら、タスクバーの検索ボックスにsysdm.cplと入力し、実行します。
Changeをクリックし、ドメインを切り替えます。

分かりやすくするため、コンピューター名を”clientServer”と入力します。
Domainを選択し、ADサーバーのドメイン名を入力し、OKをクリックします。

ADサーバーの管理者名と管理者パスワードを入力して、OKをクリックします。

ADサーバーの管理者パスワードを確認する場合は、ADサーバー(EC2インスタンス) > 接続 > RDP クライアントタブからパスワードを取得するから確認できます。

ドメイン参加が成功すると、以下の画面が表示されますので、OKをクリックします。

その後、再起動のメッセージが表示されますので、Restart Now(今すぐ再起動)を実行してください。

再起動が完了後、再びタスクバーの検索ボックスからsysdm.cplと入力し、実行します。
Full computer name(コンピューター名)、Domain(ドメイン名)が指定した状態になっていれば、ドメイン参加成功です。

ログインの設定

その画面のまま、Remote(リモート)タブを選択し、Remote Desktop(リモートデスクトップ)内のSelect Users(ユーザーを選択する)をクリックします。

Addをクリックします。

Amazon FSx for Windows File Serverを操作するためのユーザー名を入力し、Check Namesをクリックします。

先ほどのユーザー名とパスワードを入力し、OKをクリックします。

先ほどのユーザーを選択し、OKをクリックします。

選択したユーザーが正しく反映されていることを確認できたら、OKをクリックし、そのユーザーを使用してログインします。

AWS Systems Manager Fleet Managerからユーザー認証情報を利用してログインします。
先ほどのユーザー名とパスワードを入力後、接続をクリックします。

無事ログインできました。

動作確認

Amazon FSx for Windows File Server にアクセスし、フォルダーの作成、共有化や権限の付与できているか確認します。
参考:ファイル共有の作成、更新、削除

簡単ではありますが、テスト用のユーザー関係図は以下の通りです。

テストフォルダ作成

ここから以下のような形で共有フォルダを作成していきます。

事前に”\Amazon FSx for Windows File ServerのDNS名\d$”配下にテストフォルダーを作成しておきます。
参考:

関連記事
Amazon FSx for Windows File Serverへいこう! SMBインポート編

先ほどログインに成功したユーザーを使用します。
タスクバーの検索ボックスからfsmgmt.mscと入力し、実行します。
権限確認を求められますので、ログインしているユーザーのパスワードを入力して、Yesをクリックします。

ActionタブからConnect to another computer…(別のコンピューターへ接続)をクリックします。

Amazon FSx for Windows File ServerのDNS名を入力して、OKをクリックします。

Amazon FSx for Windows File ServerのDNS名の確認方法は、マネジメントコンソール > Amazon FSx > 該当のFSx からネットワークとセキュリティのDNS名に記載されています。
※検証の都合上、FSxのDNS名が異なっている箇所がございます。

Shares(共有)が選択されている状態で、右側の枠を右クリックし、New Share…(新しい共有)をクリックします。

Nextをクリックします。

Browse(参照)をクリックします。

作成したtestuser1_folderを選択し、OKをクリックします。

指定したフォルダが選択されていることを確認できたら、Nextをクリックします。

共有フォルダ名は変更せずにNextをクリックします。

上記のアクセス権限を付与するため、Customize permissions(アクセス許可をカスタマイズする)を選択し、Custom…(カスタマイズ)をクリックします。

共有、セキュリティ両方に以下のようなアクセス権限を付与します。
・testuser1


・testuser2

アクセス権限が付与できたら、Finishをクリックします。

全ての設定項目が問題なければ、Finishをクリックして、共有化させます。

testuser2_folderも同様にアクセス権限を付与して共有化します。

アクセス確認

ここから実際にテストユーザーからアクセス権限通りになっているか確認していきます。
事前にテストユーザーのリモートアクセス許可はしておきます。

testuser1

testuser1_folderアクセス確認:OK

testuser1_folder書き込み確認:OK

textuser2_folderアクセス拒否確認:OK

testuser2

testuser1_folderアクセス確認:OK

testuser1_folder読み取り確認:OK

testuser1_folder書き込み拒否確認:OK

testuser2_folderアクセス確認:OK

testuser2_folder書き込み確認:OK

無事、全てのアクセス権限が問題なく動作していることを確認できました。

おわりに

以上でAmazon FSx for Windows File Serverの構築、動作確認でした。
ここまでご覧いただきありがとうございました。当初はTerraformで実装すれば簡単に終わるだろと高を括っていたのですが、結果的にここまで長くなるとは思いませんでした…
ただ、Amazon FSx for Windows File ServerのTerraform化をしている記事が見当たらなかったので、ある意味ではいい経験になりました。
今後、Ansibleなどを活用してActive Directoryの設定内容もIaC化していければなと思います。

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

amaebi

amaebiと申します。クラウドエンジニアとしてまだまだ未熟ですが、これから精進していきたいです。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら