Mengamankan data aktif bersama dengan Confidential Space

1. Ringkasan

Confidential Space menawarkan berbagi dan kolaborasi data multi-pihak yang aman, sekaligus memungkinkan organisasi menjaga kerahasiaan data mereka. Artinya, organisasi dapat berkolaborasi satu sama lain sekaligus tetap mengontrol data mereka dan melindunginya dari akses yang tidak sah.

Confidential Space memungkinkan skenario saat Anda ingin memperoleh manfaat bersama dari menggabungkan dan menganalisis data sensitif, yang sering kali diatur, sekaligus mempertahankan kontrol penuh atas data tersebut. Dengan Confidential Space, organisasi dapat memperoleh manfaat bersama dari menggabungkan dan menganalisis data sensitif seperti informasi identitas pribadi (PII), informasi kesehatan terlindungi (PHI), kekayaan intelektual, dan rahasia kriptografi — sekaligus mempertahankan kontrol penuh atas data tersebut.

Yang Anda butuhkan

Yang akan Anda pelajari

  • Cara mengonfigurasi resource Cloud yang diperlukan untuk menjalankan Confidential Space
  • Cara menjalankan workload di Confidential VM yang menjalankan image VM Confidential Space
  • Cara mengizinkan akses ke resource yang dilindungi berdasarkan atribut kode workload (apa), lingkungan Confidential Space (di mana), dan akun yang menjalankan workload (siapa).

Dalam codelab ini, Anda akan menyiapkan Ruang Rahasia antara Primus Bank dan Secundus Bank untuk menentukan pelanggan umum mereka tanpa membagikan daftar akun lengkap satu sama lain. Proses ini mencakup langkah-langkah berikut:

  • Langkah 1: Siapkan resource cloud yang diperlukan untuk Bank Primus dan Secundus. Resource cloud ini mencakup bucket penyimpanan cloud, kunci KMS, kumpulan workload identity, dan akun layanan untuk Bank Primus dan Secundus. Primus Bank dan Secundus Bank menyimpan data pelanggan mereka di bucket Cloud Storage dan mengenkripsi data menggunakan kunci Cloud Key Management Service.
  • Langkah 2: Buat akun layanan workload yang akan digunakan oleh VM workload. Secundus Bank yang akan menjadi operator workload akan meluncurkan VM workload. Primus Bank akan menulis kode workload.
  • Langkah 3: Buat beban kerja yang mencakup dua perintah CLI, satu untuk menghitung pelanggan dari lokasi yang diberikan dan satu lagi untuk menemukan pelanggan umum Primus dan Secundus Bank. Beban kerja akan dibuat oleh Primus Bank dan akan dikemas sebagai image Docker. Image Docker ini akan dipublikasikan ke Artifact Registry.
  • Langkah 4: Beri otorisasi beban kerja. Primus Bank akan menggunakan kumpulan workload identity untuk mengizinkan workload mengakses data pelanggan mereka berdasarkan atribut siapa yang menjalankan workload, apa yang dilakukan workload, dan tempat workload dijalankan.
  • Langkah 5: Saat workload berjalan, workload akan meminta akses ke resource cloud kolaborator data (Primus Bank dan Secundus Bank) dengan menawarkan token layanan Pengesahan Verifier dengan klaim workload dan lingkungan. Jika klaim pengukuran beban kerja dalam token cocok dengan kondisi atribut di kumpulan identitas beban kerja Primus dan Secundus Bank, maka akan menampilkan token akses akun layanan yang memiliki izin untuk mengakses resource cloud masing-masing. Resource cloud hanya dapat diakses oleh beban kerja yang berjalan di dalam Confidential Space.
  • Langkah 5(a): Jalankan workload pertama yang menghitung pelanggan Primus Bank dari lokasi tertentu. Untuk workload ini, Primus Bank akan menjadi kolaborator data dan penulis workload, yang akan memberikan daftar pelanggan terenkripsi ke workload yang berjalan di Confidential Space. Secundus Bank akan menjadi operator workload dan akan menjalankan workload di Confidential Space.
  • Langkah 5(b): Jalankan workload kedua yang menemukan pelanggan umum Primus dan Secundus Bank. Untuk beban kerja ini, Primus Bank dan Secundus Bank akan menjadi kolaborator data. Mereka akan memberikan daftar pelanggan terenkripsi ke beban kerja yang berjalan di Confidential Space. Secundus Bank akan menjadi operator workload lagi. Beban kerja ini juga akan diberi otorisasi oleh Secundus Bank karena beban kerja perlu mengakses daftar pelanggan terenkripsi Secundus Bank untuk menemukan pelanggan yang sama. Dalam hal ini, Secundus Bank akan mengizinkan beban kerja untuk mengakses data pelanggannya berdasarkan atribut siapa yang menjalankan beban kerja, apa yang dilakukan beban kerja, dan tempat beban kerja berjalan seperti yang disebutkan pada langkah 4 untuk Primus Bank.

