Menggunakan pemeriksaan SLSA

Halaman ini menunjukkan cara menggunakan pemeriksaan SLSA Otorisasi Biner, yang memeriksa provenance image container yang mematuhi SLSA dan terkait dengan Pod yang berjalan di cluster Google Kubernetes Engine (GKE) tempat CV diaktifkan.

Untuk menggunakan pemeriksaan ini, Anda harus membuat image dengan Cloud Build, yang menghasilkan provenance yang sesuai dengan SLSA.

Contoh dalam panduan ini menggunakan Cloud Source Repositories untuk repositori kode sumber, Artifact Registry untuk registry image, serta Cloud Build untuk membangun image dan menghasilkan provenance.

Satu-satunya builder tepercaya yang didukung pemeriksaan SLSA adalah Cloud Build.

Biaya

Panduan ini menggunakan layanan Google Cloud berikut:

  • Artifact Registry
  • Otorisasi Biner, tetapi CV tersedia tanpa biaya selama tahap Pratinjau
  • Cloud Build
  • Cloud Source Repositories
  • GKE

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Menginstal Google Cloud CLI.
  3. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  4. Buat atau pilih project Google Cloud.

    • Membuat project Google Cloud:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk project Google Cloud yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  5. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  6. Enable the Artifact Registry, Binary Authorization, Cloud Build, GKE, Cloud Source Repositories APIs:

    gcloud services enable artifactregistry.googleapis.com binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com sourcerepo.googleapis.com
  7. Menginstal Google Cloud CLI.
  8. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  9. Buat atau pilih project Google Cloud.

    • Membuat project Google Cloud:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk project Google Cloud yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  10. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  11. Enable the Artifact Registry, Binary Authorization, Cloud Build, GKE, Cloud Source Repositories APIs:

    gcloud services enable artifactregistry.googleapis.com binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com sourcerepo.googleapis.com
  12. Pastikan gcloud CLI diupdate ke versi terbaru.
  13. Instal alat command line kubectl.
  14. Jika kebijakan Otorisasi Biner dan cluster GKE berada di project yang berbeda, pastikan Otorisasi Biner diaktifkan di kedua project.

Peran yang diperlukan

Bagian ini menampilkan cara menetapkan peran untuk pemeriksaan ini.

Ringkasan

Jika Anda menjalankan semua produk yang disebutkan dalam panduan ini di project yang sama, Anda tidak perlu menetapkan izin apa pun. Otorisasi Biner mengonfigurasi peran dengan benar saat Anda mengaktifkannya. Jika menjalankan produk di project yang berbeda, Anda harus menetapkan peran seperti yang dijelaskan di bagian ini.

Guna memastikan bahwa Agen Layanan Otorisasi Biner di setiap project memiliki izin yang diperlukan untuk mengevaluasi pemeriksaan SLSA CV, minta administrator Anda untuk memberikan peran IAM berikut kepada Agen Layanan Otorisasi Biner di setiap project:

  • Artifact Registry Reader (roles/artifactregistry.reader) di akun layanan Compute Engine project cluster
  • Jika project cluster Anda berbeda dengan project kebijakan: Binary Authorization Policy Evaluator (roles/binaryauthorization.policyEvaluator) pada project cluster Binary Authorization Service Agent, agar dapat mengakses project kebijakan
  • Jika project pengesahan Anda berbeda dengan project kebijakan Anda: Container Analysis Occurrences Viewer (roles/containeranalysis.occurrences.viewer) pada project kebijakan Binary Authorization Service Agent, agar dapat mengakses project pengesahan

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.

Administrator Anda mungkin juga dapat memberikan izin yang diperlukan kepada Agen Layanan Otorisasi Biner di setiap project melalui peran khusus atau peran standar lainnya.

Memberikan peran menggunakan gcloud CLI

