Binary Authorization ポリシーの適用を設定する

GKE on Bare Metal の Binary Authorization は、Binary Authorization のホストされたデプロイ時の適用をオンプレミス クラスタに拡張する Google Cloud の機能です。GKE on Bare Metal での Binary Authorization の主なユースケースは、ワークロードの保護ですが、Binary Authorization はすべてのクラスタタイプで機能します。このガイドの手順に沿って、Google Cloud プロジェクトで構成した Binary Authorization ポリシーの適用ルールをクラスタに適用してください。Binary Authorization ポリシーとルールについては、Binary Authorization の概要をご覧ください。

前提条件

クラスタで Binary Authorization ポリシーの適用を有効にする前に、以下の前提条件を満たしていることを確認してください。

  • クラスタをフリートに登録する: bmctl で作成したクラスタは、クラスタ構成ファイルの gkeConnect.projectID フィールドで指定した Google Cloud プロジェクトに登録されます。このプロジェクトはフリート ホスト プロジェクトと呼ばれます。ユースケース、ベスト プラクティス、サンプルなど、フリートに関する詳細は、フリート管理のドキュメントをご覧ください。

  • Google Cloud プロジェクトで Binary Authorization API を有効にする: フリート ホスト プロジェクトで Binary Authorization サービスを有効にします

  • Binary Authorization ポリシー評価者ロールをフリート ホスト プロジェクトに追加する: Binary Authorization ポリシー エバリュエータ ロール(roles/binaryauthorization.policyEvaluator)をフリート ホスト プロジェクトの Kubernetes サービス アカウントに付与するには、次のコマンドを実行します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_ID.svc.id.goog[binauthz-system/binauthz-agent]" \
        --role="roles/binaryauthorization.policyEvaluator"
    

    クラスタがプロキシ サーバーの背後で実行されている場合は、プロキシ サーバーが Binary Authorization API(binaryauthorization.googleapis.com)への接続を許可していることを確認してください。この API は、クラスタにデプロイされたイメージの、ポリシーベースのデプロイ検証と制御を提供します。プロキシ構成を使用する詳細については、プロキシの背後にインストールするをご覧ください。

前提条件を満たすと、新しいクラスタを作成ときや既存のクラスタを更新するときに Binary Authorization ポリシーを有効化(または無効化)できます。

クラスタの作成時に Binary Authorization ポリシーを有効にする

Binary Authorization ポリシーの適用は、bmctl または gcloud CLI を使用して有効にできます。

bmctl

bmctl を使用してクラスタを作成するときに Binary Authorization を有効にするには:

  1. クラスタを作成する前に、次の例に示すように spec.binaryAuthorization.evaluationMode をクラスタ構成ファイルに追加します。

    ...
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: user-basic
      namespace: cluster-user-basic
    spec:
      type: user
      ...
      binaryAuthorization:
        evaluationMode: "PROJECT_SINGLETON_POLICY_ENFORCE"
    

    evaluationMode に指定できる値は以下のとおりです。

    • PROJECT_SINGLETON_POLICY_ENFORCE: Binary Authorization ポリシーで指定されたルール(プロジェクトのシングルトン ポリシーとも呼ばれます)を Google Cloud プロジェクトに適用してクラスタ上のコンテナ イメージのデプロイを管理します。

    • DISABLE: クラスタで Binary Authorization の使用を無効にします。これがデフォルト値です。 binaryAuthorization を省略すると、この機能は無効になります。

  2. クラスタ構成ファイルに必要な他の変更を行い、bmctl create cluster コマンドを実行します。

クラスタを作成する詳細については、クラスタの作成の概要をご覧ください。

