使用中のワークロード データを Confidential GKE Node で暗号化する

このページでは、Confidential Google Kubernetes Engine ノードを使用して、ノードとワークロードで使用中のデータの暗号化を適用する方法を説明します。暗号化を適用すると、ワークロードのセキュリティを強化できます。

このページは、GKE にセキュリティ対策を実装するセキュリティ スペシャリストを対象としています。 Google Cloud のコンテンツで使用されている一般的なロールとタスクの例の詳細については、一般的な GKE ユーザーのロールとタスクをご覧ください。

このページを読む前に、使用中のデータのコンセプトを理解しておいてください。

Confidential GKE Node とは

ワークロードを暗号化するには、Confidential GKE Node を使用するか、Hyperdisk Balanced の情報保護モードを使用します。

Confidential GKE Node

Confidential GKE Node は、Compute Engine Confidential VM を使用して、ハードウェア ベースのメモリ暗号化で使用中のデータを保護します。Confidential GKE Node は、次の Confidential Computing テクノロジーをサポートしています。

  • AMD Secure Encrypted Virtualization(SEV)
  • AMD Secure Encrypted Virtualization-Secure Nested Paging(SEV-SNP)
  • Intel Trust Domain Extensions(TDX)

これらのテクノロジーの詳細と、要件に最適なテクノロジーの選択に役立つ情報については、Confidential VMs の概要をご覧ください。

Confidential GKE Node により、GKE がクラスタ コントロール プレーンに適用するセキュリティ対策が変更されることはありません。これらの対策については、コントロール プレーンのセキュリティをご覧ください。 Google Cloudプロジェクトのコントロール プレーンにどのユーザーがアクセスしているかを可視化するには、アクセスの透明性を使用します。

Confidential GKE Node は、クラスタ全体、特定のノードプール、または特定のワークロードに対して有効にできます。次の表に、これらの有効化方法を示します。

Confidential GKE Node の設定 説明 動作
ワークロード レベル ComputeClass で Confidential GKE Node を構成し、ワークロードでその ComputeClass を選択します。GKE は、その構成を使用して Pod を実行するノードを作成します。

ワークロード設定は、クラスタモードやノードプールのタイプに関係なく、次の Confidential Computing テクノロジーをサポートしています。

  • AMD SEV
  • AMD SEV-SNP
  • Intel TDX
クラスタレベル この設定は元に戻せません。

新しい Autopilot クラスタまたは Standard クラスタを作成するときに、Confidential GKE Node を有効にします。クラスタ内のすべてのノードで Confidential GKE Node が使用されます。個々のノードプールまたはワークロードのクラスタ設定をオーバーライドすることはできません。

クラスタレベルでサポートされるテクノロジーは、次のようにクラスタの運用モードによって異なります。

  • Autopilot クラスタ: AMD SEV
  • Standard クラスタ:
    • AMD SEV
    • AMD SEV-SNP
    • Intel TDX
ノードプール レベル Standard クラスタで新しいノードプールを作成するときに、Confidential GKE Node を有効にします。この方法は、Confidential GKE Node がクラスタレベルで無効になっている場合にのみ使用できます。

ノードプール レベルでサポートされているテクノロジーは、ノードプールがノード自動プロビジョニングを使用するかどうかによって異なります。

  • 手動で作成したノードプール:
    • AMD SEV
    • AMD SEV-SNP
    • Intel TDX
  • 自動プロビジョニングされたノードプール:
    • AMD SEV
    • AMD SEV-SNP

Hyperdisk Balanced の情報保護モード

Hyperdisk Balanced の情報保護モードをブートディスク ストレージに対して有効にすることもできます。これにより、追加のハードウェア格納型エンクレーブでデータが暗号化されます。

Hyperdisk Balanced の情報保護モードは、次のいずれかを行うときに有効化できます。

  • 新しいクラスタを作成する
  • 新しいノードプールを作成する

既存のクラスタまたはノードプールを更新して Hyperdisk Balanced の情報保護モードの設定を変更することはできません。

次の表に示すのは、Hyperdisk Balanced の情報保護モードの設定をクラスタレベルまたはノードプール レベルで有効にしたときに適用される GKE の動作です。

Hyperdisk Balanced の情報保護モードの設定 設定方法 動作
クラスタレベル 新しいクラスタを作成する クラスタのデフォルト ノードプールのみが、Hyperdisk Balanced の情報保護モードの設定を使用します。以下のことはできません
  • クラスタ内の既存のノードプールに対して Hyperdisk Balanced の情報保護モードの設定を無効にする
  • 既存のクラスタに対して Hyperdisk Balanced の情報保護モードの設定を有効にする
