Codelab image container bertanda tangan

1. Ringkasan

Codelab ini dibuat berdasarkan codelab Ruang Rahasia. Dukungan image container yang ditandatangani memberikan opsi untuk mengautentikasi penampung menggunakan kunci publik yang diautentikasi, bukan menentukan ringkasan image dalam kebijakan Workload Identity Pool (WIP).

Yang berubah dengan dukungan image container yang ditandatangani di Confidential Space:

Peningkatan kegunaan: Dengan diperkenalkannya fitur image container yang ditandatangani, kini kita dapat beralih dari pendekatan ringkasan image workload ke pendekatan tanda tangan container untuk kolaborator/auditor yang memberikan otorisasi pada image.

  • Saat menggunakan ringkasan gambar secara langsung, pemilik resource harus memperbarui kebijakan mereka dengan ringkasan gambar setiap kali mereka memberikan otorisasi pada gambar baru. Dengan menggunakan tanda tangan image, kebijakan ini berisi sidik jari kunci publik, yang kunci pribadinya yang sesuai dimiliki oleh kolaborator/auditor dan digunakan untuk menandatangani image yang diaudit.
  • Untuk beberapa model keamanan, mereferensikan kunci penandatanganan gambar tepercaya lebih mudah daripada memperbarui daftar nilai ringkasan gambar baru.

Tidak ada regresi keamanan: Pendekatan tanda tangan penampung ini tidak akan menyebabkan regresi keamanan apa pun dibandingkan dengan pendekatan ringkasan gambar sebelumnya karena batas kepercayaan tetap sama. Dalam pendekatan tanda tangan penampung, pemilik resource memberikan otorisasi kunci verifikasi dengan menentukan sidik jari kunci publik tepercaya dalam kebijakan WIP, dan pemeriksaan otorisasi dilakukan oleh Layanan Verifikasi Pengesahan dan WIP; Layanan Verifikasi Pengesahan memverifikasi bahwa tanda tangan dikaitkan dengan beban kerja yang sedang berjalan, dan kebijakan WIP memeriksa apakah kunci publik yang dinyatakan oleh layanan diotorisasi oleh kebijakan.

Keamanan yang kuat: Menggunakan tanda tangan image container memungkinkan seseorang mendelegasikan sejumlah kepercayaan kepada penanda tangan image. Dengan menentukan sidik jari kunci publik penanda tangan tepercaya dalam kebijakan pengesahan, pemilik resource akan memberikan otorisasi kepada penanda tangan tersebut untuk memberikan pengesahan pada image container mana yang memenuhi kebijakan. Layanan Pemverifikasi Pengesahan memverifikasi bahwa tanda tangan terkait dengan beban kerja yang sedang berjalan, dan kebijakan memeriksa apakah kunci publik yang membuat tanda tangan diotorisasi oleh kebijakan. Dengan demikian, lapisan indirection tambahan yang disediakan penandatanganan image akan mempertahankan jaminan keamanan yang kuat dari Confidential Space.

Satu-satunya perbedaan antara pendekatan ini adalah pendekatan yang terakhir menggunakan lapisan indirection tambahan tempat image beban kerja diotorisasi dengan kunci penandatanganan. Hal ini tidak menimbulkan kerentanan keamanan baru karena batas kepercayaan tetap sama.

Yang akan Anda pelajari

Dalam codelab ini, Anda akan mempelajari cara menggunakan tanda tangan image container untuk memberikan otorisasi akses ke resource yang dilindungi:

  • Cara menandatangani image container yang diaudit menggunakan cosign
  • Cara mengupload tanda tangan image container ke registry OCI untuk penemuan dan penyimpanan tanda tangan
  • Cara mengonfigurasi resource cloud yang diperlukan untuk menjalankan Confidential Space
  • Cara menjalankan workload di Confidential Space dengan dukungan image container yang ditandatangani

Codelab ini menunjukkan cara menggunakan Confidential Space untuk melakukan pengesahan jarak jauh pada image container yang ditandatangani oleh kunci tepercaya yang berjalan di Google Compute Engine.

Yang Anda butuhkan

Peran yang terlibat dalam Confidential Space dengan Image Container yang Ditandatangani

