Menggunakan pemeriksaan keaktualan gambar

Halaman ini menunjukkan cara menggunakan pemeriksaan keaktualan image validasi berkelanjutan (CV) Otorisasi Biner untuk memeriksa keaktualan image yang terkait dengan Pod yang berjalan di cluster Google Kubernetes Engine (GKE) tempat CV diaktifkan. Untuk melakukannya, CV akan memeriksa kapan gambar diupload ke registry gambar.

Pemeriksaan ini hanya mendukung repositori Artifact Registry dan Container Registry.

Biaya

Panduan ini menggunakan layanan Google Cloud berikut:

  • Otorisasi Biner, tetapi CV tersedia tanpa biaya selama tahap Pratinjau
  • Google Kubernetes Engine

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

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Artifact Registry, Binary Authorization, Google Kubernetes Engine APIs:

    gcloud services enable artifactregistry.googleapis.com binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. Enable the Artifact Registry, Binary Authorization, Google Kubernetes Engine APIs:

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

Peran yang diperlukan

Bagian ini menunjukkan cara menetapkan peran untuk pemeriksaan ini.

Ringkasan

Jika menjalankan semua produk yang disebutkan dalam panduan ini dalam 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.

Untuk memastikan bahwa Agen Layanan Otorisasi Biner project kebijakan memiliki izin yang diperlukan untuk mengevaluasi pemeriksaan keaktualan image CV, minta administrator untuk memberikan Agen Layanan Otorisasi Biner project kebijakan peran IAM berikut:

  • Jika project cluster Anda berbeda dengan project kebijakan: Binary Authorization Policy Evaluator (roles/binaryauthorization.policyEvaluator) di Agen Layanan Binary Authorization project cluster, agar dapat mengakses project kebijakan
  • Jika project Artifact Registry—project yang menyimpan image—berbeda dengan project kebijakan: Artifact Registry Reader (roles/artifactregistry.reader) di Agen Layanan Binary Authorization project kebijakan, agar dapat mengakses project pengesahan
  • Jika project Artifact Registry Anda berbeda dengan project cluster: Artifact Registry Reader (roles/artifactregistry.reader) di Binary Authorization Service Agent project cluster, agar dapat mengakses metadata image di project Artifact Registry

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Administrator Anda mungkin juga dapat memberikan izin yang diperlukan kepada Agen Layanan Otorisasi Biner project kebijakan melalui peran kustom atau peran bawaan lainnya.

Memberikan peran menggunakan gcloud CLI

Untuk memastikan bahwa Agen Layanan Otorisasi Biner di setiap project memiliki izin yang diperlukan untuk mengevaluasi pemeriksaan ini, berikan peran IAM berikut kepada Agen Layanan Otorisasi Biner di setiap project.

Project cluster berbeda dengan project kebijakan

Berikan peran Binary Authorization Policy Evaluator (roles/binaryauthorization.policyEvaluator) kepada agen layanan Binary Authorization di project cluster pada project kebijakan.

gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe CLUSTER_PROJECT_ID --format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \
  --role=roles/binaryauthorization.policyEvaluator

Ganti kode berikut:

  • POLICY_PROJECT_ID: ID project yang berisi kebijakan Anda.
  • CLUSTER_PROJECT_ID: project ID cluster.

Project kebijakan berbeda dengan project artefak

Berikan peran Artifact Registry Reader (roles/artifactregistry.reader) kepada agen layanan Otorisasi Biner di project kebijakan pada project artefak.

gcloud projects add-iam-policy-binding ARTIFACT_PROJECT_ID \
    --member="serviceAccount:service-$(gcloud projects describe POLICY_PROJECT_ID --format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \
    --role=roles/artifactregistry.reader

Ganti ARTIFACT_PROJECT_ID dengan ID project yang berisi repositori Artifact Registry Anda.

Project cluster berbeda dengan project artefak

