このドキュメントでは、Autopilot ノードに特権ワークロードをデプロイできる許可リストを作成する方法について説明します。 これらの許可リストは Cloud Storage バケットに保存します。このドキュメントは、特定の Kubernetes ワークロードに対して、特定の顧客所有のワークロードをデフォルトの Autopilot セキュリティ制約から除外したいプラットフォーム管理者とオペレーターを対象としています。Autopilot での特権ワークロード アドミッション コントロールについて精通している必要があります。
Autopilot での特権ワークロードについて
Autopilot モードでは、セキュリティ ポスチャーを強化するために、ワークロードにデフォルトの制約セットが適用されます。これらの制約を回避して特定の特権ワークロードを実行するには、それらのワークロードに対応する許可リストをインストールします。 デフォルトでは、Autopilot パートナーと特定のオープンソース プロジェクトの許可リストを Autopilot クラスタまたは Standard クラスタにインストールできます。
対象となる GKE のお客様は、デフォルトの Autopilot 制約と互換性のない独自の特権ワークロードの許可リストを作成して管理できます。これらの許可リストは、YAML ファイルで定義して Cloud Storage バケットに保存する WorkloadAllowlist Kubernetes カスタム リソースです。ID とアカウントの管理者は、組織のポリシーを使用して、これらの顧客管理の許可リストとバケットを認識するようにクラスタを構成できます。クラスタ管理者は、これらの許可リストをインストールして、特権ワークロードを Autopilot モードで実行できます。
プロセスと関係者について詳しくは、 特権 Autopilot ワークロード アドミッション コントロールの仕組みをご覧ください。
始める前に
始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、
インストールして
初期化する
gcloud CLI。gcloud CLI をインストール済みの場合は、最新の
バージョンを
gcloud components updateコマンドを実行して取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
-
Cloud Storage API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限が付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください。 - バージョン 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) - ストレージ オブジェクト閲覧者 (
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