Autopilot モードでの特権ワークロードの承認について

許可リストとポリシーを使用して、Google Kubernetes Engine(GKE)Autopilot モードで実行できる特権ワークロードを制御できます。このドキュメントでは、Autopilot がワークロードに適用するデフォルトの制約、Autopilot モードで実行できる特権ワークロードのタイプ、特権ワークロードの承認を制御する方法について説明します。

このドキュメントは、次のような方を対象としています。

  • さまざまなソースから特権 GKE ワークロードを Autopilot モードで実行するプラットフォーム管理者とオペレーター。
  • 特定のワークロードを除くすべての特権ワークロードをブロックして、組織のセキュリティ ポスチャーを強化したい ID 管理者とアカウント管理者。

Autopilot モードでの特権ワークロードについて

セキュリティ ポスチャーを改善するため、Autopilot モードのクラスタとノードは、デフォルトで特定のセキュリティ制約を適用します。たとえば、Autopilot は、コンテナで spec.securityContext.privileged フィールドを true に設定するほとんどの Pod を拒否します。Autopilot の特権ワークロードは、これらのデフォルトの制約を満たさないワークロードです。デフォルトでは、 Cloud de Confiance組織の Autopilot ノードは特権ワークロードを拒否します。

特定の特権ワークロードは、クラスタにそのワークロードと一致する許可リストがある場合にのみ、Autopilot モードで実行できます。クラスタ管理者は、クラスタを作成または変更するときに、クラスタで実行できる許可リストのパスを指定できます。デフォルトでは、すべての Cloud de Confiance 組織が Autopilot パートナーと検証済みのオープンソース プロジェクトの許可リストをサポートしています。

組織管理者は、組織ポリシー サービスを使用して、次の方法でこのデフォルトの動作を変更できます。

  • GKE Autopilot パートナーのすべてのワークロードと、検証済みのオープンソース ワークロードを許可します。これは、すべてのCloud de Confiance 組織のデフォルトの動作です。
  • 特定のパートナー ワークロードまたは検証済みのオープンソース ワークロードを許可する。
  • お客様が所有する特定の特権ワークロードのみを許可します。
  • すべての特権ワークロードを拒否する。

このすべてを拒否してから一部を許可するアプローチは、GKE クラスタで権限昇格で実行されるものを正確に制御できるセキュリティのベスト プラクティスです。

次のような状況では、Autopilot モードで特権ワークロードを制御することをおすすめします。

特権 Autopilot ワークロードのソース

次の表に、Autopilot で実行できる特権ワークロードの種類を示します。

特権ワークロード タイプ
Autopilot パートナー ワークロード

Cloud de Confiance パートナーのサブセットは、Autopilot モード向けの特権ワークロードを提供しています。GKE は、これらのパートナー ワークロードを検証します。これらのワークロードは、すべてのお客様が利用できます。デフォルトでは、すべてのお客様が、任意の Autopilot クラスタまたは Standard クラスタに対応する許可リストをインストールできます。

利用可能なパートナー ワークロードの詳細については、Autopilot パートナーをご覧ください。

オープンソース ワークロード

特定の特権オープンソース ワークロードには、Autopilot モードでそれらのワークロードを実行できるようにする許可リストがあります。GKE はこれらのワークロードを検証します。デフォルトでは、すべてのお客様が、任意の Autopilot クラスタまたは Standard クラスタに対応する許可リストをインストールできます。

利用可能なオープンソース ワークロードの詳細については、GKE Autopilot で特権オープンソース ワークロードを実行するをご覧ください。

お客様所有のワークロード

Autopilot ノードで実行する特権ワークロードがある対象のお客様は、それらのワークロードの許可リストを作成できます。この機能は、すべての Cloud de Confiance 組織でデフォルトで無効になっています。組織ポリシー サービスを使用して、特定のワークロードの許可リストパスを追加し、クラスタを更新してそれらの許可リストをインストールします。

詳細については、お客様所有の特権ワークロードのセクションをご覧ください。

特権ワークロード アドミッション コントロールの仕組み

