1. 總覽
Confidential Space 提供安全的多方資料分享和協作功能,同時讓機構保有資料的機密性。也就是說,機構可以彼此協同合作,同時維持資料的控管權,並防止資料遭到未經授權的存取。
在 Confidential Space 中,您可以匯總及分析機密資料 (通常受監管),同時保有資料的完全控制權,進而獲得雙贏的局面。有了 Confidential Space,機構就能匯總及分析機密資料來獲得價值,讓雙方都受益,同時保有資料的完全控制權,例如個人識別資訊 (PII)、受保護的健康資訊 (PHI)、智慧財產和加密密鑰。
軟硬體需求
- Google Cloud Platform 專案
- Chrome 或 Firefox 瀏覽器
- Google Compute Engine 的基本知識 ( 程式碼研究室)、機密 VM、容器和遠端存放區
- Cloud KMS 的基本知識 ( 程式碼研究室)
- 具備服務帳戶、Workload Identity 聯盟和屬性條件的基本知識。
課程內容
- 如何設定執行機密空間所需的雲端資源
- 如何在執行機密空間 VM 映像檔的機密 VM 中執行工作負載
- 如何根據工作負載程式碼的屬性 (what)、機密空間環境 (where) 和執行工作負載的帳戶 (who),授權存取受保護的資源。
在這個程式碼研究室中,您將為 Primus 和 Secundus Bank 之間建立機密空間,以便找出兩者共同的客戶,而無須彼此分享完整的帳戶清單。其中包含下列步驟:
- 步驟 1:為 Primus 和 Secundus 銀行設定必要的雲端資源。這些雲端資源包括雲端儲存值區、KMS 金鑰、工作負載身分集區,以及 Primus 和 Secundus 銀行的服務帳戶。Primus Bank 和 Secundus Bank 會將客戶資料儲存在 Cloud Storage 值區中,並使用 Cloud Key Management Service 金鑰加密資料。
- 步驟 2:建立工作負載 VM 將使用的 workload 服務帳戶。負責管理工作負載的 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 會是資料協作者和工作負載作者,會將加密的客戶名單提供給在機密空間中執行的工作負載。Secundus Bank 會成為工作負載作業管理員,並在機密空間中執行工作負載。
- 步驟 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>
- 啟用專案的帳單功能。
- 為兩個專案啟用機密運算 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 專案中對應的現有雲端資源。如果未設定變數,系統會根據 project-name 產生雲端資源名稱,並在下列項目中建立新的雲端資源:
| 儲存 Primus Bank 客戶資料檔案的值區。 |
| Primus Bank 用來驗證要求的工作負載身分集區 (WIP)。 |
| Primus Bank 的工作負載身分集區提供者,其中包含授權條件,可用於由認證驗證服務簽署的權杖。 |
| Primus Bank 的服務帳戶, |
| 用於為 Primus Bank 加密 |
| 用於為 Primus Bank 建立加密金鑰 |
| 工作負載 Docker 映像檔將推送至的構件存放區。 |
- 您可以使用 Secundus 專案中現有的雲端資源名稱設定下列變數。如果變數已設定,系統就會使用 Secundus 專案中對應的現有雲端資源。如果未設定變數,系統會根據專案名稱產生雲端資源名稱,並在以下情況下建立新的雲端資源:
| 儲存 Secundus Bank 客戶資料檔案的值區 |
| 驗證要求的 Secundus Bank Workload Identity Pool (WIP)。 |
| Secundus Bank 的 Workload Identity Pool 提供者,其中包含授權條件,可用於由驗證服務簽署的權杖。 |
|
|
| 用於加密 Secundus Bank 在 |
| 用於為 Secundus Bank 建立加密金鑰 |
| 儲存工作負載結果的值區。 |
| 工作負載容器映像檔名稱。 |
| 工作負載容器映像檔的標記。 |
| 服務帳戶具備執行工作負載的機密 VM 存取權。 |
- 本程式碼研究室中會使用一些構件,如下所述:
primus_customer_list.csv
:包含 Primus Bank 客戶資料的檔案。這裡是本程式碼研究室使用的範例檔案。secundus_customer_list.csv
:包含 Secundus Bank 客戶資料的檔案。這裡是本程式碼研究室使用的範例檔案。- 您必須具備這兩個專案的特定權限:
- 針對
$PRIMUS_PROJECT_ID
,您需要具備 Cloud KMS 管理員、儲存空間管理員、Artifact Registry 管理員、服務帳戶管理員、IAM Workload Identity 集區管理員。 - 針對
$SECUNDUS_PROJECT_ID
,您需要具備 Compute 管理員、儲存空間管理員、服務帳戶管理員、Cloud KMS 管理員、IAM Workload Identity 集區管理員、安全性管理員 (選用)。 - 執行下列指令碼,將剩餘的變數名稱設為資源名稱的值,並根據專案 ID 進行設定。
source config_env.sh
為 Primus Bank 設定雲端資源
Primus Bank 需要下列雲端資源。執行這個指令碼,為 Primus Bank 設定資源:
- Cloud Storage 值區 (
$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 值區的資料 (使用objectViewer
角色),以及將服務帳戶連結至工作負載身分集區 (使用roles/iam.workloadIdentityUser
)。
./setup_primus_bank_resources.sh
為 Secundus Bank 設定雲端資源
對於 Secundus Bank,您需要下列雲端資源。執行這個指令碼,設定 Secundus Bank 資源。在這個步驟中,系統會建立下列資源:
- Cloud Storage 值區 (
$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
角色) 解密資料、讀取雲端儲存值區的資料 (使用objectViewer
角色),以及將服務帳戶連結至工作負載身分識別資料集區 (使用roles/iam.workloadIdentityUser
角色)。 - Cloud Storage 值區 (
$SECUNDUS_RESULT_STORAGE_BUCKET
),用於儲存 Secundus Bank 執行工作負載的結果。
./setup_secundus_bank_resources.sh
3. 建立工作負載
建立工作負載服務帳戶
接下來,您將為工作負載建立服務帳戶,並設定下列必要的角色和權限。執行下列指令碼,即可在 Secundus Bank 專案中建立工作負載服務帳戶。執行工作負載的 VM 會使用這個服務帳戶。
這個工作負載服務帳戶 ($WORKLOAD_SERVICE_ACCOUNT
) 將具備下列角色:
- 將
confidentialcomputing.workloadUser
角色授予工作負載服務帳戶。這可讓使用者帳戶產生認證權杖。 - 將
logging.logWriter
角色指派給工作負載服務帳戶權限。這樣一來,機密空間環境就能將記錄寫入 Cloud Logging 和序列控制台,讓您在 VM 終止後也能存取記錄。 objectViewer
可讀取$PRIMUS_INPUT_STORAGE_BUCKET
Cloud Storage 值區中的資料。objectViewer
可讀取$SECUNDUS_INPUT_STORAGE_BUCKET
Cloud Storage 值區中的資料。objectAdmin
將工作負載結果寫入$SECUNDUS_RESULT_STORAGE_BUCKET
Cloud Storage 值區。
./create_workload_service_account.sh
建立工作負載
在這個步驟中,您將為本程式碼研究室中使用的負載建立 Docker 映像檔。工作負載是簡單的 GoLang 應用程式,其功能如下:
- 計算指定地理區域內的顧客人數。
- 從 Primus 和 Secundus Bank 各自的雲端儲存空間值區中,找出兩家銀行的共同客戶。
執行下列指令碼,建立工作負載,並執行下列步驟:
- 建立 Primus Bank 擁有的 Artifact Registry (
$PRIMUS_ARTIFACT_REPOSITORY
),用於發布工作負載。 - 產生程式碼,並使用必要的資源名稱更新程式碼。您可以在這裡找到本程式碼研究室中使用的負載程式碼。
- 建構程式碼,並將其封裝至 Docker 映像檔。如需對應的 Dockerfile,請參閱這篇文章。
- 將 Docker 映像檔發布至 Primus Bank 擁有的 Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY
)。 - 授予服務帳戶
$WORKLOAD_SERVICE_ACCOUNT
對 Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY
) 的讀取權限。
./create_workload.sh
4. 授權並執行工作負載
授權工作負載
Primus Bank 希望授權工作負載,根據下列資源的屬性存取客戶資料:
- What:已驗證的程式碼
- 地點:安全的環境
- Who:可信任的運算子
Primus 會使用 Workload Identity 聯盟,根據這些規定強制執行存取權政策。
您可以透過 Workload Identity 聯盟指定屬性條件。這些條件會限制哪些身分可以透過工作負載身分集區 (WIP) 進行驗證。您可以將認證驗證服務新增至 WIP,做為工作負載身分集區供應商,以呈現評估結果並強制執行政策。
在雲端資源設定步驟中,我們已先建立 Workload Identity 集區。Primus Bank 會建立新的 OIDC 工作負載身分集區提供者。指定的 --attribute-condition
會授予工作負載容器的存取權。它需要:
- 內容:最新的
$WORKLOAD_IMAGE_NAME
已上傳至$PRIMUS_ARTIFACT_REPOSITORY
存放區。 - 適用範圍:在受全面支援的機密空間 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 也想根據以下條件授權工作負載存取客戶資料:
- 內容:工作負載。
- 位置:機密空間環境。
- Who:執行工作負載的帳戶 (
$WORKLOAD_SERVICE_ACCOUNT
)。
Primus Bank 會使用包含圖片標記的 image_reference
權利要求,判斷是否應授權存取權。他們會控管遠端存放區,因此可以確保只標記不會洩漏資料的圖片。
相較之下,Secundus Bank 無法控制取得圖片的存放區,因此無法安全地做出這項假設。而是選擇根據工作負載的 image_digest
授權存取權。與 image_reference
不同,Primus Bank 無法變更 image_digest
指向其他圖片,只能指向 Secundus Bank 在前一個步驟中檢查的圖片。
在建立工作負載身分集區提供者之前,我們會收集工作負載容器映像檔的 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 會在機密空間中執行工作負載。這個工作負載會從 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 分鐘,讓工作負載完成執行,並在雲端儲存空間值區中顯示結果。
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 分鐘,讓工作負載完成執行,並在雲端儲存空間值區中顯示結果。
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 集區提供者
在 $PRIMUS_PROJECT_ID
中,更新認證驗證人身分驗證器提供者的屬性條件,以便在新的地點授權工作負載。
- 將專案設為 $PRIMUS_PROJECT_ID。
gcloud config set project $PRIMUS_PROJECT_ID
- 使用下列指令匯出 Tertius Bank 的 GCP 專案 ID。之後,Primus Bank 會使用這個值更新工作負載身分集區提供者的屬性條件。Primus 銀行不會停止授權 Secundus Bank 工作負載服務帳戶。現已開放 Tertius Bank 工作負載服務帳戶。
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
- 更新工作負載身分集區中的 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 值區 (
$PRIMUS_INPUT_STORAGE_BUCKET)
)。 - Primus Bank 的服務帳戶 (
$PRIMUS_SERVICE_ACCOUNT
)。 - Primus Bank 的構件登錄檔,其中儲存了映像檔簽章 (
$PRIMUS_COSIGN_REPOSITORY
)。 - Primus Bank(
$PRIMUS_WORKLOAD_IDENTITY_POOL
) 的工作負載身分集區。 - Secundus Bank (
$WORKLOAD_SERVICE_ACCOUNT
) 的工作負載服務帳戶。 - 輸入 Secundus Bank 的 Cloud Storage 值區 (
$SECUNDUS_INPUT_STORAGE_BUCKET)
)。 - Secundus Bank (
$SECUNDUS_SERVICE_ACCOUNT
) 的服務帳戶。 - 保存映像檔簽章 (
$SECUNDUS_COSIGN_REPOSITORY
) 的 Secundus Bank 構件登錄。 - Secundus Bank(
$SECUNDUS_WORKLOAD_IDENTITY_POOL
) 的工作負載身分集區。 - Secundus Bank (
$WORKLOAD_SERVICE_ACCOUNT
) 的工作負載服務帳戶。 - 工作負載運算執行個體。
- Secundus Bank 的結果儲存值區 (
$SECUNDUS_RESULT_STORAGE_BUCKET
)。 - Primus Bank 的構件存放區 (
$PRIMUS_ARTIFACT_REPOSITORY
)。
./cleanup.sh
如果您已完成探索,請考慮刪除專案。
- 前往 Cloud Platform Console。
- 選取要關閉的專案,然後按一下頂端的「刪除」:這會排定專案的刪除作業。
恭喜
恭喜,您已順利完成本程式碼研究室!
您已瞭解如何使用機密空間,在保護共用資料機密性的同時確保資料安全。
後續步驟
查看一些類似的程式碼研究室…