Halaman ini menunjukkan cara menggunakan validasi berkelanjutan (CV) Otorisasi Biner pemeriksaan pengesahan penandatanganan sederhana. Pemeriksaan ini memverifikasi pengesahan image container yang terkait dengan Pod yang berjalan di cluster Google Kubernetes Engine (GKE) tempat CV diaktifkan.
Biaya
Panduan ini menggunakan layanan Google Cloud berikut:
- Otorisasi Biner, tetapi CV tersedia tanpa biaya selama tahap Pratinjau
- GKE
- Cloud Key Management Service
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.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
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.
-
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization, Cloud Key Management Service, Google Kubernetes Engine APIs:
gcloud services enable binaryauthorization.googleapis.com
cloudkms.googleapis.com container.googleapis.com -
Install the Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
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.
-
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization, Cloud Key Management Service, Google Kubernetes Engine APIs:
gcloud services enable binaryauthorization.googleapis.com
cloudkms.googleapis.com container.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.
-
Jika project cluster Anda berbeda dengan project kebijakan:
Binary Authorization Policy Evaluator (
roles/binaryauthorization.policyEvaluator
) pada Agen Layanan Binary Authorization project cluster, agar dapat mengakses project kebijakan -
Jika project pengesahan Anda berbeda dengan project kebijakan Anda:
Pelihat Peristiwa Analisis Kontainer (
roles/containeranalysis.occurrences.viewer
) di Agen Layanan Otorisasi Biner project kebijakan, agar dapat mengakses project pengesahan Beri izin untuk Agen Layanan Otorisasi Biner project cluster agar dapat 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 mengakses pengesahan di project pengesahan 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 ATTESTATION_PROJECT_ID \ --member="serviceAccount:$SERVICE_ACCOUNT" \ --role='roles/containeranalysis.occurrences.viewer'
Ganti
ATTESTATION_PROJECT_ID
dengan ID project yang berisi pengesahan Anda.
Siapkan variabel lingkungan yang diperlukan untuk membuat pasangan kunci. Untuk melakukannya, sebaiknya Anda mengisi placeholder dalam perintah berikut, lalu jalankan perintah.
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 KEY_FILE=KEY_FILE
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 AndaKEY_FILE
: jalur lokal untuk menyimpan 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:
gcloud kms keys versions get-public-key ${KMS_KEY_VERSION} \ --key=${KMS_KEY_NAME} \ --keyring=${KMS_KEYRING_NAME} \ --location=${KMS_KEY_LOCATION} \ --output-file=${KEY_FILE} \ --project=${KMS_KEY_PROJECT_ID}
Buat kunci pribadi:
PRIVATE_KEY_FILE="/tmp/ec_private.pem" openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}
Mendapatkan kunci publik dari kunci pribadi:
PUBLIC_KEY_FILE="/tmp/ec_public.pem" openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
Buat file YAML kebijakan platform pemeriksaan pengesahan penandatanganan sederhana:
PKIX Cloud KMS
cat > /tmp/my-policy.yaml << EOF gkePolicy: checkSets: - checks: - simpleSigningAttestationCheck: containerAnalysisAttestationProjects: - projects/ATTESTATION_PROJECT_ID attestationAuthenticators: pkixPublicKeySet: pkixPublicKeys: publicKeyPem: | $(awk '{printf " %s\n", $0}' ${KEY_FILE}) signatureAlgorithm: ECDSA_P256_SHA256 keyId: |- //cloudkms.googleapis.com/v1/projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION} EOF
Ganti
ATTESTATION_PROJECT_ID
dengan ID project yang menyimpan pengesahan yang dibuat menggunakan kunci Cloud KMS ini.Kunci lokal
cat > /tmp/my-policy.yaml <<EOF gkePolicy: checkSets: - checks: - simpleSigningAttestationCheck: containerAnalysisAttestationProjects: - projects/ATTESTATION_PROJECT_ID attestationAuthenticators: pkixPublicKeySet: pkixPublicKeys: publicKeyPem: | $(awk '{printf " %s\n", $0}' /tmp/ec_public.pem) signatureAlgorithm: ECDSA_P256_SHA256 keyId: | PUBLIC_KEY_ID EOF
Ganti kode berikut:
ATTESTATION_PROJECT_ID
: ID project yang menyimpan pengesahan yang dibuat menggunakan kunci lokal AndaPUBLIC_KEY_ID
: ID yang mengidentifikasi kunci lokal Anda secara unik
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:
Simpan nilai ID untuk digunakan nanti:
PUBLIC_KEY_ID="PUBLIC_KEY_ID"
Ganti
PUBLIC_KEY_ID
dengan ID yang Anda tentukan di kolomkeyId
dalam file kebijakan platform sebelumnya dalam panduan ini.Kunci pribadi digunakan saat pengesahan dibuat, seperti yang dijelaskan nanti dalam panduan ini.
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.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.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 clusterCLUSTER_NAME
: nama clusterLOCATION
: lokasi—misalnya:us-central1
atauasia-south1
POLICY_PROJECT_ID
: ID project tempat kebijakan disimpanPOLICY_ID
: ID kebijakanCLUSTER_PROJECT_ID
: project ID clusterBuat variabel catatan:
NOTE_PROJECT_ID=NOTE_PROJECT_ID NOTE_ID="test-note" NOTE_URI="projects/${NOTE_PROJECT_ID}/notes/${NOTE_ID}" DESCRIPTION="CV test note"
Ganti
NOTE_PROJECT_ID
: ID project yang berisi catatan.Buat file konten catatan:
cat > /tmp/note_payload.json << EOM { "name": "${NOTE_URI}", "attestation": { "hint": { "human_readable_name": "${DESCRIPTION}" } } } EOM
Buat catatan:
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: ${NOTE_PROJECT_ID}" \ --data-binary @/tmp/note_payload.json "https://containeranalysis.googleapis.com/v1/projects/${NOTE_PROJECT_ID}/notes/?noteId=${NOTE_ID}"
Ganti
NOTE_PROJECT_ID
: ID project yang berisi catatanOpsional: Untuk memverifikasi bahwa Anda membuat catatan:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: NOTE_PROJECT_ID" \ "https://containeranalysis.googleapis.com/v1/projects/NOTE_PROJECT_ID/notes/"
Ganti
NOTE_PROJECT_ID
dengan ID project yang berisi catatan.Tandatangani gambar dan buat pengesahan menggunakan Pre-Authentication Encoding (PAE) (direkomendasikan):
gcloud beta container binauthz attestations sign-and-create \ --artifact-url=${IMAGE_TO_ATTEST} \ --keyversion=${KMS_KEY_VERSION} \ --keyversion-key=${KMS_KEY_NAME} \ --keyversion-keyring=${KMS_KEYRING_NAME} \ --keyversion-location=${KMS_KEY_LOCATION} \ --note=${NOTE_URI} \ --pae-encode-payload \ --dsse-type=DSSE_TYPE
Ganti
DSSE_TYPE
dengan jenis DSSE untuk encoding PAE. Flag ini secara default disetel keapplication/vnd.dev.cosign.simplesigning.v1+json
.Buat file payload tanda tangan:
cat > /tmp/generated_payload.json << EOM { "critical": { "identity": { "docker-reference": "${IMAGE_PATH}" }, "image": { "docker-manifest-digest": "${IMAGE_DIGEST}" }, "type": "Google Cloud BinAuthz container signature" } } EOM
Tandatangani payload:
gcloud kms asymmetric-sign \ --version=${KMS_KEY_VERSION} \ --key=${KMS_KEY_NAME} \ --keyring=${KMS_KEYRING_NAME} \ --location=${KMS_KEY_LOCATION} \ --digest-algorithm=sha256 \ --input-file=/tmp/generated_payload.json \ --signature-file=/tmp/ec_signature \ --project=${KMS_KEY_PROJECT_ID}
Buat konten pengesahan:
cat > /tmp/attestation.json << EOM { "resourceUri": "${IMAGE_TO_ATTEST}", "note_name": "${NOTE_URI}", "attestation": { "serialized_payload": "$(base64 --wrap=0 /tmp/generated_payload.json)", "signatures": [{ "public_key_id": "${PUBLIC_KEY_ID}", "signature": "$(base64 --wrap=0 /tmp/ec_signature)" }] } } EOM
Buat pengesahan:
curl -X POST "https://containeranalysis.googleapis.com/v1/projects/${NOTE_PROJECT_ID}/occurrences/" \ -H "Content-Type: application/json" \ -H "X-Goog-User-Project: ${NOTE_PROJECT_ID}" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ --data-binary @/tmp/attestation.json
Ganti
NOTE_PROJECT_ID
dengan ID project yang berisi catatan.Buat file payload tanda tangan:
cat > /tmp/generated_payload.json << EOM { "critical": { "identity": { "docker-reference": "${IMAGE_PATH}" }, "image": { "docker-manifest-digest": "${IMAGE_DIGEST}" }, "type": "Google Cloud BinAuthz container signature" } } EOM
Buat file payload tanda tangan:
openssl dgst -sha256 -sign ${PRIVATE_KEY_FILE} /tmp/generated_payload.json > /tmp/ec_signature
Buat pengesahan:
gcloud container binauthz attestations create \ --project=ATTESTATION_PROJECT_ID \ --artifact-url=${IMAGE_TO_ATTEST} \ --note=${NOTE_URI} \ --signature-file=/tmp/ec_signature \ --public-key-id=PUBLIC_KEY_ID
Buat file payload tanda tangan:
cat > /tmp/generated_payload.json << EOM { "critical": { "identity": { "docker-reference": "${IMAGE_PATH}" }, "image": { "docker-manifest-digest": "${IMAGE_DIGEST}" }, "type": "Google Cloud BinAuthz container signature" } } EOM
Buat file payload tanda tangan:
openssl dgst -sha256 -sign ${PRIVATE_KEY_FILE} /tmp/generated_payload.json > /tmp/ec_signature
Buat konten pengesahan:
cat > /tmp/attestation.json << EOM { "resourceUri": "${IMAGE_TO_ATTEST}", "note_name": "${NOTE_URI}", "attestation": { "serialized_payload": "$(base64 --wrap=0 /tmp/generated_payload.json)", "signatures": [{ "public_key_id": "${PUBLIC_KEY_ID}", "signature": "$(base64 --wrap=0 /tmp/ec_signature)" }] } } EOM
Buat pengesahan:
curl -X POST "https://containeranalysis.googleapis.com/v1/projects/${NOTE_PROJECT_ID}/occurrences/" \ -H "Content-Type: application/json" \ -H "X-Goog-User-Project: ${NOTE_PROJECT_ID}" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ --data-binary @/tmp/attestation.json
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 layanan dan periksa deployment terhadap kebijakan Otorisasi Biner:
kubectl run hello-app-with-attestation --image=$IMAGE_PATH@$IMAGE_DIGEST
Pod telah di-deploy. Karena gambar memiliki pengesahan, CV tidak menghasilkan entri log yang terkait dengan Pod ini.
ImageFreshnessCheck
SigstoreSignatureCheck
SimpleSigningAttestationCheck
SlsaCheck
TrustedDirectoryCheck
VulnerabilityCheck
CLUSTER_NAME
: nama clusterLOCATION
: lokasi clusterCLUSTER_PROJECT_ID
: project ID clusterCLUSTER_NAME
: nama clusterLOCATION
: lokasi clusterCLUSTER_PROJECT_ID
: project ID clusterPOLICY_ID
: ID kebijakanPOLICY_PROJECT_ID
: ID project kebijakan- 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
Peran yang diperlukan
Bagian ini menunjukkan cara menetapkan peran untuk pemeriksaan ini.
Ringkasan
Jika Anda menjalankan semua produk yang disebutkan dalam panduan ini di project yang sama, Anda tidak perlu menyetel 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 pengesahan penandatanganan sederhana CV, minta administrator Anda untuk memberikan peran IAM berikut kepada Agen Layanan Otorisasi Biner di setiap project:
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 pengesahan penandatanganan sederhana CV, berikan peran IAM berikut kepada Agen Layanan Otorisasi Biner di setiap project:
Membuat pasangan kunci
Di bagian ini, Anda akan membuat pasangan kunci asimetris 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 atau kunci lokal, tetapi sebaiknya gunakan kunci Cloud KMS untuk produksi.
PKIX Cloud KMS
Untuk membuat pasangan kunci di Cloud KMS, lakukan hal berikut:
Kunci lokal
Untuk membuat pasangan kunci secara lokal, lakukan hal berikut:
Membuat kebijakan platform
Untuk membuat kebijakan platform CV dengan pemeriksaan pengesahan penandatanganan sederhana, lakukan langkah berikut:
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:
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 penerapan kebijakan project-singleton dan pemantauan CV dengan kebijakan platform berbasis pemeriksaan:
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
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 dengan kebijakan platform berbasis pemeriksaan saja. Jika cluster sudah mengaktifkan penerapan kebijakan project-singleton, menjalankan perintah ini akan menonaktifkannya. Sebagai gantinya, pertimbangkan untuk memperbarui cluster dengan pengaktifan pemantauan CV dan penerapan.
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
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 penerapan dan pemantauan CV
Di bagian ini, Anda akan memperbarui cluster untuk menggunakan penegakan kebijakan singleton project dan pemantauan CV dengan kebijakan platform berbasis pemeriksaan.
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
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
Buat catatan Analisis Artefak
Di bagian ini, Anda akan membuat contoh catatan Analisis Artefak untuk menautkan pengesahan. Untuk membuat catatan, lakukan langkah berikut:
CV Uji
Di bagian ini, Anda akan menguji CV dengan men-deploy image yang telah Anda buatkan pengesahannya. Dalam hal ini, pemeriksaan pengesahan penandatanganan sederhana CV memverifikasi pengesahan dan tidak menghasilkan entri log.
Kemudian, Anda mencoba men-deploy image lain yang tidak memiliki pengesahan. Dalam kasus ini, pemeriksaan CV tidak dapat menemukan pengesahan dan mencatat pelanggaran ke Cloud Logging.
Untuk membuat variabel yang Anda gunakan untuk menguji CV, jalankan perintah berikut:
IMAGE_PATH="us-docker.pkg.dev/google-samples/containers/gke/hello-app"
IMAGE_DIGEST="sha256:37e5287945774f27b418ce567cd77f4bbc9ef44a1bcd1a2312369f31f9cce567"
IMAGE_TO_ATTEST="${IMAGE_PATH}@${IMAGE_DIGEST}"
Membuat pengesahan
Untuk memenuhi pemeriksaan pengesahan penandatanganan sederhana, gambar memerlukan pengesahan yang valid.
Anda dapat membuat pengesahan menggunakan gcloud CLI atau REST API.
PKIX Cloud KMS
gcloud
Untuk membuat pengesahan menggunakan gcloud CLI, lakukan langkah-langkah berikut:
REST API
Untuk membuat pengesahan menggunakan REST API, lakukan hal berikut:
Kunci lokal
gcloud
REST API
Men-deploy gambar yang memiliki pengesahan
Untuk men-deploy image yang telah dibuatkan pengesahannya, lakukan hal berikut:
Men-deploy image tanpa pengesahan
Di bagian ini, Anda akan men-deploy image yang tidak memiliki pengesahan terkait.
Karena kebijakan memerlukan pengesahan dan image ini tidak memilikinya, CV secara rutin mencatat pelanggaran saat container berjalan.
Untuk men-deploy image, jalankan perintah berikut:
kubectl run hello-app-without-attestation \
--image=$IMAGE_PATH@$IMAGE_DIGEST
Pod telah 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 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:
Contoh log
Entri CV Logging contoh berikut menjelaskan image yang tidak sesuai dan 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 Anda konfigurasi sebelumnya dalam panduan ini.
Anda dapat menonaktifkan pemantauan CV atau Binary Authorization dan CV di cluster Anda.
Menonaktifkan Otorisasi Biner di cluster
Untuk menonaktifkan penerapan CV dan Otorisasi Biner di cluster Anda, jalankan perintah berikut:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=DISABLED \
--location=LOCATION \
--project=CLUSTER_PROJECT_ID
Ganti kode berikut:
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:
Perhatikan bahwa --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
setara dengan flag --enable-binauthz
yang lebih lama.
Hapus kebijakan
Untuk menghapus kebijakan, jalankan perintah berikut. Kebijakan platform berbasis cek tidak perlu dihapus untuk menonaktifkan audit kebijakan berbasis cek.
gcloud beta container binauthz policy delete POLICY_ID \
--platform=gke \
--project="POLICY_PROJECT_ID"
Ganti kode berikut: