Mengamankan model ML dan Kekayaan Intelektual menggunakan Confidential Space

1. Ringkasan

Confidential Space menawarkan lingkungan yang aman untuk kolaborasi antara banyak pihak. Codelab ini menunjukkan cara menggunakan Confidential Space untuk melindungi kekayaan intelektual sensitif, seperti model machine learning.

Dalam codelab ini, Anda akan menggunakan Confidential Space untuk memungkinkan satu perusahaan membagikan model machine learning eksklusifnya secara aman kepada perusahaan lain yang ingin menggunakan model tersebut. Secara khusus, Company Primus memiliki model machine learning yang hanya akan dirilis ke workload yang berjalan di Confidential Space, yang memungkinkan Primus mempertahankan kendali penuh atas kekayaan intelektualnya. Perusahaan Secundus akan menjadi operator workload dan akan menjalankan workload machine learning di Confidential Space. Secundus akan memuat model ini dan menjalankan inferensi menggunakan data sampel yang dimiliki oleh Secundus.

Di sini Primus adalah penulis workload yang menulis kode workload, dan kolaborator yang ingin melindungi kekayaan intelektualnya dari operator workload yang tidak tepercaya, Secundus. Secundus adalah operator workload dari workload machine learning.

5a86c47d935da998.jpeg

Yang akan Anda pelajari

  • Cara mengonfigurasi lingkungan tempat satu pihak dapat berbagi model ML eksklusifnya dengan pihak lain tanpa kehilangan kontrol atas kekayaan intelektualnya.

Yang Anda butuhkan

Peran yang terlibat dalam penyiapan Confidential Space

Dalam codelab ini, Company Primus akan menjadi pemilik resource dan penulis workload, yang akan bertanggung jawab atas hal berikut:

  1. Menyiapkan resource cloud yang diperlukan dengan model machine learning
  2. Menulis kode workload
  3. Memublikasikan gambar beban kerja
  4. Mengonfigurasi kebijakan Kumpulan Workload Identity untuk melindungi model ML terhadap operator yang tidak tepercaya

Secundus Company akan menjadi operator, dan bertanggung jawab untuk:

  1. Menyiapkan resource cloud yang diperlukan untuk menyimpan gambar sampel yang digunakan oleh workload dan hasilnya
  2. Menjalankan workload ML di Confidential Space menggunakan model yang disediakan oleh Primus

Cara kerja Confidential Space

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

  1. Beban kerja meminta token akses Google umum untuk $PRIMUS_SERVICEACCOUNT dari Workload Identity Pool. 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 model machine learning yang disimpan di bucket $PRIMUS_INPUT_STORAGE_BUCKET.
  4. Beban kerja menjalankan operasi pada data yang dimiliki oleh Secundus dan beban kerja tersebut dioperasikan dan dijalankan oleh Secundus dalam project-nya.
  5. Workload menggunakan akun layanan $WORKLOAD_SERVICEACCOUNT untuk menulis hasil operasi tersebut ke bucket $SECUNDUS_RESULT_STORAGE_BUCKET.

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/ml_model_protection/scripts
  • Pastikan Anda telah menetapkan variabel lingkungan project yang diperlukan seperti yang ditunjukkan di bawah ini. Untuk informasi selengkapnya tentang penyiapan project GCP, lihat codelab ini. Anda dapat membaca 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>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus>
  • Aktifkan Penagihan untuk project Anda.
  • Aktifkan Confidential Computing API dan mengikuti API untuk kedua project.
