Amazon FSx for NetApp ONTAPのKerberosを利用した転送時の暗号化設定を試してみた
以下の公式ドキュメントでSMB を使用した転送中のデータの暗号化のやり方は書いてありますが、Kerberosを利用したNFSマウント時の暗号化方法はONTAPの公式ドキュメントを案内されているだけだったので調べながらやってみました。
以下のAWSのドキュメントが転送中のデータの暗号化について記載されているものになります。
転送中のデータの暗号化
構成図
簡単な構成図ですが以下の環境を作成しました。
ADの設定とONTAPをADへ参加させる設定は以下のブログと同じ手順で設定しました。
FSxのファイル仮想マシン名、ストレージ仮想マシン名は短めにしたかったので変更しました。
ファイル仮想マシン名:fsx_test
ストレージ仮想マシン名:fsx_test_svm
LIFでKerberosを有効化する
以下のONTAPのドキュメントを参考にLIFでKerberosを有効化します。
NFS での Kerberos 使用によるセキュリティ強化の概要
Amazon Linux2のEC2からONTAPに以下のコマンドで接続します。
管理エンドポイントは作成したファイルシステムの画面のエンドポイントのところで確認ができます。
パスワードは作成時に設定したfsxadminのパスワードを入力してください。
sudo su - ssh fsxadmin@管理エンドポイント
接続ができたら以下のコマンドを実行します。
FSx作成時はNFSユーザがいないので以下のコマンドの中で作成しています。
暗号化タイプはAES-256を設定します。
vserver services name-service unix-user create -vserver fsx_test_svm -user NFS -id 500 -primary-gid 0 vserver nfs kerberos realm create -vserver fsx_test_svm -realm FSX-DEV.CLASSMETHOD.JP -adserver-name FSX-DEV -adserver-ip WindowsサーバのIP -clock-skew 300 -kdc-ip WindowsサーバのIP -kdc-port 88 -kdc-vendor Microsoft -comment "Microsoft Kerberos config" vserver nfs modify -vserver fsx_test_svm -permitted-enc-types AES-256 vserver nfs kerberos interface enable -lif nfs_smb_management_1 -spn nfs/nfs_smb.fsx-dev.classmethod.jp@FSX-DEV.CLASSMETHOD.JP -ou "ou=FSxForNetAppONTAP" vserver name-mapping create -direction krb-unix -position 1 -pattern "(.+)@FSX-DEV.CLASSMETHOD.JP" -replacement root
4行目のコマンドを実行するとユーザ名とパスワードが求められるのでサービスアカウント (FSxServiceAccount) とパスワードを入力します。
コマンドを実行すると以下のようにFSxForNetAppONTAP内にLIFのコンピュータが追加されます。
LinuxをADに参加させる
Amazon Linux2のAD参加は以下のドキュメントを参考にしています。
Linux インスタンスを手動で結合する
EC2に接続して以下のコマンドを実行して必要なものをインストールします。
sudo yum -y install sssd realmd krb5-workstation samba-common-tools
ADサーバのドメインを検索できるようにします。
sudo sed s/^search/#search/ -i /etc/resolv.conf sudo sed s/^nameserver/#nameserver/ -i /etc/resolv.conf sudo sed -e '$s|$|\nsearch fsx-dev.classmethod.jp|g' -i /etc/resolv.conf sudo sed -e '$s|$|\nnameserver WindowsサーバのIP|g' -i /etc/resolv.conf sudo realm discover fsx-dev.classmethod.jp
検索できるようになると以下のような結果が返ってきます。
fsx-dev.classmethod.jp type: kerberos realm-name: FSX-DEV.CLASSMETHOD.JP domain-name: fsx-dev.classmethod.jp configured: no server-software: active-directory client-software: sssd required-package: oddjob required-package: oddjob-mkhomedir required-package: sssd required-package: adcli required-package: samba-common-tools
ADに参加するコマンドを実行します。
実行するとパスワードを求められるのでADユーザ (FSxAdmin) のパスワードを入力します。
sudo realm join -U FSxAdmin@fsx-dev.classmethod.jp fsx-dev.classmethod.jp --verbose
参加に成功するとidコマンドでADユーザのUIDなどが見れるようになります。
id FSxAdmin@fsx-dev.classmethod.jp
AD側の設定
LIFのコンピュータ「NFS-NFS_SMB-FSX」を「Windows Authorization Access Group」に所属させる
FSxForNetAppONTAP内にいるNFS-NFS_SMB-FSXを右クリックしてグループに追加をクリックします。
オブジェクト名にWindows Authorization Access Groupを入力してOKをクリックします。
「NFS-NFS_SMB-FSX」にSPNを追加する
FSxForNetAppONTAP内にいるNFS-NFS_SMB-FSXを右クリックしてプロパティを開きます。
プロパティを開いたら属性エディターを選択してservicePrincipalNameを編集します。
追加する値に以下の値を入力してください。
ファイルシステムIDのアルファベットはすべて大文字にしてください。
1つ目:krbtgt/ファイルシステムID.FSX.AP-NORTHEAST-1.AMAZONAWS.COM
2つ目:nfs/FSxのNFS DNS名
こちらの設定を入れないとマウント時にaccess deniedで失敗します。
入力すると以下のように2つ値が追加されます。
Kerberos認証で許可する暗号化の種類を設定する
gpmc.mscを検索して開きます。
開いたら「フォレスト:fsx-dev.classmethod.jp」→「ドメイン」→「fsx-dev.classmethod.jp」→「Default Domain Policy」を右クリックして編集をクリックします。
クリックするとグループポリシー管理エディタが開きます。
開いたら「コンピューターの構成」→「ポリシー」→「Windowsの設定」→「セキュリティの設定」→「ローカルポリシー」→「セキュリティオプション」をクリックします。
クリックしたらポリシーの一覧が表示されるので、「ネットワークセキュリティ:Kerberosで許可する暗号化の種類を構成する」を右クリックしてプロパティを開きます。
開いたら「これらのポリシーの設定を定義する」にチェックを入れ「AES256_HMAC_SHA1」にチェックを入れてOKをクリックします。
NFSでマウントしてみる
Amazon LinuxのEC2でマウントポイントを作成してからmountコマンドを実行します。
FSxのNFS DNS名はストレージ仮想マシンのエンドポイントから確認できます。
sudo su - systemctl enable nfs-secure.service && systemctl start nfs-secure.service kinit FSxAdmin@FSX-DEV.CLASSMETHOD.JP mkdir /fsx mount -t nfs -o sec=krb5 FSxのNFS DNS名:/ /fsx
kinitコマンドでFSxAdminのチケットをを取得してからマウントを行います。
マウントが成功したら以下のコマンドでFSxAdminにユーザを変更してディレクトリにファイルを作成してみます。
su FSxAdmin@FSX-DEV.CLASSMETHOD.JP kinit FSxAdmin@FSX-DEV.CLASSMETHOD.JP cd /fsx/vol1 touch test rm test
問題無くディレクトリアクセス、ファイル作成、ファイル削除が行えることを確認できます。
ハマったところ
検証時にLIFのコンピュータに以下のSPNを追加していなかったためマウント時にaccess deniedで失敗していました。
1つ目:krbtgt/ファイルシステムID.FSX.AP-NORTHEAST-1.AMAZONAWS.COM
2つ目:nfs/FSxのNFS DNS名
原因究明のためにマウント時にtcpdumpでパケットキャプチャを取得したところ以下のエラーが出ていたため気が付くことができました。
error-code: eRR-S-PRINCIPAL-UNKNOWN (7)
上記以外にもONTAP側でネームマッピングの設定というものが必要らしく、以下のコマンドを実行して解決しました。
ネームマッピングの仕組み
vserver name-mapping create -direction krb-unix -position 1 -pattern "(.+)@FSX-DEV.CLASSMETHOD.JP" -replacement root
パフォーマンスの確認
普通にnfsでマウントした場合と暗号化した場合のパフォーマンスを確認しました。
ONTAPでは以下のセキュリティ方式が利用できるのでそれぞれ設定してみます。
NFS での Kerberos 使用によるセキュリティ強化の概要
krb5 (Kerberos v5 プロトコル )
krb5i (チェックサムを使用した整合性チェックを備えた Kerberos v5 プロトコル)
krb5p ( Kerberos v5 プロトコルにプライバシーサービスを加えたバージョン)
暗号化無でマウント
以下のコマンドでマウントを行います。
mount -t nfs FSxのNFS DNS名:/ /fsx
パフォーマンス確認にはddコマンドを使用しました。
dd if=/dev/zero of=/fsx/vol1/tmp.txt ibs=1M obs=1M count=900
結果は以下のようになりました。
スループットとしては平均して153 MB/s出ています。
回数 | 結果 |
---|---|
1回目 | 900+0 records in 900+0 records out 943718400 bytes (944 MB) copied, 6.21035 s, 152 MB/s |
2回目 | 900+0 records in 900+0 records out 943718400 bytes (944 MB) copied, 6.18504 s, 153 MB/s |
3回目 | 900+0 records in 900+0 records out 943718400 bytes (944 MB) copied, 6.11076 s, 154 MB/s |
krb5でマウント
以下のコマンドでマウントを行います。
mount -t nfs -o sec=krb5 FSxのNFS DNS名:/ /fsx
パフォーマンス確認コマンドは暗号化無でマウントしたときと同じコマンドで行っています。
結果は以下のようになりました。
スループットとしては平均して157 MB/s出ています。
回数 | 結果 |
---|---|
1回目 | 900+0 records in 900+0 records out 943718400 bytes (944 MB) copied, 6.3043 s, 150 MB/s |
2回目 | 900+0 records in 900+0 records out 943718400 bytes (944 MB) copied, 5.94663 s, 159 MB/s |
3回目 | 900+0 records in 900+0 records out 943718400 bytes (944 MB) copied, 5.8327 s, 162 MB/s |
krb5iでマウント
以下のコマンドでマウントを行います。
mount -t nfs -o sec=krb5i FSxのNFS DNS名:/ /fsx
結果は以下のようになりました。
スループットとしては平均して151 MB/s出ています。
回数 | 結果 |
---|---|
1回目 | 900+0 records in 900+0 records out 943718400 bytes (944 MB) copied, 6.14557 s, 154 MB/s |
2回目 | 900+0 records in 900+0 records out 943718400 bytes (944 MB) copied, 6.30562 s, 150 MB/s |
3回目 | 900+0 records in 900+0 records out 943718400 bytes (944 MB) copied, 6.34854 s, 149 MB/s |
krb5pでマウント
以下のコマンドでマウントを行います。
mount -t nfs -o sec=krb5p FSxのNFS DNS名:/ /fsx
結果は以下のようになりました。
スループットとしては平均して97 MB/s出ています。
回数 | 結果 |
---|---|
1回目 | 900+0 records in 900+0 records out 943718400 bytes (944 MB) copied, 10.9311 s, 86.3 MB/s |
2回目 | 900+0 records in 900+0 records out 943718400 bytes (944 MB) copied, 8.98025 s, 105 MB/s |
3回目 | 900+0 records in 900+0 records out 943718400 bytes (944 MB) copied, 9.44932 s, 99.9 MB/s |
さいごに
SMB を使用した転送中のデータの暗号化に比べると設定することも多く検証するのが少し大変でした。
利用してみた感想ですが、パフォーマンスに影響がでるものもあるので実際に利用する際は注意が必要だと思いました。