ONTAPでS3互換ストレージを提供する


ONTAP 9.7でTechnical Previewとして導入されたS3互換オブジェクトストレージ機能(【 2020年1月GA版リリース】ONTAP 9.7アップデート情報)は、ONTAP 9.8から正式提供となった(ONTAP 9でのS3のサポートについて)。

ただ、普通に提供されるライセンスコード一覧にはS3ライセンスが含まれていない(2021/11/10追記:ONTAP9.9.1で入荷した実機にはS3ライセンスも入力済みだった)

ONTAPシミュレータ9.8で提供されるライセンスにもS3ライセンスは含まれていない。

しかし、確認してみると、NetApp Supportページにある「Master License Keys」ページから「ONTAP S3」ライセンスが取得出来るらしい。

手続きを進めてみると、こんな感じでライセンスキーが表示された。

機種などが制限されていないようなので、ONTAPシミュレータ環境にライセンスを入れてみたところ、問題無く認識された。

ONTAP 9の[オブジェクトストレージのプロビジョニング]-[S3構成パワー ガイド]に従い設定を実施。

ただマニュアル上はCLIでしか設定できないような記載がされてるのだが、ONTAP 9.8 System Managerから設定ができそう

[ストレージ]-[バケット]にそれっぽい項目があったり

[ストレージ]-[Storage VM]の設定画面に「S3」が見える。

S3の設定を行ってみる。

「S3サーバ名」は、S3互換としてアクセスする場合に指定するホスト名を設定(DNS解決できるように設定しておくこと)

今回は既存のNFS/CIFS用に設定しているIPアドレス(LIF)に相乗りしてS3サービスを提供します。

作成すると、下記の表示があります。

標準で「sm_s3_user」というユーザが作成され、S3互換接続のアカウント設定で使用する「アクセスキー」と「シークレットキー」が表示されます。

シークレットキーはこの画面を閉じたら再確認する方法がなくなるので必ず記録しておきます。(失った場合はアクセスキー/シークレットキーの再発行が必要です)

これでSVMのサービス一覧でS3のステータスが有効となります。

標準で作られたsm_s3_userではなく、別のユーザを作る場合は[ストレージ]-[Storage VM]で「S3設定」を開きます

ここでユーザの追加を行います。

S3互換アクセスに使う「アクセスキー」と「シークレットキー」が表示されるので記録します。

次にユーザに権限を与えるためにグループを作成します。

ちょっと表示がわかりにくいですが、「名前」を入力したあと、「USERS」をクリックするとユーザ一覧が表示されますので、作成したユーザを選択します。

同様に「POLICIES」を選択するとポリシー一覧が表示されますので、FullAccessを選択します。

これでグループの作成が終わりました。

次に「バケット(bucket)」を作成します。[ストレージ]-[バケット]を表示します。

[追加]からバケットを作成します。なお、指定可能な最小容量は95GBです。

保存すると下記の様に一覧に表示されるようになります。

ちなみにこれを作成するとGUIの[ストレージ]-[ボリューム]には表示されない「ボリューム名:fg_oss_~」というものが追加されています。

ontap98::> volume show
Vserver   Volume       Aggregate    State      Type       Size  Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
ontap98   MDV_aud_6e2de4f0a96c4edbbf4c751a3f4626cc aggr0_ontap98_01 online RW 2GB 1.90GB  0%
ontap98   MDV_aud_b39196a1f11940519b4238a511f7c93d ontap98_01_FC_1 online RW 2GB 1.90GB  0%
ontap98-01 vol0        aggr0_ontap98_01 online RW       7.11GB     2.03GB   69%
share225  fg_oss_1635381690 -       online     RW      421.1GB    210.6GB    0%
share225  nfsshare     ontap98_01_FC_1 online  RW       5.26GB     5.00GB    0%
share225  share225_root ontap98_01_FC_1 online RW         20MB    17.50MB    7%
share225  share226_dr  ontap98_01_FC_1 online  DP        100GB   100.00GB    0%
share225  testvol      ontap98_01_FC_1 online  RW      105.3GB    99.99GB    0%
share228  share227_root ontap98_01_FC_1 online RW         20MB    17.57MB    7%
9 entries were displayed.

ontap98::>

95GBと指定しているのに400GBを取っている、とか、そのくせaggregateの空き容量は減っていないとかいろいろアレな感じではあります。

作成しただけでは先ほど作成したユーザのアクセス権限がついていないので[ストレージ]-[バケット]で作成したバケットを選択し「権限」タブで設定していきます。

[編集]ボタンをクリックすると下記の画面が開きます。

[権限]にて「追加」をクリック