fdef93a6868a976.png

2. Menyiapkan Resource Cloud

Sebelum memulai

  • Clone repositori ini menggunakan perintah di bawah untuk mendapatkan skrip yang diperlukan dan digunakan sebagai bagian dari codelab ini.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
  • Ubah direktori untuk codelab ini.
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
  • Pastikan Anda telah menetapkan variabel lingkungan project yang diperlukan seperti yang ditunjukkan di bawah. Untuk mengetahui informasi selengkapnya tentang cara membuat project GCP, lihat codelab ini. Anda dapat melihat artikel ini untuk mendapatkan detail tentang cara mengambil project ID dan perbedaannya dengan nama project dan nomor project.
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
  • Aktifkan Penagihan untuk project Anda.
  • Aktifkan Confidential Computing API dan API berikut untuk kedua project.
gcloud services enable \
    cloudapis.googleapis.com \
    cloudkms.googleapis.com \
    cloudresourcemanager.googleapis.com \
    cloudshell.googleapis.com \
    container.googleapis.com \
    containerregistry.googleapis.com \
    iam.googleapis.com \
    confidentialcomputing.googleapis.com
  • Tetapkan variabel untuk nama resource seperti yang disebutkan di bawah menggunakan perintah ini. Anda dapat mengganti nama resource menggunakan variabel ini (misalnya export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket')
  • Anda dapat menetapkan variabel berikut dengan nama resource cloud yang ada di project Primus. Jika variabel ditetapkan, resource cloud yang ada dan sesuai dari project Primus akan digunakan. Jika variabel tidak disetel, nama resource cloud akan dibuat dari nama project dan resource cloud baru akan dibuat sebagai bagian dari berikut ini:

$PRIMUS_INPUT_STORAGE_BUCKET

Bucket yang menyimpan file data pelanggan Primus Bank.

$PRIMUS_WORKLOAD_IDENTITY_POOL

Workload Identity Pool (WIP) Primus Bank yang memvalidasi klaim.

$PRIMUS_WIP_PROVIDER

Penyedia Workload Identity Pool Primus Bank yang mencakup kondisi otorisasi untuk digunakan pada token yang ditandatangani oleh Layanan Verifikasi Pengesahan.

$PRIMUS_SERVICE_ACCOUNT

Akun layanan Primus Bank yang digunakan $PRIMUS_WORKLOAD_IDENTITY_POOL untuk 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 untuk Primus Bank.

$PRIMUS_ENC_KEYRING

Keyring KMS yang akan digunakan untuk membuat kunci enkripsi $PRIMUS_ENC_KEY untuk Primus Bank.

$PRIMUS_ARTIFACT_REPOSITORY

Repositori artefak tempat image Docker beban kerja akan dikirim.

  • Anda dapat menetapkan variabel berikut dengan nama resource cloud yang ada di project Secundus. Jika variabel ditetapkan, resource cloud yang ada dan sesuai dari project Secundus akan digunakan. Jika variabel tidak disetel, nama resource cloud akan dibuat dari nama project dan resource cloud baru akan dibuat sebagai bagian dari berikut ini:

$SECUNDUS_INPUT_STORAGE_BUCKET

Bucket yang menyimpan file data pelanggan Secundus Bank

$SECUNDUS_WORKLOAD_IDENTITY_POOL

Workload Identity Pool (WIP) Secundus Bank yang memvalidasi klaim.

$SECUNDUS_WIP_PROVIDER

Penyedia Workload Identity Pool Secundus Bank yang mencakup kondisi otorisasi yang akan digunakan untuk token yang ditandatangani oleh Layanan Verifikasi Pengesahan.

$SECUNDUS_SERVICE_ACCOUNT

Akun layanan Secundus Bank yang digunakan $SECUNDUS_WORKLOAD_IDENTITY_POOL untuk mengakses resource yang dilindungi. Pada langkah ini, pengguna memiliki izin untuk melihat data pelanggan yang disimpan di bucket $SECUNDUS_INPUT_STORAGE_BUCKET.

$SECUNDUS_ENC_KEY

Kunci KMS yang digunakan untuk mengenkripsi data yang disimpan di $SECUNDUS_INPUT_STORAGE_BUCKET untuk Secundus Bank.

$SECUNDUS_ENC_KEYRING

Keyring KMS yang digunakan untuk membuat kunci enkripsi $SECUNDUS_ENV_KEY untuk Secundus Bank.

$SECUNDUS_RESULT_STORAGE_BUCKET

Bucket yang menyimpan hasil workload.

$WORKLOAD_IMAGE_NAME

Nama image container workload.

$WORKLOAD_IMAGE_TAG

Tag image container workload.

$WORKLOAD_SERVICE_ACCOUNT

Akun layanan yang memiliki izin untuk mengakses Confidential VM yang menjalankan workload.

  • Ada beberapa artefak yang digunakan sebagai bagian dari codelab ini seperti yang disebutkan di bawah:
  • primus_customer_list.csv: File yang berisi data pelanggan Primus Bank. Berikut adalah file contoh yang digunakan dalam codelab ini.
  • secundus_customer_list.csv: File yang berisi data pelanggan Secundus Bank. Berikut adalah file contoh yang digunakan dalam codelab ini.
  • Anda memerlukan izin tertentu untuk kedua project ini:
  • Untuk $PRIMUS_PROJECT_ID, Anda memerlukan peran Cloud KMS Admin, Storage Admin, Artifact Registry Administrator, Service Account Admin, IAM Workload Identity Pool Admin.
  • Untuk $SECUNDUS_PROJECT_ID, Anda memerlukan Compute Admin, Storage Admin, Service Account Admin, Cloud KMS Admin, IAM Workload Identity Pool Admin, Security Admin (opsional).
  • Jalankan skrip berikut untuk menetapkan nama variabel yang tersisa ke nilai berdasarkan project ID Anda untuk nama resource.
source config_env.sh

Menyiapkan resource cloud untuk Primus Bank

Resource cloud berikut diperlukan untuk Primus Bank. Jalankan skrip ini untuk menyiapkan resource Primus Bank:

  • Bucket penyimpanan cloud ($PRIMUS_INPUT_STORAGE_BUCKET) untuk menyimpan file data pelanggan terenkripsi Primus Bank.
  • Kunci enkripsi ($PRIMUS_ENC_KEY) dan keyring ($PRIMUS_ENC_KEYRING) di KMS untuk mengenkripsi file data pelanggan Primus Bank.
  • Workload Identity Pool ($PRIMUS_WORKLOAD_IDENTITY_POOL) untuk memvalidasi klaim berdasarkan kondisi atribut yang dikonfigurasi di penyedianya.
  • Akun layanan ($PRIMUS_SERVICE_ACCOUNT) yang terlampir pada kumpulan identitas workload yang disebutkan di atas ($PRIMUS_WORKLOAD_IDENTITY_POOL) memiliki akses untuk mendekripsi data menggunakan kunci KMS (menggunakan peran roles/cloudkms.cryptoKeyDecrypter), membaca data dari bucket Cloud Storage (menggunakan peran objectViewer), dan menghubungkan akun layanan ke kumpulan identitas workload (menggunakan roles/iam.workloadIdentityUser).
./setup_primus_bank_resources.sh

Menyiapkan resource cloud untuk Secundus Bank

Untuk Secundus Bank, resource cloud berikut diperlukan. Jalankan skrip ini untuk menyiapkan resource Secundus Bank. Sebagai bagian dari langkah-langkah ini, resource yang disebutkan di bawah akan dibuat:

  • Bucket penyimpanan cloud ($SECUNDUS_INPUT_STORAGE_BUCKET) untuk menyimpan file data pelanggan terenkripsi Secundus Bank.
  • Kunci enkripsi ($SECUNDUS_ENC_KEY) dan keyring ($SECUNDUS_ENC_KEYRING) di KMS untuk mengenkripsi file data Secundus Bank.
  • Workload Identity Pool ($SECUNDUS_WORKLOAD_IDENTITY_POOL) untuk memvalidasi klaim berdasarkan kondisi atribut yang dikonfigurasi di penyedianya.
  • Akun layanan ($SECUNDUS_SERVICE_ACCOUNT) yang dilampirkan ke kumpulan identitas beban kerja yang disebutkan di atas ($SECUNDUS_WORKLOAD_IDENTITY_POOL) memiliki akses untuk mendekripsi data menggunakan kunci KMS (menggunakan peran roles/cloudkms.cryptoKeyDecrypter), membaca data dari bucket Cloud Storage (menggunakan peran objectViewer), dan menghubungkan akun layanan ke kumpulan identitas beban kerja (menggunakan peran roles/iam.workloadIdentityUser).
  • Bucket penyimpanan cloud ($SECUNDUS_RESULT_STORAGE_BUCKET) untuk menyimpan hasil eksekusi workload oleh Secundus Bank.
./setup_secundus_bank_resources.sh

3. Membuat Beban Kerja

Buat akun layanan workload

Sekarang, Anda akan membuat akun layanan untuk beban kerja dengan peran dan izin yang diperlukan seperti yang disebutkan di bawah. Jalankan skrip berikut untuk membuat akun layanan workload di project Secundus Bank. VM yang menjalankan workload akan menggunakan akun layanan ini.

Akun layanan beban kerja ini ($WORKLOAD_SERVICE_ACCOUNT) akan memiliki peran berikut:

  • Berikan peran confidentialcomputing.workloadUser ke akun layanan workload . Tindakan ini akan memungkinkan akun pengguna membuat token pengesahan.
  • Berikan izin peran logging.logWriter ke akun layanan workload. Hal ini memungkinkan lingkungan Confidential Space menulis log ke Cloud Logging selain Konsol Serial, sehingga log tersedia setelah VM dihentikan.
  • objectViewer untuk membaca data dari bucket penyimpanan cloud $PRIMUS_INPUT_STORAGE_BUCKET.
  • objectViewer untuk membaca data dari bucket penyimpanan cloud $SECUNDUS_INPUT_STORAGE_BUCKET.
  • objectAdmin untuk menulis hasil beban kerja ke bucket Cloud Storage $SECUNDUS_RESULT_STORAGE_BUCKET.
./create_workload_service_account.sh

Membuat beban kerja

Sebagai bagian dari langkah ini, Anda akan membuat image Docker untuk beban kerja yang digunakan dalam codelab ini. Beban kerja adalah aplikasi GoLang sederhana yang:

  • Menghitung pelanggan di lokasi geografis tertentu.
  • Menemukan pelanggan umum Primus Bank dan Secundus Bank dari daftar pelanggan yang disimpan di bucket penyimpanan cloud masing-masing.

Jalankan skrip berikut untuk membuat workload yang melakukan langkah-langkah berikut:

  • Buat Artifact Registry ($PRIMUS_ARTIFACT_REPOSITORY) yang dimiliki oleh Primus Bank tempat workload akan dipublikasikan.
  • Buat kode dan perbarui dengan nama resource yang diperlukan. Kode beban kerja yang digunakan dalam codelab ini dapat ditemukan di sini.
  • Bangun kode dan paketkan dalam image Docker. Dockerfile yang sesuai dapat ditemukan di sini.
  • Publikasikan image Docker ke Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY) yang dimiliki oleh Primus Bank.
  • Berikan izin baca $WORKLOAD_SERVICE_ACCOUNT akun layanan untuk Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY).
