1. Ringkasan
Codelab ini dibuat berdasarkan codelab Confidential Space. Dukungan image container bertanda tangan memberikan opsi untuk mengautentikasi container menggunakan kunci publik yang disahkan, bukan menentukan ringkasan image dalam kebijakan Workload Identity Pool (WIP).
Yang berubah dengan dukungan image container bertanda tangan di Confidential Space:
Peningkatan kegunaan: Dengan diperkenalkannya fitur image container bertanda tangan, kita kini dapat beralih dari pendekatan ringkasan image workload ke pendekatan tanda tangan container untuk kolaborator/auditor yang mengizinkan image.
- Saat menggunakan ringkasan gambar secara langsung, pemilik resource harus memperbarui kebijakan mereka dengan ringkasan gambar setiap kali mereka mengizinkan gambar baru. Dengan menggunakan tanda tangan gambar, kebijakan berisi sidik jari kunci publik, yang kunci pribadinya dimiliki oleh kolaborator/auditor dan digunakan untuk menandatangani gambar yang diaudit.
- Untuk beberapa model keamanan, merujuk pada kunci penandatanganan gambar tepercaya lebih mudah daripada memperbarui daftar nilai ringkasan gambar baru.
Tidak ada regresi keamanan: Pendekatan tanda tangan penampung ini tidak akan menimbulkan regresi keamanan apa pun dibandingkan pendekatan ringkasan gambar sebelumnya karena batas kepercayaan tetap sama. Dalam pendekatan tanda tangan penampung, pemilik resource mengizinkan 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 bahwa kunci publik yang ditegaskan oleh layanan diizinkan oleh kebijakan.
Keamanan yang kuat: Penggunaan 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 mengizinkan penanda tangan tersebut untuk membuat pengesahan pada image container yang memenuhi kebijakan. Layanan Verifikasi Pengesahan memverifikasi bahwa tanda tangan terkait dengan beban kerja yang sedang berjalan, dan kebijakan memeriksa bahwa kunci publik yang membuat tanda tangan tersebut diizinkan oleh kebijakan. Dengan demikian, lapisan tambahan tidak langsung yang disediakan penandatanganan gambar mempertahankan jaminan keamanan yang kuat dari Confidential Space.
Satu-satunya perbedaan antara pendekatan ini adalah pendekatan yang terakhir menggunakan lapisan pengalihan ekstra tempat image beban kerja diberi otorisasi 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 mengizinkan 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 bertanda tangan
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
- Menyelesaikan codelab Confidential Space
- Project Google Cloud Platform
- Browser, seperti Chrome atau Firefox
- Pemahaman tentang editor teks Linux standar seperti Vim, Emacs, atau Nano
- Pengetahuan dasar tentang Sigstore cosign
- Pengetahuan dasar tentang Google Compute Engine ( codelab), Confidential VM, Containers, dan repositori jarak jauh
- Pengetahuan dasar tentang Cloud KMS ( codelab)
- Pengetahuan dasar tentang Akun Layanan, Workload identity federation, dan kondisi atribut.
- Pengetahuan dasar tentang Artifact Registry
- Pengetahuan dasar tentang Tanda Tangan Digital
Peran yang terlibat dalam Confidential Space dengan Image Container Bertanda Tangan
Dalam codelab ini, Primus Bank akan menjadi auditor dan pemilik resource, yang akan bertanggung jawab atas hal berikut:
- Menyiapkan resource yang diperlukan dengan data contoh.
- Mengaudit kode workload.
- Menggunakan
cosignuntuk menandatangani image workload. - Mengupload tanda tangan ke repositori.
- Mengonfigurasi kebijakan WIP untuk melindungi data pelanggan.
Secundus Bank akan menjadi pembuat dan operator workload, serta bertanggung jawab atas:
- Menyiapkan resource yang diperlukan untuk menyimpan hasilnya.
- Menulis kode workload.
- Memublikasikan image workload.
- Menjalankan workload di Confidential Space dengan dukungan image container bertanda tangan.
Secundus Bank akan mengembangkan dan memublikasikan beban kerja yang akan membuat kueri data pelanggan yang disimpan di bucket penyimpanan cloud dan dimiliki oleh Primus Bank. Primus Bank akan mengaudit workload, menandatangani image container, dan mengonfigurasi kebijakan WIP untuk mengizinkan akses ke datanya 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 menyetel nama bucket penyimpanan input bank Primus.) Jika variabel nama resource belum ditetapkan, variabel tersebut akan dibuat berdasarkan project-id GCP.
Konfigurasi 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 kondisi otorisasi untuk digunakan pada token yang ditandatangani oleh Layanan Verifikasi Pengesahan.$PRIMUS_SERVICEACCOUNT: akun layanan yang digunakan$PRIMUS_WORKLOAD_IDENTITY_POOLuntuk mengakses resource yang dilindungi. Pada langkah ini, pengguna 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 dalam 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, primus bank dalam kasus ini).
Konfigurasi hal berikut di project Secundus:
$SECUNDUS_ARTIFACT_REGISTRY: artifact registry tempat image Docker beban kerja 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 beban kerja.$SECUNDUS_RESULT_BUCKET: bucket yang menyimpan hasil workload.
Referensi Lainnya:
primus_customer_list.csvberisi data pelanggan. Kita akan mengupload data ini ke$PRIMUS_INPUT_STORAGE_BUCKETdan membuat workload yang akan mengkueri data ini.
Alur kerja yang ada
Saat Anda menjalankan workload di Confidential Space, proses berikut akan terjadi, menggunakan resource yang dikonfigurasi:
- Workload meminta token akses Google umum untuk
$PRIMUS_SERVICEACCOUNTdari WIP. Layanan ini menawarkan token layanan Verifikasi Pengesahan dengan klaim beban kerja dan lingkungan. - Jika klaim pengukuran workload dalam token layanan Pengesahan Verifier cocok dengan kondisi atribut di WIP, token akses akan ditampilkan untuk
$PRIMUS_SERVICEACCOUNT. - Workload menggunakan token akses akun layanan yang terkait dengan
$PRIMUS_SERVICEACCOUNTuntuk mengakses data pelanggan di bucket$PRIMUS_INPUT_STORAGE_BUCKET. - Workload melakukan operasi pada data tersebut.
- Workload menggunakan akun layanan
$WORKLOAD_SERVICEACCOUNTuntuk menulis hasil operasi tersebut ke bucket$SECUNDUS_RESULT_STORAGE_BUCKET.
Alur kerja baru dengan dukungan penampung yang ditandatangani
Dukungan penampung bertanda tangan akan diintegrasikan ke dalam alur kerja yang ada, seperti yang ditunjukkan di bawah. Saat Anda menjalankan workload di Confidential Space dengan dukungan image container bertanda tangan, proses berikut akan terjadi, menggunakan resource yang dikonfigurasi:
- Confidential Space menemukan tanda tangan container 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.
- Workload meminta token akses Google umum untuk
$PRIMUS_SERVICEACCOUNTdari WIP. Layanan ini menawarkan token layanan Verifikasi Pengesahan dengan klaim beban kerja dan lingkungan. - Jika klaim tanda tangan penampung dalam token layanan Pengesah Pengesahan cocok dengan kondisi atribut dalam WIP, token akses untuk
$PRIMUS_SERVICEACCOUNTakan ditampilkan. - Workload menggunakan token akses akun layanan yang terkait dengan
$PRIMUS_SERVICEACCOUNTuntuk mengakses data pelanggan di bucket$PRIMUS_INPUT_STORAGE_BUCKET. - Workload melakukan operasi pada data tersebut.
- Workload menggunakan
$WORKLOAD_SERVICEACCOUNTuntuk 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 dalam codelab ini:
Dalam project Primus:
- Kunci penandatanganan KMS yang digunakan untuk menandatangani beban kerja Secundus, setelah mengaudit kode.
- Repositori Artifact Registry untuk menyimpan tanda tangan Cosign.
Tidak ada resource baru dalam 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. Kemudian, workload akan diberi otorisasi oleh kolaborator data (Primus Bank dalam codelab ini) dan operator workload (Secundus Bank dalam kasus ini) akan menjalankan workload.
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 penyimpanan cloud (
$PRIMUS_INPUT_STORAGE_BUCKET) untuk menyimpan file data pelanggan terenkripsi milik 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 di penyedianya. - Akun layanan (
$PRIMUS_SERVICEACCOUNT) yang dilampirkan ke pool identitas beban kerja yang disebutkan di atas ($PRIMUS_WORKLOAD_IDENTITY_POOL) dengan akses IAM berikut: roles/cloudkms.cryptoKeyDecrypteruntuk mendekripsi data menggunakan kunci KMS.objectVieweruntuk membaca data dari bucket penyimpanan cloud.roles/iam.workloadIdentityUseruntuk 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-langkah ini, resource yang disebutkan di bawah akan dibuat:
- Bucket penyimpanan cloud (
$SECUNDUS_RESULT_STORAGE_BUCKET) untuk menyimpan hasil eksekusi workload oleh bank Secundus.
./setup_secundus_bank_resources.sh
3. Membuat dan Menandatangani Beban Kerja
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 workload di project bank Secundus. Akun layanan ini akan digunakan oleh VM yang menjalankan workload.
- Akun layanan beban kerja ini (
$WORKLOAD_SERVICEACCOUNT) akan memiliki peran berikut: confidentialcomputing.workloadUseruntuk mendapatkan token pengesahanlogging.logWriteruntuk menulis log ke Cloud Logging.objectVieweruntuk membaca data dari bucket penyimpanan cloud$PRIMUS_INPUT_STORAGE_BUCKET.objectAdminuntuk 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. Workload 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 yang melakukan 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 dari kode beban kerja. Berikut adalah Dockerfile yang digunakan untuk codelab ini.
- Bangun dan publikasikan image Docker ke Artifact Registry (
$SECUNDUS_ARTIFACT_REGISTRY) yang dimiliki oleh bank Secundus. - Beri izin baca
$WORKLOAD_SERVICEACCOUNTuntuk$SECUNDUS_ARTIFACT_REGISTRY. Hal ini diperlukan agar container workload dapat menarik image Docker workload dari Artifact Registry.
./create_workload.sh
Menandatangani Beban Kerja
Kita akan menggunakan Cosign untuk menandatangani image workload. Cosign secara default akan menyimpan tanda tangan di repo yang sama dengan image yang ditandatanganinya. Untuk menentukan repositori yang berbeda untuk tanda tangan, Anda dapat menyetel 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.
- 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}
- 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=${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}
- Untuk Artifact Registry, nama lengkap image seperti
$LOCATION/$PROJECT/$REPOSITORY/$IMAGE_NAMEdiharapkan. 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
- Berikan peran Pelihat di repositori
$PRIMUS_COSIGN_REPOSITORYke 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 canggih dengan beberapa fitur penandatanganan. Untuk kasus penggunaan kami, kami 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:
- Menandatangani dengan pasangan kunci lokal yang dibuat oleh Cosign.
- Menandatangani dengan pasangan kunci yang disimpan di tempat lain (misalnya, di KMS).
- Buat pasangan kunci di Cosign jika Anda belum memilikinya. Lihat penandatanganan 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
Pada bagian 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> : Merujuk pada solusi KMS yang Anda gunakan
- <key> : Merujuk ke jalur kunci di KMS
- 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
- Tandatangani workload menggunakan Cosign. Lakukan 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/[=]*$//')
- Tandatangani 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. FormatIMAGE_REFERENCEdapat diidentifikasi berdasarkan tag atau ringkasan 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 [WAJIB] menentukan anotasi yang dilampirkan ke payload tanda tangan. Untuk image container bertanda tangan Confidential Space, algoritma tanda tangan dan kunci publik harus dilampirkan ke payload tanda tangan.
dev.cosignproject.cosign/sigalgONLY 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.
- Mengupload tanda tangan ke repositori docker
Tanda tangan Cosign akan otomatis mengupload tanda tangan ke COSIGN_REPOSITORY. yang ditentukan
4. Memberi Otorisasi dan Menjalankan Beban Kerja
Memberi Otorisasi Beban Kerja
Sebagai bagian dari langkah ini, kita akan menyiapkan penyedia workload identity di bagian 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 workload di Confidential VM. Argumen TEE yang diperlukan diteruskan menggunakan tanda metadata. Argumen untuk container workload diteruskan menggunakan bagian "tee-cmd" dari flag. Workload dikodekan 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"
Melihat hasilnya
Di project Secundus, lihat hasil workload.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
Hasilnya harus 3, karena jumlah orang dari Seattle yang tercantum dalam file primus_customer_list.csv adalah 3.
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). - 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 Secundus Bank (
$WORKLOAD_SERVICEACCOUNT). - Instance Compute Workload.
- Bucket penyimpanan hasil Secundus Bank (
$SECUNDUS_RESULT_STORAGE_BUCKET). - Artifact Registry Secundus Bank (
$SECUNDUS_ARTIFACT_REGISTRY). - VM Workload Secundus Bank (
$WORKLOAD_VM).
./cleanup.sh
Jika Anda sudah selesai menjelajah, pertimbangkan untuk menghapus project Anda.
- Buka Cloud Platform Console
- Pilih project yang ingin Anda nonaktifkan, lalu klik 'Hapus' di bagian atas: tindakan ini akan menjadwalkan penghapusan project
Selamat
Selamat, Anda berhasil menyelesaikan codelab ini.
Anda telah mempelajari cara memanfaatkan fitur image container bertanda tangan untuk meningkatkan kegunaan Confidential Space.
Apa selanjutnya?
Lihat beberapa codelab serupa ini...
- Data bersama yang diamankan saat digunakan dengan Confidential Space
- Cara melakukan transaksi aset digital dengan komputasi banyak pihak dan ruang rahasia
- Menganalisis data rahasia dengan Ruang rahasia
Bacaan lebih lanjut
- Merasa terisolasi? Confidential computing hadir untuk membantu
- Confidential Computing di GCP
- Confidential Space: Masa depan kolaborasi yang menjaga privasi
- Cara Google dan Intel membuat Confidential Computing lebih aman
- Privasi vs. Progres - Meningkatkan Keamanan dengan Confidential Computing Google Cloud