初期の「ListBucket」のみだとオブジェクト一覧のみが表示出来ます。選択できるものを全て選択します。

これでバケットを保存します。

そうすると[権限]タブが下記の様になっています。

これで、S3互換アクセスが可能な状態となりました。

アクセス検証には「S3 Browser」というWindowsアプリを使用しました。

アカウント設定は下記の様に行います

Account Type: S3 Compatible Storage
REST Endpoint: Storage VMのS3設定にある「S3サーバ名」で指定したもの
Access Key ID: 作成したユーザのアクセスキー
Secret Access Key: 作成したユーザの シークレットキー
Use secure transfer (SSL/TLS)にチェックを入れる

ここまで設定したら「Advanced S3-compatible storage settings」をクリックします。

Signature versionを「Singnature V4」に設定します。(2021/10/28時点の初期値はSingnature V2でした)

これで保存するとS3 Browser上にバケットが表示され、使える様になります。

なお、S3 BrowserでSingnature V4に設定する必要がある、というのは storageexorcist「NetApp ONTAP 9.8 – S3 is GA!」の記事を見て知りました。

知ったあとに「TR-4814: S3 in ONTAP Best Practices」を見直してみたところ「Security」の項目に記載がありました。

Signature Version 4
S3 in ONTAP requires the use of Signature Version 4 (v4 signatures).
Note: Using v2 signatures result in a failure to connect. It is important to be aware of this because many client applications, including commonly used S3 browsers, use v2 signatures by default.
Configure client applications to use v4 signatures to avoid connectivity errors.

NetApp ONTAP 9.xの設定取得用TeraTermマクロ


NetApp ONTAP 9.1環境から9.8環境に移行する案件があったので、現状の設定とステータスをだいたい取れるようなTera Termマクロを作ったので公開

githubにも置いた https://github.com/osakanataro/get-ontap-config


sendln 'rows 0'
wait '::> '
sendln 'date'
wait '::> '


;基本設定系
;システム構成
sendln 'vserver show'
wait '::> '

sendln 'vserver show -ins'
wait '::> '
sendln 'system node show'
wait '::> '
sendln 'system node show -ins'
wait '::> '
sendln 'options'
wait '::> '
sendln 'system license show'
wait '::> '
sendln 'system license show -ins'
wait '::> '
sendln 'system snmp show'
wait '::> '
sendln 'system node autosupport show'
wait '::> '
sendln 'system node autosupport show -ins'
wait '::> '
sendln 'system node autosupport history show'
wait '::> '
sendln 'cluster time-service ntp server show'
wait '::> '
sendln 'timezone'
wait '::> '
sendln 'system service-processor show'
wait '::> '
sendln 'system service-processor network show'
wait '::> '

;ネットワーク関連	
sendln 'network interface show'
wait '::> '
sendln 'network interface show -ins'
wait '::> '
sendln 'network interface show -failover'
wait '::> '
sendln 'network interface failover-groups show'
wait '::> '

sendln 'network port show'
wait '::> '
sendln 'network port show -ins'
wait '::> '
sendln 'network port ifgrp show'
wait '::> '
sendln 'network port ifgrp show -ins'
wait '::> '

sendln 'network ipspace show'
wait '::> '
sendln 'network port broadcast-domain show'
wait '::> '



sendln 'vserver services name-service ns-switch show'
wait '::> '
sendln 'vserver services name-service dns hosts show'
wait '::> '
sendln 'vserver services name-service dns hosts show -ins'
wait '::> '
sendln 'security login show'
wait '::> '
sendln 'security login show -ins'
wait '::> '

;名前解決関連	
sendln 'vserver services name-service dns show'
wait '::> '
sendln 'vserver services name-service nis-domain show'
wait '::> '

;ディスク構成	
sendln 'storage disk show'
wait '::> '
sendln 'storage disk show -ins'
wait '::> '
sendln 'storage disk show -partition-ownership'
wait '::> '

sendln 'df'
wait '::> '
sendln 'df -h'
wait '::> '
sendln 'df -A -h'
wait '::> '
sendln 'df -i'
wait '::> '

sendln 'storage aggregate show'
wait '::> '
sendln 'storage aggregate show -ins'
wait '::> '
sendln 'storage aggregate show-spare-disks'
wait '::> '

sendln 'volume show'
wait '::> '
sendln 'volume show -ins'
wait '::> '
sendln 'volume language'
wait '::> '
sendln 'volume show -fields junction-path,snapshot-policy,policy'
wait '::> '

sendln 'volume efficiency show'
wait '::> '
sendln 'volume efficiency policy show'
wait '::> '


