Halaman ini menunjukkan cara menggunakan pemeriksaan tanda tangan Sigstore validasi berkelanjutan (CV) Otorisasi Biner. Pemeriksaan ini memverifikasi tanda tangan image container yang dihasilkan Sigstore yang terkait dengan Pod yang berjalan di cluster GKE tempat CV diaktifkan. Perbedaan utama antara pemeriksaan ini dan pemeriksaan pengesahan penandatanganan sederhana adalah alur kerja penandatanganan Sigstore tidak menggunakan catatan Analisis Artefak untuk menautkan tanda tangan ke image. Semua tanda tangan disimpan bersama gambar yang ditandatangani.
Pemeriksaan ini hanya mendukung repositori Artifact Registry.
Biaya
Panduan ini menggunakan layanan Google Cloud berikut:
- Otorisasi Biner, tetapi CV tersedia tanpa biaya selama tahap Pratinjau
- GKE
- Cloud Key Management Service
- Artifact Registry
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization, Cloud Key Management Service, Google Kubernetes Engine, Artifact Registry APIs:
gcloud services enable binaryauthorization.googleapis.com
cloudkms.googleapis.com container.googleapis.com artifactregistry.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization, Cloud Key Management Service, Google Kubernetes Engine, Artifact Registry APIs:
gcloud services enable binaryauthorization.googleapis.com
cloudkms.googleapis.com container.googleapis.com artifactregistry.googleapis.com - Pastikan gcloud CLI diupdate ke versi terbaru.
- Instal alat command line
kubectl
. - Jika kebijakan Otorisasi Biner dan cluster GKE Anda berada di project yang berbeda, pastikan Otorisasi Biner diaktifkan di kedua project.
- Instal alat command line
cosign
.
Peran yang diperlukan
Bagian ini menunjukkan cara menetapkan peran untuk pemeriksaan ini.
Ringkasan
Jika menjalankan semua produk yang disebutkan dalam panduan ini dalam project yang sama, Anda tidak perlu menetapkan izin apa pun. Otorisasi Biner mengonfigurasi peran dengan benar saat Anda mengaktifkannya. Jika menjalankan produk di project yang berbeda, Anda harus menetapkan peran seperti yang dijelaskan di bagian ini.
Untuk memastikan bahwa Agen Layanan Otorisasi Biner di setiap project memiliki izin yang diperlukan untuk mengevaluasi pemeriksaan tanda tangan CV Sigstore, minta administrator untuk memberikan Agen Layanan Otorisasi Biner di setiap project peran IAM berikut:
-
Jika project cluster Anda berbeda dengan project kebijakan:
Binary Authorization Policy Evaluator (
roles/binaryauthorization.policyEvaluator
) di Binary Authorization Service Agent project cluster -
Jika project repositori image Anda berbeda dengan project kebijakan:
Artifact Registry Reader (
roles/artifactregistry.reader
) di Agen Layanan Otorisasi Biner project kebijakan
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Administrator Anda mungkin juga dapat memberikan izin yang diperlukan kepada Agen Layanan Otorisasi Biner di setiap project melalui peran khusus atau peran bawaan lainnya.
Memberikan peran menggunakan gcloud CLI
Untuk memastikan bahwa Agen Layanan Otorisasi Biner di setiap project memiliki izin yang diperlukan untuk mengevaluasi pemeriksaan tanda tangan CV Sigstore, berikan peran IAM berikut kepada Agen Layanan Otorisasi Biner di setiap project:
Berikan izin kepada Agen Layanan Otorisasi Biner project cluster untuk mengakses kebijakan di project kebijakan.
Dapatkan agen layanan Binary Authorization project cluster:
PROJECT_NUMBER=$(gcloud projects list --filter="projectId:CLUSTER_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") CLUSTER_SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
Ganti
CLUSTER_PROJECT_ID
dengan project ID cluster.Izinkan CV mengevaluasi kebijakan di cluster:
gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \ --member="serviceAccount:$CLUSTER_SERVICE_ACCOUNT" \ --role='roles/binaryauthorization.policyEvaluator'
Ganti
POLICY_PROJECT_ID
dengan ID project yang berisi kebijakan Anda.
Izinkan Agen Layanan Otorisasi Biner project kebijakan untuk mengakses tanda tangan di repositori Anda:
Dapatkan agen layanan Otorisasi Biner project kebijakan:
PROJECT_NUMBER=$(gcloud projects list \ --filter="projectId:POLICY_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
Ganti
POLICY_PROJECT_ID
dengan ID project yang berisi kebijakan Anda.Berikan peran:
gcloud projects add-iam-policy-binding REPOSITORY_PROJECT_ID \ --member="serviceAccount:$SERVICE_ACCOUNT" \ --role='roles/artifactregistry.reader'
Ganti
REPOSITORY_PROJECT_ID
dengan ID project yang berisi repositori Anda.
Membuat pasangan kunci
Di bagian ini, Anda akan membuat pasangan kunci asimmetrik Elliptic Curve Digital Signature Algorithm (ECDSA).
Anda menggunakan kunci pribadi untuk menandatangani image, yang akan membuat pengesahan. Anda menyertakan kunci publik dalam kebijakan platform. Saat memeriksa pengesahan, CV menggunakan kunci publik untuk memverifikasi pengesahan.
Anda dapat menggunakan Cloud Key Management Service (Cloud KMS) atau kunci lokal, tetapi sebaiknya gunakan kunci Cloud KMS untuk produksi.
PKIX Cloud KMS Cosign
Siapkan variabel lingkungan yang diperlukan untuk membuat pasangan kunci. Untuk melakukannya, sebaiknya isi placeholder dalam perintah berikut, lalu jalankan perintah tersebut.
KMS_KEY_PROJECT_ID=KMS_KEY_PROJECT_ID KMS_KEYRING_NAME=KMS_KEYRING_NAME KMS_KEY_NAME=KMS_KEY_NAME KMS_KEY_LOCATION=global KMS_KEY_PURPOSE=asymmetric-signing KMS_KEY_ALGORITHM=ec-sign-p256-sha256 KMS_PROTECTION_LEVEL=software KMS_KEY_VERSION=1
Ganti kode berikut:
KMS_KEY_PROJECT_ID
: project ID AndaKMS_KEYRING_NAME
: nama untuk key ring Cloud KMS AndaKMS_KEY_NAME
: nama untuk kunci Cloud KMS Anda
Buat kunci dengan CLI Cosign:
cosign generate-key-pair \ --kms gcpkms://projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}
Catat lokasi kunci publik:
Cosign otomatis menyimpan kunci publik yang dihasilkan sebagai
cosign.pub
di direktori tempat perintahgenerate-key-pair
dijalankan. Simpan lokasi file ini dalam variabel untuk perintah mendatang.PUBLIC_KEY_FILE="$(pwd)/cosign.pub"
PKIX Cloud KMS gcloud
Untuk membuat pasangan kunci di Cloud KMS, lakukan hal berikut:
Siapkan variabel lingkungan yang diperlukan untuk membuat pasangan kunci. Untuk melakukannya, sebaiknya isi placeholder dalam perintah berikut, lalu jalankan perintah tersebut.
KMS_KEY_PROJECT_ID=KMS_KEY_PROJECT_ID KMS_KEYRING_NAME=KMS_KEYRING_NAME KMS_KEY_NAME=KMS_KEY_NAME KMS_KEY_LOCATION=global KMS_KEY_PURPOSE=asymmetric-signing KMS_KEY_ALGORITHM=ec-sign-p256-sha256 KMS_PROTECTION_LEVEL=software KMS_KEY_VERSION=1
Ganti kode berikut:
KMS_KEY_PROJECT_ID
: project ID AndaKMS_KEYRING_NAME
: nama untuk key ring Cloud KMS AndaKMS_KEY_NAME
: nama untuk kunci Cloud KMS Anda
Buat key ring:
gcloud kms keyrings create ${KMS_KEYRING_NAME} \ --location=${KMS_KEY_LOCATION} \ --project=${KMS_KEY_PROJECT_ID}
Buat kunci:
gcloud kms keys create ${KMS_KEY_NAME} \ --location=${KMS_KEY_LOCATION} \ --keyring=${KMS_KEYRING_NAME} \ --purpose=${KMS_KEY_PURPOSE} \ --default-algorithm=${KMS_KEY_ALGORITHM} \ --protection-level=${KMS_PROTECTION_LEVEL} \ --project=${KMS_KEY_PROJECT_ID}
Ekspor materi kunci publik ke file:
PUBLIC_KEY_FILE="$(pwd)/cosign.pub" gcloud kms keys versions get-public-key 1 \ --key=${KMS_KEY_NAME} \ --keyring=${KMS_KEYRING_NAME} \ --location=${KMS_KEY_LOCATION} \ --output-file=${PUBLIC_KEY_FILE} \ --project=${KMS_KEY_PROJECT_ID}
Kunci lokal
Untuk membuat pasangan kunci secara lokal, lakukan hal berikut:
cosign generate-key-pair
PUBLIC_KEY_FILE="$(pwd)/cosign.pub"
PRIVATE_KEY_FILE="$(pwd)/cosign.key"
Membuat kebijakan platform
Untuk membuat kebijakan platform CV dengan pemeriksaan tanda tangan Sigstore, lakukan hal berikut:
Buat file kebijakan platform pemeriksaan tanda tangan Sigstore:
cat > POLICY_PATH <<EOF gkePolicy: checkSets: - checks: - displayName: sigstore-signature-check sigstoreSignatureCheck: sigstoreAuthorities: - displayName: sigstore-authority publicKeySet: publicKeys: publicKeyPem: | $(awk '{printf " %s\n", $0}' ${PUBLIC_KEY_FILE}) EOF
Ganti
POLICY_PATH
dengan jalur ke file kebijakan.Buat kebijakan platform:
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
- POLICY_ID: ID kebijakan platform
pilihan Anda. Jika kebijakan berada di project lain, Anda dapat menggunakan nama resource lengkap:
projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
. - POLICY_PATH: Jalur ke file kebijakan.
- POLICY_PROJECT_ID: Project ID kebijakan.
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=POLICY_PATH \ --project=POLICY_PROJECT_ID
Windows (PowerShell)
gcloud beta container binauthz policy create POLICY_ID ` --platform=gke ` --policy-file=POLICY_PATH ` --project=POLICY_PROJECT_ID
Windows (cmd.exe)
gcloud beta container binauthz policy create POLICY_ID ^ --platform=gke ^ --policy-file=POLICY_PATH ^ --project=POLICY_PROJECT_ID
- POLICY_ID: ID kebijakan platform
pilihan Anda. Jika kebijakan berada di project lain, Anda dapat menggunakan nama resource lengkap:
Mengaktifkan CV
Anda dapat membuat cluster baru atau mengupdate cluster yang ada untuk menggunakan pemantauan CV dengan kebijakan platform berbasis pemeriksaan.
Membuat cluster yang menggunakan pemantauan CV
Di bagian ini, Anda akan membuat cluster yang hanya menggunakan pemantauan CV dengan kebijakan platform berbasis pemeriksaan.
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
CLUSTER_NAME
: nama cluster.LOCATION
: lokasi—misalnya,us-central1
atauasia-south1
.POLICY_PROJECT_ID
: ID project tempat kebijakan disimpan.POLICY_ID
: ID kebijakan.CLUSTER_PROJECT_ID
: project ID cluster.
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud beta container clusters create CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters create CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters create CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
Membuat cluster yang menggunakan pemantauan CV dan penerapan
Di bagian ini, Anda akan membuat cluster yang menggunakan penegakan kebijakan project-singleton dan pemantauan CV dengan kebijakan platform berbasis pemeriksaan:
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
CLUSTER_NAME
: nama cluster.LOCATION
: lokasi—misalnya,us-central1
atauasia-south1
.POLICY_PROJECT_ID
: ID project tempat kebijakan disimpan.POLICY_ID
: ID kebijakan.CLUSTER_PROJECT_ID
: project ID cluster.
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud beta container clusters create CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters create CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters create CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
Memperbarui cluster untuk menggunakan pemantauan CV
Di bagian ini, Anda akan mengupdate cluster untuk menggunakan pemantauan CV hanya dengan kebijakan platform berbasis pemeriksaan. Jika cluster sudah mengaktifkan penerapan kebijakan project-singleton, menjalankan perintah ini akan menonaktifkannya. Sebagai gantinya, pertimbangkan untuk mengupdate cluster dengan pemantauan CV dan penerapan diaktifkan.
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
CLUSTER_NAME
: nama clusterLOCATION
: lokasi—misalnya:us-central1
atauasia-south1
POLICY_PROJECT_ID
: ID project tempat kebijakan disimpanPOLICY_ID
: ID kebijakanCLUSTER_PROJECT_ID
: project ID cluster
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters update CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters update CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
Mengupdate cluster untuk menggunakan pemantauan CV dan penerapan
Di bagian ini, Anda akan mengupdate cluster untuk menggunakan penegakan kebijakan project-singleton dan pemantauan CV dengan kebijakan platform berbasis pemeriksaan.
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
CLUSTER_NAME
: nama clusterLOCATION
: lokasi—misalnya:us-central1
atauasia-south1
POLICY_PROJECT_ID
: ID project tempat kebijakan disimpanPOLICY_ID
: ID kebijakanCLUSTER_PROJECT_ID
: project ID cluster
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters update CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters update CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
CV Pengujian
Di bagian ini, Anda akan menguji CV dengan men-deploy image yang ditandatangani. Dalam hal ini, pemeriksaan tanda tangan CV Sigstore akan memverifikasi tanda tangan dan tidak menghasilkan entri log.
Kemudian, Anda mencoba men-deploy image yang tidak ditandatangani yang berbeda. Dalam hal ini, pemeriksaan CV tidak dapat menemukan tanda tangan yang valid dan mencatat pelanggaran ke Cloud Logging.
Menandatangani gambar
Untuk memenuhi pemeriksaan, gambar memerlukan tanda tangan yang valid. Untuk membuat tanda tangan, lakukan hal berikut:
Buat variabel yang Anda gunakan untuk menandatangani gambar:
IMAGE_PATH=IMAGE_PATH IMAGE_DIGEST=sha256:IMAGE_DIGEST_SHA IMAGE_TO_SIGN="${IMAGE_PATH}@${IMAGE_DIGEST}"
Ganti kode berikut:
IMAGE_PATH
: jalur ke gambar AndaIMAGE_DIGEST_SHA
: hash SHA ringkasan image Anda
Tanda tangani image dan kirim tanda tangan ke Artifact Registry:
Cloud KMS PKIX
Tanda tangani image dengan kunci yang dihosting di Cloud KMS dan kirimkan tanda tangan ke Artifact Registry:
cosign sign \ --key gcpkms://projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME} \ ${IMAGE_TO_SIGN}
Kunci lokal
Tanda tangani image dengan kunci pribadi lokal dan kirim tanda tangan ke Artifact Registry.
cosign sign --key ${PRIVATE_KEY_FILE} ${IMAGE_TO_SIGN}
Merespons perintah Tanda Tangani Bersama:
Setelah menjalankan perintah
cosign sign
, Cosign akan menanyakan apakah Anda ingin mengupload tanda tangan ke Rekor log transparansi. Jawaby
ataun
untuk perintah. Untuk mempelajari Rekor lebih lanjut, lihat dokumentasi Rekor.
Memverifikasi tanda tangan secara manual
Untuk memverifikasi tanda tangan secara manual, lakukan hal berikut:
Pastikan tanda tangan ada di Artifact Registry:
Konsol Google Cloud
Buka halaman Artifact Registry di konsol Google Cloud.
Dalam daftar repositori, klik nama repositori yang berisi image Anda.
Klik nama gambar yang Anda tanda tangani.
Temukan item yang berisi tanda tangan. Item ini memiliki tag:
sha256-[image digest].sig
. Hanya boleh ada satu item dengan tag.Klik Manifes.
Anda akan melihat file berformat JSON dengan berbagai kolom. Setiap tanda tangan berada dalam satu elemen daftar
layers
, di petaannotations
. Tanda tangan terletak di kuncidev.cosignproject.cosign/signature
.Berikut adalah contoh manifes:
{ "schemaVersion": 2, "mediaType": "application/vnd.oci.image.manifest.v1+json", "config": { "mediaType": "application/vnd.oci.image.config.v1+json", "size": SIZE_OF_LAYERS, "digest": "DIGEST_OF_LAYERS" }, "layers": [ { "mediaType": "application/vnd.dev.cosign.simplesigning.v1+json", "size": SIZE_OF_ANNOTATIONS, "digest": "DIGEST_OF_ANNOTATIONS", "annotations": { "dev.cosignproject.cosign/signature": "BASE64_SIGNATURE", "dev.sigstore.cosign/bundle": "BUNDLE" } } ] }
Contoh manifes mencakup hal berikut:
SIZE_OF_LAYERS
: ukuran arraylayers
dalam byteDIGEST_OF_LAYERS
: ringkasan arraylayers
SIZE_OF_ANNOTATIONS
: ukuran kamusannotations
dalam byteDIGEST_OF_ANNOTATIONS
: ringkasan kamusannotations
BASE64_SIGNATURE
: Tanda tangan mentah yang dienkode dalam format base64. Ini adalah tanda tangan yang akan digunakan untuk verifikasiBUNDLE
: Metadata khusus Sigstore
Detail selengkapnya tentang format manifes dapat ditemukan di spesifikasi tanda tangan cosign Sigstore.
Command line
Temukan artefak yang benar:
Cantumkan item yang disimpan dengan gambar:
gcloud artifacts docker tags list ${IMAGE_PATH}
Contoh output terlihat seperti berikut:
Listing items under project PROJECT_ID, location REPOSITORY_LOCATION, repository REPOSITORY_NAME. TAG IMAGE DIGEST latest us-east1-docker.pkg.dev/my-project/my-repo/my-image sha256:abc123 sha256-abc123.sig us-east1-docker.pkg.dev/my-project/my-repo/my-image sha256:def456
Dalam output, artefak dengan tag
sha256-abc123.sig
berisi tanda tangan dalam manifesnya.Mendapatkan manifes
Untuk mendapatkan manifes artefak dengan tag
sha256-IMAGE_DIGEST_SHA.sig
, jalankan perintah berikut:curl -X GET -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "X-Goog-User-Project: REPOSITORY_PROJECT_ID" \ "https://REPOSITORY_LOCATION-docker.pkg.dev/v2/REPOSITORY_PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME/manifests/sha256-IMAGE_DIGEST_SHA.sig"
Ganti kode berikut:
REPOSITORY_PROJECT_ID
: ID project yang berisi repositoriREPOSITORY_LOCATION
: lokasi repositoriREPOSITORY_NAME
: nama repositoriIMAGE_NAME
: nama image
Anda akan melihat file berformat JSON dengan berbagai kolom. Setiap tanda tangan berada dalam satu elemen daftar
layers
, di petaannotations
. Tanda tangan terletak di kuncidev.cosignproject.cosign/signature
.Contoh manifes ditampilkan di sini:
{ "schemaVersion": 2, "mediaType": "application/vnd.oci.image.manifest.v1+json", "config": { "mediaType": "application/vnd.oci.image.config.v1+json", "size": SIZE_OF_LAYERS, "digest": "DIGEST_OF_LAYERS" }, "layers": [ { "mediaType": "application/vnd.dev.cosign.simplesigning.v1+json", "size": SIZE_OF_ANNOTATIONS, "digest": "DIGEST_OF_ANNOTATIONS", "annotations": { "dev.cosignproject.cosign/signature": "BASE64_SIGNATURE", "dev.sigstore.cosign/bundle": "BUNDLE" } } ] }
Contoh manifes mencakup hal berikut:
SIZE_OF_LAYERS
: ukuran arraylayers
dalam byteDIGEST_OF_LAYERS
: ringkasan arraylayers
SIZE_OF_ANNOTATIONS
: ukuran kamusannotations
dalam byteDIGEST_OF_ANNOTATIONS
: ringkasan kamusannotations
BASE64_SIGNATURE
: Tanda tangan mentah yang dienkode dalam format base64. Ini adalah tanda tangan yang akan digunakan untuk verifikasiBUNDLE
: Metadata khusus Sigstore
Detail selengkapnya tentang format manifes dapat ditemukan di spesifikasi tanda tangan cosign Sigstore.
Verifikasi tanda tangan secara manual:
Gunakan
cosign verify
untuk memverifikasi tanda tangan yang diupload:Cloud KMS PKIX
cosign verify --key gcpkms://projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME} \ ${IMAGE_PATH}@${IMAGE_DIGEST}
Kunci lokal
cosign verify --key {PUBLIC_KEY_FILE} ${IMAGE_PATH}@${IMAGE_DIGEST}
Output perintah menyatakan bahwa
The signatures were verified against the specified public key
jika verifikasi berhasil.
Men-deploy image yang ditandatangani
Untuk men-deploy image yang ditandatangani, lakukan hal berikut:
Konfigurasi
kubectl
:gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID
Ganti kode berikut:
CLUSTER_NAME
: nama cluster AndaLOCATION
: lokasi clusterCLUSTER_PROJECT_ID
: project ID cluster
Deploy image dan periksa deployment terhadap kebijakan Otorisasi Biner:
kubectl run hello-app-signed --image=${IMAGE_PATH}@${IMAGE_DIGEST}
Pod di-deploy. Karena image ditandatangani, CV tidak membuat entri log yang terkait dengan Pod ini.
Men-deploy image yang tidak ditandatangani
Di bagian ini, Anda akan men-deploy image yang tidak ditandatangani.
Karena kebijakan memerlukan tanda tangan dan image ini tidak memilikinya, CV secara rutin mencatat pelanggaran saat penampung berjalan.
Untuk men-deploy image, jalankan perintah berikut:
kubectl run hello-app-unsigned \
--image=UNSIGNED_IMAGE_PATH@UNSIGNED_IMAGE_DIGEST
Pod di-deploy. Karena image tidak memiliki pengesahan, CV menghasilkan entri log saat Pod berjalan.
Melihat log untuk entri CV
Anda dapat menelusuri entri Cloud Logging untuk menemukan error konfigurasi CV dan pelanggaran validasi kebijakan platform CV.
CV mencatat error dan pelanggaran ke Cloud Logging dalam waktu 24 jam. Anda biasanya dapat melihat entri dalam beberapa jam.
Melihat log error konfigurasi CV
Untuk melihat log error konfigurasi CV, jalankan perintah berikut:
gcloud logging read \
--order="desc" \
--freshness=7d \
--project=CLUSTER_PROJECT_ID \
'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "configErrorEvent"'
Output berikut menunjukkan error konfigurasi saat kebijakan platform CV tidak ditemukan:
{
"insertId": "141d4f10-72ea-4a43-b3ec-a03da623de42",
"jsonPayload": {
"@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent",
"configErrorEvent": {
"description": "Cannot monitor cluster 'us-central1-c.my-cluster': Resource projects/123456789/platforms/gke/policies/my-policy does not exist."
}
},
"resource": {
"type": "k8s_cluster",
"labels": {
"cluster_name": "my-cluster",
"location": "us-central1-c",
"project_id": "my-project"
}
},
"timestamp": "2024-05-28T15:31:03.999566Z",
"severity": "WARNING",
"logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
"receiveTimestamp": "2024-05-28T16:30:56.304108670Z"
}
Melihat pelanggaran validasi kebijakan platform CV
Jika tidak ada gambar yang melanggar kebijakan platform yang telah Anda aktifkan, tidak ada entri yang akan muncul di log.
Untuk melihat entri log CV selama tujuh hari terakhir, jalankan perintah berikut:
gcloud logging read \
--order="desc" \
--freshness=7d \
--project=CLUSTER_PROJECT_ID \
'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "policyName"'
Ganti CLUSTER_PROJECT_ID
dengan project ID cluster.
Jenis pemeriksaan
Log CV memeriksa informasi pelanggaran ke checkResults
. Dalam
entri, nilai checkType
menunjukkan pemeriksaan. Nilai untuk setiap pemeriksaan adalah
sebagai berikut:
ImageFreshnessCheck
SigstoreSignatureCheck
SimpleSigningAttestationCheck
SlsaCheck
TrustedDirectoryCheck
VulnerabilityCheck
Contoh log
Contoh entri CV Logging berikut menjelaskan image yang tidak sesuai yang melanggar pemeriksaan direktori tepercaya:
{
"insertId": "637c2de7-0000-2b64-b671-24058876bb74",
"jsonPayload": {
"podEvent": {
"endTime": "2022-11-22T01:14:30.430151Z",
"policyName": "projects/123456789/platforms/gke/policies/my-policy",
"images": [
{
"result": "DENY",
"checkResults": [
{
"explanation": "TrustedDirectoryCheck at index 0 with display name \"My trusted directory check\" has verdict NOT_CONFORMANT. Image is not in a trusted directory",
"checkSetName": "My check set",
"checkSetIndex": "0",
"checkName": "My trusted directory check",
"verdict": "NON_CONFORMANT",
"checkType": "TrustedDirectoryCheck",
"checkIndex": "0"
}
],
"image": "gcr.io/my-project/hello-app:latest"
}
],
"verdict": "VIOLATES_POLICY",
"podNamespace": "default",
"deployTime": "2022-11-22T01:06:53Z",
"pod": "hello-app"
},
"@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent"
},
"resource": {
"type": "k8s_cluster",
"labels": {
"project_id": "my-project",
"location": "us-central1-a",
"cluster_name": "my-test-cluster"
}
},
"timestamp": "2022-11-22T01:44:28.729881832Z",
"severity": "WARNING",
"logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
"receiveTimestamp": "2022-11-22T03:35:47.171905337Z"
}
Pembersihan
Bagian ini menjelaskan cara membersihkan pemantauan CV yang telah Anda konfigurasikan sebelumnya dalam panduan ini.
Anda dapat menonaktifkan pemantauan CV atau Otorisasi Biner dan CV di cluster Anda.
Menonaktifkan Otorisasi Biner di cluster
Untuk menonaktifkan penerapan CV dan Otorisasi Biner di cluster, jalankan perintah berikut:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=DISABLED \
--location=LOCATION \
--project=CLUSTER_PROJECT_ID
Ganti kode berikut:
CLUSTER_NAME
: nama clusterLOCATION
: lokasi clusterCLUSTER_PROJECT_ID
: project ID cluster
Menonaktifkan pemantauan kebijakan berbasis pemeriksaan di cluster
Untuk menonaktifkan CV dengan kebijakan berbasis pemeriksaan di cluster, dan mengaktifkan kembali penerapan menggunakan kebijakan penerapan Otorisasi Biner, jalankan perintah berikut:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
--location=LOCATION \
--project="CLUSTER_PROJECT_ID"
Ganti kode berikut:
CLUSTER_NAME
: nama clusterLOCATION
: lokasi clusterCLUSTER_PROJECT_ID
: project ID cluster
Perhatikan bahwa --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
setara dengan flag --enable-binauthz
yang lebih lama.
Menghapus kebijakan
Untuk menghapus kebijakan, jalankan perintah berikut. Anda tidak perlu menghapus kebijakan platform berbasis pemeriksaan untuk menonaktifkan audit kebijakan berbasis pemeriksaan.
gcloud beta container binauthz policy delete POLICY_ID \
--platform=gke \
--project="POLICY_PROJECT_ID"
Ganti kode berikut:
POLICY_ID
: ID kebijakanPOLICY_PROJECT_ID
: project ID kebijakan
Langkah selanjutnya
- Menggunakan pemeriksaan keaktualan gambar
- Menggunakan pemeriksaan pengesahan penandatanganan sederhana
- Menggunakan pemeriksaan tanda tangan Sigstore
- Menggunakan pemeriksaan SLSA
- Menggunakan pemeriksaan direktori tepercaya
- Menggunakan pemeriksaan kerentanan
- Melihat log CV