Cripta i dati utente

Ecco come inviare dati criptati nelle richieste di importazione dei membri del segmento di pubblico.

Configurare l'interfaccia a riga di comando Google Cloud

  1. Installa e inizializza l'interfaccia a riga di comando di Google Cloud.

  2. Per assicurarti che i componenti gcloud siano aggiornati, esegui il seguente comando.

    gcloud components update
    
  3. Per selezionare o creare un nuovo progetto Google Cloud e attivare Cloud Key Management Service, fai clic su Attiva Cloud KMS.

    Abilita Cloud KMS
  4. Per impostare il progetto nell'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 se vuoi utilizzare un progetto diverso per la chiave, esegui gcloud config set:

    gcloud config set project PROJECT_ID
    

Crea una chiave

Per saperne di più, consulta la documentazione di Key Management Service.

  1. Crea una chiave automatizzata.

    gcloud kms keyrings create KEY_RING_NAME \
        --location KEY_RING_LOCATION
    

    Per ulteriori informazioni, crea un mazzo di chiavi.

  2. 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, vedi Creare una chiave.

Crea un provider del pool di identità del workload

Questa sezione fornisce una breve panoramica della federazione di Workload Identity. Per ulteriori informazioni, consulta la documentazione di Workload Identity Federation.

  1. Crea un pool di identità del workload (WIP). Il valore location per il pool deve essere global.

    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.

  2. Crea un provider del pool di identità del workload. L'argomento --attribute-condition verifica che il chiamante sia un account di servizio 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"
    
  3. Concedi il ruolo di 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 utilizzata per criptare i dati. La DEK viene criptata utilizzando la chiave Google Cloud KMS. Invii il DEK criptato 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.

Dopo aver formattato e sottoposto ad hashing i dati di ciascun campo, cripta il valore sottoposto ad hashing tramite i seguenti passaggi:

  1. Codifica i byte dell'hash utilizzando la codifica Base64.
  2. Cripta l'hash codificato in Base64 utilizzando la DEK.
  3. Codifica l'output del processo di crittografia utilizzando la codifica esadecimale o Base64.
  4. Utilizza il valore codificato per il campo.
  5. Imposta encryption_info e encoding nella richiesta.

Per completare l'ultimo passaggio, modifica il valore IngestAudienceMembersRequest per indicare che hai criptato i dati:

  • Imposta il campo encryption_info.
  • Imposta il campo encoding sulla codifica utilizzata per codificare i valori del campo criptato.

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 gli strumenti 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.