このページでは、Google Cloud CLI を使用して Binary Authorization ポリシーを構成する手順について説明します。このタスクは、Google Cloud Console または REST API でも行うことができます。この手順は Binary Authorization の設定の一部です。
コマンドライン ツールを使用してポリシーを構成するには、既存のポリシーを YAML ファイルとしてエクスポートします。このガイドで後述するように、ファイルを変更した後、ファイルをインポートしてポリシーを更新できます。ポリシー YAML 形式の詳細については、ポリシー YAML リファレンスをご覧ください。
始める前に
- Binary Authorization を有効にします。
- クラスタを作成します。
- 証明書を使用する場合は、ポリシーを構成する前に認証者を作成することをおすすめします。認証者の作成は、コマンドライン ツールまたは Google Cloud コンソールで行います。
プロジェクト ID を Binary Authorization を有効にしたプロジェクトに設定します。
PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}
ポリシーの YAML ファイルをエクスポートする
このセクションの内容は、GKE、Distributed Cloud、Cloud Run、Cloud Service Mesh を対象としています。
ポリシーを更新するには、まず、次のようにローカル YAML ファイルにポリシーをエクスポートします。
gcloud container binauthz policy export > /tmp/policy.yaml
デフォルトでは、ファイルの内容は次のようになっています。
defaultAdmissionRule: enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG evaluationMode: ALWAYS_ALLOW globalPolicyEvaluationMode: ENABLE name: projects/PROJECT_ID/policy
このガイドで後述するように、ポリシーを変更するには、ファイルを編集してセクションを追加、更新します。ファイルを保存した後、ポリシーをインポートできます。
除外イメージを許可リストに追加するには、ポリシー ファイルに次の行を追加します。
admissionWhitelistPatterns: - namePattern: EXEMPT_IMAGE_PATH
EXEMPT_IMAGE_PATH
は、除外するイメージのパスに置き換えます。除外するイメージを追加するには、- namePattern
エントリを追加します。admissionWhitelistPatterns
の詳細をご確認ください。
デフォルト ルールを設定する
このセクションの内容は、GKE、Distributed Cloud、Cloud Run、Cloud Service Mesh を対象としています。
ルールはポリシーの一部で、コンテナ イメージをデプロイする際の制約を定義します。デフォルト ルールは、独自のクラスタ固有のルールがなく、すべての対象イメージに適用される制約を定義します。ポリシーにはデフォルト ルールが必須です。
デフォルト ルールは、ポリシー YAML ファイルの defaultAdmissionRule
ノードに定義します。このルールの各部分の詳細については、ポリシー YAML リファレンスのADMISSION_RULE をご覧ください。デフォルト ルールの例については、サンプル ポリシーをご覧ください。
デフォルト ルールを設定するには、policy.yaml
ファイルで defaultAdmissionRule
ノードを編集します。
defaultAdmissionRule: evaluationMode: EVALUATION_MODE enforcementMode: ENFORCEMENT_MODE requireAttestationsBy: - ATTESTOR - ...
次のように置き換えます。
EVALUATION_MODE: 評価モードでは、デプロイ時に Binary Authorization 施行者が適用する制約のタイプを指定します。EVALUATION_MODE は、次のいずれかのオプションに置き換えます。
ALWAYS_ALLOW
: すべてのイメージのデプロイを許可します。ALWAYS_DENY
: すべてのイメージのデプロイを禁止します。REQUIRE_ATTESTATION
: このルールに追加するすべての認証者が検証できる証明書がイメージに含まれている場合、イメージのデプロイを許可します。施行者はデプロイ時に、このルールの ATTESTOR リストに追加した認証者を使用して証明書を確認します。認証者の作成方法については、認証者の作成をご覧ください。REQUIRE_ATTESTATION
を指定する場合は、少なくとも 1 人の認証者を含むrequireAttestationsBy
ブロックも追加する必要もあります。認証者の作成方法については、認証者の作成をご覧ください。
ENFORCEMENT_MODE: 強制適用モードでは、イメージがルールに違反している場合に施行者がどのように応答するかを指定します。ENFORCEMENT_MODE は、次のいずれかに置き換えます。
ENFORCED_BLOCK_AND_AUDIT_LOG
: ルールに違反するイメージをブロックし、違反に関する情報を Cloud Audit Logs にロギングします(デフォルト)。DRYRUN_AUDIT_LOG_ONLY
: すべてのイメージのデプロイを許可しますが、違反に関する情報を含む適用情報を Cloud Audit Logs に記録します。
ATTESTOR:
EVALUATION_MODE
をREQUIRE_ATTESTATION
に設定した場合は、requireAttesationsBy ブロックも追加する必要があります。ブロックでは、リソース ID を使用して 1 人以上の認証者を指定します。リソース ID の形式は次のとおりです。projects/PROJECT_ID/attestors/ATTESTOR_NAME
。認証者の作成方法については、認証者の作成をご覧ください。
除外イメージを管理する
このセクションの内容は、GKE、Distributed Cloud、Cloud Run、Cloud Service Mesh を対象としています。
除外イメージは、ポリシールールの対象外となるイメージです。Binary Authorization では、除外イメージのデプロイが常に許可されます。
除外イメージは、admissionWhitelistPatterns
にイメージのレジストリのパスを記述することで指定します。そのパスは、Container Registry または別のイメージ レジストリを参照するものです。デプロイ時に、Binary Authorization は、システム ポリシーで指定されたイメージに続いて、admissionWhitelistPatterns
で指定されたイメージのリストを除外します。
除外イメージを追加するには、policy.yaml
ファイルの admissionWhitelistPatterns
リストに namePattern
ノードを追加します。
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
システム ポリシー評価モードを有効にするには、次の行を policy.yaml
ファイルに追加します。
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 を対象としています。
1 つのクラスタには、1 つ以上のクラスタ固有のルールを設定できます。このタイプのルールは、特定の GKE クラスタにのみデプロイされるイメージに適用されます。クラスタ固有のルールはポリシーのオプション部分です。
クラスタ固有のルールは、ポリシー YAML ファイルの clusterAdmissionRules
ノードで定義されます。このルールの各部分の詳細については、ポリシー YAML リファレンスのADMISSION_RULE をご覧ください。例については、サンプル ポリシーのクラスタ固有のルールを使用するをご覧ください。
クラスタ固有のルールを追加するには:
policy.yaml
ファイルで、clusterAdmissionRules
ノードを追加します。
clusterAdmissionRules: CLUSTER_SPECIFIER: evaluationMode: EVALUATION_MODE enforcementMode: ENFORCEMENT_MODE requireAttestationsBy: - ATTESTOR - ...
次のように置き換えます。
CLUSTER_SPECIFIER: ルールが適用されるクラスタのリソース ID。ルールは次の形式にします。
GKE、GKE 接続クラスタと GKE on AWS の場合、形式は
CLUSTER_LOCATION.CLUSTER_NAME
です(例:us-central1-a.test-cluster
)。Google Distributed Cloud ソフトウェア(ベアメタルまたは VMware 上の GKE クラスタ)の場合、形式は
FLEET_MEMBERSHIP_LOCATION.FLEET_MEMBERSHIP_ID
です(例:global.test-membership
)。他のプロパティについては、このガイドで前述したデフォルト ルールを設定するをご覧ください。クラスタ固有のルールの例については、ポリシーの例をご覧ください。
EVALUATION_MODE: 評価モードでは、デプロイ時に Binary Authorization 施行者が適用する制約のタイプを指定します。EVALUATION_MODE は、次のいずれかのオプションに置き換えます。
ALWAYS_ALLOW
: すべてのイメージのデプロイを許可します。ALWAYS_DENY
: すべてのイメージのデプロイを禁止します。REQUIRE_ATTESTATION
: このルールに追加するすべての認証者が検証できる証明書がイメージに含まれている場合、イメージのデプロイを許可します。施行者はデプロイ時に、このルールの ATTESTOR リストに追加した認証者を使用して証明書を確認します。認証者の作成方法については、認証者の作成をご覧ください。REQUIRE_ATTESTATION
を指定する場合は、少なくとも 1 人の認証者を含むrequireAttestationsBy
ブロックも追加する必要もあります。認証者の作成方法については、認証者の作成をご覧ください。
ENFORCEMENT_MODE: 強制適用モードでは、イメージがルールに違反している場合に施行者がどのように応答するかを指定します。ENFORCEMENT_MODE は、次のいずれかに置き換えます。
ENFORCED_BLOCK_AND_AUDIT_LOG
: ルールに違反するイメージをブロックし、違反に関する情報を Cloud Audit Logs にロギングします(デフォルト)。DRYRUN_AUDIT_LOG_ONLY
: すべてのイメージのデプロイを許可しますが、違反に関する情報を含む適用情報を Cloud Audit Logs に記録します。
ATTESTOR:
EVALUATION_MODE
をREQUIRE_ATTESTATION
に設定した場合は、requireAttesationsBy ブロックも追加する必要があります。ブロックでは、リソース ID を使用して 1 人以上の認証者を指定します。リソース ID の形式は次のとおりです。projects/PROJECT_ID/attestors/ATTESTOR_NAME
。認証者の作成方法については、認証者の作成をご覧ください。
固有のルールを設定する(省略可)
メッシュ サービス ID、Kubernetes サービス アカウント、または Kubernetes 名前空間のいずれかをスコープとするルールを作成できます。
Cloud Service Mesh サービス ID のルールを設定する
Cloud Service Mesh サービス ID のルールを設定するには、policy.yaml
ファイルを編集して、次のように istioServiceIdentityAdmissionRules
ブロックを追加します。
defaultAdmissionRule:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: ALWAYS_DENY
globalPolicyEvaluationMode: ENABLE
istioServiceIdentityAdmissionRules:
SERVICE_IDENTITY_ID:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: ENFORCEMENT_MODE
requireAttestationsBy:
- <var>ATTESTOR</var>
- ...
name: projects/PROJECT_ID/policy
次のように置き換えます。
SERVICE_IDENTITY_ID: このルールのスコープとなる Cloud Service Mesh サービス ID。サービス ID の形式は PROJECT_ID.svc.id.goog/ns/NAMESPACE/sa/SERVICE_ACCOUNT です。サービス ID で、次のように置き換えます。
- PROJECT_ID: Kubernetes リソースを定義するプロジェクト ID。
- NAMESPACE: Kubernetes の Namespace。
- SERVICE_ACCOUNT: サービス アカウント。
EVALUATION_MODE: 評価モードでは、デプロイ時に Binary Authorization 施行者が適用する制約のタイプを指定します。EVALUATION_MODE は、次のいずれかのオプションに置き換えます。
ALWAYS_ALLOW
: すべてのイメージのデプロイを許可します。ALWAYS_DENY
: すべてのイメージのデプロイを禁止します。REQUIRE_ATTESTATION
: このルールに追加するすべての認証者が検証できる証明書がイメージに含まれている場合、イメージのデプロイを許可します。施行者はデプロイ時に、このルールの ATTESTOR リストに追加した認証者を使用して証明書を確認します。認証者の作成方法については、認証者の作成をご覧ください。REQUIRE_ATTESTATION
を指定する場合は、少なくとも 1 人の認証者を含むrequireAttestationsBy
ブロックも追加する必要もあります。認証者の作成方法については、認証者の作成をご覧ください。
ENFORCEMENT_MODE: 強制適用モードでは、イメージがルールに違反している場合に施行者がどのように応答するかを指定します。ENFORCEMENT_MODE は、次のいずれかに置き換えます。
ENFORCED_BLOCK_AND_AUDIT_LOG
: ルールに違反するイメージをブロックし、違反に関する情報を Cloud Audit Logs にロギングします(デフォルト)。DRYRUN_AUDIT_LOG_ONLY
: すべてのイメージのデプロイを許可しますが、違反に関する情報を含む適用情報を Cloud Audit Logs に記録します。
ATTESTOR:
EVALUATION_MODE
をREQUIRE_ATTESTATION
に設定した場合は、requireAttesationsBy ブロックも追加する必要があります。ブロックでは、リソース ID を使用して 1 人以上の認証者を指定します。リソース ID の形式は次のとおりです。projects/PROJECT_ID/attestors/ATTESTOR_NAME
。認証者の作成方法については、認証者の作成をご覧ください。
Kubernetes サービス アカウントのルールを設定する
Kubernetes サービス アカウントのルールを設定するには、policy.yaml
ファイルを編集して、次のように kubernetesServiceAccountAdmissionRules
ブロックを追加します。
defaultAdmissionRule:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: ALWAYS_DENY
globalPolicyEvaluationMode: ENABLE
kubernetesServiceAccountAdmissionRules:
KUBERNETES_SERVICE_ACCOUNT_ID:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: ENFORCEMENT_MODE
requireAttestationsBy:
- <var>ATTESTOR</var>
- ...
name: projects/PROJECT_ID/policy
次のように置き換えます。
KUBERNETES_SERVICE_ACCOUNT_ID: このルールのスコープとなる Kubernetes サービス アカウント。このサービス アカウント ID の形式は NAMESPACE:SERVICE_ACCOUNT です。サービス アカウント ID は、次のように置き換えます。
- NAMESPACE: Kubernetes の Namespace。
- SERVICE_ACCOUNT: サービス アカウント名。
EVALUATION_MODE: 評価モードでは、デプロイ時に Binary Authorization 施行者が適用する制約のタイプを指定します。EVALUATION_MODE は、次のいずれかのオプションに置き換えます。
ALWAYS_ALLOW
: すべてのイメージのデプロイを許可します。ALWAYS_DENY
: すべてのイメージのデプロイを禁止します。REQUIRE_ATTESTATION
: このルールに追加するすべての認証者が検証できる証明書がイメージに含まれている場合、イメージのデプロイを許可します。施行者はデプロイ時に、このルールの ATTESTOR リストに追加した認証者を使用して証明書を確認します。認証者の作成方法については、認証者の作成をご覧ください。REQUIRE_ATTESTATION
を指定する場合は、少なくとも 1 人の認証者を含むrequireAttestationsBy
ブロックも追加する必要もあります。認証者の作成方法については、認証者の作成をご覧ください。
ENFORCEMENT_MODE: 強制適用モードでは、イメージがルールに違反している場合に施行者がどのように応答するかを指定します。ENFORCEMENT_MODE は、次のいずれかに置き換えます。
ENFORCED_BLOCK_AND_AUDIT_LOG
: ルールに違反するイメージをブロックし、違反に関する情報を Cloud Audit Logs にロギングします(デフォルト)。DRYRUN_AUDIT_LOG_ONLY
: すべてのイメージのデプロイを許可しますが、違反に関する情報を含む適用情報を Cloud Audit Logs に記録します。
ATTESTOR:
EVALUATION_MODE
をREQUIRE_ATTESTATION
に設定した場合は、requireAttesationsBy ブロックも追加する必要があります。ブロックでは、リソース ID を使用して 1 人以上の認証者を指定します。リソース ID の形式は次のとおりです。projects/PROJECT_ID/attestors/ATTESTOR_NAME
。認証者の作成方法については、認証者の作成をご覧ください。
Kubernetes Namespace のルールを設定する
Kubernetes Namespace のルールを設定するには、policy.yaml
ファイルを編集して、次のように kubernetesNamespaceAdmissionRules
ブロックを追加します。
defaultAdmissionRule:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: ALWAYS_DENY
globalPolicyEvaluationMode: ENABLE
kubernetesNamespaceAdmissionRules:
KUBERNETES_NAMESPACE:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: EVALUATION_MODE
requireAttestationsBy:
- <var>ATTESTOR</var>
- ...
name: projects/PROJECT_ID/policy
次のように置き換えます。
KUBERNETES_NAMESPACE: このルールのスコープとなる Kubernetes Namespace。
EVALUATION_MODE: 評価モードでは、デプロイ時に Binary Authorization 施行者が適用する制約のタイプを指定します。EVALUATION_MODE は、次のいずれかのオプションに置き換えます。
ALWAYS_ALLOW
: すべてのイメージのデプロイを許可します。ALWAYS_DENY
: すべてのイメージのデプロイを禁止します。REQUIRE_ATTESTATION
: このルールに追加するすべての認証者が検証できる証明書がイメージに含まれている場合、イメージのデプロイを許可します。施行者はデプロイ時に、このルールの ATTESTOR リストに追加した認証者を使用して証明書を確認します。認証者の作成方法については、認証者の作成をご覧ください。REQUIRE_ATTESTATION
を指定する場合は、少なくとも 1 人の認証者を含むrequireAttestationsBy
ブロックも追加する必要もあります。認証者の作成方法については、認証者の作成をご覧ください。
ENFORCEMENT_MODE: 強制適用モードでは、イメージがルールに違反している場合に施行者がどのように応答するかを指定します。ENFORCEMENT_MODE は、次のいずれかに置き換えます。
ENFORCED_BLOCK_AND_AUDIT_LOG
: ルールに違反するイメージをブロックし、違反に関する情報を Cloud Audit Logs にロギングします(デフォルト)。DRYRUN_AUDIT_LOG_ONLY
: すべてのイメージのデプロイを許可しますが、違反に関する情報を含む適用情報を Cloud Audit Logs に記録します。
ATTESTOR:
EVALUATION_MODE
をREQUIRE_ATTESTATION
に設定した場合は、requireAttesationsBy ブロックも追加する必要があります。ブロックでは、リソース ID を使用して 1 人以上の認証者を指定します。リソース ID の形式は次のとおりです。projects/PROJECT_ID/attestors/ATTESTOR_NAME
。認証者の作成方法については、認証者の作成をご覧ください。
ポリシー YAML ファイルをインポートする
このセクションの内容は、GKE、Distributed Cloud、Cloud Run、Cloud Service Mesh を対象としています。
次のコマンドを入力して、ポリシー YAML ファイルを Binary Authorization に再度インポートします。
gcloud container binauthz policy import /tmp/policy.yaml
次のステップ
built-by-cloud-build
認証者を使用して、Cloud Build によってビルドされたイメージのみをデプロイする。- 証明書を使用する。
- GKE イメージをデプロイする。