資料協作者必須設定下列資源,工作負載才能存取機密資料:
加密資料本身,儲存在 Google Cloud中。
服務帳戶,可解密該資料。
使用工作負載身分集區 (WIP) 進行驗證驗證。工作負載獲得 WIP 授權後,即可模擬資料協作者專案中的服務帳戶,以擷取機密資料。
此外,資料協作者必須選擇 Confidential Space 工作負載結果的儲存位置,以及顯示的資料是專屬還是共用。舉例來說,您可以將相同結果輸出至每個資料協作者所屬的多個 Cloud Storage 值區。
儲存資料
您可以使用任何 Google Cloud 資料儲存服務代管機密資料。舉例來說,您可能會使用下列其中一項服務:
無論是使用內建功能,還是 Cloud Key Management Service (Cloud KMS) 等服務,都應確保靜態資料經過加密。
建立服務帳戶來解密機密資料
您可透過服務帳戶,將機密資料提供給 Confidential Space 工作負載,並減少人為接觸這些資料的機會。
舉例來說,您可以使用 Cloud KMS 加密 Cloud Storage 中的機密檔案,然後建立服務帳戶,並授予該帳戶存取資料和解密金鑰的權限。
然後將該服務帳戶連結至 WIP。其他專案中授權的 Confidential Space 工作負載隨後可以使用該 WIP 模擬解密資料的服務帳戶、擷取解密資料,並進行處理。
服務帳戶可用於解密及處理機密資料,因此只有擁有者才能查看機密資料。由於工作負載是在機密 VM 中運作,因此硬體式記憶體加密功能可確保資料在使用期間保持私密。使用正式版 Confidential Space 映像檔的工作負載 VM 也會停用 SSH,因此 VM 執行時,任何人都無法存取。
如需相關範例,請參閱「建立第一個 Confidential Space 環境」。
建立 WIP 和提供者,用於認證驗證
為保護資料免受不受信任的工作負載運算子侵害,機密空間會實作認證程序,偵測工作負載映像檔或 TEE 的修改內容。這個程序以受防護的 VM 測量啟動和擴充執行階段測量為基礎,並在虛擬信任平台模組 (vTPM) 裝置中,擷取受保護的僅擴充暫存器中的啟動順序測量值。
私密空間驗證服務會產生 OpenID Connect (OIDC) 權杖,其中包含 vTPM 驗證,且格式可供 WIP 驗證,WIP 會根據新增為屬性條件的政策檢查這些驗證,並將其新增至提供者。這些權杖由 Google 簽署,效期為一小時,且會自動重新整理。
如果 WIP 授權工作負載,工作負載就能模擬專案中的服務帳戶,解密及擷取機密資料。
如要設定 WIP 和供應商,請完成下列操作:
使用
iam.workloadIdentityUser
角色,將解密服務帳戶連結至 WIP。建立 OIDC 提供者,並提供下列詳細資料:
https://confidentialcomputing.googleapis.com/
的核發者 URI。「
https://sts.googleapis.com
」的允許目標對象。提供者屬性對應
google.subject
,值為assertion.sub
。用於驗證工作負載認證的屬性條件。如需可用選項,請參閱「建立認證政策」。
建立認證政策
建立 WIP 時,您會新增屬性條件,工作負載必須通過這些條件,才能存取資料。對於 Confidential Space,這些屬性條件會構成驗證政策。
政策是以一般運算語言 (CEL) 編寫,由一系列可使用 &&
運算子串連的判斷組成。
以下範例說明如何使用 gcloud CLI 將提供者新增至工作負載身分集區,以及定義政策的 attribute-condition
選項:
gcloud iam workload-identity-pools providers create-oidc attestation-verifier \
--location=global \
--workload-identity-pool=user-pool-name \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject=assertion.sub" \
--attribute-condition="assertion.submods.container.image_digest =='sha256:837ccb607e312b170fac7383d7ccfd61fa5072793f19a25e75fbacb56539b86b' \
&& 'service-account@my-project.iam.gserviceaccount.com' in assertion.google_service_accounts \
&& assertion.swname == 'CONFIDENTIAL_SPACE' \
&& 'STABLE' in assertion.submods.confidential_space.support_attributes"
在本例中,嘗試模擬連線至工作負載身分集區的服務帳戶時,外部身分必須證明並符合下列詳細資料:
工作負載容器的映像檔摘要
連結至工作負載 VM 的服務帳戶地址
這是指在 VM 上執行的軟體,並具有所有內建安全保障。
CONFIDENTIAL_SPACE
生產環境的 Confidential Space 映像檔支援屬性
認證聲明
下表詳細列出可用於建構認證政策的判斷。他們可以驗證 Confidential Space 映像檔、工作負載容器和 VM 所做的判斷。
圖片聲明
斷言 | 類型 | 說明 |
---|---|---|
互動對象:
|
定義的字串 |
確認 Confidential Space 映像檔是偵錯或正式版。 有效值如下:
範例下列程式碼會驗證是否使用 Confidential Space 映像檔的偵錯版本:
下列程式碼會驗證是否使用 Confidential Space 映像檔的正式版:
|
assertion.submods.confidential_space.support_attributes |
字串陣列 |
驗證 TEE 的安全版本是否為正式版 Confidential Space 映像檔。偵錯機密空間映像檔未設定支援屬性。 支援的屬性有三種:
範例下列程式碼會驗證是否使用穩定版本的 Confidential Space 映像檔:
|
assertion.swname |
定義的字串 |
驗證認證實體執行的軟體。值一律為 範例
|
assertion.swversion |
字串陣列 |
驗證 Confidential Space 映像檔的軟體版本。建議改用 範例
|
容器斷言
斷言 | 類型 | 說明 |
---|---|---|
互動對象:
|
字串陣列 |
驗證工作負載映像檔中使用的 CMD 指令和參數。 範例下列程式碼會驗證工作負載映像檔的 CMD 是否遭到覆寫:
下列程式碼會驗證
|
互動對象:
|
JSON 物件 |
確認環境變數及其值已明確傳遞至容器。 範例下列程式碼會驗證環境變數
|
互動對象:
|
字串 |
確認工作負載運算子是否已覆寫容器中的環境變數。 範例下列程式碼會驗證工作負載運算子是否未覆寫
下列程式碼會驗證工作負載運算子是否覆寫任何環境變數:
|
assertion.submods.container.image_digest |
字串 |
驗證工作負載容器的映像檔摘要。指定這項條件後,多方就能同意授權工作負載存取資料。 範例
|
assertion.submods.container.image_id |
字串 |
驗證工作負載容器的映像檔 ID。 範例
|
互動對象:
|
字串 |
驗證在 Confidential Space 映像檔上執行的工作負載容器位置。 範例
|
互動對象:
|
JSON 物件 |
驗證圖片是否具有特定簽章,或是否由公開金鑰和簽章演算法簽署。指定這項條件後,多方就能同意授權工作負載存取資料。 判斷可包含下列元素:
範例
|
互動對象:
|
定義的字串 |
驗證容器啟動器的重新啟動政策,以瞭解工作負載停止時的行為。 有效值如下:
範例
|
VM 聲明
斷言 | 類型 | 說明 |
---|---|---|
互動對象:
|
字串陣列 |
確認指定服務帳戶已連線至執行工作負載的 VM,或已使用 VM 中繼資料的 範例
|
assertion.hwmodel |
字串 |
驗證基礎機密運算技術。支援的平台如下:
範例
|
互動對象:
|
布林值 |
驗證認證實體的監控狀態。 範例
|
assertion.submods.gce.instance_id |
字串 |
驗證 VM 執行個體 ID。 範例
|
assertion.submods.gce.instance_name |
字串 |
驗證 VM 執行個體的名稱。 範例
|
assertion.submods.gce.project_id |
字串 |
驗證 VM 執行的 Google Cloud 專案是否具有指定的專案 ID。 範例
|
assertion.submods.gce.project_number |
字串 |
驗證 VM 是否在具有指定專案編號的 Google Cloud 專案中執行。 範例
|
互動對象:
|
字串 |
確認 VM 是否在指定區域中執行。 範例
|