ノードプール レベル 新しいノードプールを作成する 新しいノードプールについては、その作成時に Hyperdisk Balanced の情報保護モードの設定を構成できます。Hyperdisk Balanced の情報保護モードの設定を使用するように既存のノードプールを更新することはできません。

料金

Confidential GKE Node の構成方法に応じて、次の料金が適用されます。

Confidential GKE Node の料金
ワークロードレベル

Autopilot ワークロードでは、次の両方の費用が適用されます。

  • Pod が実行される Compute Engine マシンシリーズに対する Autopilot ノードベースの課金。詳細については、Google Kubernetes Engine の料金の「特定のハードウェア要件がある Pod」をご覧ください。
  • Confidential GKE Node の料金。詳細については、Confidential VM の料金の「GKE Autopilot 上の Confidential GKE Node の料金」をご覧ください。

Standard ワークロードでは、次の両方の費用が適用されます。

クラスタレベル

Autopilot クラスタでは、次の両方の費用が適用されます。

  • Balanced コンピューティング クラスの料金。クラスタのデフォルトのマシンシリーズが N2D に変更されるためです。詳細については、Google Kubernetes Engine の料金の「バランス型とスケールアウト型のコンピューティング クラスの Pod」をご覧ください。
  • Confidential GKE Node の料金。詳細については、Confidential VM の料金の「GKE Autopilot 上の Confidential GKE Node の料金」をご覧ください。

Standard クラスタでは、次の両方の費用が適用されます。

ノードプール レベル

Standard ノードプールでは、次の費用が発生します。

また、Confidential GKE Node は、起動時に生成するログデータが Confidential GKE Node 以外のノードよりも若干多くなることがあります。ログの料金の詳細については、Google Cloud Observability の料金をご覧ください。

始める前に

作業を始める前に、次のタスクが完了していることを確認してください。

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、gcloud components update コマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。

要件

Confidential GKE Node には次の要件があります。

  • Autopilot クラスタは GKE バージョン 1.30.2 以降を実行する必要があります。
  • Standard クラスタは、選択した Confidential Computing テクノロジーに応じて、次のいずれかの GKE バージョンを実行する必要があります。

    • AMD SEV: 任意の GKE バージョン。
    • AMD SEV-SNP: 1.32.2-gke.1297000 以降。
    • Intel TDX: 1.32.2-gke.1297000 以降。
  • ワークロード レベルで Confidential GKE Node を有効にするには、Autopilot クラスタと Standard クラスタで GKE バージョン 1.33.3-gke.1392000 以降を実行する必要があります。

  • ノードは、選択した Confidential Computing テクノロジーをサポートするマシンタイプを使用する必要があります。詳細については、マシンタイプ、CPU、ゾーンをご覧ください。

  • クラスタのコントロール プレーンとノードは、選択した Confidential Computing テクノロジーをサポートするロケーションに配置する必要があります。詳細については、サポートされているゾーンを表示するをご覧ください。

ワークロード レベルで Confidential GKE Node を構成する

個々のワークロードで Confidential GKE Node を有効にするには、ComputeClass を使用します。ComputeClass は、GKE が作成する新しいノードの属性を定義し、ハードウェアが使用できない場合のフォールバック動作を制御できる Kubernetes カスタム リソースです。ComputeClass は、特定のテクノロジーがクラスタレベルまたはノードプール レベルでサポートされていない場合でも、GKE で利用可能なすべての Confidential Computing テクノロジーをサポートします。

