このページでは、REST API を使用して Binary Authorization ポリシーを構成する方法について説明します。このタスクは、Google Cloud CLI または Google Cloud コンソール でも実行できます。この手順は Binary Authorization の設定の一部です。
概要
ポリシーとは、コンテナ イメージのデプロイを規定する一連のルールです。
REST API を使用してポリシーを構成する場合、サービスと gcloud
のやり取りで使用される YAML 構造と同じ構造の JSON 形式で値を入力します。詳細については、ポリシー YAML リファレンスをご覧ください。
ポリシーを構成するには、次のことを行う必要があります。
- ポリシー JSON ファイルをエクスポートする
- 除外イメージを追加する(省略可)
- デフォルト ルールを設定する
- クラスタ固有のルールを追加する(省略可)
- ポリシー JSON ファイルをインポートする
実際のほとんどのポリシーでは、コンテナ イメージをデプロイする準備ができていることを必要なすべての認証者が確認しているかどうかチェックします。その場合は、ポリシーの構成時に認証者を作成する必要があります。
デフォルト プロジェクトを設定する
デフォルトの Google Cloud プロジェクトを設定します(まだ行っていない場合)。
PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}
PROJECT_ID はプロジェクトの ID です。
ポリシーをエクスポートする
このセクションの内容は、GKE、Distributed Cloud、Cloud Run、Cloud Service Mesh を対象としています。
ローカル システムの JSON ファイルにポリシーをエクスポートします。
curl \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: ${PROJECT_ID}" \ "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy" \ -o "/tmp/policy.json"
デフォルトでは、このファイルの内容は次のようになっています。
{ "name": "projects/PROJECT_ID/policy", "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_ALLOW", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } }
除外イメージを管理する
このセクションの内容は、GKE、Distributed Cloud、Cloud Run、Cloud Service Mesh を対象としています。
除外イメージは、ポリシールールの適用が免除されるコンテナ イメージです。Binary Authorization では、除外イメージのデプロイが常に許可されます。
除外イメージは、admissionWhitelistPatterns
にイメージのレジストリのパスを記述することで指定します。このパスは、Container Registry などのイメージ レジストリを参照します。システム ポリシー評価モードで除外されたイメージの後で、Enforcer が admissionWhitelistPatterns
の除外イメージを処理します。
除外イメージを追加するには、ポリシー JSON ファイル内の admissionWhitelistPatterns
リストに namePattern
ノードを追加します。
{ "name": "projects/PROJECT_ID/policy", "admissionWhitelistPatterns": [ { "namePattern": "MATCHING_PATTERN" } ], ... }
MATCHING_PATTERN は、レジストリ内で完全に一致する単一イメージへのパスを表します。ワイルドカード記号(*
、**
)を使用した場合は、パターンに一致する任意のイメージへのパスになります。
Cloud Run
このセクションは Cloud Run に該当する内容です。
タグを含むイメージ名を直接指定することはできません。たとえば、IMAGE_PATH
:latest は指定できません。
タグを含むイメージ名を指定する場合は、次のようにワイルドカードを使用してイメージ名を指定する必要があります。
*
: 単一イメージのすべてのバージョン。例:us-docker.pkg.dev/myproject/container/hello@*
**
: プロジェクト内のすべてのイメージ。例:us-docker.pkg.dev/myproject/**
パス名を使用して IMAGE_PATH
@DIGEST
の形式でダイジェストを指定できます。
システム ポリシー評価モード
このセクションの内容は、GKE と Distributed Cloud を対象としています。
システム ポリシー評価モードは、構成するポリシーを評価する前に、Binary Authorization によってシステム ポリシーを評価するポリシーの設定です。Google はシステム ポリシーを管理しており、そこで GKE が使用する Google 管理のシステム イメージのリストを除外します。システム ポリシーに記述されているイメージが、ポリシーの適用でブロックされることはありません。この設定を有効にしない場合は、除外イメージのリストをご自身で管理する必要があります。除外イメージを管理する方法をご覧ください。
システム ポリシーの内容を表示するには、次のコマンドを使用します。
gcloud alpha container binauthz policy export-system-policy
システム ポリシー評価モードを有効にするには、次の最上位ノードをポリシー JSON ファイルに追加します。
"globalPolicyEvaluationMode": "ENABLE"
システム ポリシー評価モードを無効にするには、以下を追加します。
"globalPolicyEvaluationMode": "DISABLE"
特定のリージョンに関連付けられたシステム ポリシーは、次のようにエクスポートできます。
gcloud alpha container binauthz policy export-system-policy \
--location=REGION > /tmp/policy.yaml
REGION は、エクスポートするシステム ポリシーに関連付けられているリージョン(または「global」)に置き換えます。例: asia-east1
、europe-west1
、us-central1
--location
を省略するか、--location=global
を指定した場合、このコマンドは、最後のリージョン グループ内のリージョンからシステム ポリシーを出力して更新を受け取ります。システム ポリシーへのほとんどの変更は追加であるため、出力には、現在すべてのリージョンで許可されているシステム イメージのセットが表示されます。
デフォルト ルールを設定する
このセクションの内容は、GKE、Distributed Cloud、Cloud Run、Cloud Service Mesh を対象としています。
ルールはポリシーの一部として、コンテナ イメージをデプロイする際の制約を定義します。すべての承諾リクエストには GKE クラスタが関連付けられています。リクエストがクラスタ固有のルールに一致しない場合、デフォルト ルールが使用されます。
デフォルト ルールは、ポリシーの defaultAdmissionRule
ノードで定義されます。このルールの各部分の詳細については、ポリシー YAML リファレンスのADMISSION_RULE をご覧ください。デフォルト ルールの例については、サンプル ポリシーをご覧ください。
デフォルト ルールを設定するには、必要に応じてポリシー JSON ファイルの defaultAdmissionRule
ノードを編集します。
"defaultAdmissionRule": { "evaluationMode": "EVAL_MODE", "enforcementMode": "ENFORCEMENT_MODE" requireAttestationsBy: [ ATTESTOR, ... ] }
ここで
- EVAL_MODE は、Binary Authorization がコンテナ イメージのデプロイを許可する前に評価する制約のタイプを指定します。
- ENFORCEMENT_MODE は、コンテナ イメージがルールで定義された制約を遵守していない場合に実行されるアクションを指定します。
- ATTESTOR は、デプロイする前にコンテナ イメージに署名する必要がある認証者を指定します(必要な場合)。認証者の完全修飾パスを
projects/PROJECT_ID/attestors/ATTESTOR_NAME
の形式で指定します。
必要なすべての認証者がコンテナ イメージに署名しているかどうかをルールで確認するには、この手順を行う前に認証者を作成する必要があります。
クラスタ固有のルールを設定する(省略可)
このセクションの内容は、GKE と Distributed Cloud を対象としています。
1 つのクラスタには、1 つ以上のクラスタ固有のルールを設定できます。このタイプのルールは、指定した GKE クラスタにのみ適用されます。クラスタに独自のルールがない場合は、デフォルトのルールが使用されます。クラスタ固有のルールはポリシーのオプション部分です。
クラスタ固有のルールは、ポリシー JSON ファイルの clusterAdmissionRules
ノードで定義されます。このルールの各部分の詳細については、ポリシー YAML リファレンスのADMISSION_RULE をご覧ください。例については、サンプル ポリシーのクラスタ固有のルールを使用するをご覧ください。
クラスタ固有のルールを追加するには:
ポリシー JSON ファイルで、clusterAdmissionRules
ノードを追加します。
"clusterAdmissionRules": { "us-central1-a.test-cluster": { "evaluationMode": "REQUIRE_ATTESTATION", "requireAttestationsBy": [ "ATTESTOR", ... ], "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } },
CLUSTER_SPECIFIER は、ルールが適用されるクラスタのリソース ID です。
- GKE、GKE 接続クラスタと GKE on AWS の場合、形式は
CLUSTER_LOCATION.CLUSTER_NAME
です(例:us-central1-a.test-cluster
)。 - Google Distributed Cloud と Google Distributed Cloud の場合、形式は
FLEET_MEMBERSHIP_LOCATION.FLEET_MEMBERSHIP_ID
です(例:global.test-membership
)。
他のプロパティについては、このガイドで前述したデフォルト ルールを設定するをご覧ください。クラスタ固有のルールの例については、サンプル ポリシーをご覧ください。
必要なすべての認証者がコンテナ イメージに署名しているかどうかをルールで確認するには、この手順を行う前に認証者を作成する必要があります。
ポリシー JSON ファイルをインポートする
このセクションの内容は、GKE、Distributed Cloud、Cloud Run、Cloud Service Mesh を対象としています。
次のコマンドを入力して、ポリシー JSON ファイルを Binary Authorization に再度インポートします。
curl -X PUT \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: ${PROJECT_ID}" \ --data-binary @/tmp/policy.json \ "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"