Amazon Web Services ブログ
Amazon FSx for OpenZFS により Linux と Windows クライアント間でデータを共有する
このブログは 2023 年 8 月 14 日に Virgil Ennes(Specialty Sr. Solutions Architect)によって執筆された内容を日本語化したものです。原文はこちらを参照してください。
多くのお客様は、プラットフォーム間で権限モデルが異なっていても、Linux と Windows から同時にアクセスができる高性能な共有ファイルシステムを必要としています。たとえば、メディアとエンターテイメント企業では、Linux と Windows クライアントでワークロードを双方でレンダリングする場合があります。これらのお客様は、「ユーザー名マッピング」などのメカニズムを使用して、Windows クライアントから NFS 経由で共有ファイルシステムをマウントし、ファイルアクセスの競合を回避できるようにしています。
Amazon FSx for OpenZFS(FSx for OpenZFS)はフルマネージドの AWS サービスとして、高性能アプリケーション向けのスケーラブルな OpenZFS ファイルシステムを提供します。スナップショットや暗号化などのデータ管理機能を備え、100 万以上の IOPS と 21 GB/s のスループットをサポートし、ビッグデータや、DevOps、研究のワークロードに適しています。異なるオペレーティングシステムと独自の権限モデル間のギャップを埋めるために、多くお客様では「ユーザー名マッピング」などのソリューションを使用して、NFS 経由でのシームレスなファイル共有を実現しています。
この記事では、Network File System(NFS)プロトコルバージョン 3 を使って、FSx for OpenZFS に保存されているデータを Linux と Windows クライアントで同時に共有するためのさまざまな認証方法を紹介します。これにより、クロスプラットフォームでのデータアクセスや、セキュリティ強化、効率的なデータ管理が可能になり、生産性の向上とリソースの最適化につながります。
NFS と FSx for OpenZFS のバックグラウンド
NFS は Linux のネイティブプロトコルです。Linux 標準の mount コマンドと、ボリュームに関連付けられたドメインネームシステム(DNS)名を使用して、FSx for OpenZFS を Linux にマウントできます。
NFS プロトコルのバージョン 3 および 4.0、4.1、4.2 を使用して、FSx for OpenZFS ファイルシステム上のデータにアクセスできます。Linux クライアントは NFS バージョン 3 と 4.x をネイティブにサポートしており、Linux 標準の mount コマンドを使用してファイルシステムをマウントします。Windows クライアントは NFS バージョン 2 と 3 をサポートしており、NFS クライアントのインストールが必要です。
Linux クライアントと Windows クライアントを同時に FSx for OpenZFS に接続する場合は、両方のプラットフォームでサポートされている NFS バージョンである NFS バージョン 3 を使用します。
AWS 記事の「新機能 – Amazon FSx for OpenZFS」では、FSx for OpenZFS ファイルシステムのセットアップに関する情報を提供しています。
ソリューションのウォークスルー
このソリューションを実装する手順の概要を以下に示します。
- Windows に NFS クライアントをインストールして設定する
Windows クライアントより NFS プロトコルを使用して FSx for OpenZFS をマウントするために必要です。 - ファイルシステムをマウントする
FSx for OpenZFS ファイルシステムを Windows クライアントと Linux クライアントの両方からマウントして、データにアクセスできるようにします。 - ID マッピングと NFS 認証方法を選択して設定する
ユーザー名マッピングサーバー、または Active Directory(AD)統合、匿名認証のいずれかを選択して、FSx for OpenZFS のファイルにアクセスするユーザーをマッピングし、認証します。
1. Windows に NFS クライアントをインストールして設定する
Windows に NFS クライアントをインストールして設定する必要があります。Windows に NFS クライアントをインストールする手順は以下のとおりです。GUI または Windows powershell が使用できます。
以下に、Windows Server 2019 で GUI を使用した手順の例を記載します(この手順は Windows Server 2022 でも利用できます)。
(a)インストール
- Windows サーバーにて「サーバーマネージャー」を開きます。
- ダッシュボードの「クイックスタート」より「役割と機能の追加」を選択し、ダイアログボックスで「次へ」を選択します。
- 「インストールの種類」で、「役割ベースまたは機能ベースのインストール」を選択し、「次へ」を選択します。
- 「サーバーの選択」画面で、サーバー名を選択し、「次へ」を選択します。
- 「サーバーの役割」画面で、「ファイルサービスと記憶域サービス」を展開します。
- 「ファイルサービスと記憶域サービス」の「記憶域サービス」を選択し、「次へ」を選択します。
- 「機能」画面で、「NFS クライアント」を選択し、「次へ」を選択します。
- 「確認」画面で、「インストール」を選択します。
図 1: Windows サーバーで NFS クライアントのインストール
(b)設定
Windows に NFS クライアントをインストールした後に、設定を行う必要があります。Windows サーバーの GUI 上で NFS クライアントを使用して、クライアントの設定と、既定のファイルのアクセス許可、セキュリティモデルをカスタマイズします。デフォルト設定(以下参照) は、ほとんどの環境で機能します。ただし、デフォルトのファイル権限が必要となるセキュリティ対策に対応しているか、Linux ディストリビューションのデフォルトと一致するかを考慮する必要があります。
※補足:以下の「NFS 用サービス」ツールは、NFS サーバーの機能を追加する必要があります
図 2: Windows サーバーの NFS クライント – デフォルトのファイル権限
2. ファイルシステムをマウントする
Linux と Windows クライアントにファイルシステムをマウントして、データにアクセスします。
- ファイルシステムをマウントするために DNS 名が必要です。FSx コンソールを使用して、FSx for OpenZFS ファイルシステムの「ネットワークとセキュリティ」タブに移動し、DNS 名をコピーしてください。以下の図 3 で、FSx for OpenZFS ファイルシステムの DNS 名が記載されている個所を示しています。
図 3: ファイルシステムの DNS 名取得
2. ファイルシステムの DNS 名と、以下の mount コマンド(基本的な mount コマンド)を使用して、Linux サーバーにファイルシステムをマウントします。
mount -t nfs -o vers=3 fs-04fcff18e33270111.fsx.us-west-2.amazonaws.com:/fsx/sync_vol /fsxsync
図 4: Linux にファイルシステムをマウント
3. 以下のコマンドを使用して、Windows サーバにファイルシステムをマウントします。
mount \\fs-04fcff18e33270111.fsx.us-west-2.amazonaws.com\fsx\sync_vol\ Z:
図 5: Windows にファイルシステムをマウント
ファイルシステムの性能を最適化する手順については、FSx for OpenZFS のドキュメントを参照してください。
3. ID マッピングと NFS 認証方法を選択して設定する
Linux と Windows では、使用するアカウントとセキュリティシステムが異なります。Linux は、ユーザー識別子(UID)とグループ識別子(GID)でユーザーを表します。Windows は、一意のセキュリティ識別子(SID)でユーザーとグループを表します。ユーザー名マッピングは、Linux の UID と GID を Windows の SID に変換する、またはその逆に変換するプロセスです。ユーザー名マッピングは、Windows ユーザーが透過的にファイルへのアクセスと、変更、作成を行うためのクリーンなデフォルトの権限セットを提供します。
「NFS と FSx for OpenZFS のバックグラウンド」セクションで説明したように、NFS のサービスをインストールして設定したら、適切な ID マッピングと認証方法を選択して設定を行う必要があります。ユーザー名マッピングサーバー、または Active Directory(AD)統合、匿名認証を使用できます。
AUTH_SYS または AUTH_UNIX:アカウントマッピングに UID と GID 識別子を使用する
AUTH_SYS または AUTH_UNIX アカウントマッピングは、Linux の UID と GID を、対応する Windows ユーザーおよびグループの SID と照合するプロセスです。
Windows 用の NFS クライアントでは、スタンドアロンサーバー用の %windir%\system32\etc\passwd
を使用する方法と、ドメインに参加しているサーバー用に AD を使用する方法の、2 つのアカウントマッピング方法をサポートしています。
3.1 スタンドアロンサーバー:/etc/passwd
/etc/passwd を使用して、Linux の UID と GID を Windows ユーザーおよびグループの SID へ 1 対 1 でマッピングします。
1. はじめに、Windows 用 NFS クライアントを使用して「ユーザー名マッピングサーバー」を指定します。この例では、マッピングサーバーはパスワードファイルを含むサーバーです。
図 6: Windows サーバーの NFS クライント – ユーザー名マッピングサーバー
2. 次に、パスワード(passwd)ファイルを Windows のパス %SYSTEMROOT%\system32\drivers\etc
に配置します。ファイル内の各 Windows ユーザーや SID は、ファイル内の UID と GID に基づいて Linux ユーザーと照合されます。
3. /etc/passwd
ファイルとマッピングサーバーを設定した後に、Windows で NFS クライアントを再起動します。powershell コマンドの nfsadmin client stop と、nfsadmin client start を使用できます。NFS クライアントを再起動する前に、ファイルシステムが Windows からアンマウントされていることを確認してください。
図 7: NFS クライアントの再起動
以下は、Windows クライアントの%SYSTEMROOT%\system32\drivers\etc
にある /etc/passwd
ファイルを使用したユーザーマッピングの例です。
図 8: Windows passwd ファイルの例
各行には、コロンで区切られた次のフィールドがあります:Windows ユーザー名, Linux UID, Linux GID, 説明, Windows ホームディレクトリ
以下の例では、Linux と Windows の両方に mary というユーザーを作成しました。Windows サーバーにログインしてファイルシステムをマウントした後、以下のような mount コマンドを実行することで、mary の UID と GID(この例では UID は 1002 、GID は 1007)が有効であることが確認できます。
図 9: マウントポイントの有効な UID と GID
4. Linux でファイルを作成し、Windows からそのファイルを確認します。Linux に mary のアカウントでログインして、/sync_vol
にマウントした FSx for OpenZFSファイルシステムへ mary-file-linux.txt
という名前のテキストファイルを作成します。以下では、mary-file-linux.txt
ファイルの所有権と、グループメンバーシップ、権限を確認できます。
図 10: ファイルの権限 – Linux
5. Windows 側からそのファイルを確認します。
Windows で mary のアカウントでログインして、FSx for OpenZFS ファイルシステムをマップしたドライブを開きます。ファイルにアクセスすることができ、Linux と同じ所有権と、グループメンバーシップ、権限を保持していることがわかります。
図 11 の赤いボックスには、Windows によって割り当てられたファイル権限と、ユーザー ID、グループ ID が表示されています。
図 11: ファイル権限 – Windows ファイルプロパティ
6. Windows でファイルを作成し、Linux からそのファイルを確認します。
Windows に mary のアカウントでログインしてテキストファイルを作成し、FSx for OpenZFS のファイル共有をマップした Z:
ドライブに保存します。
図 12: Z:
ドライブに保存したサンプルテキストファイル
Windows より、Windows の NFS クライアントが Linux 標準の所有者、グループ、その他、および R、W、X を使って権限を割り当てていることが確認できます。割り当てられた権限には、Windows の NFS クライアントに設定されたデフォルトのファイル権限が適用されています(図 3)。さらに、Windows に格納されている passwd ファイルから UID と GID が割り当てられています。
図 13: ファイル権限 – Windows ファイルプロパティ
7. FSx for OpenZFS の Linux マウントポイントより同じファイルを確認します。ファイルの内容を確認し、Windows で表示されている権限と所有権が Linux と一致していることが確認できます。
図 14: ファイル権限 – Linux
さらに、ユーザー名は Linux から Windows、またはその逆の Windows から Linux で一致させる必要がないことに注意してください。たとえば、Windows の以下 passwd ファイルでは、Windows のユーザ jeff を UID 1004 にマッピングしています。Linux での UID 1004 は phill という Linux ユーザーです。Windows はマッピングに Linux ユーザー名(この例では phill)ではなく、UID を使用します。
図 15: ユーザー名マッピング – jeff を UID 1004(phill)
3.2 AD 参加サーバー
1. AD に参加しているサーバーの場合、AD ドメイン(本例では example.com)を使用するには、NFS クライアントで ID マッピングソースを選択する必要があります。
図 16: Windows サーバーの NFS クライアント – AD ドメイン名
2. 次に、AD 組織単位(OU)のユーザー共通名(CN)属性を更新する必要があります。ADSI エディタを使用して、Windows ユーザーの「GIDNumber」と「UIDNumber」を、対応する Linux ユーザーの Linux UID と GID に一致させるように更新します。以下の手順に従ってください。
a. AD ドメインサーバーで、Windows の検索バーに「adsi」と入力して ADSI エディターを開きます。
図 17: ADSI エディター
b. ADSI エディターの「Users」サブツリーに移動し、ドメインから OU 内の該当ユーザーを選択します。該当ユーザーを右クリックして、「プロパティ」を選択します。
図 18: ADSI エディター – ユーザーの CN 変更
本例では、Windows ユーザー brian の CN 属性「gidNumber」と「uidNumber」を更新して、Linux ユーザー brian の UID 1013 と GID 1005 と一致させます。
c. uidNumber を 1013 に変更します。
図 19: ADSI エディター – uidNumber 属性の変更
d. gidNumber を 1005 に変更します。
図 20: ADSI エディター – gidNumber 属性の変更
3. Linux から Windows にマップするすべてのユーザーでこのプロセスを繰り返します。完了したら NFS クライアントを再起動します。NFSクライアントの再起動には、powershell コマンドの nfsadmin client stop
と nfsadmin client start
を使用します。NFS クライアントを再起動する前に、必ず Windows でファイルシステムをアンマウントしてください。
4. Linux にユーザー brian としてログインしてファイルを作成し、そのファイルの所有権と、グループメンバーシップ、権限を確認します。
図 21: Linux ファイル詳細
5. 最後に、example.com AD のドメインユーザー brian として Windows にログインしてファイルを確認します。Linux の所有権と、グループメンバーシップ、権限が Linux ユーザー brian のものと想定どおり一致していることが確認できます。
図 22: AD を使用したユーザ名マッピングの検証
3.3 AUTH_NONE:匿名認証
匿名認証を使用して、Linux ユーザーのユーザー ID とグループ ID を Windows クライアントにマップすることができます。
匿名認証は、ファイルシステムへの読み取り/書き込みアクセスを提供する一般的な方法です。ただし、ファイルへの書き込みアクセスを調停する厳密なメカニズムは提供されないことに注意してください。さらに、ユーザー/グループレベルで権限を設定することはできません。このため、匿名認証は推奨される方法ではありません。セキュリティが問題にならない状況でのみ検討してください。
匿名認証を設定するには、次のレジストリキーを追加し、再起動する必要があります。
New-ItemProperty HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default -Name AnonymousUID -Value <Linux_uid> -PropertyType "DWord"
New-ItemProperty HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default -Name AnonymousGID -Value <Linux_gid> -PropertyType "DWord"
レジストリキーを追加して再起動後、以下のように匿名オプション(-o anon
)を使用して Windows にファイルシステムをマウントできます。UID と GID には -2
が割り当てられていることに注意してください。これは、匿名アクセスが使用中であることを意味します。
図 23: 匿名認証
クリーンアップ
今後不要な課金が発生しないようにするため、本ソリューションで使用されているリソースを削除したい場合は、FSx for OpenZFS ユーザーガイドに従って、ファイルシステムをアンマウントし、FSx for OpenZFS ファイルシステムを削除してください。
まとめ
この記事では、Windows サーバの NFS クライアントを使用して FSx for OpenZFS ファイルシステムのデータにアクセスし、Linux と Windows クライアント間でデータが共有できるようにする方法について説明しました。ファイルシステムをマウントし、認証によって保護し、パフォーマンスを調整するプロセスを確認しました。
主なポイントは、Linux プラットフォームと Windows プラットフォームの両方で FSx for OpenZFS を使用して、共有ファイルストレージに NFS プロトコルを使用できる点です。
その利点として、クロスプラットフォームのデータアクセスや、セキュリティの強化、効果的なデータ管理などがあり、生産性が向上し、リソースを最適化できます。この戦略を採用することで、FSx for OpenZFS のパワーを活用するだけでなく、異なるオペレーティングシステム間のギャップを効果的に埋めることができます。
FSx for OpenZFS サービスをより深く理解するために、以下の「リファレンス」セクションを詳しく確認してください。
リファレンス
翻訳はプロフェッショナルサービス本部の葉山が担当しました。