gcloud services enable \
    cloudapis.googleapis.com \
    cloudresourcemanager.googleapis.com \
    cloudshell.googleapis.com \
    container.googleapis.com \
    containerregistry.googleapis.com \
    iam.googleapis.com \
    confidentialcomputing.googleapis.com
  • Tetapkan nilai ke variabel untuk nama resource yang ditentukan di atas menggunakan perintah berikut. Variabel ini memungkinkan Anda menyesuaikan nama resource sesuai kebutuhan dan juga menggunakan resource yang ada jika sudah dibuat. (misalnya, export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket')
  1. Anda dapat menetapkan variabel berikut dengan nama resource cloud yang sudah ada di project Primus. Jika variabel ditetapkan, maka resource cloud yang sesuai yang ada dari project Primus akan digunakan. Jika variabel tidak ditetapkan, nama resource cloud akan dibuat dari nama project dan resource cloud baru akan dibuat dengan nama tersebut. Berikut adalah variabel yang didukung untuk nama resource:

$PRIMUS_INPUT_STORAGE_BUCKET

Bucket yang menyimpan model machine learning Primus.

$PRIMUS_WORKLOAD_IDENTITY_POOL

Workload identity pool (WIP) Primus yang memvalidasi klaim.

$PRIMUS_WIP_PROVIDER

Penyedia kumpulan workload identity Primus yang mencakup ketentuan otorisasi yang akan digunakan untuk token yang ditandatangani oleh layanan Pemverifikasi Pengesahan.

$PRIMUS_SERVICE_ACCOUNT

Akun layanan Primus yang digunakan $PRIMUS_WORKLOAD_IDENTITY_POOL untuk mengakses resource yang dilindungi (model ML dalam codelab ini). Pada langkah ini, Google Play memiliki izin untuk membaca model machine learning yang disimpan di bucket $PRIMUS_INPUT_STORAGE_BUCKET.

$PRIMUS_ARTIFACT_REPOSITORY

Repositori artefak tempat image Docker workload akan dikirim.

  1. Anda dapat menetapkan variabel berikut dengan nama resource cloud yang sudah ada dalam project Secundus. Jika variabel ditetapkan, maka resource cloud yang sesuai yang ada dari project Secundus akan digunakan. Jika variabel tidak ditetapkan, nama resource cloud akan dibuat dari nama project dan resource cloud baru akan dibuat dengan nama tersebut. Berikut adalah variabel yang didukung untuk nama resource:

$SECUNDUS_INPUT_STORAGE_BUCKET

Bucket yang menyimpan gambar sampel yang ingin diklasifikasikan Secundus menggunakan model yang disediakan oleh Primus.

$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.

  • Anda akan memerlukan izin tertentu untuk kedua project ini dan dapat membaca panduan ini tentang cara memberikan peran IAM menggunakan konsol GCP:
  • Untuk $PRIMUS_PROJECT_ID, Anda memerlukan 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, IAM Workload Identity Pool Admin, Security Admin (opsional).
  • Jalankan skrip berikut guna menetapkan nama variabel yang tersisa ke nilai berdasarkan project ID Anda untuk nama resource.
source config_env.sh

Menyiapkan resource Primus Company

Sebagai bagian dari langkah ini, Anda akan menyiapkan resource cloud yang diperlukan untuk Primus. Jalankan skrip berikut guna menyiapkan resource untuk Primus. Resource berikut akan dibuat sebagai bagian dari eksekusi skrip:

  • Bucket Cloud Storage ($PRIMUS_INPUT_STORAGE_BUCKET) untuk menyimpan model machine learning Primus.
  • Workload identity pool ($PRIMUS_WORKLOAD_IDENTITY_POOL) untuk memvalidasi klaim berdasarkan kondisi atribut yang dikonfigurasi berdasarkan penyedianya.
  • Akun layanan ($PRIMUS_SERVICEACCOUNT) yang disertakan ke kumpulan workload identity ($PRIMUS_WORKLOAD_IDENTITY_POOL) yang disebutkan di atas dengan akses IAM untuk membaca data dari bucket Cloud Storage (menggunakan peran objectViewer) dan untuk menghubungkan akun layanan ini ke kumpulan workload identity (menggunakan peran roles/iam.workloadIdentityUser).

Sebagai bagian dari penyiapan resource cloud ini, kita akan menggunakan model TensorFlow. Kita dapat menyimpan seluruh model yang mencakup arsitektur, bobot, dan konfigurasi pelatihan model dalam arsip ZIP. Untuk tujuan codelab ini, kita akan menggunakan model MobileNet V1 yang dilatih dengan set data ImageNet yang dapat ditemukan di sini.

./setup_primus_company_resources.sh

Skrip yang disebutkan di atas akan menyiapkan resource cloud. Sekarang kita akan mendownload dan memublikasikan model ke bucket Cloud Storage yang dibuat oleh skrip.

  1. Download model terlatih dari sini.
  2. Setelah didownload, ganti nama file tar yang didownload menjadi model.tar.gz.
  3. Publikasikan file model.tar.gz ke bucket Cloud Storage menggunakan perintah berikut dari direktori yang berisi file model.tar.gz.
gsutil cp model.tar.gz gs://${PRIMUS_INPUT_STORAGE_BUCKET}/

Menyiapkan resource Secundus Company

Sebagai bagian dari langkah ini, Anda akan menyiapkan resource cloud yang diperlukan untuk Secundus. Jalankan skrip berikut guna menyiapkan resource untuk Secundus. Sebagai bagian dari langkah ini, referensi berikut akan dibuat:

  • Bucket Cloud Storage ($SECUNDUS_INPUT_STORAGE_BUCKET) untuk menyimpan gambar sampel untuk menjalankan inferensi oleh Secundus.
  • Bucket Cloud Storage ($SECUNDUS_RESULT_STORAGE_BUCKET) untuk menyimpan hasil eksekusi workload ML oleh Secundus.

Beberapa gambar contoh tersedia di sini untuk codelab ini.

./setup_secundus_company_resources.sh

3. Membuat 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 beban kerja di project Secundus. Akun layanan ini akan digunakan oleh VM yang menjalankan workload ML.

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 $SECUNDUS_INPUT_STORAGE_BUCKET.
  • objectUser untuk menulis hasil workload ke bucket Cloud Storage $SECUNDUS_RESULT_STORAGE_BUCKET.
./create_workload_service_account.sh

Membuat workload

Sebagai bagian dari langkah ini, Anda akan membuat image Docker workload. Workload akan ditulis oleh Primus. Beban kerja yang digunakan dalam codelab ini adalah kode Python machine learning yang mengakses model ML yang disimpan di bucket penyimpanan Primus dan menjalankan inferensi dengan gambar sampel yang disimpan dalam bucket penyimpanan.

Model machine learning yang disimpan dalam bucket penyimpanan Primus hanya dapat diakses oleh workload yang memenuhi kondisi atribut yang diperlukan. Kondisi atribut ini dijelaskan secara lebih mendetail di bagian berikutnya tentang cara memberikan otorisasi pada beban kerja.

Berikut adalah metode run_inference() beban kerja yang akan dibuat dan digunakan dalam codelab ini. Anda dapat menemukan seluruh kode beban kerja di sini.

def run_inference(image_path, model):
  try:
    # Read and preprocess the image
    image = tf.image.decode_image(tf.io.read_file(image_path), channels=3)
    image = tf.image.resize(image, (128, 128))
    image = tf.image.convert_image_dtype(image, tf.float32)
    image = tf.expand_dims(image, axis=0)

    # Get predictions from the model
    predictions = model(image)
    predicted_class = np.argmax(predictions)

    top_k = 5
    top_indices = np.argsort(predictions[0])[-top_k:][::-1]

    # Convert top_indices to a TensorFlow tensor
    top_indices_tensor = tf.convert_to_tensor(top_indices, dtype=tf.int32)

    # Use TensorFlow tensor for indexing
    top_scores = tf.gather(predictions[0], top_indices_tensor)

    return {
        "predicted_class": int(predicted_class),
        "top_k_predictions": [
            {"class_index": int(idx), "score": float(score)}
            for idx, score in zip(top_indices, top_scores)
        ],
    }
  except Exception as e:
    return {"error": str(e)}

Jalankan skrip berikut untuk membuat beban kerja yang menjalankan langkah-langkah berikut:

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

Selain itu, beban kerja dapat dikodekan untuk memastikan bahwa beban kerja tersebut memuat versi model machine learning yang diharapkan dengan memeriksa hash atau tanda tangan model sebelum menggunakannya. Keuntungan dari pemeriksaan tambahan tersebut adalah memastikan integritas model machine learning. Dengan demikian, operator workload juga perlu memperbarui image workload atau parameternya saat workload diperkirakan akan menggunakan versi model ML yang berbeda.

4. Memberi Otorisasi dan Menjalankan Beban Kerja

Mengizinkan Beban Kerja

Primus ingin mengizinkan workload untuk mengakses model machine learning-nya berdasarkan atribut resource berikut:

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

Primus menggunakan federasi Workload identity untuk menerapkan kebijakan akses berdasarkan persyaratan ini. Dengan workload identity federation, Anda dapat menentukan kondisi atribut. Kondisi ini membatasi identitas mana yang dapat diautentikasi dengan workload identity pool (WIP). Anda dapat menambahkan Layanan Pemverifikasi Pengesahan ke WIP sebagai penyedia kumpulan identitas workload untuk menampilkan pengukuran dan menerapkan kebijakan.

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

  • Apa: $WORKLOAD_IMAGE_NAME terbaru yang diupload ke repositori $PRIMUS_ARTIFACT_REPOSITORY.
  • Tempat: Lingkungan trusted execution Confidential Space berjalan di image VM Confidential Space yang didukung sepenuhnya.
  • Siapa: Akun layanan $WORKLOAD_SERVICE_ACCOUNT Secundus.
export WORKLOAD_IMAGE_DIGEST=$(docker images digests ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}| awk 'NR>1{ print $3 }')
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_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_SERVICEACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

