5.6. インスタンスのメモリーを暗号化するための AMD SEV コンピュートノードの設定


重要

この機能は、このリリースでは テクノロジープレビュー として提供しているため、Red Hat では全面的にはサポートしていません。これは、テスト用途にのみご利用いただく機能です。実稼働環境にはデプロイしないでください。テクノロジープレビュー機能の詳細は、対象範囲の詳細 を参照してください。

AMD が提供する Secure Encrypted Virtualization (SEV) は、実行中の仮想マシンインスタンスが使用している DRAM のデータを保護します。SEV は、各インスタンスのメモリーを一意の鍵で暗号化します。

クラウドユーザーは、メモリーの暗号化が有効な SEV 対応コンピュートノード上で動作するインスタンスを作成することができます。

この機能は、2nd Gen AMD EPYC™ 7002 Series ("Rome") から利用できます。

クラウドユーザーがメモリーの暗号化を使用するインスタンスを作成できるようにするには、以下のタスクを実施する必要があります。

  1. メモリーの暗号化用に AMD SEV コンピュートノードを指定する。
  2. メモリーの暗号化用にコンピュートノードを設定する。
  3. データプレーンをデプロイします。
  4. メモリーを暗号化してインスタンスを起動するためのフレーバーまたはイメージを作成する。
ヒント

AMD SEV ハードウェアが制限されている場合は、ホストアグリゲートを設定して AMD SEV コンピュートノードでのスケジューリングを最適化することもできます。メモリーの暗号化を要求するインスタンスのみを AMD SEV コンピュートノードにスケジュールするには、AMD SEV ハードウェアを持つコンピュートノードのホストアグリゲートを作成し、Compute スケジューラーがメモリーの暗号化を要求するインスタンスのみをホストアグリゲートに配置するように設定します。

詳細は、Creating and managing host aggregates および Filtering by isolating host aggregates を参照してください。

5.6.1. Secure Encrypted Virtualization (SEV)

AMD が提供する Secure Encrypted Virtualization (SEV) は、動作中の仮想マシンインスタンスが使用している DRAM のデータを保護します。SEV は、各インスタンスのメモリーを一意の鍵で暗号化します。

SEV は、不揮発性メモリーテクノロジー (NVDIMM) を使用する際にセキュリティーを強化します。ハードドライブと同様に、NVDIMM チップはデータが保存されたままシステムから物理的に取り外すことができるためです。暗号化しないと、機密データ、パスワード、またはシークレットキー等の保存された情報が危険にさらされる可能性があります。

詳細は、AMD Secure Encrypted Virtualization (SEV) のドキュメントを参照してください。

メモリー暗号化を使用したインスタンスには、以下のような制限があります。

  • メモリー暗号化を使用するインスタンスのライブマイグレーションや、インスタンスを一時停止および再開することはできません。
  • PCI パススルーを使用して、メモリーの暗号化を使用するインスタンス上のデバイスに直接アクセスすることはできません。
  • kernel-4.18.0-115.el8 (RHEL-8.1.0) 以前の Red Hat Enterprise Linux (RHEL) カーネルでメモリー暗号化を使用するインスタンスのブートディスクとして virtio-blk を使用することはできません。

    注記

    virtio-scsi または SATA をブートディスクとして使用することができます。また、ブートディスク以外の用途に virtio-blk を使用することができます。

  • 暗号化されたインスタンスで実行されているオペレーティングシステムは、SEV をサポートしている必要があります。詳細は、Red Hat ナレッジベースのソリューション Enabling AMD Secure Encrypted Virtualization in RHEL 8 を参照してください。
  • SEV をサポートするマシンでは、暗号鍵を格納するためのメモリーコントローラーのスロット数に制限があります。動作中のメモリーが暗号化された各インスタンスは、これらのスロットの 1 つを使用します。したがって、同時に実行できるメモリー暗号化インスタンスの数は、メモリーコントローラーのスロット数に制限されます。たとえば、1st Gen AMD EPYC™ 7001 Series ("Naples") の場合、制限は 16 で、2nd Gen AMD EPYC™ 7002 Series ("Rome") では上限は 255 です。
  • メモリー暗号化を使用するインスタンスの RAM ページの固定Compute サービスはこれらのページをスワップすることができないため、メモリーが暗号化されたインスタンスをホストするコンピュートノードでメモリーをオーバーコミットすることはできません。
  • NUMA ノードが複数あるインスタンスでは、メモリーの暗号化を使用することはできません。

5.6.2. メモリー暗号化用 AMD SEV コンピュートノードの指定

メモリーの暗号化を使用するインスタンス用に AMD SEV コンピュートノードを指定するには、AMD SEV ロールを設定するための新規ノードセットを作成し、メモリーの暗号化のためにコンピュートノードをタグ付けするための AMD SEV リソースクラスを持つベアメタルノードを設定する必要があります。

注記

次の手順は、まだプロビジョニングされていない新しいデータプレーンノードに適用されます。すでにプロビジョニングされている既存のノードにリソースクラスを割り当てるには、スケールダウン手順を使用してノードをプロビジョニング解除してから、スケールアップ手順を使用して新しいリソースクラスの割り当てでノードを再プロビジョニングする必要があります。