Dalam codelab ini, Primus Bank akan menjadi auditor dan pemilik resource, yang akan bertanggung jawab atas hal berikut:

  1. Menyiapkan resource yang diperlukan dengan data contoh.
  2. Mengaudit kode workload.
  3. Menggunakan cosign untuk menandatangani image workload.
  4. Mengupload tanda tangan ke repositori.
  5. Mengonfigurasi kebijakan WIP untuk melindungi data pelanggan.

Secundus Bank akan menjadi penulis dan operator beban kerja, serta bertanggung jawab atas:

  1. Menyiapkan resource yang diperlukan untuk menyimpan hasilnya.
  2. Menulis kode beban kerja.
  3. Memublikasikan image workload.
  4. Menjalankan workload di Confidential Space dengan dukungan image container yang ditandatangani.

Bank Secundus akan mengembangkan dan memublikasikan beban kerja yang akan membuat kueri data pelanggan yang disimpan di bucket penyimpanan cloud dan dimiliki oleh Bank Primus. Primus Bank akan mengaudit workload, menandatangani image container, dan mengonfigurasi kebijakan WIP untuk mengizinkan akses ke data mereka oleh workload yang disetujui. Hasil eksekusi beban kerja ini akan disimpan di bucket cloud storage yang dimiliki oleh bank Secundus.

Resource yang terlibat dalam penyiapan Confidential Space