特定の特権ワークロードを Autopilot ノードで実行できるようにするには、各ワークロードに対応する許可リストをインストールします。これらの許可リストは、WorkloadAllowlist Kubernetes カスタム リソースです。GKE は、クラスタ内の WorkloadAllowlist と照合してワークロードの詳細を検証し、詳細が一致する場合にのみアドミッションを許可します。デフォルトでは、 Cloud de Confiance組織内のすべての Autopilot クラスタまたは Standard クラスタで、Autopilot パートナー ワークロードとオープンソース ワークロードの WorkloadAllowlist をインストールできます。

大まかに言うと、Autopilot ノードで特権ワークロードを実行するには、次の手順が必要です。

  1. 組織管理者は、container.managed.autopilotPrivilegedAdmission が管理する組織のポリシーの制約により、特定のソースからの許可リストのインストールが許可されていることを確認します。詳細については、許可リストの組織のポリシーの管理対象制約をご覧ください。
  2. お客様が所有する特権ワークロードの場合、プラットフォーム管理者は特権ワークロードに一致する許可リストを作成します。詳細については、お客様所有の特権ワークロードのセクションをご覧ください。
  3. クラスタ管理者は、特定のソースからの許可リストのインストールを許可するように Autopilot クラスタまたは Standard クラスタを構成します。詳細については、クラスタ構成セクションをご覧ください。
  4. クラスタ管理者は、許可リストのパスを参照する AllowlistSynchronizer を作成します。AllowlistSynchronizer は、許可リストをインストールし、許可リストを最新の状態に保ちます。詳細については、許可リストのインストールのセクションをご覧ください。

これらの手順が完了すると、アプリ オペレーターはクラスタに特権ワークロードをデプロイできます。

許可リストの組織のポリシーのマネージド制約

デフォルトでは、すべての Cloud de Confiance 組織が container.managed.autopilotPrivilegedAdmission マネージド制約に基づく組織のポリシーを適用します。この制約は、GKE クラスタが許可リストをインストールできるファイルまたはディレクトリのパスのセットを定義します。クラスタ構成では、この制約のパラメータから許可リストのパスを使用する必要があります。

デフォルトでは、autopilotPrivilegedAdmission 制約により、承認済みの GKE パートナーとオープンソース プロジェクトが所有するすべての許可リストを使用できます。この設定は、承認された許可リストをインストールできる GKE クラスタのデフォルト構成と一致します。

組織のポリシー管理者は、組織、フォルダ、プロジェクトの GKE クラスタに適用できる許可リストのパスのセットを変更できます。たとえば、組織が所有するカスタム許可リストの使用を許可するには、その許可リストのパスをマネージド制約に追加します。

マネージド制約パラメータ

autopilotPrivilegedAdmission マネージド制約の仕様は次のとおりです。

spec:
  rules:
  - enforce: true
    parameters:
      allowAnyGKEPath: ALLOW_GKE_PATHS
      allowPaths:
      - PATH1
      - PATH2
      - PATH3

仕様の次のフィールドは、クラスタが使用できる許可リストのセットを制御します。

  • allowAnyGKEPath: クラスタが GKE 承認済みの許可リスト パスのデフォルト セットを使用できるかどうかを制御するブール値。このパラメータは、次の値をサポートしています。

    • True: クラスタ管理者は、許可リストの構成を変更せずにクラスタを構成できます。gke:// で始まる 1 つ以上の許可リストパスを使用するか、空の文字列を使用してクラスタのすべての許可リストを無効にします。True は、このパラメータのデフォルト値です。

    • False: クラスタ管理者は、許可リストのソースを空の文字列で、または allowPaths パラメータの任意の許可リストのパスでクラスタを構成する必要があります。

  • allowPaths: クラスタ管理者がクラスタを構成するときに値を指定できる、承認済みの許可リストソースのリスト。特定の許可リスト ファイルまたはディレクトリ全体のパスを指定できます。

次の表に、これらのパラメータをさまざまな方法で構成した結果を示します。

