Menggunakan pemeriksaan tanda tangan Sigstore

Halaman ini menunjukkan cara menggunakan validasi berkelanjutan (CV) Otorisasi Biner pemeriksaan tanda tangan Sigstore. Pemeriksaan ini memverifikasi tanda tangan yang dibuat Sigstore dari image container yang terkait dengan Pod yang berjalan di cluster GKE tempat CV diaktifkan. Perbedaan utama antara pemeriksaan ini dan pemeriksaan pengesahan penandatanganan sederhana adalah alur kerja penandatanganan Sigstore tidak menggunakan catatan Analisis Artefak untuk menautkan tanda tangan ke gambar. Semua tanda tangan disimpan bersama gambar yang ditandatanganinya.

Pemeriksaan ini hanya mendukung repositori Artifact Registry.

Biaya

Panduan ini menggunakan layanan Google Cloud berikut:

  • Otorisasi Biner, tetapi CV tersedia tanpa biaya selama tahap Pratinjau
  • GKE
  • Cloud Key Management Service
  • Artifact Registry

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. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  4. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  5. 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.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Binary Authorization, Cloud Key Management Service, Google Kubernetes Engine, Artifact Registry APIs:

    gcloud services enable binaryauthorization.googleapis.com cloudkms.googleapis.com container.googleapis.com artifactregistry.googleapis.com
  8. Install the Google Cloud CLI.

  9. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  10. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  11. 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.

  12. Verify that billing is enabled for your Google Cloud project.

  13. Enable the Binary Authorization, Cloud Key Management Service, Google Kubernetes Engine, Artifact Registry APIs:

    gcloud services enable binaryauthorization.googleapis.com cloudkms.googleapis.com container.googleapis.com artifactregistry.googleapis.com
  14. Pastikan gcloud CLI diupdate ke versi terbaru.
  15. Instal alat command line kubectl.
  16. Jika kebijakan Otorisasi Biner dan cluster GKE Anda berada di project yang berbeda, pastikan Otorisasi Biner diaktifkan di kedua project.
  17. Instal alat command line cosign.
  18. Peran yang diperlukan

    Bagian ini menunjukkan cara menetapkan peran untuk pemeriksaan ini.

    Ringkasan

    Jika Anda menjalankan semua produk yang disebutkan dalam panduan ini di project yang sama, Anda tidak perlu menyetel 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 di setiap project memiliki izin yang diperlukan untuk mengevaluasi pemeriksaan tanda tangan CV Sigstore, minta administrator Anda untuk memberikan peran IAM berikut kepada Agen Layanan Otorisasi Biner di setiap project:

    • Jika project cluster Anda berbeda dengan project kebijakan Anda: Binary Authorization Policy Evaluator (roles/binaryauthorization.policyEvaluator) pada Agen Layanan Binary Authorization project cluster
    • Jika project repositori image Anda berbeda dengan project kebijakan Anda: Artifact Registry Reader (roles/artifactregistry.reader) di Agen Layanan Otorisasi Biner project kebijakan

    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 di setiap project melalui peran khusus 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 tanda tangan CV Sigstore, berikan peran IAM berikut kepada Agen Layanan Otorisasi Biner di setiap project:

    1. Beri izin untuk Agen Layanan Otorisasi Biner project cluster agar dapat mengakses kebijakan di project kebijakan.

      1. Dapatkan agen layanan Binary Authorization 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."
        

        Ganti CLUSTER_PROJECT_ID dengan project ID cluster.

      2. Izinkan CV 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 Otorisasi Biner project kebijakan mengakses tanda tangan di repositori Anda:

      1. Dapatkan agen layanan Otorisasi Biner project kebijakan:

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

        Ganti POLICY_PROJECT_ID dengan ID project yang berisi kebijakan Anda.

      2. Berikan peran:

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

        Ganti REPOSITORY_PROJECT_ID dengan ID project yang berisi repositori Anda.

    Membuat pasangan kunci

    Di bagian ini, Anda akan membuat pasangan kunci asimetris Elliptic Curve Digital Signature Algorithm (ECDSA).

    Anda menggunakan kunci pribadi untuk menandatangani image, yang akan membuat pengesahan. Anda menyertakan kunci publik dalam kebijakan platform. Saat memeriksa pengesahan, CV menggunakan kunci publik untuk memverifikasi pengesahan.

    Anda dapat menggunakan Cloud Key Management Service (Cloud KMS) atau kunci lokal, tetapi sebaiknya gunakan kunci Cloud KMS untuk produksi.

    PKIX Cloud KMS Cosign

    1. Siapkan variabel lingkungan yang diperlukan untuk membuat pasangan kunci. Untuk melakukannya, sebaiknya Anda mengisi placeholder dalam perintah berikut, lalu jalankan perintah.

      KMS_KEY_PROJECT_ID=KMS_KEY_PROJECT_ID
      KMS_KEYRING_NAME=KMS_KEYRING_NAME
      KMS_KEY_NAME=KMS_KEY_NAME
      KMS_KEY_LOCATION=global
      KMS_KEY_PURPOSE=asymmetric-signing
      KMS_KEY_ALGORITHM=ec-sign-p256-sha256
      KMS_PROTECTION_LEVEL=software
      KMS_KEY_VERSION=1
      

      Ganti kode berikut:

      • KMS_KEY_PROJECT_ID: project ID Anda
      • KMS_KEYRING_NAME: nama untuk key ring Cloud KMS Anda
      • KMS_KEY_NAME: nama untuk kunci Cloud KMS Anda
    2. Buat kunci dengan Cosign CLI:

      cosign generate-key-pair \
        --kms gcpkms://projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}
      
    3. Mencatat lokasi kunci publik:

      Cosign otomatis menyimpan kunci publik yang dihasilkan sebagai cosign.pub di direktori tempat perintah generate-key-pair dijalankan. Simpan lokasi file ini dalam variabel untuk perintah berikutnya.

      PUBLIC_KEY_FILE="$(pwd)/cosign.pub"
      

    gcloud PKIX Cloud KMS

    Untuk membuat pasangan kunci di Cloud KMS, lakukan hal berikut:

    1. Siapkan variabel lingkungan yang diperlukan untuk membuat pasangan kunci. Untuk melakukannya, sebaiknya Anda mengisi placeholder dalam perintah berikut, lalu jalankan perintah.

      KMS_KEY_PROJECT_ID=KMS_KEY_PROJECT_ID
      KMS_KEYRING_NAME=KMS_KEYRING_NAME
      KMS_KEY_NAME=KMS_KEY_NAME
      KMS_KEY_LOCATION=global
      KMS_KEY_PURPOSE=asymmetric-signing
      KMS_KEY_ALGORITHM=ec-sign-p256-sha256
      KMS_PROTECTION_LEVEL=software
      KMS_KEY_VERSION=1
      

      Ganti kode berikut:

      • KMS_KEY_PROJECT_ID: project ID Anda
      • KMS_KEYRING_NAME: nama untuk key ring Cloud KMS Anda
      • KMS_KEY_NAME: nama untuk kunci Cloud KMS Anda
    2. Buat key ring:

      gcloud kms keyrings create ${KMS_KEYRING_NAME} \
          --location=${KMS_KEY_LOCATION} \
          --project=${KMS_KEY_PROJECT_ID}
      
    3. Buat kunci:

      gcloud kms keys create ${KMS_KEY_NAME} \
          --location=${KMS_KEY_LOCATION} \
          --keyring=${KMS_KEYRING_NAME}  \
          --purpose=${KMS_KEY_PURPOSE} \
          --default-algorithm=${KMS_KEY_ALGORITHM} \
          --protection-level=${KMS_PROTECTION_LEVEL} \
          --project=${KMS_KEY_PROJECT_ID}
      
    4. Ekspor materi kunci publik ke file:

      PUBLIC_KEY_FILE="$(pwd)/cosign.pub"
      gcloud kms keys versions get-public-key 1 \
          --key=${KMS_KEY_NAME} \
          --keyring=${KMS_KEYRING_NAME} \
          --location=${KMS_KEY_LOCATION} \
          --output-file=${PUBLIC_KEY_FILE} \
          --project=${KMS_KEY_PROJECT_ID}
      

    Kunci lokal

    Untuk membuat pasangan kunci secara lokal, lakukan hal berikut:

      cosign generate-key-pair
      PUBLIC_KEY_FILE="$(pwd)/cosign.pub"
      PRIVATE_KEY_FILE="$(pwd)/cosign.key"
    

    Membuat kebijakan platform

    Untuk membuat kebijakan platform CV dengan pemeriksaan tanda tangan Sigstore, lakukan hal berikut:

    1. Buat file kebijakan platform pemeriksaan tanda tangan Sigstore:

      cat > POLICY_PATH <<EOF
      gkePolicy:
        checkSets:
        - checks:
          - displayName: sigstore-signature-check
            sigstoreSignatureCheck:
              sigstoreAuthorities:
              - displayName: sigstore-authority
                publicKeySet:
                  publicKeys:
                    publicKeyPem: |
      $(awk '{printf "                %s\n", $0}' ${PUBLIC_KEY_FILE})
      EOF
      

      Ganti POLICY_PATH dengan jalur ke file kebijakan.

    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 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: 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 dengan kebijakan platform berbasis pemeriksaan saja. Jika cluster sudah mengaktifkan penerapan kebijakan project-singleton, menjalankan perintah ini akan menonaktifkannya. Sebagai gantinya, pertimbangkan untuk memperbarui cluster dengan pengaktifan pemantauan CV dan penerapan.

    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 penerapan 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: 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

    CV Uji

    Di bagian ini, Anda akan menguji CV dengan men-deploy image bertanda tangan. Dalam hal ini, pemeriksaan tanda tangan CV Sigstore memverifikasi tanda tangan dan tidak menghasilkan entri log.

    Kemudian, Anda mencoba men-deploy gambar tidak bertanda tangan yang berbeda. Dalam hal ini, pemeriksaan CV tidak dapat menemukan tanda tangan yang valid dan mencatat pelanggaran ke Cloud Logging.

    Menandatangani gambar

    Untuk memenuhi pemeriksaan, gambar memerlukan tanda tangan yang valid. Untuk membuat tanda tangan, lakukan hal berikut:

    1. Buat variabel yang Anda gunakan untuk menandatangani gambar:

      IMAGE_PATH=IMAGE_PATH
      IMAGE_DIGEST=sha256:IMAGE_DIGEST_SHA
      IMAGE_TO_SIGN="${IMAGE_PATH}@${IMAGE_DIGEST}"
      

      Ganti kode berikut:

      • IMAGE_PATH: jalur ke gambar Anda
      • IMAGE_DIGEST_SHA: hash SHA dari ringkasan image Anda
    2. Tandatangani image dan kirim tanda tangan ke Artifact Registry:

      PKIX Cloud KMS

      Tandatangani image dengan kunci yang dihosting di Cloud KMS dan kirim tanda tangan ke Artifact Registry:

      cosign sign \
          --key gcpkms://projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME} \
          ${IMAGE_TO_SIGN}
      

      Kunci lokal

      Tandatangani image dengan kunci pribadi lokal dan kirim tanda tangan ke Artifact Registry.

      cosign sign --key ${PRIVATE_KEY_FILE} ${IMAGE_TO_SIGN}
      
    3. Menanggapi perintah Cosign:

      Setelah menjalankan perintah cosign sign, Cosign akan menanyakan apakah Anda ingin mengupload tanda tangan ke log transparansi Rekor. Tanggapi perintah dengan y atau n. Untuk mempelajari Rekor lebih lanjut, lihat dokumentasi Rekor.

    Memverifikasi tanda tangan secara manual

    Untuk memverifikasi tanda tangan secara manual, lakukan hal berikut:

    1. Pastikan tanda tangan ada di Artifact Registry:

      Google Cloud console

      1. Buka halaman Artifact Registry di konsol Google Cloud .

        Buka Artifact Registry

      2. Dalam daftar repositori, klik nama repositori yang berisi image Anda.

      3. Klik nama gambar yang Anda tandatangani.

      4. Temukan item yang berisi tanda tangan. Item ini memiliki tag: sha256-[image digest].sig. Hanya boleh ada satu item dengan tag.

      5. Klik Manifes.

      6. Anda akan melihat file berformat JSON dengan berbagai kolom. Setiap tanda tangan berada dalam satu elemen daftar layers, di peta annotations. Tanda tangan berada di kunci dev.cosignproject.cosign/signature.

        Berikut adalah contoh manifes:

        {
              "schemaVersion": 2,
              "mediaType": "application/vnd.oci.image.manifest.v1+json",
              "config": {
                  "mediaType": "application/vnd.oci.image.config.v1+json",
                  "size": SIZE_OF_LAYERS,
                  "digest": "DIGEST_OF_LAYERS"
              },
              "layers": [
                  {
                      "mediaType": "application/vnd.dev.cosign.simplesigning.v1+json",
                      "size": SIZE_OF_ANNOTATIONS,
                      "digest": "DIGEST_OF_ANNOTATIONS",
                      "annotations": {
                          "dev.cosignproject.cosign/signature": "BASE64_SIGNATURE",
                          "dev.sigstore.cosign/bundle": "BUNDLE"
                      }
                  }
              ]
        }

      Contoh manifes mencakup hal berikut:

      • SIZE_OF_LAYERS: ukuran array layers dalam byte
      • DIGEST_OF_LAYERS: ringkasan array layers
      • SIZE_OF_ANNOTATIONS: ukuran kamus annotations dalam byte
      • DIGEST_OF_ANNOTATIONS: ringkasan kamus annotations
      • BASE64_SIGNATURE: Tanda tangan mentah yang dienkode dalam format base64. Ini adalah tanda tangan yang akan digunakan untuk verifikasi
      • BUNDLE: Metadata khusus Sigstore

      Detail selengkapnya tentang format manifes dapat ditemukan dalam spesifikasi tanda tangan cosign Sigstore.

      Command line

      1. Temukan artefak yang benar:

        Buat daftar item yang disimpan dengan gambar:

        gcloud artifacts docker tags list ${IMAGE_PATH}
        

        Contoh outputnya akan terlihat seperti berikut:

        Listing items under project PROJECT_ID, location REPOSITORY_LOCATION, repository REPOSITORY_NAME.
        TAG                         IMAGE                                                         DIGEST
        latest                      us-east1-docker.pkg.dev/my-project/my-repo/my-image           sha256:abc123
        sha256-abc123.sig           us-east1-docker.pkg.dev/my-project/my-repo/my-image           sha256:def456
        

        Dalam output, artefak dengan tag sha256-abc123.sig berisi tanda tangan dalam manifesnya.

      2. Mendapatkan manifes

        Untuk mendapatkan manifes artefak dengan tag sha256-IMAGE_DIGEST_SHA.sig, jalankan perintah berikut:

        curl -X GET -H "Content-Type: application/json" \
                    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
                    -H "X-Goog-User-Project: REPOSITORY_PROJECT_ID" \
                    "https://REPOSITORY_LOCATION-docker.pkg.dev/v2/REPOSITORY_PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME/manifests/sha256-IMAGE_DIGEST_SHA.sig"
        

        Ganti kode berikut:

        • REPOSITORY_PROJECT_ID: ID project yang berisi repositori
        • REPOSITORY_LOCATION: lokasi repositori
        • REPOSITORY_NAME: nama repositori
        • IMAGE_NAME: nama image

        Anda akan melihat file berformat JSON dengan berbagai kolom. Setiap tanda tangan berada dalam satu elemen daftar layers, di peta annotations. Tanda tangan berada di kunci dev.cosignproject.cosign/signature.

        Contoh manifes ditampilkan di sini:

        {
            "schemaVersion": 2,
            "mediaType": "application/vnd.oci.image.manifest.v1+json",
            "config": {
                "mediaType": "application/vnd.oci.image.config.v1+json",
                "size": SIZE_OF_LAYERS,
                "digest": "DIGEST_OF_LAYERS"
            },
            "layers": [
                {
                    "mediaType": "application/vnd.dev.cosign.simplesigning.v1+json",
                    "size": SIZE_OF_ANNOTATIONS,
                    "digest": "DIGEST_OF_ANNOTATIONS",
                    "annotations": {
                        "dev.cosignproject.cosign/signature": "BASE64_SIGNATURE",
                        "dev.sigstore.cosign/bundle": "BUNDLE"
                    }
                }
            ]
        }

      Contoh manifes mencakup hal berikut:

      • SIZE_OF_LAYERS: ukuran array layers dalam byte
      • DIGEST_OF_LAYERS: ringkasan array layers
      • SIZE_OF_ANNOTATIONS: ukuran kamus annotations dalam byte
      • DIGEST_OF_ANNOTATIONS: ringkasan kamus annotations
      • BASE64_SIGNATURE: Tanda tangan mentah yang dienkode dalam format base64. Ini adalah tanda tangan yang akan digunakan untuk verifikasi
      • BUNDLE: Metadata khusus Sigstore

      Detail selengkapnya tentang format manifes dapat ditemukan dalam spesifikasi tanda tangan cosign Sigstore.

    2. Verifikasi tanda tangan secara manual:

      Gunakan cosign verify untuk memverifikasi tanda tangan yang diupload:

      PKIX Cloud KMS

      cosign verify --key gcpkms://projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME} \
            ${IMAGE_PATH}@${IMAGE_DIGEST}
      

      Kunci lokal

      cosign verify --key {PUBLIC_KEY_FILE} ${IMAGE_PATH}@${IMAGE_DIGEST}
      

      Output perintah menyatakan The signatures were verified against the specified public key jika verifikasi berhasil.

    Men-deploy gambar yang ditandatangani

    Untuk men-deploy image bertanda tangan, lakukan hal berikut:

    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: project ID cluster
    2. Deploy image dan periksa deployment terhadap kebijakan Otorisasi Biner:

      kubectl run hello-app-signed --image=${IMAGE_PATH}@${IMAGE_DIGEST}
      

      Pod telah di-deploy. Karena gambar ditandatangani, CV tidak menghasilkan entri log yang terkait dengan Pod ini.

    Men-deploy image yang tidak bertanda tangan

    Di bagian ini, Anda akan men-deploy gambar yang tidak bertanda tangan.

    Karena kebijakan tersebut memerlukan tanda tangan dan gambar ini tidak memilikinya, CV secara rutin mencatat pelanggaran saat penampung berjalan.

    Untuk men-deploy image, jalankan perintah berikut:

      kubectl run hello-app-unsigned \
          --image=UNSIGNED_IMAGE_PATH@UNSIGNED_IMAGE_DIGEST
    

    Pod telah di-deploy. Karena gambar tidak memiliki pengesahan, CV menghasilkan entri log saat Pod berjalan.

    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 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

    Entri CV Logging contoh berikut menjelaskan gambar yang tidak sesuai dan 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 konfigurasi sebelumnya dalam panduan ini.

    Anda dapat menonaktifkan pemantauan CV atau Binary Authorization 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: 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.

    Hapus kebijakan

    Untuk menghapus kebijakan, jalankan perintah berikut. Kebijakan platform berbasis cek tidak perlu dihapus untuk menonaktifkan audit kebijakan berbasis cek.

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

    Ganti kode berikut:

    • POLICY_ID: ID kebijakan
    • POLICY_PROJECT_ID: ID project kebijakan

    Langkah berikutnya