gcloud CLI

  • ユーザー クラスタを作成して Binary Authorization を有効にするには、gcloud container bare-metal clusters create コマンドを実行するときに --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE フラグを追加します。

    これは、Binary Authorization ポリシーで指定されたルール(プロジェクト シングルトン ポリシー)を適用するユーザー クラスタを作成します。このポリシーは、Google Cloud プロジェクトに関連付けられ、コンテナ イメージのデプロイを管理するルールを指定します。gcloud CLI を使用してユーザー クラスタを作成する方法については、GKE On-Prem API クライアントを使用してクラスタを作成するをご覧ください。Binary Authorization ポリシーとルールについては、Binary Authorization の概要をご覧ください。

既存のクラスタの Binary Authorization ポリシーを有効または無効にする

既存のバージョン 1.16 以降のクラスタを使用している場合は、bmctl または gcloud CLI を使用していつでも Binary Authorization を有効または無効にできます。

bmctl

  • 有効にするには:

    1. クラスタ構成ファイルを編集して binaryAuthorization フィールドを追加します。

      ...
      ---
      apiVersion: baremetal.cluster.gke.io/v1
      kind: Cluster
      metadata:
        name: user-basic
        namespace: cluster-user-basic
      spec:
        type: user
        ...
        binaryAuthorization:
          evaluationMode: "PROJECT_SINGLETON_POLICY_ENFORCE"
      
    2. クラスタを更新します。

      bmctl update cluster -c CLUSTER_NAME --admin-kubeconfig=CLUSTER_KUBECONFIG
      

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

      • CLUSTER_NAME: 更新するクラスタの名前。
      • CLUSTER_KUBECONFIG: クラスタの kubeconfig ファイルへのパス。
    3. binauthz-system Namespace の binauthz-module-deployment という名前の Deployment の準備が整うまで待ちます。

      デプロイの準備が整うと、Binary Authorization は Binary Authorization ポリシー(プロジェクト シングルトン ポリシーとも呼ばれる)で指定されたルールを適用します。このポリシーは、Google Cloud プロジェクトに関連付けられ、コンテナ イメージのデプロイを管理するルールを指定します。bmctl を使用してクラスタを更新する方法の詳細については、クラスタの更新をご覧ください。Binary Authorization ポリシーとルールについては、Binary Authorization の概要をご覧ください。

  • 無効にするには:

    この機能をオフにするには、evaluationModeDISABLED に設定するか、クラスタ仕様から binaryAuthorization セクションを削除します。この変更を行ったら、binauthz-system Namespace の binauthz-module-deployment という名前の Deployment が削除されるまで数分待ちます。

gcloud CLI

  • 既存のクラスタに対して Binary Authorization を有効にするには、gcloud container bare-metal clusters update コマンドを実行するときに --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE フラグを加えます。

    これにより、ユーザー クラスタが更新され、Binary Authorization は Binary Authorization ポリシーシングルトン ポリシー)で指定されたルールを適用します。このポリシーは、Google Cloud プロジェクトに関連付けられ、コンテナ イメージのデプロイを管理するルールを指定します。gcloud CLI を使用してユーザー クラスタを更新する詳細については、gcloud CLI リファレンスの gcloud container bare-metal clusters update をご覧ください。Binary Authorization ポリシーとルールについては、Binary Authorization の概要をご覧ください。

  • 既存のクラスタの Binary Authorization を無効にするには、--binauthz-evaluation-mode=DISABLED フラグを指定して gcloud container bare-metal clusters update コマンドを実行します。

トラブルシューティング

前提条件をすべて完了していないと、問題を早期に把握できない場合があります。Binary Authorization が Pod 作成リクエストへの応答に失敗する場合は、ReplicaSet の status.conditions を確認してください。以下のようなメッセージは、Binary Authorization の構成に問題があることを示しています。

failed to validate Binary Authorization policy

(1) Ensure the Binary Authorization API is enabled for your Google Cloud project:
    gcloud services enable binaryauthorization.googleapis.com --project=PROJECT_ID
(2) Ensure an IAM policy binding is in place granting binaryauthorization.policyEvaluator role to the binauthz-system/binauthz-agent Kubernetes service account:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_ID.svc.id.goog[binauthz-system/binauthz-agent]" \
        --role=roles/binaryauthorization.policyEvaluator