allowAnyGKEPath 値 allowPaths 値 結果
True 空または未指定。

クラスタ管理者は、クラスタの作成または変更時に次のいずれかの操作を行うことができます。

  • デフォルトの許可リスト構成を使用する: 許可リストの構成オプションを省略して、クラスタが gke:// 接頭辞を持つ任意のパスから許可リストをインストールできるようにします。
  • 許可リストのインストールを無効にする: クラスタの許可リスト構成に空の値を指定します。
  • GKE 許可リストのパスを指定する: gke:// 接頭辞が付いた許可リストのパスを 1 つ以上指定します。クラスタは、これらのパスからのみ許可リストをインストールできます。
False 空または未指定。

クラスタ管理者は、クラスタの許可リスト構成に空の値を指定する必要があります。クラスタ管理者が許可リストのパス構成をスキップすると、クラスタの作成または変更が失敗します。

True 値が指定されている。

クラスタ管理者は、クラスタの作成または変更中に次のいずれかのアクションを実行できます。

  • デフォルトの許可リスト構成を使用する:許可リスト構成オプションを省略して、クラスタが gke:// 接頭辞を持つ任意のパスから許可リストをインストールできるようにします。
  • 許可リストのインストールを無効にする: クラスタの許可リスト構成に空の値を指定します。
  • 許可リストのパスを指定する: gke:// 接頭辞を持つか、allowPaths パラメータで指定されている 1 つ以上の許可リストのパスを指定します。
False 値が指定されています。

クラスタ管理者は、クラスタの作成または変更時に次のいずれかを行う必要があります。

  • 許可リストのインストールを無効にする: クラスタの許可リスト構成に空の値を指定します。
  • 許可リストのパスを指定する: allowPaths パラメータから 1 つ以上の許可リストのパスを指定します。

組織のポリシーで特権ワークロードの受け入れを制御する方法については、組織で特権 GKE ワークロードを制限するをご覧ください。

お客様所有の特権ワークロード

GKE のお客様は、デフォルトの Autopilot セキュリティ制約で許可されているよりも多くの権限をクラスタで必要とする、独自の特殊なワークロードを使用している場合があります。GKE バージョン 1.35 以降では、許可リストを作成することで、これらのワークロードをデフォルトの Autopilot の制約から除外できます。

許可リストは、WorkloadAllowlist Kubernetes カスタム リソースを定義する YAML ファイルです。WorkloadAllowlist の仕様は、Kubernetes Pod 仕様のさまざまなフィールドと一致します。WorkloadAllowlist を定義するときは、WorkloadAllowlist の値を、特権ワークロードの仕様の対応するフィールドに一致させます。YAML ファイルは Cloud Storage バケットに保存します。

これらの顧客所有の許可リストをクラスタにインストールするには、次の手順を行う必要があります。

  1. 組織管理者が、Cloud Storage のパスを組織ポリシーに追加します。詳細については、組織のポリシーの管理対象制約についてをご覧ください。
  2. Cloud Storage パスをクラスタ構成に追加します。詳細については、クラスタ構成のセクションをご覧ください。

独自の WorkloadAllowlists の作成の詳細については、特権 Autopilot ワークロードの許可リストを作成するをご覧ください。

クラスタ構成

Autopilot モードで特権ワークロードを実行するには、クラスタ管理者が 1 つ以上の承認済みの許可リストパスをクラスタ構成に追加します。クラスタにパスを追加すると、アプリ オペレーターは対応する許可リストと特権ワークロードをクラスタにインストールできます。

デフォルトでは、Autopilot パートナーと承認済みのオープンソース プロジェクトから許可リストをインストールできます。このデフォルトの許可リストの承認済みソースのセットは、前のセクションで説明したように、組織のポリシーによって変更される可能性があります。組織のポリシーで承認済みの許可リストパスを制御している場合は、組織管理者と連携して、それらのパスを特定する必要があります。その後、クラスタ構成で承認済みのパスを 1 つ以上指定できます。

