Mengamankan data aktif bersama dengan Confidential Space

Mengamankan data bersama yang digunakan dengan Confidential Space

Tentang codelab ini

subjectTerakhir diperbarui Nov 22, 2024
account_circleDitulis oleh Priya Pandey, Jiankun Lu, Meetrajsinh Vala

1. Ringkasan

Confidential Space menawarkan kolaborasi dan berbagi data multipihak yang aman, sekaligus memungkinkan organisasi menjaga kerahasiaan data mereka. Artinya, organisasi dapat berkolaborasi satu sama lain sambil tetap mempertahankan kontrol atas data mereka dan melindunginya dari akses yang tidak sah.

Confidential Space membuka skenario saat Anda ingin memperoleh manfaat bersama dari menggabungkan dan menganalisis data sensitif yang sering 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 kriptografis — 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 beban kerja di Confidential VM yang menjalankan image VM Confidential Space
  • Cara memberikan otorisasi 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 Bank Primus dan Secundus untuk menentukan pelanggan bersama mereka tanpa saling membagikan daftar akun lengkap. Proses ini melibatkan langkah-langkah berikut:

  • Langkah 1: Siapkan resource cloud yang diperlukan untuk Bank Primus dan Secundus. Resource cloud ini mencakup bucket cloud storage, kunci KMS, kumpulan identitas beban kerja, 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 beban kerja yang akan digunakan oleh VM beban kerja. 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 ditulis oleh Primus Bank dan akan dikemas sebagai image Docker. Image Docker ini akan dipublikasikan ke Artifact Registry.
  • Langkah 4: Beri otorisasi pada beban kerja. Primus Bank akan menggunakan kumpulan identitas beban kerja untuk memberikan otorisasi kepada beban kerja untuk mengakses data pelanggannya berdasarkan atribut siapa yang menjalankan beban kerja, apa yang dilakukan beban kerja, dan tempat beban kerja berjalan.
  • Langkah 5: Saat dijalankan, workload akan meminta akses ke resource cloud kolaborator data (Primus Bank dan Secundus Bank) dengan menawarkan token layanan Pengverifikasi Pengesahan dengan klaim workload dan lingkungan. Jika klaim pengukuran beban kerja dalam token cocok dengan kondisi atribut di kumpulan identitas beban kerja Bank Primus dan Secundus, token tersebut akan menampilkan token akses akun layanan yang memiliki izin untuk mengakses resource cloud masing-masing. Resource cloud hanya akan dapat diakses oleh beban kerja yang berjalan di dalam Ruang Rahasia.
  • Langkah 5(a): Jalankan beban kerja 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 beban kerja kedua yang menemukan pelanggan umum dari Bank Primus dan Secundus. Untuk beban kerja ini, Primus Bank dan Secundus Bank akan menjadi kolaborator data. API ini akan memberikan daftar pelanggan terenkripsi ke beban kerja yang berjalan di Confidential Space. Bank Secundus akan kembali menjadi operator beban kerja. Beban kerja ini juga akan diotorisasi oleh Bank Secundus karena beban kerja tersebut juga perlu mengakses daftar pelanggan terenkripsi Bank Secundus untuk menemukan pelanggan yang sama. Dalam hal ini, Secundus Bank akan memberikan otorisasi kepada 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 yang 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 informasi selengkapnya tentang cara membuat project GCP, lihat codelab ini. Anda dapat membaca 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 ini 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 ditetapkan, nama resource cloud akan dibuat dari project-name dan resource cloud baru akan dibuat sebagai bagian dari hal berikut:

$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 menyertakan kondisi otorisasi yang akan digunakan untuk token yang ditandatangani oleh Layanan Pengverifikasi Pengesahan.

$PRIMUS_SERVICE_ACCOUNT

Akun layanan Primus Bank 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 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 ditetapkan, nama resource cloud akan dibuat dari project-name dan resource cloud baru akan dibuat sebagai bagian dari hal berikut:

$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 Kumpulan Identitas Beban Kerja Bank Secundus yang menyertakan kondisi otorisasi yang akan digunakan untuk token yang ditandatangani oleh Layanan Pengverifikasi Pengesahan.