Guna memastikan bahwa akun layanan di setiap project memiliki izin yang diperlukan untuk mengevaluasi pemeriksaan ini, berikan peran IAM berikut kepada akun layanan di setiap project:

  1. Jika project tempat Anda menjalankan cluster berbeda dengan project tempat kebijakan berada, Anda harus memberikan izin kepada agen layanan Otorisasi Biner project cluster agar dapat mengakses kebijakan dalam project kebijakan.

    1. Dapatkan agen layanan Otorisasi Biner project cluster:

      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"
      

      Ganti CLUSTER_PROJECT_ID dengan project ID cluster.

    2. Izinkan CV untuk mengevaluasi kebijakan di cluster:

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

      Ganti POLICY_PROJECT_ID dengan ID project yang berisi kebijakan Anda.

  2. Izinkan agen layanan project kebijakan untuk mengakses pengesahan:

    1. Dapatkan agen layanan Otorisasi Biner yang terkait dengan project kebijakan:

      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"
      

      Ganti POLICY_PROJECT_ID dengan ID project yang berisi kebijakan Anda.

    2. Berikan peran:

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

      Ganti ATTESTATION_PROJECT_ID dengan ID project yang berisi pengesahan Anda.

  3. Izinkan izin akun layanan Compute Engine default untuk mengambil image dari repositori:

    1. Dapatkan akun layanan Compute Engine yang terkait dengan project cluster:

      PROJECT_NUMBER=$(gcloud projects list \
        --filter="projectId:CLUSTER_PROJECT_ID" \
        --format="value(PROJECT_NUMBER)")
      COMPUTE_ENGINE_SERVICE_ACCOUNT="$PROJECT_NUMBER-compute@developer.gserviceaccount.com"
      

      Ganti CLUSTER_PROJECT_ID dengan ID project cluster yang berisi kebijakan Anda.

    2. Berikan peran:

      gcloud projects add-iam-policy-binding ARTIFACT_PROJECT_ID \
          --member="serviceAccount:$COMPUTE_ENGINE_SERVICE_ACCOUNT" \
          --role='roles/artifactregistry.reader'
      

      Ganti ARTIFACT_PROJECT_ID dengan ID project Artifact Registry yang menghosting image yang akan di-deploy.

Opsional: Membuat dan mengupload gambar contoh

Bagian ini disertakan untuk tujuan ilustrasi, untuk menunjukkan cara membuat gambar contoh sederhana dengan provenance yang mematuhi SLSA. Provenance digunakan nanti dalam panduan untuk mendemonstrasikan pemeriksaan tersebut. Pelajari provenance Cloud Build lebih lanjut.

Membuat repositori contoh

Untuk membuat repositori di Cloud Source Repositories, lakukan hal berikut:

  1. Buat repositori dan clone secara lokal:

    gcloud source repos create SOURCE_REPO_NAME \
        --project=SOURCE_REPO_PROJECT_ID && \
    gcloud source repos clone SOURCE_REPO_NAME \
        --project=SOURCE_REPO_PROJECT_ID && \
    cd SOURCE_REPO_NAME
    

    Ganti kode berikut:

    • SOURCE_REPO_NAME: nama repositori kode sumber Anda—misalnya: slsa-check-test-repo
    • SOURCE_REPO_PROJECT_ID: project ID repositori
  2. Untuk membuat file sumber, konfigurasi, dan build, lakukan hal berikut:

    1. Buat sumber gambar:

      cat > quickstart.sh <<EOF
      #!/bin/sh
      echo "Hello, world! The time is $(date)."
      sleep infinity
      EOF
      
    2. Setel agar file dapat dieksekusi:

      chmod +x quickstart.sh
      
    3. Buat file konfigurasi Dockerfile:

      cat > Dockerfile <<EOF
      FROM alpine
      COPY quickstart.sh /
      CMD ["/quickstart.sh"]
      EOF
      
    4. Buat file cloudbuild.yaml Cloud Build, yang mengirim image ke Artifact Registry:

      cat > cloudbuild.yaml <<EOF
      steps:
      - name: 'gcr.io/cloud-builders/docker'
        args: [ 'build', '-t', 'LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE', '.' ]
      options:
        requestedVerifyOption: VERIFIED
      images:
      - 'LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE'
      EOF
      

      Ganti kode berikut:

      • LOCATION: lokasi Artifact Registry—misalnya: us-west2, europe-central2, atau asia-east1
      • ARTIFACT_PROJECT_ID: ID project yang menyimpan artefak Artifact Registry
      • ARTIFACT_REPO_NAME: nama repositori Artifact Registry—misalnya: slsa-check-test-repo
      • DIRECTORY: direktori—misalnya: slsa-check
      • IMAGE: jalur ke gambar—misalnya: slsa-check-image
    5. Commit file ke Cloud Source Repositories:

      git add .
      git commit -a
      