詳細は、Red Hat OpenStack Services on OpenShift デプロイメントのカスタマイズ機能またはワークロード用のノードセットの設定 を参照してください。

5.6.3. メモリー暗号化用 AMD SEV コンピュートノードの設定

クラウドユーザーがメモリーの暗号化を使用するインスタンスを作成できるようにするには、AMD SEV ハードウェアを持つコンピュートノードを設定する必要があります。

警告

ノードセット全体のみ設定できます。ノードセット内のノードのサブセットを再設定することはサポートされていません。ノードセット内のノードのサブセットを再設定する必要がある場合は、ノードセットをスケールダウンし、以前に削除したノードから新しいノードセットを作成する必要があります。

前提条件

  • oc コマンドラインツールがワークステーションにインストールされている。
  • cluster-admin 権限を持つユーザーとして、Red Hat OpenStack Services on OpenShift (RHOSO) にログインしている。
  • CPU ピニングを設定するノードを定義する OpenStackDataPlaneNodeSet CR を選択した。OpenStackDataPlaneNodeSet CR 作成の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドの 事前プロビジョニングされたノードを使用した OpenStackDataPlaneNodeSet CR の作成 を参照してください。
  • デプロイメントには、SEV に対応する AMD ハードウェア (AMD EPYC CPU 等) 上で実行されるコンピュートノードが含まれている必要があります。以下のコマンドを使用して、デプロイメントが SEV に対応しているかどうか判断することができます。

    $ lscpu | grep sev

手順

  1. nova-extra-config.yaml という名前の ConfigMap CR を作成または更新し、[libvirt] の下にあるパラメーターの値を設定します。

    apiVersion: v1
    kind: ConfigMap
    metadata:
       name: nova-extra-config
       namespace: openstack
    data:
       30-nova-amd-sev.conf: |
         [libvirt]
         num_memory_encrypted_guests = 15
    注記

    libvirt/num_memory_encrypted_guests パラメーターのデフォルト値は none です。カスタム値を設定しない場合、AMD SEV コンピュートノードは、ノードが同時にホストできるメモリーが暗号化されたインスタンスの数に制限を設けません。代わりに、ハードウェアが、AMD SEV コンピュートノードが同時にホストできるメモリーが暗号化されたインスタンス数の最大値を決定します。この場合、メモリーが暗号化されたインスタンスの一部が起動に失敗する可能性があります。

    注記

    Q35 マシンタイプはデフォルトのマシンタイプであり、SEV に必要です。

  2. AMD SEV コンピュートノードのカーネルパラメーターを設定するには、更新するノードセットの OpenStackDataPlaneNodeSet CR 定義ファイル (例: my_data_plane_node_set.yaml) を開きます。
  3. 必要なネットワーク設定を追加するか、ansibleVars の下の edpm_kernel_args で既存の設定を変更します。

    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneNodeSet
    metadata:
       name: my-data-plane-node-set
    spec:
       ...
       nodeTemplate:
         ...
         ansible:
           ansibleVars:
           edpm_kernel_args: "kvm_amd.sev=1"
  4. オプション: ホストメモリーを暗号化するには、edpm_kernel_argsmem_encrypt=on を追加します。

    警告

    デバイスドライバーがメモリー暗号化をサポートしていることを確認してください。

          edpm_kernel_args: "kvm_amd.sev=1 mem_encrypt=on"
  5. 新しい OpenStackDataPlaneDeployment CR を作成し、データプレーンノード上のサービスを設定してデータプレーンをデプロイし、ワークステーション上の compute_amd_sev_deploy.yaml という名前のファイルに保存します。

    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneDeployment
    metadata:
       name: openstack-edpm-amd-sev
  6. compute_amd_sev_deploy.yaml で、デプロイするすべての OpenStackDataPlaneNodeSet CR を含めるように nodeSets を指定します。前提条件として選択した OpenStackDataPlaneNodeSet CR が含まれていることを確認してください。この OpenStackDataPlaneNodeSet CR は、メモリー暗号化に指定するノードを定義します。

    警告

    デプロイメントに複数のノードセットがある場合、NodeSet と DataPlaneServices がどのように設定されているかにより、nova-extra-config.yaml ConfigMap への変更が複数のノードセットに直接影響する可能性があります。ノードセットが nova-extra-config.yaml ConfigMap を使用しているために再設定の影響を受けるかを確認するには、次の手順を実行します。

    1. ノードセットのサービスリストを確認し、nova を指す DataPlaneService の名前を見つけます。
    2. DataPlaneService の edpmServiceType フィールドの値が nova に設定されていることを確認します。

      DataPlaneService の dataSources リストに nova-extra-config という名前の configMapRef が含まれている場合、このノードセットはその ConfigMap を使用するため、ConfigMap に加えた設定変更の影響を受けます。影響を受けるノードセットの一部を再設定しない場合は、これらのノードセットの別の ConfigMap を指す新しい DataPlaneService を作成する必要があります。

    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneDeployment
    metadata:
       name: openstack-edpm-amd-sev
    spec:
       nodeSets:
         - openstack-edpm
         - compute-amd-sev
         - my-data-plane-node-set
         - ...
         - <nodeSet_name>
    • <nodeSet_name> を、データプレーンデプロイメントに含める OpenStackDataPlaneNodeSet CR の名前に置き換えます。
  7. compute_amd_sev_deploy.yaml デプロイメントファイルを保存します。
  8. データプレーンをデプロイします。

    $ oc create -f compute_amd_sev_deploy.yaml
  9. データプレーンがデプロイされていることを確認します。

    $ oc get openstackdataplanenodeset
    NAME           STATUS MESSAGE
    openstack-edpm True   Deployed
  10. openstackclient のリモートシェルにアクセスし、デプロイされたコンピュートノードがコントロールプレーンに表示されることを確認します。

    $ oc rsh -n openstack openstackclient
    $ openstack hypervisor list

