SLSA チェックを使用する

このページでは、Binary Authorization の継続的検証(CV)の SLSA チェックの使用方法について説明します。このチェックでは、CV が有効な GKE クラスタで実行されている Pod のコンテナ イメージについて SLSA 準拠の来歴をチェックします。

このチェックを使用するには、SLSA 準拠の来歴を生成する Cloud Build でイメージをビルドする必要があります。

このガイドの例では、ソースコード リポジトリに Cloud Source Repositories、イメージ レジストリに Artifact Registry を使用し、イメージをビルドして来歴を生成します。

SLSA チェックがサポートする信頼できるビルダーは Cloud Build のみです。

費用

このガイドでは、次の Google Cloud サービスを使用します。

  • Artifact Registry
  • Binary Authorization。ただし、CV はプレビュー ステージの間は無料です。
  • Cloud Build
  • Cloud Source Repositories
  • GKE

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。

始める前に

  1. Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud CLI をインストールします。

  3. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  4. gcloud CLI を初期化するには、次のコマンドを実行します。

    gcloud init
  5. Google Cloud プロジェクトを作成または選択します

    プロジェクトの選択または作成に必要なロール

    • プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトであれば、どのプロジェクトでも選択できます。
    • プロジェクトを作成する: プロジェクトを作成するには、resourcemanager.projects.create 権限を含むプロジェクト作成者ロール(roles/resourcemanager.projectCreator)が必要です。詳しくは、ロールを付与する方法をご覧ください。
    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、 Google Cloud プロジェクトの名前に置き換えます。

  6. Google Cloud プロジェクトに対して課金が有効になっていることを確認します

  7. Artifact Registry、Binary Authorization、Cloud Build、GKE、Cloud Source Repositories API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください。

    gcloud services enable artifactregistry.googleapis.com binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com sourcerepo.googleapis.com
  8. Google Cloud CLI をインストールします。

  9. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  10. gcloud CLI を初期化するには、次のコマンドを実行します。

    gcloud init
  11. Google Cloud プロジェクトを作成または選択します

    プロジェクトの選択または作成に必要なロール

    • プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトであれば、どのプロジェクトでも選択できます。
    • プロジェクトを作成する: プロジェクトを作成するには、resourcemanager.projects.create 権限を含むプロジェクト作成者ロール(roles/resourcemanager.projectCreator)が必要です。詳しくは、ロールを付与する方法をご覧ください。
    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、 Google Cloud プロジェクトの名前に置き換えます。

  12. Google Cloud プロジェクトに対して課金が有効になっていることを確認します

  13. Artifact Registry、Binary Authorization、Cloud Build、GKE、Cloud Source Repositories API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください。

    gcloud services enable artifactregistry.googleapis.com binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com sourcerepo.googleapis.com
  14. gcloud CLI が最新バージョンであることを確認します。
  15. kubectl コマンドライン ツールをインストールします
  16. Binary Authorization ポリシーと GKE クラスタが別々のプロジェクトにある場合は、両方のプロジェクトで Binary Authorization が有効になっていることを確認します。

必要なロール

このセクションでは、このチェックに必要なロールの設定方法について説明します。

概要

このガイドに記載されているプロダクトをすべて同じプロジェクトで実行する場合、権限を設定する必要はありません。Binary Authorization を有効にすると、ロールが正しく構成されます。複数のプロジェクトでプロダクトを実行する場合は、このセクションの説明に従ってロールを設定する必要があります。

各プロジェクトの Binary Authorization サービス エージェントに CV の SLSA チェックの評価に必要な権限を付与するには、各プロジェクトの Binary Authorization サービス エージェントに次の IAM ロールを付与するよう管理者に依頼します。

  • クラスタ プロジェクトの Compute Engine サービス アカウントに対する Artifact Registry 読み取りroles/artifactregistry.reader
  • クラスタ プロジェクトがポリシー プロジェクトと異なる場合: ポリシー プロジェクトにアクセスするために、クラスタ プロジェクトの Binary Authorization サービス エージェントに対して Binary Authorization ポリシー評価者 roles/binaryauthorization.policyEvaluator)ロールが必要です。
  • 証明書プロジェクトがポリシー プロジェクトと異なる場合: 証明書プロジェクトにアクセスするため、ポリシー プロジェクトの Binary Authorization サービス エージェントに Container Analysis のオカレンスの閲覧者 roles/containeranalysis.occurrences.viewer)ロールが必要です。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

管理者は、カスタムロールや他の事前定義ロールを使用して、各プロジェクトの Binary Authorization サービス エージェントに必要な権限を割り当てることもできます。

gcloud CLI を使用してロールを付与する

各プロジェクトのサービス アカウントにこのチェックの評価に必要な権限を付与するには、各プロジェクトのサービス アカウントに次の IAM ロールを付与します。

  1. クラスタを実行するプロジェクトがポリシーを含むプロジェクトと異なる場合は、クラスタ プロジェクトの Binary Authorization サービス エージェントに、ポリシー プロジェクトのポリシーへのアクセスを許可する必要があります。

    1. クラスタ プロジェクトの Binary Authorization サービス エージェントを取得します。

      PROJECT_NUMBER=$(gcloud projects list \
        --filter="projectId:CLUSTER_PROJECT_ID" \
        --format="value(PROJECT_NUMBER)")
      CLUSTER_SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
      

      CLUSTER_PROJECT_ID は、クラスタのプロジェクト ID に置き換えます。

    2. CV にクラスタのポリシーの評価を許可します。

      gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \
          --member="serviceAccount:$CLUSTER_SERVICE_ACCOUNT" \
          --role='roles/binaryauthorization.policyEvaluator'
      

      POLICY_PROJECT_ID は、ポリシーを含むプロジェクトの ID に置き換えます。

  2. ポリシー プロジェクトのサービス エージェントに証明書へのアクセスを許可します。

    1. ポリシー プロジェクトに関連付けられた Binary Authorization サービス エージェントを取得します。

      PROJECT_NUMBER=$(gcloud projects list \
        --filter="projectId:POLICY_PROJECT_ID" \
        --format="value(PROJECT_NUMBER)")
      POLICY_PROJECT_SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
      

      POLICY_PROJECT_ID は、ポリシーを含むプロジェクトの ID に置き換えます。

    2. ロールを付与します。

      gcloud projects add-iam-policy-binding ATTESTATION_PROJECT_ID \
          --member="serviceAccount:$POLICY_PROJECT_SERVICE_ACCOUNT" \
          --role='roles/containeranalysis.occurrences.viewer'
      

      ATTESTATION_PROJECT_ID は、証明書を含むプロジェクトの ID に置き換えます。

  3. デフォルトの Compute Engine サービス アカウントに、リポジトリからイメージを pull することを許可します。

    1. クラスタ プロジェクトに関連付けられた Compute Engine サービス アカウントを取得します。

      PROJECT_NUMBER=$(gcloud projects list \
        --filter="projectId:CLUSTER_PROJECT_ID" \
        --format="value(PROJECT_NUMBER)")
      COMPUTE_ENGINE_SERVICE_ACCOUNT