ワークロード レベルで Confidential GKE Node を構成するには、次の操作を行います。

  1. 省略可: GKE Standard クラスタの場合は、クラスタのノード自動プロビジョニングを有効にします。Autopilot クラスタの場合は、このステップをスキップします。

    手動で作成したノードプールのみで ComputeClass を使用する場合は、これらのノードプールで Node Taints とノードラベルを手動で構成する必要があります。この手動構成を追加すると、ComputeClass を使用して Confidential GKE Node を作成するメリットが少なくなる可能性があります。

  2. 次の ComputeClass マニフェストを YAML ファイルとして保存します。ComputeClass でサポートされているフィールドと値の詳細については、ComputeClass CustomResourceDefinition をご覧ください。

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      nodePoolConfig:
        confidentialNodeType: CONFIDENTIAL_COMPUTE_TECHNOLOGY
      nodePoolAutoCreation:
        enabled: true
      activeMigration:
        optimizeRulePriority: true
      priorityDefaults:
        location:
          zones: ['ZONE1','ZONE2']
      priorities:
      - machineFamily: MACHINE_SERIES
      - machineType: MACHINE_TYPE
      whenUnsatisfiable: DoNotScaleUp
    

    次のように置き換えます。

    • COMPUTE_CLASS: 新しいコンピューティング クラスの名前。
    • CONFIDENTIAL_COMPUTE_TECHNOLOGY: 使用する Confidential Computing テクノロジー。次の値を使用できます。

      • SEV(AMD SEV 用)
      • SEV_SNP(AMD SEV-SNP 用)
      • TDX(Intel TDX 用)
    • ZONE1,ZONE2,...: ノードを作成するゾーン(['us-central1-a','us-central1-b'] など)。指定した Confidential Computing テクノロジーをサポートするゾーンを指定します。詳細については、サポートされているゾーンを表示するをご覧ください。

    • MACHINE_SERIES: ノードのマシンシリーズ(n2d など)。指定した Confidential Computing テクノロジーをサポートするマシンシリーズを指定します。詳細については、マシンタイプ、CPU、ゾーンをご覧ください。

    • MACHINE_TYPE: ノードのマシンタイプ(n2d-standard-4 など)。指定した Confidential Computing テクノロジーをサポートするマシンタイプを指定します。詳細については、マシンタイプ、CPU、ゾーンをご覧ください。

    このマニフェストには、値が enabled: truespec.nodePoolAutoCreation フィールドが含まれています。これにより、GKE はノード自動プロビジョニングを使用して新しいノードプールを作成できます。

  3. クラスタに ComputeClass を作成します。

    kubectl apply -f PATH_TO_COMPUTE_CLASS_MANIFEST
    

    PATH_TO_COMPUTE_CLASS_MANIFEST は、ComputeClass マニフェスト ファイルのパスに置き換えます。

  4. 次の Deployment マニフェストを YAML ファイルとして保存します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: helloweb
      labels:
        app: hello
    spec:
      selector:
        matchLabels:
          app: hello
      template:
        metadata:
          labels:
            app: hello
        spec:
          nodeSelector:
            # Replace with the name of a compute class
            cloud.google.com/compute-class: COMPUTE_CLASS 
          containers:
          - name: hello-app
            image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
            ports:
            - containerPort: 8080
            resources:
              requests:
                cpu: "250m"
                memory: "1Gi"

  5. Deployment を作成します。

    kubectl apply -f PATH_TO_DEPLOYMENT_MANIFEST
    

    PATH_TO_DEPLOYMENT_MANIFEST は、Deployment マニフェスト ファイルのパスに置き換えます。

このワークロード用に GKE が作成する新しいノードは、指定した Confidential Computing テクノロジーを使用します。これらのノードは、選択したゾーンのいずれかで、ComputeClass で定義したマシンタイプで実行されます。GKE は、同じ ComputeClass を選択する Pod のみがノードで実行できるように、Node Taints とノードラベルを追加します。

クラスタレベルで Confidential GKE Node を構成する

Autopilot クラスタまたは Standard クラスタ全体で Confidential GKE Node を有効にすると、クラスタ内のすべてのノードで Confidential GKE Node が使用されます。その結果、そのクラスタにデプロイするすべてのワークロードが Confidential GKE Node で実行されます。個々のワークロードまたはノードプールでクラスタ設定をオーバーライドすることはできません。

新しい Autopilot クラスタを作成する

Autopilot クラスタは、クラスタレベルで AMD SEV のみをサポートします。Confidential GKE Node を有効にすると、Autopilot クラスタのデフォルトのマシンシリーズが N2D に変更されます。すべてのワークロードは、ワークロード マニフェストを変更することなく、これらの機密ノードで実行されます。

  • 次のコマンドを実行します。

    gcloud container clusters create-auto CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-confidential-nodes
    

    次のように置き換えます。

    • CLUSTER_NAME: Autopilot クラスタの名前。
    • CONTROL_PLANE_LOCATION: クラスタ コントロール プレーンの Compute Engine リージョン(us-central1 など)。

    クラスタはバージョン 1.30.2 以降を実行している必要があります。 詳細については、特定のリリース チャンネルとバージョンの Autopilot クラスタを作成するをご覧ください。

新しい Standard クラスタを作成する

Standard クラスタの作成時に、ノードの Confidential Computing テクノロジーを指定できます。クラスタの作成時にテクノロジーを指定すると、次のような影響があります。

  • そのクラスタでは、Confidential GKE Node を使用するノードプールまたはワークロードのみを作成できます。
  • クラスタを更新して Confidential GKE Node を無効にすることはできません。
  • 個々のノードプールまたはワークロードでクラスタレベルの Confidential Computing テクノロジーをオーバーライドすることはできません。