;ファイル共有(NFS/CIFS)	
sendln 'vserver cifs show'
wait '::> '
sendln 'vserver cifs show -ins'
wait '::> '
sendln 'vserver cifs share show'
wait '::> '
sendln 'vserver cifs share show -ins'
wait '::> '
sendln 'vserver cifs share access-control show'
wait '::> '
sendln 'vserver cifs share access-control show -ins'
wait '::> '
sendln 'vserver nfs show'
wait '::> '
sendln 'vserver nfs show -ins'
wait '::> '
sendln 'vserver export-policy show'
wait '::> '
sendln 'vserver export-policy show -ins'
wait '::> '
sendln 'vserver export-policy rule show'
wait '::> '
sendln 'vserver export-policy rule show -ins'
wait '::> '
sendln 'volume qtree show'
wait '::> '
sendln 'volume qtree show -ins'
wait '::> '
sendln 'volume quota show'
wait '::> '
sendln 'volume quota show -ins'
wait '::> '
sendln 'volume quota policy show'
wait '::> '
sendln 'volume quota policy show -ins'
wait '::> '
sendln 'volume quota policy rule show'
wait '::> '
sendln 'volume quota policy rule show -ins'
wait '::> '
sendln 'volume quota report'
wait '::> '

;Snapshot運用	
sendln 'volume snapshot show'
wait '::> '
sendln 'volume snapshot policy show'
wait '::> '
sendln 'volume snapshot autodelete show'
wait '::> '
sendln 'volume show -fields snapshot-policy,policy'
wait '::> '
sendln 'volume show -fields percent-snapshot-space'
wait '::> '
sendln 'volume show -fields sched-snap-name'
wait '::> '

;Snapmirror	
sendln 'snapmirror show'
wait '::> '
sendln 'snapmirror show -ins'
wait '::> '
sendln 'snapmirror show-history'
wait '::> '
sendln 'snapmirror show-history -ins'
wait '::> '

;ストレージ間通信	
sendln 'storage shelf show'
wait '::> '
sendln 'storage shelf acp show'
wait '::> '

;クラスタ設定	
sendln 'cluster show'
wait '::> '
sendln 'cluster show -ins'
wait '::> '
sendln 'cluster peer show'
wait '::> '

sendln 'vserver peer show'
wait '::> '
sendln 'vserver peer show -ins'
wait '::> '

Oracle Linux 8でリリースバージョン固定する方法


Oralce Linux 8.2で導入したい、という要請があった。

(AlmaLinux/RockyLinux/CentOSでの設定については「AlmaLinux /Rocky Linuxのリリースバージョン固定方法」を参照)

Oralce Linux 8.2メディアでインストールすればいい、とは言うものの、パッケージが足らない時にうっかり「dnf install xxxx」とかやってしまうと新しいバージョンを入れてしまう可能性が・・・

有限会社ルートリンクス「RHEL 8 リリースバージョンを指定してアップデート」という記事を見つけて試してみたが、なんか無視されて新しいバージョンを引っ張ってる気がする・・・RHEL8なら有効なのかな?

Oracle Linux 8のドキュメントを探してみる・・・

参考ドキュメント:Oracle® Linux 8 Oracle Linuxでのソフトウェアの管理の「Oracle Linux Yumサーバーを使用するためのシステムの構成

固定手法について直接の記述はないが「ISOイメージを使用したローカルYumリポジトリの提供」というものがあり、ISOイメージをメインレポジトリとして設定し、それ以外を無効化する、という手法が書かれている。

この手法をそのまま使えば、配置したISOのバージョンで固定できる。

8.2で提供された更新だけ適用できないかな?というもくろみもあって、ISOイメージを使わないで実現する手法がないか試してみた。

なお、結論としては無償でできる範囲には無いようだった。

使用可能なULNチャネル」の説明を読むとOracleのULNサブスクリプション購読者は「ol8_arch_u?_baseos_patch」というレポジトリでBaseOSに関してはリリースごとのパッチが適用できるようだ。AppStreamについては特に定義されていないようだ。


  1. ISOファイルをローカルディスクに配置
  2. /etc/fstabに「/ISOs/OracleLinux.iso /var/OSimage/OL_x86_64 iso9660 loop,ro 0 0」というようなエントリ追加
  3. /etc/yum.repos.d/ にファイル作成

ここから参考記録

ISOメディアを使わず、ULNサブスクリプションも登録しない状態で何かできるかを試してみたものが、下記の記述となる。

