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

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

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

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

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

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

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

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

この「すべて拒否してから一部を許可する」というアプローチは、GKE クラスタで権限昇格で実行されるものを正確に制御できるセキュリティの効果的な手法です。

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

  • Standard クラスタで Autopilot モードでワークロードを 実行し、それらのノードで特権ワークロードを 実行する場合。
  • 組織、フォルダ、プロジェクトで特定の特権ワークロードのみを実行できるようにする場合。

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

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

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

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

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

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

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

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

顧客所有のワークロード

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

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

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

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

Autopilot ノードで特権ワークロードを実行する手順は次のとおりです。

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

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

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

デフォルトでは、すべての Google Cloud 組織が ポリシーが 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 つ以上の許可リストのパスを指定します。gke://クラスタ は、これらのパスからのみ許可リストをインストールできます。
False 空または未指定。

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

True 値が指定されています。

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

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

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

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

組織のポリシーで特権ワークロードのアドミッションを制御する方法については、 組織で特権 GKE ワークロードを制限するをご覧ください。

顧客所有の特権ワークロード

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

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

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

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

独自の WorkloadAllowlist を作成する方法については、 特権 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 で承認された WorkloadAllowlist のパスを指定します。
クラスタを作成または更新するときに、特定の GKE で承認された WorkloadAllowlist のパスを指定します。組織のポリシーによって、指定できる GKE で承認されたパスが制限される場合があります。
顧客管理の WorkloadAllowlist のみ許可する 手順は次のとおりです。
  1. allowAnyGKEPath パラメータを False に設定します。
  2. ` allowPaths` パラメータで、顧客管理の WorkloadAllowlist のパスを指定します。
クラスタを作成 または更新するときに、顧客管理の WorkloadAllowlist のパスを指定します。指定するパスは、組織のポリシーの allowPaths パラメータに含める必要があります。
WorkloadAllowlist の使用を禁止する 手順は次のとおりです。
  1. allowAnyGKEPath パラメータを False に設定します。
  2. allowPaths パラメータを空のままにします。
クラスタを作成または更新するときに、承認済みのパスとして空の文字列 "" を設定します。

次のステップ