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、GKE クラスタ、Cloud Run、Anthos Service Mesh に該当する内容です。

ポリシーを更新するには、まず、次のようにローカルの YAML ファイルにポリシーをエクスポートします。

gcloud container binauthz policy export > /tmp/policy.yaml

デフォルトでは、ファイルの内容は次のようになっています。

admissionWhitelistPatterns:
- namePattern: gcr.io/google_containers/*
- namePattern: gcr.io/google-containers/*
- namePattern: k8s.gcr.io/**
- namePattern: gke.gcr.io/**
- namePattern: gcr.io/stackdriver-agents/*
globalPolicyEvaluationMode: ENABLE
defaultAdmissionRule:
  evaluationMode: EVALUATION_MODE
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
name: projects/PROJECT_ID/policy

このガイドで後述するように、ポリシーを変更するには、ファイルを編集してセクションを追加、更新します。ファイルを保存した後、ポリシーをインポートできます。

デフォルト ルールを設定する

このセクションは、GKE、GKE クラスタ、Cloud Run、Anthos 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、GKE クラスタ、Cloud Run、Anthos 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 と GKE クラスタに該当する内容です。

システム ポリシー評価モードは、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 と GKE クラスタに該当する内容です。

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)。
    • GKE on Bare Metal と GKE on VMware の場合、形式は、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 名前空間のいずれかをスコープとするルールを作成できます。

Anthos Service Mesh サービス ID のルールを設定する

Anthos 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: このルールのスコープとなる Anthos 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、GKE クラスタ、Cloud Run、Anthos Service Mesh に該当する内容です。

次のコマンドを入力して、ポリシー YAML ファイルを Binary Authorization に再度インポートします。

gcloud container binauthz policy import /tmp/policy.yaml

次のステップ