FSx for Windows File Serverで「アクセスベースの列挙」(Access-based Enumeration: ABE) を利用する

地味(?)な機能かもしれませんが、オンプレミスのWindows Serverでは使われていることも結構多いのではないでしょうか。
2022.01.31

みなさん、こんにちは!
福岡オフィスの青柳です。

今回は、Amazon FSx for Windows File Serverで「アクセスベースの列挙」 (Access-based Enumeration: ABE) を利用する方法について調べてみました。

「アクセスベースの列挙」とは?

「アクセスベースの列挙」 (Access-based Enumeration: ABE) とは、Windows Server 2003 SP1以降で導入されたWindows Serverの標準機能であり、「共有フォルダー内の全フォルダーではなく、自分がアクセス可能なフォルダーのみを列挙して表示する」機能のことを指します。

・・・これだけだと何だかイメージが湧きませんね。

実例で説明したいと思います。

まず、Active Directoryで以下のようにグループが定義されていて、各ユーザーがドメイングループに所属しているとします。

グループ 所属するユーザー
G経理部 testuser01
G営業部 testuser02
G開発部 testuser03

ファイルサーバーの共有フォルダー配下に、以下のようなフォルダーを作成します。

フォルダー名 アクセス権限
経理部 G経理部:変更
Domain Admins:フルコントロール
営業部 G営業部:変更
Domain Admins:フルコントロール
開発部 G開発部:変更
Domain Admins:フルコントロール
全社共通 G経理部:変更
G営業部:変更
G開発部:変更
Domain Admins:フルコントロール

以上の条件下で、各ユーザーがファイルサーバーの共有フォルダーを参照します。

「アクセスベースの列挙」が有効になっていない共有フォルダーの場合、以下のように表示されます。

一方、「アクセスベースの列挙」が有効になっている共有フォルダーの場合、以下のように表示されます。

違いがお分かりになりましたか?

「アクセスベースの列挙」が有効になっていない時は、全てのユーザーから同じようにフォルダーの一覧が見えます。

「アクセスベースの列挙」を有効にすると、自分がアクセス権限を持たないフォルダーは一覧に表示されなくなり、アクセス権限を持つフォルダーのみが表示されるようになります。

このように、「アクセスベースの列挙」機能を使うことによって、以下のような効果を得ることができます。

  • 権限の無いフォルダーを見せないことで、ユーザーに余計な興味を持たせなくする
    (「機密データ」なんてフォルダーが一覧にあるのを見ると、人間は興味を持ってしまうものです)
  • 大量のフォルダーが存在する場合に、必要なフォルダーのみ絞って表示されるため、見易くなる

FSx for Windows File Serverで「アクセスベースの列挙」を設定する方法を調べてみた

Windows Serverにおいて「アクセスベースの列挙」を設定する方法を調べると、概ね以下の方法が見つかります。

  • (1) 「Access-based Enumeration tools」を使って設定する
  • (2) 「サーバーマネージャー」から「共有と記憶域の管理」画面で設定する
  • (3) 「サーバーマネージャー」から「ファイルサービスと記憶域サービス」画面で設定する
  • (4) PowerShellコマンド「Set-SmbShare」を使用する

(1)は、Windows Server 2003 (SP1) やWindows Server 2003 R2で使われていた方法で、当時はマイクロソフトのWebサイトからツールを入手して実行するのが公式な方法でした。
FSx for Windows File ServerはWindows Server 2016ベースのファイルサーバーですので、このツールは使用できません。
(そもそも既にマイクロソフトのWebサイトからの入手もできなくなっているようです)

(2)は、Windows Server 2008 / 2008 R2で使われていた方法です。
Windows Server 2012以降で「サーバーマネージャー」が大幅に変更になったため、Windows Server 2016ベースのFSx for Windows File Serverでは使用することができません。

(3)は、Windows Server 2012から最新のWindows Server 2022までサーバーマネージャーの仕様は大きく変わっていないので、使えそうですが、、、

FSx for Windows File ServerはWindows Serverベースで動作しているものの、AWSマネージドなサービスであるため、サーバーへ直接RDPなどで接続することができません。
したがって、サーバーマネージャーでFSxの管理を行うためには、他のWindowsサーバーの「サーバーマネージャー」から「サーバーの追加」でFSxを管理対象に追加する必要があると思われます。

実際にやってみました。

結果は、エラーが発生してFSxを管理対象サーバーとして追加することができませんでした。
Windowsファイアウォールを無効にしたり、VPCセキュリティグループで全通信を許可したりしてみましたが、結果は変わりませんでした。

