🔍

Amazon FSx を Terraform で作り、Linux と Windows でファイル共有する

2025/01/06に公開

はじめに

https://zenn.dev/shikazuki/articles/627fa65a3bbe2d
上記の続きです。今度は FSx for NetApp ONTAP を試してみます。

https://aws.amazon.com/jp/fsx/netapp-ontap/

フルマネージドの共有ストレージであり、NFS、SMB、iSCSI、および NVMe over TCP のマルチプロトコルアクセスをサポートとしています。

基本構成としては以下を作ることになります。

  • ファイルシステム : ストレージ容量とスループットを指定する
  • ストレージ仮想マシン(SVM) : データ管理およびアクセスするための独自の管理エンドポイント
  • ボリューム : 仮想のリソース。ファイルシステムの物理リソースを割り当てる。

ボリュームは事前に予約されず、利用状況に応じて動的に割り当てられます。

マルチプロトコルによるアクセス制御について

https://aws.amazon.com/jp/blogs/news/enabling-multiprotocol-workloads-with-amazon-fsx-for-netapp-ontap/

ボリュームに対してセキュリティスタイルとして3種類選択が可能です。
UNIX を選択した場合は NFS を利用することになるため、Linux の方が扱いやすくなります。
NTFS を選択した場合は SMB を利用することになるため、Windows の方が扱いやすくなります。

セキュリティスタイル パーミッションを変更できるクライアント ファイルもしくはディレクトリのパーミッション
UNIX Linux Mode-bits または NFSv4.x ACL
NTFS Windows NTFS ACL
Mixed Linux または Windows 両方
セキュリティスタイル プロトコル ネームマッピング方向 パーミッションの管理
NTFS NFS UNIX から Windows NTFS ACL
NTFS CIFS/SMB Windows から UNIX NTFS ACL
UNIX NFSv3 なし Mode-bits または NFSv4.x ACL
UNIX NFSv4.x 数字 ID から UNIX ユーザ名 Mode-bits または NFSv4.x ACL
UNIX CIFS/SMB Windows から UNIX Mode-bits または NFSv4.x ACL
Mixed CIFS/SMB Windows から UNIX 有効なセキュリティスタイルに応じて管理
Mixed NFS 有効なセキュリティスタイルによる 有効なセキュリティスタイルに応じて管理

今回は AD なしの構成で共有を試したのですが、 Windows との共有を考える場合は AD を利用して制御した方が良さそうです。
利用しない場合は、Linux 側で SMB で後述するユーザー指定のマウントを行う必要があります。

AWSでの設定

簡単な構成図です。セッションマネージャの設定用の定義は図から省略しました。
基本的には設定する項目は少なく、セキュリティグループの設定をちゃんと行えば問題ないと思います。

FSx_NetApp_architecture.drawio.png

FSx 側のセキュリティグループの設定はこちらにあります。
https://docs.aws.amazon.com/ja_jp/fsx/latest/ONTAPGuide/limit-access-security-groups.html

アウトバウンドは制限なしとして、インバウンドは以下の指定が必要です。

プロトコル ポート ロール
すべての ICMP すべて インスタンスへの ping を実行する
SSH 22 SSH クラスター管理LIFまたはノード管理の IP アドレスへのアクセス LIF
TCP 111 リモートプロシージャ呼び出し NFS
TCP 135 リモートプロシージャ呼び出し CIFS
TCP 139 ネットBIOSサービスセッション CIFS
TCP 161-162 シンプルなネットワーク管理プロトコル (SNMP)
TCP 443 ONTAP REST API クラスター管理LIFまたは SVM管理の IP アドレスへのアクセス
TCP 445 Microsoft SMB/CIFS ネットBIOSフレーミングTCP
TCP 635 NFS マウント
TCP 749 Kerberos
TCP 2049 NFS サーバーデーモン
TCP 3260 iSCSI データを通じて SCSIにアクセスする LIF
TCP 4045 NFS ロックデーモン
TCP 4046 ネットワークステータスモニター NFS
TCP 10000 ネットワークデータ管理プロトコル (NDMP) とクラスター NetApp SnapMirror 間通信
TCP 11104 クラスター NetApp SnapMirror 間通信の管理
TCP 11105 SnapMirror クラスター間を使用したデータ転送 LIFs
UDP 111 リモートプロシージャ呼び出し NFS
UDP 135 リモートプロシージャ呼び出し CIFS
UDP 137 ネットBIOSネーム解決 CIFS
UDP 139 ネットBIOSサービスセッション CIFS
UDP 161-162 シンプルなネットワーク管理プロトコル (SNMP)
UDP 635 NFS マウント
UDP 2049 NFS サーバーデーモン
UDP 4045 NFS ロックデーモン
UDP 4046 ネットワークステータスモニター NFS
UDP 4049 NFS クォータプロトコル