クラスタレベルで Confidential Computing の設定を構成すると、その設定は永続的になります。そのため、クラスタを作成する前に、次のユースケースを検討してください。

Confidential GKE Node を使用する Standard モードのクラスタを作成するには、次のいずれかのオプションを選択します。

gcloud

新しいクラスタを作成するときに、gcloud CLI で --confidential-node-type オプションを指定します。

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --machine-type=MACHINE_TYPE \
    --node-locations=ZONE1,ZONE2,... \
    --confidential-node-type=CONFIDENTIAL_COMPUTE_TECHNOLOGY

次のように置き換えます。

  • CLUSTER_NAME: クラスタの名前。
  • LOCATION: クラスタ コントロール プレーンの Compute Engine のロケーション。ロケーションは、指定した Confidential Computing テクノロジーをサポートしている必要があります。詳細については、可用性のセクションをご覧ください。
  • MACHINE_TYPE: 指定した Confidential Computing テクノロジーをサポートするマシンタイプ。詳細については、可用性のセクションをご覧ください。
  • ZONE1,ZONE2,...: 新しい Confidential Computing テクノロジーをサポートするコントロール プレーン リージョンのゾーンのカンマ区切りリスト。詳細については、サポートされているゾーンを表示するをご覧ください。
  • CONFIDENTIAL_COMPUTE_TECHNOLOGY: 使用する Confidential Computing テクノロジー。次の値を使用できます。

    • sev: AMD SEV
    • sev_snp: AMD SEV-SNP
    • tdx: Intel TDX

クラスタ作成コマンドで --enable-confidential-nodes フラグを使用することもできます。コマンドでこのフラグのみを指定すると、クラスタは AMD SEV を使用します。コマンドで指定するマシンタイプは、AMD SEV をサポートしている必要があります。ただし、同じコマンドで --confidential-node-type フラグを指定すると、GKE は --confidential-node-type フラグで指定した値を使用します。

コンソール

  1. Google Cloud コンソールで、[Kubernetes クラスタを作成する] ページに移動します。

    [Kubernetes クラスタを作成する] に移動

  2. ナビゲーション メニューの [クラスタ] セクションで、[セキュリティ] をクリックします。

  3. [Confidential GKE Node を有効にする] チェックボックスをオンにします。

  4. [変更が必要です] ダイアログで [変更を適用] をクリックします。

  5. [タイプ] メニューで、使用する Confidential Computing テクノロジーを選択します。

    選択したテクノロジーに特定の Compute Engine マシンシリーズが必要な場合は、ダイアログが表示されます。[変更を適用] をクリックして、ノードプールのマシンシリーズを更新します。

  6. ナビゲーション メニューの [ノードプール] セクションで、[default-pool] をクリックします。

  7. [ノードプールの詳細] ペインで、次の操作を行います。

    1. [ノードのロケーションを指定する] チェックボックスをオンにします。クラスタのリージョンにあるゾーンのリストが表示されます。
    2. ノード用に選択した Confidential Computing テクノロジーをサポートするゾーンのチェックボックスをオンにします。詳細については、サポートされているゾーンを表示するをご覧ください。
  8. [作成] をクリックします。

クラスタの作成の詳細については、リージョン クラスタの作成をご覧ください。

Hyperdisk Balanced の情報保護モードの設定を指定して作成されたノードプールについては、そのノードプール内のノードのみが、指定した設定に従うよう制約されます。クラスタ内に作成される新しいノードプールについては、作成時に情報保護モードを設定する必要があります。

ノード自動プロビジョニングを構成する

自動プロビジョニングされたノードプールで Confidential GKE Node を使用するようにノード自動プロビジョニングを構成できます。ノード自動プロビジョニングは、次の Confidential Computing テクノロジーをサポートしています。

  • AMD SEV
  • AMD SEV-SNP

ノード自動プロビジョニングで Confidential GKE Nodes を使用するには、クラスタの作成時に --enable-confidential-nodes gcloud CLI フラグを指定します。次のその他の考慮事項も適用されます。

  • クラスタを作成するときに、ノード自動プロビジョニングがサポートする Confidential Computing テクノロジーを選択します。この選択は、クラスタレベルで元に戻すことができません
  • 既存のクラスタでノード自動プロビジョニングを有効にする場合、クラスタでは、ノード自動プロビジョニングでサポートされている Confidential GKE Nodes テクノロジーがすでに使用されている必要があります。
  • ワークロードをデプロイするときは、ワークロードがクラスタの Confidential Computing テクノロジーと、そのテクノロジーと互換性のあるマシンシリーズを選択していることを確認します。