クラスタの構成の詳細については、Autopilot で特権ワークロードを実行するをご覧ください。

許可リストのインストール

承認済みのソースからクラスタに許可リストをインストールするには、AllowlistSynchronizer という名前の Kubernetes カスタム リソースを使用します。AllowlistSynchronizer は、Pod や Deployment などの他の Kubernetes リソースを作成する場合と同様に定義して作成します。各 AllowlistSynchronizer には、クラスタにインストールする許可リストのパスのリストがあります。

AllowlistSynchronizer を作成すると、GKE はこれらのパスから許可リストをインストールし、許可リストを最新の状態に保ちます。GKE は 10 分ごとに許可リストファイルの変更を確認します。更新が存在する場合、同期ツールは更新された許可リストをクラスタにインストールします。

GKE が AllowlistSynchronizer に基づいて許可リストをインストールしたら、クラスタに対応する特権ワークロードを作成できます。

クラスタに許可リストをインストールする方法については、Autopilot で特権ワークロードを実行するをご覧ください。

許可リストのパス

組織のポリシーまたはクラスタで許可リストのサポートを構成する場合は、インストールを承認した 1 つ以上の WorkloadAllowlist へのパスを指定します。これらのパスの構文は、WorkloadAllowlist を作成したユーザーによって次のように異なります。

  • 特定の Autopilot パートナーと承認済みのオープンソース プロジェクト:

    gke://REPOSITORY_PATH/SELECTOR
    

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

    たとえば、次のパスは Grafana/alloy ディレクトリ内の任意の許可リストを選択します。

    gke://Grafana/alloy/*
    
  • お客様所有の特権ワークロード:

    gs://DIRECTORY_PATH/SELECTOR
    

    DIRECTORY_PATH は、許可リスト ファイルを含む Cloud Storage 内のディレクトリのパスに置き換えます。複数のパスを指定できます。

組織のポリシーまたはクラスタ構成で、上記のパスを 1 つ以上指定できます。たとえば、GKE パートナー ワークロードとお客様所有のワークロードを同じ構成に追加できます。* 文字を使用して、すべての許可リストを選択することもできます。たとえば、gke://* は、任意のソースから GKE で承認された許可リストを選択します。

次の表に、特定の目標をサポートするために組織のポリシーまたはクラスタで必要な構成を示します。

目的 組織のポリシーの構成 クラスタ構成
GKE で承認されたすべての WorkloadAllowlist を許可する 次の操作を行います。
  1. allowAnyGKEPath パラメータをデフォルト値の True に設定します。
  2. allowPaths パラメータは空のままにします。
次のいずれかを行います。
  • クラスタに許可リストを構成しないでください。デフォルトでは、すべてのクラスタで GKE 承認済みの WorkloadAllowlist をインストールできます。
  • クラスタの許可リストを構成するときに、承認されたパスとして gke://* のみを指定します。
GKE で承認された特定の WorkloadAllowlist のみを許可する 手順は次のとおりです。
  1. allowAnyGKEPath パラメータを False に設定します。
  2. allowPaths パラメータで、特定の GKE 承認済み WorkloadAllowlists のパスを指定します。
クラスタを作成または更新するときに、GKE で承認された特定の WorkloadAllowlist へのパスを指定します。組織のポリシーによって、指定できる GKE 承認済みパスが制限される場合があります。
顧客管理の WorkloadAllowlist のみを許可する 手順は次のとおりです。
  1. allowAnyGKEPath パラメータを False に設定します。
  2. allowPaths パラメータに、顧客管理の WorkloadAllowlist のパスを指定します。
クラスタを作成または更新するときに、顧客管理の WorkloadAllowlist のパスを指定します。指定するパスは、組織のポリシーの allowPaths パラメータに存在する必要があります。
WorkloadAllowlists の使用を防止する 手順は次のとおりです。
  1. allowAnyGKEPath パラメータを False に設定します。
  2. allowPaths パラメータは空のままにします。
クラスタを作成または更新するときに、承認済みのパスとして空の文字列 "" を設定します。

次のステップ