Memverifikasi provenance build

Paket OSS terjamin dibuat dengan kepatuhan SLSA Level 2. Provenans build disediakan sebagai bagian dari metadata keamanan. Halaman ini menjelaskan cara memverifikasi metadata asal build.

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

Sebelum memulai

  • Instal cosign untuk memverifikasi tanda tangan dalam provenans build.

Menyiapkan autentikasi

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

Memverifikasi provenance build

Provenans build ditandatangani menggunakan pengesahan in-toto yang pada gilirannya menggunakan format envelope DSSE. Artinya, tanda tangan yang dihasilkan berisi tanda tangan yang di-wrap dan data mentah.

Menggunakan alat aoss-verifier

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

  2. Ekspor $(go env GOPATH)/bin, lalu 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 tanda opsional yang melewati pencocokan sertifikat leaf dengan sertifikat root melalui rantai sertifikat, jika digunakan.

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

    --disable_deletes adalah tanda 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 asal build, lakukan hal berikut:

  1. Mengambil provenance build.

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

    Untuk mengetahui informasi selengkapnya, lihat cuplikan metadata contoh 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 asal build.

    Provenans 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 yang disebut 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 di file lain yang disebut signature.sig.

      Untuk mendekode tanda tangan, gunakan perintah berikut:

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

    Bagian EnvelopeSignature dalam provenans build berisi referensi ke kunci yang digunakan untuk menandatangani provenans 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 item 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. Verifikasi tanda tangan asal.

    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 pada langkah sebelumnya.
      • signature.sig: File yang berisi tanda tangan yang diambil pada langkah sebelumnya.

      Output berikut akan ditampilkan setelah perintah berhasil dijalankan:

      Verified OK

    2. Untuk memverifikasi hash artefak yang terkait dengan asal-usul, 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 pada langkah sebelumnya.
      • signature.sig: File yang berisi tanda tangan yang diambil pada langkah sebelumnya.
      • ARTIFACT_PATH: Jalur ke artefak.

      Output berikut akan ditampilkan setelah perintah berhasil dijalankan:

      Verified OK

Langkah berikutnya