Codelab image container bertanda tangan

1. Ringkasan

Codelab ini dibangun berdasarkan codelab Confidential Space. Dukungan image container yang ditandatangani memberikan opsi untuk mengautentikasi container menggunakan kunci publik yang telah disahkan, bukan menentukan ringkasan image dalam kebijakan Workload Identity Pool (WIP).

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

Kegunaan yang lebih baik: Dengan diperkenalkannya fitur image container yang ditandatangani, kini kami dapat beralih dari pendekatan ringkasan gambar beban kerja ke pendekatan tanda tangan container untuk kolaborator/auditor yang memberi otorisasi gambar.

  • Saat menggunakan ringkasan gambar secara langsung, pemilik resource harus memperbarui kebijakannya dengan ringkasan gambar setiap kali mereka mengizinkan gambar baru. Dengan menggunakan tanda tangan gambar, kebijakan akan berisi sidik jari kunci publik, yang kunci pribadinya yang sesuai dimiliki oleh kolaborator/auditor dan digunakan untuk menandatangani gambar 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 container ini tidak akan membawa regresi keamanan terhadap pendekatan ringkasan image sebelumnya karena batas kepercayaan tetap sama. Dalam pendekatan tanda tangan container, pemilik resource memberikan otorisasi pada kunci verifikasi dengan menentukan sidik jari kunci publik tepercaya dalam kebijakan WIP, dan pemeriksaan otorisasi dilakukan oleh Layanan Pemverifikasi Pengesahan dan WIP; Layanan Pemverifikasi Pengesahan memverifikasi bahwa tanda tangan terkait dengan beban kerja yang berjalan, dan kebijakan WIP memeriksa apakah kunci publik yang dinyatakan oleh layanan diotorisasi oleh kebijakan.

Keamanan yang kuat: Menggunakan tanda tangan image container memungkinkan pengguna mendelegasikan sejumlah kepercayaan kepada penanda tangan image. Dengan menentukan sidik jari kunci publik penanda tangan tepercaya dalam kebijakan pengesahan, pemilik resource memberikan otorisasi kepada penanda tangan tersebut untuk memberikan dukungan terkait image container mana yang memenuhi kebijakan. Layanan Pemverifikasi Pengesahan memverifikasi bahwa tanda tangan terkait dengan beban kerja yang berjalan, dan kebijakan memeriksa apakah kunci publik yang membuat tanda tangan diberi otorisasi oleh kebijakan. Dengan demikian, lapisan tambahan pengalihan yang diberikan oleh penandatanganan gambar akan mempertahankan jaminan keamanan yang kuat atas Ruang Rahasia.

Satu-satunya perbedaan antara pendekatan ini adalah bahwa pendekatan yang terakhir menggunakan lapisan pengalihan tambahan di mana gambar beban kerja diotorisasi dengan kunci penandatanganan. Hal ini tidak menimbulkan kerentanan keamanan baru karena batasan kepercayaan tetap sama.

Yang akan Anda pelajari

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

  • Cara menandatangani image container yang telah 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 beban kerja di Ruang Rahasia dengan dukungan image container yang ditandatangani

Codelab ini menampilkan cara menggunakan Confidential Space untuk mengesahkan image container dari jarak jauh yang ditandatangani oleh kunci tepercaya yang berjalan di Google Compute Engine.

Yang Anda butuhkan

Peran yang terlibat dalam Ruang Rahasia dengan Image Container Bertanda Tangan

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

  1. Menyiapkan resource yang diperlukan dengan contoh data.
  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 workload, serta bertanggung jawab untuk:

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

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

Resource yang terlibat dalam penyiapan Confidential Space

Codelab ini merujuk pada 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 mencakup ketentuan otorisasi yang akan digunakan untuk token yang ditandatangani oleh Layanan Pemverifikasi Pengesahan.
  • $PRIMUS_SERVICEACCOUNT: akun layanan yang digunakan $PRIMUS_WORKLOAD_IDENTITY_POOL untuk mengakses resource yang dilindungi. Pada langkah ini, aplikasi ini 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 kasus ini).

Konfigurasikan hal berikut di project Secundus:

  • $SECUNDUS_ARTIFACT_REGISTRY: artifact registry tempat image Docker workload akan dikirim.
  • $WORKLOAD_IMAGE_NAME: nama image Docker workload.
  • $WORKLOAD_IMAGE_TAG: tag image Docker workload.
  • $WORKLOAD_SERVICEACCOUNT: akun layanan yang memiliki izin untuk mengakses Confidential VM yang menjalankan workload.
  • $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 mengkueri data ini.

