18.8. IBM Z での IBM Secure Execution の設定
IBM Z ハードウェアを使用して RHEL 10 ホストを実行する場合、仮想マシンに対して IBM Secure Execution 機能を設定することで、仮想マシン (VM) のセキュリティーを強化できます。
IBM Secure Execution (Protected Virtualization とも呼ばれる) は、ホストシステムが仮想マシンの状態とメモリーのコンテンツにアクセスできないようにします。その結果、ホストが危険にさらされても、ゲストオペレーティングシステムを攻撃するベクトルとして使用できません。さらに、Secure Execution を使用すると、信頼できないホストが仮想マシンから機密情報を取得するのを防ぐことができます。
IBM Secure Execution を有効にすることで、IBM Z ホスト上の既存の仮想マシンを安全な仮想マシンに変換できます。
実稼働環境を保護するには、ワークロードをさらに保護する方法を説明している Secure Execution を使用したワークロードの完全な保護に関する IBM ドキュメント を参照してください。
18.8.1. 手動で IBM Secure Execution 用に仮想マシンを設定する リンクのコピーリンクがクリップボードにコピーされました!
ゲスト仮想マシンに手動でログインし、ゲストオペレーティングシステム内で設定手順を実行することで、IBM Secure Execution を設定できます。この方法は、設定プロセスを直接制御できるため、セットアップの各ステップを検証する必要がある実稼働環境に適しています。
実稼働環境を保護するには、ワークロードをさらに保護する方法を説明している Secure Execution を使用したワークロードの完全な保護に関する IBM ドキュメント を参照してください。
前提条件
システムハードウェアに以下のいずれかを使用している。
- IBM z15 以降
- IBM LinuxONE III 以降
Secure Execution 機能がお使いのシステムで有効になっている。確認するには、次のコマンドを実行します。
# grep facilities /proc/cpuinfo | grep 158このコマンドで出力が表示された場合には、お使いの CPU は Secure Execution と互換性があります。
カーネルに Secure Execution のサポートが含まれている。これを確認するには、次のコマンドを実行します。
# ls /sys/firmware | grep uvこのコマンドで出力が表示された場合には、カーネルで Secure Execution がサポートされています。
ホストの CPU モデルに
unpack機能が含まれている。これを確認するには、次のコマンドを実行します。# virsh domcapabilities | grep unpack <feature policy='require' name='unpack'/>このコマンドで上記の出力が表示された場合には、お使いの CPU ホストモデルは Secure Execution と互換性があります。
仮想マシンの CPU モードが
host-modelに設定されている。# virsh dumpxml <vm_name> | grep "<cpu mode='host-model'/>"このコマンドで出力が表示された場合には、仮想マシンの CPU モデルは正しく設定されています。
genprotimg パッケージがホストにインストールされている必要がある。
# dnf install genprotimgホストから直接仮想マシンイメージを変更する場合に備えて、
guestfs-toolsパッケージがホストにインストールされています。# dnf install guestfs-tools- IBM Z のホストキーのドキュメントを取得および確認している。詳細は、IBM ドキュメントの Verifying the host key document を参照してください。
手順
ホストのブート設定に
prot_virt=1カーネルパラメーターを追加します。# grubby --update-kernel=ALL --args="prot_virt=1"ブートメニューを更新します。
# zipl
-
virsh editを使用して、セキュリティー保護する仮想マシンの XML 設定を変更します。 <launchSecurity type="s390-pv"/>を</devices>行の下に追加します。以下に例を示します。[...] </memballoon> </devices> <launchSecurity type="s390-pv"/> </domain>-
設定の
<devices>セクションにvirtio-rngデバイス (<rng model="virtio">) が含まれている場合は、<rng> </rng>ブロックのすべての行を削除します。 オプション: 保護対象の仮想マシンが 32 GiB 以上の RAM を使用している場合は、ホスト上の XML 設定の
<features></features>セクションに<async-teardown enabled='yes'/>行を追加します。これにより、そのような Secure Execution ゲストの再起動または停止のパフォーマンスが向上します。
保護対象の仮想マシンにログインし、パラメーターファイルを作成します。以下に例を示します。
# touch ~/secure-parametersゲストオペレーティングシステムの
/boot/loader/entriesディレクトリーで、最新バージョンのブートローダーエントリーを特定します。# ls /boot/loader/entries -l [...] -rw-r--r--. 1 root root 281 Oct 9 15:51 3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.confゲストオペレーティングシステムで、ブートローダーエントリーのカーネルオプションの行を取得します。
# cat /boot/loader/entries/3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf | grep options options root=/dev/mapper/rhel-root rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swapゲストオペレーティングシステムで、オプションの行の内容と
swiotlb=262144を作成済みのパラメーターファイルに追加します。# echo "root=/dev/mapper/rhel-root rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap swiotlb=262144" > ~/secure-parametersゲストオペレーティングシステムで、新しい IBM Secure Execution イメージを生成します。
たとえば、以下は
secure-parametersファイル、/boot/initramfs-4.18.0-240.el8.s390x.img初期 RAM ディスクファイル、およびHKD-8651-000201C048.crtホストキードキュメントを使用して、/boot/vmlinuz-4.18.0-240.el8.s390xイメージをもとに、セキュアなイメージ (/boot/secure-image) を作成します。# genprotimg -i /boot/vmlinuz-4.18.0-240.el8.s390x -r /boot/initramfs-4.18.0-240.el8.s390x.img -p ~/secure-parameters -k HKD-8651-00020089A8.crt -o /boot/secure-imagegenprotimgユーティリティーを使用すると、カーネルパラメーター、初期 RAM ディスク、ブートイメージを含む、セキュアなイメージが作成されます。仮想マシンのブートメニューを更新して、セキュアなイメージから起動します。さらに、
initrdおよびoptionsで始まる行は必要ないため削除します。たとえば、RHEL 8.3 仮想マシンでは、
/boot/loader/entries/ディレクトリーでブートメニューの編集が可能です。# cat /boot/loader/entries/3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf title Red Hat Enterprise Linux 8.3 version 4.18.0-240.el8.s390x linux /boot/secure-image [...]ゲストオペレーティングシステムで起動可能なディスクイメージを作成します。
# zipl -Vゲストオペレーティングシステムで、元の保護されていないファイルをセキュアに削除します。以下に例を示します。
# shred /boot/vmlinuz-4.18.0-240.el8.s390x # shred /boot/initramfs-4.18.0-240.el8.s390x.img # shred secure-parameters元のブートイメージ、初期 RAM イメージ、およびカーネルパラメーターファイルは保護されていません。削除しない場合には、Secure Execution が有効になっている仮想マシンで、ハッキングまたは機密データマイニングの攻撃を受ける可能性があります。
検証
ホストで、
virsh dumpxmlユーティリティーを使用して、セキュアな仮想マシンの XML 設定を確認します。設定には<launchSecurity type="s390-pv"/>要素を含み、<rng model="virtio"> 行は使用しないでください。# virsh dumpxml vm-name [...] <cpu mode='host-model'/> <devices> <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none' io='native'> <source file='/var/lib/libvirt/images/secure-guest.qcow2'/> <target dev='vda' bus='virtio'/> </disk> <interface type='network'> <source network='default'/> <model type='virtio'/> </interface> <console type='pty'/> <memballoon model='none'/> </devices> <launchSecurity type="s390-pv"/> </domain>
18.8.2. ホストから IBM Secure Execution 用に仮想マシンを設定する リンクのコピーリンクがクリップボードにコピーされました!
guestfs-tools パッケージを使用すると、ホストから直接 IBM Secure Execution を設定できます。仮想マシンを起動する必要はありません。ただし、この方法は、複数の仮想マシンを迅速に設定したり、セットアッププロセスを自動化したりする必要があるテスト環境や開発環境にのみ適しています。
実稼働環境を保護するには、ワークロードをさらに保護する方法を説明している Secure Execution を使用したワークロードの完全な保護に関する IBM ドキュメント を参照してください。
前提条件
システムハードウェアに以下のいずれかを使用している。
- IBM z15 以降
- IBM LinuxONE III 以降
Secure Execution 機能がお使いのシステムで有効になっている。確認するには、次のコマンドを実行します。
# grep facilities /proc/cpuinfo | grep 158このコマンドで出力が表示された場合には、お使いの CPU は Secure Execution と互換性があります。
カーネルに Secure Execution のサポートが含まれている。これを確認するには、次のコマンドを実行します。
# ls /sys/firmware | grep uvこのコマンドで出力が表示された場合には、カーネルで Secure Execution がサポートされています。
ホストの CPU モデルに
unpack機能が含まれている。これを確認するには、次のコマンドを実行します。# virsh domcapabilities | grep unpack <feature policy='require' name='unpack'/>このコマンドで上記の出力が表示された場合には、お使いの CPU ホストモデルは Secure Execution と互換性があります。
仮想マシンの CPU モードが
host-modelに設定されている。# virsh dumpxml <vm_name> | grep "<cpu mode='host-model'/>"このコマンドで出力が表示された場合には、仮想マシンの CPU モデルは正しく設定されています。
genprotimg パッケージがホストにインストールされている必要がある。
# dnf install genprotimgホストから直接仮想マシンイメージを変更する場合に備えて、
guestfs-toolsパッケージがホストにインストールされています。# dnf install guestfs-tools- IBM Z のホストキーのドキュメントを取得および確認している。詳細は、IBM ドキュメントの Verifying the host key document を参照してください。
手順
ホストのブート設定に
prot_virt=1カーネルパラメーターを追加します。# grubby --update-kernel=ALL --args="prot_virt=1"ブートメニューを更新します。
# zipl
-
virsh editを使用して、セキュリティー保護する仮想マシンの XML 設定を変更します。 <launchSecurity type="s390-pv"/>を</devices>行の下に追加します。以下に例を示します。[...] </memballoon> </devices> <launchSecurity type="s390-pv"/> </domain>-
設定の
<devices>セクションにvirtio-rngデバイス (<rng model="virtio">) が含まれている場合は、<rng> </rng>ブロックのすべての行を削除します。 オプション: 保護対象の仮想マシンが 32 GiB 以上の RAM を使用している場合は、ホスト上の XML 設定の
<features></features>セクションに<async-teardown enabled='yes'/>行を追加します。これにより、そのような Secure Execution ゲストの再起動または停止のパフォーマンスが向上します。
ホスト上で、ホストキードキュメントを含み、かつ Secure Execution を使用するように既存の仮想マシンを設定するスクリプトを作成します。以下に例を示します。
#!/usr/bin/bash echo "$(cat /proc/cmdline) swiotlb=262144" > parmfile cat > ./HKD.crt << EOF -----BEGIN CERTIFICATE----- 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 xLPRGYwhmXzKDg== -----END CERTIFICATE----- EOF version=$(uname -r) kernel=/boot/vmlinuz-$version initrd=/boot/initramfs-$version.img genprotimg -k ./HKD.crt -p ./parmfile -i $kernel -r $initrd -o /boot/secure-linux --no-verify cat >> /etc/zipl.conf<< EOF [secure] target=/boot image=/boot/secure-linux EOF zipl -V shutdown -h now- 仮想マシンがシャットダウンしていることを確認します。
ホスト上で、
guestfs-toolsを使用して既存の仮想マシンイメージにスクリプトを追加し、そのスクリプトを 初回起動時に実行 するように指定します。# virt-customize -a <vm_image_path> --selinux-relabel --firstboot <script_path>追加したスクリプトを使用して、イメージから仮想マシンを起動します。
スクリプトは初回起動時に実行され、続いて仮想マシンを再度シャットダウンします。その結果、仮想マシンは、対応するホストキーを持つホスト上の Secure Execution で実行するように設定されます。
検証
ホストで、
virsh dumpxmlユーティリティーを使用して、セキュアな仮想マシンの XML 設定を確認します。設定には<launchSecurity type="s390-pv"/>要素を含み、<rng model="virtio"> 行は使用しないでください。# virsh dumpxml vm-name [...] <cpu mode='host-model'/> <devices> <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none' io='native'> <source file='/var/lib/libvirt/images/secure-guest.qcow2'/> <target dev='vda' bus='virtio'/> </disk> <interface type='network'> <source network='default'/> <model type='virtio'/> </interface> <console type='pty'/> <memballoon model='none'/> </devices> <launchSecurity type="s390-pv"/> </domain>