Ecco come inviare dati criptati:
Configura l'interfaccia a riga di comando Google Cloud
Installa e inizializza l'interfaccia a riga di comando di Google Cloud.
Per assicurarti che i componenti
gcloud
siano aggiornati, esegui questo comando.gcloud components update
Per selezionare o creare un nuovo progetto Google Cloud e abilitare Cloud Key Management Service, fai clic su Abilita Cloud KMS.
Per impostare il progetto nel tuo ambiente, utilizza il comando
gcloud config set
. Per verificare se il progetto è già impostato nel tuo ambiente, eseguigcloud config list
.Se non è impostato alcun
project
o vuoi utilizzare un progetto diverso per la chiave, eseguigcloud config set
:gcloud config set project PROJECT_ID
Crea una chiave
Per saperne di più, consulta la documentazione di Key Management Service.
Crea un keyring.
gcloud kms keyrings create KEY_RING_NAME \ --location KEY_RING_LOCATION
Per saperne di più, crea un keyring.
Crea una chiave nel keyring. ROTATION_PERIOD indica l'intervallo per ruotare la chiave, mentre NEXT_ROTATION_TIME indica la data e l'ora in cui deve avvenire la prima rotazione.
Ad esempio, per ruotare la chiave ogni 30 giorni ed eseguire la prima rotazione in 1 settimana, imposta ROTATION_PERIOD su
30d
e NEXT_ROTATION_TIME su$(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"
Per ulteriori informazioni, consulta la sezione Creare una chiave.
Crea un provider di pool di identità del workload
Questa sezione fornisce una breve panoramica della federazione di Workload Identity. Per ulteriori informazioni, consulta la documentazione sulla federazione delle identità per i workload.
Crea un pool di identità del workload (WIP). Il
location
per il pool deve essereglobal
.gcloud iam workload-identity-pools create WIP_ID \ --location=global \ --display-name="WIP_DISPLAY_NAME" \ --description="WIP_DESCRIPTION"
Per saperne di più, consulta Gestire i fornitori e i pool di identità del workload.
Crea un provider di pool di identità del workload. L'argomento
--attribute-condition
verifica che il chiamante sia un service account di corrispondenza confidenziale.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"
Concedi il ruolo di autore crittografia/decrittografia delle chiavi al fornitore del 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"
Criptare i dati
La crittografia nell'API Data Manager richiede una chiave di crittografia dei dati (DEK). Una DEK è una chiave simmetrica che utilizzi per criptare i dati. La DEK viene criptata utilizzando la chiave Google Cloud KMS. Invii la DEK criptata nell'ambito della richiesta.
Per preparare i dati nella richiesta di crittografia, segui le stesse linee guida per la formattazione e l'hashing che utilizzeresti per i dati non criptati.
Non criptare i valori non sottoposti ad hashing. Ad esempio, il region_code
o il postal_code
di un AddressInfo
.
Una volta formattati e sottoposti ad hashing i dati di ogni campo, cripta il valore sottoposto ad hashing seguendo questi passaggi:
- Codifica i byte dell'hash utilizzando la codifica Base64.
- Cripta l'hash con codifica Base64 utilizzando la DEK.
- Codifica l'output del processo di crittografia utilizzando la codifica esadecimale o Base64.
- Utilizza il valore codificato per il campo.
- Imposta
encryption_info
eencoding
nella richiesta.
Per completare l'ultimo passaggio, modifica
IngestAudienceMembersRequest
o
IngestEventsRequest
per indicare che hai criptato
i tuoi dati:
- Imposta il campo
encryption_info
. - Imposta il campo
encoding
sulla codifica utilizzata per codificare i valori dei campi criptati.
Ecco uno snippet di una richiesta con i campi di crittografia e codifica impostati:
{
...
"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"
}
Per utilizzare la libreria e
le utilità dell'API Data Manager per creare e inviare una richiesta,
consulta l'esempio di codice IngestAudienceMembersWithEncryption
per Java o l'esempio di codice
ingest_audience_members_with_encryption
per Python.