./create_workload.sh

4. Memberi Otorisasi dan Menjalankan Beban Kerja

Memberi Otorisasi Beban Kerja

Primus Bank ingin mengizinkan workload mengakses data pelanggan mereka berdasarkan atribut resource berikut:

  • Apa: Kode yang diverifikasi
  • Tempat: Lingkungan yang aman
  • Siapa: Operator yang tepercaya

Primus menggunakan Workload identity federation untuk menerapkan kebijakan akses berdasarkan persyaratan ini.

Workload identity federation memungkinkan Anda menentukan kondisi atribut. Kondisi ini membatasi identitas yang dapat melakukan autentikasi dengan workload identity pool (WIP). Anda dapat menambahkan Layanan Verifikasi Pengesahan ke WIP sebagai penyedia workload identity pool untuk menyajikan pengukuran dan menerapkan kebijakan.

Workload identity pool sudah dibuat sebelumnya sebagai bagian dari langkah penyiapan resource cloud. Sekarang, Primus Bank akan membuat penyedia workload identity pool OIDC baru. --attribute-condition yang ditentukan mengizinkan akses ke container workload. API ini memerlukan:

  • Perihal: $WORKLOAD_IMAGE_NAME terbaru diupload ke repositori $PRIMUS_ARTIFACT_REPOSITORY.
  • Lokasi: Trusted execution environment Confidential Space berjalan di image VM Confidential Space yang didukung sepenuhnya.
  • Siapa: Akun layanan Secundus Bank $WORKLOAD_SERVICE_ACCOUNT.
