Encriptar parámetros de plantilla con Cloud KMS

En esta página se explica cómo cifrar datos sensibles en parámetros de plantilla proporcionados por Google mediante claves de cifrado con Cloud KMS.

Información general

Algunas plantillas proporcionadas por Google te permiten cifrar datos sensibles en los parámetros de la plantilla, como nombres de usuario, contraseñas, cadenas de conexión JDBC y claves de API. Cuando se admiten, estas plantillas incluyen un parámetro para especificar la clave de encriptado de Cloud KMS, como:

  • KMSEncryptionKey
  • tokenKMSEncryptionKey
  • apiKeyKMSEncryptionKey

Para usar claves de cifrado de Cloud KMS con estas plantillas, sigue estos pasos:

  1. Asigna a la cuenta de servicio de los trabajadores de Dataflow el rol Encargado del desencriptado de la clave criptográfica Cloud KMS.
  2. Crea una clave de cifrado.
  3. Usa la clave para cifrar los datos.
  4. Codifica en Base64 los datos cifrados.
  5. Cuando ejecutes la plantilla, especifica la clave de cifrado y usa los valores de los parámetros cifrados.

Si especifica una clave de cifrado, debe cifrar todos los parámetros que admitan cifrado. Para saber qué parámetros se pueden cifrar, consulta la documentación de la plantilla en cuestión.

Ejemplo

En el siguiente ejemplo, se usa la plantilla MySQL a BigQuery.

  1. Crea un conjunto de claves.

    gcloud kms keyrings create "KEY_RING_NAME" \
     --location "global"
    
  2. Crea una clave de cifrado.

    gcloud kms keys create "KEY_NAME" \
     --location "global" \
     --keyring "KEY_RING_NAME" \
     --purpose "encryption"
    
  3. Cifra y codifica en Base64 el nombre de usuario, la contraseña y la cadena de conexión JDBC.

    export USER_NAME=`echo -n "USER_NAME" \
     | gcloud kms encrypt --key=quickstart --keyring=test --location=global --plaintext-file=- --ciphertext-file=- \
     | base64 -w 0`
    export PASSWORD=`echo -n "PASSWORD" \
     | gcloud kms encrypt --key=quickstart --keyring=test --location=global --plaintext-file=- --ciphertext-file=- \
     | base64 -w 0`
    export CONNECTION_STRING=`echo -n "CONNECTION_STRING" \
     | gcloud kms encrypt --key=quickstart --keyring=test --location=global --plaintext-file=- --ciphertext-file=- \
     | base64 -w 0`
    
  4. Ejecuta la plantilla.

    gcloud dataflow flex-template run mysql-job \
     --project=PROJECT_ID \
     --region=us-central1 \
     --template-file-gcs-location=gs://dataflow-templates-us-central1/latest/flex/MySQL_to_BigQuery \
     --parameters \
    connectionURL="$CONNECTION_STRING",\
    query="SOURCE_SQL_QUERY",\
    outputTable=PROJECT_ID:DATASET.TABLE_NAME,\
    bigQueryLoadingTemporaryDirectory=CLOUD_STORAGE_PATH,\
    username="$USER_NAME",\
    password="$PASSWORD",\
    KMSEncryptionKey=projects/PROJECT_ID/locations/global/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    

Solución de problemas

En esta sección se incluye información para solucionar problemas relacionados con el cifrado de parámetros de plantilla.

Permiso denegado

Cuando ejecutas el trabajo, aparece un error PERMISSION_DENIED en los registros del trabajo, similar al siguiente:

PERMISSION_DENIED: Permission cloudkms.cryptoKeyVersions.useToDecrypt denied on
resource RESOURCE_PATH (or it may not exist)

Para desencriptar los datos, la cuenta de servicio de trabajador de Dataflow necesita el permiso cloudkms.cryptoKeyVersions.useToDecrypt para la clave de cifrado. Asegúrate de que la cuenta de servicio del trabajador tenga el rol Encargado de desencriptar claves de CryptoKey de Cloud KMS. Para obtener más información, consulta Seguridad y permisos de los flujos de datos.

Siguientes pasos