[Amazon FSx for NetApp ONTAP] ADのドメインに参加せずにSMBでファイル共有に接続してみる

サクッと検証したい時はワークグループのCIFSサーバーを用意してみよう
2022.10.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AD DS用意するの面倒だな

こんにちは、のんピ(@non____97)です。

皆さんはAmazon FSx for NetApp ONTAP(以降FSx for ONTAP)にSMBで接続する検証のためにAD DSを用意するのが面倒だなとなと思ったことはありますか? 私はあります。

FSx for ONTAPのSVMをドメイン参加させることで、同じドメインに参加するSMBクライアントの認証・認可をすることができます。

Amazon FSx でストレージ仮想マシン (SVM) を作成する場合、オプションでアクティブディレクトリドメインに参加して、ユーザー認証、ファイルおよびフォルダレベルのアクセスコントロールを提供できます。お使いの SMB クライアントは、アクティブディレクトリ内の既存のユーザー ID を使用して自分自身を認証し、SVM のボリュームにアクセスできます。ユーザーは、既存の ID を使用して、個々のファイルやフォルダへのアクセスをコントロールすることもできます。さらに、既存のファイルおよびフォルダ、およびこれらのアイテムのセキュリティアクセスコントロールリスト (ACL) の設定を Amazon FSx に変更されることなく移行できます。

FSx for ONTAP で Microsoft アクティブディレクトリの使用 - FSx for ONTAP

しかし、SMBを使った接続を少し検証をするめにAD DSを設定するのは非常に手間です。実際の方法は以下記事やAWS公式ドキュメントに記載があります。

「これは面倒だ」

と思われた方に朗報です。実はADのドメインに参加しなくてもワークグループに参加させることも可能なんです。

NetAppのKnowledge Baseにも以下のように記載されています。

  • ワークグループモードは、 Windows の標準機能で、 Active Directory ドメインなしでワークステーションを操作できます。これにより、 DC を介さずにデータを認証および提供できます
  • 旧バージョンの Data ONTAP ではワークグループモードのサポートは提供されていませんが、 ONTAP 9.0 以降ではサポートが追加されています
  • この機能は、次のような状況で重要です。
    • お客様が Microsoft ドメインインフラストラクチャを必要としない場合
    • お客様が規制ポリシーによって Microsoft ドメインを使用できない場合

ONTAP では、ワークグループモードは CIFS/SMB でサポートされていますか。 - NetApp

ONTAPのコマンドリファレンスにも、以下のようにワークグループに参加できると記載がありますね。

The vserver cifs create command creates a CIFS server on a Vserver. When you create the CIFS server, you can add it to an existing CIFS domain, or you can join it to a workgroup. When you add it to an existing CIFS domain, the storage system prompts you to provide the credentials of a user account that has sufficient privileges to add computers to the -ou container within the -domain domain. The user account must have a password that cannot be empty. If the new CIFS server is joining a domain, this command might take several minutes to complete.

vserver cifs create

実際に試してみたので紹介します。

いきなりまとめ

  • 簡単にワークグループのCIFSサーバーを構築できる
  • ただし、本番環境のCIFSサーバーではドメイン参加することをオススメ
    • ローカルユーザーは基本的に移行できないので、ワークグループのCIFSサーバーだと移行時に苦労する

検証環境

検証環境は以下の通りです。

fsx-for-ontap-windows-client

FSx for ONTAPでワークグループのCIFSサーバーとCIFSファイル共有を作成して、Windows ServerのEC2インスタンスからSMBで接続します。

検証環境はAWS CDKでデプロイします。使用したコードは以下リポジトリに保存しています。

CIFSサーバーの設定

それでは、ワークグループに参加するCIFSサーバーをSVM内に用意します。

まず、SVM内にCIFSサーバーがあるか確認します。

# FSx for ONTAPファイルシステムにSSHで接続
> ssh fsxadmin@management.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com
The authenticity of host 'management.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com (10.0.1.42)' can't be established.
ECDSA key fingerprint is SHA256:496yfT9r4Nz5qg/NKwPs7Dh7zINNBRc+xcSUw1oWl6o.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'management.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com,10.0.1.42' (ECDSA) to the list of known hosts.
Password:

