クイックスタート: 継続的検証で Pod のセキュリティをモニタリングする
チェックベースのポリシーを使用して Binary Authorization の継続的検証(CV)を開始する方法を学習します。このクイックスタートでは、次の CV チェックを使用して、次の条件で実行中の Pod を継続的に検証します。
- 信頼できるディレクトリ: Pod に関連付けられたイメージが、ポリシーで指定された 1 つ以上の信頼できるディレクトリに存在することを確認します。
- イメージの鮮度: ポリシーで指定した日数以内に Pod のイメージがアップロードされていることを確認します。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- 
      Install the Google Cloud CLI. 
- 
          外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。 
- 
        gcloud CLI を初期化するには、次のコマンドを実行します。 gcloud init
- 
  
  
    Create or select a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 - 
        Create a Google Cloud project: gcloud projects create PROJECT_ID Replace PROJECT_IDwith a name for the Google Cloud project you are creating.
- 
        Select the Google Cloud project that you created: gcloud config set project PROJECT_ID Replace PROJECT_IDwith your Google Cloud project name.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
  
  
    
      Enable the Binary Authorization and Google Kubernetes Engine APIs: Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable container.googleapis.com binaryauthorization.googleapis.com 
- 
      Install the Google Cloud CLI. 
- 
          外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。 
- 
        gcloud CLI を初期化するには、次のコマンドを実行します。 gcloud init
- 
  
  
    Create or select a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 - 
        Create a Google Cloud project: gcloud projects create PROJECT_ID Replace PROJECT_IDwith a name for the Google Cloud project you are creating.
- 
        Select the Google Cloud project that you created: gcloud config set project PROJECT_ID Replace PROJECT_IDwith your Google Cloud project name.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
  
  
    
      Enable the Binary Authorization and Google Kubernetes Engine APIs: Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable container.googleapis.com binaryauthorization.googleapis.com 
- kubectlコマンドライン ツールをインストールします。
- Binary Authorization ポリシーと GKE クラスタが別々のプロジェクトにある場合は、両方のプロジェクトで Binary Authorization が有効になっていることを確認します。
- プラットフォーム ポリシーの YAML ファイルを作成します。 - cat << EOF > /tmp/my-policy.yaml gkePolicy: checkSets: - checks: - trustedDirectoryCheck: trustedDirPatterns: - us-central1-docker.pkg.dev/my-project/my-directory displayName: My trusted directory check - imageFreshnessCheck: maxUploadAgeDays: 30 displayName: My image freshness check displayName: My trusted directory and image freshness check set EOF- このポリシーでは、次の条件がチェックされます。 - Pod のイメージが - us-central1-docker.pkg.dev/my-project/my-directoryという名前の Artifact Registry リポジトリに保存されている。
- Pod のイメージが過去 30 日以内に Artifact Registry または Container Registry リポジトリにアップロードされている。 
 
- プラットフォーム ポリシーを作成します。 - gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=/tmp/my-policy.yaml \ --project=POLICY_PROJECT_ID- 次のように置き換えます。 - POLICY_ID: 任意の ID
- POLICY_PROJECT_ID: ポリシー プロジェクト ID
 
- チェックベースのプラットフォーム ポリシーを有効にしてクラスタを作成するには、次のコマンドを実行します。 - gcloud beta container clusters create CLUSTER_NAME\ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID- 次のように置き換えます。 - CLUSTER_NAME: クラスタの名前
- LOCATION: ロケーション(例:- us-central1、- asia-south1)
- POLICY_PROJECT_ID: ポリシーが保存されているプロジェクトの ID
- POLICY_ID: ポリシー ID
- CLUSTER_PROJECT_ID: クラスタ プロジェクト ID
 - クラスタが作成されるまで待ちます。 
- チェックベースのポリシーを有効にして既存のクラスタを更新するには、次のコマンドを実行します。 - gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID- 次のように置き換えます。 - CLUSTER_NAME: クラスタの名前
- LOCATION: ロケーション(例:- us-central1、- asia-south1)
- POLICY_PROJECT_ID: ポリシーが保存されているプロジェクトの ID
- POLICY_ID: ポリシー ID
- CLUSTER_PROJECT_ID: クラスタ プロジェクト ID
 - クラスタが更新されるまで待ちます。 
