Amazon FSx for Windows File Serverへいこう! SMBインポート編
はじめに
ご覧頂きありがとうございます。
この記事はNHN テコラスAdvent Calendar 2023の4日目の記事です。
今回はFSx for Windows File Server(以降FSx)へ移行する際に必要な作業であるアクセス許可設定について検証しました。何を検証したかと言いますと、移行元にある共有フォルダのアクセス許可設定を一括でFSxに移行させてみました。
これからFSxに移行することを検討されている方の参考になれば嬉しいです。
想定読者
- ファイルサーバーからFSxへの移行を検討している方
- FSxへ移行元のSMB設定を一括で移行したい
FSxへ移行するとは
FSx上に共有フォルダを新規作成させ、そこにフォルダやファイルを設置するのは移行ではなく新規構築です。

ここでいう移行とは、例えばWindowsサーバー上で利用中の共有フォルダが既にあり、それと同じものをFSx上に用意し、アクセス先をFSxへ切り替えることができて移行と考えます。

その為には移行元のフォルダやファイルデータを移行するだけでは不十分で、共有フォルダ設定や読み取り、書き込み許可などアクセス許可設定も調整する必要がありますし、隠しフォルダも見落としがちです。
これらを移行元と「同じ」環境にすることで移行が成立します。
さらにFSxのエイリアス名を移行元のエイリアスにすることで、共有フォルダへアクセスする「パス」を完全に同じにすることも可能です。
こちらについては前回の記事でご紹介していますので、よければ覗いてみてください。Amazon FSx for Windows File Serverへいこう!クライアントは気づかないレベル?!
NTFSとSMB
フォルダやファイルのアクセス許可設定は基本的に「NTFS」と「SMB」の2つあります。
詳しい説明は省きますが、「NTFS」はファイル管理システムで、「SMB」は共有フォルダなどネットワーク通信上で利用しているプロトコルです。
共有フォルダへアクセスする為には、少なくとも「NTFS」と「SMB」両方の読み取り許可がないとアクセスできません。
つまり移行する為には全共有フォルダの「SMB」と「NTFS」、共有フォルダ配下にあるフォルダ、ファイルの「NTFS」の設定をする必要があります。

ナニソレ!という方は、共有フォルダを右クリックしてプロパティを確認してみてください。上記は「共有のアクセス許可」のみですが、「セキュリティ」タブを選択すると同じようにグループやユーザが確認できると思います。
NTFS
NTFSのアクセス許可設定の移行は簡単です。
Windowsで利用できるRobocopyコマンドを今回は利用します。
Robocopyのオプションを指定することで、NTFSやオーナーなどの情報もまとめてFSxへコピーできます。
今回Robocopyはメインではないので詳細な使い方は割愛します。
SMB
本題のSMBです。このSMBを設定するには大きく2つあります。
1つ目
フォルダ管理からFSxに接続を切替、共有フォルダの新規作成または指定の共有フォルダから共有のアクセス許可設定にて設定する方法です。
GUI上で操作しますので、感覚的に作業ができる代わりに手作業となります。
共有フォルダ1個ずつ、共有のアクセス許可設定にユーザやグループの権限を追加する必要があります。


2つ目
移行元のSMB設定をエクスポートし、FSxへエクスポートしたファイルをインポートする方法です。

PowerShellを使ったコマンドによる作業です。基本的同じコマンドを使いまわせますが、環境によってはコマンド修正が必要となります。
コマンド操作に慣れてない方には少し抵抗があるかもしれませんが、一括で確実な設定ができます。
1つ目と比べて正確かつスピーディーにできます。
準備
- FSx作成
\\FSxのDNS名\d$\配下に移行元と同じフォルダ名を用意(中身は空でよい)します- 共有フォルダ化していないこと
- Robocopyにてデータ及びオプション指定にてNTFS設定までコピーします
- 任意のタイミングでOK
FSxには移行元と同じフォルダが存在しており、共有化前の状態です。
エクスポート
移行元サーバーへRDPなどで接続します。
下記1-1~1-4を参考にエクスポートしたい共有フォルダを指定します。
1-1. 全ドライブを対象
$shareFolder = Get-SmbShare -Special $false | ? { $_.Path -like "*:\*" }
1-2. Gドライブのみを指定
$shareFolder = Get-SmbShare -Special $false | Where-Object -FilterScript { $_.Path -like "G:\*" }
▼ 実行例
PS C:\Windows\system32> Get-SmbShare -Special $false | Where-Object -FilterScript { $_.Path -like "G:\*" }
Name ScopeName Path Description
---- --------- ---- -----------
corp * G:\corp
PS C:\Windows\system32>
1-3. 任意の名前を除外
$shareFolder = Get-SmbShare -Special $false | Where-Object -FilterScript {($_.name -ne "除外したい文字列")}
▼ 実行例「チーム」フォルダを除外
PS C:\Windows\system32> Get-SmbShare -Special $false | Where-Object -FilterScript {($_.name -ne "チーム")}
Name ScopeName Path Description
---- --------- ---- -----------
corp * G:\corp
P部署 * P:\P部署
エンジ * G:\corp\エンジ
本部 * P:\本部
PS C:\Windows\system32>
▼ 実行例「チーム」と「エンジ」フォルダを除外
PS C:\Windows\system32> Get-SmbShare -Special $false | Where-Object -FilterScript {($_.name -ne "チーム") -and ($_.name -ne "エンジ")}
Name ScopeName Path Description
---- --------- ---- -----------
corp * G:\corp
P部署 * P:\P部署
本部 * P:\本部
PS C:\Windows\system32>
1-4. 任意の名前のみ抽出
$shareFolder = Get-SmbShare -Special $false | Where-Object -FilterScript {($_.name -eq "抽出したい文字列") -or ($_.name -eq "抽出したい文字列")}
▼ 実行例「チーム」と「エンジ」のみを抽出
PS C:\Windows\system32> Get-SmbShare -Special $false | Where-Object -FilterScript {($_.name -eq "チーム") -or ($_.name -eq "エンジ")}
Name ScopeName Path Description
---- --------- ---- -----------
エンジ * G:\corp\エンジ
チーム * P:\チーム
PS C:\Windows\system32>
2. 1-1~1-4いずれか実施した結果をエクスポート $shareFolder | Export-Clixml -Path <保存先パス>\SmbShares.xml