Menjalankan Beban Kerja

Sebagai bagian dari langkah ini, kita akan menjalankan workload di Confidential Space VM. Argumen TEE yang diperlukan diteruskan menggunakan flag metadata. Argumen untuk container workload diteruskan menggunakan "tee-cmd" dari penanda. Hasil eksekusi workload akan dipublikasikan ke $SECUNDUS_RESULT_STORAGE_BUCKET.

gcloud config set project $SECUNDUS_PROJECT_ID
gcloud compute instances create ${WORKLOAD_VM} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=TERMINATE \
 --scopes=cloud-platform --zone=${SECUNDUS_PROJECT_ZONE} \
 --image-project=confidential-space-images \
 --image-family=confidential-space \
 --service-account=${WORKLOAD_SERVICEACCOUNT}@${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}

Lihat hasil

Setelah workload berhasil diselesaikan, hasil workload ML akan dipublikasikan ke $SECUNDUS_RESULT_STORAGE_BUCKET.

gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result

Berikut adalah beberapa contoh tampilan hasil inferensi pada gambar sampel:

Image: sample_image_1.jpeg, Response: {'predicted_class': 531, 'top_k_predictions': [{'class_index': 531, 'score': 12.08437442779541}, {'class_index': 812, 'score': 10.269512176513672}, {'class_index': 557, 'score': 9.202644348144531}, {'class_index': 782, 'score': 9.08737564086914}, {'class_index': 828, 'score': 8.912498474121094}]}

