ソフトウェア セキュリティの未来を形作るために、2021 年の State of DevOps アンケートに参加して、あなたの声を聞かせてください。

CLI を使用したポリシーの構成

このページでは、コマンドライン ツールを使用して Binary Authorization ポリシーを構成する手順について説明します。このタスクは、Google Cloud ConsoleREST API を使用することによっても実行できます。この手順は Binary Authorization の設定の一部です。

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

始める前に

  1. Binary Authorization を有効にします
  2. クラスタを作成する
  3. 証明書を使用する場合は、ポリシーを構成する前に認証者を作成することをおすすめします。認証者の作成は、コマンドライン ツールまたは Cloud Console を使用して行えます。
  4. プロジェクト ID を Binary Authorization を有効にしたプロジェクトに設定します。

    PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    

ポリシーの YAML ファイルをエクスポートする

このセクションは、GKE、Anthos clusters on VMware、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、Anthos clusters on VMware、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 で列挙します。リソース ID の形式は、次のとおりです。

    projects/PROJECT_ID/attestors/ATTESTOR_NAME

    認証者の作成方法についての詳細は、認証者の作成をご覧ください。

除外イメージを管理する

このセクションは、GKE、Anthos clusters on VMware、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@* の形式にする必要があります(例: us-docker.pkg.dev/cloudrun/container/hello@*)。

イメージ名にタグを含めることはできません。タグを含むイメージ名を除外するイメージ名をフォーマットするには、* をワイルドカードとして使用します。

パス名にはダイジェストを指定できます。

システム ポリシー評価モード

このセクションは、GKE と Anthos clusters on VMware が該当します。

システム ポリシー評価モードは、Binary Authorization に構成するポリシーを評価する前に、システム ポリシーを評価させるポリシーの設定です。Google はシステム ポリシーを管理しており、そこで GKE が使用する Google 管理のシステム イメージのリストを除外します。システム ポリシーに記載されているイメージが、ポリシーの適用でブロックされることはありません。この設定を有効にしない場合は、除外イメージのリストをご自身で管理する必要があります。除外イメージを管理する方法をご覧ください。

システム ポリシーの内容は、次のコマンドで表示できます。

gcloud container binauthz policy export --project=DEPLOYER_PROJECT

DEPLOYER_PROJECT は、Binary Authorization が有効になっているプロジェクトに置き換えます。

システム ポリシー評価モードを有効にするには、次の行を policy.yaml ファイルに追加します。

globalPolicyEvaluationMode: ENABLE

システム ポリシー評価モードを無効にするには、以下を追加します。

globalPolicyEvaluationMode: DISABLE

特定のリージョンに関連付けられたシステム ポリシーは、次のようにエクスポートできます。

gcloud container binauthz policy export-system-policy \
  --location=REGION > /tmp/policy.yaml

REGION は、エクスポートするシステム ポリシーに関連付けられているリージョン(または「global」)に置き換えます。以下のような例が含まれます: asia-east1europe-west1us-central1

--location を省略するか、--location=global を指定した場合、このコマンドは、最後のリージョン グループ内のリージョンからシステム ポリシーを出力します。システム ポリシーへのほとんどの変更は追加であるため、出力には、現在すべてのリージョンで許可されているシステム イメージのセットが表示されます。

クラスタ固有のルールを設定する(省略可)

このセクションは、GKE と Anthos clusters on VMware が該当します。

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。ルールは、次の形式で設定します。

  • 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 で列挙します。リソース ID の形式は、次のとおりです。

    projects/PROJECT_ID/attestors/ATTESTOR_NAME

    認証者の作成方法についての詳細は、認証者の作成をご覧ください。

固有のルールを設定する(省略可)

メッシュ サービス ID、Kubernetes サービス アカウント、Kubernetes Namespace のいずれかをスコープとするルールを作成できます。

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 の名前空間。
    • 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 で列挙します。リソース 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 で、それぞれ次のように置き換えます。

    • NAMESPACE: Kubernetes の名前空間。
    • 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 で列挙します。リソース 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 で列挙します。リソース ID の形式は、次のとおりです。

    projects/PROJECT_ID/attestors/ATTESTOR_NAME

    認証者の作成方法についての詳細は、認証者の作成をご覧ください。

ポリシー YAML ファイルをインポートする

このセクションは、GKE、Anthos clusters on VMware、Cloud Run、Anthos Service Mesh に該当します。

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

gcloud container binauthz policy import /tmp/policy.yaml

次のステップ