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

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

前提条件

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

  • クラスタをフリートに登録する: gkectl で作成したクラスタの場合、クラスタは、クラスタ構成ファイルの 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 ポリシーの適用は、gkectl または gcloud CLI を使用して有効にできます。

gkectl

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

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

    ...
    binaryAuthorization:
      evaluationMode: "project_singleton_policy_enforce"
    ...
    

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

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

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

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

クラスタの作成の詳細については、Google Distributed Cloud のインストールの概要をご覧ください。

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

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

gkectl

  • 有効にする手順は次のとおりです。

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

      ...
      binaryAuthorization:
        evaluationMode: "project_singleton_policy_enforce"
      
    2. クラスタを更新します。

      gkectl update cluster \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
        --config USER_CLUSTER_CONFIG_FILE \
        --force

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

      • ADMIN_CLUSTER_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス
      • USER_CLUSTER_CONFIG_FILE: ユーザー クラスタの構成ファイルのパス
    3. binauthz-system Namespace の binauthz-module-deployment という名前の Deployment の準備が整うまで待ちます。

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

  • 無効にするには:

    1. クラスタ構成ファイルを編集し、binaryAuthorization セクションを削除するか、evaluationModedisabled に設定します。

      ...
      binaryAuthorization:
        evaluationMode: "disabled"
      
    2. クラスタを更新します。

      gkectl update cluster \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
        --config USER_CLUSTER_CONFIG_FILE \
        --force

    この変更を行ったら、binauthz-system Namespace の binauthz-module-deployment という名前の Deployment が削除されるまで数分待ちます。

トラブルシューティング

前提条件をすべて完了していない場合、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