Image: sample_image_2.jpeg, Response: {'predicted_class': 905, 'top_k_predictions': [{'class_index': 905, 'score': 9.53619384765625}, {'class_index': 557, 'score': 7.928380966186523}, {'class_index': 783, 'score': 7.70129919052124}, {'class_index': 531, 'score': 7.611623287200928}, {'class_index': 906, 'score': 7.021416187286377}]}

Image: sample_image_3.jpeg, Response: {'predicted_class': 905, 'top_k_predictions': [{'class_index': 905, 'score': 6.09878396987915}, {'class_index': 447, 'score': 5.992854118347168}, {'class_index': 444, 'score': 5.9582319259643555}, {'class_index': 816, 'score': 5.502010345458984}, {'class_index': 796, 'score': 5.450454235076904}]}

Untuk setiap gambar sampel di bucket penyimpanan Secundus, Anda akan melihat entri dalam hasilnya. Entri ini akan menyertakan dua informasi penting:

  • Indeks prediksi_class: Ini adalah indeks numerik yang mewakili class yang diprediksi model untuk memiliki gambar.
  • Top_k_predictions: Memberikan prediksi hingga k untuk gambar, yang diberi peringkat dari yang paling mungkin hingga yang paling tidak mungkin. Nilai k ditetapkan ke 5 dalam codelab ini, tetapi Anda dapat menyesuaikannya dalam kode workload untuk mendapatkan lebih banyak atau lebih sedikit prediksi.

Untuk menerjemahkan indeks class menjadi nama class yang dapat dibaca manusia, lihat daftar label yang tersedia di sini. Misalnya, jika Anda melihat indeks kelas 2, itu sesuai dengan label kelas "tench" dalam daftar label.

Dalam codelab ini, kami telah menunjukkan bahwa model yang dimiliki oleh Primus hanya dirilis untuk workload yang berjalan di TEE. Secundus menjalankan beban kerja ML dalam TEE dan beban kerja ini dapat memakai model yang dimiliki oleh Primus sementara Primus mempertahankan kontrol penuh atas model.

Menjalankan Beban Kerja yang Tidak Sah

Secundus mengubah image workload dengan mengambil image workload yang berbeda dari repositori artefaknya sendiri yang tidak diizinkan oleh Primus. Kumpulan workload identity Primus hanya memiliki otorisasi ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG image Workload.

Menjalankan kembali beban kerja

Jika Secundus mencoba menjalankan beban kerja asli dengan image workload baru ini, workload tersebut akan gagal. Untuk melihat error, hapus file hasil asli dan instance VM, lalu coba jalankan lagi beban kerja tersebut.

Pastikan ada image Docker baru yang dipublikasikan di artifact registry Secundus (sebagai us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}) dan workload serviceaccount ($WORKLOAD_SERVICEACCOUNT) telah memberikan izin kepada artifact registry untuk membaca image workload baru ini. Hal ini untuk memastikan bahwa workload tidak keluar sebelum kebijakan WIP Primus menolak token yang ditampilkan oleh workload.

Hapus 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/result
  1. Hapus instance Confidential VM.
gcloud compute instances delete ${WORKLOAD_VM}

Jalankan beban kerja yang tidak sah:

gcloud compute instances create ${WORKLOAD_VM} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=TERMINATE \
 --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=us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}

Lihat error

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

gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result

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 Primus ($PRIMUS_INPUT_STORAGE_BUCKET).
  • Akun layanan Primus ($PRIMUS_SERVICEACCOUNT).
  • Repositori artefak Primus ($PRIMUS_ARTIFACT_REPOSITORY).
  • Kumpulan identitas workload primus ($PRIMUS_WORKLOAD_IDENTITY_POOL).
  • Akun layanan workload Secundus ($WORKLOAD_SERVICEACCOUNT).
  • Bucket penyimpanan input Secundus ($SECUNDUS_INPUT_STORAGE_BUCKET).
  • Instance Compute Workload.
  • Bucket penyimpanan hasil Secundus ($SECUNDUS_RESULT_STORAGE_BUCKET).
$ ./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

Apa selanjutnya?

Lihat beberapa codelab serupa ini...