以下說明如何傳送加密資料:
設定 Google Cloud 指令列介面
安裝並初始化 Google Cloud 指令列介面。
如要選取或建立新的 Google Cloud 專案,並啟用 Cloud Key Management Service,請按一下「啟用 Cloud KMS」。
如要在環境中設定專案,請使用
gcloud config set
指令。如要檢查專案是否已在環境中設定,請執行gcloud config list
。如果未設定
project
,或想為金鑰使用其他專案,請執行gcloud config set
:gcloud config set project PROJECT_ID
建立金鑰
詳情請參閱 Cloud Key Management Service 總覽。
建立金鑰環。
gcloud kms keyrings create KEY_RING_NAME \ --location KEY_RING_LOCATION
詳情請參閱建立金鑰環。
在金鑰環中建立金鑰。ROTATION_PERIOD 表示金鑰輪替間隔,NEXT_ROTATION_TIME 則表示首次輪替的日期和時間。
舉例來說,如要每 30 天輪替一次金鑰,並在 1 週內執行第一次輪替,請將 ROTATION_PERIOD 設為
30d
,並將 NEXT_ROTATION_TIME 設為$(date --utc --date="next week" --iso-8601=seconds)
。gcloud kms keys create KEY_NAME \ --keyring KEY_RING_NAME \ --location KEY_RING_LOCATION \ --purpose "encryption" \ --rotation-period ROTATION_PERIOD \ --next-rotation-time "NEXT_ROTATION_TIME"
詳情請參閱「建立金鑰」一文。
建立工作負載身分集區提供者
本節簡要介紹 Workload Identity 聯盟。詳情請參閱「Workload Identity 聯盟」。
建立工作負載身分集區 (WIP)。集區的
location
必須為global
。gcloud iam workload-identity-pools create WIP_ID \ --location=global \ --display-name="WIP_DISPLAY_NAME" \ --description="WIP_DESCRIPTION"
詳情請參閱「管理 workload identity pool 和提供者」。
建立工作負載身分集區提供者。
--attribute-condition
引數會驗證呼叫者是否為機密比對服務帳戶。gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \ --location=global \ --workload-identity-pool=WIP_ID \ --display-name="PROVIDER_DISPLAY_NAME" \ --description="PROVIDER_DESCRIPTION" \ --attribute-mapping="google.subject=assertion.sub,google.groups=[\"PROVIDER_ID\"]" \ --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' && 'STABLE' in assertion.submods.confidential_space.support_attributes && ['[email protected]'].exists( a, a in assertion.google_service_accounts) && 'ECDSA_P256_SHA256:6b1f357b59e9407fb017ca0e3e783b2bd5acbfea6c83dd82971a4150df5b25f9' in assertion.submods.container.image_signatures.map(sig, sig.signature_algorithm+':'+sig.key_id)" \ --issuer-uri="https://confidentialcomputing.googleapis.com" \ --allowed-audiences="https://sts.googleapis.com"
將金鑰解密者角色授予 WIP 提供者。
# Grants the role to the WIP provider. gcloud kms keys add-iam-policy-binding KEY_NAME \ --keyring KEY_RING_NAME \ --location KEY_RING_LOCATION \ --member "principalSet://iam.googleapis.com/projects/PROJECT_ID/locations/global/workloadIdentityPools/WIP_ID/group/PROVIDER_ID" \ --role "roles/cloudkms.cryptoKeyDecrypter"
加密資料
Data Manager API 中的加密作業需要資料加密金鑰 (DEK)。DEK 是用來加密資料的對稱金鑰。您的 DEK 會使用 Google Cloud KMS 金鑰加密。您會在要求中傳送加密的 DEK。
如要準備要求中的資料以進行加密,請遵循與未加密資料相同的格式和雜湊處理規範。
請勿加密未經過雜湊處理的值。例如 AddressInfo
的 region_code
或 postal_code
。
格式化並雜湊處理每個欄位的資料後,請按照下列步驟加密雜湊值:
- 使用 Base64 編碼方式編碼雜湊位元組。
- 使用 DEK 加密 Base64 編碼的雜湊。
- 使用十六進位或 Base64 編碼,為加密程序的輸出內容編碼。
- 使用欄位的編碼值。
- 在要求中設定
encryption_info
和encoding
。
如要完成最後一個步驟,請修改
IngestAudienceMembersRequest
,指出您已加密資料:
- 設定
encryption_info
欄位。 - 將
encoding
欄位設為用於編碼加密欄位值的編碼。
以下是要求片段,其中已設定加密和編碼欄位:
{
...
"encryptionInfo": {
"gcpWrappedKeyInfo": {
"kekUri": "gcp-kms://projects/PROJECT_ID/locations/KEY_RING_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME",
"wipProvider": "projects/PROJECT_ID/locations/global/workloadIdentityPools/WIP_ID/providers/PROVIDER_ID",
"keyType": "XCHACHA20_POLY1305",
"encryptedDek": "ENCRYPTED_DEK"
}
},
"encoding": "ENCODING"
}
如要使用 Data Manager API 程式庫和公用程式建構及傳送要求,請參閱 Java 的 IngestAudienceMembersWithEncryption
程式碼範例或 Python 的 ingest_audience_members_with_encryption
程式碼範例。