Menggunakan pemeriksaan pengesahan penandatanganan yang sederhana

Halaman ini menunjukkan cara menggunakan pemeriksaan pengesahan tanda tangan sederhana (CV) Otorisasi Biner. Pemeriksaan ini memverifikasi pengesahan image container yang terkait dengan Pod yang berjalan di cluster Google Kubernetes Engine (GKE) tempat CV diaktifkan.

Biaya

Panduan ini menggunakan layanan Google Cloud berikut:

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

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. 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. Make sure that billing is enabled for your Google Cloud project.

  6. Aktifkan API Binary Authorization, Cloud Key Management Service, Google Kubernetes Engine:

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

    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. Make sure that billing is enabled for your Google Cloud project.

  11. Aktifkan API Binary Authorization, Cloud Key Management Service, Google Kubernetes Engine:

    gcloud services enable binaryauthorization.googleapis.com cloudkms.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 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.

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

  • 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

Untuk memastikan bahwa Agen Layanan Otorisasi Biner di setiap project memiliki izin yang diperlukan untuk mengevaluasi pemeriksaan pengesahan penandatanganan sederhana CV, berikan peran IAM berikut kepada Agen Layanan Otorisasi Biner di setiap project:

  1. Berikan izin kepada Agen Layanan Otorisasi Biner project cluster untuk mengakses kebijakan di 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 project kebijakan Agen Layanan Otorisasi Biner untuk mengakses pengesahan di project pengesahan 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.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:$SERVICE_ACCOUNT" \
          --role='roles/containeranalysis.occurrences.viewer'
      

      Ganti ATTESTATION_PROJECT_ID dengan ID project yang berisi pengesahan Anda.

Buat 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 tersebut.

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

Cloud KMS PKIX

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

  1. Siapkan variabel lingkungan yang diperlukan untuk membuat pasangan kunci. Untuk melakukannya, sebaiknya isi placeholder dengan perintah berikut, lalu jalankan perintahnya.

    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:

    gcloud kms keys versions get-public-key 1 \
        --key=${KMS_KEY_NAME} \
        --keyring=${KMS_KEYRING_NAME} \
        --location=${KMS_KEY_LOCATION} \
        --output-file=/tmp/ec_public.pem \
        --project=${KMS_KEY_PROJECT_ID}
    

Kunci lokal

Untuk membuat pasangan kunci secara lokal, lakukan langkah berikut:

  1. Buat kunci pribadi:

    PRIVATE_KEY_FILE="/tmp/ec_private.pem"
    openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}
    
  2. Dapatkan kunci publik dari kunci pribadi:

    PUBLIC_KEY_FILE="/tmp/ec_public.pem"
    openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
    

Membuat kebijakan platform

Untuk membuat kebijakan platform CV dengan pemeriksaan pengesahan penandatanganan sederhana, lakukan hal berikut:

  1. Buat file YAML kebijakan platform pemeriksaan pengesahan penandatanganan sederhana:

    Cloud KMS PKIX

    cat > /tmp/my-policy.yaml <<EOF
    gkePolicy:
      checkSets:
        checks:
          simpleSigningAttestationCheck:
            containerAnalysisAttestationProjects:
            - projects/ATTESTATION_PROJECT_ID
            attestationAuthenticators:
              pkixPublicKeySet:
                pkixPublicKeys:
                  publicKeyPem: |
    $(awk '{printf "                %s\n", $0}' /tmp/ec_public.pem)
                  signatureAlgorithm: ECDSA_P256_SHA256
                  keyId: |
                    projects/KMS_KEY_PROJECT_ID/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION}
    EOF
    

    Ganti kode berikut:

    • ATTESTATION_PROJECT_ID: ID project yang menyimpan pengesahan
    • KMS_KEY_PROJECT_ID: ID project kunci KMS Anda

    Kunci lokal

    cat > /tmp/my-policy.yaml <<EOF
    gkePolicy:
      checkSets:
        checks:
          simpleSigningAttestationCheck:
            containerAnalysisAttestationProjects:
            - "projects/ATTESTATION_PROJECT_ID"
            attestationAuthenticators:
              pkixPublicKeySet:
                pkixPublicKeys:
                  publicKeyPem: |
    $(awk '{printf "                %s\n", $0}' /tmp/ec_public.pem)
                  signatureAlgorithm: ECDSA_P256_SHA256
                  keyId: |
                    PUBLIC_KEY_ID
    EOF
    

    Ganti kode berikut:

    • ATTESTATION_PROJECT_ID: ID project yang menyimpan pengesahan
    • PUBLIC_KEY_ID: ID yang secara unik mengidentifikasi kunci lokal Anda
  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

  3. Simpan nilai ID untuk digunakan nanti:

    PUBLIC_KEY_ID="PUBLIC_KEY_ID"
    

    Ganti PUBLIC_KEY_ID dengan ID yang Anda tentukan di kolom keyId pada file kebijakan platform sebelumnya dalam panduan ini.

    Kunci pribadi digunakan saat pengesahan dibuat, seperti yang dijelaskan nanti dalam panduan ini.

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

Membuat catatan Artifact Analysis

