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 は、クラスタ内の WorkloadAllowlist とワークロードの詳細を照合し、詳細が一致する場合にのみアドミッションを許可します。デフォルトでは、 Google Cloud組織内のすべての Autopilot クラスタまたは Standard クラスタで、Autopilot パートナー ワークロードとオープンソース ワークロードの WorkloadAllowlists をインストールできます。

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

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

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

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

デフォルトでは、すべての Google Cloud 組織は container.managed.autopilotPrivilegedAdmission マネージド制約に基づく組織のポリシーを適用します。

このマネージド制約には次のパラメータがあります。

  • allowAnyGKEPath: クラスタ管理者が gke:// 接頭辞を持つパスからの許可リストのインストール用にクラスタを構成できるようにするブール値。次の値を使用できます。

    • true: クラスタ管理者は、GKE のデフォルトの許可リスト ソース、gke:// で始まる任意の許可リスト パス、または空の文字列(すべての許可リストを禁止)を使用してクラスタを構成できます。これは、allowAnyGKEPath パラメータのデフォルト値です。
    • false: クラスタ管理者が、許可リストのソースに空の文字列、または allowPaths パラメータの任意の許可リストのパスを使用してクラスタを構成することを要求します。
  • allowPaths: クラスタ管理者がクラスタの構成時に値を指定できる、承認済みの許可リスト ソースのリスト。

組織管理者は、このポリシーのパラメータを更新して、組織で実行できる特権ワークロードを制御できます。 Google Cloudたとえば、次の組織のポリシー構成では、クラスタ管理者は特定の Google Cloudパートナー ワークロードに対してのみ許可リストをインストールできます。

name: organizations/ORGANIZATION_ID/policies/container.managed.autopilotPrivilegedAdmission
spec:
  rules:
  - enforce: true
    parameters:
      allowAnyGKEPath: ALLOW_GKE_PATHS
      allowPaths:
      - PATH1
      - PATH2
      - PATH3

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

  • ALLOW_GKE_PATHS: GKE で承認された許可リストを許可するかどうか。次のいずれかの値を指定します。

    • True: GKE パートナー ワークロードまたは検証済みのオープンソース ワークロードを使用してクラスタ構成を許可します。これはデフォルト値です。
    • False: allowPaths フィールドのパスのみを使用してクラスタ構成を許可します。
  • PATH1, PATH2, ...: クラスタ管理者がクラスタの構成時に使用できる、承認済みの許可リスト ソースのパスのリスト。デフォルトでは、このパラメータは空です。このパラメータのパスを指定すると、クラスタ管理者はクラスタの作成または更新時に、これらのパスを 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 パラメータは空のままにします。
クラスタを作成または更新するときに、承認済みパスとして空の文字列 "" を設定します。

次のステップ