クイックスタート: 継続的検証で 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.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with 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_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization and Google Kubernetes Engine APIs:
gcloud services enable container.googleapis.com
binaryauthorization.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with 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_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization and Google Kubernetes Engine APIs:
gcloud services enable container.googleapis.com
binaryauthorization.googleapis.com kubectl
コマンドライン ツールをインストールします。- Binary Authorization ポリシーと GKE クラスタが別々のプロジェクトにある場合は、両方のプロジェクトで Binary Authorization が有効になっていることを確認します。
プラットフォーム ポリシーを作成する
CV GKE プラットフォーム ポリシーを設定する手順は次のとおりです。
プラットフォーム ポリシーの 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
: 任意の IDPOLICY_PROJECT_ID
: ポリシー プロジェクト ID
クラスタの作成または更新
クラスタで CV を有効にするには、新しいクラスタを作成するか、既存のクラスタを更新します。
チェックベースのプラットフォーム ポリシーを有効にしてクラスタを作成するには、次のコマンドを実行します。
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
: ポリシーが保存されているプロジェクトの IDPOLICY_ID
: ポリシー IDCLUSTER_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
: ポリシーが保存されているプロジェクトの IDPOLICY_ID
: ポリシー IDCLUSTER_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
ログエントリが生成されます。
ログを閲覧する
ログエントリは、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"
}
ログエントリには、次の情報を含むポリシー違反に関する情報が表示されます。
policyName
: CV が違反を特定したときに使用していたプラットフォーム ポリシーcheckResults
: 次のフィールドを含む結果のブロック。explanation
: エラー メッセージcheckSetName
: チェックセットのdisplayName
値checkSetIndex
: ポリシーに設定されたチェックのインデックスcheckName
: チェックの名前checkIndex
: チェックセット内のチェックのインデックスverdict
: ログエントリの判定結果。この例では、チェックの条件を満たしていないため、NOT_CONFORMANT
になっています。
一部のチェックでは、チェック条件を満たしていない理由がわかる追加情報が提供される場合があります。
イメージの鮮度チェックの条件を満たしているため、ログに鮮度チェックは表示されていません。
クリーンアップ
このページで使用したリソースに対して 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
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前LOCATION
: クラスタのロケーションCLUSTER_PROJECT_ID
: クラスタ プロジェクト ID
クラスタでチェックベースのポリシー モニタリングを無効にする
クラスタでチェックベースのポリシーを使用して CV を無効にし、Binary Authorization 適用ポリシーを使用して適用を再度有効にするには、次のコマンドを実行します。
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
--location=LOCATION \
--project="CLUSTER_PROJECT_ID"
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前LOCATION
: クラスタのロケーションCLUSTER_PROJECT_ID
: クラスタ プロジェクト ID
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
は、古いフラグ --enable-binauthz
と同じです。
ポリシーを削除する
ポリシーを削除するには、次のコマンドを実行します。チェックベースのポリシー監査を無効にするために、チェックベースのプラットフォーム ポリシーを削除する必要はありません。
gcloud beta container binauthz policy delete POLICY_ID \
--platform=gke \
--project="POLICY_PROJECT_ID"
次のように置き換えます。
POLICY_ID
: ポリシーの IDPOLICY_PROJECT_ID
: ポリシー プロジェクト ID