このページでは、ポリシー評価サービスの Google Cloud CLI コマンドを使用して、イメージまたは Kubernetes リソースが継続的検証チェックベースのプラットフォーム ポリシーに準拠しているかどうかを迅速に評価する方法について説明します。
概要
ポリシー評価サービスは、継続的検証(CV)チェックベースのプラットフォーム ポリシーで使用できる Binary Authorization の機能です。ポリシー評価サービスは、指定したコンテナ イメージが CV プラットフォーム ポリシーに準拠しているかどうかをオンデマンドで評価します。ポリシー評価サービスは、gcloud CLI コマンドと projects.platforms.gke.policies.evaluate メソッドで使用できます。
CV は、少なくとも 24 時間に 1 回、ポリシー違反の有無をチェックします。このため、CV が有効になった後または Kubernetes リソースがデプロイされてから CV イベントが Logging に表示されるまでに最長で 24 時間ほどかかることがあります。また、CV でポリシー違反が検出されるとログエントリが生成されます。Kubernetes リソースがポリシーを遵守している場合は、ログエントリは生成されません。
ポリシー評価サービスは、イメージがポリシーに準拠しているかどうか、またはイメージがポリシーに違反しているかどうかを示す判定結果を出力します。
ポリシー評価サービスを使用すると、イメージがポリシーに準拠しているかどうかをすばやく判断できます。
このサービスを使用する場合は、イメージ URL を直接指定するか、Kubernetes リソース内で指定します。また、GKE CV チェックベースのポリシーの名前も指定します。
ポリシー評価サービス サービスを使用することで、CV を使用する前にポリシーを開発し、準拠していない Kubernetes リソースをデバッグできます。
この機能は、GKE CV チェックベースのポリシーのみをサポートしています。
イメージにはイメージ ダイジェストを IMAGE_URL@IMAGE_DIGEST
の形式で指定する必要があります。ただし、次の場合は除きます。
- 信頼できるディレクトリのチェック: 指定したディレクトリにイメージがある場合、チェックに合格します。
- イメージ許可リストの除外: 他のすべてのチェックでは
IMAGE_URL@IMAGE_DIGEST
形式のイメージ ダイジェストが必要です。
始める前に
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
必要なロール
ポリシー評価サービスを使用するために必要な権限を取得するには、ポリシー プロジェクトに対するポリシー評価者(roles/binaryauthorization.policyEvaluator
)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
ポリシーで特定のチェックが使用されている場合は、次のチェック固有の必須ロールを付与するよう管理者に依頼してください。
チェックベースのプラットフォーム ポリシーを評価する
ポリシー評価サービスは、単一のイメージ URL か、JSON 形式または YAML 形式の Kubernetes リソースで指定されたイメージを評価します。
Kubernetes リソースを使用してチェックベースのプラットフォーム ポリシーを評価する
gcloud CLI で、Kubernetes リソースを使用してポリシーを評価するには、次のコマンドを実行します。
後述のコマンドデータを使用する前に、次のように置き換えます。
POLICY_ID
: プラットフォーム ポリシーの ID。ポリシーが別のプロジェクトにある場合、完全なリソース名projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
を使用できます。POD_SPECIFICATION_PATH
: Pod 仕様のパス。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --resource=POD_SPECIFICATION_PATH
Windows(PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --resource=POD_SPECIFICATION_PATH
Windows(cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --resource=POD_SPECIFICATION_PATH
プラットフォームを指定するポリシー(gke
に設定する必要があります)を評価するには、次のコマンドを実行します。
後述のコマンドデータを使用する前に、次のように置き換えます。
POLICY_ID
: プラットフォーム ポリシーの ID。ポリシーが別のプロジェクトにある場合、完全なリソース名projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
を使用できます。POD_SPECIFICATION_PATH
: Pod 仕様のパス。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --platform=gke \ --resource=POD_SPECIFICATION_PATH
Windows(PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --platform=gke ` --resource=POD_SPECIFICATION_PATH
Windows(cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --platform=gke ^ --resource=POD_SPECIFICATION_PATH
イメージの URL を使用してチェックベースのプラットフォーム ポリシーを評価する
イメージの URL を使用してポリシーを評価するには、次のコマンドを実行します。
後述のコマンドデータを使用する前に、次のように置き換えます。
POLICY_ID
: プラットフォーム ポリシーの ID。ポリシーが別のプロジェクトにある場合、完全なリソース名projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
を使用できます。IMAGE_URL
: Pod 仕様のパス。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --image=IMAGE_URL
Windows(PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --image=IMAGE_URL
Windows(cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --image=IMAGE_URL
--image
フラグを使用すると、Namespace とサービス アカウントは暗黙的に空とみなされます。評価するポリシーが kubernetesNamespace
または kubernetesServiceAccount
をスコープとするチェックセットを使用している場合、返される結果は正確でない可能性があります。
コマンド出力を確認する
コマンド出力には、Pod の適合性状態を示す最上位の判定結果が含まれます。返される準拠状態は次のとおりです。
CONFORMANT
: Kubernetes リソースがプラットフォーム ポリシーに準拠している。NON_CONFORMANT
: Kubernetes リソースがプラットフォーム ポリシーに準拠していない。ERROR
: 評価がエラーで終了した。
レスポンスで返される結果には、Kubernetes リソースに含まれている各イメージの準拠状態に関する詳細情報も含まれています。
ImageResults
ブロックには、人が読める形式の explanation
フィールドが含まれています。このフィールドには、イメージが許可または禁止された理由が示されます。
Pod 仕様がポリシーを遵守していない場合や評価が失敗した場合、スクリプトを簡単に作成できるように、このコマンドはゼロ以外の終了コードを返します。
次の出力例は 2 つのケースを示しています。最初のケースでは、Kubernetes リソースがポリシーに準拠しています。2 番目のケースでは、リソースがポリシーに準拠していません。
準拠している場合の判定結果
このセクションでは、Pod がプラットフォーム ポリシーに準拠している場合のポリシー評価サービス チェックの出力について説明します。
results:
- imageResults:
- checkSetResult:
checkResults:
results:
- displayName: My trusted directory check
evaluationResult:
verdict: CONFORMANT
explanation: Image is in a trusted directory
type: TrustedDirectoryCheck
displayName: Default check set
scope: {}
imageUri: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
verdict: CONFORMANT
kubernetesNamespace: default
kubernetesServiceAccount: default
podName: my-pod
verdict: CONFORMANT
verdict: CONFORMANT
出力では、次のような評価に対して CONFORMANT
の判定結果が返されます。
- Check: イメージが個々のチェック(この場合は信頼できるディレクトリ チェック)に準拠しています。
- CheckSet: イメージは CheckSet 内の各チェックに準拠しています。
- Policy: イメージはポリシーに準拠しています。
イメージがポリシーに準拠しているため、終了コード 0 が返されます。
準拠していない場合の判定結果
このセクションでは、Pod がプラットフォーム ポリシーに準拠していない場合のポリシー評価サービス チェックの出力について説明します。
results:
- imageResults:
- checkSetResult:
checkResults:
results:
- displayName: My trusted directory check
evaluationResult:
verdict: NON_CONFORMANT
explanation: Image isn't in a trusted directory
type: TrustedDirectoryCheck
displayName: Default check set
scope: {}
imageUri: us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0
verdict: NON_CONFORMANT
kubernetesNamespace: default
kubernetesServiceAccount: default
podName: my-pod
verdict: NON_CONFORMANT
verdict: NON_CONFORMANT
出力では、イメージが個々のチェック(この場合は信頼できるディレクトリ チェック、すべてのチェックのセット)に準拠していないため、最上位の判定結果は NON_CONFORMANT
になり、ゼロ以外の終了コードが返されます
ポリシー評価サービスをテストする
このセクションでは、ポリシー評価サービスのテスト方法について説明します。信頼できるディレクトリ チェックを含むチェックベースのプラットフォーム ポリシーを作成します。最初のテストでは、ポリシーに準拠する Pod 仕様を評価します。2 番目のテストでは、ポリシーに準拠していない Pod 仕様を評価します。
信頼できるディレクトリ チェックを含むポリシーを作成するには、次のコマンドを実行します。
プラットフォーム ポリシー ファイルを作成します。
cat << EOF > my-policy.yaml gkePolicy: checkSets: - checks: - displayName: "My trusted directory check" trustedDirectoryCheck: trustedDirPatterns: - "us-docker.pkg.dev/google-samples/containers/gke/" displayName: "My default check set" EOF
ポリシーを作成します。
後述のコマンドデータを使用する前に、次のように置き換えます。
- POLICY_ID: 選択したプラットフォーム ポリシー ID。ポリシーが別のプロジェクトにある場合、完全なリソース名
projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
を使用できます。 - POLICY_PATH: ポリシー ファイルのパス。
- POLICY_PROJECT_ID: ポリシー プロジェクト ID。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=POLICY_PATH \ --project=POLICY_PROJECT_ID
Windows(PowerShell)
gcloud beta container binauthz policy create POLICY_ID ` --platform=gke ` --policy-file=POLICY_PATH ` --project=POLICY_PROJECT_ID
Windows(cmd.exe)
gcloud beta container binauthz policy create POLICY_ID ^ --platform=gke ^ --policy-file=POLICY_PATH ^ --project=POLICY_PROJECT_ID
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=my-policy.yaml
- POLICY_ID: 選択したプラットフォーム ポリシー ID。ポリシーが別のプロジェクトにある場合、完全なリソース名
準拠するイメージを評価する
このセクションでは、このガイドの前半で作成したポリシーに準拠する Pod 仕様を評価します。Pod 仕様は、信頼できるディレクトリ チェックで trustedDirPatterns
に指定されたディレクトリのイメージを参照しているため、評価では Pod 仕様が CONFORMANT
であることを示す判定が生成されます。
Pod 仕様を作成します。
cat << EOF > my-conforming-pod.json { "apiVersion": "v1", "kind": "Pod", "metadata": { "name": "" }, "spec": { "containers": [ { "image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0" } ] } } EOF
次のコマンドを実行して、ポリシー評価サービスを使用します。
後述のコマンドデータを使用する前に、次のように置き換えます。
POLICY_ID
: プラットフォーム ポリシーの ID。ポリシーが別のプロジェクトにある場合、完全なリソース名projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
を使用できます。my-conforming-pod.json
: Pod 仕様のパス。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --image=my-conforming-pod.json
Windows(PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --image=my-conforming-pod.json
Windows(cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --image=my-conforming-pod.json
準拠していないイメージを評価する
このセクションでは、このガイドの前半で作成したポリシーに準拠していない Pod 仕様を評価します。Pod 仕様は、信頼できるディレクトリ チェックの trustedDirPatterns
で指定されたディレクトリにないイメージを参照しているため、評価では Pod 仕様が NON_CONFORMANT
状態であることを示す判定結果が生成されます。
準拠していないイメージを評価するには、次のコマンドを実行します。
Pod 仕様を作成します。
cat << EOF > my-non-conforming-pod.json { "apiVersion": "v1", "kind": "Pod", "metadata": { "name": "" }, "spec": { "containers": [ { "image": "us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0" } ] } } EOF
次のコマンドを実行して、ポリシー評価サービスを使用します。
後述のコマンドデータを使用する前に、次のように置き換えます。
POLICY_ID
: プラットフォーム ポリシーの ID。ポリシーが別のプロジェクトにある場合、完全なリソース名projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
を使用できます。my-non-conforming-pod.json
: Pod 仕様のパス。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --image=my-non-conforming-pod.json
Windows(PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --image=my-non-conforming-pod.json
Windows(cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --image=my-non-conforming-pod.json