This is your first recorded login.

# CIFSサーバーの確認
FsxId0ad183f269f00ec0f::> vserver cifs show
This table is currently empty.

CIFSサーバーは存在していないようですね。

それではワークグループに参加するCIFSサーバーを作成します。

# CIFSサーバーの作成
FsxId0ad183f269f00ec0f::> vserver cifs create -vserver fsx-for-ontap-svm -cifs-server cifs-server -workgroup fsxn-workgroup

Notice: SMB1 protocol version is obsolete and considered insecure. Therefore it is deprecated and disabled on this CIFS server. Support for SMB1
might be removed in a future release. If required, use the (privilege: advanced) "vserver cifs options modify -vserver fsx-for-ontap-svm
-smb1-enabled true" to enable it.

# 作成したCIFSサーバーの確認
FsxId0ad183f269f00ec0f::> vserver cifs show
            Server          Status    Domain/Workgroup Authentication
Vserver     Name            Admin     Name             Style
----------- --------------- --------- ---------------- --------------
fsx-for-ontap-svm
            CIFS-SERVER     up        FSXN-WORKGROUP   workgroup

# 作成したCIFSサーバーの詳細確認
FsxId0ad183f269f00ec0f::> vserver cifs show -instance

                                          Vserver: fsx-for-ontap-svm
                         CIFS Server NetBIOS Name: CIFS-SERVER
                    NetBIOS Domain/Workgroup Name: FSXN-WORKGROUP
                      Fully Qualified Domain Name: -
                              Organizational Unit: -
Default Site Used by LIFs Without Site Membership: -
                                   Workgroup Name: FSXN-WORKGROUP
                             Authentication Style: workgroup
                CIFS Server Administrative Status: up
                          CIFS Server Description:
                          List of NetBIOS Aliases: -

FSXN-WORKGROUPというワークグループに参加するCIFSサーバーを作成できました。

なお、CIFSサーバーはSVMに一つしか作成できません。既にCIFSサーバーがある場合は注意しましょう。

Each Vserver can have only one CIFS server.

vserver cifs create

その場合は、vserver cifs deleteでCIFSサーバーを削除して作り直すか、vserver cifs modifyでワークグループを指定する必要がありそうです。

CIFSユーザーの作成

次にSMBで接続するときの認証で使うCIFSユーザーを作成します。

# CIFSユーザーの作成
FsxId0ad183f269f00ec0f::> vserver cifs users-and-groups local-user create -vserver fsx-for-ontap-svm -user-name cifs-user -is-account-disabled false

Enter the password:
Confirm the password:

# 作成したCIFSユーザーの確認
FsxId0ad183f269f00ec0f::> vserver cifs users-and-groups local-user show -instance

                                   Vserver: fsx-for-ontap-svm
                                 User Name: CIFS-SERVER\Administrator
                                 Full Name:
                               Description: Built-in administrator account
                       Is Account Disabled: true

                                   Vserver: fsx-for-ontap-svm
                                 User Name: CIFS-SERVER\cifs-user
                                 Full Name: -
                               Description: -
                       Is Account Disabled: false
2 entries were displayed.

CIFSファイル共有の作成

次にCIFSファイル共有の作成をします。

CIFSファイル共有名には以下のような命名規約があります。注意しましょう。

  • ONTAP の共有の命名規則は Windows の命名規則と同じであり、次の要件が含まれています。
  • 共有名は SMB サーバでそれぞれ一意にする必要があります。
  • 共有名では大文字と小文字は区別されません。
  • 共有名の最大長は 80 文字です。
  • 共有名では Unicode がサポートされます。
  • $ 記号で終わる共有名は非表示の共有です。
  • 管理用共有の ADMIN$ 、 IPC$ 、 c$ は、すべての CIFS サーバで自動的に作成されます。これらの共有名は予約されています。
  • 共有の作成時に ONTAP_ADMIN$ という共有名は使用できません。
  • 共有名ではスペースの使用がサポートされます。
    • 共有名の先頭または末尾の文字をスペースにすることはできません。
    • スペースを含む共有名は引用符で囲む必要があります。
    • 単一引用符は共有名の一部とみなされ、引用符の代わりに使用することはできません。
  • SMB 共有の名前では次の特殊文字の使用がサポートされます。
    • !@ #$%&'__ 。~ () { }
  • SMB 共有の名前では次の特殊文字の使用はサポートされません。
    • "//\:;| 、?* =

