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

Google Distributed Cloud の Binary Authorization を使用すると、Binary Authorization のホストされたデプロイ時の適用をオンプレミス クラスタに拡張できます。Binary Authorization は、主にワークロードの保護に使用されますが、すべてのクラスタタイプで機能し、 Google Cloud プロジェクトで構成されたポリシー適用ルールを適用します。ポリシーとルールの詳細については、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 の概要をご覧ください。

  • 無効にするには:

    この機能をオフにするには、evaluationMode を DISABLED に設定するか、クラスタ仕様から 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 コンテナ ベアメタル クラスタの更新 をご覧ください。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