Red Hat Training

A Red Hat training course is available for RHEL 8

15.6. IBM Z での IBM Secure Execution の設定

IBM Z ハードウェアを使用して RHEL 8 ホストを実行する場合は、仮想マシンの IBM Secure Execution を設定して、仮想マシンのセキュリティーを強化できます。

IBM Secure Execution (Protected Virtualization とも呼ばれる) は、ホストシステムが仮想マシンの状態とメモリーのコンテンツにアクセスできないようにします。その結果、ホストが危険にさらされても、ゲストオペレーティングシステムを攻撃するベクトルとして使用できません。さらに、セキュア実行を使用して、信頼できないホストが仮想マシンから機密情報を取得しないようにすることもできます。

次の手順では、IBM Z ホストの既存の仮想マシンを、セキュアな仮想マシンに変換する方法を説明します。

前提条件

  • システムハードウェアに以下のいずれかを使用している。

    • 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 に設定されている。これを確認するには、以下を使用します。vm-name は、仮想マシンの名前に置き換えます。

    # virsh dumpxml vm-name | grep "<cpu mode='host-model'/>"

    このコマンドで出力が表示された場合には、仮想マシンの CPU モデルは正しく設定されています。

手順

  1. prot_virt=1 カーネルパラメーターをホストの ブート設定 に追加します。

    # # grubby --update-kernel=ALL --args="prot_virt=1"
  2. セキュリティー保護する仮想マシンのパラメーターファイルを作成します。以下に例を示します。

    # touch ~/secure-parameters
  3. ホストの /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
  4. ブートローダーエントリーからカーネルオプションの行を取得します。

    # cat /boot/loader/entries/3ab27a195c2849429927b00679db15c1-4.18.0-240.el8.s390x.conf | grep options
    options root=/dev/mapper/rhel-root crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap
  5. オプションの行の内容と swiotlb=262144 を作成したパラメーターのファイルに追加します。

    # echo "root=/dev/mapper/rhel-root crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap swiotlb=262144" > ~/secure-parameters
  6. 選択した仮想マシンの 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-image

    genprotimg ユーティリティーを使用すると、カーネルパラメーター、初期 RAM ディスク、ブートイメージを含む、セキュアなイメージが作成されます。

  7. 仮想マシンのゲストオペレーティングシステムで、仮想マシンのブートメニューを更新して、このセキュアなイメージから起動します。さらに、initrd および オプション で始まる行は必要ないので削除します。

    たとえば、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
    [...]
  8. 共有バッファーを使用するように virtio デバイスを有効にします。これには、virsh edit を使用して、仮想マシンの XML 設定を変更し、<driver> の行があるデバイスの <driver> 行に iommu='on' を追加します。以下に例を示します。

    <interface type='network'>
      <source network='default'/>
      <model type='virtio'/>
      <driver name='vhost' iommu='on'/>
    </interface>

    デバイス設定に <driver> 行が含まれていない場合には、代わりに <driver iommu='on'\> を追加します。

  9. 仮想マシンのメモリーバルーン機能は Secure Execution と互換性がないため、無効にします。これには、仮想マシンの XML 設定に以下の行を追加します。

    <memballoon model='none'/>
  10. ブート可能なディスクイメージの作成

    # zipl -V
  11. 保護されていない元のファイルを安全に削除します。以下に例を示します。

    # 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 設定を確認します。設定には <driver iommu='on'/><memballoon model='none'/> の要素が含まれている必要があります。

    # virsh dumpxml vm-name
    [...]
      <cpu mode='host-model'/>
      <devices>
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2' cache='none' io='native' iommu='on'>
          <source file='/var/lib/libvirt/images/secure-guest.qcow2'/>
          <target dev='vda' bus='virtio'/>
        </disk>
        <interface type='network'>
          <driver iommu='on'/>
          <source network='default'/>
          <model type='virtio'/>
        </interface>
        <console type='pty'/>
        <memballoon model='none'/>
      </devices>
    </domain>

関連情報