SMB 共有の命名要件

# ボリュームの確認
FsxId0ad183f269f00ec0f::> volume show
Vserver   Volume       Aggregate    State      Type       Size  Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
fsx-for-ontap-svm
          fsx_for_ontap_svm_root
                       aggr1        online     RW          1GB    972.5MB    0%
fsx-for-ontap-svm
          fsx_for_ontap_volume
                       aggr1        online     RW        100GB    95.00GB    0%
2 entries were displayed.

# ボリュームのジャンクションパスの確認
FsxId0ad183f269f00ec0f::> volume show -fields junction-path
vserver           volume                 junction-path
----------------- ---------------------- -------------
fsx-for-ontap-svm fsx_for_ontap_svm_root /
fsx-for-ontap-svm fsx_for_ontap_volume   /volume

# CIFSファイル共有の作成
FsxId0ad183f269f00ec0f::> vserver cifs share create -vserver fsx-for-ontap-svm -share-name cifs-share -path /volume

# CIFSファイル共有の一覧
FsxId0ad183f269f00ec0f::> vserver cifs share show -vserver fsx-for-ontap-svm
Vserver        Share         Path              Properties Comment  ACL
-------------- ------------- ----------------- ---------- -------- -----------
fsx-for-ontap-svm                              oplocks             BUILTIN\Administrators / Full Control
               c$            /                 browsable  -
                                               changenotify
                                               show-previous-versions
fsx-for-ontap-svm                              oplocks             Everyone / Full Control
               cifs-share    /volume           browsable  -
                                               changenotify
                                               show-previous-versions
fsx-for-ontap-svm                              browsable
               ipc$          /                            -        -
3 entries were displayed.

# 作成したCIFSファイル共有の詳細確認
FsxId0ad183f269f00ec0f::> vserver cifs share show -vserver fsx-for-ontap-svm -share-name cifs-share -instance

                                      Vserver: fsx-for-ontap-svm
                                        Share: cifs-share
                     CIFS Server NetBIOS Name: CIFS-SERVER
                                         Path: /volume
                             Share Properties: oplocks
                                               browsable
                                               changenotify
                                               show-previous-versions
                           Symlink Properties: symlinks
                      File Mode Creation Mask: -
                 Directory Mode Creation Mask: -
                                Share Comment: -
                                    Share ACL: Everyone / Full Control
                File Attribute Cache Lifetime: -
                                  Volume Name: fsx_for_ontap_volume
                                Offline Files: manual
                Vscan File-Operations Profile: standard
            Maximum Tree Connections on Share: 4294967295
                   UNIX Group for File Create: -

CIFSファイル共有が作成できました。

作成したCIFSファイル共有に接続してみます。

# SMBのクライアントのワークグループを確認
> Get-WMIObject Win32_ComputerSystem


Domain              : WORKGROUP
Manufacturer        : Amazon EC2
Model               : t3.micro
Name                : EC2AMAZ-ER02D6H
PrimaryOwnerName    : EC2
TotalPhysicalMemory : 1043886080

# 現在のドライブ一覧の確認
> Get-PSDrive

Name           Used (GB)     Free (GB) Provider      Root                                                                          CurrentLocation
----           ---------     --------- --------      ----                                                                          ---------------
Alias                                  Alias
C                  13.35         16.65 FileSystem    C:\                                                                          Windows\system32
Cert                                   Certificate   \
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan


# CIFSユーザーの認証情報を使ってSMBでZドライブにボリュームをマウント
> net use Z: \\svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com\cifs-share
The password is invalid for \\svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com\cifs-share.

Enter the user name for 'svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com': CIFS-SERVER\cifs-user
Enter the password for svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com:
The command completed successfully.


# Zドライブにマウントされているか確認
> Get-PSDrive