gcloud config set project $PRIMUS_PROJECT_ID
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 &&
   assertion.submods.container.image_reference == 'us-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' && 
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

Mirip dengan WIP yang dibuat untuk Primus Bank, Secundus Bank ingin mengizinkan workload mengakses data pelanggannya berdasarkan:

  • Apa: Workload.
  • Di mana: Lingkungan Confidential Space.
  • Siapa: Akun ($WORKLOAD_SERVICE_ACCOUNT) yang menjalankan workload.

Primus Bank menggunakan klaim image_reference, yang mencakup tag gambar, untuk menentukan apakah mereka harus mengizinkan akses. Mereka mengontrol repositori jarak jauh, sehingga mereka dapat memastikan untuk hanya memberi tag pada gambar yang tidak membocorkan data mereka.

Sebagai perbandingan, Secundus Bank tidak mengontrol repositori tempat mereka mendapatkan gambar, sehingga mereka tidak dapat membuat asumsi tersebut dengan aman. Sebagai gantinya, mereka memilih untuk mengizinkan akses ke workload berdasarkan image_digest-nya. Tidak seperti image_reference, yang dapat diubah oleh Primus Bank untuk mengarah ke gambar lain, Primus Bank tidak dapat membuat image_digest merujuk ke gambar selain yang diaudit oleh Secundus Bank pada langkah sebelumnya.

