[Amazon FSx for NetApp ONTAP] エクスポートポリシーでボリュームにアクセスできるクライアントを制御してみた
SVM毎にアクセス元のIPアドレスを制限したいな
こんにちは、のんピ(@non____97)です。
皆さんは「Amazon FSx for NetApp ONTAP(以降FSx for ONTAP)のSVM毎にアクセス元のIPアドレスを制御したいな」と思ったことはありますか? 私はあります。
FSx for ONTAPではSVM毎にセキュリティグループを割り当てることはできず、ファイルシステム単位でセキュリティグループを割り当てることになります。
これはFSx for ONTAPファイルシステムのENIをファイルシステムとファイルシステムのSVMで共有しているからです。
そのため、SVMが複数あり、許可したいIPアドレスがそれぞれ異なる場合であっても、セキュリティグループでは各SVMが許可したいIPアドレス全てを許可する必要があります。
とは言っても、「あるSVMには特定IPアドレスからのみアクセスできるように制限したい」といった需要があると思います。
FSx for ONTAPではそんな要望を叶えてくれる、エクスポートポリシーという機能があります。
エクスポートポリシーを使うことによって、ボリュームとqtree毎にアクセス可能なクライアント、プロトコル、認証方式を制御することが可能です。
試してみたので紹介します。
いきなりまとめ
- エクスポートポリシーとは、ONTAPのボリューム、qtreeに対するNFSおよびSMBを使ったのアクセスを制御するポリシー
- エクスポートポリシーはSVM単位で管理する
- 各ボリューム、qtreeには1つのエクスポートポリシーが割り当てられる
- デフォルトでは
default
というエクスポートポリシーが割り当てられるdefault
のエクスポートポリシーを削除することはできない
- エクスポートポリシーには複数のルールを設定することができる
- エクスポートポリシー内のエクスポートルールに設定したインデックスが若い番号からルールを評価する
- 明示的に許可するルールがなければ暗黙的に拒否される
- エクスポートルールでは、クライアントのIPアドレスやボリューム、qtreeに対してアクセスするときのプロトコル、認証に使用したプロトコルなどの情報を用いて、アクセスを許可/拒否することができる
- 「
10.0.0.0/24
からKerberos認証で認証されたクライアントのSMBのアクセスは読み取りのみ許可する」といった制御が可能
- 「
- NFSの場合、上位のジャンクションパスのボリューム、qtreeのエクスポートポリシーで読み取りを許可しなければ下位のジャンクションパスのボリューム、qtreeにアクセスできない
エクスポートポリシーとは
エクスポートポリシーとは、ONTAPのボリューム、qtreeに対するNFSおよびSMBを使ったのアクセスを制御するポリシーのことです。
各ボリューム、qtreeには1つのエクスポートポリシーが関連付けられます。
ボリューム、qtree作成時にエクスポートポリシーを指定しない場合はdefault
というエクスポートポリシーが適用されます。そのためデフォルトのエクスポートポリシーをカスタマイズしてあげれば、エクスポートポリシーを明示的に指定していないボリューム、qtreeへのアクセス制御を簡単に行うことができます。なお、このdefault
というエクスポートポリシーのルールを変更することは可能ですが、ポリシー自体を削除することはできません。
また、エクスポートポリシーはSVM単位で管理します。エクスポートポリシーを作成したSVM上でしか、そのエクスポートポリシーは使用できません。
エクスポートポリシーには複数のルールを設定することができます。エクスポートルール内のルールはインデックスの番号が若いものから評価されます。ルールを評価していった結果、明示的に許可するルールがなければ、暗黙的な拒否となります。イメージとしてはVPCのNetwork ACLが近しいですね。
エクスポートポリシーのルールでは主に以下パラメーターを指定します。
Vserver
:- SVMの名前
Policy Name
:- エクスポートポリシーの名前
Rule Index
:- エクスポートルールのインデックス
List of Client Match
:- クライアントのホスト名、IPアドレス、ネットグループ、またはドメインのリスト
- 最大文字数は4096文字
- 次は各指定例
- ホスト名を指定する場合 :
test-host
- IPアドレスを指定する場合 :
10.0.0.1
or10.0.0.1/32
or10.0.0.1/255.255.255.255
- ネットワークアドレスを指定する場合 :
10.0.0.0/24
or10.0.0.0/255.255.255.0
- ネットグループを指定する場合 :
@netgroup
- ドメイン名を指定する場合 :
.non-97.net
Access Protocol
:- ボリューム、qtreeに対してアクセスするときのプロトコル
- 次から選択可能
any
: いずれかのファイルアクセスプロトコルnfs
: NFSのいずれかのバージョンnfs3
: NFSv3nfs4
: NFSv4cifs
: SMB / CIFS
RO Access Rule
:- クライアントの読み取りを許可するセキュリティスタイルを指定
- 複数のセキュリティスタイルを指定するには、
,
で指定する RO Access Rule
はRW Access Rule
よりも優先されるため、特定のプロトコルに書き込み権限が必要な場合は、RO Access Rule
にも含める必要がある- 次から選択可能
sys
: AUTH_SYSで認証されたクライアントに読み取りを許可するkrb5
: Kerberos v5で認証されたクライアントに読み取りを許可するkrb5i
: Kerberos v5で認証され、チェックサムを使用した整合性チェックをしているクライアントに読み取りを許可するkrb5p
: Kerberos v5で認証され、トラフィックを暗号化したクライアントに読み取りを許可するntlm
: NTLMで認証されたクライアントに読み取りを許可するany
: いずれの認証方法のクライアントに対しても読み取りを許可するnone
: 匿名ユーザーとして読み取りを許可するnever
: 読み取りを拒否する
RW Access Rule
:- クライアントの読み書きを許可するセキュリティスタイルを指定
- 複数のセキュリティスタイルを指定するには、
,
で指定する - 指定できる値は
RO Access Rule
と同じ
これにより、「10.0.0.0/24
からKerberos認証で認証されたクライアントのSMBのアクセスは読み取りのみ許可する」などの制御が可能になります。
その他のパラメーターや詳細な説明はNetAppのKB、公式ドキュメント、vserver export-policy rule createをご覧ください。
エクスポートポリシーの注意すべき点としては、NFSでアクセスする場合、そのボリューム、qtreeにアクセスできるかは、そのボリューム、qtreeに設定されたエクスポートポリシーだけでなく、上位のジャンクションパスのボリューム、qtreeのエクスポートポリシーの影響を受けるという点です。
上位レベルのジャンクションでネストされたジャンクションよりも制限が厳しいエクスポートポリシーを設定した場合は、下位レベルのジャンクションへのアクセスに失敗する可能性があります。
上位レベルのジャンクションには下位レベルのジャンクションよりも制限が厳しくないエクスポートポリシーを設定するようにしてください。
上位のジャンクションパスのボリューム、qtreeのエクスポートポリシーで読み取りを許可しなければ下位のジャンクションパスのボリューム、qtreeにアクセスできないようです。
そのため、ボリュームが階層構造になっている場合は、階層が深くなる毎に徐々にアクセス制御を厳しくしていくと良いでしょう。
検証環境
検証環境は以下の通りです。
ボリュームに割り当てたエクスポートルールを変更して、各クライアントからのアクセスを制御します。
AD DCについては以下記事の検証で使用したものを流用します。
検証で使用したFSx for ONTAPとSVMは以下の通りです。
# FSx for ONTAPファイルシステム $ aws fsx describe-file-systems { "FileSystems": [ { "OwnerId": "<AWSアカウントID>", "CreationTime": "2022-12-09T02:22:30.877000+00:00", "FileSystemId": "fs-0f615ebf79c53ac7d", "FileSystemType": "ONTAP", "Lifecycle": "AVAILABLE", "StorageCapacity": 1024, "StorageType": "SSD", "VpcId": "vpc-08b84da1f793ed513", "SubnetIds": [ "subnet-08dc789896a48a3b4" ], "NetworkInterfaceIds": [ "eni-00748bd8abb5d9364", "eni-08b225e6eb80d81ca" ], "KmsKeyId": "arn:aws:kms:us-east-1:<AWSアカウントID>:key/365ae19c-8016-4963-9afd-05f703509254", "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-0f615ebf79c53ac7d", "Tags": [ { "Key": "aws:cloudformation:stack-name", "Value": "FsxnStack" }, { "Key": "aws:cloudformation:logical-id", "Value": "FSxforONTAPfilesystem" }, { "Key": "aws:cloudformation:stack-id", "Value": "arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/FsxnStack/78cdb890-5423-11ed-81fb-0eac30df53d1" }, { "Key": "Name", "Value": "fsx-for-ontap-file-system" } ], "OntapConfiguration": { "AutomaticBackupRetentionDays": 7, "DailyAutomaticBackupStartTime": "16:00", "DeploymentType": "SINGLE_AZ_1", "Endpoints": { "Intercluster": { "DNSName": "intercluster.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "10.0.1.75", "10.0.1.119" ] }, "Management": { "DNSName": "management.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "10.0.1.123" ] } }, "DiskIopsConfiguration": { "Mode": "AUTOMATIC", "Iops": 3072 }, "PreferredSubnetId": "subnet-08dc789896a48a3b4", "ThroughputCapacity": 128, "WeeklyMaintenanceStartTime": "6:17:00" } } ] } # SVM $ aws fsx describe-storage-virtual-machines { "StorageVirtualMachines": [ { "ActiveDirectoryConfiguration": { "NetBiosName": "SVM", "SelfManagedActiveDirectoryConfiguration": { "DomainName": "corp.non-97.net", "OrganizationalUnitDistinguishedName": "OU=FSxForONTAP,DC=corp,DC=non-97,DC=net", "UserName": "FSxServiceAccount", "DnsIps": [ "10.0.1.10" ] } }, "CreationTime": "2022-12-09T05:04:40.556000+00:00", "Endpoints": { "Iscsi": { "DNSName": "iscsi.svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "10.0.1.100", "10.0.1.113" ] }, "Management": { "DNSName": "svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "10.0.1.68" ] }, "Nfs": { "DNSName": "svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "10.0.1.68" ] }, "Smb": { "DNSName": "SVM.corp.non-97.net", "IpAddresses": [ "10.0.1.68" ] } }, "FileSystemId": "fs-0f615ebf79c53ac7d", "Lifecycle": "CREATED", "Name": "SVM", "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-0f615ebf79c53ac7d/svm-0c325ec2eef34fc83", "StorageVirtualMachineId": "svm-0c325ec2eef34fc83", "UUID": "0235d32b-777f-11ed-844e-7b3eb664d03b" } ] }
デフォルトで割り当たられているエクスポートポリシーの確認
それではまず、デフォルトで割り当たられているエクスポートポリシーを確認します。
ルートボリュームに割り当てられているエクスポートポリシーを表示します。
FsxId0f615ebf79c53ac7d::> volume show -fields policy vserver volume policy ------- -------- ---------------------- SVM SVM_root fsx-root-volume-policy
default
ではなく、fsx-root-volume-policy
というエクスポートポリシーが割り当てられていますね。
エクスポートポリシー一覧を確認すると、もちろんdefault
も存在しています。
FsxId0f615ebf79c53ac7d::> vserver export-policy show Vserver Policy Name --------------- ------------------- SVM default SVM fsx-root-volume-policy 2 entries were displayed.
各エクスポートポリシーのルールを確認してみます。
# 各エクスポートポリシーのルールを確認 FsxId0f615ebf79c53ac7d::> vserver export-policy rule show Policy Rule Access Client RO Vserver Name Index Protocol Match Rule ------------ --------------- ------ -------- --------------------- --------- SVM default 1 any 0.0.0.0/0 any SVM fsx-root-volume-policy 1 any 0.0.0.0/0 any 2 entries were displayed. # 各エクスポートポリシーのルールの詳細を確認 FsxId0f615ebf79c53ac7d::> vserver export-policy rule show -instance Vserver: SVM Policy Name: default Rule Index: 1 Access Protocol: any List of Client Match Hostnames, IP Addresses, Netgroups, or Domains: 0.0.0.0/0 RO Access Rule: any RW Access Rule: any User ID To Which Anonymous Users Are Mapped: 65534 Superuser Security Types: any Honor SetUID Bits in SETATTR: true Allow Creation of Devices: true Vserver: SVM Policy Name: fsx-root-volume-policy Rule Index: 1 Access Protocol: any List of Client Match Hostnames, IP Addresses, Netgroups, or Domains: 0.0.0.0/0 RO Access Rule: any RW Access Rule: never User ID To Which Anonymous Users Are Mapped: 65534 Superuser Security Types: any Honor SetUID Bits in SETATTR: true Allow Creation of Devices: true 2 entries were displayed.
デフォルトのエクスポートポリシーは全てのアクセスを許可するようなルールが設定されています。一方でfsx-root-volume-policy
は全てのアクセスから書き込みを拒否するようなルールが設定されています。ルートボリュームに対する書き込みはさせないようにしているようです。
実際にルートボリュームで書き込みできないことを試してみましょう。
ルートボリュームは以下のようにモードビットで755
です。UNIX User Id
が0
なのでrootユーザーであれば書き込みできそうです。
FsxId0f615ebf79c53ac7d::> vserver security file-directory show -vserver SVM -path / Vserver: SVM File Path: / File Inode Number: 64 Security Style: unix Effective Style: unix DOS Attributes: 10 DOS Attributes in Text: ----D--- Expanded Dos Attributes: - UNIX User Id: 0 UNIX Group Id: 0 UNIX Mode Bits: 755 UNIX Mode Bits in Text: rwxr-xr-x ACLs: -
NFSクライアントからルートボリュームをNFSv4でマウントして書き込めるか確認してみます。
# NFSクライアントのホスト名を確認 $ hostname ip-10-0-1-6.ec2.internal # NFSクライアントのIPアドレスを確認 $ hostname -i 10.0.1.6 # マウントポイントの作成 $ sudo mkdir /mnt/fsxn # NFSv4でマウントしているものがないことを確認 $ df -hT -t nfs4 df: no file systems processed # ルートボリュームをNFSv4でマウント $ sudo mount -t nfs4 svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/ /mnt/fsxn/ # ルートボリュームをNFSv4でマウントされたことを確認 $ df -hT -t nfs4 Filesystem Type Size Used Avail Use% Mounted on svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/ nfs4 973M 256K 973M 1% /mnt/fsxn # マウントポイントの権限を確認 $ ls -ld /mnt/fsxn/ drwxr-xr-x 5 root root 4096 Dec 9 05:09 /mnt/fsxn/ # マウントポイント配下を確認 $ ls -l /mnt/fsxn/ total 0 # マウントポイント配下に書き込み $ echo nfs-client-1 | sudo tee /mnt/fsxn/nfs-client-1.txt > /dev/null tee: /mnt/fsxn/nfs-client-1.txt: Permission denied
マウントはできましたが、書き込みは拒否されましたね。確かにfsx-root-volume-policy
のエクスポートルールが効いています。
特定のIPアドレスのみアクセスを許可
ボリュームの作成
次に特定のIPアドレスのみアクセスを許可するようにエクスポートポリシーを設定します。
まずは検証用にボリュームを作成します。作成するボリュームはセキュリティスタイルがUNIX
のボリュームと、セキュリティスタイルがNTFS
のボリュームです。
# 現在のボリューム一覧を確認 FsxId0f615ebf79c53ac7d::> volume show Vserver Volume Aggregate State Type Size Available Used% --------- ------------ ------------ ---------- ---- ---------- ---------- ----- SVM SVM_root aggr1 online RW 1GB 972.5MB 0% # セキュリティスタイルがUNIXのボリュームを作成 FsxId0f615ebf79c53ac7d::> volume create -volume unix -aggregate aggr1 -size 1G -security-style unix -type RW -junction-path /unix -vserver SVM [Job 64] Job succeeded: Successful # セキュリティスタイルがNTFSのボリュームを作成 FsxId0f615ebf79c53ac7d::> volume create -volume ntfs -aggregate aggr1 -size 1G -security-style ntfs -type RW -junction-path /ntfs -vserver SVM [Job 66] Job succeeded: Successful # ボリュームのジャンクションパス、セキュリティスタイル、エクスポートポリシーを確認 FsxId0f615ebf79c53ac7d::> volume show -fields junction-path, security-style, policy vserver volume policy security-style junction-path ------- -------- ---------------------- -------------- ------------- SVM SVM_root fsx-root-volume-policy unix / SVM ntfs default ntfs /ntfs SVM unix default unix /unix 3 entries were displayed.
ボリューム作成時にエクスポートポリシーを指定しなかったのでdefault
が割り当てられていますね。
各NFSクライアントからアクセスできることを確認
エクスポートポリシーの設定をする前に各NFSクライアントからアクセスできることを確認します。
1台目のNFSクライアント(10.0.1.6
)で/unix
をマウントして、ファイルを追加してみます。
# NFSクライアントのIPアドレスを確認 $ hostname -i 10.0.1.6 # ルートボリュームをマウントしているため、マウントを解除 $ sudo umount /mnt/fsxn/ # /unix をマウント $ sudo mount -t nfs4 svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix /mnt/fsxn/ # マウントできたことを確認 $ df -hT -t nfs4 Filesystem Type Size Used Avail Use% Mounted on svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix nfs4 973M 256K 973M 1% /mnt/fsxn $ mount | grep nfs4 svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix on /mnt/fsxn type nfs4 (rw,relatime,vers=4.1,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.0.1.6,local_lock=none,addr=10.0.1.68) # マウントポイントの権限を確認 $ ls -ld /mnt/fsxn drwxr-xr-x 2 root root 4096 Dec 9 05:09 /mnt/fsxn # ファイルを追加 $ echo nfs-client-1 | sudo tee /mnt/fsxn/nfs-client-1.txt > /dev/null # ファイルが追加されたことを確認 $ ls -l /mnt/fsxn/ total 0 -rw-r--r-- 1 root root 13 Dec 9 05:21 nfs-client-1.txt # 追加したファイルの内容を確認 $ cat /mnt/fsxn/nfs-client-1.txt nfs-client-1
/unix
をマウントして、ファイルを追加できましたね。
2台目のNFSクライアント(10.0.1.39
)でも同様に/unix
をマウントして、ファイルを追加してみます。
# NFSクライアントのホスト名の確認 $ hostname ip-10-0-1-39.ec2.internal # NFSクライアントのIPアドレスを確認 $ hostname -i 10.0.1.39 # マウントポイントの作成 $ sudo mkdir /mnt/fsxn # /unix をマウント $ sudo mount -t nfs4 svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix /mnt/fsxn/ # マウントできたことを確認 $ df -hT -t nfs4 Filesystem Type Size Used Avail Use% Mounted on svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix nfs4 973M 320K 973M 1% /mnt/fsxn $ mount | grep nfs4 svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix on /mnt/fsxn type nfs4 (rw,relatime,vers=4.1,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.0.1.39,local_lock=none,addr=10.0.1.68) # 1台目のNFSクライアントが書き込んだファイルがあることを確認 $ ls -l /mnt/fsxn/ total 0 -rw-r--r-- 1 root root 13 Dec 9 05:21 nfs-client-1.txt # ファイルを追加 $ echo nfs-client-2 | sudo tee /mnt/fsxn/nfs-client-2.txt > /dev/null # ファイルが追加されたことを確認 $ ls -l /mnt/fsxn/ total 0 -rw-r--r-- 1 root root 13 Dec 9 05:21 nfs-client-1.txt -rw-r--r-- 1 root root 13 Dec 9 05:33 nfs-client-2.txt # 追加したファイルの内容を確認 $ cat /mnt/fsxn/nfs-client-2.txt nfs-client-2
2台目のNFSクライアントも/unix
をマウントして、ファイルを追加できましたね。
エクスポートポリシーの作成
それではエクスポートポリシーを作成します。
今回はtest-policy
というエクスポートポリシーを作成します。エクスポートポリシーの作成はvserver export-policy createで行います。
# エクスポートポリシーの作成 FsxId0f615ebf79c53ac7d::> vserver export-policy create -vserver SVM -policyname test-policy # エクスポートポリシーが作成されたことを確認 FsxId0f615ebf79c53ac7d::> export-policy show Vserver Policy Name --------------- ------------------- SVM custome-policy SVM default SVM fsx-root-volume-policy SVM test-policy 4 entries were displayed. # 作成したエクスポートポリシーの詳細を確認 FsxId0f615ebf79c53ac7d::> export-policy show -policyname test-policy -instance Vserver: SVM Policy Name: test-policy
次に作成したエクスポートポリシーにエクスポートルールを作成します。
作成するエクスポートルールは「1台目のNFSクライアントのIPアドレスのみ読み書きを許可する」というものです。明示的な許可がないため、2台目のNFSクライアントからアクセスする場合は暗黙的に拒否されます。
エクスポートルールの作成はvserver export-policy rule createで行います。
# エクスポートポリシーにエクスポートルールが何も設定されていないことを確認 FsxId0f615ebf79c53ac7d::> export-policy rule show -policyname test-policy There are no entries matching your query. # エクスポートルールの作成 FsxId0f615ebf79c53ac7d::> export-policy rule create -vserver SVM -policyname test-policy -ruleindex 1 -protocol any -clientmatch 10.0.1.6/32 -rorule any -rwrule any # エクスポートルールが作成されたことを確認 FsxId0f615ebf79c53ac7d::> export-policy rule show -policyname test-policy Policy Rule Access Client RO Vserver Name Index Protocol Match Rule ------------ --------------- ------ -------- --------------------- --------- SVM test-policy 1 any 10.0.1.6/32 any # 作成したエクスポートルールの詳細を確認 FsxId0f615ebf79c53ac7d::> export-policy rule show -policyname test-policy -instance Vserver: SVM Policy Name: test-policy Rule Index: 1 Access Protocol: any List of Client Match Hostnames, IP Addresses, Netgroups, or Domains: 10.0.1.6/32 RO Access Rule: any RW Access Rule: any User ID To Which Anonymous Users Are Mapped: 65534 Superuser Security Types: none Honor SetUID Bits in SETATTR: true Allow Creation of Devices: true
エクスポートルールを作成しました。
エクスポートポリシーをボリュームに割り当てます。
# エクスポートポリシーをボリュームに割り当て FsxId0f615ebf79c53ac7d::> volume modify -volume unix -policy test-policy Volume modify successful on volume unix of Vserver SVM. # エクスポートポリシーがボリュームに割り当てられたことを確認 FsxId0f615ebf79c53ac7d::> volume show -volume unix -fields policy vserver volume policy ------- ------ ----------- SVM unix test-policy
動作確認
それでは動作確認です。
エクスポートポリシーで許可していない2台目のNFSクライアント(10.0.1.39
)で/unix
をマウントできるか確認してみます。
# NFSクライアントのIPアドレスを確認 $ hostname -i 10.0.1.39 # マウントしたままだったので、すぐさまエクスポートポリシーが適用されるか確認 $ ls -l /mnt/fsxn/ total 0 -rw-r--r-- 1 root root 13 Dec 9 05:21 nfs-client-1.txt -rw-r--r-- 1 root root 13 Dec 9 05:33 nfs-client-2.txt $ cat /mnt/fsxn/nfs-client-2.txt nfs-client-2 # ファイルの上書き $ echo nfs-client-2 | sudo tee /mnt/fsxn/nfs-client-2.txt > /dev/null # 上書きされたか確認 $ ls -l /mnt/fsxn/ total 0 -rw-r--r-- 1 root root 13 Dec 9 05:21 nfs-client-1.txt -rw-r--r-- 1 root root 13 Dec 9 05:36 nfs-client-2.txt # 一度アンマウント $ sudo umount /mnt/fsxn # 再マウント $ sudo mount -t nfs4 svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix /mnt/fsxn/ mount.nfs4: access denied by server while mounting svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix
マウントを解除するまではエクスポート読み書きが出来ました。一度アンマウントして、再マウントしようとすると拒否されました。エクスポートポリシーが効いていますね。
次にエクスポートポリシーで許可している1台目のNFSクライアント(10.0.1.6
)で/unix
をマウントできるか確認してみます。
# NFSクライアントのIPアドレスを確認 $ hostname -i 10.0.1.6 # アンマウント前にマウントポイント配下にアクセスできることを確認 $ ls -l /mnt/fsxn/ total 0 -rw-r--r-- 1 root root 13 Dec 9 05:21 nfs-client-1.txt -rw-r--r-- 1 root root 13 Dec 9 05:36 nfs-client-2.txt # 一度アンマウント $ sudo umount /mnt/fsxn # 再マウント $ sudo mount -t nfs4 svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix /mnt/fsxn/ # マウントポイント配下にアクセスできることを確認 $ ls -l /mnt/fsxn/ total 0 -rw-r--r-- 1 root root 13 Dec 9 05:21 nfs-client-1.txt -rw-r--r-- 1 root root 13 Dec 9 05:36 nfs-client-2.txt
エクスポートポリシーで許可している1台目のNFSクライアント(10.0.1.6
)では継続して/unix
にアクセスできることを確認できました。
特定のプロトコルのアクセスを拒否
NFSv3でマウントできることを確認
次に特定のプロトコルに対してアクセスを拒否できることを確認します。
拒否したいプロトコルはNFSv3とします。
比較用に1台目のNFSクライアント(10.0.1.6
)からNFSv3で/unix
をマウントできることを確認します。
# NFSクライアントのIPアドレスを確認 $ hostname -i 10.0.1.6 # NFSv4でマウントしているのでアンマウント $ sudo umount /mnt/fsxn # NFSv3でマウント $ sudo mount -t nfs -o vers=3 svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix /mnt/fsxn/ # NFSv3でマウントしていることを確認 $ df -hT -t nfs Filesystem Type Size Used Avail Use% Mounted on svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix nfs 973M 320K 973M 1% /mnt/fsxn $ mount | grep nfs sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix on /mnt/fsxn type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.0.1.68,mountvers=3,mountport=635,mountproto=udp,local_lock=none,addr=10.0.1.68)
NFSv3でマウントできることを確認できました。
エクスポートルールの編集
それでは、エクスポートルールの編集をします。
NFSv3によるアクセスは拒否して、NFSv4による1台目のNFSクライアント(10.0.1.6/32
)からのアクセスは許可したいため、以下のようにエクスポートルールを設定します。
- Index 1 : NFSv3によるアクセスを拒否するエクスポートルール
- Index 2 : 1台目のNFSクライアント(
10.0.1.6/32
)からのアクセスを許可するエクスポートルール
エクスポートルールのインデックスの変更が必要になります。エクスポートルールのインデックスの変更はvserver export-policy rule setindexで行います。
# 既存エクスポートルールのインデックスを 1 から 2 に変更 FsxId0f615ebf79c53ac7d::> export-policy rule setindex -vserver SVM -policyname test-policy -ruleindex 1 -newruleindex 2 # 既存エクスポートルールのインデックスが 1 から 2 に変更されたことを確認 FsxId0f615ebf79c53ac7d::> export-policy rule show -policyname test-policy Policy Rule Access Client RO Vserver Name Index Protocol Match Rule ------------ --------------- ------ -------- --------------------- --------- SVM test-policy 2 any 10.0.1.6/32 any # NFSv3によるアクセスを拒否するエクスポートルールの作成 FsxId0f615ebf79c53ac7d::> export-policy rule create -vserver SVM -policyname test-policy -ruleindex 1 -protocol nfs3 -clientmatch 0.0.0.0/0 -rorule never -rwrule never # NFSv3によるアクセスを拒否するエクスポートルールが作成されたことを確認 FsxId0f615ebf79c53ac7d::> export-policy rule show -policyname test-policy Policy Rule Access Client RO Vserver Name Index Protocol Match Rule ------------ --------------- ------ -------- --------------------- --------- SVM test-policy 1 nfs3 0.0.0.0/0 never SVM test-policy 2 any 10.0.1.6/32 any 2 entries were displayed. # 作成したエクスポートルールの詳細を確認 FsxId0f615ebf79c53ac7d::> export-policy rule show -policyname test-policy -ruleindex 1 -instance Vserver: SVM Policy Name: test-policy Rule Index: 1 Access Protocol: nfs3 List of Client Match Hostnames, IP Addresses, Netgroups, or Domains: 0.0.0.0/0 RO Access Rule: never RW Access Rule: never User ID To Which Anonymous Users Are Mapped: 65534 Superuser Security Types: none Honor SetUID Bits in SETATTR: true Allow Creation of Devices: true
動作確認
それでは動作確認です。
NFSv3でアクセスできるか確認します。
# NFSクライアントのIPアドレスを確認 $ hostname -i 10.0.1.6 # マウントしたままだったので、すぐさまエクスポートポリシーが適用されるか確認 $ ls -l /mnt/fsxn/ ls: cannot open directory /mnt/fsxn/: Stale file handle $ cat /mnt/fsxn/nfs-client-1.txt cat: /mnt/fsxn/nfs-client-1.txt: Permission denied # 一度アンマウント $ sudo umount /mnt/fsxn/ # NFSv3で再マウント $ sudo mount -t nfs -o vers=3 svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix /mnt/fsxn/ mount.nfs: access denied by server while mounting svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix # NFSv3マウント時のメッセージを確認 $ sudo mount -t nfs -o vers=3 svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix /mnt/fsxn/ -v mount.nfs: timeout set for Fri Dec 9 08:27:10 2022 mount.nfs: trying text-based options 'vers=3,addr=10.0.1.68' mount.nfs: prog 100003, trying vers=3, prot=6 mount.nfs: trying 10.0.1.68 prog 100003 vers 3 prot TCP port 2049 mount.nfs: prog 100005, trying vers=3, prot=17 mount.nfs: trying 10.0.1.68 prog 100005 vers 3 prot UDP port 635 mount.nfs: mount(2): Permission denied mount.nfs: access denied by server while mounting svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix # NFSv3でマウントできていないことを確認 $ df -hT -t nfs df: no file systems processed $ mount | grep nfs sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
NFSv3でアクセスしようとすると拒否されることが分かりました。
今回は再マウントしなくとも拒否されましたね。特定のIPアドレスのみアクセスを許可するようなエクスポートポリシーを設定した場合は暗黙的な拒否でした。もしかしたら暗黙的な拒否は再マウントが必要で、明示的な拒否は再マウントが不要かもしれません。
続いて、NFSv4では継続してマウントできることを確認します。
# NFSv4でマウント $ sudo mount -t nfs -o vers=4.1 svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix /mnt/fsxn/ # NFSv4でマウントできていることを確認 $ df -hT -t nfs4 Filesystem Type Size Used Avail Use% Mounted on svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix nfs4 973M 384K 973M 1% /mnt/fsxn $ mount | grep nfs sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix on /mnt/fsxn type nfs4 (rw,relatime,vers=4.1,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.0.1.6,local_lock=none,addr=10.0.1.68) # マウントポイント配下を確認 $ ls -l /mnt/fsxn/ total 0 -rw-r--r-- 1 root root 13 Dec 9 05:21 nfs-client-1.txt -rw-r--r-- 1 root root 13 Dec 9 05:36 nfs-client-2.txt
NFSv4では継続してマウントできました。エクスポートルールのインデックスを理解すれば、細かいアクセス制限を行うことができそうです。
なお、SVM全体でNFSv3を無効化したい場合は、SVMのNFSの設定でNFSv3を無効化する方が簡単です。デフォルトではNFSv3は有効化されています。詳細なNFSの設定は以下の通りです。
FsxId0f615ebf79c53ac7d::> set advanced Warning: These advanced commands are potentially dangerous; use them only when directed to do so by NetApp personnel. Do you want to continue? {y|n}: y # 現在のNFSの設定確認 FsxId0f615ebf79c53ac7d::*> nfs show -instance Vserver: SVM General NFS Access: true RPC GSS Context Cache High Water Mark: 0 RPC GSS Context Idle: 0 NFS v3: enabled NFS v4.0: enabled UDP Protocol: enabled TCP Protocol: enabled Default Windows User: - Enable NFSv3 EJUKEBOX error: true Require All NFSv3 Reads to Return Read Attributes: false Show Change in FSID as NFSv3 Clients Traverse Filesystems: enabled Enable the Dropping of a Connection When an NFSv3 Request is Dropped: enabled Vserver NTFS Unix Security Options: use_export_policy Vserver Change Ownership Mode: use_export_policy NFS Response Trace Enabled: false NFS Response Trigger (in secs): 60 UDP Maximum Transfer Size (bytes): 32768 TCP Maximum Transfer Size (bytes): 65536 NFSv4.0 ACL Support: disabled NFSv4.0 Read Delegation Support: disabled NFSv4.0 Write Delegation Support: disabled Show Change in FSID as NFSv4 Clients Traverse Filesystems: enabled NFSv4.0 Referral Support: disabled NFSv4 ID Mapping Domain: ec2.internal NFSv4 Validate UTF-8 Encoding of Symbolic Link Data: disabled NFSv4 Lease Timeout Value (in secs): 30 NFSv4 Grace Timeout Value (in secs): 45 Preserves and Modifies NFSv4 ACL (and NTFS File Permissions in Unified Security Style): enabled NFSv4.1 Minor Version Support: enabled Rquota Enable: disabled NFSv4.1 Implementation ID Domain: netapp.com NFSv4.1 Implementation ID Name: NetApp Release 9.11.1P3 NFSv4.1 Implementation ID Date: Thu Sep 29 16:06:51 2022 NFSv4.1 Parallel NFS Support: disabled NFSv4.1 Referral Support: disabled NFSv4.1 ACL Support: disabled NFS vStorage Support: disabled NFSv4 Support for Numeric Owner IDs: enabled Default Windows Group: - NFSv4.1 Read Delegation Support: disabled NFSv4.1 Write Delegation Support: disabled Number of Slots in the NFSv4.x Session slot tables: 180 Size of the Reply that will be Cached in Each NFSv4.x Session Slot (in bytes): 640 Maximum Number of ACEs per ACL: 400 NFS Mount Root Only: enabled NFS Root Only: disabled AUTH_SYS Extended Groups Enabled: disabled AUTH_SYS and RPCSEC_GSS Auxillary Groups Limit: 32 Validation of Qtree IDs for Qtree File Operations: enabled NFS Mount Daemon Port: 635 Network Lock Manager Port: 4045 Network Status Monitor Port: 4046 NFS Quota Daemon Port: 4049 Permitted Kerberos Encryption Types: des, des3, aes-128, aes-256 Showmount Enabled: enabled Set the Protocol Used for Name Services Lookups for Exports: udp Map Unknown UID to Default Windows User: enable DNS Domain Search Enabled During Netgroup Lookup: enabled Trust No-Match Result from Any Name Service Switch Source During Netgroup Lookup: disabled Display maximum NT ACL Permissions to NFS Client: disabled NFSv3 MS-DOS Client Support: disabled Ignore the NT ACL Check for NFS User 'root': disabled Time To Live Value (in msecs) of a Positive Cached Credential: 86400000 Time To Live Value (in msecs) of a Negative Cached Credential: 7200000 Skip Permission Check for NFS Write Calls from Root/Owner: disabled Use 64 Bits for NFSv3 FSIDs and File IDs: disabled Ignore Client Specified Mode Bits and Preserve Inherited NFSv4 ACL When Creating New Files or Directories: disabled Fallback to Unconverted Filename Search: disabled I/O Count to Be Grouped as a Session: 5000 Duration for I/O to Be Grouped as a Session (Secs): 120 Enable or disable Checksum for Replay-Cache: enabled Harvest timeout (in msecs) for a Cached Credential: 86400000 Idle Connection Timeout Value (in seconds): 360 Are Idle NFS Connections Supported: enabled Hide Snapshot Directory under NFSv3 Mount Point: disabled Provide Root Path as Showmount State: disabled Use 64 Bits for NFSv4.x FSIDs and File IDs: enabled NFSV4.2 Security Label Support: disabled RDMA Protocol: enabled
Kerberos認証をしたクライアントのみ書き込みを許可
CIFSサーバーのオプションでエクスポートポリシーを有効化
次にKerberos認証をしたクライアントのみ書き込みを許可するようにエクスポートポリシーを設定します。
こちらの検証はSMBで行います。
デフォルトのCIFSサーバーの設定ではエクスポートポリシーが有効化されていません。
そのため、SMBでアクセスした場合はルートボリュームや/unix
に対する書き込みも行えます。
AD DCからルートボリュームのファイル共有c$
をZドライブにマウントして、テキストファイルを追加できるか確認したところ、できてしまいました。
# 現在のユーザー確認 > whoami -fqdn CN=Administrator,CN=Users,DC=corp,DC=non-97,DC=net # ルートボリュームのファイル共有 c$ をZドライブにマウント > net use Z: \\SVM.CORP.NON-97.NET\c$ The command completed successfully. # マウントできたことを確認 > Get-PSDrive Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- Alias Alias C 15.94 14.06 FileSystem C:\ Users\Administrator Cert Certificate \ Env Environment Function Function HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE Variable Variable WSMan WSMan Z 0.00 0.95 FileSystem \\SVM.CORP.NON-97.NET\c$ # Zドライブ配下を確認 > ls Z:\ Directory: Z:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d----l 12/8/2022 7:09 PM ntfs d----l 12/8/2022 7:09 PM unix # Zドライブ配下にテキストファイルを追加 > echo smb > Z:\smb.txt # ファイルが追加できたことを確認 > ls Z:\ Directory: Z:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d----l 12/8/2022 7:09 PM ntfs d----l 12/8/2022 7:09 PM unix -a---- 12/9/2022 12:46 AM 12 smb.txt # エクスポートポリシーが効いていないため、IPアドレス制限をしている /unix にもアクセスできる > ls Z:\unix\ Directory: Z:\unix Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 12/8/2022 9:21 PM 13 nfs-client-1.txt -a---- 12/8/2022 9:36 PM 13 nfs-client-2.txt > cat Z:\unix\nfs-client-1.txt nfs-client-1
そのため、SMBによるアクセスに対してエクスポートポリシーで制御したい場合は、CIFSサーバーでエクスポートポリシーの有効化を行う必要があります。エクスポートポリシーの有効化を行う際は権限を advanced
に変更する必要があります。
# CIFSサーバーの設定確認 FsxId0f615ebf79c53ac7d::> cifs options show -instance Vserver: SVM Client Session Timeout : 900 Default Unix Group : - Default Unix User : pcuser Guest Unix User : - Read Grants Exec : disabled Read Only Delete : disabled WINS Servers : - # 権限を advanced に変更 FsxId0f615ebf79c53ac7d::> set advanced Warning: These advanced commands are potentially dangerous; use them only when directed to do so by NetApp personnel. Do you want to continue? {y|n}: y # CIFSサーバーの設定確認 FsxId0f615ebf79c53ac7d::*> cifs options show Vserver: SVM Client Session Timeout: 900 Copy Offload Enabled: true Default Unix Group: - Default Unix User: pcuser Guest Unix User: - Are Administrators mapped to 'root': true Is Advanced Sparse File Support Enabled: true Is Fsctl File Level Trim Enabled: true Direct-Copy Copy Offload Enabled: true Export Policies Enabled: false Grant Unix Group Permissions to Others: false Is Advertise DFS Enabled: false Is Client Duplicate Session Detection Enabled: true Is Client Version Reporting Enabled: true Is DAC Enabled: false Is Fake Open Support Enabled: true Is Hide Dot Files Enabled: false Is Large MTU Enabled: true Is Local Auth Enabled: true Is Local Users and Groups Enabled: true Is Multichannel Enabled: true Is NetBIOS over TCP (port 139) Enabled: true Is NBNS over UDP (port 137) Enabled: false Is Referral Enabled: false Is Search Short Names Support Enabled: false Is Trusted Domain Enumeration And Search Enabled: true Is UNIX Extensions Enabled: false Is Use Junction as Reparse Point Enabled: true Max Multiplex Count: 255 Max Connections per Multichannel Session: 32 Max LIFs per Multichannel Session: 256 Max Same User Session Per Connection: 2500 Max Same Tree Connect Per Session: 5000 Max Opens Same File Per Tree: 1000 Max Watches Set Per Tree: 500 Is Path Component Cache Enabled: true NT ACLs on UNIX Security Style Volumes Enabled: true Read Grants Exec: disabled Read Only Delete: disabled Reported File System Sector Size: 4096 Restrict Anonymous: no-enumeration Shadowcopy Dir Depth: 5 Shadowcopy Enabled: true SMB1 Enabled: false Max Buffer Size for SMB1 Message: 65535 SMB2 Enabled: true SMB3 Enabled: true SMB3.1 Enabled: true Map Null User to Windows User or Group: - WINS Servers: - Report Widelink as Reparse Point Versions: SMB1 Max Credits to Grant: 128 Check Share Permission for NetShareEnumAll Request: false # CIFSサーバーでエクスポートポリシーを有効化 FsxId0f615ebf79c53ac7d::*> vserver cifs options modify -vserver SVM -is-exportpolicy-enabled true # CIFSサーバーでエクスポートポリシーが有効化されたか確認 FsxId0f615ebf79c53ac7d::*> cifs options show -fields is-exportpolicy-enabled vserver is-exportpolicy-enabled ------- ----------------------- SVM true # 権限を admin に戻す FsxId0f615ebf79c53ac7d::*> set admin
CIFSサーバーでエクスポートポリシーを有効化しました。
この状態で再度ルートボリュームに対して書き込みを行います。
# ルートボリュームに対してテキストファイルを追加 > echo smb2 > Z:\smb2.txt out-file : Access to the path 'Z:\smb2.txt' is denied. At line:1 char:1 + echo smb2 > Z:\smb2.txt + ~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OpenError: (:) [Out-File], UnauthorizedAccessException + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand # テキストファイルが追加されていないことを確認 > ls Z:\ Directory: Z:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d----l 12/8/2022 7:09 PM ntfs d----l 12/8/2022 7:09 PM unix -a---- 12/9/2022 12:46 AM 12 smb.txt
ルートボリュームに書き込みをしようとしたら拒否されました。エクスポートポリシーfsx-root-volume-policy
が効いていますね。
また、エクスポートポリシーが有効化されたため以下のように/unix
に対してアクセス出来なくなりました。
# /unix にアクセスできなくなったことを確認 > ls Z:\unix\ ls : Access is denied At line:1 char:1 + ls Z:\unix\ + ~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (Z:\unix\:String) [Get-ChildItem], UnauthorizedAccessException + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand ls : Cannot find path 'Z:\unix\' because it does not exist. At line:1 char:1 + ls Z:\unix\ + ~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Z:\unix\:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand # /unix 配下のファイルにもアクセスできなくなったことを確認 > cat Z:\unix\nfs-client-1.txt cat : Access is denied At line:1 char:1 + cat Z:\unix\nfs-client-1.txt + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (Z:\unix\nfs-client-1.txt:String) [Get-Content], UnauthorizedAccessExc eption + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetContentCommand cat : Cannot find path 'Z:\unix\nfs-client-1.txt' because it does not exist. At line:1 char:1 + cat Z:\unix\nfs-client-1.txt + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Z:\unix\nfs-client-1.txt:String) [Get-Content], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand
エクスポートポリシーの作成
それではエクスポートポリシーの作成を行います。
krb5-policy
という名前のエクスポートポリシーを作成します。
# エクスポートポリシーの作成 FsxId0f615ebf79c53ac7d::> export-policy create -vserver SVM -policyname krb5-policy # エクスポートポリシーが作成されたことを確認 FsxId0f615ebf79c53ac7d::> export-policy show Vserver Policy Name --------------- ------------------- SVM default SVM fsx-root-volume-policy SVM krb5-policy SVM test-policy 4 entries were displayed.
作成したエクスポートポリシーに「Kerberos認証された場合のみ書き込みを許可する」というエクスポートルールを作成します。
# エクスポートルールの作成 FsxId0f615ebf79c53ac7d::> export-policy rule create -vserver SVM -policyname krb5-policy -ruleindex 1 -protocol any -clientmatch 0.0.0.0/0 -rorule any -rwrule krb5 # エクスポートルールが作成されたことを確認 FsxId0f615ebf79c53ac7d::> export-policy rule show -vserver SVM -policyname krb5-policy Policy Rule Access Client RO Vserver Name Index Protocol Match Rule ------------ --------------- ------ -------- --------------------- --------- SVM krb5-policy 1 any 0.0.0.0/0 any # 作成したエクスポートルールの作用を確認 FsxId0f615ebf79c53ac7d::> export-policy rule show -vserver SVM -policyname krb5-policy -instance Vserver: SVM Policy Name: krb5-policy Rule Index: 1 Access Protocol: any List of Client Match Hostnames, IP Addresses, Netgroups, or Domains: 0.0.0.0/0 RO Access Rule: any RW Access Rule: krb5 User ID To Which Anonymous Users Are Mapped: 65534 Superuser Security Types: none Honor SetUID Bits in SETATTR: true Allow Creation of Devices: true
エクスポートルールの作成ができました。
作成したエクスポートポリシーをボリュームntfs
に割り当てます。
# ボリューム ntfs にエクスポートポリシーを割り当て FsxId0f615ebf79c53ac7d::> volume modify -volume ntfs -policy krb5-policy Volume modify successful on volume ntfs of Vserver SVM. # ボリューム ntfs にエクスポートポリシーを割り当てられたことを確認 FsxId0f615ebf79c53ac7d::> volume show -fields policy vserver volume policy ------- -------- ---------------------- SVM SVM_root fsx-root-volume-policy SVM ntfs krb5-policy SVM unix test-policy 3 entries were displayed.
ファイル共有の作成
パスが/ntfs
のファイル共有share
を作成します。
# CIFSサーバーの確認 FsxId0f615ebf79c53ac7d::> cifs show Server Status Domain/Workgroup Authentication Vserver Name Admin Name Style ----------- --------------- --------- ---------------- -------------- SVM SVM up CORP domain # CIFSサーバーの詳細を確認 FsxId0f615ebf79c53ac7d::> cifs show -instance Vserver: SVM CIFS Server NetBIOS Name: SVM NetBIOS Domain/Workgroup Name: CORP Fully Qualified Domain Name: CORP.NON-97.NET Organizational Unit: OU=FSxForONTAP,DC=corp,DC=non-97,DC=net Default Site Used by LIFs Without Site Membership: Workgroup Name: - Authentication Style: domain CIFS Server Administrative Status: up CIFS Server Description: List of NetBIOS Aliases: - # 現在のファイル共有を確認 FsxId0f615ebf79c53ac7d::> cifs share show Vserver Share Path Properties Comment ACL -------------- ------------- ----------------- ---------- -------- ----------- SVM c$ / oplocks - BUILTIN\Administrators / Full Control browsable changenotify show-previous-versions SVM ipc$ / browsable - - 2 entries were displayed. # ファイル共有 share の作成 FsxId0f615ebf79c53ac7d::> cifs share create -share-name share -path /ntfs # ファイル共有が作成されたことを確認 FsxId0f615ebf79c53ac7d::> cifs share show -share-name share Vserver Share Path Properties Comment ACL -------------- ------------- ----------------- ---------- -------- ----------- SVM share /ntfs oplocks - Everyone / Full Control browsable changenotify show-previous-versions
ローカルユーザーの作成
Kerberos認証ではない場合に書き込みできないことも確認したいので、CIFSサーバー上にtest-user
というローカルユーザーを作成します。
# ローカルユーザー test-user を作成 FsxId0f615ebf79c53ac7d::> cifs users-and-groups local-user create -user-name test-user -is-account-disabled false Enter the password: Confirm the password: # ローカルユーザーが追加されたことを確認 FsxId0f615ebf79c53ac7d::> cifs users-and-groups local-user show Vserver User Name Full Name Description ------------ --------------------------- -------------------- ------------- SVM SVM\Administrator Built-in administrator account SVM SVM\test-user - - 2 entries were displayed.
AD DCからドメインユーザーで認証して動作確認
それでは動作確認です。
まず、AD DCからドメインのAdministratorユーザーで認証した場合に書き込みができるか確認します。
# 現在のユーザーを確認 > whoami corp\administrator # ドメインに参加していることを確認 > Get-WMIObject Win32_ComputerSystem Domain : corp.non-97.net Manufacturer : Amazon EC2 Model : t3.micro Name : EC2AMAZ-75JBQCK PrimaryOwnerName : EC2 TotalPhysicalMemory : 1043886080 # Zドライブに share をマウント > net use Z: \\SVM.CORP.NON-97.NET\share The command completed successfully. # マウントできたことを確認 > Get-PSDrive Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- Alias Alias C 15.94 14.06 FileSystem C:\ Users\Administrator Cert Certificate \ Env Environment Function Function HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE Variable Variable WSMan WSMan Z 0.00 0.95 FileSystem \\SVM.CORP.NON-97.NET\share # Zドライブ配下を確認 > ls Z: # Zドライブ配下にファイルを追加 > echo domain-user > Z:\domain-user.txt # ファイルが追加できたことを確認 > ls Z: Directory: Z:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 12/9/2022 12:56 AM 28 domain-user.txt
ファイルの追加ができました。ドメインユーザーでの認証は確かにKerberos認証であることが分かりますね。
ドメイン不参加コンピューターからローカルユーザーで認証して動作確認
次にドメイン不参加コンピューターからローカルユーザーで認証した場合に書き込みができるか確認します。
# 現在のユーザーを確認 > whoami ec2amaz-67ovdlv\ssm-user # ドメインに参加していないことを確認 > Get-WMIObject Win32_ComputerSystem Domain : WORKGROUP Manufacturer : Amazon EC2 Model : t3.micro Name : EC2AMAZ-67OVDLV PrimaryOwnerName : EC2 TotalPhysicalMemory : 1043886080 # ローカルユーザーの認証情報を使ってZドライブに share をマウント > net use Z: \\10.0.1.68\share The password is invalid for \\10.0.1.68\share. Enter the user name for '10.0.1.68': test-user Enter the password for 10.0.1.68: The command completed successfully. # マウントできたことを確認 > Get-PSDrive Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- Alias Alias C 13.97 16.03 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 0.95 FileSystem \\10.0.1.68\share # AD DCからドメインユーザーで認証した際のファイルがあることを確認 > ls Z: Directory: Z:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 12/9/2022 10:56 AM 28 domain-user.txt # Zドライブ配下にファイルを追加 > echo local-user > Z:\local-user.txt out-file : Access to the path 'Z:\local-user.txt' is denied. At line:1 char:1 + echo local-user > Z:\local-user.txt + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OpenError: (:) [Out-File], UnauthorizedAccessException + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand # Zドライブ配下のファイルを削除 > rm Z:\domain-user.txt rm : Cannot remove item Z:\domain-user.txt: Access to the path 'Z:\domain-user.txt' is denied. At line:1 char:1 + rm Z:\domain-user.txt + ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (Z:\domain-user.txt:FileInfo) [Remove-Item], UnauthorizedAccess Exception + FullyQualifiedErrorId : RemoveFileSystemItemUnAuthorizedAccess,Microsoft.PowerShell.Commands.RemoveItemCo mmand
マウントはできましたがファイルの書き込み、および削除をしようとした場合は拒否されました。ローカルユーザーの認証はNTLM認証のようですね。
ドメイン不参加コンピューターからドメインユーザーで認証して動作確認
ドメイン不参加コンピューターからローカルユーザーで認証した場合は書き込みできないことが分かりましたが、ドメイン不参加コンピューターからドメインユーザーで認証した場合は書き込みできるのでしょうか。
NTLMのパススルー認証になるため、書き込みできないと予想しますが確認してみます。
# 現在のユーザーを確認 > whoami ec2amaz-67ovdlv\ssm-user # ドメインのAdministratorユーザーの認証情報を使ってZドライブに share をマウント > net use Z: \\10.0.1.68\share The password is invalid for \\10.0.1.68\share. Enter the user name for '10.0.1.68': CORP\Administrator Enter the password for 10.0.1.68: The command completed successfully. # マウントできたことを確認 > Get-PSDrive Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- Alias Alias C 14.00 15.99 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 0.95 FileSystem \\10.0.1.68\share # AD DCからドメインユーザーで認証した際のファイルがあることを確認 > ls Z:\ Directory: Z:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 12/9/2022 10:56 AM 28 domain-user.txt # Zドライブ配下にファイルを追加 > echo domain-user-2 > Z:\domain-user-2.txt out-file : Access to the path 'Z:\domain-user-2.txt' is denied. At line:1 char:1 + echo domain-user-2 > Z:\domain-user-2.txt + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OpenError: (:) [Out-File], UnauthorizedAccessException + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand
やはり書き込みは拒否されました。
NTLM認証をしたクライアントのみ読み書きを許可
エクスポートルールの編集
次にNTLM認証をしたクライアントのみ読み書きを許可するように、エクスポートルールを編集します。
# NTLM認証をしたクライアントのみ読み書きを許可するようにエクスポートルールを編集 FsxId0f615ebf79c53ac7d::> export-policy rule modify -vserver SVM -policyname krb5-policy -ruleindex 1 -rorule ntlm -rwrule ntlm # エクスポートルールが変更されたことを確認 FsxId0f615ebf79c53ac7d::> export-policy rule show -vserver SVM -policyname krb5-policy -instance Vserver: SVM Policy Name: krb5-policy Rule Index: 1 Access Protocol: any List of Client Match Hostnames, IP Addresses, Netgroups, or Domains: 0.0.0.0/0 RO Access Rule: ntlm RW Access Rule: ntlm User ID To Which Anonymous Users Are Mapped: 65534 Superuser Security Types: none Honor SetUID Bits in SETATTR: true Allow Creation of Devices: true
ドメイン不参加コンピューターからローカルユーザーで認証して動作確認
それでは、ドメイン不参加コンピューターからローカルユーザーで認証して、読み書きができるか確認します。
# 現在のユーザーを確認 > whoami ec2amaz-67ovdlv\ssm-user # ドメインに参加していないことを確認 > Get-WMIObject Win32_ComputerSystem Domain : WORKGROUP Manufacturer : Amazon EC2 Model : t3.micro Name : EC2AMAZ-67OVDLV PrimaryOwnerName : EC2 TotalPhysicalMemory : 1043886080 # ローカルユーザーの認証情報を使ってZドライブに share をマウント > net use Z: \\10.0.1.68\share The password is invalid for \\10.0.1.68\share. Enter the user name for '10.0.1.68': test-user Enter the password for 10.0.1.68: The command completed successfully. # マウントできたことを確認 > Get-PSDrive Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- Alias Alias C 14.00 15.99 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 0.95 FileSystem \\10.0.1.68\share # AD DCからドメインユーザーで認証した際のファイルがあることを確認 > ls Z: Directory: Z:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 12/9/2022 10:56 AM 28 domain-user.txt # Zドライブ配下にファイルを追加 > echo local-user > Z:\local-user.txt # ファイルが追加されたことを確認 > ls Z: Directory: Z:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 12/9/2022 10:56 AM 28 domain-user.txt -a---- 12/9/2022 11:30 AM 26 local-user.txt
読み書きできましたね。やはりローカルユーザーを使った認証はNTLM認証であることが分かります。
ドメイン不参加コンピューターからドメインユーザーで認証して動作確認
次にドメイン不参加コンピューターからドメインユーザーで認証した場合に読み書きができるか確認します。
# 現在のユーザーを確認 > whoami ec2amaz-67ovdlv\ssm-user # ドメインのAdministratorユーザーの認証情報を使ってZドライブに share をマウント > net use Z: \\10.0.1.68\share The password is invalid for \\10.0.1.68\share. Enter the user name for '10.0.1.68': CORP\Administrator Enter the password for 10.0.1.68: The command completed successfully. # マウントできたことを確認 > Get-PSDrive Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- Alias Alias C 14.00 15.99 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 0.95 FileSystem \\10.0.1.68\share # Zドライブ配下を確認 > ls Z: Directory: Z:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 12/9/2022 10:56 AM 28 domain-user.txt -a---- 12/9/2022 11:30 AM 26 local-user.txt # Zドライブ配下にファイルを追加 > echo domain-user-2 > Z:\domain-user-2.txt # ファイルが追加できたことを確認 > ls Z: Directory: Z:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 12/9/2022 10:56 AM 28 domain-user.txt -a---- 12/9/2022 11:32 AM 30 domain-user-2.txt -a---- 12/9/2022 11:30 AM 26 local-user.txt
読み書きできました。逆に言えばドメイン参加していないコンピューターからのアクセスを拒否したい場合は、NTLMに対しての許可を与えなければよさそうです。
AD DCからドメインユーザーで認証して動作確認
次にAD DCからドメインのAdministratorユーザーで認証した場合に読み書きできるか確認します。
# 現在のユーザーを確認 > whoami corp\administrator # マウントしたままだったのでエクスポートポリシーが即座に効いているか確認 # Zドライブ配下の確認 > ls Z:\ ls : Access is denied At line:1 char:1 + ls Z:\ + ~~~~~~ + CategoryInfo : PermissionDenied: (Z:\:String) [Get-ChildItem], UnauthorizedAccessException + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand ls : Cannot find path 'Z:\' because it does not exist. At line:1 char:1 + ls Z:\ + ~~~~~~ + CategoryInfo : ObjectNotFound: (Z:\:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand # ファイルの内容出力 > cat Z:\domain-user.txt cat : Access is denied At line:1 char:1 + cat Z:\domain-user.txt + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (Z:\domain-user.txt:String) [Get-Content], UnauthorizedAccessException + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetContentCommand cat : Cannot find path 'Z:\domain-user.txt' because it does not exist. At line:1 char:1 + cat Z:\domain-user.txt + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Z:\domain-user.txt:String) [Get-Content], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand # アンマウント > net use Z: /delete Z: was deleted successfully. # 再マウント > net use Z: \\SVM.CORP.NON-97.NET\share The command completed successfully. # Zドライブにマウントできたことを確認 > Get-PSDrive Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- Alias Alias C 15.90 14.10 FileSystem C:\ Users\Administrator Cert Certificate \ Env Environment Function Function HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE Variable Variable WSMan WSMan Z FileSystem \\SVM.CORP.NON-97.NET\share # 継続してアクセスできないことを確認 # Zドライブ配下の確認 > ls Z:\ ls : Access is denied At line:1 char:1 + ls Z:\ + ~~~~~~ + CategoryInfo : PermissionDenied: (Z:\:String) [Get-ChildItem], UnauthorizedAccessException + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand ls : Cannot find path 'Z:\' because it does not exist. At line:1 char:1 + ls Z:\ + ~~~~~~ + CategoryInfo : ObjectNotFound: (Z:\:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand # ファイルの内容出力 > cat Z:\domain-user.txt cat : Access is denied At line:1 char:1 + cat Z:\domain-user.txt + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (Z:\domain-user.txt:String) [Get-Content], UnauthorizedAccessException + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetContentCommand cat : Cannot find path 'Z:\domain-user.txt' because it does not exist. At line:1 char:1 + cat Z:\domain-user.txt + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Z:\domain-user.txt:String) [Get-Content], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand > net use Z: /delete Z: was deleted successfully. (PowerShellの別セッションで以下の操作) # ドメインのAdministratorユーザーの認証情報を使ってZドライブに share をマウント (1回目) > net use Z: \\SVM.CORP.NON-97.NET\share The password is invalid for \\SVM.CORP.NON-97.NET\share. Enter the user name for 'SVM.CORP.NON-97.NET': CORP\Administrator Enter the password for SVM.CORP.NON-97.NET: System error 5 has occurred. Access is denied. # ドメインのAdministratorユーザーの認証情報を使ってZドライブに share をマウント (2回目) > net use Z: \\SVM.CORP.NON-97.NET\share The password is invalid for \\SVM.CORP.NON-97.NET\share. Enter the user name for 'SVM.CORP.NON-97.NET': corp.non-97.net\Administrator Enter the password for SVM.CORP.NON-97.NET: System error 5 has occurred. Access is denied. # ドメインの FSxAdmin ユーザーの認証情報を使ってZドライブに share をマウント > net use Z: \\SVM.CORP.NON-97.NET\share The password is invalid for \\SVM.CORP.NON-97.NET\share. Enter the user name for 'SVM.CORP.NON-97.NET': CORP\FSxAdmin Enter the password for SVM.CORP.NON-97.NET: System error 5 has occurred. Access is denied.
Access is denied
とマウントを拒否されました。パスワードが間違っている場合はThe user name or password is incorrect.
と表示されるため、Kerberos認証を使用している場合はエクスポートポリシーによって拒否されていることが分かります。
AD DCからローカルユーザーで認証して動作確認
最後にAD DCからローカルユーザーで認証した場合はマウントできるか確認します。
# 現在のユーザーを確認 > whoami corp\administrator # ローカルユーザーの認証情報を使ってZドライブに share をマウント > net use Z: \\SVM.CORP.NON-97.NET\share The password is invalid for \\SVM.CORP.NON-97.NET\share. Enter the user name for 'SVM.CORP.NON-97.NET': SVM\test-user Enter the password for SVM.CORP.NON-97.NET: The command completed successfully. # マウントできたことを確認 > Get-PSDrive Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- Alias Alias C 15.94 14.06 FileSystem C:\ Users\Administrator Cert Certificate \ Env Environment Function Function HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE Variable Variable WSMan WSMan Z 0.00 0.95 FileSystem \\SVM.CORP.NON-97.NET\share # Zドライブ配下を確認 > ls Z: Directory: Z:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 12/9/2022 12:56 AM 28 domain-user.txt -a---- 12/9/2022 1:32 AM 30 local-user-2.txt -a---- 12/9/2022 1:30 AM 26 local-user.txt
ドメイン参加していてもローカルユーザーで認証すれば、アクセスできました。
ルートボリュームへの読み取りを拒否している状態で配下のボリュームにアクセスできるか
最後にエクスポートポリシーでルートボリュームへの読み取りを拒否している状態で、配下のボリュームにアクセスできるか検証してみます。
NFSv4で/unix
をSMBで/ntfs
をマウントしています。
# NFSv4で /unix をマウントしていることを確認 $ mount | grep nfs4 svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix on /mnt/fsxn type nfs4 (rw,relatime,vers=4.1,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.0.1.6,local_lock=none,addr=10.0.1.68) # マウントポイント配下にアクセスできることを確認 $ ls -l /mnt/fsxn/ total 0 -rw-r--r-- 1 root root 13 Dec 9 05:21 nfs-client-1.txt -rw-r--r-- 1 root root 13 Dec 9 05:36 nfs-client-2.txt
# /ntfs のファイル共有 share をZドライブにマウントしていることを確認 > Get-PSDrive Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- Alias Alias C 15.94 14.06 FileSystem C:\ Users\Administrator Cert Certificate \ Env Environment Function Function HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE Variable Variable WSMan WSMan Z 0.00 0.95 FileSystem \\SVM.CORP.NON-97.NET\share # Zドライブ配下にアクセスできることを確認 > ls Z: Directory: Z:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 12/9/2022 12:56 AM 28 domain-user.txt -a---- 12/9/2022 1:32 AM 30 local-user-2.txt -a---- 12/9/2022 1:30 AM 26 local-user.txt
この状態でルートボリュームのエクスポートポリシーfsx-root-volume-policy
を編集して、読み取りも拒否するようにします。
# 現在のエクスポートルールの確認 FsxId0f615ebf79c53ac7d::> export-policy rule show -policyname fsx-root-volume-policy -instance Vserver: SVM Policy Name: fsx-root-volume-policy Rule Index: 1 Access Protocol: any List of Client Match Hostnames, IP Addresses, Netgroups, or Domains: 0.0.0.0/0 RO Access Rule: any RW Access Rule: never User ID To Which Anonymous Users Are Mapped: 65534 Superuser Security Types: any Honor SetUID Bits in SETATTR: true Allow Creation of Devices: true # 読み取りを拒否するよう変更 FsxId0f615ebf79c53ac7d::> export-policy rule modify -policyname fsx-root-volume-policy -ruleindex 1 -rorule never # 変更されたことを確認 FsxId0f615ebf79c53ac7d::> export-policy rule show -policyname fsx-root-volume-policy -instance Vserver: SVM Policy Name: fsx-root-volume-policy Rule Index: 1 Access Protocol: any List of Client Match Hostnames, IP Addresses, Netgroups, or Domains: 0.0.0.0/0 RO Access Rule: never RW Access Rule: never User ID To Which Anonymous Users Are Mapped: 65534 Superuser Security Types: any Honor SetUID Bits in SETATTR: true Allow Creation of Devices: true
それでは、動作確認を行います。
まずはNFSからです。
# NFSクライアントのIPアドレスを確認 $ hostname -i 10.0.1.6 # エクスポートポリシーが即座に効いているか確認 # マウントポイント配下へのアクセス $ ls -l /mnt/fsxn/ total 0 -rw-r--r-- 1 root root 13 Dec 11 09:17 nfs-client-1.txt -rw-r--r-- 1 root root 13 Dec 11 09:23 nfs-client-2.txt # ファイルの内容出力 $ cat /mnt/fsxn/nfs-client-1.txt nfs-client-1 # 一度アンマウント $ sudo umount /mnt/fsxn/ # 再マウント $ sudo mount -t nfs -o vers=4.1 svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix /mnt/fsxn/ mount.nfs: Operation not permitted $ sudo mount -t nfs -o vers=4.1 svm-0c325ec2eef34fc83.fs-0f615ebf79c53ac7d.fsx.us-east-1.amazonaws.com:/unix /mnt/fsxn/ -v mount.nfs: timeout set for Sun Dec 11 09:55:33 2022 mount.nfs: trying text-based options 'vers=4.1,addr=10.0.1.68,clientaddr=10.0.1.6' mount.nfs: mount(2): Operation not permitted mount.nfs: Operation not permitted
再マウントしようとするとOperation not permitted
で拒否されるようになりました。
NFSの時は上位のジャンクションパスのボリューム,qtreeのエクスポートポリシーで読み取りが許可されているか意識する必要がありますね。
続いてSMBの動作確認です。
# エクスポートポリシーが即座に効いているか確認 # Zドライブ配下の確認 > ls Z: Directory: Z:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 12/11/2022 12:01 AM 28 domain-user.txt # ファイルの内容出力 > cat Z:\domain-user.txt domain-user # 一度アンマウント > net use Z: /delete Z: was deleted successfully. # 再マウント > net use Z: \\SVM.CORP.NON-97.NET\share The command completed successfully. # Zドライブ配下の確認 > ls Z: Directory: Z:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 12/11/2022 12:01 AM 28 domain-user.txt # ファイルの内容出力 > cat Z:\domain-user.txt domain-user
SMBの場合は上位のジャンクションパスのボリューム,qtreeのエクスポートポリシーの影響を受けないようですね。
なお、ルートボリュームのファイル共有c$
をマウントしようとするとちゃんと拒否されるので、ルートボリュームへの読み取りを拒否するというエクスポートポリシーはちゃんとは効いています。
# 一度アンマウント > net use Z: /delete Z: was deleted successfully. # ルートボリュームのファイル共有 c$ をZドライブにマウント > net use Z: \\SVM.CORP.NON-97.NET\c$ The password is invalid for \\SVM.CORP.NON-97.NET\c$. Enter the user name for 'SVM.CORP.NON-97.NET': CORP\Administrator Enter the password for SVM.CORP.NON-97.NET: System error 5 has occurred. Access is denied.
ACLで表現しづらい部分はエクスポートポリシーで表現しよう
Amazon FSx for NetApp ONTAPのエクスポートポリシーでボリュームにアクセスできるクライアントを制御してみました。
IPアドレスや認証に使用したプロトコルなどACLで表現できないものについては、エクスポートポリシーで表現することでカバーできそうです。
ただし、エクスポートポリシーの管理者とACLの管理者が異なる場合、「設定したはずなのにアクセスできない...」のように思わぬ挙動が発生すると予想されます。エクスポートポリシーでどのような制御をしているのかは共有しておくと良いでしょう。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!