Codelab ini mereferensikan sejumlah variabel yang harus Anda tetapkan ke nilai yang sesuai untuk project GCP Anda. Perintah dalam codelab ini mengasumsikan bahwa variabel ini telah ditetapkan. (misalnya, export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket' dapat digunakan untuk menetapkan nama bucket penyimpanan input bank Primus.) Jika variabel nama resource belum ditetapkan, variabel tersebut akan dibuat berdasarkan project-id GCP.

Konfigurasikan hal berikut di project Primus:

  • $PRIMUS_INPUT_STORAGE_BUCKET: bucket yang menyimpan file data pelanggan.
  • $PRIMUS_WORKLOAD_IDENTITY_POOL: Workload Identity Pool (WIP) yang memvalidasi klaim.
  • $PRIMUS_WIP_PROVIDER: penyedia Workload Identity Pool yang menyertakan kondisi otorisasi yang akan digunakan untuk token yang ditandatangani oleh Layanan Pengverifikasi Pengesahan.
  • $PRIMUS_SERVICEACCOUNT: akun layanan yang digunakan $PRIMUS_WORKLOAD_IDENTITY_POOL untuk mengakses resource yang dilindungi. Pada langkah ini, bucket tersebut memiliki izin untuk melihat data pelanggan yang disimpan di bucket $PRIMUS_INPUT_STORAGE_BUCKET.
  • $PRIMUS_ENC_KEY: kunci KMS yang digunakan untuk mengenkripsi data yang disimpan di $PRIMUS_INPUT_STORAGE_BUCKET.

Referensi baru untuk codelab ini:

  • $PRIMUS_COSIGN_REPOSITORY: Artifact Registry untuk menyimpan tanda tangan image workload.
  • $PRIMUS_SIGNING_KEY: kunci KMS yang digunakan untuk menandatangani image workload oleh auditor/kolaborator data (misalnya, bank primus dalam hal ini).

Konfigurasikan hal berikut di project Secundus:

  • $SECUNDUS_ARTIFACT_REGISTRY: artifact registry tempat image docker beban kerja akan di-push.
  • $WORKLOAD_IMAGE_NAME: nama image docker workload.
  • $WORKLOAD_IMAGE_TAG: tag image docker beban kerja.
  • $WORKLOAD_SERVICEACCOUNT: akun layanan yang memiliki izin untuk mengakses Confidential VM yang menjalankan beban kerja.
  • $SECUNDUS_RESULT_BUCKET: bucket yang menyimpan hasil workload.

Referensi Lainnya:

  • primus_customer_list.csv berisi data pelanggan. Kita akan mengupload data ini ke $PRIMUS_INPUT_STORAGE_BUCKET dan membuat beban kerja yang akan membuat kueri data ini.

Alur kerja yang ada

Saat Anda menjalankan workload di Confidential Space, proses berikut akan terjadi, menggunakan resource yang dikonfigurasi:

  1. Workload meminta token akses Google umum untuk $PRIMUS_SERVICEACCOUNT dari WIP. Layanan ini menawarkan token layanan Attestation Verifier dengan klaim beban kerja dan lingkungan.
  2. Jika klaim pengukuran beban kerja dalam token layanan Pengesah Pengesahan cocok dengan kondisi atribut dalam WIP, token akses untuk $PRIMUS_SERVICEACCOUNT. akan ditampilkan
  3. Workload menggunakan token akses akun layanan yang terkait dengan $PRIMUS_SERVICEACCOUNT untuk mengakses data pelanggan di bucket $PRIMUS_INPUT_STORAGE_BUCKET.
  4. Beban kerja akan menjalankan operasi pada data tersebut.
  5. Workload menggunakan akun layanan $WORKLOAD_SERVICEACCOUNT untuk menulis hasil operasi tersebut ke bucket $SECUNDUS_RESULT_STORAGE_BUCKET.

Alur kerja baru dengan dukungan penampung yang ditandatangani

Dukungan penampung yang ditandatangani akan diintegrasikan ke dalam alur kerja yang ada, seperti yang ditandai di bawah. Saat Anda menjalankan beban kerja di Confidential Space dengan dukungan image container yang ditandatangani, proses berikut akan terjadi, menggunakan resource yang dikonfigurasi:

  1. Confidential Space menemukan tanda tangan penampung yang terkait dengan image workload yang sedang berjalan dan mengirimkannya ke verifier pengesahan. Pemverifikasi pengesahan memverifikasi tanda tangan, dan menyertakan tanda tangan yang valid dalam klaim pengesahan.
  2. Workload meminta token akses Google umum untuk $PRIMUS_SERVICEACCOUNT dari WIP. Layanan ini menawarkan token layanan Attestation Verifier dengan klaim beban kerja dan lingkungan.
  3. Jika klaim tanda tangan penampung dalam token layanan Pengesah Pengesahan cocok dengan kondisi atribut dalam WIP, token tersebut akan menampilkan token akses untuk $PRIMUS_SERVICEACCOUNT.
  4. Workload menggunakan token akses akun layanan yang terkait dengan $PRIMUS_SERVICEACCOUNT untuk mengakses data pelanggan di bucket $PRIMUS_INPUT_STORAGE_BUCKET.
  5. Beban kerja akan menjalankan operasi pada data tersebut.
  6. Workload menggunakan $WORKLOAD_SERVICEACCOUNT untuk menulis hasil operasi tersebut ke bucket $SECUNDUS_RESULT_STORAGE_BUCKET.

2. Menyiapkan Resource Cloud

Sebagai bagian dari penyiapan Confidential Space, pertama-tama Anda akan membuat resource cloud yang diperlukan di project GCP bank Primus dan Secundus. Berikut adalah resource baru untuk codelab ini:

Dalam project Primus:

  • Kunci penandatanganan KMS yang digunakan untuk menandatangani beban kerja Secundus, setelah mengaudit kode.
  • Repositori registry artefak untuk menyimpan tanda tangan Cosign.

Tidak ada resource baru dalam project Secundus. Setelah resource ini disiapkan, Anda akan membuat akun layanan untuk beban kerja dengan peran dan izin yang diperlukan. Kemudian, Anda akan membuat image workload dan auditor, bank Primus, akan menandatangani image workload. Kemudian, beban kerja akan diotorisasi oleh kolaborator data (bank Primus dalam codelab ini) dan operator beban kerja (dalam hal ini, Bank Secundus) akan menjalankan beban kerja.

Sebagai bagian dari penyiapan Confidential Space, Anda akan membuat resource cloud yang diperlukan di project GCP Primus dan Secundus.

Sebelum memulai

  • Clone repositori ini menggunakan perintah di bawah untuk mendapatkan skrip yang diperlukan yang digunakan sebagai bagian dari codelab ini.
git clone https://github.com/GoogleCloudPlatform/confidential-space
  • Ubah direktori untuk codelab ini.
cd confidential-space/codelabs/signed_container_codelab/scripts
  • Pastikan Anda telah menetapkan project yang diperlukan seperti yang ditunjukkan di bawah.
export PRIMUS_PROJECT_ID=<GCP project id of primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of secundus bank>
  • Tetapkan variabel untuk nama resource yang disebutkan di atas menggunakan perintah ini. Anda dapat mengganti nama resource menggunakan variabel ini (misalnya export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket')
  • Jalankan skrip berikut untuk menetapkan nama variabel yang tersisa ke nilai berdasarkan project ID Anda untuk nama resource.
source config_env.sh
  • Instal cosign dengan mengikuti petunjuk dari sini.

Menyiapkan resource bank Primus

Sebagai bagian dari langkah ini, Anda akan menyiapkan resource cloud yang diperlukan untuk bank Primus. Jalankan skrip berikut untuk menyiapkan resource bagi bank Primus. Sebagai bagian dari langkah-langkah ini, resource yang disebutkan di bawah akan dibuat:

  • Bucket Cloud Storage ($PRIMUS_INPUT_STORAGE_BUCKET) untuk menyimpan file data pelanggan terenkripsi dari bank Primus.
  • Kunci enkripsi ($PRIMUS_ENC_KEY) dan ring kunci ($PRIMUS_ENC_KEYRING) di KMS untuk mengenkripsi file data bank Primus.
  • Workload identity pool ($PRIMUS_WORKLOAD_IDENTITY_POOL) untuk memvalidasi klaim berdasarkan kondisi atribut yang dikonfigurasi di bawah penyedianya.
  • Akun layanan ($PRIMUS_SERVICEACCOUNT) yang dilampirkan ke workload identity pool ($PRIMUS_WORKLOAD_IDENTITY_POOL) yang disebutkan di atas dengan akses IAM berikut:
  • roles/cloudkms.cryptoKeyDecrypter untuk mendekripsi data menggunakan kunci KMS.
  • objectViewer untuk membaca data dari bucket cloud storage.
  • roles/iam.workloadIdentityUser untuk menghubungkan akun layanan ini ke workload identity pool.
./setup_primus_bank_resources.sh

Menyiapkan resource bank Secundus

Sebagai bagian dari langkah ini, Anda akan menyiapkan resource cloud yang diperlukan untuk bank Secundus. Jalankan skrip berikut untuk menyiapkan resource bagi bank Secundus. Sebagai bagian dari langkah ini, resource yang disebutkan di bawah akan dibuat:

  • Bucket Cloud Storage ($SECUNDUS_RESULT_STORAGE_BUCKET) untuk menyimpan hasil eksekusi beban kerja oleh bank Secundus.
./setup_secundus_bank_resources.sh

3. Membuat dan Menandatangani Beban Kerja

Membuat akun layanan workload

Sekarang, Anda akan membuat akun layanan untuk beban kerja dengan peran dan izin yang diperlukan. Jalankan skrip berikut untuk membuat akun layanan beban kerja di project bank Secundus. Akun layanan ini akan digunakan oleh VM yang menjalankan beban kerja.

  • Akun layanan beban kerja ini ($WORKLOAD_SERVICEACCOUNT) akan memiliki peran berikut:
  • confidentialcomputing.workloadUser untuk mendapatkan token pengesahan
  • logging.logWriter untuk menulis log ke Cloud Logging.
  • objectViewer untuk membaca data dari bucket penyimpanan cloud $PRIMUS_INPUT_STORAGE_BUCKET.
  • objectAdmin untuk menulis hasil beban kerja ke bucket cloud storage $SECUNDUS_RESULT_STORAGE_BUCKET.
./create_workload_serviceaccount.sh

Membuat beban kerja

Sebagai bagian dari langkah ini, Anda akan membuat image Docker workload. Beban kerja yang digunakan dalam Codelab ini adalah aplikasi Go berbasis CLI sederhana yang menghitung pelanggan (dari data pelanggan bank Primus) dari lokasi geografis yang diberikan dalam argumen. Jalankan skrip berikut untuk membuat workload tempat langkah-langkah berikut dilakukan:

  • Buat Artifact Registry($SECUNDUS_ARTIFACT_REGISTRY) yang dimiliki oleh bank Secundus.
  • Perbarui kode beban kerja dengan nama resource yang diperlukan. Di sini adalah kode beban kerja yang digunakan untuk codelab ini.
  • Build biner Go dan buat Dockerfile untuk mem-build image Docker dari kode beban kerja. Di sini adalah Dockerfile yang digunakan untuk codelab ini.
  • Build dan publikasikan image Docker ke Artifact Registry ($SECUNDUS_ARTIFACT_REGISTRY) yang dimiliki oleh bank Secundus.
  • Berikan izin baca $WORKLOAD_SERVICEACCOUNT untuk $SECUNDUS_ARTIFACT_REGISTRY. Hal ini diperlukan agar penampung beban kerja dapat mengambil image docker beban kerja dari Artifact Registry.
./create_workload.sh

Menandatangani Beban Kerja

Kita akan menggunakan Cosign untuk menandatangani image workload. Cosign akan menyimpan tanda tangan secara default di repo yang sama dengan image yang ditandatangani. Untuk menentukan repositori yang berbeda untuk tanda tangan, Anda dapat menetapkan variabel lingkungan COSIGN_REPOSITORY.

Di sini, kita akan menggunakan Artifact Registry sebagai contoh. Anda juga dapat memilih registry berbasis OCI lainnya seperti Docker Hub, AWS CodeArtifact berdasarkan preferensi Anda.

  1. Buat repositori docker Artifact Registry.
gcloud config set project $PRIMUS_PROJECT_ID
gcloud artifacts repositories create $PRIMUS_COSIGN_REPOSITORY \
  --repository-format=docker --location=${PRIMUS_PROJECT_REPOSITORY_REGION}
  1. Buat keyring dan kunci di KMS untuk menandatangani image workload.
gcloud config set project $PRIMUS_PROJECT_ID
gcloud kms keyrings create $PRIMUS_SIGNING_KEYRING \
  --location=${PRIMUS_PROJECT_LOCATION}
gcloud kms keys create $PRIMUS_SIGNING_KEY \
  --keyring=$PRIMUS_SIGNING_KEYRING \
  --purpose=asymmetric-signing \
  --default-algorithm=ec-sign-p256-sha256 \
  --location=${PRIMUS_PROJECT_LOCATION}
  1. Untuk Artifact Registry, nama image lengkap seperti $LOCATION/$PROJECT/$REPOSITORY/$IMAGE_NAME diharapkan. Anda dapat mengupload image container apa pun ke repositori untuk penyimpanan tanda tangan.
export COSIGN_REPOSITORY=us-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_COSIGN_REPOSITORY}/demo
  1. Berikan peran Pelihat di repositori $PRIMUS_COSIGN_REPOSITORY ke akun layanan $WORKLOAD_SERVICEACCOUNT. Hal ini memungkinkan Confidential Space menemukan tanda tangan image container yang diupload ke $PRIMUS_COSIGN_REPOSITORY.
gcloud artifacts repositories add-iam-policy-binding ${PRIMUS_COSIGN_REPOSITORY} \
--project=${PRIMUS_PROJECT_ID} --role='roles/viewer' --location=us \
--member="serviceAccount:${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com"

Cosign adalah alat yang efektif dengan beberapa fitur penandatanganan. Untuk kasus penggunaan ini, kita hanya memerlukan Cosign untuk menandatangani dengan pasangan kunci. Penandatanganan tanpa kunci Cosign tidak didukung untuk fitur image penampung yang ditandatangani ini.

Saat menandatangani dengan pasangan kunci, ada dua opsi:

  1. Menandatangani dengan pasangan kunci lokal yang dibuat oleh Cosign.
  2. Menandatangani dengan pasangan kunci yang disimpan di tempat lain (misalnya, di KMS).
  1. Buat pasangan kunci di Cosign jika Anda tidak memilikinya. Lihat menandatangani dengan kunci yang dikelola sendiri untuk mengetahui detail selengkapnya. Di sini, kami menentukan kedua cara (secara lokal dan menggunakan penyedia KMS) untuk membuat pasangan kunci dan menandatangani beban kerja. Ikuti salah satu cara ini untuk menandatangani penampung beban kerja.
// Set Application Default Credentials.
gcloud auth application-default login 
// Generate keys using a KMS provider.
cosign generate-key-pair --kms <provider>://<key>
// Generate keys using Cosign.
cosign generate-key-pair

Di atas, ganti <provider>://<key> dengan gcpkms://projects/$PRIMUS_PROJECT_ID/locations/global/keyRings/$PRIMUS_SIGNING_KEYRING/cryptoKeys/$PRIMUS_SIGNING_KEY/cryptoKeyVersions/$PRIMUS_SIGNING_KEYVERSION

  • <provider> : Mengacu pada solusi KMS yang Anda gunakan
  • <key> : Mengacu pada jalur kunci di KMS
  1. Ambil kunci publik untuk verifikasi.
// For KMS providers.
cosign public-key --key <some provider>://<some key> > pub.pem

// For local key pair signing.
cosign public-key --key cosign.key > pub.pem
  1. Tanda tangani workload menggunakan Cosign. Melakukan encoding base64 tanpa padding pada kunci publik
PUB=$(cat pub.pem | openssl base64)
// Remove spaces and trailing "=" signs.
PUB=$(echo $PUB | tr -d '[:space:]' | sed 's/[=]*$//')
  1. Tanda tangani workload menggunakan Cosign dengan algoritma tanda tangan dan kunci publik yang diekspor terlampir.
IMAGE_REFERENCE=us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/$SECUNDUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG
// Sign with KMS support.
cosign sign --key <some provider>://<some key> $IMAGE_REFERENCE \
-a dev.cosignproject.cosign/sigalg=ECDSA_P256_SHA256 \
-a dev.cosignproject.cosign/pub=$PUB
// Sign with a local key pair.
cosign sign --key cosign.key $IMAGE_REFERENCE \
-a dev.cosignproject.cosign/sigalg=ECDSA_P256_SHA256 \
-a dev.cosignproject.cosign/pub=$PUB
  • --key [WAJIB] menentukan kunci penandatanganan yang akan digunakan. Saat merujuk ke kunci yang dikelola oleh penyedia KMS, ikuti format URI tertentu dari dukungan KMS Sigstore. Saat merujuk ke kunci yang dibuat oleh Cosign, gunakan cosign.key.
  • $IMAGE_REFERENCE [WAJIB] menentukan image container yang akan ditandatangani. Format IMAGE_REFERENCE dapat diidentifikasi dengan ringkasan tag atau gambar. Misalnya: us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/secundus-workloads/workload-container:latest or us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/secundus-workloads/workload-container[IMAGE-digest]
  • -a [WAJIB] menentukan anotasi yang dilampirkan ke payload tanda tangan. Untuk image container yang ditandatangani Confidential Space, algoritma kunci publik dan tanda tangan harus dilampirkan ke payload tanda tangan.
  • dev.cosignproject.cosign/sigalg HANYA menerima tiga nilai:
  • RSASSA_PSS_SHA256: Algoritma RSASSA dengan padding PSS dengan ringkasan SHA256.
  • RSASSA_PKCS1V15_SHA256: Algoritma RSASSA dengan padding PKCS#1 v1.5 dengan ringkasan SHA256.
  • ECDSA_P256_SHA256: ECDSA pada Kurva P-256 dengan ringkasan SHA256. Ini juga merupakan algoritma tanda tangan default untuk pasangan kunci yang dibuat Cosign.
  1. Mengupload tanda tangan ke repositori docker

Tanda tangan Cosign akan otomatis mengupload tanda tangan ke COSIGN_REPOSITORY. yang ditentukan

4. Memberi Otorisasi dan Menjalankan Workload

Memberi Otorisasi pada Beban Kerja

Sebagai bagian dari langkah ini, kita akan menyiapkan penyedia workload identity di bawah workload identity pool ($PRIMUS_WORKLOAD_IDENTITY_POOL). Ada kondisi atribut yang dikonfigurasi untuk workload identity seperti yang ditunjukkan di bawah. Salah satu kondisinya adalah memvalidasi sidik jari tanda tangan image workload terhadap sidik jari kunci publik penandatanganan. Dengan kondisi atribut ini, saat Secundus Bank merilis image workload baru, Primus Bank akan mengaudit kode workload dan menandatangani image workload baru tanpa perlu memperbarui kebijakan WIP dengan ringkasan image.

gcloud config set project $PRIMUS_PROJECT_ID
PUBLIC_KEY_FINGERPRINT=$(openssl pkey -pubin -in pub.pem -outform DER | openssl sha256 | cut -d' ' -f2)
gcloud iam workload-identity-pools providers create-oidc ${PRIMUS_WIP_PROVIDER} \
   --location="global" \
   --workload-identity-pool="${PRIMUS_WORKLOAD_IDENTITY_POOL}" \
   --issuer-uri="https://confidentialcomputing.googleapis.com/" \
   --allowed-audiences="https://sts.googleapis.com" \
   --attribute-mapping="google.subject='assertion.sub'" \
   --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
  'STABLE' in assertion.submods.confidential_space.support_attributes
     && '${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com' in
     assertion.google_service_accounts
     && ['ECDSA_P256_SHA256:${PUBLIC_KEY_FINGERPRINT}']
       .exists(fingerprint, fingerprint in assertion.submods.container.image_signatures.map(sig,sig.signature_algorithm+':'+sig.key_id))"

Menjalankan Beban Kerja

Sebagai bagian dari langkah ini, kita akan menjalankan beban kerja di Confidential VM. Argumen TEE yang diperlukan diteruskan menggunakan flag metadata. Argumen untuk penampung beban kerja diteruskan menggunakan bagian "tee-cmd" dari flag. Workload dienkode untuk memublikasikan hasilnya ke $SECUNDUS_RESULT_STORAGE_BUCKET.

gcloud compute instances create ${WORKLOAD_VM} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=MIGRATE \
 --scopes=cloud-platform \
 --zone=${SECUNDUS_PROJECT_ZONE} \
 --project=${SECUNDUS_PROJECT_ID} \
 --image-project=confidential-space-images \
 --image-family=confidential-space \
 --service-account=${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
 --metadata "^~^tee-image-reference=us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/${SECUNDUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"count-location\",\"Seattle\",\"gs://${SECUNDUS_RESULT_STORAGE_BUCKET}/seattle-result\"]"~tee-signed-image-repos=us-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_COSIGN_REPOSITORY}/demo"

Lihat hasil

Di project Secundus, lihat hasil workload.

gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result

Hasilnya adalah 3, karena ini adalah jumlah orang dari Seattle yang tercantum dalam file primus_customer_list.csv.

5. Pembersihan

Berikut adalah skrip yang dapat digunakan untuk membersihkan resource yang telah kita buat sebagai bagian dari codelab ini. Sebagai bagian dari pembersihan ini, resource berikut akan dihapus:

  • Masukkan bucket penyimpanan bank Primus ($PRIMUS_INPUT_STORAGE_BUCKET).
  • Akun layanan bank Primus ($PRIMUS_SERVICEACCOUNT).
  • Registry artefak Primus Bank yang menyimpan tanda tangan gambar ($PRIMUS_COSIGN_REPOSITORY).
  • Workload identity pool Primus Bank ($PRIMUS_WORKLOAD_IDENTITY_POOL).
  • Akun layanan workload Bank Secundus ($WORKLOAD_SERVICEACCOUNT).
  • Instance Compute Workload.
  • Bucket penyimpanan hasil dari Secundus Bank ($SECUNDUS_RESULT_STORAGE_BUCKET).
  • Registry artefak Secundus Bank ($SECUNDUS_ARTIFACT_REGISTRY).
  • VM Workload Secundus Bank ($WORKLOAD_VM).
./cleanup.sh

Jika Anda sudah selesai menjelajahi, pertimbangkan untuk menghapus project Anda.

  • Buka Cloud Platform Console
  • Pilih project yang ingin dinonaktifkan, lalu klik 'Hapus' di bagian atas: tindakan ini akan menjadwalkan penghapusan project

Selamat

Selamat, Anda berhasil menyelesaikan codelab.

Anda telah mempelajari cara memanfaatkan fitur image container yang ditandatangani untuk meningkatkan kegunaan Ruang Rahasia.

Apa selanjutnya?

Lihat beberapa codelab serupa ini...

Bacaan lebih lanjut