[root@oraclelinux ~]# dnf repolist --all
repo id               repo name                                         status
ol8_UEKR6             Latest Unbreakable Enterprise Kernel Release 6 fo enabled
ol8_UEKR6_RDMA        Oracle Linux 8 UEK6 RDMA (x86_64)                 disabled
ol8_addons            Oracle Linux 8 Addons (x86_64)                    disabled
ol8_appstream         Oracle Linux 8 Application Stream (x86_64)        enabled
ol8_baseos_latest     Oracle Linux 8 BaseOS Latest (x86_64)             enabled
ol8_codeready_builder Oracle Linux 8 CodeReady Builder (x86_64) - Unsup disabled
ol8_u0_baseos_base    Oracle Linux 8 BaseOS GA (x86_64)                 disabled
ol8_u1_baseos_base    Oracle Linux 8.1 BaseOS (x86_64)                  disabled
ol8_u2_baseos_base    Oracle Linux 8.2 BaseOS (x86_64)                  disabled
[root@oraclelinux ~]#

レポジトリリストを見てみたところ「Oracle Linux 8.2 BaseOS (x86_64)」などというそれっぽいものがあるので、ISOイメージの手法にならってまずは「dnf config-manager –disable *」を実行して全レポジトリを無効化

[root@oraclelinux ~]# dnf config-manager --disable \*
[root@oraclelinux ~]# dnf repolist --all
repo id               repo name                                         status
ol8_UEKR6             Latest Unbreakable Enterprise Kernel Release 6 fo disabled
ol8_UEKR6_RDMA        Oracle Linux 8 UEK6 RDMA (x86_64)                 disabled
ol8_addons            Oracle Linux 8 Addons (x86_64)                    disabled
ol8_appstream         Oracle Linux 8 Application Stream (x86_64)        disabled
ol8_baseos_latest     Oracle Linux 8 BaseOS Latest (x86_64)             disabled
ol8_codeready_builder Oracle Linux 8 CodeReady Builder (x86_64) - Unsup disabled
ol8_u0_baseos_base    Oracle Linux 8 BaseOS GA (x86_64)                 disabled
ol8_u1_baseos_base    Oracle Linux 8.1 BaseOS (x86_64)                  disabled
ol8_u2_baseos_base    Oracle Linux 8.2 BaseOS (x86_64)                  disabled
[root@oraclelinux ~]#

続いてOracle Linux 8.2で固定したいので、「ol8_u2_baseos_base」だけを有効化するために「dnf config-manager –enable ol8_u2_baseos_base」を実行

[root@oraclelinux ~]# 
[root@oraclelinux ~]# dnf repolist --all
repo id               repo name                                         status
ol8_UEKR6             Latest Unbreakable Enterprise Kernel Release 6 fo disabled
ol8_UEKR6_RDMA        Oracle Linux 8 UEK6 RDMA (x86_64)                 disabled
ol8_addons            Oracle Linux 8 Addons (x86_64)                    disabled
ol8_appstream         Oracle Linux 8 Application Stream (x86_64)        disabled
ol8_baseos_latest     Oracle Linux 8 BaseOS Latest (x86_64)             disabled
ol8_codeready_builder Oracle Linux 8 CodeReady Builder (x86_64) - Unsup disabled
ol8_u0_baseos_base    Oracle Linux 8 BaseOS GA (x86_64)                 disabled
ol8_u1_baseos_base    Oracle Linux 8.1 BaseOS (x86_64)                  disabled
ol8_u2_baseos_base    Oracle Linux 8.2 BaseOS (x86_64)                  enabled
[root@oraclelinux ~]#

この状態で「dnf check-update」を実行してみる。

[root@oraclelinux ~]# dnf clean all
23 files removed
[root@oraclelinux ~]# dnf check-update
Oracle Linux 8.2 BaseOS (x86_64)                 10 MB/s | 3.3 MB     00:00
Last metadata expiration check: 0:00:01 ago on Wed Oct 20 19:01:10 2021.
[root@oraclelinux ~]#

アップデートは取りに行かない。

が・・・phpをインストールしようとしたら見つからない・・・

[root@oraclelinux ~]# dnf module list
Last metadata expiration check: 0:08:47 ago on Wed Oct 20 19:01:10 2021.
@modulefailsafe
Name                     Stream        Profiles         Summary
satellite-5-client       1.0 [e]       common, gui      ULN client packages

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[root@oraclelinux ~]# dnf search php
Last metadata expiration check: 0:09:10 ago on Wed Oct 20 19:01:10 2021.
No matches found.
[root@oraclelinux ~]#

phpはAppStreamレポジトリに含まれるものであるため、BaseOSしか登録していない現状では表示されません。

この他、AppStreamに含まれるパッケージで必要なものがいろいろあるため、この手法を取るには無理がある、という形となった。

では、RHEL8みたいにreleaseverという指定ができるか、というところについて /etc/yum.repos.d/oracle-linux-ol8.repo の内容を確認すると、$releasever という定義が使われてない。