Alur kerja yang ada

Saat Anda menjalankan beban kerja 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 Pemverifikasi Pengesahan dengan klaim workload dan lingkungan.
  2. Jika klaim pengukuran beban kerja dalam token layanan Pemverifikasi Pengesahan cocok dengan kondisi atribut di WIP, token akses akan ditampilkan untuk $PRIMUS_SERVICEACCOUNT.
  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 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 container apa pun yang terkait dengan image workload yang berjalan saat ini dan mengirimkannya ke pemverifikasi 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 Pemverifikasi Pengesahan dengan klaim workload dan lingkungan.
  3. Jika klaim tanda tangan penampung dalam token layanan Pemverifikasi Pengesahan cocok dengan kondisi atribut di WIP, token akses untuk $PRIMUS_SERVICEACCOUNT akan ditampilkan.
  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 Primus dan bank Secundus. Berikut adalah resource baru untuk codelab ini:

Dalam project Primus:

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

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

Sebagai bagian dari penyiapan Confidential Space, Anda akan membuat resource cloud yang diperlukan dalam 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
  • Pastikan Anda telah menetapkan project yang diperlukan seperti yang ditunjukkan di bawah ini.
$ export PRIMUS_PROJECT_ID=<GCP project id of primus bank>
$ export SECUNDUS_PROJECT_ID=<GCP project id of secundus bank>
  • Setel 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 guna menetapkan nama variabel yang tersisa ke nilai berdasarkan project ID Anda untuk nama resource.
$ source config_env.sh
  • Instal cosign dengan mengikuti petunjuk di sini.

