この記事は公開されてから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 に変更されることなく移行できます。
しかし、SMBを使った接続を少し検証をするめにAD DSを設定するのは非常に手間です。実際の方法は以下記事やAWS公式ドキュメントに記載があります。
「これは面倒だ」
と思われた方に朗報です。実はADのドメインに参加しなくてもワークグループに参加させることも可能なんです。
NetAppのKnowledge Baseにも以下のように記載されています。
- ワークグループモードは、 Windows の標準機能で、 Active Directory ドメインなしでワークステーションを操作できます。これにより、 DC を介さずにデータを認証および提供できます
- 旧バージョンの Data ONTAP ではワークグループモードのサポートは提供されていませんが、 ONTAP 9.0 以降ではサポートが追加されています
- この機能は、次のような状況で重要です。
- お客様が Microsoft ドメインインフラストラクチャを必要としない場合
- お客様が規制ポリシーによって Microsoft ドメインを使用できない場合
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.
実際に試してみたので紹介します。
いきなりまとめ
- 簡単にワークグループのCIFSサーバーを構築できる
- ただし、本番環境のCIFSサーバーではドメイン参加することをオススメ
- ローカルユーザーは基本的に移行できないので、ワークグループのCIFSサーバーだと移行時に苦労する
検証環境
検証環境は以下の通りです。
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 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 共有の名前では次の特殊文字の使用はサポートされません。
- "//\:;| 、?* =
# ボリュームの確認
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ファイル共有にアクセスできるのがEveryone
でFull_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)でした!