[root@oraclelinux ~]# cat /etc/yum.repos.d/oracle-linux-ol8.repo
[ol8_baseos_latest]
name=Oracle Linux 8 BaseOS Latest ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL8/baseos/latest/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=0
[ol8_appstream]
name=Oracle Linux 8 Application Stream ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL8/appstream/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=0
[ol8_codeready_builder]
name=Oracle Linux 8 CodeReady Builder ($basearch) - Unsupported
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL8/codeready/builder/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=0
[ol8_u0_baseos_base]
name=Oracle Linux 8 BaseOS GA ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL8/0/baseos/base/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=0
[ol8_u1_baseos_base]
name=Oracle Linux 8.1 BaseOS ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL8/1/baseos/base/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=0
[ol8_u2_baseos_base]
name=Oracle Linux 8.2 BaseOS ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL8/2/baseos/base/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1
[ol8_addons]
name=Oracle Linux 8 Addons ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL8/addons/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=0
[root@oraclelinux ~]#

yum.oracle.com にあるOracle Linux 8 RepositoriesでもAppStreamは1種類しか紹介されていない。Base OSアップデートされたパッケージについてはbaseos latest、AppStreamのアップデートされたパッケージはappstreamに配置されていた。

というわけで、Oracle Linux 8において、バージョン固定にする方法は、おとなしく 「1.8 ISOイメージを使用したローカルYumリポジトリの作成」 をつかっとけ、という話になるようだ。

NetAppでファイルのアクセス監査ログを取る


ファイルサーバで、誰かがエクスプローラーの誤操作で変なところにファイルを移動させてしまうことがある。

その時に、アクセス監査ログから誰が移動(削除)操作を行ったかなどを特定できないか、ということで、NetAppのStorage VMに対するアクセス監査の設定を行った。

CIFSアクセスとNFS v4アクセスで利用できる。

公式ドキュメント:SVMでのNASイベントの監査

まずは監査ログの出力先ディレクトリを作成する。これは設定するStorage VM配下のボリュームのどこかに作成する。

今回はvolume:testvolの中に「audit」というディレクトリを作成した。

Storage VMへの監査有効化は「vserver audit create -vserver SVM名 -destination /出力先ディレクトリ」で行う。

ontap98::> vserver audit show
This table is currently empty.

ontap98::> vserver audit create -vserver share225 -destination /testvol/audit

ontap98::>

設定されたことを確認する。

ontap98::> vserver audit show
Vserver     State  Event Types        Log Format Target Directory
----------- ------ ------------------ ---------- ----------------------------
share225    false  file-ops,          evtx       /testvol/audit
                   cifs-logon-logoff,
                   audit-policy-
                   change

ontap98::> vserver audit show -ins

                           Vserver: share225
                    Auditing State: false
              Log Destination Path: /testvol/audit
     Categories of Events to Audit: file-ops, cifs-logon-logoff,
                                    audit-policy-change
                        Log Format: evtx
               Log File Size Limit: 100MB
      Log Rotation Schedule: Month: -
Log Rotation Schedule: Day of Week: -
        Log Rotation Schedule: Day: -
       Log Rotation Schedule: Hour: -
     Log Rotation Schedule: Minute: -
                Rotation Schedules: -
          Log Files Rotation Limit: 0
            Log Retention Duration: 0s

ontap98::>

次にディレクトリに監査を設定する。

CIFSの場合

volume:testvolの中にある「test1」というディレクトリに設定を行うため、プロパティから「詳細設定」を選択

「監査」タブで設定を行う

今回はファイルやディレクトリの削除について記録したいので、「プリンシパル」を「Everyone」と指定し、「高度なアクセス許可」で「サブフォルダーとファイルの削除」と「削除」で設定します。

下記のような表示になります。

これで設定は完了です。

該当するファイルアクセスを行うと、指定したディレクトリ内に「audit_<vserver名>_last.evtx」というファイルにログが出力されていきます。

上記は毎日2:00にファイルをローテートする設定を追加しているので複数のファイルが存在しています。

ちなみに設定は下記の様に行いました。(-rotate-limit 3で設定しているのでファイルが日時入りのファイルが3つある)

ontap98::> vserver audit modify -vserver share225 -rotate-schedule-month all -rotate-schedule-dayofweek all -rotate-schedule-hour 2 -rotate-schedule-minute 0 -rotate-limit 3 -rotate-size 1M

ontap98::> vserver audit show -ins

                           Vserver: share225
                    Auditing State: true
              Log Destination Path: /testvol/audit
     Categories of Events to Audit: file-ops
                        Log Format: evtx
               Log File Size Limit: 1MB
      Log Rotation Schedule: Month: January-December