ノードプール レベルで Confidential GKE Node を構成する

クラスタレベルで Confidential GKE Node が無効になっている場合、特定のノードプールで Confidential GKE Node を有効にできます。

Hyperdisk Balanced の情報保護モードの設定は、ノードプールの作成をリクエストするときに指定する必要があります。

新しいノードプールを作成する

Confidential GKE Node を有効にして新しいノードプールを作成するには、次のいずれかのオプションを選択します。

gcloud

次のコマンドを実行します。

gcloud container node-pools create NODE_POOL_NAME \
    --location=LOCATION \
    --cluster=CLUSTER_NAME \
    --machine-type=MACHINE_TYPE \
    --node-locations=ZONE1,ZONE2,... \
    --confidential-node-type=CONFIDENTIAL_COMPUTE_TECHNOLOGY

次のように置き換えます。

  • NODE_POOL_NAME: 新しいノードプールの名前。
  • LOCATION: 新しいノードプールのロケーション。ロケーションは、指定した Confidential Computing テクノロジーをサポートしている必要があります。詳細については、可用性のセクションをご覧ください。
  • CLUSTER_NAME: クラスタの名前。
  • MACHINE_TYPE: 指定した Confidential Computing テクノロジーをサポートするマシンタイプ。詳細については、可用性のセクションをご覧ください。
  • ZONE1,ZONE2,...: 新しい Confidential Computing テクノロジーをサポートするクラスタ リージョンのゾーンのカンマ区切りのリスト。詳細については、サポートされているゾーンを表示するをご覧ください。
  • CONFIDENTIAL_COMPUTE_TECHNOLOGY: 使用する Confidential Computing テクノロジー。次の値を使用できます。

    • sev: AMD SEV
    • sev_snp: AMD SEV-SNP
    • tdx: Intel TDX

クラスタ作成コマンドで --enable-confidential-nodes フラグを使用することもできます。コマンドでこのフラグのみを指定すると、クラスタは AMD SEV を使用します。コマンドで指定するマシンタイプは、AMD SEV をサポートしている必要があります。ただし、同じコマンドで --confidential-node-type フラグを指定すると、GKE は --confidential-node-type フラグで指定した値を使用します。

コンソール

  1. Google Cloud コンソールで [Kubernetes クラスタ] ページに移動します。

    Kubernetes クラスタに移動

  2. Standard クラスタの名前をクリックします。

  3. [ ノードプールを追加] をクリックします。

  4. ナビゲーション メニューで [セキュリティ] をクリックします。

  5. [ノード セキュリティ] ペインで、次の操作を行います。

    1. [Confidential GKE Node を有効にする] チェックボックスをオンにします。
    2. [変更が必要です] ダイアログで [変更を適用] をクリックします。
    3. [タイプ] メニューで、使用する Confidential Computing テクノロジーを選択します。

      選択したテクノロジーに特定の Compute Engine マシンシリーズが必要な場合は、ダイアログが表示されます。[変更を適用] をクリックして、ノードプールのマシンシリーズを更新します。

  6. ナビゲーション メニューで、[ノードプールの詳細] をクリックします。

  7. [ノードプールの詳細] ペインで、次の操作を行います。

    1. [ノードのロケーションを指定する] チェックボックスをオンにします。クラスタのリージョンにあるゾーンのリストが表示されます。
    2. ノード用に選択した Confidential Computing テクノロジーをサポートするゾーンのチェックボックスをオンにします。詳細については、サポートされているゾーンを表示するをご覧ください。
  8. 省略可: ノードプールの他の設定を構成します。

  9. [作成] をクリックします。

既存のノードプールを更新する

この変更を行うにはノードの再作成が必要になり、実行中のワークロードが中断する可能性があります。この変更について詳しくは、メンテナンス ポリシーに準拠せずにノード アップグレード戦略を使用してノードを再作成する手動変更の表で対応する行をご覧ください。ノードの更新の詳細については、ノードの更新による中断の計画をご覧ください。

既存のノードプールを更新して Confidential GKE Node の使用や、ノードが使用する Confidential Computing テクノロジーの切り替えを行えます。ノードプールは次の要件をすべて満たしている必要があります。

  • ノードは、選択した Confidential Computing テクノロジーをサポートするマシンタイプを使用します。
  • ノードは、選択した Confidential Computing テクノロジーをサポートするゾーンで実行されます。

