So senden Sie verschlüsselte Daten:
Google Cloud-Befehlszeile einrichten
Installieren und initialisieren Sie die Google Cloud-Befehlszeile.
Führen Sie den folgenden Befehl aus, um sicherzustellen, dass Ihre
gcloud
-Komponenten auf dem neuesten Stand sind.gcloud components update
Wenn Sie ein Google Cloud-Projekt auswählen oder erstellen und den Cloud Key Management Service aktivieren möchten, klicken Sie auf Cloud KMS aktivieren.
Verwenden Sie den Befehl
gcloud config set
, um Ihr Projekt in Ihrer Umgebung festzulegen. Mit dem Befehlgcloud config list
können Sie prüfen, ob das Projekt bereits in Ihrer Umgebung festgelegt ist.Wenn kein
project
festgelegt ist oder Sie ein anderes Projekt für Ihren Schlüssel verwenden möchten, führen Siegcloud config set
aus:gcloud config set project PROJECT_ID
Schlüssel erstellen
Weitere Informationen finden Sie in der Key Management Service-Dokumentation.
Schlüsselbund erstellen
gcloud kms keyrings create KEY_RING_NAME \ --location KEY_RING_LOCATION
Erstellen Sie einen Schlüssel im Schlüsselbund. ROTATION_PERIOD gibt das Intervall für die Rotation des Schlüssels an und NEXT_ROTATION_TIME das Datum und die Uhrzeit der ersten Rotation.
Wenn Sie den Schlüssel beispielsweise alle 30 Tage rotieren und die erste Rotation in einer Woche durchführen möchten, legen Sie ROTATION_PERIOD auf
30d
und NEXT_ROTATION_TIME auf$(date --utc --date="next week" --iso-8601=seconds)
fest.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"
Weitere Informationen finden Sie unter Schlüssel erstellen.
Workload Identity-Poolanbieter erstellen
Dieser Abschnitt bietet einen kurzen Überblick über die Workload Identity-Föderation. Weitere Informationen finden Sie in der Dokumentation zur Workload Identity-Föderation.
Erstellen Sie einen Workload Identity-Pool (WIP). Der
location
für den Pool mussglobal
sein.gcloud iam workload-identity-pools create WIP_ID \ --location=global \ --display-name="WIP_DISPLAY_NAME" \ --description="WIP_DESCRIPTION"
Weitere Informationen finden Sie unter Workload Identity-Pools und Anbieter verwalten.
Erstellen Sie einen Workload Identity-Poolanbieter. Das Argument
--attribute-condition
verifiziert, dass der Aufrufer ein Dienstkonto für den vertraulichen Abgleich ist.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 && ['cfm-services@admcloud-cfm-services.iam.gserviceaccount.com'].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"
Weisen Sie dem WIP-Anbieter die Rolle „Entschlüsselungstool für Schlüssel“ zu.
# 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"
Daten verschlüsseln
Für die Verschlüsselung in der Data Manager API ist ein Datenverschlüsselungsschlüssel (Data Encryption Key, DEK) erforderlich. Ein DEK ist ein symmetrischer Schlüssel, den Sie zum Verschlüsseln von Daten verwenden. Ihr DEK wird mit Ihrem Google Cloud KMS-Schlüssel verschlüsselt. Sie senden den verschlüsselten DEK als Teil der Anfrage.
Wenn Sie die Daten in der Anfrage für die Verschlüsselung vorbereiten möchten, folgen Sie denselben Formatierungs- und Hashing-Richtlinien, die Sie auch für unverschlüsselte Daten verwenden würden.
Verschlüsseln Sie keine nicht gehashten Werte. Beispiel: die region_code
oder postal_code
einer AddressInfo
.
Nachdem die Daten für jedes Feld formatiert und gehasht wurden, verschlüsseln Sie den gehashten Wert so:
- Codieren Sie die Hash-Bytes mit Base64-Codierung.
- Verschlüsseln Sie den Base64-codierten Hash mit Ihrem DEK.
- Codieren Sie die Ausgabe des Verschlüsselungsprozesses entweder mit Hex- oder Base64-Codierung.
- Verwenden Sie den codierten Wert für das Feld.
- Legen Sie
encryption_info
undencoding
für die Anfrage fest.
Um den letzten Schritt abzuschließen, müssen Sie die Datei IngestAudienceMembersRequest
oder IngestEventsRequest
ändern, um anzugeben, dass Sie Ihre Daten verschlüsselt haben:
- Legen Sie das Feld
encryption_info
fest. - Setzen Sie das Feld
encoding
auf die Codierung, die zum Codieren der verschlüsselten Feldwerte verwendet wurde.
Hier sehen Sie ein Snippet einer Anfrage, in der die Verschlüsselungs- und Codierungsfelder festgelegt sind:
{
...
"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"
}
Wenn Sie die Bibliothek und die Dienstprogramme der Data Manager API verwenden möchten, um eine Anfrage zu erstellen und zu senden, sehen Sie sich das IngestAudienceMembersWithEncryption
-Codebeispiel für Java oder das ingest_audience_members_with_encryption
-Codebeispiel für Python an.