Name           Used (GB)     Free (GB) Provider      Root                                                                          CurrentLocation
----           ---------     --------- --------      ----                                                                          ---------------
Alias                                  Alias
C                  13.35         16.65 FileSystem    C:\                                                                          Windows\system32
Cert                                   Certificate   \
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan
Z                   0.00         95.00 FileSystem    \\svm-06f51f2e59a98b1f0.fs-0ad18...

無事マウントできました。ADの環境を用意するより遥かに簡単ですね。

また、クライアントとCIFSサーバーのワークグループ名が違っても認証するユーザーの認証情報を正しく入力すれば、接続できるようです。

おまけに、フォルダの作成やファイルの作成/削除ができることを確認しておきます。

# フォルダの作成
> New-Item Z:\non-97 -type directory


    Directory: Z:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         10/8/2022   2:45 AM                non-97

# 100MBのランダムなバイナリファイルを作成
> $random_bin = new-object byte[] (1024 * 1024 * 100);
> (new-object Random).NextBytes($random_bin)
> [IO.File]::WriteAllBytes("Z:\non-97\binary_file", $random_bin)

# ファイルが作成されたことを確認
> ls Z:\non-97\


    Directory: Z:\non-97


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         10/8/2022   2:50 AM      104857600 binary_file

# ファイルを削除
> rm Z:\non-97\binary_file

# ファイルが削除されたことを確認
> ls Z:\non-97\

アクセスコントロールの設定

作成したCIFSファイル共有のアクセスコントロールを確認してみましょう。

# CIFSファイル共有のアクセス制限の確認
FsxId0ad183f269f00ec0f::> vserver cifs share access-control show -vserver fsx-for-ontap-svm
               Share       User/Group                  User/Group  Access
Vserver        Name        Name                        Type        Permission
-------------- ----------- --------------------------- ----------- -----------
fsx-for-ontap-svm
               c$          BUILTIN\Administrators      windows     Full_Control
fsx-for-ontap-svm
               cifs-share  Everyone                    windows     Full_Control
2 entries were displayed.

# 作成したCIFSファイル共有のアクセス制限の詳細確認
FsxId0ad183f269f00ec0f::> vserver cifs share access-control show -vserver fsx-for-ontap-svm -share cifs-share -instance

           Vserver: fsx-for-ontap-svm
        Share Name: cifs-share
   User/Group Name: Everyone
User or Group Type: windows
       Access Type: Full_Control
       Windows SID: S-1-1-0
       Access mask: 1f01ff

CIFSファイル共有にアクセスできるのがEveryoneFull_Controlとなっています。そのため、どんなCIFSユーザーでも接続できてあらゆる操作を行うことが可能です。

試しに、特定のCIFSユーザーのみ読み取りできるように設定変更してみます。

# CIFSファイル共有に cifs-user が読み取りできるようなアクセスコントロールを追加
FsxId0ad183f269f00ec0f::> vserver cifs share access-control create -share cifs-share -user-or-group cifs-user -user-group-type windows -permiss
ion Read

# CIFSファイル共有に Everyone のアクセスコントロールを削除
FsxId0ad183f269f00ec0f::> vserver cifs share access-control delete -share cifs-share -user-or-group Everyone

# CIFSファイル共有に cifs-user が読み取りできるようなアクセスコントロールが追加されたことを確認
# CIFSファイル共有に Everyone のアクセスコントロールが削除されたことを確認
FsxId0ad183f269f00ec0f::> vserver cifs share access-control show -vserver fsx-for-ontap-svm -share cifs-share -instance

           Vserver: fsx-for-ontap-svm
        Share Name: cifs-share
   User/Group Name: cifs-user
User or Group Type: windows
       Access Type: Read
       Windows SID: S-1-5-21-2424970675-3159713313-1452867103-1000
       Access mask: 1200a9

# 比較用のCIFSユーザーの作成
FsxId0ad183f269f00ec0f::> vserver cifs users-and-groups local-user create -vserver fsx-for-ontap-svm -user-name cifs-user02 -is-account-disabled false

Enter the password:
Confirm the password:

