gcloud CLI を使用してポリシーを構成する

このページでは、Google Cloud CLI を使用して Binary Authorization ポリシーを構成する手順について説明します。このタスクは、Google Cloud Console または REST API でも行うことができます。この手順は Binary Authorization の設定の一部です。

コマンドライン ツールを使用してポリシーを構成するには、既存のポリシーを YAML ファイルとしてエクスポートします。このガイドで後述するように、ファイルを変更した後、ファイルをインポートしてポリシーを更新できます。ポリシー YAML 形式の詳細については、ポリシー YAML リファレンスをご覧ください。

始める前に

  1. Binary Authorization を有効にします
  2. クラスタを作成します
  3. 証明書を使用する場合は、ポリシーを構成する前に認証者を作成することをおすすめします。認証者の作成は、コマンドライン ツールまたは Google Cloud コンソールで行います。
  4. プロジェクト 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_MODEREQUIRE_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-east1europe-west1us-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_MODEREQUIRE_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_MODEREQUIRE_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_MODEREQUIRE_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_MODEREQUIRE_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

次のステップ