$SECUNDUS_SERVICE_ACCOUNT

Akun layanan Secundus Bank yang digunakan $SECUNDUS_WORKLOAD_IDENTITY_POOL untuk mengakses resource yang dilindungi. Pada langkah ini, bucket tersebut 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 beban kerja.

$WORKLOAD_IMAGE_NAME

Nama image container beban kerja.

$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 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 bagi Primus Bank:

  • Bucket Cloud Storage ($PRIMUS_INPUT_STORAGE_BUCKET) untuk menyimpan file data pelanggan Primus Bank yang dienkripsi.
  • Kunci enkripsi ($PRIMUS_ENC_KEY) dan ring kunci ($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 bawah penyedianya.
  • Akun layanan ($PRIMUS_SERVICE_ACCOUNT) yang dilampirkan ke kumpulan identitas beban kerja 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 beban kerja (menggunakan roles/iam.workloadIdentityUser).
./setup_primus_bank_resources.sh

Menyiapkan resource cloud untuk Secundus Bank

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

  • Bucket Cloud Storage ($SECUNDUS_INPUT_STORAGE_BUCKET) untuk menyimpan file data pelanggan yang dienkripsi dari Secundus Bank.
  • Kunci enkripsi ($SECUNDUS_ENC_KEY) dan ring kunci ($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 bawah 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 Cloud Storage ($SECUNDUS_RESULT_STORAGE_BUCKET) untuk menyimpan hasil eksekusi beban kerja oleh Secundus Bank.
./setup_secundus_bank_resources.sh

3. Membuat Beban Kerja

Membuat 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 beban kerja di project Secundus Bank. VM yang menjalankan beban kerja akan menggunakan akun layanan ini.

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

  • Berikan peran confidentialcomputing.workloadUser ke akun layanan beban kerja . Tindakan ini akan memungkinkan akun pengguna membuat token pengesahan.
  • Berikan peran logging.logWriter ke izin akun layanan workload. Hal ini memungkinkan lingkungan Ruang Rahasia menulis log ke Cloud Logging selain ke 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 yang ditentukan.
  • Menemukan pelanggan umum Primus dan Secundus Bank dari daftar pelanggan yang disimpan di bucket cloud storage masing-masing.

Jalankan skrip berikut untuk membuat workload tempat langkah-langkah berikut dilakukan:

  • Buat Artifact Registry ($PRIMUS_ARTIFACT_REPOSITORY) yang dimiliki oleh Primus Bank tempat beban kerja akan dipublikasikan.
  • Buat kode dan perbarui dengan nama resource yang diperlukan. Kode beban kerja yang digunakan dalam codelab ini dapat ditemukan di sini.
  • Build 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 Workload

Memberi Otorisasi pada Beban Kerja

Primus Bank ingin memberikan otorisasi pada workload untuk mengakses data pelanggan mereka berdasarkan atribut resource berikut:

  • Apa: Kode yang diverifikasi
  • Di mana: Lingkungan yang aman
  • Who: 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 Pengverifikasi Pengesahan ke WIP sebagai penyedia workload identity pool untuk menampilkan pengukuran dan menerapkan kebijakan.

Workload identity pool telah dibuat sebelumnya sebagai bagian dari langkah penyiapan resource cloud. Sekarang Primus Bank akan membuat penyedia workload identity pool OIDC baru. --attribute-condition yang ditentukan memberikan otorisasi akses ke penampung beban kerja. Hal ini memerlukan:

  • Apa: $WORKLOAD_IMAGE_NAME terbaru yang diupload ke repositori $PRIMUS_ARTIFACT_REPOSITORY.
  • Di mana: Trusted execution environment Confidential Space berjalan di image VM Confidential Space yang sepenuhnya didukung.
  • Siapa: Akun layanan $WORKLOAD_SERVICE_ACCOUNT Bank Secundus.
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"

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

  • Apa: Beban kerja.
  • Di mana: Lingkungan Confidential Space.
  • Who: Akun ($WORKLOAD_SERVICE_ACCOUNT) yang menjalankan beban kerja.

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

Sebagai perbandingan, Bank Secundus tidak mengontrol repositori tempat mereka mendapatkan gambar, sehingga mereka tidak dapat membuat asumsi tersebut dengan aman. Sebagai gantinya, mereka memilih untuk memberikan otorisasi 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 kumpulan workload identity, kita akan mengumpulkan image_digest untuk image penampung 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 beban kerja 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 flag metadata. Argumen untuk penampung beban kerja diteruskan menggunakan bagian "tee-cmd" dari flag. Hasil eksekusi beban kerja akan dipublikasikan ke $SECUNDUS_RESULT_STORAGE_BUCKET.

Menjalankan workload pertama

Sebagai bagian dari eksekusi beban kerja pertama, beban kerja akan menghitung pelanggan Primus Bank dari lokasi yang diberikan dalam argumen penampung beban kerja. Seperti yang ditunjukkan di bawah, beban kerja pertama akan mengeksekusi 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\"]""

Lihat hasil

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

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 dari Primus Bank dan Secundus Bank. Seperti yang ditunjukkan di bawah, beban kerja kedua akan mengeksekusi 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\"]""

Lihat hasil

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

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

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

Output:

Eric
Clinton
Ashley
Cooper

Menjalankan Workload Tidak Sah

Kontrak Primus Bank yang mengizinkan Secundus Bank mengakses data mereka akan 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 Attestation Verifier guna memberikan 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. Kemudian, Primus Bank akan menggunakannya untuk memperbarui kondisi atribut penyedia workload identity pool. Bank Primus tidak akan berhenti memberikan otorisasi ke akun layanan beban kerja Bank Secundus. Sekarang, kebijakan ini akan mengizinkan akun layanan workload Tertius Bank.
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 memberikan otorisasi ke akun layanan beban kerja dari Bank Secundus, sekarang akun layanan beban kerja dari Bank Tertius akan diberi otorisasi.
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 ulang workload

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

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

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

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

Serupa dengan ini, jika Primus Bank diam-diam mengubah workload untuk mengirim seluruh daftar pelanggan Secundus Bank ke bucket milik Primus Bank, upaya tersebut akan gagal karena ringkasan workload berbahaya akan berbeda dari ringkasan gambar yang diotorisasi 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 cloud storage Primus Bank ($PRIMUS_INPUT_STORAGE_BUCKET).
  • Akun layanan Primus Bank ($PRIMUS_SERVICE_ACCOUNT).
  • Registry artefak Primus Bank yang menyimpan tanda tangan gambar ($PRIMUS_COSIGN_REPOSITORY).
  • Workload identity pool dari Primus Bank($PRIMUS_WORKLOAD_IDENTITY_POOL).
  • Akun layanan workload Bank Secundus ($WORKLOAD_SERVICE_ACCOUNT).
  • Masukkan bucket cloud storage Bank Secundus ($SECUNDUS_INPUT_STORAGE_BUCKET).
  • Akun layanan Bank Secundus ($SECUNDUS_SERVICE_ACCOUNT).
  • Registry artefak Bank Secundus yang menyimpan tanda tangan gambar ($SECUNDUS_COSIGN_REPOSITORY).
  • Workload identity pool dari Secundus Bank($SECUNDUS_WORKLOAD_IDENTITY_POOL).
  • Akun layanan workload Bank Secundus ($WORKLOAD_SERVICE_ACCOUNT).
  • Instance Compute Workload.
  • Bucket penyimpanan hasil dari Secundus Bank ($SECUNDUS_RESULT_STORAGE_BUCKET).
  • Repositori artefak Primus Bank ($PRIMUS_ARTIFACT_REPOSITORY).
./cleanup.sh

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

  • Buka Konsol Cloud Platform.
  • 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 mengamankan data yang dibagikan sekaligus mempertahankan kerahasiaannya menggunakan Confidential Space.

Apa selanjutnya?

Lihat beberapa codelab serupa ini...

Bacaan lebih lanjut