このページでは、Google Kubernetes Engine(GKE)Autopilot パートナーの権限付きワークロードを実行する方法について説明します。クラスタに許可リストをインストールし、許可リストを最新の状態に保つ同期ワークロードを設定する方法について説明します。
このページは、次のタイプのロールを対象としています。
- サードパーティ ワークロードがクラスタで実行されるために許可リストが必要であり、GKE 承認済みのソースから提供されることを確認するセキュリティ エンジニア。
- クラスタでサードパーティのワークロードを有効にして、アプリケーション チームのブロックを解除する必要があるプラットフォーム エンジニア。
ドキュメントで参照している一般的なロールとタスク例の詳細については、一般的な GKE Enterprise ユーザーロールとタスクをご覧ください。
このページを読む前に、次のことをよく理解しておいてください。
Autopilot の特権パートナー ワークロードについて
GKE では、承認済みのパートナーのサブセットが Autopilot クラスタで特権ワークロードを実行できます。これらの特権ワークロードは、Autopilot が適用するセキュリティ制約の一部をバイパスできます。たとえば、パートナーは、特定の Linux 機能を使用したり、特権コンテナを必要とするワークロードを実行したりする必要がある場合があります。
パートナーは、特権ワークロードの許可リストを作成して維持します。各許可リストは、特定の権限のあるパートナー ワークロードに一致するファイルです。パートナーは、これらの許可リスト ファイルを GKE に送信して承認を得ます。承認後、GKE は Google 管理のリポジトリに許可リスト ファイルをホストします。
パートナー ワークロードを実行するには、対応する許可リスト ファイルをクラスタにインストールします。GKE には、許可リストをインストールして最新の状態に保つ AllowlistSynchronizer
という名前の Kubernetes カスタム リソースが用意されています。許可リストが正常にインストールされたら、対応する特権パートナー ワークロードをデプロイできます。
特権ワークロードと許可リストに関するバグと機能リクエスト
パートナーは、特権ワークロードと許可リストの作成、開発、維持を行う責任があります。バグが発生した場合や、特権ワークロードまたは許可リストに関する機能リクエストがある場合は、該当するパートナーにお問い合わせください。
AllowlistSynchronizer
コントローラについて
AllowlistSynchronizer
は、GKE コントロール プレーンで実行されるコントローラです。他の Kubernetes ワークロードをデプロイする場合と同様に、新しい AllowlistSynchronizer
を YAML マニフェストとしてデプロイします。マニフェストでは、インストールする許可リスト ファイルのパスを指定します。このファイルはサードパーティ パートナーから取得します。同期ツールは、Google 管理のリポジトリでパートナーの許可リスト ファイルを検索し、クラスタに許可リストをインストールします。
同期ツールは 10 分ごとに許可リスト ファイルの更新を確認します。アップデートが存在する場合、同期ツールは更新された許可リストをクラスタにインストールします。
特定のワークロードの許可を停止するには、既存の AllowlistSynchronizers を更新して対応する許可リスト ファイルパスを削除し、クラスタから WorkloadAllowlist
オブジェクトを削除します。許可リスト同期ツールからパスを削除せずに、インストール済みの WorkloadAllowlist
オブジェクトを削除すると、同期ツールによって許可リストが再インストールされます。パートナーは、Google 管理のリポジトリから許可リスト ファイルを削除することはできません。
始める前に
作業を始める前に、次のことを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
要件
AllowlistSynchronizer
カスタム リソースには、GKE バージョン 1.32.1-gke.1729000 以降が必要です。- クラスタで実行するパートナー ワークロードを把握する必要があります。特権ワークロードのインストール手順については、パートナーのドキュメントをご覧ください。
新しい AllowlistSynchronizer
を作成します。
パートナーから特権ワークロードを実行するには、対応する許可リスト ファイルのパスを AllowlistSynchronizer
カスタム リソースに追加します。次に、AllowlistSynchronizer をクラスタにデプロイします。
- テキスト エディタで新しい YAML ファイルを作成します。
YAML ファイルに次の内容を追加します。
apiVersion: auto.gke.io/v1 kind: AllowlistSynchronizer metadata: name: ALLOWLIST_SYNCHRONIZER_NAME spec: allowlistPaths: - ALLOWLIST1_PATH - ALLOWLIST2_PATH
次のように置き換えます。
ALLOWLIST_SYNCHRONIZER_NAME
: 新しい同期ツールの名前。許可リストがサポートするワークロードまたはチームを識別するわかりやすい名前を選択します。ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...
: インストールするパートナー許可リスト ファイルのパス。このパスの選択したパートナーのワークロードのドキュメントを確認します。ディレクトリ全体または個々のファイルを指定できます。
YAML ファイルをクラスタにデプロイします。
kubectl apply -f PATH_TO_YAML_FILE
PATH_TO_YAML_FILE
は、前の手順で作成した YAML ファイルのパスに置き換えます。AllowlistSynchronizer
コントローラは、クラスタ内の指定されたパスから許可リスト ファイルをインストールします。同期ツールが
Ready
ステータスを報告するまで待ちます。kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \ --timeout=60s
パートナー ワークロードのデプロイを継続的インテグレーションと継続的デプロイ(CI/CD)パイプラインに統合することもできます。許可リストが正常にインストールされるまで待ってから、対応するワークロードをデプロイするようにワークフローを構成します。
既存の AllowlistSynchronizer を更新する
既存の AllowlistSynchronizer を更新して、許可リスト ファイルを追加または削除できます。既存の同期ツールを更新する必要があるのは、次のような状況です。
- パートナーが、名前の異なる新しい許可リスト ファイルを追加します。
- 関連する許可リストをグループ化する既存の同期ツールに、新しいワークロード許可リストを追加します。
- 対応するワークロードの使用を停止したため、同期ツールから許可リストを削除します。
既存の AllowlistSynchronizer
オブジェクトを更新する手順は次のとおりです。
クラスタ内の既存の同期ツールを一覧表示します。
kubectl get allowlistsynchronizer
更新する同期ツールの仕様をテキスト エディタで開きます。
spec.allowlistPaths
フィールドを更新して、許可リストのファイルパスを追加、変更、削除します。保存してテキスト エディタを閉じます。
更新された構成をクラスタに適用します。
kubectl apply -f PATH_TO_YAML_FILE
PATH_TO_YAML_FILE
は、前の手順で更新した YAML ファイルのパスに置き換えます。
更新された同期ツールの構成をデプロイすると、AllowlistSynchronizer
オブジェクトのステータスの managedAllowlistStatus.generation
フィールドが 1 ずつ増加します。AllowlistSynchronizer
コントローラが変更を適用します。
許可リストの同期ステータスをモニタリングする
AllowlistSynchronizer
をインストールするか、既存の同期ツールを更新した後、同期ステータスをモニタリングできます。ステータスを使用すると、許可リスト ファイルのインストール、削除、変更、発生する可能性のあるエラーを追跡できます。
同期の一般的なステータスをモニタリングするには、次のコマンドを実行します。
kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml
出力は次のようになります。
...
status:
conditions:
- type: Ready
status: "False"
reason: "SyncError"
message: "some allowlists failed to sync: example-allowlist-1.yaml"
lastTransitionTime: "2024-10-12T10:00:00Z"
observedGeneration: 2
managedAllowlistStatus:
- filePath: "gs://path/to/allowlist1.yaml"
generation: 1
phase: Installed
lastSuccessfulSync: "2024-10-10T10:00:00Z"
- filePath: "gs://path/to/allowlist2.yaml"
phase: Failed
lastError: "Initial install failed: invalid contents"
lastSuccessfulSync: "2024-10-08T10:00:00Z"
これらのフィールドの説明については、AllowlistSynchronizer
ステータスをご覧ください。
クラスタに許可リストが存在することを確認する
クラスタに許可リストが存在することを確認するには、次のコマンドを実行します。
kubectl get workloadallowlist
出力には、クラスタにインストールされている許可リストのリストが表示されます。出力に、使用する許可リストが含まれていることを確認します。
特権ワークロードをデプロイする
許可リストが正常にインストールされたら、クラスタに対応するワークロードをデプロイできます。ワークロードを提供するパートナーは、ワークロードのインストール手順も提供する必要があります。Autopilot パートナーのリストとドキュメントへのリンクについては、Autopilot パートナーをご覧ください。
特権ワークロードを削除する
クラスタで特権ワークロードの実行を許可しないようにするには、AllowlistSynchronizer から対応する許可リストへのパスを削除します。同期ツールが許可リストをアンインストールします。
同期ツールを更新する代わりに、クラスタから WorkloadAllowlist
オブジェクトを削除すると、同期ツールによって許可リストが再インストールされます。AllowlistSynchronizer
からパスを削除してください。
許可リストをアンインストールする手順は次のとおりです。
- 許可リストを管理する
AllowlistSynchronizer
の YAML マニフェストで、アンインストールする許可リストのパスを削除します。手順については、既存の AllowlistSynchronizer を更新するをご覧ください。 許可リストがアンインストールされたことを確認するには、クラスタ内の
WorkloadAllowlist
オブジェクトのリストを取得します。kubectl get workloadallowlist
出力で、削除する許可リストが表示されていないことを確認します。
クラスタからワークロードを削除します。手順については、ワークロード プロバイダのドキュメントをご覧ください。
クラスタへの許可リストのインストールを防ぐ
特定のクラスタに特権ワークロード許可リストがインストールされないようにするには、ValidatingAdmissionPolicy を使用します。アドミッション ポリシーを検証すると、Kubernetes リソースが特定の条件を満たしていることを確認してから、クラスタ内での実行を許可できます。たとえば、ラベルに特定の値があることを確認できます。
クラスタに許可リストをインストールしないようにするには、次の操作を行います。
次の ValidatingAdmissionPolicy マニフェストを
disallow-allowlists.yaml
として保存します。apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingAdmissionPolicy metadata: name: "disallow-allowlists" spec: failurePolicy: Fail matchConstraints: resourceRules: - apiGroups: ["auto.gke.io"] apiVersions: ["*"] operations: ["*"] resources: ["allowlistsynchronizers"] validations: - expression: "false" message: 'AllowlistSynchronizer creation is not allowed'
次の ValidatingAdmissionPolicyBinding マニフェストを
disallow-allowlists-binding.yaml
として保存します。apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingAdmissionPolicyBinding metadata: name: "disallow-allowlists-binding" spec: policyName: "disallow-allowlists" validationActions: [Deny]
クラスタに ValidatingAdmissionPolicy をデプロイします。
kubectl apply -f disallow-allowlists.yaml kubectl apply -f disallow-allowlists-binding.yaml
このポリシーにより、クラスタ内に新しい AllowlistSynchronizers が作成されなくなります。
トラブルシューティング
同期またはワークロードのデプロイが失敗した場合は、特権 Autopilot ワークロードのデプロイに関するトラブルシューティングをご覧ください。