Log Rotation Schedule: Day of Week: Sunday-Saturday
        Log Rotation Schedule: Day: -
       Log Rotation Schedule: Hour: 2
     Log Rotation Schedule: Minute: 0
                Rotation Schedules: @2:00
          Log Files Rotation Limit: 3
            Log Retention Duration: 0s

ontap98::>

(1回設定した値を消すには 「-rotate-schedule-dayofweek -」などを行う)

で、どんなログが出るか、というあたりですが、ファイルを削除した場合には、イベントID:4656とイベントID:9999が出力されました。

イベントIDの詳細については「監査できるSMBイベント」を参照のこと…ただ、載ってないのもあるんですよね…

NFSv4の場合

NFS v4の場合はLinux上から nfs4_getfacl, nfs4_setfaclコマンドを使って設定する。

NFS v4でマウントして、「test3」というディレクトリのACLを確認

[root@linux mnt]# nfs4_getfacl test3/

# file: test3/
A::OWNER@:rwaDxtTnNcCy
A:g:GROUP@:rxtncy
A::EVERYONE@:rxtncy
[root@linux mnt]#

上記には「U:」で始まるものがありません。

ファイルとディレクトリに関して成功した操作→「fdS」
対象は全ユーザ→「EVERYONE@」
ACLの変更と削除に関して記録→「Cd」

ということを行いたい場合は「nfs4_setfacl -R -a U:fdS:EVERYONE@:Cd 対象ディレクトリ」と実行します。

[root@linux mnt]# nfs4_setfacl -R -a U:fdS:EVERYONE@:Cd test3
[root@linux mnt]# nfs4_getfacl test3/

# file: test3/
A::OWNER@:rwaDxtTnNcCy
A:g:GROUP@:rxtncy
A::EVERYONE@:rxtncy
U:fdS:EVERYONE@:dC
[root@linux mnt]#

で、ファイルを削除した場合、イベントID:4663 とイベントID:4658 が記録されました。

NFSで監査できるイベントについては「監査できるNFSファイルおよびディレクトリのアクセス イベント」に記載があるのですが、evtx出力した時にどういうイベントIDになるのか、という対応表はないようです。

また、どちらの場合でも、下記の様なエラーっぽいものが表示されています。この説明が見つかりませんは仕様で回避方法は無いようです。

ソース "NetApp-Security-Auditing" からのイベント ID 4658 の説明が見つかりません。このイベントを発生させるコンポーネントがローカル コンピューターにインストールされていないか、インストールが壊れています。ローカル コンピューターにコンポーネントをインストールするか、コンポーネントを修復してください。

イベントが別のコンピューターから発生している場合、イベントと共に表示情報を保存する必要があります。

イベントには次の情報が含まれています: 

172.17.44.87
EV_RenderedValue_2.00
false
Not Present
Not Present
Security
File
00000000000406;00;0000064f;046d016e
(nfsshare);/test3/test2.txt

メッセージ リソースは存在しますが、メッセージがメッセージ テーブルに見つかりませんでした。
The description for Event ID 4658 from source NetApp-Security-Auditing cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.

If the event originated on another computer, the display information had to be saved with the event.

The following information was included with the event: 

172.17.44.87
EV_RenderedValue_2.00
false
Not Present
Not Present
Security
File
00000000000406;00;0000064f;046d016e
(nfsshare);/test3/test2.txt

日本語メッセージリソースがないことが原因なのかと考え、英語UIに替えてみても表示は同じでした。

NetApp KB「The description for Event ID cannot be found in the EVTX logs generated by clustered Data ONTAP」があるので解決できるのかと思ったのですが、無理そうです。

単体ESXi環境でWindows 11仮想マシンを作る


Windows 11ではTPMが必須要件となる。

TPM無い場合、下記の様に表示されインストールが行えない。

vSphere 6.7 / vSphere 7.0環境では「仮想 Trusted Platform Module を使用する仮想マシンの保護」(vsphere8ドキュメント)にあるようにvCenterの管轄下に置くことでESXiサーバ間での暗号化情報をやりとりできるようにした上でvTPMの設定を行うことができる。

しかし、ESXi単体の場合、vTPMの設定を行うことができない。

これを回避するためには、TPMがなくてもWindows 11をインストールできるように細工する必要がある。

ただMicrosoft的には推奨では無いということを考慮した上で実施すること。(Microsoftの公式見解 最小システム要件を満たしていないデバイスに Windows 11 をインストールする/Installing Windows 11 on devices that don’t meet minimum system requirements)

このTPM回避の設定を行う場合、Windows 11のインストールISO/USBを修正する必要なく、普通にISO/USBから起動してから回避方法を実行することができる。

