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

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

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

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

検証環境

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

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」となった方もトライしてみてはいかがでしょうか。

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

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