AMD 社が提供する Secure Encrypted Virtualization-Secure Nested Paging (SEV-SNP) を使用することで、お使いの仮想マシンに対するセキュリティを強化することができます。 AMD SEV-SNP 機能は仮想マシンをホストシステムや他の仮想マシンから切り離し、データやコードの保護を提供する仕組みです。この機能ではデータを暗号化するほか、仮想マシン内で実行するコードやデータを検出して追跡する仕組みを備えています。この仕組みにより仮想マシンを分離することができますので、たとえ仮想マシンが不正侵入された場合であっても、他の仮想マシンやホストマシンに影響が無いようにすることができます。
本章では、お使いの AMD EPYC サーバで openSUSE Leap 15.7 を利用した際に、 AMD SEV-SNP 機能を有効化するための手順を説明しています。
この機能は openSUSE Leap 15 SP6 での技術プレビューとして提供されているものです。必要なパッケージは既定のインストールではインストールされず、リポジトリも別途設定する必要があることに注意してください。必要なパッケージは Confidential Compute Module として提供されています。
AMD SEV-SNP 仮想マシンを実行するには、 AMD 社の EPYC (第 3 世代もしくはそれ以降) を搭載したシステムが必要となります。また、 BIOS 設定でコンフィデンシャル・コンピューティング機能を有効化する設定が提供されている必要もあります。
AMD SEV-SNP に必要なパッケージは Confidential Compute Module として提供されています。このモジュールはインストール時に有効化できるほか、 SUSEConnect コマンドラインツールを利用して後から有効化することもできます。
モジュールを有効化しているかどうかを確認するには、下記のコマンドを実行します:
>
sudo
suseconnect -l
上記を実行することにより、利用可能なモジュールとその有効化状態が出力されるほか、有効化するためのコマンドも表示されます。
Confidential Compute Module が有効化されていない場合は、下記のように出力されます:
Confidential Computing Technical Preview Module 15 SP6 x86_64 Activate with: suseconnect -p sle-module-confidential-computing/15.6/x86_64
Confidential Compute Module 技術プレビューを有効化するには、下記のコマンドを実行します:
>
sudo
suseconnect -p sle-module-confidential-computing/15.6/x86_64
Registering system to SUSE Customer Center Updating system details on https://scc.suse.com ... Activating sle-module-confidential-computing 15.6 x86_64 ... Adding service to system ... Installing release package ... Successfully registered system
上記のように出力されればモジュールの登録は成功です。あとは必要なパッケージをインストールして設定するだけです。
Confidential Compute Module では、 AMD SEV-SNP に対応するための代替パッケージを提供しています。また、最大限の互換性を確保するため、下記に示すパッケージはいずれも openSUSE Leap 15.7 のコードストリームをベースにしています。
置き換える必要のあるパッケージは下記のとおりです:
Linux カーネル
QEMU 仮想マシンモニタ
libvirt
フレームワーク
パッケージを置き換えながらインストールするには、下記のコマンドを実行します:
>
sudo
zypper install --from SLE-Module-Confidential-Computing-15-SP6-Pool --from SLE-Module-Confidential-Computing-15-SP6-Updates qemu-ovmf-x86_64 libvirt kernel-coco
パッケージの置き換えが完了したら、あとは AMD SEV-SNP を使用するための設定変更を実施します。ホスト側では、非パススルーモードで IOMMU を設定しなければなりません。これは、周辺機器から暗号化されたゲストに属するメモリに対して、書き込みを防止し、データの破壊を防ぐために必要な措置となります。 openSUSE Leap 15.7 での既定値は passthrough
(パススルー) になっています。
openSUSE Leap 15.7 で IOMMU の設定を無効化するには、 /etc/default/grub
ファイルを開いて、 GRUB_CMDLINE_LINUX_DEFAULT
変数内に iommu=nopt
を追加します。
設定変更後はブートローダの設定を更新します。下記のコマンドを実行してください:
>
sudo
;update-bootloader
あとはシステムを再起動することで、 Confidential Compute Module が有効化されたカーネルを起動することができます。なお、ブートローダ側の設定で既定のカーネルとして選択されていない場合は、起動メニューで選択しておいてください。
次にインストールの確認とパッケージの設定を行います。
まずは新しいカーネルで起動していることを確認します。 uname -r
コマンドを実行して、下記のように出力されていることを確認します。
>
sudo
uname -r
6.4.0-150616.coco15sp6-coco
上記のように 「coco」 というタグが表示されていることを確認してください。
また、カーネルの起動時に AMD Secure Processor の初期化結果が出力されていることを確認します。下記のようにコマンドを実行して確認してください:
>
sudo
dmesg | grep -i ccp
[ 10.103166] ccp 0000:42:00.1: enabling device (0000 -> 0002) [ 10.114951] ccp 0000:42:00.1: no command queues available [ 10.127137] ccp 0000:42:00.1: sev enabled [ 10.133152] ccp 0000:42:00.1: psp enabled [ 10.240817] ccp 0000:42:00.1: SEV firmware update successful [ 11.128307] ccp 0000:42:00.1: SEV API:1.55 build:8 [ 11.135057] ccp 0000:42:00.1: SEV-SNP API:1.55 build:8
上記のように SEV-SNP API のバージョン文字列が表示されていれば、 AMD Secure Processor の準備ができたことになります。なお、上記のように表示されていない場合は、 BIOS 設定が正しくないか、 IOMMU の設定が更新されていないものと考えられます。
Confidential Compute Module が有効化されたカーネルを利用して起動し、 AMD セキュリティプロセッサが初期化されていれば、あとは libvirt
フレームワーク内で仮想マシンを実行することで、 AMD SEV-SNP で保護された仮想マシンを起動することができます。
libvirt
では新しい仮想マシンを設定するにあたって複数の方法が提供されています。本文書では、 virt-manager グラフィカルユーザインターフェイスを利用してディスクイメージの作成から仮想マシンの作成までを実施するものとします。
virt-manager を利用して AMD EPYC ホストに接続し、新しい仮想マシンを作成します。
新しい仮想マシンの作成ウインドウ内では、それぞれ下記を選択します:
まずはインストールしたいオペレーティングシステムを選択します。
ISO イメージまたは CD-ROM インストールメディアを選択します。
メモリや CPU の設定を実施します。
あとは必要なストレージ設定を実施します。
手順の 5 番目では、設定内容を確認したあと、 インストールの前に設定をカスタマイズする を選択します。
完了 を押します。
仮想マシンの設定ウインドウでは、 XML タブを選択します。
XML タブでは libvirt
が使用する仮想マシンの XML 設定を直接編集することができます。
AMD SEV-SNP で仮想マシンを保護するには、下記のようにして os
セクション内で適切なファームウエアを選択する必要があります:
loader
内で OVMF の SEV 対応版を設定してください。
また、 launchSecurity
セクションを追加する必要があります。 AMD SEV-SNP の場合は、下記のようになります:
設定が終わったら 適用 を押し、 詳細 タブを選択します。
左側の一覧で 種類 を に変更します:
を選択して、 CPU の適用 ボタンを押し、 インストールの開始 を押します。
これにより仮想マシンを起動することができます。後は必要に応じてインストールを実施してください。インストール後は再度仮想マシンを起動して、 AMD SEV-SNP による保護が動作しているかどうかを確認します。
仮想マシンの実行状態だけではコンフィデンシャル・コンピューティングが有効化されているかどうかがわかりません。代わりに仮想マシン内で確認する方法がいくつか提供されています。
カーネルログから確認する場合は、下記のようなコマンドを実行します:
>
sudo
dmesg | grep -i sev-snp
[ 1.986186] Memory Encryption Features active: AMD SEV SEV-ES SEV-SNP
カーネルログ内にメモリの暗号化機能として SEV-SNP が表示されていれば、コンフィデンシャル・コンピューティングが動作していて、仮想マシンに対してそれが有効化されていることがわかります。
AMD SEV-SNP 環境でセキュリティを証明するための、暗号方式として安全な方法もあります。