Membuat dan mengupload gambar contoh

Untuk menyederhanakan penggunaan panduan ini, sebaiknya gunakan project yang sama untuk SOURCE_REPO_PROJECT_ID, dan ARTIFACT_PROJECT_ID. Jika menggunakan project yang berbeda, Anda mungkin perlu menyiapkan izin IAM tambahan. Pelajari kontrol akses Artifact Registry lebih lanjut. Untuk mempelajari Cloud Build lebih lanjut, lihat Ringkasan Cloud Build.

Untuk membuat repositori, lakukan langkah berikut:

  1. Buat repositori Artifact Registry:

    gcloud artifacts repositories create ARTIFACT_REPO_NAME \
        --project=ARTIFACT_PROJECT_ID \
        --repository-format=docker \
        --location=LOCATION \
        --description="Docker repository"
    

    Ganti kode berikut:

    • ARTIFACT_REPO_NAME: nama repositori Anda
    • ARTIFACT_PROJECT_ID: project ID artefak
    • LOCATION: lokasi Artifact Registry—misalnya: us-west2, europe-central2, atau asia-east1
  2. Buat pemicu build Cloud Build:

    gcloud beta builds triggers create cloud-source-repositories \
        --project=SOURCE_REPO_PROJECT_ID \
        --repo=SOURCE_REPO_NAME \
        --region=LOCATION \
        --branch-pattern=.* \
        --build-config=cloudbuild.yaml
    

    Ganti kode berikut:

    • SOURCE_REPO_NAME: nama repositori kode sumber
    • SOURCE_REPO_PROJECT_ID: project ID Cloud Build
    • LOCATION: lokasi
  3. Picu build dengan mengirim file yang telah Anda buat sebelumnya dalam panduan ini.

    git push
    

    Jika image berhasil dibangun, Cloud Build akan menghasilkan proven dan mengupload image ke repositori Artifact Registry Anda.

  4. Untuk memeriksa gambar terbaru dan mendapatkan ringkasannya, lakukan hal berikut:

    1. Pastikan Cloud Build membangun image Anda:

      gcloud artifacts docker images list LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/REPO_NAME/DIRECTORY \
          --project=ARTIFACT_PROJECT_ID \
          --sort-by=create_time
      

      Ganti kode berikut:

      • LOCATION: lokasi Artifact Registry
      • ARTIFACT_PROJECT_ID: project ID untuk artefak
      • ARTIFACT_REPO_NAME: nama repositori
      • DIRECTORY: direktori
    2. Salin ringkasan gambar terbaru. Ringkasan terlihat mirip dengan berikut: sha256:9432f747bd058b33de33bb5314d6eec1ac357d664e04c76824bb7072a9218d59

  5. Opsional: Melihat asal gambar Anda:

    gcloud artifacts docker images describe \
      LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE@DIGEST \
        --project=ARTIFACT_PROJECT_ID \
        --show-provenance
    

    Ganti kode berikut:

    • ARTIFACT_PROJECT_ID: project ID untuk artefak
    • LOCATION: lokasi Artifact Registry
    • ARTIFACT_REPO_NAME: nama repositori artefak
    • DIRECTORY: direktori
    • IMAGE: jalur ke gambar
    • DIGEST: ringkasan yang terkait dengan gambar

    Output perintah terlihat mirip dengan berikut ini:

    image_summary:
      digest: sha256:9432f747bd058b33de33bb5314d6eec1ac357d664e04c76824bb7072a9218d59
      fully_qualified_digest: us-west2-docker.pkg.dev/my-project/slsa-check-repo/slsa-check-image@sha256:9432f747bd058b33de33bb5314d6eec1ac357d664e04c76824bb7072a9218d59
      registry: us-west2-docker.pkg.dev
      repository: slsa-check-repo
      slsa_build_level: 3
    provenance_summary:
      provenance:
      - build:
          intotoStatement:
            _type: https://in-toto.io/Statement/v0.1
            predicateType: https://slsa.dev/provenance/v0.1
            slsaProvenance:
              builder:
                id: https://cloudbuild.googleapis.com/GoogleHostedWorker
              materials:
              - digest:
                  sha1: de4e4227fff1d00d6f7785a827608627e4a369ea
                uri: git+https://source.cloud.google.com/my-project/slsa-check-source-repo
              metadata:
                ...
    envelope:
      payload: eyJfdHlwZSI6I ... taW1hZ2U6dGFnMSJ9XX0=
      payloadType: application/vnd.in-toto+json
      signatures:
      - keyid: projects/verified-builder/locations/global/keyRings/attestor/cryptoKeys/provenanceSigner/cryptoKeyVersions/1
        sig: MEQCIBCCkho_re4EfAT-NBSSmAXOZlv4lU_vWzEru97tU8KmAiAKcAa99umWngzNQADmPixqYjbKjLOKQEUvrI5chSrf7g==
      - keyid: projects/verified-builder/locations/global/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1
        sig: MEUCIFOEq_7RpiZAB4vUlit3hkZ2yI0n37-5Y87l0JbU-EZSAiEA9TNZZcv_MnzKffTnswHWZR2DSLmYiklr5twWfIec-zo=
    

    Output harus berisi blok provenance_summary agar pemeriksaan SLSA dapat berfungsi. Jika output tidak berisi blok, pastikan Cloud Build dipanggil oleh pemicu build. Cloud Build tidak menghasilkan informasi provenance jika dipicu secara manual.