Sebelum membuat penyedia workload identity pool, kita akan mengumpulkan image_digest untuk image container workload yang akan digunakan dalam kondisi atribut penyedia.

export WORKLOAD_IMAGE_DIGEST=$(gcloud artifacts docker images describe ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG  --format="value(image_summary.digest)" --project ${PRIMUS_PROJECT_ID})
gcloud config set project $SECUNDUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $SECUNDUS_WIP_PROVIDER \
  --location="global" \
  --workload-identity-pool="$SECUNDUS_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 && 
assertion.submods.container.image_digest == '${WORKLOAD_IMAGE_DIGEST}' &&
 assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' && 
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

Menjalankan Beban Kerja

Sebagai bagian dari langkah ini, Secundus Bank akan menjalankan workload di Confidential Space. Workload ini akan mendapatkan token akses dari workload identity pool Primus dan workload identity pool Secundus untuk membaca dan mendekripsi data pelanggan Primus Bank dan Secundus Bank.

Argumen TEE yang diperlukan diteruskan menggunakan tanda metadata. Argumen untuk container workload diteruskan menggunakan bagian "tee-cmd" dari flag. Hasil eksekusi workload akan dipublikasikan ke $SECUNDUS_RESULT_STORAGE_BUCKET.

Menjalankan workload pertama

Sebagai bagian dari eksekusi workload pertama, workload akan menghitung pelanggan Primus Bank dari lokasi yang diberikan dalam argumen container workload. Seperti yang ditunjukkan di bawah, workload pertama akan menjalankan perintah "count-location" dan hasilnya akan disimpan di $SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result.

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

Melihat hasilnya

Di project Secundus, lihat hasil workload pertama. Tunggu 3-5 menit hingga beban kerja menyelesaikan eksekusi dan hasilnya tersedia di bucket penyimpanan cloud.

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

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

Menjalankan workload kedua

Sebagai bagian dari eksekusi beban kerja kedua, kita akan menemukan pelanggan umum Primus Bank dan Secundus Bank. Seperti yang ditunjukkan di bawah, beban kerja kedua akan menjalankan perintah "list-common-customers" dan hasilnya akan disimpan di $SECUNDUS_RESULT_STORAGE_BUCKET/list-common-count.

gcloud compute instances create ${WORKLOAD_VM2} \
 --project=${SECUNDUS_PROJECT_ID} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=MIGRATE \
 --scopes=cloud-platform \
 --zone=${SECUNDUS_PROJECT_ZONE} \
 --image-project=confidential-space-images \
 --image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
  --metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""

Melihat hasilnya

Di project Secundus, lihat hasil workload kedua. Tunggu 3-5 menit hingga beban kerja menyelesaikan eksekusi dan hasilnya tersedia di bucket penyimpanan cloud.

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

