1. 總覽
Confidential Space 提供安全的資料分享和協作功能,讓機構能與多方分享資料,同時維持資料的機密性。也就是說,機構可以相互協作,同時保有資料控制權,並防止未經授權的存取。
Confidential Space 可讓您匯總及分析機密 (通常是受管制) 資料來獲得價值,讓雙方都受益,同時維持資料的完整控制權。有了 Confidential Space,機構就能匯總及分析機密資料 (例如個人識別資訊 (PII)、受保護的健康資訊 (PHI)、智慧財產和加密密鑰) 來獲得價值,讓雙方都受益,同時保有完整控制權。
軟硬體需求
- Google Cloud Platform 專案
- Chrome 或 Firefox 瀏覽器
- Google Compute Engine ( 程式碼研究室)、機密 VM、容器和遠端存放區的基本知識
- Cloud KMS 的基本知識 ( 程式碼研究室)
- 服務帳戶、Workload Identity 聯盟和屬性條件的基本知識。
課程內容
- 如何設定執行 Confidential Space 時所需的 Cloud 資源
- 如何在執行 Confidential Space VM 映像檔的機密 VM 中執行工作負載
- 如何根據工作負載程式碼的屬性 (what)、機密空間環境 (where) 和執行工作負載的帳戶 (who),授權存取受保護的資源。
在本程式碼研究室中,您將在 Primus 和 Secundus 銀行之間設定機密空間,以便在不互相分享完整帳戶清單的情況下,找出共同客戶。其中包含下列步驟:
- 步驟 1:為 Primus 和 Secundus 銀行設定必要的雲端資源。這些雲端資源包括雲端儲存空間 bucket、KMS 金鑰、工作負載身分集區,以及 Primus 和 Secundus Bank 的服務帳戶。Primus Bank 和 Secundus Bank 將客戶資料儲存在 Cloud Storage 值區中,並使用 Cloud Key Management Service 金鑰加密資料。
- 步驟 2:建立工作負載服務帳戶,供工作負載 VM 使用。Secundus Bank 是工作負載的運算子,將啟動工作負載 VM。Primus Bank 會編寫工作負載程式碼。
- 步驟 3:建立工作負載,其中包含兩個 CLI 指令,一個用於計算指定位置的顧客人數,另一個用於找出 Primus 和 Secundus Bank 的共同顧客。這項工作負載是由 Primus Bank 撰寫,並封裝為 Docker 映像檔。這個 Docker 映像檔會發布至 Artifact Registry。
- 步驟 4:授權工作負載。Primus Bank 會使用工作負載身分集區,根據執行工作負載的使用者屬性、工作負載的用途和執行位置,授權工作負載存取客戶資料。
- 步驟 5:工作負載執行時,會提供含有工作負載和環境聲明的 Attestation Verifier 服務權杖,要求存取資料協作者 (Primus Bank 和 Secundus Bank) 的雲端資源。如果權杖中的工作負載測量聲明與 Primus 和 Secundus 銀行工作負載身分集區中的屬性條件相符,系統會傳回有權存取相應雲端資源的服務帳戶存取權杖。只有在 Confidential Space 內執行的工作負載,才能存取雲端資源。
- 步驟 5(a):執行第一個工作負載,計算特定地點的 Primus Bank 客戶。以這項工作負載為例,Primus Bank 會是資料協作者和工作負載作者,負責將加密的客戶名單提供給 Confidential Space 中執行的工作負載。Secundus Bank 是工作負載運算子,會在 Confidential Space 中執行工作負載。
- 步驟 5(b):執行第二個工作負載,找出 Primus 和 Secundus 銀行共有的客戶。在這個工作負載中,Primus Bank 和 Secundus Bank 都是資料協作者。他們會將加密的顧客名單提供給在 Confidential Space 中執行的工作負載。Secundus Bank 再次成為工作負載運算子。這項工作負載也將獲得 Secundus Bank 授權,因為工作負載需要存取 Secundus Bank 的加密客戶名單,才能找出共同客戶。在本例中,Secundus Bank 會根據執行工作負載的人員屬性、工作負載的用途和執行位置,授權工作負載存取客戶資料,如 Primus Bank 的步驟 4 所述。