推測ですが、FSx for Windows File Serverは、サーバーマネージャーなどによるリモート管理についても制限が掛けられているのではないかと思われます。

最後の(4)ですが、PowerShellにはWindowsファイル共有 (SMB) を管理するためのコマンドレット群が用意されています。

既存の共有フォルダーの設定を変更するコマンドレットSet-SmbShereMicrosoft公式リファレンスを確認すると、-FolderEnumerationModeというパラメーターについての説明があります。

Specifies which files and folders in the new SMB share will be visible to the users. The acceptable values for this parameter are:

  • AccessBased. SMB does not the display the files and folders for a share to a user unless that user has rights to access the files and folders. By default, access-based enumeration is disabled for new SMB shares.
  • Unrestricted. SMB displays files and folders to a user even when the user does not have permission to access those items.

つまり、このSet-SmbShereコマンドレットに-FolderEnumerationModeパラメーターを指定することで、「アクセスベースの列挙」を有効化したり無効化したりできる訳です。

FSxでは「Set-SmbShare」は使えない → 「Set-FSxSmbShare」を使えばいいじゃない

しかし、FSx for Windows File Serverに対してPowerShellを使ったリモート管理を行う場合、カスタマイズされたPowerShellコマンドレット群である「Amazon FSx CLI」のみが使用可能となっています。

PowerShell でのリモート管理のための Amazon FSx CLI の使用を開始する - Amazon FSx for Windows File Server

「Amazon FSx CLI」で共有フォルダーの設定を行うために用意されているのはSet-FSxSmbShareコマンドレットです。

このSet-FSxSmbShareコマンドレットの使用方法をヘルプ (Set-FSxSmbShare -?) で確認してみたところ、Set-SmbShareコマンドレットと同様に-FolderEnumerationModeパラメーターが用意されているようでした。

AWSドキュメントでは-FolderEnumerationModeパラメーターの使用方法についての記述を見つけることができませんでしたが、恐らくSet-SmbShareコマンドレットと同じだろうと想定して、試しに使ってみることにしました。

FSx for Windows File Serverで「アクセスベースの列挙」を有効にしてみる

「アクセスベースの列挙」の設定状態の確認

共有フォルダーの「アクセスベースの列挙」の設定を変更する前に、現在の設定がどのようになっているのか確認してみたいと思います。

設定状態の確認にはGet-FSxSmbShareコマンドレットが使えそうです。

まず、FSx for Windows File Serverファイルシステムの「Windows Remote PowerShellエンドポイント」へ接続してリモートPowerShellセッションを確立します。

PS> $endpoint = 'amznfsxXXXXXXXX.private.example.com'
PS> Enter-PSSession -ComputerName $endpoint -ConfigurationName FSxRemoteAdmin -SessionOption (New-PSSessionOption -UICulture en-US)
[amznfsxXXXXXXXX.private.example.com]: PS>

Get-FSxSmbShareコマンドレットを実行します。

[amznfsxXXXXXXXX.private.example.com]: PS> Get-FSxSmbShare

Name  ScopeName       Path     Description
----  ---------       ----     -----------
D$    AMZNFSXEALBVH1N D:\      Default Share
IPC$  *                        Remote IPC
share AMZNFSXEALBVH1N D:\share

FolderEnumerationModeの設定値が出力されません。

出力結果にSelect-Objectでフィルターを掛けてみましょう。

[amznfsxXXXXXXXX.private.example.com]: PS> Get-FSxSmbShare | Select-Object Name, Path, FolderEnumerationMode
Cannot validate argument on parameter 'Property'. The argument "Path" does not belong to the set "ModuleName,Namespace,OutputType,Count,HelpUri,Name,CommandType,ResolvedCommandName,DefaultPar
ameterSet,CmdletBinding,Parameters" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.
    + CategoryInfo          : InvalidData: (:) [Select-Object]、ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Select-Object

エラーになってしまいました。

実は、FSx for Windows File Serverに対してリモートPowerShellセッション接続を行う場合、限定されたFSx管理用のPowerShellコマンドレットしか使用できないのはもちろん、Select-Objectによるフィルター実行などにも制限が掛けられているのです。

詳細は、しばたが執筆した下記ブログ記事を参照してください。

結論を言うと、Get-FSxSmbShareコマンドレットでFolderEnumerationModeの設定値を出力するためには、Enter-PSSessionコマンドレットを使う方法ではなく、Invoke-Commandコマンドレットを使う方法を選択する必要があります。

