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

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

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

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

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

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

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

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

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

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

次のような状況では、Autopilot モードで特権ワークロードを制御する必要があります。

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

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

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

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

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

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

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

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

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

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

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

特権ワークロードの Admission Controller の仕組み

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

大まかに言うと、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 つ以上指定します。クラスタは、これらのパスからのみ許可リストをインストールできます。
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 承認済みの特定の WorkloadAllowlists へのパスを指定します。組織のポリシーによって、指定できる GKE 承認済みパスが制限される場合があります。
顧客管理の WorkloadAllowlist のみを許可する 手順は次のとおりです。
  1. allowAnyGKEPath パラメータを False に設定します。
  2. allowPaths パラメータで、顧客管理の WorkloadAllowlists へのパスを指定します。
クラスタを作成または更新するときに、顧客管理の WorkloadAllowlist のパスを指定します。指定するパスは、組織のポリシーの allowPaths パラメータに含まれている必要があります。
WorkloadAllowlists の使用を防止する 手順は次のとおりです。
  1. allowAnyGKEPath パラメータを False に設定します。
  2. allowPaths パラメータは空のままにします。
クラスタを作成または更新するときに、承認済みパスとして空の文字列 "" を設定します。

次のステップ