Hasilnya harus berupa daftar berikut karena ini adalah pelanggan umum antara Primus dan Secundus Bank.

Output:

Eric
Clinton
Ashley
Cooper

Menjalankan Workload yang Tidak Sah

Kontrak Primus Bank yang mengizinkan Secundus Bank mengakses datanya telah berakhir. Jadi, Primus Bank memperbarui kondisi atributnya untuk mengizinkan VM dengan akun layanan dari partner barunya, Tertius Bank.

Primus Bank mengubah penyedia Workload Identity Pool

Di $PRIMUS_PROJECT_ID, perbarui kondisi atribut untuk penyedia identitas Pengesah Pengesahan guna memberi otorisasi pada workload di lokasi baru.

  1. Tetapkan project ke $PRIMUS_PROJECT_ID.
gcloud config set project $PRIMUS_PROJECT_ID
  1. Ekspor Project-Id GCP Tertius Bank menggunakan perintah di bawah. Selanjutnya, Primus Bank akan menggunakan ini untuk memperbarui kondisi atribut penyedia workload identity pool. Bank Primus tidak akan berhenti mengizinkan akun layanan beban kerja Bank Secundus. Sekarang, akun layanan workload Tertius Bank akan diizinkan.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
  1. Perbarui penyedia OIDC di workload identity pool. Di sini, '$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts diubah menjadi '$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts. Alih-alih mengizinkan akun layanan beban kerja dari Secundus Bank, kini akun layanan beban kerja dari Tertius Bank yang akan diizinkan.
gcloud iam workload-identity-pools providers update-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 &&
   assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' && 
'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

Menjalankan kembali workload

Saat Secundus Bank mencoba menjalankan beban kerja asli, beban kerja tersebut gagal. Untuk melihat error, hapus file hasil dan instance VM asli, lalu coba jalankan workload lagi.

Menghapus file hasil dan instance VM yang ada

  1. Tetapkan project ke project $SECUNDUS_PROJECT_ID.
gcloud config set project $SECUNDUS_PROJECT_ID
  1. Hapus file hasil.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
  1. Hapus instance Confidential VM.
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}

Jalankan workload yang tidak sah:

gcloud compute instances create ${WORKLOAD_VM2} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=MIGRATE \
 --scopes=cloud-platform \
 --zone=${SECUNDUS_PROJECT_ZONE}\
 --image-project=confidential-space-images \
 --image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
 --metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""

Lihat error

Alih-alih hasil beban kerja, Anda akan melihat error (The given credential is rejected by the attribute condition).

gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result

Demikian pula, jika Primus Bank secara diam-diam mengubah workload untuk mengirim seluruh daftar pelanggan Secundus Bank ke bucket milik Primus Bank, upaya tersebut akan gagal karena digest workload berbahaya akan berbeda dengan digest image yang diizinkan di Workload Identity Pool Secundus Bank.

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 cloud Primus Bank ($PRIMUS_INPUT_STORAGE_BUCKET).
  • Akun layanan Primus Bank ($PRIMUS_SERVICE_ACCOUNT).
  • Artifact Registry Primus Bank yang menyimpan tanda tangan image ($PRIMUS_COSIGN_REPOSITORY).
  • Workload identity pool Primus Bank($PRIMUS_WORKLOAD_IDENTITY_POOL).
  • Akun layanan workload Secundus Bank ($WORKLOAD_SERVICE_ACCOUNT).
  • Bucket penyimpanan cloud input Secundus Bank ($SECUNDUS_INPUT_STORAGE_BUCKET).
  • Akun layanan Secundus Bank ($SECUNDUS_SERVICE_ACCOUNT).
  • Registry artefak Secundus Bank yang menyimpan tanda tangan gambar ($SECUNDUS_COSIGN_REPOSITORY).
  • Workload identity pool Secundus Bank($SECUNDUS_WORKLOAD_IDENTITY_POOL).
  • Akun layanan workload Secundus Bank ($WORKLOAD_SERVICE_ACCOUNT).
  • Instance Compute Beban Kerja.
  • Bucket penyimpanan hasil Secundus Bank ($SECUNDUS_RESULT_STORAGE_BUCKET).
  • Repositori artefak Primus Bank ($PRIMUS_ARTIFACT_REPOSITORY).
./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 mengamankan data yang dibagikan sambil mempertahankan kerahasiaannya menggunakan Confidential Space.

Apa selanjutnya?

Lihat beberapa codelab serupa ini...

Bacaan lebih lanjut