Halaman ini menunjukkan cara menggunakan pemeriksaan SLSA validasi berkelanjutan (CV) Otorisasi Biner, yang memeriksa asal image container yang mematuhi SLSA yang terkait dengan Pod yang berjalan di cluster GKE tempat CV diaktifkan.
Untuk menggunakan pemeriksaan ini, Anda harus mem-build image dengan Cloud Build, yang menghasilkan provenance yang mematuhi SLSA.
Contoh dalam panduan ini menggunakan Cloud Source Repositories untuk repositori kode sumber, Artifact Registry untuk registry image, dan Cloud Build untuk mem-build image dan menghasilkan asal.
Satu-satunya builder tepercaya yang didukung pemeriksaan SLSA adalah Cloud Build.
Biaya
Panduan ini menggunakan layanan Google Cloud berikut:
- Artifact Registry
- Otorisasi Biner, tetapi CV tersedia tanpa biaya selama tahap Pratinjau
- Cloud Build
- Cloud Source Repositories
- GKE
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 Artifact Registry, Binary Authorization, Cloud Build, GKE, Cloud Source Repositories APIs:
gcloud services enable artifactregistry.googleapis.com
binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com sourcerepo.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 Artifact Registry, Binary Authorization, Cloud Build, GKE, Cloud Source Repositories APIs:
gcloud services enable artifactregistry.googleapis.com
binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com sourcerepo.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.
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 CV SLSA, minta administrator untuk memberikan Agen Layanan Otorisasi Biner di setiap project peran IAM berikut:
-
Artifact Registry Reader (
roles/artifactregistry.reader
) di akun layanan Compute Engine project cluster -
Jika project cluster Anda berbeda dengan project kebijakan:
Binary Authorization Policy Evaluator (
roles/binaryauthorization.policyEvaluator
) di Agen Layanan Binary Authorization project cluster, agar dapat mengakses project kebijakan -
Jika project pengesahan Anda berbeda dengan project kebijakan:
Container Analysis Occurrences Viewer (
roles/containeranalysis.occurrences.viewer
) di Agen Layanan Otorisasi Biner project kebijakan, agar dapat mengakses project pengesahan
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 akun layanan di setiap project memiliki izin yang diperlukan untuk mengevaluasi pemeriksaan ini, berikan peran IAM berikut kepada akun layanan di setiap project:
Jika project tempat Anda menjalankan cluster berbeda dengan project tempat kebijakan berada, Anda harus memberikan izin kepada agen layanan Binary Authorization 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 project kebijakan untuk mengakses pengesahan:
Dapatkan agen layanan Binary Authorization yang terkait dengan project kebijakan:
PROJECT_NUMBER=$(gcloud projects list \ --filter="projectId:POLICY_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") POLICY_PROJECT_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:$POLICY_PROJECT_SERVICE_ACCOUNT" \ --role='roles/containeranalysis.occurrences.viewer'
Ganti
ATTESTATION_PROJECT_ID
dengan ID project yang berisi pengesahan Anda.
Izinkan izin akun layanan Compute Engine default untuk mengambil image dari repositori:
Dapatkan akun layanan Compute Engine yang terkait dengan project cluster:
PROJECT_NUMBER=$(gcloud projects list \ --filter="projectId:CLUSTER_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") COMPUTE_ENGINE_SERVICE_ACCOUNT="$PROJECT_NUMBER-compute@developer.gserviceaccount.com"
Ganti
CLUSTER_PROJECT_ID
dengan ID project cluster yang berisi kebijakan Anda.Berikan peran:
gcloud projects add-iam-policy-binding ARTIFACT_PROJECT_ID \ --member="serviceAccount:$COMPUTE_ENGINE_SERVICE_ACCOUNT" \ --role='roles/artifactregistry.reader'
Ganti
ARTIFACT_PROJECT_ID
dengan ID project Artifact Registry yang menyimpan image yang akan di-deploy.
Opsional: Mem-build dan mengupload gambar contoh
Bagian ini disertakan untuk tujuan ilustrasi, untuk menunjukkan cara mem-build contoh image dengan asal yang mematuhi SLSA. Sumber asal akan digunakan nanti dalam panduan untuk menunjukkan pemeriksaan. Pelajari asal Cloud Build lebih lanjut.
Membuat repositori contoh
Untuk membuat repositori di Cloud Source Repositories, lakukan hal berikut:
Buat repositori dan clone secara lokal:
gcloud source repos create SOURCE_REPO_NAME \ --project=SOURCE_REPO_PROJECT_ID && \ gcloud source repos clone SOURCE_REPO_NAME \ --project=SOURCE_REPO_PROJECT_ID && \ cd SOURCE_REPO_NAME
Ganti kode berikut:
SOURCE_REPO_NAME
: nama repositori kode sumber Anda—misalnya:slsa-check-test-repo
SOURCE_REPO_PROJECT_ID
: project ID repositori
Untuk membuat file sumber, konfigurasi, dan build, lakukan hal berikut:
Buat sumber gambar:
cat > quickstart.sh <<EOF #!/bin/sh echo "Hello, world! The time is $(date)." sleep infinity EOF
Setel agar file dapat dieksekusi:
chmod +x quickstart.sh
Buat file konfigurasi Dockerfile:
cat > Dockerfile <<EOF FROM alpine COPY quickstart.sh / CMD ["/quickstart.sh"] EOF
Buat file
cloudbuild.yaml
Cloud Build, yang mengirimkan image ke Artifact Registry:cat > cloudbuild.yaml <<EOF steps: - name: 'gcr.io/cloud-builders/docker' args: [ 'build', '-t', 'LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE', '.' ] options: requestedVerifyOption: VERIFIED images: - 'LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE' EOF
Ganti kode berikut:
LOCATION
: lokasi Artifact Registry—misalnya:us-west2
,europe-central2
, atauasia-east1
ARTIFACT_PROJECT_ID
: ID project yang menyimpan artefak Artifact RegistryARTIFACT_REPO_NAME
: nama repositori Artifact Registry—misalnya:slsa-check-test-repo
DIRECTORY
: direktori—misalnya:slsa-check
IMAGE
: jalur ke image—misalnya:slsa-check-image
Lakukan commit pada file ke Cloud Source Repositories:
git add . git commit -a
Mem-build dan mengupload gambar contoh
Untuk menyederhanakan penggunaan panduan ini, sebaiknya gunakan project yang sama untuk SOURCE_REPO_PROJECT_ID, dan ARTIFACT_PROJECT_ID. Jika menggunakan project yang berbeda, Anda mungkin perlu menyiapkan izin IAM tambahan. Pelajari Kontrol akses Artifact Registry lebih lanjut. Untuk mempelajari Cloud Build lebih lanjut, lihat Ringkasan Cloud Build.
Untuk membuat repositori, lakukan hal berikut:
Buat repositori Artifact Registry:
gcloud artifacts repositories create ARTIFACT_REPO_NAME \ --project=ARTIFACT_PROJECT_ID \ --repository-format=docker \ --location=LOCATION \ --description="Docker repository"
Ganti kode berikut:
ARTIFACT_REPO_NAME
: nama repositori AndaARTIFACT_PROJECT_ID
: project ID artefakLOCATION
: lokasi Artifact Registry—misalnya:us-west2
,europe-central2
, atauasia-east1
Buat pemicu build Cloud Build:
gcloud beta builds triggers create cloud-source-repositories \ --project=SOURCE_REPO_PROJECT_ID \ --repo=SOURCE_REPO_NAME \ --region=LOCATION \ --branch-pattern=.* \ --build-config=cloudbuild.yaml
Ganti kode berikut:
SOURCE_REPO_NAME
: nama repositori kode sumberSOURCE_REPO_PROJECT_ID
: project ID Cloud BuildLOCATION
: lokasi
Picu build dengan mendorong file yang Anda buat sebelumnya dalam panduan ini.
git push
Jika build image berhasil, Cloud Build akan membuat provenans dan mengupload image ke repositori Artifact Registry Anda.
Untuk memeriksa image terbaru dan mendapatkan ringkasannya, lakukan tindakan berikut:
Pastikan Cloud Build telah mem-build image Anda:
gcloud artifacts docker images list LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/REPO_NAME/DIRECTORY \ --project=ARTIFACT_PROJECT_ID \ --sort-by=create_time
Ganti kode berikut:
LOCATION
: lokasi Artifact RegistryARTIFACT_PROJECT_ID
: project ID untuk artefakARTIFACT_REPO_NAME
: nama repositoriDIRECTORY
: direktori
Salin ringkasan gambar terbaru. Ringkasan terlihat mirip dengan berikut:
sha256:9432f747bd058b33de33bb5314d6eec1ac357d664e04c76824bb7072a9218d59
Opsional: Lihat asal gambar Anda:
gcloud artifacts docker images describe \ LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE@DIGEST \ --project=ARTIFACT_PROJECT_ID \ --show-provenance
Ganti kode berikut:
ARTIFACT_PROJECT_ID
: project ID untuk artefakLOCATION
: lokasi Artifact RegistryARTIFACT_REPO_NAME
: nama repositori artefakDIRECTORY
: direktoriIMAGE
: jalur ke gambarDIGEST
: ringkasan yang terkait dengan image
Output perintah terlihat seperti berikut:
image_summary: digest: sha256:9432f747bd058b33de33bb5314d6eec1ac357d664e04c76824bb7072a9218d59 fully_qualified_digest: us-west2-docker.pkg.dev/my-project/slsa-check-repo/slsa-check-image@sha256:9432f747bd058b33de33bb5314d6eec1ac357d664e04c76824bb7072a9218d59 registry: us-west2-docker.pkg.dev repository: slsa-check-repo slsa_build_level: 3 provenance_summary: provenance: - build: intotoStatement: _type: https://in-toto.io/Statement/v0.1 predicateType: https://slsa.dev/provenance/v0.1 slsaProvenance: builder: id: https://cloudbuild.googleapis.com/GoogleHostedWorker materials: - digest: sha1: de4e4227fff1d00d6f7785a827608627e4a369ea uri: git+https://source.cloud.google.com/my-project/slsa-check-source-repo metadata: ... envelope: payload: eyJfdHlwZSI6I ... taW1hZ2U6dGFnMSJ9XX0= payloadType: application/vnd.in-toto+json signatures: - keyid: projects/verified-builder/locations/global/keyRings/attestor/cryptoKeys/provenanceSigner/cryptoKeyVersions/1 sig: MEQCIBCCkho_re4EfAT-NBSSmAXOZlv4lU_vWzEru97tU8KmAiAKcAa99umWngzNQADmPixqYjbKjLOKQEUvrI5chSrf7g== - keyid: projects/verified-builder/locations/global/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1 sig: MEUCIFOEq_7RpiZAB4vUlit3hkZ2yI0n37-5Y87l0JbU-EZSAiEA9TNZZcv_MnzKffTnswHWZR2DSLmYiklr5twWfIec-zo=
Output harus berisi blok
provenance_summary
agar pemeriksaan SLSA dapat berfungsi. Jika output tidak berisi blok, pastikan Cloud Build dipanggil oleh pemicu build. Cloud Build tidak menghasilkan informasi asal saat dipicu secara manual.
Membuat kebijakan platform
Untuk membuat asal, Anda harus menggunakan pemicu Cloud Build untuk mem-build image, seperti yang dijelaskan dalam Mem-build dan mengupload image contoh.
Untuk membuat kebijakan platform dengan pemeriksaan SLSA, lakukan langkah berikut:
Buat file YAML kebijakan platform:
cat > POLICY_PATH <<EOF gkePolicy: checkSets: - checks: - displayName: My SLSA check imageAllowlist: # This policy exempts images that are in the following artifact registry allowPattern: - ARTIFACT_LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/EXEMPT_IMAGE_PATH/** slsaCheck: rules: - attestationSource: containerAnalysisAttestationProjects: - projects/ATTESTATION_PROJECT_ID configBasedBuildRequired: true trustedBuilder: GOOGLE_CLOUD_BUILD trustedSourceRepoPatterns: - source.cloud.google.com/SOURCE_REPO_PROJECT_ID/SOURCE_REPO_NAME customConstraints: - CEL_EXPRESSION displayName: My check set EOF
Ganti kode berikut:
POLICY_PATH
: Jalur untuk file kebijakan.ARTIFACT_LOCATION
: Lokasi repositori Anda di Artifact Registry.ARTIFACT_PROJECT_ID
: ID project yang berisi artefak Anda.ARTIFACT_REPO_NAME
: Repositori yang berisi gambar.EXEMPT_IMAGE_PATH
: Jalur opsional ke satu atau beberapa gambar yang dikecualikan—misalnya:not-built-by-cloud-build
. BlokimageAllowlist
disertakan dalam kebijakan platform ini sehingga Anda dapat mengecualikan gambar yang tidak memiliki asal sehingga tidak melanggar kebijakan platform. Untuk mencatat pelanggaran dari gambar ini, hapus blok ini.ATTESTATION_PROJECT_ID
: Project ID yang menyimpan pengesahan yang dibuat oleh Cloud Build.SOURCE_REPO_PROJECT_ID
: ID project yang berisi kode sumber Anda.SOURCE_REPO_NAME
: Repositori yang berisi image. Untuk tujuan ilustrasi, guna memaksa pelanggaran pemeriksaan ini, tetapkanSOURCE_REPO_NAME
ke repositori kode sumber selain tempat image Anda berada.POLICY_PROJECT_ID
: ID project yang berisi kebijakan CV.POLICY_ID
: ID kebijakan ini.CEL_EXPRESSION
: Ekspresi CEL yang memberikan batasan tambahan pada kebijakan SLSA. Misalnya, untuk menambahkan batasan kustom yang lebih lanjut mewajibkan gambar berasal dari jalur direktori tertentu, gantiCEL_EXPRESSION
dengan ekspresi berikut:payload.predicate.externalParameters.buildConfigSource.path != "" && payload.predicate.externalParameters.buildConfigSource.repository.contains("github.com/my-repo/my-production-repo")
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
Men-deploy image
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 Pod:
kubectl run hello-app \ --image='LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE@DIGEST'
Pod di-deploy. Karena image dibuat dengan asal dan dari repositori kode sumber tepercaya, image tersebut tidak akan melanggar pemeriksaan CV SLSA dan tidak ada entri log yang dihasilkan.
Untuk memaksa pelanggaran pemeriksaan SLSA, Anda dapat menetapkan
SOURCE_REPO_NAME
ke repositori kode sumber selain tempat image Anda berada. Anda juga dapat memicu build secara manual, yang akan melewati pembuatan asal. Kemudian, periksa entri log.
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 dikonfigurasi 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 Anda, 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