Berikan peran Artifact Registry Reader (roles/artifactregistry.reader) kepada agen layanan Otorisasi Biner di project cluster pada project artefak.

gcloud projects add-iam-policy-binding ARTIFACT_PROJECT_ID \
    --member="serviceAccount:service-$(gcloud projects describe CLUSTER_PROJECT_ID --format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \
    --role=roles/artifactregistry.reader

Ganti kode berikut:

  • ARTIFACT_PROJECT_ID: ID project yang berisi repositori Artifact Registry Anda.
  • CLUSTER_PROJECT_ID: project ID yang menjalankan cluster GKE Anda.

Membuat kebijakan platform

Untuk membuat kebijakan platform CV dengan pemeriksaan keaktualan gambar, lakukan langkah berikut:

  1. Buat file YAML kebijakan platform:

    cat << EOF > /tmp/my-policy.yaml
    gkePolicy:
      checkSets:
      - checks:
        - imageFreshnessCheck:
            maxUploadAgeDays: MAX_UPLOAD_AGE_DAYS
          displayName: CHECK_DISPLAY_NAME
        displayName: CHECK_SET_DISPLAY_NAME
    EOF
    

    Ganti kode berikut:

    • MAX_UPLOAD_AGE_DAYS: waktu berlalu maksimum sejak gambar diupload ke registry, dalam hari.
    • CHECK_SET_DISPLAY_NAME: nama tampilan opsional pilihan Anda untuk set pemeriksaan
    • CHECK_DISPLAY_NAME: nama tampilan opsional pilihan Anda untuk pemeriksaan
  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 di 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

Mengaktifkan 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 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: project ID 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 pemantauan CV dan penerapan

Di bagian ini, Anda akan membuat cluster yang menggunakan penegakan 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: project ID 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

Memperbarui cluster untuk menggunakan pemantauan CV

Di bagian ini, Anda akan mengupdate cluster untuk menggunakan pemantauan CV hanya dengan kebijakan platform berbasis pemeriksaan. Jika cluster sudah mengaktifkan penerapan kebijakan project-singleton, menjalankan perintah ini akan menonaktifkannya. Sebagai gantinya, pertimbangkan untuk mengupdate cluster dengan pemantauan CV dan penerapan 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: project ID 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 pemantauan CV dan penerapan

Di bagian ini, Anda akan mengupdate cluster untuk menggunakan penegakan 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: project ID 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

Melihat log untuk entri CV

Anda dapat menelusuri entri Cloud Logging untuk menemukan error konfigurasi CV dan pelanggaran validasi kebijakan platform CV.

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

Melihat log error konfigurasi CV

Untuk melihat log error konfigurasi CV, jalankan perintah berikut:

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

Output berikut menunjukkan error konfigurasi saat kebijakan platform CV tidak ditemukan:

{
  "insertId": "141d4f10-72ea-4a43-b3ec-a03da623de42",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent",
    "configErrorEvent": {
      "description": "Cannot monitor cluster 'us-central1-c.my-cluster': Resource projects/123456789/platforms/gke/policies/my-policy does not exist."
    }
  },
  "resource": {
    "type": "k8s_cluster",
    "labels": {
      "cluster_name": "my-cluster",
      "location": "us-central1-c",
      "project_id": "my-project"
    }
  },
  "timestamp": "2024-05-28T15:31:03.999566Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
  "receiveTimestamp": "2024-05-28T16:30:56.304108670Z"
}

Melihat pelanggaran validasi kebijakan platform CV

Jika tidak ada gambar yang melanggar kebijakan platform yang telah Anda aktifkan, tidak ada entri yang akan muncul di 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 ke checkResults. Dalam entri, nilai checkType menunjukkan pemeriksaan. Nilai untuk setiap pemeriksaan adalah sebagai berikut:

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

Contoh log

Contoh entri CV Logging berikut menjelaskan image 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 telah 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, 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: project ID 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: project ID cluster

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

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