5.6.4. メモリー暗号化用のイメージの作成

データプレーンに AMD SEV コンピュートノードが含まれる場合、AMD SEV インスタンスイメージを作成することができます。クラウドユーザーはこのイメージを使用して、メモリーが暗号化されたインスタンスを起動することができます。

注記

クラウド上で openstack クライアントコマンドを実行するには、clouds.yaml ファイルに詳細が記載されているクラウドの名前を指定する必要があります。次のいずれかの方法を使用して、クラウドの名前を指定できます。

  • 各コマンドで --os-cloud オプションを使用します。

    $ openstack flavor list --os-cloud <cloud_name>

    複数のクラウドにアクセスする場合は、このオプションを使用します。

  • bashrc ファイルにクラウド名の環境変数を作成します。

    `export OS_CLOUD=<cloud_name>`

前提条件

  • 管理者がプロジェクトを作成し、管理者からクラウドにアクセスするための clouds.yaml ファイルが提供されている。
  • python-openstackclient パッケージがインストールされている。

手順

  1. メモリー暗号化用の新規イメージの作成

     $ openstack image create ...  \
     --property hw_firmware_type=uefi amd-sev-image
    注記

    既存のイメージを使用する場合、イメージの hw_firmware_type 属性が uefi に設定されている必要があります。

  2. イメージに属性 hw_mem_encryption=True を追加して、イメージで AMD SEV のメモリー暗号化を有効にします。

     $ openstack image set  \
     --property hw_mem_encryption=True amd-sev-image
    ヒント

    フレーバーでメモリー暗号化を有効にすることができます。詳細は、Creating a flavor for memory encryption を参照してください。

5.6.5. メモリー暗号化用のフレーバーの作成

データプレーンに AMD SEV コンピュートノードが含まれる場合、1 つまたは複数の AMD SEV フレーバーを作成することができます。クラウドユーザーはこのイメージを使用して、メモリーが暗号化されたインスタンスを起動することができます。

前提条件

  • ワークステーションに oc コマンドラインツールがインストール済みである。
  • cluster-admin 権限を持つユーザーとして、RHOSO コントロールプレーンにアクセスできるワークステーションにログオン済みである。
注記

AMD SEV フレーバーは、hw_mem_encryption 属性がイメージで設定されていない場合にのみ必要です。

手順

  1. ワークステーションから OpenStackClient Pod のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. メモリー暗号化用のフレーバーを作成します。

    $ openstack flavor create --vcpus 1 --ram 512 --disk 2  \
    --property hw:mem_encryption=True m1.small-amd-sev
  3. openstackclient Pod を終了します。

    $ exit

5.6.6. メモリーが暗号化されたインスタンスの起動

メモリーの暗号化を有効にして AMD SEV コンピュートノードでインスタンスを起動できることを確認するには、メモリー暗号化フレーバーまたはイメージを使用してインスタンスを作成します。

注記

クラウド上で openstack クライアントコマンドを実行するには、clouds.yaml ファイルに詳細が記載されているクラウドの名前を指定する必要があります。次のいずれかの方法を使用して、クラウドの名前を指定できます。

  • 各コマンドで --os-cloud オプションを使用します。

    $ openstack flavor list --os-cloud <cloud_name>

    複数のクラウドにアクセスする場合は、このオプションを使用します。

  • bashrc ファイルにクラウド名の環境変数を作成します。

    `export OS_CLOUD=<cloud_name>`

前提条件

  • 管理者がプロジェクトを作成し、管理者からクラウドにアクセスするための clouds.yaml ファイルが提供されている。
  • python-openstackclient パッケージがインストールされている。

手順

  1. AMD SEV フレーバーまたはイメージを使用してインスタンスを作成します。以下の例では、メモリー暗号化用のフレーバーの作成 で作成したフレーバーおよび メモリー暗号化用のイメージの作成 で作成したイメージを使用してインスタンスを作成します。

     $ openstack server create --flavor m1.small-amd-sev \
     --image amd-sev-image amd-sev-instance
  2. クラウドユーザーとしてインスタンスにログインします。
  3. インスタンスがメモリーの暗号化を使用していることを確認するには、インスタンスから以下のコマンドを入力します。

    $ dmesg | grep -i sev
    AMD Secure Encrypted Virtualization (SEV) active
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る