Membuat pengesahan dengan OpenSSF Scorecard

Tutorial ini menunjukkan cara menggunakan OpenSSF Scorecard untuk memeriksa image container untuk praktik terbaik keamanan supply chain. Scorecard Attestor berjalan sebagai bagian dari pipeline Cloud Build untuk menghasilkan pengesahan yang dapat diverifikasi oleh Otorisasi Biner sebelum deployment. Langkah verifikasi ini mencegah artefak container yang telah disusupi di-deploy ke produksi, yang dapat mencegah beberapa kelas kerentanan supply chain.

Ringkasan

Open Source Security Foundation (OpenSSF) adalah organisasi yang menyediakan alat, layanan, dan infrastruktur untuk inisiatif keamanan open source. Scorecard adalah alat yang dikelola oleh OpenSSF dan memindai repositori pengelolaan kode sumber (SCM) untuk praktik terbaik keamanan supply chain.

Scorecard Attestor adalah alat yang terintegrasi dalam Kartu Skor yang memungkinkan Anda membuat pengesahan Otorisasi Biner berdasarkan kebijakan yang dikonfigurasi. Attestor Kartu Skor menjalankan Kartu skor terhadap repositori SCM image container, membuat hasil, mengevaluasi hasil berdasarkan kebijakan, dan membuat pengesahan jika kebijakan terpenuhi.

Dalam tutorial ini, Anda akan membangun repositori contoh, lalu menggunakan Scorecard Attestor. Setiap pipeline contoh berisi langkah-langkah build berikut:

  1. build: Membuat contoh image container.
  2. push: Menerapkan image ke Container Registry.
  3. attest: Periksa dan tanda tangani image, menggunakan Attestor Kartu Skor untuk membuat pengesahan berdasarkan kebijakan.

Pada langkah attest di setiap pipeline, Scorecard Attestor melakukan hal berikut:

  1. Mengambil data tentang repositori SCM untuk image container yang baru dibuat.
  2. Menjalankan Kartu skor pada data mentah dan mengevaluasi repositori SCM berdasarkan kebijakan yang ditentukan pengguna.
    1. Jika semua kebijakan terpenuhi, Attestor Kartu Skor akan membuat pengesahan.
    2. Jika salah satu kebijakan tidak terpenuhi, Attestor Kartu Skor tidak akan membuat pengesahan.

Saat deployment, Otorisasi Biner memeriksa pengesahan yang dapat diverifikasi. Tanpanya, pelaksana tidak mengizinkan deployment image.

Biaya

Tutorial ini menggunakan produk Google Cloud berikut.

  • Container Registry
  • Artifact Analysis
  • Cloud Build
  • Cloud Key Management Service

Gunakan Kalkulator Harga untuk membuat perkiraan biaya berdasarkan penggunaan yang Anda proyeksikan.

Tujuan

Dalam tutorial ini, Anda akan melakukan beberapa hal berikut:

  1. Menyiapkan Attestor Kartu Skor sebagai builder kustom Cloud Build.
  2. Melihat dan mengonfigurasi kebijakan Attestor Kartu Skor.
  3. Menjalankan Attestor Scorecard di repositori contoh untuk membuat pengesahan berdasarkan kebijakan.
  4. Jalankan Scorecard Attestor pada repositori contoh dalam mode hanya verifikasi tanpa membuat pengesahan. ## Sebelum memulai

Di bagian ini, Anda akan menjalankan penyiapan sistem satu kali.

Menyiapkan lingkungan Anda

  1. Simpan project Google Cloud Anda dalam variabel lingkungan.

    export PROJECT_ID=PROJECT_ID
    

    Ganti PROJECT_ID dengan project Google Cloud Anda.

  2. Tetapkan project ID default ke project Google Cloud Anda:

    gcloud config set project $PROJECT_ID
    
  3. Simpan nomor project dalam variabel lingkungan untuk langkah-langkah mendatang:

    export PROJECT_NUMBER=$(gcloud projects list --filter="${PROJECT_ID}" \
     --format="value(PROJECT_NUMBER)")
    
  4. Mengaktifkan API:

    Untuk memastikan layanan yang diperlukan untuk panduan ini diaktifkan, jalankan perintah berikut:

    gcloud services enable \
      cloudbuild.googleapis.com \
      containerregistry.googleapis.com \
      containerscanning.googleapis.com \
      cloudkms.googleapis.com
    

Menyiapkan peran IAM

Jalankan perintah berikut untuk mengonfigurasi akun layanan Cloud Build dengan peran berikut:

  • containeranalysis.notes.editor: menambahkan peran Artifact Analysis Notes Editor untuk mengelola attestor.
  • containeranalysis.notes.occurrences.viewer: menambahkan peran Artifact Analysis Occurrences for Notes untuk mengelola kejadian kerentanan dan pengesahan.
  • roles/containeranalysis.occurrences.editor: menambahkan peran Artifact Analysis Occurrences Editor untuk membuat kejadian pengesahan di Artifact Analysis.
  • cloudkms.signer: menambahkan peran Cloud KMS Bigtable Signer yang memungkinkan akun layanan mengakses layanan penandatanganan Cloud KMS.

    gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/containeranalysis.notes.editor
    gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/containeranalysis.notes.occurrences.viewer
    gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/containeranalysis.occurrences.editor
    gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/cloudkms.signer
    

Membuat kunci penandatanganan Cloud KMS