# 比較用CIFSユーザーが作成されたことを確認
FsxId0ad183f269f00ec0f::> vserver cifs users-and-groups local-user show -instance

                                   Vserver: fsx-for-ontap-svm
                                 User Name: CIFS-SERVER\Administrator
                                 Full Name:
                               Description: Built-in administrator account
                       Is Account Disabled: true

                                   Vserver: fsx-for-ontap-svm
                                 User Name: CIFS-SERVER\cifs-user
                                 Full Name: -
                               Description: -
                       Is Account Disabled: false

                                   Vserver: fsx-for-ontap-svm
                                 User Name: CIFS-SERVER\cifs-user02
                                 Full Name: -
                               Description: -
                       Is Account Disabled: false
3 entries were displayed.

アクセスコントロールの設定が完了したので、意図した挙動をするのか確かめてみます。

# 現在のドライブ一覧
> Get-PSDrive

Name           Used (GB)     Free (GB) Provider      Root                                                                          CurrentLocation
----           ---------     --------- --------      ----                                                                          ---------------
Alias                                  Alias
C                  13.37         16.63 FileSystem    C:\                                                                          Windows\system32
Cert                                   Certificate   \
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan


# cifs-user02 はマウントできないことを確認
> net use Z: \\svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com\cifs-share
The password is invalid for \\svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com\cifs-share.

Enter the user name for 'svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com': CIFS-SERVER\cifs-user02
Enter the password for svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com:
System error 5 has occurred.

Access is denied.

# cifs-user はマウントできることを確認
> net use Z: \\svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com\cifs-share
The password is invalid for \\svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com\cifs-share.

Enter the user name for 'svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com': CIFS-SERVER\cifs-user
Enter the password for svm-06f51f2e59a98b1f0.fs-0ad183f269f00ec0f.fsx.us-east-1.amazonaws.com:
The command completed successfully.

# Zドライブにマウントされているか確認
> Get-PSDrive

Name           Used (GB)     Free (GB) Provider      Root                                                                          CurrentLocation
----           ---------     --------- --------      ----                                                                          ---------------
Alias                                  Alias
C                  13.37         16.63 FileSystem    C:\                                                                          Windows\system32
Cert                                   Certificate   \
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan
Z                   0.00         95.00 FileSystem    \\svm-06f51f2e59a98b1f0.fs-0ad18...


# フォルダ配下を参照できるか確認
> ls Z:\non-97\

# 書き込みができないことを確認
> echo test > Z:\non-97\test
out-file : Access to the path 'Z:\non-97\test' is denied.
At line:1 char:1
+ echo test > Z:\non-97\test
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (:) [Out-File], UnauthorizedAccessException
    + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand

# フォルダを削除できないことを確認
> rmdir Z:\non-97
rmdir : Cannot remove item Z:\non-97: Access to the path 'Z:\non-97' is denied.
At line:1 char:1
+ rmdir Z:\non-97
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (Z:\non-97:DirectoryInfo) [Remove-Item], IOException
    + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand

アクセスコントロールの設定通り、cifs-userのみ読み取りでき、他のユーザーは接続できないことを確認できました。

サクッと検証したい時はワークグループのCIFSサーバーを用意してみよう

ADのドメインに参加せずにAmazon FSx for NetApp ONTAPにSMBでファイル共有に接続してみました。

ワークグループのCIFSサーバーを用意することで、非常に手早くSMBで接続できることを確認できました。サクッと検証したい時はかなり有用だと思います。

AD DSの環境を用意する必要も、サービスアカウントの準備も不要なので、「げぇっ AD」となった方もトライしてみてはいかがでしょうか。

2024/2/15 追記

なお、本番利用でワークグループのCIFSサーバーを使うのは控えましょう。理由は移行をした際にアクセスできなくなる可能性があるためです。

ワークグループのCIFSサーバーの認証で使用するローカルユーザやローカルグループは基本的に移行することが出来ません。

ローカルユーザーやローカルグループはSVM内で固有の情報です。そのため、SnapMirrorやDataSyncでACLの情報を転送しても、転送先のSVMにはそのSIDに紐づくローカルユーザーやローカルグループが存在しません。同じ名前でローカルユーザーやローカルグループを作成してもSIDは一致しません。結果として移行先でアクセスができない状況になります。

後からACLをドメインユーザーやドメイングループで管理するように変更するのも中々大変です。それであれば、最初からドメイン参加することをお勧めします。

2024/2/15 追記ここまで

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!