マシンタイプとロケーションの可用性は Confidential Computing テクノロジーによって異なる場合があるため、特定の Confidential Computing テクノロジーを有効にする前に、ノードプールのこれらの属性を更新する必要がある場合があります。

Confidential GKE Node を使用するように既存のノードプールを更新するには、次のいずれかのオプションを選択します。

gcloud

gcloud CLI を使用し、ノードプールで Confidential GKE Node を有効にすることや、ノードの Confidential Computing テクノロジーを変更することが可能です。

  1. ノードプールですでに Confidential GKE Node を使用している場合は、Confidential GKE Node を無効する。ノードプールの更新オペレーションが完了するまで待ちます。
  2. ノードプールのマシンタイプとノードのロケーションを、新しい Confidential Computing テクノロジーでサポートされている値に変更します。

    gcloud container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=CLUSTER_LOCATION \
        --machine-type=MACHINE_TYPE \
        --node-locations=ZONE1,ZONE2,...
    

    次のように置き換えます。

    • NODE_POOL_NAME: 既存のノードプールの名前。
    • CLUSTER_NAME: クラスタの名前。
    • CLUSTER_LOCATION: クラスタのロケーション。
    • MACHINE_TYPE: 新しい Confidential Computing テクノロジーをサポートするマシンタイプ。詳細については、可用性のセクションをご覧ください。
    • ZONE1,ZONE2,...: 新しい Confidential Computing テクノロジーをサポートするクラスタ リージョンのゾーンのカンマ区切りのリスト。詳細については、サポートされているゾーンを表示するをご覧ください。
  3. 使用する Confidential Computing テクノロジーでノードプールを更新します。

    gcloud container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=CLUSTER_LOCATION \
        --confidential-node-type=CONFIDENTIAL_COMPUTE_TECHNOLOGY
    

    CONFIDENTIAL_COMPUTE_TECHNOLOGY は、使用する Confidential Computing テクノロジーに置き換えます。次の値を使用できます。

    • sev: AMD SEV
    • sev_snp: AMD SEV-SNP
    • tdx: Intel TDX

コンソール

既存のノードプールを更新して Confidential GKE Node を使用できるのは、ノードプールのマシンタイプが選択した Confidential Computing テクノロジーでサポートされている場合に限られます。ノードがサポートされているマシンタイプを使用していない場合は、代わりにこのセクションの gcloud CLI の手順を使用してください。

  1. Google Cloud コンソールで [Kubernetes クラスタ] ページに移動します。

    Kubernetes クラスタに移動

  2. Standard クラスタの名前をクリックします。

  3. [ノード] タブをクリックします。

  4. 変更するノードプールの名前をクリックします。

  5. [ノードプールの詳細] ページで、[ 編集] をクリックします。[ノードプールの編集] ペインが開きます。

  6. [ゾーン] セクションで、選択したゾーンが Confidential Computing テクノロジーをサポートしていることを確認します。詳細については、サポートされているゾーンを表示するをご覧ください。

    選択したゾーンがそのテクノロジーをサポートしていない場合は、次の操作を行います。

    1. サポートされていないゾーンのチェックボックスをオフにします。
    2. 省略可: 他のサポート対象ゾーンのチェックボックスをオンにします。
    3. [保存] をクリックします。ノードプールの更新オペレーションが完了するまで待ちます。
    4. [編集] をクリックして、[ノードプールの編集] ペインを再度開きます。
  7. [セキュリティ] セクションで、[Confidential GKE Node を有効にする] チェックボックスをオンにします。

  8. [タイプ] メニューで、ノードの Confidential Computing テクノロジーを選択します。

  9. [保存] をクリックします。

ワークロードを機密ノードプールにのみ配置する