VPCとEC2インスタンスとセキュリティグループの定義を除くと Terraform の定義としては以下のみで使えるようになります。

main.tf
resource "random_password" "admin_password" {
  length           = 16
  special          = true
  override_special = "!#$%&*()-_=+[]{}<>:?"
}

output "admin_password" {
  value     = random_password.admin_password.result
  sensitive = true
}

resource "aws_fsx_ontap_file_system" "main" {
  storage_capacity                = 1024
  subnet_ids                      = [module.network.pri_a_1_id]
  security_group_ids              = [aws_security_group.main.id]
  deployment_type                 = "SINGLE_AZ_1"
  ha_pairs                        = 1
  throughput_capacity_per_ha_pair = 128
  preferred_subnet_id             = module.network.pri_a_1_id
  fsx_admin_password              = random_password.admin_password.result

  tags = {
    Name = "${local.prefix}-fs"
  }
}

resource "aws_fsx_ontap_storage_virtual_machine" "svm" {
  file_system_id     = aws_fsx_ontap_file_system.main.id
  name               = "${local.prefix}-svm"
  svm_admin_password = random_password.admin_password.result
}

resource "aws_fsx_ontap_volume" "volume" {
  name                       = "vol"
  junction_path              = "/vol"
  size_in_megabytes          = 1024
  storage_efficiency_enabled = true
  storage_virtual_machine_id = aws_fsx_ontap_storage_virtual_machine.svm.id
  security_style             = "NTFS"
}

起動後にファイルシステムの管理タブから管理ユーザー名と管理用のドメイン名が出力されます。
今回、あらかじめ Linux インスタンスを立てており、セッションマネージャー経由で SSH でログインします。

管理者のパスワードは terraform 管理としているので以下のコマンドで取得してください

$ terraform output admin_password

また、管理者のパスワードはコンソールで再設定が可能です。
login_cifs-management.png

ワークグループの設定

最初に SMB Server の定義と work group を作成します。-vserver で設定した名称を後続で指定することになります。

cluster1::> vserver cifs create -vserver fsx-netapp -cifs-server SMB_SERVER01 -workgroup workgroup01

ユーザーとグループを作成します。

# ユーザーの作成
cluster1::> vserver cifs users-and-groups local-user create -vserver fsx-netapp guest-user
# グループの作成
cluster1::> vserver cifs users-and-groups local-group create -vserver fsx-netapp -group-name SMB_SERVER01\guest-users
# グループにユーザーを追加する
cluster1::> vserver cifs users-and-groups local-group add-members -vserver fsx-netapp -group-name SMB_SERVER01\guest-users -member-names SMB_SERVER01\guest-user

マウントするためのファイル共有を作成します。-path にはボリューム作成時に設定した junction_path を指定します。

# ファイル共有の作成
cluster1::> vserver cifs share create -vserver fsx-netapp -share-name SHARE1 -path /vol

設定が終わると以下のようになります。

vserver_settings.png
Server と WorkGroup の設定

local-user_settings.png
ユーザーの設定

local-group-members_settings.png
グループに所属するユーザーの設定

share_settings.png
ファイル共有の設定

上記の設定を見てもらうとわかるとおり、SHARE1 に対しては全員にフルコントロールが指定されています。

Windows でのマウント

ボリュームのマウントのパスではなく、実際に Windows で作成したファイル共有をマウント指定するとマウントできます。
mount_smb.png

Linux でのマウント

SMB クライアントが必要なので事前にインストールします。

# Install smb client
$ sudo yum install samba-client samba-winbind cifs-utils

作成したユーザで SMB のマウントをしたいので、 username と domain を指定することで、読み書きができる状態でマウントが可能です。

$ sudo mkdir /mnt/fsx/
$ sudo mount -t cifs //<svm-domain-name>/SHARE1 /mnt/fsx/ -o username=guest-user,domain=SMB_SERVER01

おわりに

ワークグループの設定周りが最初わからなかったんですが、実際にドキュメントを読みながら理解できました。
https://docs.netapp.com/ja-jp/ontap/smb-config/set-up-server-workgroup-task.html
読んでた時は少し難しいかなと思ったんですが、実際にやってみると理解が進むと思います。

参考

https://dev.classmethod.jp/articles/amazon-fsx-for-netapp-ontap-terraform-create/
https://www.netapp.com/ja/media/86716-tr-4887-multiprotocol-nas-in-netapp-ontap-overview-and-best-practices.pdf
https://dev.classmethod.jp/articles/amazon-fsx-for-netapp-ontap-workgroup-cifs-server/
https://www.suse.com/ja-jp/support/kb/doc/?id=000018669
https://docs.aws.amazon.com/ja_jp/fsx/latest/ONTAPGuide/managing-volumes.html#volume-security-style
https://qiita.com/dojineko/items/e6c21f3fe309b5aae694

Discussion