Tutorial ini menunjukkan cara membuat pengesahan Otorisasi Biner di pipeline Cloud Build. Penyiapan ini membantu memastikan bahwa hanya image container yang dibuat dan ditandatangani sebagai bagian dari proses build Cloud Build yang otomatis diizinkan untuk berjalan di lingkungan deployment Anda.
Untuk mempelajari cara menggunakan pemindaian kerentanan Analisis Artefak di pipeline build Cloud Build, lihat Membuat pengesahan dengan Voucher atau Membuat pengesahan dengan Kritis Signer.
Ringkasan Cloud Build
Cloud Build (ringkasan) mengambil kode sumber yang disimpan di Cloud Source Repositories atau repositori lain yang dihosting, menjalankan build dan pengujian Anda, serta menyimpan output software yang dihasilkan di Container Registry atau layanan penyimpanan lain di Google Cloud Platform.
Ringkasan Otorisasi Biner
Otorisasi Biner (ringkasan) adalah produk Google Cloud yang menerapkan batasan waktu deployment pada aplikasi. Integrasi Google Kubernetes Engine (GKE)-nya memungkinkan pengguna menerapkan bahwa container yang di-deploy ke cluster Kubernetes ditandatangani secara kriptografis oleh otoritas tepercaya dan diverifikasi oleh attestor Otorisasi Biner.
Anda dapat mengonfigurasi Otorisasi Biner untuk mewajibkan attestations berdasarkan lokasi kode sumber untuk mencegah deployment image container yang dibuat dari sumber yang tidak sah.
Untuk mempelajari lebih lanjut:
Arsitektur
Diagram berikut menunjukkan komponen dalam penyiapan Otorisasi Biner/Cloud Build:
Dalam pipeline ini:
Kode untuk membangun image container dikirim ke repositori sumber, seperti Cloud Source Repositories.
Alat continuous integration (CI), Cloud Build membuat dan menguji container.
Build mengirim image container ke Container Registry atau registry lain yang menyimpan image yang Anda build.
Cloud Key Management Service, yang menyediakan pengelolaan kunci untuk pasangan kunci kriptografis, menandatangani image container. Tanda tangan yang dihasilkan kemudian disimpan dalam pengesahan yang baru dibuat.
Pada waktu deployment, attestor akan memverifikasi pengesahan menggunakan kunci publik dari pasangan kunci. Otorisasi Biner menerapkan kebijakan ini dengan mewajibkan attestations bertanda tangan untuk men-deploy image container.
Membuat pengesahan menggunakan Cloud Build dengan Cloud Key Management Service
Bagian ini menunjukkan cara menerapkan arsitektur di atas. Build ini menggunakan langkah build kustom open source dari komunitas Cloud Build. Langkah build kustom menandatangani image container, membuat pengesahan, dan menguploadnya ke Otorisasi Biner.
Mengonfigurasi Identity and Access Management
Untuk menggunakan langkah build ini, akun layanan Cloud Build memerlukan peran IAM berikut:
- Viewer Attestor Otorisasi Biner
roles/binaryauthorization.attestorsViewer
- Penanda Tangan/Pemverifikasi Cloud KMS Bigtable (jika menggunakan kunci di KMS untuk menandatangani pengesahan)
roles/cloudkms.signerVerifier
- Pelampir Catatan Analisis Artefak
roles/containeranalysis.notes.attacher
Perintah berikut dapat digunakan untuk menambahkan peran ke Akun Layanan Cloud Build project Anda:
Aktifkan Cloud Build:
Aktifkan Cloud Build API dalam project Google Cloud target.
Simpan project ID Anda ke variabel lingkungan:
PROJECT_ID=PROJECT_ID
dengan PROJECT_ID sebagai ID project Google Cloud Anda.
Tetapkan project Google Cloud CLI:
gcloud config set project ${PROJECT_ID}
Dapatkan nomor project:
PROJECT_NUMBER=$(gcloud projects list --filter="${PROJECT_ID}" --format="value(PROJECT_NUMBER)")
Tambahkan peran Binary Authorization Attestor Viewer ke Cloud Build Service Account:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role roles/binaryauthorization.attestorsViewer
Tambahkan peran Penanda Tangan/Verifier Cloud KMS ke Akun Layanan Cloud Build (Penandatanganan berbasis KKMS):
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role roles/cloudkms.signerVerifier
Tambahkan peran Artifact Analysis Notes Attacher ke Cloud Build Service Account:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role roles/containeranalysis.notes.attacher
Bangun dan daftarkan langkah build kustom dengan Cloud Build
Clone repo komunitas build Google Cloud:
git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
Mengonfigurasi penanda tangan Otorisasi Biner untuk Cloud Build:
Sebelum digunakan, kode untuk langkah build kustom harus di-build ke dalam container dan dikirim ke Cloud Build. Caranya, jalankan perintah berikut:
cd cloud-builders-community/binauthz-attestation gcloud builds submit . --config cloudbuild.yaml
Langkah build kustom telah dikirim ke Google Container Registry project Anda saat ini dan sekarang siap digunakan.
Membuat attestor di Otorisasi Biner
Buat attestor yang akan digunakan oleh Otorisasi Biner pada waktu deployment untuk memverifikasi pengesahan.
Siapkan pasangan kunci Cloud Key Management Service dan attestor di Otorisasi Biner:
Lihat Membuat attestor menggunakan CLI
Memverifikasi bahwa attestor telah dibuat
gcloud --project="${ATTESTOR_PROJECT_ID}" container binauthz attestors list
Tambahkan langkah "buat pengesahan" ke cloudbuild.yaml
Untuk menggunakan langkah binauthz-attestation
, Anda harus memperbarui cloudbuild.yaml
dengan menambahkan langkah yang akan menandatangani build yang telah dikirim ke
Container Registry.
Dua metode disediakan di bawah ini:
Update
cloudbuild.yaml
secara manual.Jalankan contoh pipeline dengan variabel lingkungan yang Anda tetapkan sebelumnya.
Mengupdate cloudbuild.yaml
secara manual
Update
cloudbuild.yaml
Anda secara manual dengan menambahkan langkah build di bawah setelah langkah saat container Anda diupload ke Container Registry. Catatan: Anda harus mengganti ATTESTOR_NAME, KMS_KEY_LOCATION, KMS_KEYRING_NAME, KMS_KEY_NAME, dan KMS_KEY_VERSION dengan nilai Anda sendiri secara manual:- id: 'create-attestation' name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest' args: - '--artifact-url' - 'gcr.io/${PROJECT_ID}/helloworld:latest' - '--attestor' - 'projects/${PROJECT_ID}/attestors/ATTESTOR_NAME' - '--keyversion' - 'projects/${PROJECT_ID}/locations/KMS_KEY_LOCATION/keyRings/KMS_KEYRING_NAME/cryptoKeys/KMS_KEY_NAME/cryptoKeyVersions/KMS_KEY_VERSION'
Hal berikut juga valid:
- id: 'create-attestation' name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest' args: - '--artifact-url' - 'gcr.io/${PROJECT_ID}/helloworld:latest' - '--attestor' - 'ATTESTOR_NAME' - '--attestor-project' - '${PROJECT_ID}' - '--keyversion' - 'KEY_VERSION' - '--keyversion-project' - '${PROJECT_ID}' - '--keyversion-location' - 'KEY_LOCATION' - '--keyversion-keyring' - 'KEYRING_NAME' - '--keyversion-key' - 'KEY_NAME'
Opsional: Menguji pipeline
Untuk menguji contoh pipeline pengesahan Cloud Build, lakukan langkah-langkah berikut:
Buat file
cloudbuild.yaml
dengan variabel lingkungan yang telah Anda tetapkan sebelumnya:cd example cat <<EOM > cloudbuild_example.yaml steps: - id: 'build' name: 'gcr.io/cloud-builders/docker' args: - 'build' - '-t' - 'gcr.io/$PROJECT_ID/helloworld:latest' - '.' - id: 'publish' name: 'gcr.io/cloud-builders/docker' args: - 'push' - 'gcr.io/$PROJECT_ID/helloworld:latest' - id: 'create-attestation' name: 'gcr.io/$PROJECT_ID/binauthz-attestation:latest' args: - '--artifact-url' - 'gcr.io/$PROJECT_ID/helloworld:latest' - '--attestor' - 'projects/$PROJECT_ID/attestors/${ATTESTOR_NAME}' - '--keyversion' - 'projects/${PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION}' tags: ['cloud-builders-community'] EOM
Jalankan Cloud Build dengan contoh
cloudbuild_example.yaml
:Jalankan perintah berikut dari direktori
cloud-builders-community/binauthz-attestation/example
:gcloud builds submit . --config cloudbuild_example.yaml
Langkah selanjutnya
- Buat pengesahan setelah memeriksa kerentanan pada image menggunakan Kritis Signer atau Voucher.
- Buat langkah Cloud Build kustom untuk menandatangani dan mengupload pengesahan Otorisasi Biner di GitHub.