Membuat kebijakan platform

Untuk membuat provenance, Anda harus menggunakan pemicu Cloud Build untuk mem-build image, seperti yang dijelaskan dalam Mem-build dan mengupload image contoh.

Untuk membuat kebijakan platform dengan pemeriksaan SLSA, lakukan hal berikut:

  1. Buat file YAML kebijakan platform:

    cat > POLICY_PATH <<EOF
    gkePolicy:
      checkSets:
      - checks:
        - displayName: My SLSA check
          imageAllowlist:
            # This policy exempts images that are in the following artifact registry
            allowPattern:
            - ARTIFACT_LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/EXEMPT_IMAGE_PATH/**
          slsaCheck:
            rules:
            - attestationSource:
                containerAnalysisAttestationProjects:
                - projects/ATTESTATION_PROJECT_ID
              configBasedBuildRequired: true
              trustedBuilder: GOOGLE_CLOUD_BUILD
              trustedSourceRepoPatterns:
              - source.cloud.google.com/SOURCE_REPO_PROJECT_ID/SOURCE_REPO_NAME
        displayName: My check set
    EOF
    

    Ganti kode berikut:

    • POLICY_PATH: Jalur untuk file kebijakan.
    • ARTIFACT_LOCATION: Lokasi repositori Anda di Artifact Registry.
    • ARTIFACT_PROJECT_ID: ID project yang berisi artefak Anda.
    • ARTIFACT_REPO_NAME: Repositori yang berisi image.
    • EXEMPT_IMAGE_PATH: Jalur opsional ke satu atau beberapa gambar pengecualian—misalnya: not-built-by-cloud-build. Blok imageAllowlist disertakan dalam kebijakan platform ini sehingga Anda dapat mengecualikan gambar yang tidak memiliki provenance agar tidak melanggar kebijakan platform. Untuk mencatat pelanggaran dari gambar ini ke dalam log, hapus blok ini.
    • ATTESTATION_PROJECT_ID: Project ID yang menyimpan pengesahan yang dibuat oleh Cloud Build.
    • SOURCE_REPO_PROJECT_ID: ID project yang berisi kode sumber Anda.
    • SOURCE_REPO_NAME: Repositori yang berisi image. Sebagai ilustrasi, untuk memaksa pelanggaran pemeriksaan ini, tetapkan SOURCE_REPO_NAME ke repositori kode sumber selain tempat gambar Anda berada.
    • POLICY_PROJECT_ID: ID project yang berisi kebijakan CV.
    • POLICY_ID: ID kebijakan ini.
  2. Buat kebijakan platform:

    Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

    • POLICY_ID: ID kebijakan platform pilihan Anda. Jika kebijakan berada dalam project lain, Anda dapat menggunakan nama resource lengkap: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
    • POLICY_PATH: Jalur ke file kebijakan.
    • POLICY_PROJECT_ID: Project ID kebijakan.

    Jalankan perintah berikut:

    Linux, macOS, atau Cloud Shell

    gcloud beta container binauthz policy create POLICY_ID \
        --platform=gke \
        --policy-file=POLICY_PATH \
        --project=POLICY_PROJECT_ID
    

    Windows (PowerShell)

    gcloud beta container binauthz policy create POLICY_ID `
        --platform=gke `
        --policy-file=POLICY_PATH `
        --project=POLICY_PROJECT_ID
    

    Windows (cmd.exe)

    gcloud beta container binauthz policy create POLICY_ID ^
        --platform=gke ^
        --policy-file=POLICY_PATH ^
        --project=POLICY_PROJECT_ID
    

Aktifkan CV

Anda dapat membuat cluster baru atau mengupdate cluster yang ada untuk menggunakan pemantauan CV dengan kebijakan platform berbasis pemeriksaan.

Membuat cluster yang menggunakan pemantauan CV

Di bagian ini, Anda akan membuat cluster yang hanya menggunakan pemantauan CV dengan kebijakan platform berbasis check.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • CLUSTER_NAME: nama cluster.
  • LOCATION: lokasi—misalnya, us-central1 atau asia-south1.
  • POLICY_PROJECT_ID: ID project tempat kebijakan disimpan.
  • POLICY_ID: ID kebijakan.
  • CLUSTER_PROJECT_ID: ID project cluster.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud beta container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --binauthz-evaluation-mode=POLICY_BINDINGS \
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
    --project=CLUSTER_PROJECT_ID

Windows (PowerShell)

gcloud beta container clusters create CLUSTER_NAME `
    --location=LOCATION `
    --binauthz-evaluation-mode=POLICY_BINDINGS `
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
    --project=CLUSTER_PROJECT_ID

Windows (cmd.exe)

gcloud beta container clusters create CLUSTER_NAME ^
    --location=LOCATION ^
    --binauthz-evaluation-mode=POLICY_BINDINGS ^
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
    --project=CLUSTER_PROJECT_ID

Membuat cluster yang menggunakan penerapan dan pemantauan CV

Di bagian ini, Anda akan membuat cluster yang menggunakan penerapan kebijakan project-singleton dan pemantauan CV dengan kebijakan platform berbasis pemeriksaan:

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • CLUSTER_NAME: nama cluster.
  • LOCATION: lokasi—misalnya, us-central1 atau asia-south1.
  • POLICY_PROJECT_ID: ID project tempat kebijakan disimpan.
  • POLICY_ID: ID kebijakan.
  • CLUSTER_PROJECT_ID: ID project cluster.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud beta container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
    --project=CLUSTER_PROJECT_ID

Windows (PowerShell)

gcloud beta container clusters create CLUSTER_NAME `
    --location=LOCATION `
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE `
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
    --project=CLUSTER_PROJECT_ID

Windows (cmd.exe)

gcloud beta container clusters create CLUSTER_NAME ^
    --location=LOCATION ^
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
    --project=CLUSTER_PROJECT_ID

Mengupdate cluster untuk menggunakan pemantauan CV

Di bagian ini, Anda akan memperbarui cluster untuk menggunakan pemantauan CV dengan kebijakan platform berbasis check saja. Jika cluster sudah mengaktifkan penerapan kebijakan project-singleton, menjalankan perintah ini akan menonaktifkannya. Sebagai gantinya, pertimbangkan untuk mengupdate cluster dengan penerapan dan pemantauan CV yang diaktifkan.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • CLUSTER_NAME: nama cluster
  • LOCATION: lokasi—misalnya: us-central1 atau asia-south1
  • POLICY_PROJECT_ID: ID project tempat kebijakan disimpan
  • POLICY_ID: ID kebijakan
  • CLUSTER_PROJECT_ID: ID project cluster

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud beta container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --binauthz-evaluation-mode=POLICY_BINDINGS \
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
    --project=CLUSTER_PROJECT_ID

Windows (PowerShell)

gcloud beta container clusters update CLUSTER_NAME `
    --location=LOCATION `
    --binauthz-evaluation-mode=POLICY_BINDINGS `
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
    --project=CLUSTER_PROJECT_ID

Windows (cmd.exe)

gcloud beta container clusters update CLUSTER_NAME ^
    --location=LOCATION ^
    --binauthz-evaluation-mode=POLICY_BINDINGS ^
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
    --project=CLUSTER_PROJECT_ID

Mengupdate cluster untuk menggunakan penegakan dan pemantauan CV

Di bagian ini, Anda akan memperbarui cluster untuk menggunakan penerapan kebijakan singleton project dan pemantauan CV dengan kebijakan platform berbasis pemeriksaan.

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • CLUSTER_NAME: nama cluster
  • LOCATION: lokasi—misalnya: us-central1 atau asia-south1
  • POLICY_PROJECT_ID: ID project tempat kebijakan disimpan
  • POLICY_ID: ID kebijakan
  • CLUSTER_PROJECT_ID: ID project cluster

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud beta container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
    --project=CLUSTER_PROJECT_ID

Windows (PowerShell)

gcloud beta container clusters update CLUSTER_NAME `
    --location=LOCATION `
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE `
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
    --project=CLUSTER_PROJECT_ID

Windows (cmd.exe)

gcloud beta container clusters update CLUSTER_NAME ^
    --location=LOCATION ^
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
    --project=CLUSTER_PROJECT_ID

Men-deploy image

  1. Konfigurasi kubectl:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=LOCATION \
        --project=CLUSTER_PROJECT_ID
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster Anda
    • LOCATION: lokasi cluster
    • CLUSTER_PROJECT_ID: ID project cluster
  2. Deploy Pod:

    kubectl run hello-app \
        --image='LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE@DIGEST'
    

    Pod telah di-deploy. Karena image dibuat dengan provenance dan dari repositori kode sumber tepercaya, image tersebut tidak akan melanggar pemeriksaan SLSA CV dan tidak ada entri log yang dihasilkan.

    Untuk memaksakan pelanggaran terhadap pemeriksaan SLSA, Anda dapat menetapkan SOURCE_REPO_NAME ke repositori kode sumber selain tempat gambar Anda berada. Anda juga dapat memicu build secara manual, yang akan melewati pembuatan provenance. Kemudian, periksa entri log.

Melihat log untuk entri CV

CV mencatat pelanggaran kebijakan platform ke Cloud Logging dalam waktu 24 jam. Anda biasanya dapat melihat entri dalam beberapa jam.

Jika tidak ada gambar yang melanggar kebijakan platform yang telah Anda aktifkan, tidak ada entri yang akan muncul dalam log.

Untuk melihat entri log CV selama tujuh hari terakhir, jalankan perintah berikut:

gcloud logging read \
     --order="desc" \
     --freshness=7d \
     --project=CLUSTER_PROJECT_ID \
    'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "policyName"'

Ganti CLUSTER_PROJECT_ID dengan project ID cluster.

Jenis pemeriksaan

Log CV memeriksa informasi pelanggaran untuk checkResults. Dalam entri, nilai checkType menunjukkan pemeriksaan. Nilai untuk setiap pemeriksaan adalah sebagai berikut:

  • ImageFreshnessCheck
  • SigstoreSignatureCheck
  • SimpleSigningAttestationCheck
  • SlsaCheck
  • TrustedDirectoryCheck
  • VulnerabilityCheck

Log contoh

Contoh entri Logging CV berikut menjelaskan gambar yang tidak sesuai yang melanggar pemeriksaan direktori tepercaya:

{
  "insertId": "637c2de7-0000-2b64-b671-24058876bb74",
  "jsonPayload": {
    "podEvent": {
      "endTime": "2022-11-22T01:14:30.430151Z",
      "policyName": "projects/123456789/platforms/gke/policies/my-policy",
      "images": [
        {
          "result": "DENY",
          "checkResults": [
            {
              "explanation": "TrustedDirectoryCheck at index 0 with display name \"My trusted directory check\" has verdict NOT_CONFORMANT. Image is not in a trusted directory",
              "checkSetName": "My check set",
              "checkSetIndex": "0",
              "checkName": "My trusted directory check",
              "verdict": "NON_CONFORMANT",
              "checkType": "TrustedDirectoryCheck",
              "checkIndex": "0"
            }
          ],
          "image": "gcr.io/my-project/hello-app:latest"
        }
      ],
      "verdict": "VIOLATES_POLICY",
      "podNamespace": "default",
      "deployTime": "2022-11-22T01:06:53Z",
      "pod": "hello-app"
    },
    "@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent"
  },
  "resource": {
    "type": "k8s_cluster",
    "labels": {
      "project_id": "my-project",
      "location": "us-central1-a",
      "cluster_name": "my-test-cluster"
    }
  },
  "timestamp": "2022-11-22T01:44:28.729881832Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
  "receiveTimestamp": "2022-11-22T03:35:47.171905337Z"
}

Pembersihan

Bagian ini menjelaskan cara membersihkan pemantauan CV yang Anda konfigurasikan sebelumnya dalam panduan ini.

Anda dapat menonaktifkan pemantauan CV atau Otorisasi Biner dan CV di cluster Anda.

Menonaktifkan Otorisasi Biner di cluster

Untuk menonaktifkan penerapan CV dan Otorisasi Biner di cluster Anda, jalankan perintah berikut:

gcloud beta container clusters update CLUSTER_NAME \
    --binauthz-evaluation-mode=DISABLED \
    --location=LOCATION \
    --project=CLUSTER_PROJECT_ID

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster
  • LOCATION: lokasi cluster
  • CLUSTER_PROJECT_ID: ID project cluster

Menonaktifkan pemantauan kebijakan berbasis pemeriksaan di cluster

Untuk menonaktifkan CV dengan kebijakan berbasis pemeriksaan di cluster, dan mengaktifkan kembali penerapan menggunakan kebijakan penerapan Otorisasi Biner, jalankan perintah berikut:

gcloud beta container clusters update CLUSTER_NAME  \
    --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
    --location=LOCATION \
    --project="CLUSTER_PROJECT_ID"

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster
  • LOCATION: lokasi cluster
  • CLUSTER_PROJECT_ID: ID project cluster

Perhatikan bahwa --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE setara dengan flag lama --enable-binauthz.

Menghapus kebijakan

Untuk menghapus kebijakan, jalankan perintah berikut. Anda tidak perlu menghapus kebijakan platform berbasis pemeriksaan untuk menonaktifkan audit kebijakan berbasis pemeriksaan.

gcloud beta container binauthz policy delete POLICY_ID \
    --platform=gke \
    --project="POLICY_PROJECT_ID"

Ganti kode berikut:

  • POLICY_ID: ID kebijakan
  • POLICY_PROJECT_ID: project ID kebijakan

Langkah selanjutnya