上記の画面やエディション選択などに来たら、Shiftキーを押しながらF10キーを押す(Shift+F10)、とコマンドプロンプトが開く。

コマンドプロンプトで「regedit」と入力し、レジストリエディッタを開く

「HKEY_LOCAL_MACHINE\SYSTEM\Setup」に、新規キー「LabConfig」を作成

その中に新規DWORD「BypassTPMCheck」を作成し、値を「1」とします。

また、SecureBoot非対応環境の場合は「BypassSecureBootCheck」を「1」、メモリの最低容量チェックを飛ばす場合は「BypassRAMCheck」を「1」とします。

設定後はレジストリエディッタを閉じて、あとは普通にインストールします。

ローカルアカウントでセットアップを行う手順

また、マイクロソフトアカウントではなく、ローカルアカウントで設定したい場合、Homeエディションの場合は非常に面倒です。

使うWindows 11のインストーラがいつ作成されたもの(どのバージョン)であるかによって変わります。

Windows 11 22H2以降のHomeエディション

Windows 11 22H2といった新しいHomeエディションではMicrosoftアカウントとして「no@thankyou.com」を指定して、パスワードは適当に入力してエラーを出します。

(上記ではno@thankyou.comを指定しているが、これはログインエラーを出すのが目的のメールアドレス指定であるため、Microsoft Accountとして登録していない自分が所有しているメールアドレスを使っても良い)

エラーを出した状態で次に進むとローカルユーザの作成ができます。

参考:tom’s hardware「How to Install Windows 11 Without a Microsoft Account

Windows 11 22H2より前のHomeエディション

しばらく前までの「Homeエディション」の場合は、ネットワーク接続をしない状態で設定する必要があります。

上記の状態まで来たら、ネットワークケーブルを外してから、「←」で戻ると、下記のローカルユーザ名入力画面となります。

なお、パスワードは未入力で進めると、電源ON後、パスワード入力無しでデスクトップ画面が表示されます。

Windows 11 Proエディション

「Proエディション」の場合は、下記で「職場または学校用に設定する」を選択

「サインインオプション」を選択

「代わりにドメインに参加する」を選択

これで下記のローカルユーザ名入力画面となります。

Proでもパスワードは未入力で進めると、電源ON後、パスワード入力無しでデスクトップ画面が表示されます。


インストールアシスタントを使ってWindows10からWindows11にアップグレードする場合

こちらについてはMicrosoftからの公式手順「Ways to install Windows 11」内の「Other ways to install Windows 11 (not recommended unless instructed by support)」から記載があります。

レジストリエディッタで「HKEY_LOCAL_MACHINE\SYSTEM\Setup」に新規キー「MoSetup」を作成
そこに新規DWORD「AllowUpgradesWithUnsupportedTPMOrCPU」を値「1」で作成してから、インストールアシスタントを実行するとのこと。

ただ、これはインストールアシスタントでの制約解除なようで、Windows11 ISOメディアから起動する場合には有効ではありませんでした。


2024/01/11追記

vSphere環境でvTPMを使う場合の資料

vTPMを使う場合、まずはvCenter上で キープロバイダの設定 を行う必要がある。(標準では設定されていない)

vSphere Native Key Provider の構成と管理 にある手順に従い設定すること。

なお、設定した場合は、損壊時の復旧に備えて vSphere Native Key Provider のバックアップを行い、そのデータを別の場所に保存しておくこと。

vTPM有効にして仮想マシンを作成しようとした場合の情報

Windows 11 guest operating system option is not available during virtual machine creation (85665) (仮想マシン作成時のOS選択にWin11が登場するのはHW ver19以降。それ以前で設定した場合は手動でvTPMハードウェアを追加する)

Failed to create a new Virtual Machine with virtual Trusted Platform Module (vTPM) device (85974) (vTPMハードウェア追加しようとした時にエラーとなる場合はvTPMが設定されていない)


2024/01/23追記

Nutanix でvTPM有効で Windows 11

Broadcomのせいでvsphereがアレなことになちゃってるので、Nutanixという話が出てるのでメモ書き追加

公式資料:Windows 11 on Nutanix AHV
Understanding UEFI, Secure Boot, and TPM in the Virtualized Environment
vTPM (Virtual Trusted Platform Module) support on AHV
Securing AHV VMs with Virtual Trusted Platform Module

vTPM環境を有効にするには基本的にはPrism Centralが必要(Prism Central上からvTPM有効にする)

AHV vTPMとしてハイパーバイザー側でvTPMを有効にする手法もあるが仮想マシンごとにコマンド操作での設定が必要?

