このドキュメントでは、Autopilot ノードに特権ワークロードをデプロイできる許可リストを作成する方法について説明します。これらの許可リストは Cloud Storage バケットに保存します。このドキュメントは、特定の Kubernetes ワークロードに対して、特定の顧客所有のワークロードをデフォルトの Autopilot セキュリティ制約から除外するプラットフォーム管理者とオペレーターを対象としています。Autopilot での特権ワークロードの Admission Controller について精通している必要があります。
Autopilot の特権ワークロードについて
Autopilot モードでは、セキュリティ ポスチャーを改善するために、ワークロードにデフォルトの制約セットが適用されます。これらの制約をバイパスして特定の特権ワークロードを実行するには、それらのワークロードに対応する許可リストをインストールします。デフォルトでは、Autopilot クラスタまたは Standard クラスタで、Autopilot パートナーと特定のオープンソース プロジェクトの許可リストをインストールできます。
対象となる GKE のお客様は、デフォルトの Autopilot 制約と互換性のない独自の特権ワークロードの許可リストを作成して管理できます。これらの許可リストは、YAML ファイルで定義して Cloud Storage バケットに保存する WorkloadAllowlist Kubernetes カスタム リソースです。ID とアカウントの管理者は、組織のポリシーを使用して、これらの顧客管理の許可リストとバケットを認識するようにクラスタを構成します。クラスタ管理者は、これらの許可リストをインストールして、特権ワークロードを Autopilot モードで実行できるようにします。
プロセスと関係者について詳しくは、特権 Autopilot ワークロードの Admission コントロールの仕組みをご覧ください。
始める前に
作業を始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API を有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。gcloud CLI をインストール済みの場合は、
gcloud components updateコマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
-
Enable the Cloud Storage API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - バージョン 1.35 以降を実行する GKE クラスタがあることを確認します。このタスクでは、Autopilot クラスタを作成することもできます。
- 許可リスト ファイルの保存に使用できる Cloud Storage バケットがあることを確認します。このタスク用にバケットを作成することもできます。
- Autopilot で実行する特権ワークロードを定義する YAML マニフェストを開きます。
必要なロール
Cloud Storage に許可リストを保存し、同期を構成するために必要な権限を取得するには、バケットに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
バケットに許可リストを保存する: Storage オブジェクト ユーザー (
roles/storage.objectUser) -
GKE サービス エージェントにアクセス権を付与する:
ストレージ管理者 (
roles/storage.admin)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
WorkloadAllowlist を作成してアップロードする
許可リストは、YAML ファイルで定義する WorkloadAllowlist カスタム リソースです。WorkloadAllowlist の仕様のフィールドは、Kubernetes Pod 仕様のフィールドと似ています。クラスタに許可リストをインストールして特権ワークロードをデプロイすると、GKE はインストールされた許可リストに対して特権ワークロード仕様を検証します。ワークロードは、許可リスト仕様のすべてのフィールドがワークロード仕様の対応するフィールドと一致する場合にのみ実行できます。
新しい WorkloadAllowlist を作成して Cloud Storage バケットにアップロードする手順は次のとおりです。
- 許可リストに登録する特権ワークロードを特定します。
Pod 仕様の
metadata.annotationsフィールドに次のアノテーションを追加します。cloud.google.com/generate-allowlist: "true"DaemonSet や Deployment などのコントローラによって管理される Pod の場合は、
spec.template.metadata.annotationsフィールドにアノテーションを追加します。クラスタに特権ワークロードを作成しようとします。
kubectl apply -f WORKLOAD_FILE_PATHWORKLOAD_FILE_PATH は、ワークロード マニフェスト ファイルのパスに置き換えます。GKE は、WorkloadAllowlist マニフェストを含むエラー メッセージでワークロードを拒否します。出力は次のようになります。
This workload can be enabled using the following Custom Resource. To be used in-cluster, the WorkloadAllowlist must be uploaded to Google Cloud Storage and then installed using an AllowlistSynchronizer. Refer to https://cloud.google.com/kubernetes-engine/docs/how-to/autopilot-privileged-allowlists. Note that many common partner workloads are already allowlisted. These can be installed directly using an AllowlistSynchronizer. Refer to https://cloud.google.com/kubernetes-engine/docs/resources/autopilot-partners. --- apiVersion: auto.gke.io/v1 kind: WorkloadAllowlist metadata: name: test-pod-allowlist-2025-09-11t22-40-37 annotations: autopilot.gke.io/no-connect: "true" exemptions: - autogke-disallow-privilege matchingCriteria: containers: - name: pause-container2 image: k8s.gcr.io/pause2 securityContext: privileged: trueテキスト エディタで、生成された WorkloadAllowlist を含む YAML ファイルを作成します。
許可リストの
metadata.nameフィールドを設定します。省略可: 同様のワークロードを除外できるように、WorkloadAllowlist を一般化します。確認は次のいずれかの方法で行います。
特定のフィールド(
matchingCriteria.containers[*].imageやmatchingCriteria.containers[*].argsなど)では、正規表現がサポートされています。さまざまなワークロードで複数の値に一致する正規表現を使用します。matchingCriteria.containersやmatchingCriteria.securityContext.capabilities.addなどの特定のフィールドは、WorkloadAllowlist の値のサブセットを持つワークロードと一致します。WorkloadAllowlist で、他のワークロードと一致する追加の値を指定します。
使用できるサポート対象のフィールドと値の詳細については、WorkloadAllowlist CustomResourceDefinition をご覧ください。
組織のポリシーで、クラスタ内のバケットからの許可リストのインストールが許可されている場合、クラスタ管理者は次の操作を行うことができます。
- 許可リストのパスをクラスタに追加します。
- バケットから許可リストをインストールする AllowlistSynchronizer を作成します。
クラスタを構成して許可リストをインストールする方法の詳細については、Autopilot モードで特権ワークロードの受け入れを制御するをご覧ください。
許可リスト構成の例
WorkloadAllowlist 仕様の matchingCriteria フィールドは、Kubernetes Pod 仕様と同様の構造になっています。WorkloadAllowlist CustomResourceDefinition は、使用できるすべてのフィールド、値、式の信頼できる情報源です。
このセクションでは、次のプロパティを持つワークロードに一致する許可リストの例を示します。
- ワークロードの
container-1コンテナが特権モードで実行されます。 - ワークロードは、ノードのファイル システムから
/var/log/ディレクトリを書き込みモードでマウントします。
ワークロードの例を確認します。
apiVersion: apps/v1 kind: Deployment metadata: name: example-privileged-workload labels: env: dev spec: selector: matchLabels: env: dev template: metadata: labels: env: dev spec: containers: - name: container-1 image: example-image-1 resources: requests: cpu: "400m" memory: "4Gi" # Run the container in privileged mode securityContext: privileged: true - name: container-2 image: example-image-2 volumeMounts: - name: write-varlog mountPath: /logs readOnly: false # Mount a host directory volumes: - name: write-varlog hostPath: path: /var/log type: Directoryデフォルトでは、Autopilot はこのワークロードを拒否します。
WorkloadAllowlist の例を確認します。
apiVersion: auto.gke.io/v1 kind: WorkloadAllowlist minGKEVersion: 1.32.0-gke.1000000 metadata: name: example-privileged-workload annotations: autopilot.gke.io/no-connect: "true" # List of constraints that the allowlist modifies exemptions: - autogke-disallow-privilege - autogke-no-write-mode-hostpath matchingCriteria: containers: - name: container-1 image: example-image-1 securityContext: privileged: true - name: container-2 image: example-image-2 volumeMounts: - name: write-varlog mountPath: /logs readOnly: false volumes: - name: write-varlog hostPath: path: /var/logこの WorkloadAllowlist には次のプロパティがあります。
exemptionsフィールドの値は、許可リストがバイパスする Autopilot 制約を指定します。matchingCriteriaフィールドの値は、ワークロードの例で使用されるコンテナと、通常は Autopilot 制約に違反するフィールドを指定します。
許可リストには、制約に違反するフィールドの値のみが含まれます。ワークロード内の他のフィールド(
resources.requestsフィールドなど)は無視されます。
この WorkloadAllowlist の例をクラスタにインストールすると、GKE は特権ワークロードがそのクラスタで実行されることを許可します。たとえば、Autopilot ノードがある Standard クラスタでこの WorkloadAllowlist をインストールすると、特権ワークロードを Autopilot ノードで実行できます。
GKE サービス エージェントへのアクセス権を付与する
クラスタ内のバケットから許可リストを同期するには、クラスタ プロジェクトの GKE サービス エージェントに次の IAM ロールが必要です。
- ストレージ バケット閲覧者(
roles/storage.bucketViewer) - Storage オブジェクト閲覧者(
roles/storage.objectViewer)
これらのロールをサービス エージェントに付与する手順は次のとおりです。
クラスタ プロジェクトのプロジェクト番号を確認します。
gcloud projects describe CLUSTER_PROJECT_ID \ --format='value(projectNumber)'roles/storage.bucketViewerロールを付与します。gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \ --project=BUCKET_PROJECT_ID \ --role=roles/storage.bucketViewer次のように置き換えます。
BUCKET_NAME: Cloud Storage バケットの名前。CLUSTER_PROJECT_NUMBER: 前の手順の出力から取得したクラスタ プロジェクトのプロジェクト番号。BUCKET_PROJECT_ID: バケットを含むプロジェクトの ID。
roles/storage.objectViewerロールを付与します。gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \ --project=BUCKET_PROJECT_ID \ --role=roles/storage.objectViewer