2. 設定雲端資源
事前準備
- 使用下列指令複製 這個存放區,取得本程式碼研究室所需的指令碼。
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- 變更本程式碼研究室的目錄。
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
- 為專案啟用帳單。
- 為兩個專案啟用 Confidential Computing API 和下列 API。
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
- 使用這個指令,為資源名稱設定變數,如下所示。您可以使用這些變數覆寫資源名稱 (例如
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket') - 您可以使用 Primus 專案中的現有雲端資源名稱,設定下列變數。如果已設定變數,系統會使用 Primus 專案中對應的現有雲端資源。如未設定變數,系統會根據專案名稱產生雲端資源名稱,並在下列項目中建立新的雲端資源:
| 儲存 Primus Bank 客戶資料檔案的 bucket。 |
| Primus Bank 的 Workload Identity Pool (WIP),用於驗證聲明。 |
| Primus Bank 的 Workload Identity Pool 提供者,其中包含授權條件,可用於 Attestation Verifier Service 簽署的權杖。 |
| Primus Bank 的服務帳戶, |
| 用來加密儲存在「Primus Bank」 |
| 用於為 Primus Bank 建立加密金鑰的 KMS 金鑰環。 |
| 工作負載 Docker 映像檔的推送目標構件存放區。 |
- 您可以使用 Secundus 專案中的現有雲端資源名稱,設定下列變數。如果已設定變數,系統會使用 Secundus 專案中對應的現有雲端資源。如未設定變數,系統會根據專案名稱產生雲端資源名稱,並建立新的雲端資源,做為下列項目的一部分:
| 儲存 Secundus Bank 顧客數位資料檔案的 bucket |
| Secundus Bank 的 Workload Identity Pool (WIP),用於驗證聲明。 |
| Secundus Bank 的 Workload Identity Pool 提供者,其中包含授權條件,可用於 Attestation Verifier Service 簽署的權杖。 |
| Secundus Bank 用來存取受保護資源的服務帳戶。 |
| 用於加密儲存在 |
| 用來為 Secundus Bank 建立加密金鑰 |
| 儲存工作負載結果的 bucket。 |
| 工作負載容器映像檔名稱。 |
| 工作負載容器映像檔的標記。 |
| 有權存取執行工作負載的 Confidential VM 的服務帳戶。 |
- 本程式碼研究室會使用下列構件:
primus_customer_list.csv:包含 Primus Bank 客戶資料的檔案。本程式碼研究室使用的範例檔案請見這裡。secundus_customer_list.csv:包含 Secundus Bank 客戶資料的檔案。本程式碼研究室使用的範例檔案請見這裡。- 您必須具備這兩個專案的特定權限:
- 如要使用
$PRIMUS_PROJECT_ID,您需要 Cloud KMS 管理員、Storage 管理員、Artifact Registry 管理員、服務帳戶管理員、IAM Workload Identity 集區管理員。 - 如要使用
$SECUNDUS_PROJECT_ID,您需要 Compute 管理員、Storage 管理員、服務帳戶管理員、Cloud KMS 管理員、IAM Workload Identity Pool 管理員和安全性管理員 (選用)。 - 執行下列指令碼,根據資源名稱的專案 ID,將其餘變數名稱設為值。
source config_env.sh
為 Primus Bank 設定雲端資源
Primus Bank 需要下列雲端資源。執行這個指令碼,為 Primus Bank 設定資源:
- Cloud Storage bucket (
$PRIMUS_INPUT_STORAGE_BUCKET),用於儲存 Primus Bank 的加密顧客資料檔案。 - KMS 中的加密金鑰 (
$PRIMUS_ENC_KEY) 和金鑰環 ($PRIMUS_ENC_KEYRING),用於加密 Primus Bank 的客戶資料檔案。 - Workload Identity Pool (
$PRIMUS_WORKLOAD_IDENTITY_POOL):根據提供者設定的屬性條件驗證聲明。 - 附加至上述工作負載身分集區 (
$PRIMUS_WORKLOAD_IDENTITY_POOL) 的服務帳戶 ($PRIMUS_SERVICE_ACCOUNT) 有權使用 KMS 金鑰解密資料 (使用roles/cloudkms.cryptoKeyDecrypter角色)、從 Cloud Storage bucket 讀取資料 (使用objectViewer角色),以及將服務帳戶連結至工作負載身分集區 (使用roles/iam.workloadIdentityUser)。
./setup_primus_bank_resources.sh
為 Secundus Bank 設定雲端資源
Secundus Bank 需要下列雲端資源。執行這個指令碼,設定 Secundus Bank 資源。按照下列步驟操作時,系統會建立下列資源:
- Cloud Storage bucket (
$SECUNDUS_INPUT_STORAGE_BUCKET),用於儲存 Secundus Bank 的加密顧客資料檔案。 - KMS 中的加密金鑰 (
$SECUNDUS_ENC_KEY) 和金鑰環 ($SECUNDUS_ENC_KEYRING),用於加密 Secundus Bank 的資料檔案。 - Workload Identity Pool (
$SECUNDUS_WORKLOAD_IDENTITY_POOL):根據提供者設定的屬性條件驗證聲明。 - 附加至上述工作負載身分集區 (
$SECUNDUS_WORKLOAD_IDENTITY_POOL) 的服務帳戶 ($SECUNDUS_SERVICE_ACCOUNT) 有權使用 KMS 金鑰解密資料 (使用roles/cloudkms.cryptoKeyDecrypter角色)、從 Cloud Storage 值區讀取資料 (使用objectViewer角色),以及將服務帳戶連結至工作負載身分集區 (使用roles/iam.workloadIdentityUser角色)。 - Cloud Storage bucket (
$SECUNDUS_RESULT_STORAGE_BUCKET),用於儲存 Secundus Bank 執行工作負載的結果。
./setup_secundus_bank_resources.sh
3. 建立工作負載
建立工作負載服務帳戶
現在,您將為工作負載建立服務帳戶,並具備下列必要角色和權限。執行下列指令碼,在 Secundus Bank 專案中建立工作負載服務帳戶。執行工作負載的 VM 會使用這個服務帳戶。
這個工作負載服務帳戶 ($WORKLOAD_SERVICE_ACCOUNT) 將具備下列角色:
- 將
confidentialcomputing.workloadUser角色授予工作負載服務帳戶。這樣使用者帳戶就能產生認證權杖。 - 將
logging.logWriter角色授予工作負載服務帳戶權限。這項設定可讓 Confidential Space 環境將記錄寫入 Cloud Logging 和序列控制台,因此 VM 終止後仍可存取記錄。 objectViewer,從$PRIMUS_INPUT_STORAGE_BUCKET雲端儲存空間值區讀取資料。objectViewer,從$SECUNDUS_INPUT_STORAGE_BUCKET雲端儲存空間值區讀取資料。objectAdmin,將工作負載結果寫入$SECUNDUS_RESULT_STORAGE_BUCKET雲端儲存空間 bucket。
./create_workload_service_account.sh
建立工作負載
在這個步驟中,您將為本程式碼研究室中使用的工作負載建立 Docker 映像檔。工作負載是簡單的 GoLang 應用程式,可執行下列操作:
- 計算指定地理位置的顧客人數。
- 從各自雲端儲存空間 bucket 中儲存的顧客名單,找出 Primus 和 Secundus Bank 的共同顧客。
執行下列指令碼,建立工作負載,其中會執行下列步驟:
- 建立由 Primus Bank 擁有的 Artifact Registry (
$PRIMUS_ARTIFACT_REPOSITORY),工作負載會發布至該處。 - 生成程式碼,並使用必要資源名稱更新程式碼。您可以在這裡找到本程式碼研究室使用的工作負載程式碼。
- 建構程式碼並封裝至 Docker 映像檔中。如要查看對應的 Dockerfile,請按這裡。
- 將 Docker 映像檔發布至 Primus Bank 擁有的 Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY)。 - 授予服務帳戶 Artifact Registry 的讀取權限 (
$WORKLOAD_SERVICE_ACCOUNT$PRIMUS_ARTIFACT_REGISTRY)。
./create_workload.sh
4. 授權並執行工作負載
授權工作負載
Primus Bank 想根據下列資源的屬性,授權工作負載存取客戶資料:
- 內容:已驗證的代碼
- 地點:安全無虞的環境
- 對象:值得信賴的運算子
Primus 會使用 Workload Identity 聯盟,根據這些規定強制執行存取權政策。
您可以透過 Workload Identity 聯盟指定屬性條件。這些條件會限制哪些身分可以透過workload identity pool (WIP) 進行驗證。您可以將 Attestation Verifier Service 新增至 WIP,做為工作負載身分集區供應商,以便呈現測量結果及強制執行政策。
您稍早已在設定雲端資源的步驟中建立 workload identity pool。現在,Primus Bank 會建立新的 OIDC 工作負載身分集區提供者。指定的 --attribute-condition 會授權存取工作負載容器。它需要:
- 內容:最新
$WORKLOAD_IMAGE_NAME已上傳至$PRIMUS_ARTIFACT_REPOSITORY存放區。 - 位置:Confidential Space 受信任執行環境在完全支援的 Confidential Space VM 映像檔上執行。
- 對象: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"
與為 Primus Bank 建立的 WIP 類似,Secundus Bank 也想根據下列條件授權工作負載存取客戶資料:
- 內容:工作負載。
- 地點:機密空間環境。
- 對象:執行工作負載的帳戶 (
$WORKLOAD_SERVICE_ACCOUNT)。
Primus Bank 會使用包含圖片標記的 image_reference 聲明,判斷是否應授權存取權。他們控管遠端存放區,因此可以確保只標記不會洩漏資料的映像檔。
相較之下,Secundus Bank 無法控管圖片來源的存放區,因此無法安全地做出這項假設。而是根據工作負載的 image_digest 選擇授權存取權。與 image_reference 不同,Primus Bank 可以變更 image_digest,指向其他圖片,但 Primus Bank 無法讓 image_digest 參照 Secundus Bank 在先前步驟稽核的圖片以外的圖片。
建立 workload identity pool 提供者之前,我們會收集工作負載容器映像檔的 image_digest,用於提供者的屬性條件。
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"
執行工作負載
在這個步驟中,Secundus Bank 會在 Confidential Space 執行工作負載。這項工作負載會從 Primus 和 Secundus 的工作負載身分集區取得存取權權杖,分別讀取及解密 Primus Bank 和 Secundus Bank 的客戶資料。
系統會使用中繼資料標記傳遞必要的 TEE 引數。工作負載容器的引數是透過旗標的「tee-cmd」部分傳遞。工作負載執行結果會發布至 $SECUNDUS_RESULT_STORAGE_BUCKET。
執行第一個工作負載
在第一次執行工作負載時,工作負載會從工作負載容器引數中提供的位置,計算 Primus Bank 的客戶人數。如下所示,第一個工作負載會執行「count-location」指令,結果會儲存在 $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\"]""
查看結果
在 Secundus 專案中,查看第一個工作負載的結果。等待 3 到 5 分鐘,工作負載就會完成執行,結果也會顯示在 Cloud Storage 值區中。
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
結果應為 3,因為這是 primus_customer_list.csv 檔案中列出的西雅圖人數!
執行第二個工作負載
在執行第二項工作負載時,我們會找出 Primus Bank 和 Secundus Bank 的共同客戶。如下所示,第二個工作負載會執行「list-common-customers」指令,結果會儲存在 $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\"]""
查看結果
在 Secundus 專案中,查看第二個工作負載的結果。等待 3 到 5 分鐘,工作負載就會完成執行,結果也會顯示在 Cloud Storage 值區中。
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
結果應為下列清單,因為這些是 Primus 和 Secundus Bank 的共同顧客。
輸出內容:
Eric
Clinton
Ashley
Cooper
執行未授權的工作負載
Primus Bank 的合約到期,Secundus Bank 無法再存取資料。因此,Primus Bank 更新了屬性條件,允許使用新合作夥伴 Tertius Bank 服務帳戶的 VM。
Primus Bank 修改 Workload Identity Pool 提供者
在 $PRIMUS_PROJECT_ID 中,更新 Attestation Verifier 身分提供者的屬性條件,授權新位置的工作負載。
- 將專案設為 $PRIMUS_PROJECT_ID。
gcloud config set project $PRIMUS_PROJECT_ID
- 使用下列指令匯出 Tertius Bank 的 GCP 專案 ID。Primus Bank 稍後會使用這項資訊,更新工作負載身分集區提供者的屬性條件。Primus 銀行不會停止授權 Secundus 銀行工作負載服務帳戶。現在允許 Tertius Bank 工作負載服務帳戶。
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
- 更新 workload identity pool 中的 OIDC 提供者。這裡的
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts會變更為'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts.。現在,系統會授權 Tertius Bank 的工作負載服務帳戶,而非 Secundus Bank 的工作負載服務帳戶。
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"
重新執行工作負載
Secundus Bank 嘗試執行原始工作負載時失敗。如要查看錯誤,請刪除原始結果檔案和 VM 執行個體,然後嘗試再次執行工作負載。
刪除現有結果檔案和 VM 執行個體
- 將專案設為
$SECUNDUS_PROJECT_ID專案。
gcloud config set project $SECUNDUS_PROJECT_ID
- 刪除結果檔案。
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
- 刪除機密 VM 執行個體。
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}
執行未授權的工作負載:
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\"]""
查看錯誤
您會看到錯誤訊息 (The given credential is rejected by the attribute condition),而不是工作負載的結果。
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
同樣地,如果 Primus Bank 偷偷修改工作負載,將 Secundus Bank 的完整客戶名單傳送至 Primus Bank 擁有的值區,該嘗試就會失敗,因為惡意工作負載的摘要與 Secundus Bank 工作負載身分集區中授權的映像檔摘要不同。
5. 清除
這個指令碼可用於清除在本程式碼研究室中建立的資源。在這次清理作業中,系統會刪除下列資源:
- Primus Bank 的輸入 Cloud Storage bucket (
$PRIMUS_INPUT_STORAGE_BUCKET))。 - Primus Bank 的服務帳戶 (
$PRIMUS_SERVICE_ACCOUNT)。 - Primus Bank 的構件登錄檔,其中包含映像檔簽章 (
$PRIMUS_COSIGN_REPOSITORY)。 - Primus Bank 的 workload identity pool(
$PRIMUS_WORKLOAD_IDENTITY_POOL)。 - Secundus Bank 的工作負載服務帳戶 (
$WORKLOAD_SERVICE_ACCOUNT)。 - Secundus Bank 的輸入 Cloud Storage bucket (
$SECUNDUS_INPUT_STORAGE_BUCKET))。 - Secundus Bank 的服務帳戶 (
$SECUNDUS_SERVICE_ACCOUNT)。 - Secundus Bank 的構件登錄檔,其中包含映像檔簽章 (
$SECUNDUS_COSIGN_REPOSITORY)。 - Secundus Bank 的 workload identity pool(
$SECUNDUS_WORKLOAD_IDENTITY_POOL)。 - Secundus Bank 的工作負載服務帳戶 (
$WORKLOAD_SERVICE_ACCOUNT)。 - 工作負載運算執行個體。
- Secundus Bank 的結果儲存空間 bucket (
$SECUNDUS_RESULT_STORAGE_BUCKET)。 - Primus Bank 的構件存放區 (
$PRIMUS_ARTIFACT_REPOSITORY)。
./cleanup.sh
探索完畢後,請考慮刪除專案。
- 前往 Cloud Platform Console。
- 選取要關閉的專案,然後按一下頂端的「刪除」,系統就會排定刪除專案的時間。
恭喜
恭喜,您已成功完成本程式碼研究室!
您瞭解如何使用 Confidential Space,在確保共用資料安全無虞的同時,維持資料機密性。
後續步驟
查看一些類似的程式碼研究室...