Di bagian ini, Anda akan membuat contoh catatan Analisis Artefak untuk menautkan pengesahan. Untuk membuat catatan, lakukan hal berikut:

  1. Buat variabel catatan:

    NOTE_PROJECT_ID=NOTE_PROJECT_ID
    NOTE_ID="test-note"
    NOTE_URI="projects/${NOTE_PROJECT_ID}/notes/${NOTE_ID}"
    DESCRIPTION="CV test note"
    

    Ganti NOTE_PROJECT_ID: ID project yang berisi catatan.

  2. Buat file konten catatan:

    cat > /tmp/note_payload.json << EOM
    {
      "name": "${NOTE_URI}",
      "attestation": {
        "hint": {
          "human_readable_name": "${DESCRIPTION}"
        }
      }
    }
    EOM
    
  3. Buat catatan:

    curl -X POST \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
        -H "x-goog-user-project: ${NOTE_PROJECT_ID}" \
        --data-binary @/tmp/note_payload.json "https://containeranalysis.googleapis.com/v1/projects/${NOTE_PROJECT_ID}/notes/?noteId=${NOTE_ID}"
    

    Ganti NOTE_PROJECT_ID: ID project yang berisi catatan

  4. Opsional: Untuk memverifikasi bahwa Anda yang membuat catatan:

    curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
        -H "x-goog-user-project: NOTE_PROJECT_ID" \
    "https://containeranalysis.googleapis.com/v1/projects/NOTE_PROJECT_ID/notes/"
    

    Ganti NOTE_PROJECT_ID dengan ID project yang berisi catatan tersebut.

Uji CV

Di bagian ini, Anda akan menguji CV dengan men-deploy image yang Anda buat pengesahannya. Dalam hal ini, pemeriksaan pengesahan penandatanganan sederhana CV akan memverifikasi pengesahan dan tidak menghasilkan entri log.

Kemudian, Anda akan mencoba men-deploy image lain yang tidak memiliki pengesahan. Dalam hal ini, pemeriksaan CV tidak dapat menemukan pengesahan dan mencatat pelanggaran ke Cloud Logging.

Membuat pengesahan

Untuk memenuhi pemeriksaan ini, gambar memerlukan pengesahan yang valid. Untuk membuat pengesahan, lakukan hal berikut:

  1. Buat variabel yang Anda gunakan untuk membuat pengesahan:

    IMAGE_PATH=us-docker.pkg.dev/google-samples/containers/gke/hello-app
    IMAGE_DIGEST=sha256:37e5287945774f27b418ce567cd77f4bbc9ef44a1bcd1a2312369f31f9cce567
    IMAGE_TO_ATTEST="${IMAGE_PATH}@${IMAGE_DIGEST}"
    
  2. Buat file payload tanda tangan:

    cat > /tmp/generated_payload.json << EOM
    {
      "critical": {
        "identity": {
          "docker-reference": "${IMAGE_PATH}"
        },
        "image": {
          "docker-manifest-digest": "${IMAGE_DIGEST}"
        },
        "type": "Google cloud binauthz container signature"
      }
    }
    EOM
    
  3. Buat pengesahan:

    1. Tanda tangani payload:

      Cloud KMS PKIX

      gcloud kms asymmetric-sign \
          --version=${KMS_KEY_VERSION} \
          --key=${KMS_KEY_NAME} \
          --keyring=${KMS_KEYRING_NAME} \
          --location=${KMS_KEY_LOCATION} --digest-algorithm sha256 \
          --input-file=/tmp/generated_payload.json \
          --signature-file=/tmp/ec_signature \
          --project=${KMS_KEY_PROJECT_ID}
      

      Kunci lokal

      openssl dgst -sha256 -sign ${PRIVATE_KEY_FILE} /tmp/generated_payload.json > /tmp/ec_signature
      
    2. Buat konten pengesahan:

      cat > /tmp/attestation.json << EOM
      {
        "resourceUri": "${IMAGE_TO_ATTEST}",
        "note_name": "${NOTE_URI}",
        "attestation": {
          "serialized_payload": "$(base64 --wrap=0 /tmp/generated_payload.json)",
          "signatures": [{
            "public_key_id": "${PUBLIC_KEY_ID}",
            "signature": "$(base64 --wrap=0 /tmp/ec_signature)"
          }]
        }
      }
      EOM
      
    3. Buat pengesahan:

      curl -X POST "https://containeranalysis.googleapis.com/v1/projects/${NOTE_PROJECT_ID}/occurrences/" \
          -H "Content-Type: application/json" \
          -H "X-Goog-User-Project: ${NOTE_PROJECT_ID}" \
          -H "Authorization: Bearer $(gcloud auth print-access-token)" \
          --data-binary @/tmp/attestation.json
      

      Ganti NOTE_PROJECT_ID dengan ID project yang berisi catatan tersebut

Men-deploy image yang memiliki pengesahan

Untuk men-deploy image yang pengesahannya dibuat, lakukan langkah 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: ID project cluster
  2. Deploy layanan dan periksa deployment tersebut berdasarkan kebijakan Otorisasi Biner:

    kubectl run hello-app --image=$IMAGE_PATH@$IMAGE_DIGEST
    

    Pod telah di-deploy. Karena image memiliki pengesahan, CV tidak menghasilkan entri log yang terkait dengan Pod ini.

Men-deploy image tanpa pengesahan

Di bagian ini, Anda akan men-deploy image yang tidak memiliki pengesahan terkait.

Karena kebijakan ini memerlukan pengesahan dan image ini tidak memiliki pengesahannya, CV secara berkala akan mencatat pelanggaran saat container berjalan.

Untuk men-deploy image, jalankan perintah berikut:

kubectl run hello-app-no-attestation \
    --image=gcr.io/google-samples/hello-app@sha256:845f77fab71033404f4cfceaa1ddb27b70c3551ceb22a5e7f4498cdda6c9daea

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

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