Encripte datos del usuario

A continuación, te mostramos cómo enviar datos encriptados en las solicitudes de transferencia de miembros del público.

Configura la interfaz de línea de comandos de Google Cloud

  1. Instala y inicializa la interfaz de línea de comandos de Google Cloud.

  2. Para asegurarte de que tus componentes gcloud estén actualizados, ejecuta el siguiente comando.

    gcloud components update
    
  3. Para seleccionar o crear un proyecto de Google Cloud nuevo y habilitar el Cloud Key Management Service, haz clic en Habilitar Cloud KMS.

    Habilita Cloud KMS
  4. Para configurar tu proyecto en tu entorno, usa el comando gcloud config set. Para verificar si el proyecto ya está configurado en tu entorno, ejecuta gcloud config list.

    Si no se configuró project o si deseas usar un proyecto diferente para tu clave, ejecuta gcloud config set:

    gcloud config set project PROJECT_ID
    

Crear una clave

Para obtener más información, consulta la documentación de Key Management Service.

  1. Crea un llavero de claves.

    gcloud kms keyrings create KEY_RING_NAME \
        --location KEY_RING_LOCATION
    

    Para obtener más información, crea un llavero.

  2. Crea una clave en el llavero de claves. ROTATION_PERIOD indica el intervalo para rotar la clave, y NEXT_ROTATION_TIME indica la fecha y la hora en que debe ocurrir la primera rotación.

    Por ejemplo, para rotar la clave cada 30 días y realizar la primera rotación en 1 semana, establece ROTATION_PERIOD en 30d y NEXT_ROTATION_TIME en $(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"
    

    Para obtener más información, consulta Cómo crear una clave.

Crea un proveedor de grupos de Workload Identity

Esta sección es una breve descripción general de la federación de identidades para cargas de trabajo. Para obtener más información, consulta la documentación de la federación de identidades para cargas de trabajo.

  1. Crea un grupo de Workload Identity (en proceso). El location del grupo debe ser global.

    gcloud iam workload-identity-pools create WIP_ID \
       --location=global \
       --display-name="WIP_DISPLAY_NAME" \
       --description="WIP_DESCRIPTION"
    

    Para obtener más información, consulta Cómo administrar proveedores y grupos de identidades para cargas de trabajo.

  2. Crea un proveedor de grupos de Workload Identity. El argumento --attribute-condition verifica que el llamador sea una cuenta de servicio de coincidencia confidencial.

    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 == '_SPACE' &&
         'STABLE' in assertion.submods._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://computing.googleapis.com" \
       --allowed-audiences="https://sts.googleapis.com"
    
  3. Otorga el rol de desencriptador de claves al proveedor de 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"
    

Encripta datos

La encriptación en la API de Data Manager requiere una clave de encriptación de datos (DEK). Una DEK es una clave simétrica que usas para encriptar datos. Tu DEK se encripta con tu clave de Google Cloud KMS. Envías la DEK encriptada como parte de la solicitud.

Para preparar los datos en la solicitud de encriptación, sigue los mismos lineamientos de formato y codificación hash que usarías para los datos sin encriptar.

No encriptes valores sin codificación hash. Por ejemplo, el region_code o postal_code de un AddressInfo.

Una vez que los datos de cada campo tengan formato y se hayan generado valores hash, encripta el valor con hash siguiendo estos pasos:

  1. Codifica los bytes de hash con la codificación Base64.
  2. Encripta el hash codificado en Base64 con tu DEK.
  3. Codifica el resultado del proceso de encriptación con codificación hexadecimal o Base64.
  4. Usa el valor codificado para el campo.
  5. Establece encryption_info y encoding en la solicitud.

Para completar el último paso, modifica IngestAudienceMembersRequest para indicar que encriptaste tus datos:

  • Configura el campo encryption_info.
  • Establece el campo encoding en la codificación que se usa para codificar los valores del campo encriptado.

Este es un fragmento de una solicitud con los campos de encriptación y codificación establecidos:

{
  ...
  "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"
}

Para usar la biblioteca y las utilidades de la API de Data Manager para crear y enviar una solicitud, consulta la muestra de código IngestAudienceMembersWithEncryption para Java o la muestra de código ingest_audience_members_with_encryption para Python.