Memverifikasi provenance build

Paket Assured Open Source Software (Assured OSS) mematuhi Supply-chain Levels for Software Artifacts (SLSA) Level 2, yang memerlukan provenance build sebagai bagian dari metadata keamanan. Untuk mengonfirmasi integritas paket, Anda dapat memverifikasi metadata provenance build.

Dokumen ini berlaku untuk paket gratis. Untuk mengetahui informasi tentang provenance build di paket premium, lihat Mengakses metadata keamanan dan memverifikasi paket.

Sebelum memulai

  • Instal cosign untuk memverifikasi tanda tangan dalam provenance build.

Menyiapkan autentikasi

Untuk mengetahui informasi tentang cara menyiapkan autentikasi, lihat Menyiapkan autentikasi.

Memverifikasi provenance build

Provenance build ditandatangani menggunakan pengesahan in-toto yang pada gilirannya menggunakan format amplop dsse. Artinya, tanda tangan yang dihasilkan berisi tanda tangan yang digabungkan dan data mentah.

Menggunakan alat aoss-verifier

  1. Untuk memverifikasi provenance build, instal alat aoss-verifier.

  2. Ekspor $(go env GOPATH)/bin, dan jalankan perintah aoss-verifier verify-package dengan flag --verify_build_provenance.

    aoss-verifier verify-package \
       --language LANGUAGE \
       --package_id PACKAGE_ID \
       --version VERSION \
       --artifact_path ARTIFACT_PATH \
       --verify_build_provenance \
       [--disable_certificate_verification] \
       [--temp_downloads_path TEMP_DOWNLOADS_DIR_PATH] \
       [--disable_deletes]
    

    Ganti kode berikut:

    • LANGUAGE: Bahasa paket. Nilai harus dalam huruf kecil.
    • PACKAGE_ID: Untuk Java, formatnya adalah groupId:artifactId. Untuk Python, formatnya adalah packageName. Nilai harus dalam huruf kecil.
    • VERSION: Versi paket.
    • ARTIFACT_PATH: Jalur ke file data di direktori lokal yang ingin Anda verifikasi. Gunakan ekstensi nama file berikut:
      • Ekstensi file jar untuk paket Java
      • Ekstensi file whl untuk paket Python

    --disable_certificate_verification adalah flag opsional yang melewati pencocokan sertifikat entitas akhir dengan root certificate melalui rantai sertifikat, jika digunakan.

    --temp_downloads_path adalah flag opsional untuk menetapkan jalur tempat Anda ingin mendownload file. Ganti TEMP_DOWNLOADS_DIR_PATH. Jika flag ini tidak ditetapkan, file akan didownload ke folder tmp_downloads di direktori saat ini.

    --disable_deletes adalah flag opsional yang menyimpan file yang didownload. Secara default, alat ini akan membersihkan semua file yang didownload.

Untuk mengetahui informasi selengkapnya, lihat file README alat.

Verifikasi manual