クラスタレベルで Confidential GKE Node を有効にすると、すべてのワークロードが Confidential ノードで実行されます。マニフェストを変更する必要はありません。ただし、ノードプール レベルで特定の Standard モードのノードプールでのみ Confidential GKE Node を有効にする場合は、Confidential GKE Node を使用するノードプールでのみワークロードを実行する必要があることを宣言的に指定する必要があります。

  • 特定の Confidential Computing テクノロジーでワークロードを実行する必要がある場合は、次の例のように、cloud.google.com/gke-confidential-nodes-instance-type ラベルを含むノードセレクタを使用します。

    apiVersion: v1
    kind: Pod
    spec:
    # For readability, lines are omitted from this example manifest
      nodeSelector:
        cloud.google.com/gke-confidential-nodes-instance-type: "CONFIDENTIAL_COMPUTE_SELECTOR"
    

    CONFIDENTIAL_COMPUTE_SELECTOR は、ノードプールが使用するテクノロジーの名前に置き換えます。このフィールドは次の値をサポートしています。その値は、大文字で指定する必要があります。

    • SEV: AMD SEV
    • SEV_SNP: AMD SEV-SNP
    • TDX: Intel TDX
  • Confidential Computing テクノロジーに関係なく、ワークロードを任意の Confidential Node で実行できるようにするには、次の例のようにノード アフィニティ ルールを使用します。

    apiVersion: v1
    kind: Pod
    spec:
      containers:
      - name: confidential-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: cloud.google.com/gke-confidential-nodes-instance-type
                operator: Exists
    
  • 使用可能な Confidential Computing テクノロジーのサブセットのみを使用するノードでワークロードを実行するには、次の例のようなノード アフィニティ ルールを使用します。

    apiVersion: v1
    kind: Pod
    spec:
      containers:
      - name: confidential-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: cloud.google.com/gke-confidential-nodes-instance-type
                operator: In
                values:
                - SEV
                - SEV_SNP
                - TDX
    

    values フィールドで、ワークロードを実行する Confidential Computing テクノロジーのみを指定します。

Confidential GKE Node が有効になっていることを確認する

クラスタまたはノードが Confidential GKE Node を使用しているかどうかを確認するには、クラスタ、ノードプール、ノード、または Compute Engine インスタンスを調べます。

クラスタを確認する

次のオプションのいずれかを選択します。

gcloud

クラスタの説明を表示します。

gcloud container clusters describe CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --format='yaml(confidentialNodes.confidentialInstanceType)'

Confidential GKE Node が有効化されている場合、出力は次のようになります。

confidentialNodes:
  confidentialInstanceType: CONFIDENTIAL_COMPUTE_SELECTOR

コンソール

  1. Google Cloud コンソールで [Kubernetes クラスタ] ページに移動します。

    Kubernetes クラスタに移動

  2. 検査するクラスタの名前をクリックします。

  3. [セキュリティ] セクションで、[Confidential GKE Node] フィールドの値が [有効] になっていることを確認します。

ノードプールを確認する

次のオプションのいずれかを選択します。

gcloud

ノードプールの詳細を取得します。

gcloud container node-pools describe NODE_POOL_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --format='yaml(confidentialNodes.confidentialInstanceType,enableConfidentialStorage)'

Confidential GKE Node が有効化されている場合、出力は次のようになります。

confidentialNodes:
  confidentialInstanceType: CONFIDENTIAL_COMPUTE_SELECTOR

Hyperdisk Balanced の情報保護モードも有効になっている場合、出力は次のようになります。

confidentialNodes:
  confidentialInstanceType: CONFIDENTIAL_COMPUTE_SELECTOR
enableConfidentialStorage: true

コンソール

  1. Google Cloud コンソールで [Kubernetes クラスタ] ページに移動します。

    Kubernetes クラスタに移動

  2. 検査するクラスタの名前をクリックします。

  3. ノードプールの名前をクリックします。

  4. [セキュリティ] セクションで、[Confidential GKE Node] フィールドの値が [有効] になっていることを確認します。

特定のノードを確認する

  1. ノード名を確認します。

    kubectl get nodes
    
  2. ノードの詳細を確認します。

    kubectl describe NODE_NAME
    

    NODE_NAME は調査するノードの名前に置き換えます。

    出力は次のようになります。

    Name:               gke-cluster-1-default-pool-affsf335r-asdf
    Roles:              <none>
    Labels:             cloud.google.com/gke-boot-disk=pd-balanced
                        cloud.google.com/gke-container-runtime=containerd
                        cloud.google.com/gke-confidential-nodes-instance-type=CONFIDENTIAL_COMPUTE_SELECTOR
                        cloud.google.com/gke-nodepool=default-pool
                        cloud.google.com/gke-os-distribution=cos
                        cloud.google.com/machine-family=e2
    # lines omitted for clarity
    

    この出力では、cloud.google.com/gke-confidential-nodes-instance-type ノードラベルは、ノードが機密ノードであることを示しています。

組織のポリシーの制約を設定する

組織のポリシーの制約を定義して、組織全体に作成された VM リソースすべてが Confidential VMs インスタンスであることを保証できます。GKE の場合、[Confidential Computing 以外を制限する] 制約をカスタマイズして、使用可能な Confidential Computing テクノロジーのいずれかを有効にして、すべての新しいクラスタを作成するように要求できます。組織のポリシーの制約を適用するときは、次の例のように、拒否リストに container.googleapis.com API サービスの名前を追加します。