Menyiapkan resource bank Primus

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

  • Bucket Cloud Storage ($PRIMUS_INPUT_STORAGE_BUCKET) untuk menyimpan file data pelanggan terenkripsi bank Primus.
  • Kunci enkripsi ($PRIMUS_ENC_KEY) dan keyring ($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 sesuai penyedianya.
  • Akun layanan ($PRIMUS_SERVICEACCOUNT) yang disertakan ke kumpulan workload identity yang disebutkan di atas ($PRIMUS_WORKLOAD_IDENTITY_POOL) 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 kumpulan workload identity.
$ ./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 guna menyiapkan resource untuk bank Secundus. Sebagai bagian dari langkah-langkah yang disebutkan di bawah ini, referensi akan dibuat:

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

3. Membuat dan Menandatangani Workload

Buat akun layanan workload

Sekarang, Anda akan membuat akun layanan untuk workload 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 workload.

  • Akun layanan workload 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 Cloud Storage $PRIMUS_INPUT_STORAGE_BUCKET.
  • objectAdmin untuk menulis hasil workload ke bucket Cloud Storage $SECUNDUS_RESULT_STORAGE_BUCKET.
$ ./create_workload_serviceaccount.sh

Membuat workload

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 disediakan dalam argumen. Jalankan skrip berikut untuk membuat beban kerja yang menjalankan langkah-langkah berikut:

  • Buat Artifact Registry($SECUNDUS_ARTIFACT_REGISTRY) yang dimiliki oleh bank Secundus.
  • Perbarui kode beban kerja dengan nama resource yang diperlukan. Berikut adalah kode beban kerja yang digunakan untuk codelab ini.
  • Bangun biner Go dan buat Dockerfile untuk membangun image Docker kode workload. Berikut adalah Dockerfile yang digunakan untuk codelab ini.
  • Bangun dan publikasikan image Docker ke Artifact Registry ($SECUNDUS_ARTIFACT_REGISTRY) milik bank Secundus.
  • Beri $WORKLOAD_SERVICEACCOUNT izin baca untuk $SECUNDUS_ARTIFACT_REGISTRY. Tindakan ini diperlukan agar container workload mengambil image Docker workload dari Artifact Registry.
$ ./create_workload.sh

Menandatangani Beban Kerja

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

Di sini kita akan menggunakan Artifact Registry sebagai contoh. Anda juga dapat memilih registry berbasis OKI 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=us
  1. Buat keyring dan kunci di bawah KMS untuk menandatangani image workload.
$ gcloud config set project $PRIMUS_PROJECT_ID

$ gcloud kms keyrings create $PRIMUS_SIGNING_KEYRING \
  --location=global

$ gcloud kms keys create $PRIMUS_SIGNING_KEY \
  --keyring=$PRIMUS_SIGNING_KEYRING \
  --purpose=asymmetric-signing \
  --default-algorithm=ec-sign-p256-sha256
  --location=us
  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 Viewer di repositori $PRIMUS_COSIGN_REPOSITORY ke akun layanan $WORKLOAD_SERVICEACCOUNT. Tindakan ini memungkinkan Ruang Rahasia 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 canggih dengan beberapa fitur penandatanganan. Untuk kasus penggunaan ini, kita hanya mengharuskan Cosign untuk menandatangani dengan pasangan kunci. Penandatanganan tanpa kunci cosign tidak didukung untuk fitur image container yang ditandatangani.

Saat menandatangani dengan pasangan kunci, ada dua opsi:

  1. Tanda tangani dengan pasangan kunci lokal yang dihasilkan oleh Cosign.
  2. Menandatangani dengan pasangan kunci yang disimpan di tempat lain (misalnya, di KMS).
  1. Buat pasangan kunci di Cosign jika Anda belum memilikinya. Lihat penandatanganan dengan kunci yang dikelola sendiri untuk detail selengkapnya.
// 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

  • &lt;provider&gt; : Mengacu pada solusi KMS yang Anda gunakan
  • &lt;key&gt; : 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. Jalankan 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 lampiran algoritma tanda tangan dan kunci publik yang diekspor.
$ 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 spesifik dari dukungan KMS Sigstore. Saat merujuk ke kunci yang dihasilkan oleh Cosign, gunakan cosign.key.
  • $IMAGE_REFERENCE [REQUIRED] menentukan image container yang akan ditandatangani. Format IMAGE_REFERENCE dapat diidentifikasi dengan ringkasan tag atau gambar. Contoh: 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 [REQUIRED] menentukan anotasi yang dilampirkan ke payload tanda tangan. Untuk image container yang ditandatangani oleh 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 algoritme tanda tangan default untuk pasangan kunci yang dihasilkan Cosign.
  1. Mengupload tanda tangan ke repositori Docker

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

4. Memberi Otorisasi dan Menjalankan Beban Kerja

Mengizinkan 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 syaratnya adalah memvalidasi sidik jari tanda tangan image workload terhadap penandatanganan sidik jari kunci publik. Dengan kondisi atribut ini, saat Secundus Bank merilis image workload baru, Primus Bank 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 workload di Confidential VM. Argumen TEE yang diperlukan diteruskan menggunakan tanda metadata. Argumen untuk container workload diteruskan menggunakan "tee-cmd" dari penanda. Beban kerja dikodekan untuk memublikasikan hasilnya ke $SECUNDUS_RESULT_STORAGE_BUCKET.

$ gcloud config set project $SECUNDUS_PROJECT_ID

$ gcloud compute instances create signed-container-vm \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=TERMINATE \
 --scopes=cloud-platform --zone=us-west1-b \
 --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

Dalam project Secundus, lihat hasil workload.

$ gcloud config set project $SECUNDUS_PROJECT_ID

$ gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result

Hasilnya seharusnya 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:

  • Bucket penyimpanan input bank Primus ($PRIMUS_INPUT_STORAGE_BUCKET).
  • Rekening layanan bank Primus ($PRIMUS_SERVICEACCOUNT).
  • Registry artefak Primus Bank yang menyimpan tanda tangan gambar ($PRIMUS_COSIGN_REPOSITORY).
  • Kumpulan identitas workload Primus Bank ($PRIMUS_WORKLOAD_IDENTITY_POOL).
  • Akun layanan workload Secundus Bank ($WORKLOAD_SERVICEACCOUNT).
  • dengan Workload Compute Instance.
  • Bucket penyimpanan hasil Secundus Bank ($SECUNDUS_RESULT_STORAGE_BUCKET).
  • Artefak registry Secundus Bank ($SECUNDUS_ARTIFACT_REGISTRY).
// run the clean up script to delete the resources created as part of this codelab.
$ ./cleanup.sh

Jika Anda telah selesai menjelajah, pertimbangkan untuk menghapus proyek Anda.

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

Selamat

Selamat, Anda berhasil menyelesaikan codelab.

Anda telah mempelajari cara memanfaatkan fitur image container bertanda tangan untuk meningkatkan kegunaan Confidential Space.

Apa selanjutnya?

Lihat beberapa codelab serupa ini...

Bacaan lebih lanjut