Untuk memverifikasi provenance build, lakukan hal berikut:

  1. Mengambil provenance build.

    Bergantung pada cara Anda mengakses metadata keamanan, provenance build diakses secara berbeda.

    Untuk informasi selengkapnya, lihat contoh cuplikan metadata berikut:

    {
      "creationTime": "2023-03-25T05:32:23Z",
      "buildDetails": [
       {
         "packageFileName": "jackson-databind-2.13.3.jar",
         "envelope": {
         "payload": "eyJfdHlwZSI6Imh0d……………",
         "payloadType": "application/vnd.in-toto+json",
         "signatures": [
            "sig": "eyJwYXlsb2FkVHlwZSI6Im……",
            "keyid": "gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/tekton-chains"
           }
         ]
       },
      "buildProvenance": "{\"_type\":\"https://in-toto.io/Statement/v0.1…"
    .....
    
    

    Contoh cuplikan metadata:

    {'BuildOccurrence': name: "projects/cloud-aoss/occurrences/06c514bb-1069-4cde-8d68-b1306f19535a"
    resource_uri: "jackson-databind-2.13.3.jar@sha256:4c01a14673bc1cd4a2df337a3b4e695af0a6ed8ac6be19c9e4077377fb8adf92"
    note_name: "projects/cloud-aoss/notes/tekton-cloudbuild-intoto"
    kind: BUILD
    create_time {
      seconds: 1665556616
      nanos: 891004000
    }
    ……
    ……
    }
    envelope {
      payload: "{\"_type\":\"https://in-toto.io/Statement/v0.1\", ….."
      payload_type: "application/vnd.in-toto+json"
      signatures {
        sig: "{\"payloadType\":\"application/vnd.in-toto+json\",....."
        keyid: "gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/tekton-chains"
      }
    }
    ,
    …
    
    
  2. Mengambil tanda tangan provenance build.

    Provenance build berisi bagian bernama Envelope yang berisi tanda tangan sebagai EnvelopeSignature. Untuk mengambil tanda tangan, ikuti langkah-langkah berikut:

    1. Simpan data sig dalam file bernama signature.txt.
    2. Periksa apakah metadata didownload menggunakan skrip metadata.

      Jika metadata didownload menggunakan skrip metadata, ubah tanda tangan dan simpan di file lain bernama signature.sig.

      Untuk mengubah tanda tangan, jalankan perintah berikut:

      cat signature.txt | sed -e 's/\\"/"/g' > signature.sig
      

      Jika metadata tidak didownload menggunakan skrip metadata, dekode tanda tangan dan simpan dalam file lain bernama signature.sig.

      Untuk mendekode tanda tangan, gunakan perintah berikut:

      cat signature.txt | tr '\-_' '+/' | base64 -d > signature.sig
      
  3. Ambil kunci publik provenance build.

    Bagian EnvelopeSignature dalam provenance build berisi referensi ke kunci yang digunakan untuk menandatangani provenance build. Kunci disimpan dalam salah satu format berikut:

    1. gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/KEY_NAME
    2. gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION

      Dengan KEY_NAME dan KEY_VERSION adalah nama dan versi kunci Cloud Key Management Service.

    Kunci publik disimpan di bucket Cloud Storage yang dimiliki oleh Assured OSS.

    Ambil kunci publik menggunakan Google Cloud CLI. Gunakan salah satu perintah berikut:

    • Jika hanya KEY_NAME yang ada:

      gcloud storage cp gs://cloud-aoss/keys/KEY_NAME-public.pem PATH_TO_LOCAL_STORE
      
    • Jika KEY_NAME dan KEY_VERSION ada:

      gcloud storage cp gs://cloud-aoss/keys/KEY_NAME-KEY_VERSION-public.pem PATH_TO_LOCAL_STORE
      

    Ganti kode berikut :

    • KEY_NAME dengan nama kunci Cloud Key Management Service.
    • KEY_VERSION dengan versi kunci Cloud Key Management Service.
    • PATH_TO_LOCAL_STORE dengan nama jalur lokal untuk menyimpan kunci publik.
  4. Memverifikasi tanda tangan provenance.

    1. Untuk memverifikasi tanda tangan, jalankan perintah berikut:

      cosign verify-blob-attestation --insecure-ignore-tlog --key KEY_REF --signature signature.sig --type slsaprovenance --check-claims=false /dev/null
      

      Ganti kode berikut:

      • KEY_REF: Jalur ke kunci publik yang Anda download di langkah sebelumnya.
      • signature.sig: File yang berisi tanda tangan yang diambil pada langkah sebelumnya.

      Output berikut ditampilkan setelah perintah berhasil dijalankan:

      Verified OK

    2. Untuk juga memverifikasi hash artefak yang terkait dengan provenance, gunakan perintah berikut:

      cosign verify-blob-attestation --insecure-ignore-tlog --key KEY_REF --signature signature.sig --type slsaprovenance --check-claims=true ARTIFACT_PATH 
      

      Ganti kode berikut:

      • KEY_REF: Jalur ke kunci publik yang Anda download di langkah sebelumnya.
      • signature.sig: File yang berisi tanda tangan yang diambil pada langkah sebelumnya.
      • ARTIFACT_PATH: Jalur ke artefak.

      Output berikut ditampilkan setelah perintah berhasil dijalankan:

      Verified OK

Langkah berikutnya