この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Amazon FSx for NetApp ONTAP上に大量のファイル共有の設定を移行したい
こんにちは、のんピ(@non____97)です。
皆さんはAmazon FSx for NetApp ONTAP(以降FSx for ONTAP)上に大量のファイル共有の設定を移行したいなと思ったことはありますか? 私はあります。
FSx for ONTAPへの移行でパッと思いつくのはDataSyncだと思います。しかし、以下記事の通り、DataSyncはファイル共有同士のファイル・フォルダの移行であり、ファイル共有自体の設定は移行してくれません。
他にも思いつくのはDataSyncでファイルやフォルダ、メタデータを同期後に、Get-SmbShareやGet-SmbShareAccessで現行ファイルサーバーの共有設定を取得して、New-SmbShareやGrant-SmbShareAccessで移行先に同じ共有設定をしてあげるような形かと思います。
しかし、FSx for ONTAPではWinRMのポート(tcp/5985)が開いていないため、上述の手法ではファイル共有を作成することはできません。
ちなみに、FSx for Windows File Serverではファイル共有の設定をPowerShellで移行できます。
FSx for ONTAPだとWinRMで使えないのであれば... となればONTAP REST APIの出番ですね。ONTAP REST APIを使うことによってONTAP CLIを使わずとも外部からファイル共有の作成ができます。
ただし、REST APIに慣れていないとスクリプトを書くのもなかなか大変です。
そんな救世主として NetApp.ONTAP PowerShell Toolkit なるPowerShellのモジュールが公開されています。
NetApp.ONTAP PowerShell Toolkitを使って、現行ファイルサーバー上の複数のファイル共有をFSx for ONTAP上に作成してみました。
いきなりまとめ
- NetApp.ONTAP PowerShell Toolkitを使ったスクリプトにより、現行ファイルサーバーのファイル共有の設定と(ほぼ)同じ設定のファイル共有をFSx for ONTAP上に作成することができる
- 細かいACLの設定にONTAP REST APIがサポートしていないことがあるので注意
NetApp.ONTAP PowerShell Toolkit とは
NetApp.ONTAP PowerShell ToolkitとはONTAP REST APIをラッピングしたPowerShellのモジュールです。
こちらのモジュールをインポートすることにより、ONTAP REST APIに対応したPowerShellのコマンドレットを実行することができるようになります。
以前の記事で紹介したNetApp ONTAP Python client libraryのPowerShell版です。
現在のバージョンは9.11.1.2208で、ONTAPのバージョンに対応しています。
モジュールはWindows、Ubuntu、RHEL、および macOSにインポートすることが可能です。2022/12/5時点の最新のバージョンである9.11.1.2208のインストール要件は以下の通りです。
- Windows
ソフトウェア | バージョン |
---|---|
Microsoft Windows PowerShell | 5.1 or 7.0.3 or later |
Microsoft .NET Framework | .NET Framework 4.7.2 |
Microsoft Windows | 8.1,10, Server 2012 R2, 2016, 2019 |
- RHEL
ソフトウェア | バージョン |
---|---|
Microsoft Windows PowerShell | 7.0.3 or later |
RHEL | 7 |
- Ubuntu
ソフトウェア | バージョン |
---|---|
Microsoft Windows PowerShell | 7.0.3 or later |
Ubuntu | 18.0.4 |
- macOS
ソフトウェア | バージョン |
---|---|
Microsoft Windows PowerShell | 7.0.3 or later |
Apple MacOS | 10.13 and later |
Netapp PowerShell Toolkit Best Practices Guideなるベストプラクティスガイドも試す場合は目を通しておきましょう。
また、NetApp.ONTAP PowerShell Toolkitはコミュニティサポートです。NetAppのサポート窓口ではサポートされないので注意しましょう。
検証環境
検証環境は以下の通りです。
Windows Serverを現行ファイルサーバーと見立てて複数のファイル共有を作成します。
AD DCにNetApp.ONTAP PowerShell Toolkitを使ったスクリプトを実行し、現行ファイルサーバーのファイル共有と同じ設定のファイル共有をFSx for ONTAP上に作成します。
AD DCについては以下記事の検証で使用したものを流用します。
ファイル共有の作成
現行ファイルサーバーに見立てたWindows Server上にファイル共有を作成します。
まず、Windows Serverをドメイン参加させます。ホスト名はFILE-SHARE
とします。
> Get-WMIObject Win32_ComputerSystem
Domain : corp.non-97.net
Manufacturer : Amazon EC2
Model : t3.micro
Name : FILE-SHARE
PrimaryOwnerName : EC2
TotalPhysicalMemory : 1043886080
ドメイン参加後、Cドライブ配下にdata
というフォルダを作成します。そしてdata
配下にファイル共有用のフォルダを作成し、共有設定を行います。
AD DCから現行ファイルサーバーに接続して、ファイル共有一覧と、ファイル共有のACLを確認します。
# CIM セッションを作成
$src_cim = New-CimSession -ComputerName FILE-SHARE.corp.non-97.net
# ファイル共有一覧を確認
> Get-SmbShare -CimSession $src_cim -Special $false
Name ScopeName Path Description PSComputerName
---- --------- ---- ----------- --------------
share1 * C:\data\share1 FILE-SHARE.corp.non-97.net
share2 * C:\data\share2 FILE-SHARE.corp.non-97.net
share3 * C:\data\share1\share3 FILE-SHARE.corp.non-97.net
share4 * C:\data\share2\folder\share4 FILE-SHARE.corp.non-97.net
# 各ファイル共有のACLを確認
> Get-SmbShareAccess -CimSession $src_cim -Name @("share1", "share2", "share3", "share4")
Name ScopeName AccountName AccessControlType AccessRight PSComputerName
---- --------- ----------- ----------------- ----------- --------------
share1 * BUILTIN\Administrators Allow Full FILE-SHARE.corp.non-97.net
share1 * Everyone Allow Full FILE-SHARE.corp.non-97.net
share2 * BUILTIN\Administrators Allow Full FILE-SHARE.corp.non-97.net
share3 * Everyone Allow Read FILE-SHARE.corp.non-97.net
share3 * CORP\FSxAdmin Allow Full FILE-SHARE.corp.non-97.net
share4 * CORP\user01 Deny Full FILE-SHARE.corp.non-97.net
share4 * Everyone Allow Read FILE-SHARE.corp.non-97.net
share4 * CORP\FSxAdmin Allow Change FILE-SHARE.corp.non-97.net
share4 * CORP\FSxAdminGroup Allow Read FILE-SHARE.corp.non-97.net
FSx for ONTAPのボリュームの準備
次に、FSx for ONTAPのボリュームの準備を行います。
ボリュームのジャンクションパスは現行ファイルサーバーのdata
配下のフォルダと同じような構成になるよう設定します。
作成したFSx for ONTAPファイルシステムとSVM、ボリュームは以下の通りです。
# FSx for ONTAPファイルシステム
$ aws fsx describe-file-systems
{
"FileSystems": [
{
"OwnerId": "<AWSアカウントID>",
"CreationTime": "2022-12-05T01:04:35.935000+00:00",
"FileSystemId": "fs-00f3521e554119927",
"FileSystemType": "ONTAP",
"Lifecycle": "AVAILABLE",
"StorageCapacity": 1024,
"StorageType": "SSD",
"VpcId": "vpc-08b84da1f793ed513",
"SubnetIds": [
"subnet-08dc789896a48a3b4"
],
"NetworkInterfaceIds": [
"eni-02474777797d74791",
"eni-0ef77474295f9589d"
],
"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-00f3521e554119927",
"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-00f3521e554119927.fsx.us-east-1.amazonaws.com",
"IpAddresses": [
"10.0.1.101",
"10.0.1.125"
]
},
"Management": {
"DNSName": "management.fs-00f3521e554119927.fsx.us-east-1.amazonaws.com",
"IpAddresses": [
"10.0.1.126"
]
}
},
"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-05T01:09:30.133000+00:00",
"Endpoints": {
"Iscsi": {
"DNSName": "iscsi.svm-06ea202c6382a01e2.fs-00f3521e554119927.fsx.us-east-1.amazonaws.com",
"IpAddresses": [
"10.0.1.104",
"10.0.1.68"
]
},
"Management": {
"DNSName": "svm-06ea202c6382a01e2.fs-00f3521e554119927.fsx.us-east-1.amazonaws.com",
"IpAddresses": [
"10.0.1.90"
]
},
"Nfs": {
"DNSName": "svm-06ea202c6382a01e2.fs-00f3521e554119927.fsx.us-east-1.amazonaws.com",
"IpAddresses": [
"10.0.1.90"
]
},
"Smb": {
"DNSName": "SVM.corp.non-97.net",
"IpAddresses": [
"10.0.1.90"
]
}
},
"FileSystemId": "fs-00f3521e554119927",
"Lifecycle": "CREATED",
"Name": "SVM",
"ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-00f3521e554119927/svm-06ea202c6382a01e2",
"StorageVirtualMachineId": "svm-06ea202c6382a01e2",
"Subtype": "DEFAULT",
"UUID": "7d313a57-7439-11ed-acaf-79eab5a2c0a3"
}
]
}
# ボリューム
$ aws fsx describe-volumes
{
"Volumes": [
{
"CreationTime": "2022-12-05T01:09:43+00:00",
"FileSystemId": "fs-00f3521e554119927",
"Lifecycle": "CREATED",
"Name": "SVM_root",
"OntapConfiguration": {
"FlexCacheEndpointType": "NONE",
"JunctionPath": "/",
"SecurityStyle": "NTFS",
"SizeInMegabytes": 1024,
"StorageEfficiencyEnabled": false,
"StorageVirtualMachineId": "svm-06ea202c6382a01e2",
"StorageVirtualMachineRoot": true,
"TieringPolicy": {
"Name": "NONE"
},
"UUID": "80376ed4-7439-11ed-acaf-79eab5a2c0a3",
"OntapVolumeType": "RW"
},
"ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-00f3521e554119927/fsvol-050f8213db813435a",
"VolumeId": "fsvol-050f8213db813435a",
"VolumeType": "ONTAP"
},
{
"CreationTime": "2022-12-05T01:25:50.618000+00:00",
"FileSystemId": "fs-00f3521e554119927",
"Lifecycle": "CREATED",
"Name": "vol1",
"OntapConfiguration": {
"FlexCacheEndpointType": "NONE",
"JunctionPath": "/share1",
"SizeInMegabytes": 1024,
"StorageEfficiencyEnabled": false,
"StorageVirtualMachineId": "svm-06ea202c6382a01e2",
"StorageVirtualMachineRoot": false,
"TieringPolicy": {
"Name": "NONE"
},
"UUID": "cb013ef3-743b-11ed-acaf-79eab5a2c0a3",
"OntapVolumeType": "RW"
},
"ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-00f3521e554119927/fsvol-0b8c831fe3e882f08",
"VolumeId": "fsvol-0b8c831fe3e882f08",
"VolumeType": "ONTAP"
},
{
"CreationTime": "2022-12-05T01:26:05.844000+00:00",
"FileSystemId": "fs-00f3521e554119927",
"Lifecycle": "CREATED",
"Name": "vol2",
"OntapConfiguration": {
"FlexCacheEndpointType": "NONE",
"JunctionPath": "/share2",
"SizeInMegabytes": 1024,
"StorageEfficiencyEnabled": false,
"StorageVirtualMachineId": "svm-06ea202c6382a01e2",
"StorageVirtualMachineRoot": false,
"TieringPolicy": {
"Name": "NONE"
},
"UUID": "d77f0041-743b-11ed-acaf-79eab5a2c0a3",
"OntapVolumeType": "RW"
},
"ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-00f3521e554119927/fsvol-0e8e324f3ef670639",
"VolumeId": "fsvol-0e8e324f3ef670639",
"VolumeType": "ONTAP"
},
{
"CreationTime": "2022-12-05T01:26:24.767000+00:00",
"FileSystemId": "fs-00f3521e554119927",
"Lifecycle": "CREATED",
"Name": "vol3",
"OntapConfiguration": {
"FlexCacheEndpointType": "NONE",
"JunctionPath": "/share1/share3",
"SizeInMegabytes": 1024,
"StorageEfficiencyEnabled": false,
"StorageVirtualMachineId": "svm-06ea202c6382a01e2",
"StorageVirtualMachineRoot": false,
"TieringPolicy": {
"Name": "NONE"
},
"UUID": "e39612a2-743b-11ed-acaf-79eab5a2c0a3",
"OntapVolumeType": "RW"
},
"ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-00f3521e554119927/fsvol-0f61ae8d485189939",
"VolumeId": "fsvol-0f61ae8d485189939",
"VolumeType": "ONTAP"
},
{
"CreationTime": "2022-12-05T01:27:31.886000+00:00",
"FileSystemId": "fs-00f3521e554119927",
"Lifecycle": "CREATED",
"Name": "vol4",
"OntapConfiguration": {
"FlexCacheEndpointType": "NONE",
"JunctionPath": "/share2/folder/share4",
"SizeInMegabytes": 1024,
"StorageEfficiencyEnabled": false,
"StorageVirtualMachineId": "svm-06ea202c6382a01e2",
"StorageVirtualMachineRoot": false,
"TieringPolicy": {
"Name": "NONE"
},
"UUID": "0865444f-743c-11ed-acaf-79eab5a2c0a3",
"OntapVolumeType": "RW"
},
"ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-00f3521e554119927/fsvol-0e82b245a30602da9",
"VolumeId": "fsvol-0e82b245a30602da9",
"VolumeType": "ONTAP"
}
]
}
ちょっと見づらいですね。関係あるところはボリューム周りなので、ONTAP CLIでピックアップして確認します。
# ボリューム一覧の確認
FsxId00f3521e554119927::> volume show
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
SVM SVM_root aggr1 online RW 1GB 972.4MB 0%
SVM vol1 aggr1 online RW 1GB 972.5MB 0%
SVM vol2 aggr1 online RW 1GB 972.5MB 0%
SVM vol3 aggr1 online RW 1GB 972.5MB 0%
SVM vol4 aggr1 online RW 1GB 972.5MB 0%
5 entries were displayed.
# ボリュームのジャンクションパスを確認
FsxId00f3521e554119927::> volume show -fields junction-path
vserver volume junction-path
------- -------- -------------
SVM SVM_root /
SVM vol1 /share1
SVM vol2 /share2
SVM vol3 /share1/share3
SVM vol4 /share2/folder/share4
5 entries were displayed.
また、ファイル共有はc$
とipc$
のみです。
FsxId00f3521e554119927::> 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.
NetApp.ONTAP PowerShell Toolkitのインストール
次にNetApp.ONTAP PowerShell Toolkitのインストールします。
まず、前提条件を満たしているか確認します。
# .NET Frameworkのバージョンが4.7以上か
> Get-Item 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full'
Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4
Name Property
---- --------
Full CBS : 1
Install : 1
InstallPath : C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
Release : 528449
Servicing : 0
TargetVersion : 4.0.0
Version : 4.8.04161
# PowerShellのバージョンが5.1 or 7.0.3 以上か
> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.20348.859
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.20348.859
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
# OSがWindows Server 2012以上か
> Get-WmiObject Win32_OperatingSystem
SystemDirectory : C:\Windows\system32
Organization : Amazon.com
BuildNumber : 20348
RegisteredUser : EC2
SerialNumber : 00454-60000-00001-AA267
Version : 10.0.20348
各前提条件は満たしていますね。
それでは、NetApp.ONTAP PowerShell Toolkitのインストールを行います。
# インストール
> Install-Module -Name NetApp.ONTAP
NuGet provider is required to continue
PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGet
provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or
'C:\Users\Administrator\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider by
running 'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install
and import the NuGet provider now?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y
Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): Y
# インストールされたことを確認
> Get-Module
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 3.1.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Content, Clear...
Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, Clear-Variable, Compare-Object, Convert-String...
Manifest 9.11.1.... NetApp.ONTAP {Add-NaAggr, Add-NaCifsShare, Add-NaCredential, Add-NaFpolicyExtensio...
Binary 1.0.0.1 PackageManagement {Find-Package, Find-PackageProvider, Get-Package, Get-PackageProvider...
Script 1.0.0.1 PowerShellGet {Find-Command, Find-DscResource, Find-Module, Find-RoleCapability, Fi...
Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PSReadLineKey...
インストールされましたね。
次にインストールされたコマンドレットを確認します。全部で2,340個ほどあるとのことなので、先頭10件のみ表示します。
> Get-Command -Module NetApp.ONTAP |
Select-Object -First 10 |
Format-Table -AutoSize -Wrap
CommandType Name Version Source
----------- ---- ------- ------
Alias Add-NcHostIscsiConnection 9.11.1.2208 NetApp.ONTAP
Alias Connect-NcHostIscsiTarget 9.11.1.2208 NetApp.ONTAP
Alias ConvertTo-NcLun 9.11.1.2208 NetApp.ONTAP
Alias ConvertTo-NcVhd 9.11.1.2208 NetApp.ONTAP
Alias ConvertTo-NcVhdx 9.11.1.2208 NetApp.ONTAP
Alias ConvertTo-NcVmdk 9.11.1.2208 NetApp.ONTAP
Alias Copy-NcHostFile 9.11.1.2208 NetApp.ONTAP
Alias Disconnect-NcHostIscsiTarget 9.11.1.2208 NetApp.ONTAP
Alias Dismount-NcHostVolume 9.11.1.2208 NetApp.ONTAP
Alias Dismount-NcVirtualDisk 9.11.1.2208 NetApp.ONTAP
コマンドレットが認識されていますね。
コマンドレットのヘルプも確認します。試しにAdd-NcHostIscsiConnection
のヘルプの確認です。
> Get-Help Add-NcHostIscsiConnection
Do you want to run Update-Help?
The Update-Help cmdlet downloads the most current Help files for Windows PowerShell modules, and installs them on your computer.
For more information about the Update-Help cmdlet, see https:/go.microsoft.com/fwlink/?LinkId=210614.
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y
NAME
Add-NaHostIscsiConnection
SYNOPSIS
Add a connection to an existing iSCSI session.
SYNTAX
Add-NaHostIscsiConnection [-SessionId] <String> [-TargetIp <String>] [-TargetPort <UInt16>] [-InitiatorIp <String>]
[-HeaderDigest] [-DataDigest] [<CommonParameters>]
Add-NaHostIscsiConnection [-SessionId] <String> [-TargetIp <String>] [-TargetPort <UInt16>] [-InitiatorIp <String>]
[-Credential <PSCredential>] [-MutualChap] [-HeaderDigest] [-DataDigest] [-RadiusVerify] [<CommonParameters>]
Add-NaHostIscsiConnection [-SessionId] <String> [-TargetIp <String>] [-TargetPort <UInt16>] [-InitiatorIp <String>]
[-MutualChap] [-HeaderDigest] [-DataDigest] [-RadiusGenerate] [-RadiusVerify] [<CommonParameters>]
DESCRIPTION
Add a connection to an existing iSCSI session.
RELATED LINKS
Remove-NaHostIscsiConnection
REMARKS
To see the examples, type: "get-help Add-NaHostIscsiConnection -examples".
For more information, type: "get-help Add-NaHostIscsiConnection -detailed".
For technical information, type: "get-help Add-NaHostIscsiConnection -full".
For online help, type: "get-help Add-NaHostIscsiConnection -online"
ヘルプの確認もできました。例やパラメーターの詳細は末尾に-examples
や-detailed
を付与するようです。
ブラウザで確認したいよ!! という方はC:\Program Files\WindowsPowerShell\Modules\NetApp.ONTAP\9.11.1.2208\webhelp.C
に各コマンドレットのHTMLのマニュアルがあるので、こちらからご確認ください。
> ls "C:\Program Files\WindowsPowerShell\Modules\NetApp.ONTAP\9.11.1.2208\webhelp.C" | Select-Object -First 10
Directory: C:\Program Files\WindowsPowerShell\Modules\NetApp.ONTAP\9.11.1.2208\webhelp.C
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 5/10/2021 4:33 PM 333036 apis.html
-a---- 5/10/2021 4:33 PM 8558 categories.html
-a---- 5/10/2021 4:33 PM 3559 cat_active directory.html
-a---- 5/10/2021 4:33 PM 12349 cat_aggr.html
-a---- 5/10/2021 4:33 PM 4771 cat_antivirus.html
-a---- 5/10/2021 4:33 PM 2933 cat_audit.html
-a---- 5/10/2021 4:33 PM 6953 cat_autosupport.html
-a---- 5/10/2021 4:33 PM 5797 cat_cf.html
-a---- 5/10/2021 4:33 PM 21695 cat_cifs.html
-a---- 5/10/2021 4:33 PM 2943 cat_clock.html
こちらのHTMLファイルをブラウザで開くと以下のようなります。
NetApp.ONTAP PowerShell Toolkitを使ったFSx for ONTAPへの接続
NetApp.ONTAP PowerShell Toolkitを使ってFSx for ONTAPへ接続を行います。
接続はConnect-NcController
を使用します。実行結果は以下の通りです。
> Connect-NcController management.fs-00f3521e554119927.fsx.us-east-1.amazonaws.com -Credential fsxadmin
Name Address Vserver Version
---- ------- ------- -------
management.fs-00f... 10.0.1.126 NetApp Release 9.11.1P3: Thu Sep 29 16:06:51 UTC 2022
途中認証情報を入力するためのウィンドウが表示されます。fsxadmin
のパスワードを入力してOK
をクリックします。
接続ができたら、CIFSサーバーとファイル共有を確認します。
# CIFSサーバーの一覧
> Get-NcCifsServer
CifsServer AuthStyle Domain OrganizationalUnit
---------- --------- ------ ------------------
SVM CORP.NON-97.NET OU=FSxForONTAP,DC=corp...
# ファイル共有の一覧
> Get-NcCifsShare
CifsServer ShareName Path Comment
---------- --------- ---- -------
c$ /
ipc$ /
どちらも確認できました。ただ、Get-NcCifsShare
のCifsServer
が表示されないのがちょっと気がかりです。
ファイル共有をFSx for ONTAP上に作成
本題の、FSx for ONTAP上への現行ファイルサーバーのファイル共有と同じ設定のファイル共有の作成を行います。
用意したスクリプトは以下の通りです。
# ファイル共有を作成するSVMの名前
$svm_name = "SVM"
Get-SmbShare -CimSession $src_cim -Special $false | ForEach-Object {
# 現行ファイルサーバーの共有情報の確認
echo "========================================================"
echo "[src smb share]"
echo "-----------------------------"
echo $_ | Format-Table -AutoSize -Wrap
echo "-----------------------------"
$src_smb_share = $_
# SVM上に現行ファイルサーバーと同じ名前、パスのファイル共有を作成
$dst_smb_share = Add-NcCifsShare `
-Name $src_smb_share.Name `
-Path $src_smb_share.Path.Replace("C:\data", "").Replace("\", "/") `
-VserverContext "$svm_name"
# デフォルトで設定される Everyone への許可を削除
Remove-NcCifsShareAcl `
-Share $dst_smb_share.ShareName `
-UserOrGroup Everyone `
-UserGroupType windows `
-VserverContext $svm_name
# ファイル共有のACLの設定
$_ | Get-SmbShareAccess | ForEach-Object {
# 現行ファイルサーバーのファイル共有のACLを確認
echo "**********************************"
echo "[src smb share acl]"
echo "-----------------------------"
echo $_ | Format-Table -AutoSize -Wrap
echo "-----------------------------"
# -Permission で指定する文字列を整形
$access_right = ([string]$_.AccessRight).ToLower()
$permission = if ("$access_right" -eq "full") {
Write-Output "full_control"
} else {
Write-Output "$access_right"
}
# 現行ファイルサーバーのファイル共有に合わせてACEを追加
$dst_smb_share_acl = if ( $_.AccessControlType -eq 'Allow' ) {
Add-NcCifsShareAcl `
-Share $dst_smb_share.ShareName `
-UserOrGroup $_.AccountName `
-Permission "$permission" `
-UserGroupType "windows" `
-VserverContext "$svm_name"
} else {
Add-NcCifsShareAcl `
-Share $dst_smb_share.ShareName `
-UserOrGroup $_.AccountName `
-Permission "no_access" `
-UserGroupType "windows" `
-VserverContext "$svm_name"
}
# 追加したACEの確認
echo "[dst smb share acl]"
echo "-----------------------------"
echo $dst_smb_share_acl
echo "-----------------------------"
echo "**********************************"
}
echo "========================================================"
}
処理の流れは以下の通りです。
- 現行ファイルサーバーのファイル共有一覧を取得
- 現行ファイルサーバーのファイル共有と同じ名前、パスのファイル共有をFSx for ONTAP上に作成する
- FSx for ONTAP上に作成されたファイル共有から Everyone への許可を削除する
- 現行ファイルサーバーのファイル共有に設定されているACLを取得
- 現行ファイルサーバーのファイル共有に設定されているACLのACEと同じユーザー名、権限でFSx for ONTAP上のファイル共有のACLにACEを追加する
こちらのスクリプトの実行結果した際の標準出力は以下の通りです。
========================================================
[src smb share]
-----------------------------
Name ScopeName Path Description PSComputerName
---- --------- ---- ----------- --------------
share1 * C:\data\share1 FILE-SHARE.corp.non-97.net
-----------------------------
**********************************
[src smb share acl]
-----------------------------
Name ScopeName AccountName AccessControlType AccessRight
---- --------- ----------- ----------------- -----------
share1 * BUILTIN\Administrators Allow Full
-----------------------------
[dst smb share acl]
-----------------------------
Share UserOrGroup Permission
----- ----------- ----------
share1 BUILTIN\Administrators full_control
-----------------------------
**********************************
**********************************
[src smb share acl]
-----------------------------
Name ScopeName AccountName AccessControlType AccessRight
---- --------- ----------- ----------------- -----------
share1 * Everyone Allow Full
-----------------------------
[dst smb share acl]
-----------------------------
Share UserOrGroup Permission
----- ----------- ----------
share1 Everyone full_control
-----------------------------
**********************************
========================================================
========================================================
[src smb share]
-----------------------------
Name ScopeName Path Description PSComputerName
---- --------- ---- ----------- --------------
share2 * C:\data\share2 FILE-SHARE.corp.non-97.net
-----------------------------
**********************************
[src smb share acl]
-----------------------------
Name ScopeName AccountName AccessControlType AccessRight
---- --------- ----------- ----------------- -----------
share2 * BUILTIN\Administrators Allow Full
-----------------------------
[dst smb share acl]
-----------------------------
Share UserOrGroup Permission
----- ----------- ----------
share2 BUILTIN\Administrators full_control
-----------------------------
**********************************
========================================================
========================================================
[src smb share]
-----------------------------
Name ScopeName Path Description PSComputerName
---- --------- ---- ----------- --------------
share3 * C:\data\share1\share3 FILE-SHARE.corp.non-97.net
-----------------------------
**********************************
[src smb share acl]
-----------------------------
Name ScopeName AccountName AccessControlType AccessRight
---- --------- ----------- ----------------- -----------
share3 * Everyone Allow Read
-----------------------------
[dst smb share acl]
-----------------------------
Share UserOrGroup Permission
----- ----------- ----------
share3 Everyone read
-----------------------------
**********************************
**********************************
[src smb share acl]
-----------------------------
Name ScopeName AccountName AccessControlType AccessRight
---- --------- ----------- ----------------- -----------
share3 * CORP\FSxAdmin Allow Full
-----------------------------
[dst smb share acl]
-----------------------------
Share UserOrGroup Permission
----- ----------- ----------
share3 CORP\FSxAdmin full_control
-----------------------------
**********************************
========================================================
========================================================
[src smb share]
-----------------------------
Name ScopeName Path Description PSComputerName
---- --------- ---- ----------- --------------
share4 * C:\data\share2\folder\share4 FILE-SHARE.corp.non-97.net
-----------------------------
**********************************
[src smb share acl]
-----------------------------
Name ScopeName AccountName AccessControlType AccessRight
---- --------- ----------- ----------------- -----------
share4 * CORP\user01 Deny Full
-----------------------------
[dst smb share acl]
-----------------------------
Share UserOrGroup Permission
----- ----------- ----------
share4 CORP\user01 no_access
-----------------------------
**********************************
**********************************
[src smb share acl]
-----------------------------
Name ScopeName AccountName AccessControlType AccessRight
---- --------- ----------- ----------------- -----------
share4 * Everyone Allow Read
-----------------------------
[dst smb share acl]
-----------------------------
Share UserOrGroup Permission
----- ----------- ----------
share4 Everyone read
-----------------------------
**********************************
**********************************
[src smb share acl]
-----------------------------
Name ScopeName AccountName AccessControlType AccessRight
---- --------- ----------- ----------------- -----------
share4 * CORP\FSxAdmin Allow Change
-----------------------------
[dst smb share acl]
-----------------------------
Share UserOrGroup Permission
----- ----------- ----------
share4 CORP\FSxAdmin change
-----------------------------
**********************************
**********************************
[src smb share acl]
-----------------------------
Name ScopeName AccountName AccessControlType AccessRight
---- --------- ----------- ----------------- -----------
share4 * CORP\FSxAdminGroup Allow Read
-----------------------------
[dst smb share acl]
-----------------------------
Share UserOrGroup Permission
----- ----------- ----------
share4 CORP\FSxAdminGroup read
-----------------------------
**********************************
========================================================
特にエラーなく実行できていますね。
FSx for ONTAP上のファイル共有を確認してみます。
# ファイル共有の確認
FsxId00f3521e554119927::> cifs share show
Vserver Share Path Properties Comment ACL
-------------- ------------- ----------------- ---------- -------- -----------
SVM c$ / oplocks - BUILTIN\Administrators / Full Control
browsable
changenotify
show-previous-versions
SVM ipc$ / browsable - -
SVM share1 /share1 browsable - BUILTIN\Administrators / Full Control
show-previous-versions
Everyone / Full Control
SVM share2 /share2 browsable - BUILTIN\Administrators / Full Control
show-previous-versions
SVM share3 /share1/share3 browsable - CORP\FSxAdmin / Full Control
show-previous-versions
Everyone / Read
SVM share4 /share2/folder/ browsable - CORP\FSxAdmin / Change
share4 show-previous-versions
CORP\FSxAdminGroup / Read
CORP\user01 / No access
Everyone / Read
6 entries were displayed.
# ファイル共有のACLの確認
FsxId00f3521e554119927::> cifs share access-control show
Share User/Group User/Group Access
Vserver Name Name Type Permission
-------------- ----------- --------------------------- ----------- -----------
SVM c$ BUILTIN\Administrators windows Full_Control
SVM share1 BUILTIN\Administrators windows Full_Control
SVM share1 Everyone windows Full_Control
SVM share2 BUILTIN\Administrators windows Full_Control
SVM share3 CORP\FSxAdmin windows Full_Control
SVM share3 Everyone windows Read
SVM share4 CORP\FSxAdmin windows Change
SVM share4 CORP\FSxAdminGroup windows Read
SVM share4 CORP\user01 windows No_access
SVM share4 Everyone windows Read
10 entries were displayed.
FsxId00f3521e554119927::>
現行ファイルサーバー上のファイル共有と同じファイル共有、ACLが設定されていました。
NetApp.ONTAP PowerShell Toolkitから作成したファイル共有には、ONTAP CLIから作成するとデフォルトで付与されるoplocks
とchangenotify
が付与されていなかったので手動で付与してあげます。
# oplocks と changenotify の付与
FsxId00f3521e554119927::> cifs share properties add -share-name share* -share-properties oplocks, changenotify
4 entries were acted on.
# 作成したファイル共有に oplocks と changenotify が付与されたことを確認
FsxId00f3521e554119927::> cifs share show
Vserver Share Path Properties Comment ACL
-------------- ------------- ----------------- ---------- -------- -----------
SVM c$ / oplocks - BUILTIN\Administrators / Full Control
browsable
changenotify
show-previous-versions
SVM ipc$ / browsable - -
SVM share1 /share1 oplocks - BUILTIN\Administrators / Full Control
browsable Everyone / Full Control
changenotify
show-previous-versions
SVM share2 /share2 oplocks - BUILTIN\Administrators / Full Control
browsable
changenotify
show-previous-versions
SVM share3 /share1/share3 oplocks - CORP\FSxAdmin / Full Control
browsable Everyone / Read
changenotify
show-previous-versions
SVM share4 /share2/folder/ oplocks - CORP\FSxAdmin / Change
share4 browsable CORP\FSxAdminGroup / Read
changenotify CORP\user01 / No access
show-previous-versions
Everyone / Read
めでたし。めでたし。
と言いたいところですが、このスクリプトではACLのFull Control以外のDenyを表現することができません。例えばReadのみのDenyを表現しようとしても必ずNo access
となります。これはONTAP REST APIの仕様上、ファイル共有のACLのタイプは許可/拒否で分かれているのではなく、以下の4つしか選択できないためです。
- Full_Control
- Change
- Read
- No_access
もし、ReadのみのDenyがある場合は、手動で設定するのが良いでしょう。
ONTAP REST APIとのスクリプトを組み合わせたい時に
NetApp.ONTAP PowerShell Toolkitを使ったスクリプトで、現行ファイルサーバーのファイル共有の設定と(ほぼ)同じ設定のファイル共有をFSx for ONTAP上に作成してみました。
「ONTAP REST APIをそのまま触るのはちょっと辛い...」という方には特にオススメです。スクリプトで処理させたい内容に応じてNetApp.ONTAP PowerShell ToolkitかNetApp ONTAP Python client libraryを使い分けると良いでしょう。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!