エクスポートファイルを編集
ここが一番ハマりやすいので注意してください。
エクスポートしたファイルを開いてみると分かりますが、共有フォルダ名、実フォルダ名、パスなどの情報があります。この作業で大事なポイントはエクスポートした設定ファイルからインポートすることです。
つまり、エクスポート設定ファイルに記載されているフォルダ名が、FSx上のd$配下にあるフォルダ名と一致しないと、エラーになります。同様にフォルダへの「パス」も合致していないとエラーとなります。
※ 注意すべきはFSxの仕様として、FSx上で共有フォルダを作成できるのはDドライブ上のみとなります。
(例) ■ 移行元 G:\共有フォルダA ■ FSx D:\共有フォルダA
上記のような場合は、エクスポート設定ファイルのパスを「G:\」→「D:\」へ変更しないとダメです。
お手元のテキストエディタ等で編集します。

インポート
後はインポートするだけです。
$shares = Import-Clixml -Path <パス>\SmbShares.xml
$credential = Get-Credential

Get-Credentialのユーザは、FSx操作可能なユーザを入力してください。
$usSession = New-PSSessionOption -Culture en-US -UICulture en-US
$FSxAcceptedParameters = ("ContinuouslyAvailable", "Description", "ConcurrentUserLimit", "CATimeout", "FolderEnumerationMode", "CachingMode", "FullAccess", "ChangeAccess", "ReadAccess", "NoAccess", "SecurityDescriptor", "Path", "Name", "EncryptData")
ForEach ($item in $shares) {
$param = @{};
Foreach ($property in $item.psObject.properties) {
if ($property.Name -In $FSxAcceptedParameters) {
$param[$property.Name] = $property.Value
}
}
Invoke-Command -ConfigurationName FSxRemoteAdmin -ComputerName <FSx PowerShell用エンドポイント> -ErrorVariable errmsg -SessionOption $usSession -ScriptBlock { New-FSxSmbShare -Credential $Using:credential @Using:param }
}
実行例
PS C:\Windows\system32 $usSession = New-PSSessionOption -Culture en-US -UICulture en-US
PS C:\Windows\system32 $FSxAcceptedParameters = ("ContinuouslyAvailable", "Description", "ConcurrentUserLimit", "CATimeout", "FolderEnumerationMode", "CachingMode", "FullAccess", "ChangeAccess", "ReadAccess", "NoAccess", "SecurityDescriptor", "Path", "Name", "EncryptData")
PS C:\Windows\system32 ForEach ($item in $shares) {
> $param = @{};
> Foreach ($property in $item.psObject.properties) {
> if ($property.Name -In $FSxAcceptedParameters) {
> $param[$property.Name] = $property.Value
> }
> }
> Invoke-Command -ConfigurationName FSxRemoteAdmin -ComputerName amznfsxwtx83xed.test.local.domain -ErrorVariable errmsg -SessionOption $usSession -ScriptBlock { New-FSxSmbShare -Credential $Using:credential @Using:param }
> }
Name ScopeName Path Description PSComputerName
---- --------- ---- ----------- --------------
corp AMZNFSXUHXORF5G D:\corp amznfsxwtx83xed.test.local.domain
P部署 AMZNFSXUHXORF5G D:\P部署 amznfsxwtx83xed.test.local.domain
チ... AMZNFSXUHXORF5G D:\チ... amznfsxwtx83xed.test.local.domain
本部 AMZNFSXUHXORF5G D:\本部 amznfsxwtx83xed.test.local.domain
完了です!

無事にFSx側も共有化されたようです。
移行元の共有アクセス許可設定

FSxの共有アクセス許可設定

上手く設定もインポートされています。
最後に
最後まで読んで頂き、ありがとうございます。
規模が大きい程、共有フォルダの数もユーザグループやユーザ数も多く、複雑な環境になりがちです。それらを手作業で行うには限界があります。良い意味で手を抜いたスマートな作業を心がけたいですね。
FSxはマネージドサービスゆえ独特なクセがありますが、いつか誰かがFSx移行する際に今回の記事がお役に立てれば幸いです。
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitterいらっしゃいませ!2015年中途入社の"がっしー"と申します。 ド素人同然で入社し、毎日が四苦八苦。 AWSサービスを始めて触った時は、ポチポチするだけで簡単にサーバが立って素直にすごーって感動したのは今でも覚えてます。今はIaCも勉強中。
Recommends
こちらもおすすめ
-
【Amazon Route53】AWS CLIで特定文字列レコードを抽出してみた
2023.12.5
-
初心者向け!AWS Trusted Advisorの概要
2023.12.19
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28

AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16