単体Nutanix環境で仮想マシン作成すると標準で作成されるCD-ROMはIDE接続だが、それではSecure Boot有効にできない、というので、SATA接続のCD-ROMとして設定しなおすとSecure Bootが有効に設定はできる。

ただ、これで起動したところ以下のTianoCore画面で停止したままとなった。

おそらくvTPMについて設定していないからと想定している

インフラ屋とアプリ屋のあいだにAHVのUEFIの対応と注意点」をみると、TianoCore画面は表示されてるのでSecure Bootにはなってる模様?

とりあえずsshでCVMにログインして「acli」で「vm.list」を実行し、仮想マシンUUIDを取得してから情報をとってみる

<acropolis> vm.get 5468cc7a-f8d0-4f81-b487-9879a9034f07
win11vm {
  can_clear_removed_from_host_uuid: True
  config {
    agent_vm: False
    allow_live_migrate: True
    boot {
      firmware_config {
        nvram_disk_spec {
          create {
            container_id: 791
            size: 540672
          }
        }
        nvram_disk_uuid: "4dbf9ca7-fcc9-4ccb-bb09-68e6efc5e7e3"
        nvram_storage_vdisk_uuid: "7789ad26-5dd6-4449-94be-91d7826e5b1b"
      }
      secure_boot: True
      uefi_boot: True
      windows_credential_guard: False
    }
    cpu_passthrough: False
    disable_branding: False
    disk_list {
      addr {
        bus: "scsi"
        index: 0
      }
      container_id: 4
      container_uuid: "382d3533-a361-494d-a7a0-34a31189194d"
      device_uuid: "b1d3b8c7-55ca-4b54-bbb5-dc420af3c64f"
      naa_id: "naa.6506b8d861d47d56721f107382b7a77b"
      storage_vdisk_uuid: "4c7f99cb-9033-44d6-944c-d336c2e038ea"
      vmdisk_size: 42949672960
      vmdisk_uuid: "59b58d21-b5ae-46df-ac37-c13a09343eb6"
    }
    disk_list {
      addr {
        bus: "sata"
        index: 0
      }
      cdrom: True
      container_id: 4
      container_uuid: "382d3533-a361-494d-a7a0-34a31189194d"
      device_uuid: "286dd080-7c53-4591-a393-ccdfec69d4ba"
      naa_id: "naa.6506b8dad9fd1ba7c387201df7854712"
      source_vmdisk_uuid: "1632fefd-66b0-42aa-a25b-9eec7b545cb2"
      storage_vdisk_uuid: "eae8b9ee-c441-4e65-89ad-a247781fc2d0"
      vmdisk_size: 6549825536
      vmdisk_uuid: "becf4569-795f-4970-ab6b-8505f0f7f210"
    }
    flash_mode: False
    hwclock_timezone: "Asia/Tokyo"
    machine_type: "q35"
    memory_mb: 4096
    name: "win11vm"
    nic_list {
      connected: True
      mac_addr: "50:6b:8d:bb:57:0a"
      network_name: "VM Network"
      network_type: "kNativeNetwork"
      network_uuid: "803e5bea-e486-41f0-90d8-bbf1819393bb"
      type: "kNormalNic"
      uuid: "677e67ac-46c9-4359-be9f-e74f710240fd"
      vlan_mode: "kAccess"
    }
    num_cores_per_vcpu: 1
    num_threads_per_core: 1
    num_vcpus: 2
    num_vnuma_nodes: 0
    vga_console: True
    vm_type: "kGuestVM"
    vtpm_config {
      is_enabled: True
      model: "kCRB"
      version: "2.0"
      vtpm_disk_spec {
        create {
          container_id: 791
          size: 68157440
        }
      }
      vtpm_disk_uuid: "538c10f4-4d63-40bb-9941-75ef33fb5114"
      vtpm_storage_vdisk_uuid: "821c7765-91e2-4ab1-9962-bdad70758e90"
    }
  }
  is_rf1_vm: False
  logical_timestamp: 8
  state: "kOff"
  uuid: "5468cc7a-f8d0-4f81-b487-9879a9034f07"
}
<acropolis>

「secure_boot: True」と「machine_type: “q35″」があるので有効にはなっている模様(「Creating a VM with Secure Boot Enabled」)

「vtpm_config」が「is_enabled: True」ということはvTPMが有効になっていてもよさそう?

New Feature: Secure Boot for VM’s in AOS 5.16」ではさらに「nvram_container=NutanixManagementShare名」と設定している。

AHV Administration Guide の「UEFI Support for VM」を見てみるがPrism CentralなしでvTPMが使えるようになるやりようが見つからない・・・ないのかな?

Securing AHV VMs with Virtual Trusted Platform Module