Kunci Cloud Key Management Service digunakan untuk membuat pengesahan.

  1. Buat key ring Cloud KMS baru dengan nama scorecard-attestor-key-ring:

    gcloud kms keyrings create scorecard-attestor-key-ring \
        --location global
    
  2. Buat kunci Cloud KMS baru yang disebut scorecard-attestor-key di dalam key ring:

    gcloud kms keys create scorecard-attestor-key \
        --keyring scorecard-attestor-key-ring \
        --location global \
        --purpose "asymmetric-signing" \
        --default-algorithm "rsa-sign-pkcs1-2048-sha256"
    
  3. Simpan algoritme ringkasan dan Cloud KMS dalam variabel lingkungan untuk mengetahui langkah-langkah mendatang:

    export KMS_DIGEST_ALG=SHA256
    export KMS_KEY_NAME=projects/$PROJECT_ID/locations/global/keyRings/scorecard-attestor-key-ring/cryptoKeys/scorecard-attestor-key/cryptoKeyVersions/1
    
  4. Membuat attestor Otorisasi Biner. Kemudian, Attestor Kartu Skor akan membuat catatan yang terkait dengan attestor ini.

    gcloud container binauthz attestors create scorecard-attestor \
        --attestation-authority-note=scorecard-attestation \
        --attestation-authority-note-project=$PROJECT_ID \
        --description="Attest that ossf/scorecard policy checks pass"
    
  5. Kaitkan attestor Otorisasi Biner dengan kunci KMS:

    gcloud container binauthz attestors public-keys add \
        --attestor=scorecard-attestor \
        --keyversion=1 \
        --keyversion-key=scorecard-attestor-key \
        --keyversion-keyring=scorecard-attestor-key-ring \
        --keyversion-location=global \
        --keyversion-project=$PROJECT_ID
    

Untuk mempelajari algoritma penandatanganan lainnya, lihat Membuat kunci asimetris.

Membuat pengesahan dengan Scorecard Attestor di pipeline Cloud Build

Mengirim build contoh kasus kegagalan

Di bagian ini, Anda akan mem-build image container dan memeriksa praktik keamanan supply chain-nya dengan OpenSSF Scorecard. Image berhasil di-build, tetapi tidak membuat pengesahan. Repositori dasar berisi beberapa praktik keamanan supply chain yang tidak disarankan, seperti dependensi yang tidak disematkan ke Debian 10 di Dockerfile, dan artefak biner terkompilasi yang diperiksa ke dalam repositori sumber. Tindakan ini merupakan pelanggaran terhadap kebijakan pengesahan di repositori.

  1. Buat clone repositori pengujian: scorecard-binauthz-test-bad.

  2. Lihat file kebijakan pengesahan untuk kasus kegagalan.

    cat policy-binauthz.yaml
    
  3. (Opsional) Lihat file konfigurasi build untuk kasus kegagalan.

    cat samples/signer/cloudbuild.yaml
    
  4. Kirim build:

    gcloud builds submit \
        --substitutions=_KMS_KEY_NAME=$KMS_KEY_NAME,_KMS_DIGEST_ALG=$KMS_DIGEST_ALG \
        --config=cloudbuild.yaml
    

Anda akan melihat output seperti berikut:

time="2022-12-20T22:30:14Z" level=info msg="image failed scorecard attestation policy check"
  1. Simpan ID build dari build terakhir:

    export BUILD_ID=$(gcloud builds list --limit=1 --format="value('ID')")
    
  2. Verifikasi hasilnya:

    gsutil cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "failed scorecard attestation policy check"
    

Mengirim build contoh kasus berhasil

Di bagian ini, Anda akan mem-build image container yang memenuhi kebijakan pengesahan Kartu Skor-nya. Dalam hal ini, Attestor Kartu Skor akan membuat pengesahan.

Untuk mengirim contoh build kasus berhasil ke Cloud Build, lakukan hal berikut:

  1. Buat clone repositori pengujian: scorecard-binauthz-test-good.

  2. Lihat file kebijakan pengesahan untuk kasus kegagalan. sh cat policy-binauthz.yaml

  3. (Opsional) Lihat file konfigurasi build untuk kasus kegagalan.

    cat samples/signer/cloudbuild.yaml
    
  4. Kirim build:

    gcloud builds submit \
        --substitutions=_KMS_KEY_NAME=$KMS_KEY_NAME,_KMS_DIGEST_ALG=$KMS_DIGEST_ALG \
        --config=cloudbuild.yaml
    
  5. Verifikasi hasilnya:

    gsutil cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "passed scorecard attestation policy check"
    
  6. Mendapatkan URL image container yang dibuat dan diperiksa oleh kartu skor

    export IMAGE_URI=$(gsutil cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep -o "Attestation for image .* is successfully uploaded" txt | cut -d' ' -f4 | tr -d '"')
    
  7. Pastikan pengesahan telah dibuat untuk image container. Attestor Kartu Skor menggunakan ID Catatan ossf-scorecard-attestation, dan nama catatan projects/${PROJECT_ID}/notes/ossf-scorecard-attestation.

    gcloud container binauthz attestations list \
        --attestor="projects/${PROJECT_ID}/attestors/ossf-scorecard-attestor" \
        --filter="resourceUri='https://${IMAGE_URI}'"
    

Pembersihan

Untuk membersihkan resource yang digunakan dalam dokumen ini, Anda dapat menghapus project:

gcloud projects delete $PROJECT_ID

Langkah selanjutnya