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

AWS

2023.12.4

Topics

はじめに

ご覧頂きありがとうございます。
この記事はNHN テコラスAdvent Calendar 2023の4日目の記事です。
今回はFSx for Windows File Server(以降FSx)へ移行する際に必要な作業であるアクセス許可設定について検証しました。何を検証したかと言いますと、移行元にある共有フォルダのアクセス許可設定を一括でFSxに移行させてみました。
これからFSxに移行することを検討されている方の参考になれば嬉しいです。

想定読者

  • ファイルサーバーからFSxへの移行を検討している方
  • FSxへ移行元のSMB設定を一括で移行したい

FSxへ移行するとは

FSx上に共有フォルダを新規作成させ、そこにフォルダやファイルを設置するのは移行ではなく新規構築です。

FSx切替前構成図

ここでいう移行とは、例えばWindowsサーバー上で利用中の共有フォルダが既にあり、それと同じものをFSx上に用意し、アクセス先を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個ずつ、共有のアクセス許可設定にユーザやグループの権限を追加する必要があります。

fsx_新規共有フォルダ作成

fsx_新規共有フォルダ作成7

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

SMB設定ファイル

エクスポートファイルを編集

ここが一番ハマりやすいので注意してください。
エクスポートしたファイルを開いてみると分かりますが、共有フォルダ名、実フォルダ名、パスなどの情報があります。この作業で大事なポイントはエクスポートした設定ファイルからインポートすることです。
つまり、エクスポート設定ファイルに記載されているフォルダ名が、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 = (&quot;ContinuouslyAvailable&quot;, &quot;Description&quot;, &quot;ConcurrentUserLimit&quot;, &quot;CATimeout&quot;, &quot;FolderEnumerationMode&quot;, &quot;CachingMode&quot;, &quot;FullAccess&quot;, &quot;ChangeAccess&quot;, &quot;ReadAccess&quot;, &quot;NoAccess&quot;, &quot;SecurityDescriptor&quot;, &quot;Path&quot;, &quot;Name&quot;, &quot;EncryptData&quot;)
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_インポート2

無事にFSx側も共有化されたようです。

移行元の共有アクセス許可設定

file_corp

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

fsx_corp

上手く設定もインポートされています。

最後に

最後まで読んで頂き、ありがとうございます。
規模が大きい程、共有フォルダの数もユーザグループやユーザ数も多く、複雑な環境になりがちです。それらを手作業で行うには限界があります。良い意味で手を抜いたスマートな作業を心がけたいですね。
FSxはマネージドサービスゆえ独特なクセがありますが、いつか誰かがFSx移行する際に今回の記事がお役に立てれば幸いです。

がっしー

いらっしゃいませ!2015年中途入社の"がっしー"と申します。 ド素人同然で入社し、毎日が四苦八苦。 AWSサービスを始めて触った時は、ポチポチするだけで簡単にサーバが立って素直にすごーって感動したのは今でも覚えてます。今はIaCも勉強中。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら