Amazon FSx を Terraform で作り、Linux と Windows でファイル共有する
はじめに
上記の続きです。今度は FSx for NetApp ONTAP を試してみます。
フルマネージドの共有ストレージであり、NFS、SMB、iSCSI、および NVMe over TCP のマルチプロトコルアクセスをサポートとしています。
基本構成としては以下を作ることになります。
- ファイルシステム : ストレージ容量とスループットを指定する
- ストレージ仮想マシン(SVM) : データ管理およびアクセスするための独自の管理エンドポイント
- ボリューム : 仮想のリソース。ファイルシステムの物理リソースを割り当てる。
ボリュームは事前に予約されず、利用状況に応じて動的に割り当てられます。
マルチプロトコルによるアクセス制御について
ボリュームに対してセキュリティスタイルとして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 側のセキュリティグループの設定はこちらにあります。
アウトバウンドは制限なしとして、インバウンドは以下の指定が必要です。
プロトコル | ポート | ロール |
---|---|---|
すべての 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 の定義としては以下のみで使えるようになります。
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
また、管理者のパスワードはコンソールで再設定が可能です。
ワークグループの設定
最初に 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
設定が終わると以下のようになります。
Server と WorkGroup の設定
ユーザーの設定
グループに所属するユーザーの設定
ファイル共有の設定
上記の設定を見てもらうとわかるとおり、SHARE1 に対しては全員にフルコントロールが指定されています。
Windows でのマウント
ボリュームのマウントのパスではなく、実際に Windows で作成したファイル共有をマウント指定するとマウントできます。
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
おわりに
ワークグループの設定周りが最初わからなかったんですが、実際にドキュメントを読みながら理解できました。
読んでた時は少し難しいかなと思ったんですが、実際にやってみると理解が進むと思います。参考
Discussion