Tutorial ini menunjukkan cara menggunakan Kartu Skor OpenSSF untuk memeriksa image container guna menemukan praktik terbaik keamanan supply chain. Attester Kartu Skor berjalan sebagai bagian dari pipeline Cloud Build untuk membuat pengesahan yang dapat diverifikasi oleh Otorisasi Biner sebelum deployment. Langkah verifikasi ini mencegah artefak penampung yang disusupi di-deploy ke produksi, yang dapat mencegah beberapa class kerentanan supply chain.
Ringkasan
Open Source Security Foundation (OpenSSF) adalah organisasi yang menyediakan alat, layanan, dan infrastruktur untuk inisiatif keamanan open source. Kartu skor adalah alat, yang dikelola oleh OpenSSF, yang memindai repositori pengelolaan kode sumber (SCM) untuk praktik terbaik keamanan supply chain.
Scorecard Attestor adalah alat yang terintegrasi dengan Kartu Skor yang memungkinkan Anda membuat pengesahan Otorisasi Biner berdasarkan kebijakan yang Anda konfigurasi. Scorecard Attestor menjalankan Scorecard terhadap repositori SCM image penampung, menghasilkan hasil, mengevaluasi hasil terhadap kebijakan, dan menghasilkan pengesahan jika kebijakan terpenuhi.
Dalam tutorial ini, Anda akan mem-build repositori contoh, lalu menggunakan Scorecard Attestor. Setiap contoh pipeline berisi langkah-langkah build berikut:
build
: Mem-build contoh image container.push
: Kirim image ke Container Registry.attest
: Periksa dan tanda tangani gambar, menggunakan Scorecard Attestor untuk membuat pengesahan berdasarkan kebijakan.
Pada langkah attest
di setiap pipeline, Scorecard Attestor melakukan hal berikut:
- Mengambil data tentang repositori SCM untuk image container yang baru dibuat.
- Menjalankan Kartu Skor pada data mentah dan mengevaluasi repositori SCM berdasarkan kebijakan yang ditentukan pengguna.
- Jika semua kebijakan terpenuhi, Scorecard Attestor akan membuat pengesahan.
- Jika salah satu kebijakan tidak terpenuhi, Scorecard Attestor tidak akan membuat pengesahan.
Pada waktu deployment, Otorisasi Biner akan memeriksa pengesahan yang dapat diverifikasi. Tanpa tag, penegak 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:
- Menyiapkan Scorecard Attestor sebagai builder kustom Cloud Build.
- Melihat dan mengonfigurasi kebijakan Scorecard Attestor.
- Jalankan Scorecard Attestor di repositori contoh untuk membuat pengesahan berdasarkan kebijakan.
- Jalankan Scorecard Attestor di repositori contoh dalam mode hanya verifikasi tanpa membuat pengesahan. ## Sebelum memulai
Di bagian ini, Anda akan melakukan penyiapan sistem satu kali.
Menyiapkan lingkungan Anda
Simpan project Google Cloud Anda dalam variabel lingkungan.
export PROJECT_ID=PROJECT_ID
Ganti PROJECT_ID dengan project Google Cloud Anda.
Tetapkan project ID default ke project Google Cloud Anda:
gcloud config set project $PROJECT_ID
Simpan nomor project dalam variabel lingkungan untuk langkah selanjutnya:
export PROJECT_NUMBER=$(gcloud projects list --filter="${PROJECT_ID}" \ --format="value(PROJECT_NUMBER)")
Aktifkan 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 Editor Catatan Analisis Artefak untuk mengelola penanda tangan.containeranalysis.notes.occurrences.viewer
: menambahkan peran Kejadian Analisis Artefak untuk Catatan guna mengelola kejadian kerentanan dan pengesahan.roles/containeranalysis.occurrences.editor
: menambahkan peran Editor Peristiwa Artifact Analysis untuk membuat peristiwa pengesahan di Artifact Analysis.cloudkms.signer
: menambahkan peran Cloud KMS CryptoKey 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.
Buat key ring Cloud KMS baru dengan nama scorecard-attestor-key-ring:
gcloud kms keyrings create scorecard-attestor-key-ring \ --location global
Buat kunci Cloud KMS baru bernama scorecard-attestor-key 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"
Simpan algoritma ringkasan dan Cloud KMS dalam variabel lingkungan untuk langkah-langkah selanjutnya:
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
Buat attestor Otorisasi Biner. Kemudian, Pengesah 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"
Kaitkan pengautentikasi Binary Authorization 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 Kartu Skor OpenSSF. Build gambar berhasil, tetapi tidak membuat pengesahan. Repositori dasar berisi beberapa praktik keamanan supply chain yang tidak direkomendasikan, seperti dependensi yang tidak disematkan ke Debian 10 di Dockerfile, dan artefak biner yang dikompilasi yang diperiksa ke dalam repositori sumber. Hal ini merupakan pelanggaran terhadap kebijakan pengesahan di repositori.
Clone repositori pengujian: scorecard-binauthz-test-bad.
Lihat file kebijakan pengesahan untuk kasus kegagalan.
cat policy-binauthz.yaml
(Opsional) Lihat file konfigurasi build untuk kasus kegagalan.
cat samples/signer/cloudbuild.yaml
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"
Simpan ID build dari build terakhir:
export BUILD_ID=$(gcloud builds list --limit=1 --format="value('ID')")
Verifikasi hasilnya:
gcloud storage cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "failed scorecard attestation policy check"
Kirim build contoh kasus keberhasilan
Di bagian ini, Anda akan mem-build image penampung yang memenuhi kebijakan pengesahan Kartu Skornya. Dalam hal ini, Pengesah Kartu Skor akan membuat pengesahan.
Untuk mengirimkan build contoh kasus sukses ke Cloud Build, lakukan hal berikut:
Clone repositori pengujian: scorecard-binauthz-test-good.
Lihat file kebijakan pengesahan untuk kasus kegagalan.
sh cat policy-binauthz.yaml
(Opsional) Lihat file konfigurasi build untuk kasus kegagalan.
cat samples/signer/cloudbuild.yaml
Kirim build:
gcloud builds submit \ --substitutions=_KMS_KEY_NAME=$KMS_KEY_NAME,_KMS_DIGEST_ALG=$KMS_DIGEST_ALG \ --config=cloudbuild.yaml
Verifikasi hasilnya:
gcloud storage cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "passed scorecard attestation policy check"
Mendapatkan URL image container yang di-build dan diperiksa oleh kartu skor
export IMAGE_URI=$(gcloud storage 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 '"')
Pastikan bahwa pengesahan dibuat untuk image container. Scorecard Attestor menggunakan ID Catatan
ossf-scorecard-attestation
, dan nama catatanprojects/${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 berikutnya
- Lihat dokumentasi Scorecard Attestor
- Pelajari Kartu Skor lebih lanjut
- Pelajari Otorisasi Biner lebih lanjut
- Membuat pengautentikasi melalui konsol Google Cloud atau alat command line