- kubectlの認証情報を取得します。- gcloud container clusters get-credentials CLUSTER_NAME
- イメージをデプロイします。 - kubectl run hello-app \ --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0- イメージ - us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0は、過去 30 日以内にリポジトリにアップロードされているため、鮮度チェックの条件を満たしています。ただし、イメージが- us-central1-docker.pkg.dev/my-project/my-directoryにないため、信頼できるディレクトリ チェックの条件を満たしていません。このため、Cloud Logging に- TrustedDirectoryCheckログエントリが生成されます。
- policyName: CV が違反を特定したときに使用していたプラットフォーム ポリシー
- checkResults: 次のフィールドを含む結果のブロック。- explanation: エラー メッセージ
- checkSetName: チェックセットの- displayName値
- checkSetIndex: ポリシーに設定されたチェックのインデックス
- checkName: チェックの名前
- checkIndex: チェックセット内のチェックのインデックス
- verdict: ログエントリの判定結果。この例では、チェックの条件を満たしていないため、- NOT_CONFORMANTになっています。
 
- CLUSTER_NAME: クラスタの名前
- LOCATION: クラスタのロケーション
- CLUSTER_PROJECT_ID: クラスタ プロジェクト ID
- CLUSTER_NAME: クラスタの名前
- LOCATION: クラスタのロケーション
- CLUSTER_PROJECT_ID: クラスタ プロジェクト ID
- POLICY_ID: ポリシーの ID
- POLICY_PROJECT_ID: ポリシー プロジェクト ID
プラットフォーム ポリシーを作成する
CV GKE プラットフォーム ポリシーを設定する手順は次のとおりです。
クラスタの作成または更新
クラスタで CV を有効にするには、新しいクラスタを作成するか、既存のクラスタを更新します。
イメージをデプロイする
ログを閲覧する
ログエントリは、Pod のデプロイから 24 時間以内に Cloud Logging に表示されます(数時間で表示される場合もあります)。
Cloud Logging でログを表示するには、次のフィルタを使用します。
logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "policyName"
hello-app Pod のログは以下のようになります。一部のフィールドは、プロジェクト ID やクラスタ名などによって異なる場合があります。
{
  "insertId": "637c2de7-0000-2b64-b671-24058876bb74",
  "jsonPayload": {
    "podEvent": {
      "endTime": "2022-11-22T01:14:30.430151Z",
      "policyName": "projects/1234567890/platforms/gke/policies/my-policy",
      "images": [
        {
          "result": "DENY",
          "checkResults": [
            {
              "explanation": "TrustedDirectoryCheck at index 0 with display name \"My trusted directory check\" has verdict NOT_CONFORMANT. Image is not in a trusted directory",
              "checkSetName": "Default check set",
              "checkSetIndex": "0",
              "checkName": "My trusted directory check",
              "verdict": "NON_CONFORMANT",
              "checkType": "TrustedDirectoryCheck",
              "checkIndex": "0"
            }
          ],
          "image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
        }
      ],
      "verdict": "VIOLATES_POLICY",
      "podNamespace": "default",
      "deployTime": "2022-11-22T01:06:53Z",
      "pod": "hello-app"
    },
    "@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent"
  },
  "resource": {
    "type": "k8s_cluster",
    "labels": {
      "project_id": "my-project",
      "location": "us-central1-a",
      "cluster_name": "my-cluster"
    }
  },
  "timestamp": "2022-11-22T01:44:28.729881832Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
  "receiveTimestamp": "2022-11-22T03:35:47.171905337Z"
}
ログエントリには、次の情報を含むポリシー違反に関する情報が表示されます。
一部のチェックでは、チェック条件を満たしていない理由がわかる追加情報が提供される場合があります。
イメージの鮮度チェックの条件を満たしているため、ログに鮮度チェックは表示されていません。
クリーンアップ
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、リソースを含む Google Cloud プロジェクトを削除します。
このセクションでは、このガイドの前半で構成した CV モニタリングをクリーンアップする方法について説明します。
クラスタで CV モニタリングを無効にするか、Binary Authorization と CV の両方を無効にできます。
クラスタで Binary Authorization を無効にする
クラスタで CV と Binary Authorization の両方を無効にするには、次のコマンドを実行します。
gcloud beta container clusters update CLUSTER_NAME \
    --binauthz-evaluation-mode=DISABLED \
    --location=LOCATION \
    --project=CLUSTER_PROJECT_ID
次のように置き換えます。
クラスタでチェックベースのポリシー モニタリングを無効にする
クラスタでチェックベースのポリシーを使用して CV を無効にし、Binary Authorization 適用ポリシーを使用して適用を再度有効にするには、次のコマンドを実行します。
gcloud beta container clusters update CLUSTER_NAME  \
    --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
    --location=LOCATION \
    --project="CLUSTER_PROJECT_ID"
次のように置き換えます。
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE は、古いフラグ --enable-binauthz と同じです。
ポリシーを削除する
ポリシーを削除するには、次のコマンドを実行します。チェックベースのポリシー監査を無効にするために、チェックベースのプラットフォーム ポリシーを削除する必要はありません。
gcloud beta container binauthz policy delete POLICY_ID \
    --platform=gke \
    --project="POLICY_PROJECT_ID"
次のように置き換えます。