以下のようにコマンドを実行します。

$cred = Get-Credential 'AWSFSxAdmin'  # FSx管理者ユーザーを指定
$params = @{
    ComputerName = 'amznfsxXXXXXXXX.private.example.com'  # Windows Remote PowerShellエンドポイントを指定
    Credential = $cred
    ConfigurationName = 'FSxRemoteAdmin'
    SessionOption = (New-PSSessionOption -UICulture 'en-US')
    ScriptBlock = {
        Get-FSxSmbShare
    }
}
Invoke-Command @params | Select-Object Name, Path, FolderEnumerationMode

「Windows PowerShell資格情報の要求」ダイアログがポップアップしますので、FSx管理者ユーザーのパスワードを入力します。

実行結果が以下のように表示されます。

Name  Path     FolderEnumerationMode
----  ----     ---------------------
D$    D:\                          1
IPC$                               1
share D:\share                     1

FolderEnumerationModeの値は以下を示しています。

  • 1: 「アクセスベースの列挙」は無効 (Unrestricted)
  • 0: 「アクセスベースの列挙」は有効 (AccessBased)

「アクセスベースの列挙」を有効に設定する

それでは、共有フォルダーの「アクセスベースの列挙」を有効に設定しましょう。

前述のSet-FSxSmbShareコマンドレットを使う訳ですが、ここではEnter-PSSessionコマンドレットを使う方法、Invoke-Commandコマンドレットを使う方法のいずれの方法も使えます。

ここではInvoke-Commandコマンドレットを使ってみます。

$cred = Get-Credential 'AWSFSxAdmin'  # FSx管理者ユーザーを指定
$params = @{
    ComputerName = 'amznfsxXXXXXXXX.private.example.com'  # Windows Remote PowerShellエンドポイントを指定
    Credential = $cred
    ConfigurationName = 'FSxRemoteAdmin'
    SessionOption = (New-PSSessionOption -UICulture 'en-US')
    ScriptBlock = {
        Set-FSxSmbShare -Name 'share' -FolderEnumerationMode AccessBased
    }
}
Invoke-Command @params

本当に変更してもよいか確認を求められます。

Confirm
Are you sure you want to perform this action?
Performing operation 'Modify' on Target 'AMZNFSXxxxxxxxx,share'.
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [?] ヘルプ (既定値は "Y"):

「Y」で応答すると、設定が実行されます。

設定を変更した後は、さきほどと同じ方法でGet-FSxSmbShareコマンドレットを実行して、「アクセスベースの列挙」の設定状態を確認します。

Name  Path     FolderEnumerationMode
----  ----     ---------------------
D$    D:\                          1
IPC$                               1
share D:\share                     0

共有フォルダー「share」の「アクセスベースの列挙」が有効 (0) に設定されたことが確認できました。

これで、ユーザーが共有フォルダー「share」を開いた際に、アクセス権限を持つフォルダーのみが表示されるようになります。

その他の設定手順

既に存在する共有フォルダーの「アクセスベースの列挙」の設定を変更する場合はSet-FSxSmbShareコマンドレットを使用しましたが、新規に共有フォルダーを作成する際に「アクセスベースの列挙」を有効に設定することもできます。

New-FSxSmbShareコマンドレットの実行時に-FolderEnumerationModeパラメーターを指定します。

PS> New-FSxSmbShare -Name 'ShareTest' -Path 'D:\ShareTest' -FullAccess 'Everyone' -FolderEnumerationMode AccessBased

なお、New-FSxSmbShareコマンドレットを使用して共有フォルダーを作成する際は、-Pathパラメーターで指定するフォルダーを事前に作成しておく必要があることに注意してください。 (管理共有「d$」などを通して作成することになります)

また、共有フォルダーの「アクセスベースの列挙」を無効にするには、以下のように-FolderEnumerationMode Unrestrictedを指定します。

PS> Set-FSxSmbShare -Name 'share' -FolderEnumerationMode Unrestricted

おわりに

コマンドベースでの設定方法にはなりますが、FSx for Windows File Serverでも「アクセスベースの列挙」が利用できることが分かりました。

オンプレミスのWindows Serverファイルサーバーで「アクセスベースの列挙」を利用していて、FSx for Windows File Serverへ移行しても「アクセスベースの列挙」は利用できるのだろうか? 設定はどのようにすればいいのだろうか? と疑問に思っていた方は、参考にしてみてください。