GKE Autopilot パートナーの権限付きワークロードを実行する


このページでは、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 をクラスタにデプロイします。

  1. テキスト エディタで新しい YAML ファイルを作成します。
  2. 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, ...: インストールするパートナー許可リスト ファイルのパス。このパスの選択したパートナーのワークロードのドキュメントを確認します。ディレクトリ全体または個々のファイルを指定できます。
  3. YAML ファイルをクラスタにデプロイします。

    kubectl apply -f PATH_TO_YAML_FILE
    

    PATH_TO_YAML_FILE は、前の手順で作成した YAML ファイルのパスに置き換えます。

    AllowlistSynchronizer コントローラは、クラスタ内の指定されたパスから許可リスト ファイルをインストールします。

  4. 同期ツールが Ready ステータスを報告するまで待ちます。

    kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \
      --timeout=60s
    

パートナー ワークロードのデプロイを継続的インテグレーションと継続的デプロイ(CI/CD)パイプラインに統合することもできます。許可リストが正常にインストールされるまで待ってから、対応するワークロードをデプロイするようにワークフローを構成します。

既存の AllowlistSynchronizer を更新する

既存の AllowlistSynchronizer を更新して、許可リスト ファイルを追加または削除できます。既存の同期ツールを更新する必要があるのは、次のような状況です。

  • パートナーが、名前の異なる新しい許可リスト ファイルを追加します。
  • 関連する許可リストをグループ化する既存の同期ツールに、新しいワークロード許可リストを追加します。
  • 対応するワークロードの使用を停止したため、同期ツールから許可リストを削除します。

既存の AllowlistSynchronizer オブジェクトを更新する手順は次のとおりです。

  1. クラスタ内の既存の同期ツールを一覧表示します。

    kubectl get allowlistsynchronizer
    
  2. 更新する同期ツールの仕様をテキスト エディタで開きます。

  3. spec.allowlistPaths フィールドを更新して、許可リストのファイルパスを追加、変更、削除します。

  4. 保存してテキスト エディタを閉じます。

  5. 更新された構成をクラスタに適用します。

    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 からパスを削除してください。

許可リストをアンインストールする手順は次のとおりです。

  1. 許可リストを管理する AllowlistSynchronizer の YAML マニフェストで、アンインストールする許可リストのパスを削除します。手順については、既存の AllowlistSynchronizer を更新するをご覧ください。
  2. 許可リストがアンインストールされたことを確認するには、クラスタ内の WorkloadAllowlist オブジェクトのリストを取得します。

    kubectl get workloadallowlist
    

    出力で、削除する許可リストが表示されていないことを確認します。

  3. クラスタからワークロードを削除します。手順については、ワークロード プロバイダのドキュメントをご覧ください。

クラスタへの許可リストのインストールを防ぐ

特定のクラスタに特権ワークロード許可リストがインストールされないようにするには、ValidatingAdmissionPolicy を使用します。アドミッション ポリシーを検証すると、Kubernetes リソースが特定の条件を満たしていることを確認してから、クラスタ内での実行を許可できます。たとえば、ラベルに特定の値があることを確認できます。

クラスタに許可リストをインストールしないようにするには、次の操作を行います。

  1. 次の 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'
    
  2. 次の ValidatingAdmissionPolicyBinding マニフェストを disallow-allowlists-binding.yaml として保存します。

    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingAdmissionPolicyBinding
    metadata:
      name: "disallow-allowlists-binding"
    spec:
      policyName: "disallow-allowlists"
      validationActions: [Deny]
    
  3. クラスタに ValidatingAdmissionPolicy をデプロイします。

    kubectl apply -f disallow-allowlists.yaml
    kubectl apply -f disallow-allowlists-binding.yaml
    

このポリシーにより、クラスタ内に新しい AllowlistSynchronizers が作成されなくなります。

トラブルシューティング

同期またはワークロードのデプロイが失敗した場合は、特権 Autopilot ワークロードのデプロイに関するトラブルシューティングをご覧ください。

次のステップ