1. 總覽
本程式碼研究室是以 Confidential Space 程式碼研究室為基礎。支援已簽署的容器映像檔,並提供選項,可使用經過驗證的公開金鑰驗證容器,而不必在 Workload Identity Pool (WIP) 政策中指定映像檔摘要。
機密空間的簽署容器映像檔支援功能有何異動:
提升可用性:導入已簽署的容器映像檔功能後,協作者/稽核人員授權映像檔時,現在可以從工作負載映像檔摘要方法改用容器簽章方法。
- 直接使用映像檔摘要時,資源擁有者每次授權新映像檔,都必須使用映像檔摘要更新政策。使用映像檔簽章時,政策會包含公開金鑰指紋,對應的私密金鑰則由協作者/稽核人員擁有,並用於簽署稽核的映像檔。
- 對於某些安全模式,參照可信的映像檔簽署金鑰,比更新新映像檔摘要值清單更方便。
不會造成安全性倒退:這個容器簽章方法不會造成安全性倒退,因為信任邊界維持不變。在容器簽章方法中,資源擁有者會在 WIP 政策中指定信任的公開金鑰指紋,授權驗證金鑰,授權檢查則由 Attestation Verifier Service 和 WIP 執行;Attestation Verifier Service 會驗證簽章是否與執行中的工作負載相關聯,WIP 政策則會檢查服務聲明的公開金鑰是否已獲得政策授權。
安全性高:使用容器映像檔簽章時,可將部分信任授權給映像檔簽署者。在驗證政策中指定可信簽署者的公開金鑰指紋,資源擁有者即可授權該簽署者,對符合政策的容器映像檔進行背書。驗證服務會驗證簽名是否與執行中的工作負載相關聯,而政策會檢查建立簽名的公開金鑰是否已獲得政策授權。因此,圖片簽署提供的額外間接層可維持 Confidential Space 的強大安全保障。
這兩種方法的唯一差異在於,後者使用額外的間接層,工作負載映像檔會透過簽署金鑰授權。由於信任邊界維持不變,因此不會產生任何新的安全漏洞。
課程內容
在本程式碼研究室中,您將瞭解如何使用容器映像檔簽章授權存取受保護的資源:
- 如何使用
cosign簽署經過稽核的容器映像檔 - 如何將容器映像檔簽章上傳至 OCI 登錄檔,以供探索及儲存簽章
- 如何設定執行 Confidential Space 時所需的雲端資源
- 如何透過簽署的容器映像檔支援功能,在 Confidential Space 中執行工作負載
本程式碼研究室說明如何使用 Confidential Space,對在 Google Compute Engine 上執行的容器映像檔進行遠端認證,該映像檔已使用受信任的金鑰簽署。
軟硬體需求
- 完成 Confidential Space 程式碼研究室
- Google Cloud Platform 專案
- Chrome 或 Firefox 等瀏覽器
- 熟悉標準 Linux 文字編輯器,例如 Vim、Emacs 或 Nano
- 具備 Sigstore cosign 的基本知識
- Google Compute Engine ( 程式碼研究室)、機密 VM、容器和遠端存放區的基本知識
- Cloud KMS 的基本知識 ( 程式碼研究室)
- 服務帳戶、Workload Identity 聯盟和屬性條件的基本知識。
- Artifact Registry 的基本知識
- 數位簽章的基本知識
使用已簽署容器映像檔的機密空間所涉及的角色
在本程式碼研究室中,Primus Bank 將擔任稽核人員和資源擁有者,負責下列事項:
- 使用樣本資料設定必要資源。
- 稽核工作負載程式碼。
- 使用
cosign簽署工作負載映像檔。 - 將簽名上傳至存放區。
- 設定 WIP 政策,保護客戶資料。
Secundus Bank 將是工作負載的作者和運算子,負責:
- 設定儲存結果所需的資源。
- 編寫工作負載程式碼。
- 發布工作負載映像檔。
- 在 Confidential Space 中執行工作負載,並支援已簽署的容器映像檔。
Secundus Bank 將開發及發布工作負載,查詢 Primus Bank 擁有的雲端儲存空間 bucket 中儲存的顧客資料。Primus Bank 會稽核工作負載、簽署容器映像檔,並設定 WIP 政策,允許核准的工作負載存取資料。這項工作負載執行的結果會儲存在 Secundus 銀行擁有的 Cloud Storage bucket 中。
機密空間設定涉及的資源
本程式碼研究室會參照多個變數,您應為 GCP 專案設定適當的值。本程式碼實驗室中的指令會假設這些變數已設定。(例如,export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket' 可用於設定 Primus 銀行輸入儲存空間 bucket 的名稱)。如果資源名稱的變數尚未設定,系統會根據 GCP 專案 ID 產生變數。
在 Primus 專案中設定下列項目:
$PRIMUS_INPUT_STORAGE_BUCKET:儲存客戶資料檔案的 bucket。$PRIMUS_WORKLOAD_IDENTITY_POOL:驗證聲明的 Workload Identity Pool (WIP)。$PRIMUS_WIP_PROVIDER:Workload Identity Pool 提供者,其中包含授權條件,可用於 Attestation Verifier Service 簽署的權杖。$PRIMUS_SERVICEACCOUNT:$PRIMUS_WORKLOAD_IDENTITY_POOL用於存取受保護資源的服務帳戶。在這個步驟中,該服務帳戶有權查看儲存在$PRIMUS_INPUT_STORAGE_BUCKET值區中的客戶資料。$PRIMUS_ENC_KEY:用來加密$PRIMUS_INPUT_STORAGE_BUCKET中所儲存資料的 KMS 金鑰。
這個程式碼研究室的新資源:
$PRIMUS_COSIGN_REPOSITORY:用於儲存工作負載映像檔簽章的 Artifact Registry。$PRIMUS_SIGNING_KEY:稽核人員/資料協作者 (在本例中為 Primus Bank) 用於簽署工作負載映像檔的 KMS 金鑰。
在 Secundus 專案中設定下列項目:
$SECUNDUS_ARTIFACT_REGISTRY:要推送工作負載 Docker 映像檔的 Artifact Registry。$WORKLOAD_IMAGE_NAME:工作負載 Docker 映像檔的名稱。$WORKLOAD_IMAGE_TAG:工作負載 Docker 映像檔的標記。$WORKLOAD_SERVICEACCOUNT:有權存取執行工作負載的機密 VM 的服務帳戶。$SECUNDUS_RESULT_BUCKET:儲存工作負載結果的 bucket。
其他資源:
primus_customer_list.csv包含顧客數位資料。我們會將這項資料上傳至$PRIMUS_INPUT_STORAGE_BUCKET,並建立查詢這項資料的工作負載。
現有工作流程
在 Confidential Space 中執行工作負載時,系統會使用設定的資源執行下列程序:
- 工作負載會從 WIP 為
$PRIMUS_SERVICEACCOUNT要求一般 Google 存取權杖。這項服務會提供附有工作負載和環境聲明的驗證驗證器服務權杖。 - 如果 Attestation Verifier 服務權杖中的工作負載測量聲明,符合 WIP 中的屬性條件,系統會傳回
$PRIMUS_SERVICEACCOUNT.的存取權杖。 - 工作負載會使用與
$PRIMUS_SERVICEACCOUNT相關聯的服務帳戶存取權杖,存取$PRIMUS_INPUT_STORAGE_BUCKET值區中的客戶資料。 - 工作負載會對該資料執行作業。
- 工作負載會使用
$WORKLOAD_SERVICEACCOUNT服務帳戶,將該作業的結果寫入$SECUNDUS_RESULT_STORAGE_BUCKET值區。
支援已簽署容器的新工作流程
簽署容器支援功能將整合至現有工作流程,如下所示。在 Confidential Space 中執行工作負載時,如果支援已簽署的容器映像檔,系統會使用設定的資源執行下列程序:
- Confidential Space 會探索與目前執行中工作負載映像檔相關的任何容器簽章,並將這些簽章傳送至驗證驗證器。認證驗證器會驗證簽章,並在認證聲明中加入所有有效簽章。
- 工作負載會從 WIP 為
$PRIMUS_SERVICEACCOUNT要求一般 Google 存取權杖。這項服務會提供附有工作負載和環境聲明的驗證驗證器服務權杖。 - 如果認證驗證器服務權杖中的容器簽章聲明,與 WIP 中的屬性條件相符,則會傳回
$PRIMUS_SERVICEACCOUNT的存取權杖。 - 工作負載會使用與
$PRIMUS_SERVICEACCOUNT相關聯的服務帳戶存取權杖,存取$PRIMUS_INPUT_STORAGE_BUCKET值區中的客戶資料。 - 工作負載會對該資料執行作業。
- 工作負載會使用
$WORKLOAD_SERVICEACCOUNT,將該作業的結果寫入$SECUNDUS_RESULT_STORAGE_BUCKET值區。
2. 設定雲端資源
在設定 Confidential Space 時,您首先會在 Primus 和 Secundus 銀行 GCP 專案下建立必要的雲端資源。以下是本程式碼研究室的新資源:
在 Primus 專案中:
- 稽核程式碼後,用於簽署 Secundus 工作負載的 KMS 簽署金鑰。
- 用來儲存 Cosign 簽章的 Artifact Registry 存放區。
Secundus 專案中沒有新資源。設定這些資源後,您將為工作負載建立服務帳戶,並指派必要角色和權限。接著,您會建立工作負載映像檔,稽核員 (Primus 銀行) 則會簽署該映像檔。接著,資料協作者 (本程式碼研究室中的 Primus 銀行) 會授權工作負載,工作負載運算子 (本例中的 Secundus 銀行) 則會執行工作負載。
設定 Confidential Space 時,您會在 Primus 和 Secundus GCP 專案中建立必要的雲端資源。
事前準備
- 使用下列指令複製 這個存放區,取得本程式碼研究室所需的指令碼。
git clone https://github.com/GoogleCloudPlatform/confidential-space
- 變更本程式碼研究室的目錄。
cd confidential-space/codelabs/signed_container_codelab/scripts
- 請確認您已設定必要專案,如下所示。
export PRIMUS_PROJECT_ID=<GCP project id of primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of secundus bank>
- 使用這項指令,為上述資源名稱設定變數。您可以使用這些變數覆寫資源名稱 (例如
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket') - 執行下列指令碼,根據資源名稱的專案 ID,將其餘變數名稱設為值。
source config_env.sh
- 請按照這裡的說明安裝 cosign。
設定 Primus 銀行資源
在這個步驟中,您將為 Primus 銀行設定必要的雲端資源。執行下列指令碼,為 Primus 銀行設定資源。在這些步驟中,系統會建立下列資源:
- Cloud Storage bucket (
$PRIMUS_INPUT_STORAGE_BUCKET),用於儲存 Primus 銀行加密的客戶資料檔案。 - KMS 中的加密金鑰 (
$PRIMUS_ENC_KEY) 和金鑰環 ($PRIMUS_ENC_KEYRING),用於加密 Primus 銀行資料檔案。 - Workload identity pool (
$PRIMUS_WORKLOAD_IDENTITY_POOL):根據提供者設定的屬性條件驗證聲明。 - 附加至上述 workload identity pool (
$PRIMUS_WORKLOAD_IDENTITY_POOL) 的服務帳戶 ($PRIMUS_SERVICEACCOUNT),具備下列 IAM 存取權: roles/cloudkms.cryptoKeyDecrypter,使用 KMS 金鑰解密資料。objectViewer,從 Cloud Storage 值區讀取資料。roles/iam.workloadIdentityUser,將這個服務帳戶連結至工作負載身分集區。
./setup_primus_bank_resources.sh
設定 Secundus 銀行資源
在這個步驟中,您將為 Secundus 銀行設定必要的雲端資源。執行下列指令碼,為 Secundus 銀行設定資源。按照下列步驟操作時,系統會建立下列資源:
- Cloud Storage bucket (
$SECUNDUS_RESULT_STORAGE_BUCKET),用於儲存 Secundus 銀行執行工作負載的結果。
./setup_secundus_bank_resources.sh
3. 建立及簽署工作負載
建立工作負載服務帳戶
現在,您要為工作負載建立服務帳戶,並指派必要角色和權限。執行下列指令碼,在 Secundus 銀行專案中建立工作負載服務帳戶。執行工作負載的 VM 會使用這個服務帳戶。
- 這個工作負載服務帳戶 (
$WORKLOAD_SERVICEACCOUNT) 將具備下列角色: confidentialcomputing.workloadUser取得認證權杖logging.logWriter,將記錄檔寫入 Cloud Logging。objectViewer,從$PRIMUS_INPUT_STORAGE_BUCKET雲端儲存空間值區讀取資料。objectAdmin,將工作負載結果寫入$SECUNDUS_RESULT_STORAGE_BUCKET雲端儲存空間 bucket。
./create_workload_serviceaccount.sh
建立工作負載
您將在本步驟中建立工作負載 Docker 映像檔。本程式碼研究室使用的工作負載是簡單的 CLI 型 Go 應用程式,可計算引數中指定地理位置的客戶 (來自 Primus 銀行客戶資料)。執行下列指令碼,建立工作負載,其中會執行下列步驟:
- 建立 Secundus 銀行擁有的 Artifact Registry(
$SECUNDUS_ARTIFACT_REGISTRY)。 - 使用必要資源名稱更新工作負載程式碼。這裡是本程式碼研究室使用的工作負載程式碼。
- 建構 Go 二進位檔,並建立 Dockerfile,用於建構工作負載程式碼的 Docker 映像檔。本程式碼研究室使用的 Dockerfile 如下。
- 建構 Docker 映像檔,並發布至 Secundus 銀行擁有的 Artifact Registry (
$SECUNDUS_ARTIFACT_REGISTRY)。 - 授予
$WORKLOAD_SERVICEACCOUNT的讀取權限給$SECUNDUS_ARTIFACT_REGISTRY。工作負載容器需要這項權限,才能從 Artifact Registry 提取工作負載 Docker 映像檔。
./create_workload.sh
簽署工作負載
我們將使用 Cosign 簽署工作負載映像檔。Cosign 預設會將簽章儲存在與簽署映像檔相同的存放區。如要指定其他簽章存放區,可以設定 COSIGN_REPOSITORY 環境變數。
我們將以 Artifact Registry 為例。您也可以根據偏好選擇其他 OCI 型登錄檔,例如 Docker Hub、AWS CodeArtifact。
- 建立 Artifact Registry Docker 存放區。
gcloud config set project $PRIMUS_PROJECT_ID
gcloud artifacts repositories create $PRIMUS_COSIGN_REPOSITORY \
--repository-format=docker --location=${PRIMUS_PROJECT_REPOSITORY_REGION}
- 在 KMS 下建立金鑰環和金鑰,用於簽署工作負載映像檔。
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}
- 如果是 Artifact Registry,則需要提供完整映像檔名稱,例如
$LOCATION/$PROJECT/$REPOSITORY/$IMAGE_NAME。您可以將任何容器映像檔上傳至存放區,以儲存簽章。
export COSIGN_REPOSITORY=us-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_COSIGN_REPOSITORY}/demo
- 將
$PRIMUS_COSIGN_REPOSITORY存放區的「檢視者」角色授予$WORKLOAD_SERVICEACCOUNT服務帳戶。這可讓 Confidential Space 探索上傳至$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 是一項功能強大的工具,提供多種簽署功能。就我們的用途而言,我們只需要 Cosign 使用金鑰組簽署。這項已簽署的容器映像檔功能不支援 Cosign 無金鑰簽署。
使用金鑰組簽署時,有兩種做法:
- 使用 Cosign 產生的本機金鑰組簽署。
- 使用儲存在其他位置 (例如 KMS) 的金鑰組簽署。
- 如果沒有金鑰組,請在 Cosign 中產生。詳情請參閱使用自行管理的金鑰簽署。我們在此指定了兩種產生金鑰配對和簽署工作負載的方式 (在本機和使用 KMS 提供者),請按照其中一種方式簽署工作負載容器。
// 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
在上述內容中,將 <provider>://<key> 替換為 gcpkms://projects/$PRIMUS_PROJECT_ID/locations/global/keyRings/$PRIMUS_SIGNING_KEYRING/cryptoKeys/$PRIMUS_SIGNING_KEY/cryptoKeyVersions/$PRIMUS_SIGNING_KEYVERSION
- <provider>:指您使用的 KMS 解決方案
- <key>:指 KMS 中的金鑰路徑
- 擷取用於驗證的公開金鑰。
// 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
- 使用 Cosign 簽署工作負載。對公開金鑰執行未填補的 Base64 編碼
PUB=$(cat pub.pem | openssl base64)
// Remove spaces and trailing "=" signs.
PUB=$(echo $PUB | tr -d '[:space:]' | sed 's/[=]*$//')
- 使用 Cosign 簽署工作負載,並附加匯出的公開金鑰和簽章演算法。
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[必要] 指定要使用的簽署金鑰。如要參照由 KMS 供應商管理的金鑰,請按照「Sigstore KMS 支援」一文中的特定 URI 格式操作。如要參照 Cosign 產生的金鑰,請改用 cosign.key。$IMAGE_REFERENCE[必要]:指定要簽署的容器映像檔。IMAGE_REFERENCE的格式可透過標記或圖片摘要識別。例如: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 [必要]:指定附加至簽章酬載的註解。如果是 Confidential Space 簽署的容器映像檔,簽章酬載必須附上公開金鑰和簽章演算法。
dev.cosignproject.cosign/sigalg僅接受下列三個值:- RSASSA_PSS_SHA256:採用 PSS 填充演算法的 RSASSA 演算法,並使用 SHA256 摘要。
- RSASSA_PKCS1V15_SHA256:RSASSA 演算法,搭配 PKCS#1 v1.5 填充演算法和 SHA256 摘要。
- ECDSA_P256_SHA256:含有 SHA256 摘要的 P-256 曲線 ECDSA。這也是 Cosign 產生的金鑰組所用的預設簽章演算法。
- 將簽章上傳至 Docker 存放區
Cosign 會自動將簽名上傳至指定的 COSIGN_REPOSITORY.
4. 授權並執行工作負載
授權工作負載
在這個步驟中,我們會在 workload identity pool ($PRIMUS_WORKLOAD_IDENTITY_POOL) 下方設定 workload identity provider。如下所示,系統會為 workload identity 設定屬性條件。其中一項條件是根據簽署公開金鑰的指紋,驗證工作負載映像檔簽章的指紋。有了這項屬性條件,當 Secundus Bank 發布新的工作負載映像檔時,Primus Bank 會稽核工作負載程式碼並簽署新的工作負載映像檔,不必使用映像檔摘要更新 WIP 政策。
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))"
執行工作負載
在這個步驟中,我們會在機密 VM 上執行工作負載。使用中繼資料標記傳遞必要的 TEE 引數。工作負載容器的引數是透過旗標的「tee-cmd」部分傳遞。工作負載已編碼,可將結果發布至 $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"
查看結果
在 Secundus 專案中,查看工作負載的結果。
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
結果應為 3,因為 primus_customer_list.csv 檔案中列出了這麼多來自西雅圖的人!
5. 清除
這個指令碼可用於清除在本程式碼研究室中建立的資源。在這次清理作業中,系統會刪除下列資源:
- Primus 銀行輸入儲存空間值區 (
$PRIMUS_INPUT_STORAGE_BUCKET)。 - Primus 銀行服務帳戶 (
$PRIMUS_SERVICEACCOUNT)。 - Primus Bank 構件登錄檔,其中包含圖片簽章 (
$PRIMUS_COSIGN_REPOSITORY)。 - Primus Bank workload identity pool (
$PRIMUS_WORKLOAD_IDENTITY_POOL)。 - Secundus Bank 的工作負載服務帳戶 (
$WORKLOAD_SERVICEACCOUNT)。 - 工作負載運算執行個體。
- Secundus Bank 的結果儲存空間 bucket (
$SECUNDUS_RESULT_STORAGE_BUCKET)。 - Secundus Bank 的 Artifact Registry (
$SECUNDUS_ARTIFACT_REGISTRY)。 - Secundus Bank 的工作負載 VM (
$WORKLOAD_VM)。
./cleanup.sh
探索完畢後,請考慮刪除專案。
- 前往 Cloud Platform Console。
- 選取要關閉的專案,然後按一下頂端的「刪除」,系統就會排定刪除專案的時間
恭喜
恭喜,您已成功完成本程式碼研究室!
您已瞭解如何運用已簽署的容器映像檔功能,提升 Confidential Space 的可用性。
後續步驟
查看一些類似的程式碼研究室…