この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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)でした!