gcloud resource-manager org-policies deny \
    constraints/compute.restrictNonConfidentialComputing compute.googleapis.com container.googleapis.com \
    --project=PROJECT_ID

PROJECT_ID は、実際のプロジェクト ID に置き換えます。

Hyperdisk Balanced の情報保護モード対応の PersistentVolume を作成する

スループットまたは IOPS の許容値については、Hyperdisk ボリュームのパフォーマンス レベルを計画するをご覧ください。

次の例では、Hyperdisk のタイプごとに Hyperdisk Balanced の情報保護モードの StorageClass を作成する方法を示します。

Hyperdisk Balanced

  1. 次のマニフェストを confidential-hdb-example-class.yaml という名前のファイルに保存します。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: balanced-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-balanced
      provisioned-throughput-on-create: "250Mi"
      provisioned-iops-on-create: "7000"
      enable-confidential-storage: true
      disk-encryption-kms-key: "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/HSM_KEY_NAME"
    

    次のように置き換えます。

    • KMS_PROJECT_ID: Cloud KMS 鍵を所有するプロジェクト
    • REGION: ディスクが配置されるリージョン
    • KEY_RING: 鍵を含むキーリングの名前
    • HSM_KEY_NAME: ディスクの暗号化に使用される HSM 鍵の名前
  2. StorageClass を作成します。

    kubectl create -f hdb-example-class.yaml
    
  3. Hyperdisk Balanced ボリュームの情報保護モードを使用する GKE 用の Hyperdisk Persistent Volume Claim を作成します。

クラスタで使用可能な StorageClass の名前を確認するには、次のコマンドを実行します。

kubectl get sc

制限事項

Confidential GKE Node には、次の制限事項があります。

Hyperdisk Balanced の情報保護モードには、次の制限事項があります。

ライブ マイグレーションの制限

N2D マシンタイプを使用し、Confidential Computing テクノロジーとして AMD SEV を使用する Compute Engine Confidential VM は、ライブ マイグレーションをサポートしています。これにより、ホスト メンテナンス イベントによるワークロードの中断を最小限に抑えることができます。ライブ マイグレーションが行われる GKE バージョンは次のとおりです。

  • 1.27.10-gke.1218000 以降
  • 1.28.6-gke.1393000 以降
  • 1.29.1-gke.1621000 以降

ライブ マイグレーションの追加時にノードプールがサポート対象のバージョンをすでに実行している場合は、同じバージョンまたは別のサポート対象バージョンにノードプールを手動でアップグレードします。ノードをアップグレードすると、ノードの再作成がトリガーされ、新しいノードでライブ マイグレーションが有効になります。

ライブ マイグレーションに対応している Compute Engine マシンタイプの詳細については、サポートされている構成をご覧ください。

ライブ マイグレーションをサポートしていないノードでホスト メンテナンス イベントが発生すると、ノードは NotReady 状態になります。ノードが再び準備状態になるまで、Pod の実行は中断されます。メンテナンスに 5 分以上かかる場合、GKE は他のノードで Pod の再作成を試みることがあります。

Confidential GKE Node を無効にする

この変更を行うにはノードの再作成が必要になり、実行中のワークロードが中断する可能性があります。この変更について詳しくは、メンテナンス ポリシーに準拠せずにノード アップグレード戦略を使用してノードを再作成する手動変更の表で対応する行をご覧ください。ノードの更新の詳細については、ノードの更新による中断の計画をご覧ください。

Confidential GKE Node を無効にできるのは、ノードプールが Standard モードの場合のみです。クラスタレベルで Confidential GKE Node を使用するクラスタにノードプールがある場合、ノードプール レベルでこの機能を無効にすることはできません。 Confidential GKE Node を無効にするには、次のいずれかのオプションを選択します。

gcloud

次のコマンドを実行します。

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=CLUSTER_LOCATION \
    --no-enable-confidential-nodes

コンソール

  1. Google Cloud コンソールで [Kubernetes クラスタ] ページに移動します。

    Kubernetes クラスタに移動

  2. Standard クラスタの名前をクリックします。

  3. [ノード] タブをクリックします。

  4. 変更するノードプールの名前をクリックします。

  5. [ノードプールの詳細] ページで、[ 編集] をクリックします。[ノードプールの編集] ペインが開きます。

  6. [セキュリティ] セクションで、[Confidential GKE Node を有効にする] チェックボックスをオフにします。

  7. [保存] をクリックします。

次のステップ