Para evitar que las credenciales sensibles, como las claves de API y las contraseñas, aparezcan en texto sin formato en las configuraciones de trabajos de Dataflow, puedes encriptar los parámetros de plantilla proporcionados por Google con Cloud Key Management Service (Cloud KMS). Usa la siguiente información para encriptar los valores del parámetro con una clave de Cloud KMS y pasar el texto cifrado (textos cifrados) a tu canalización.
Descripción general
Algunas plantillas proporcionadas por Google te permiten encriptar datos sensibles en los parámetros de la plantilla, como nombres de usuario, contraseñas, cadenas de conexión de JDBC y claves de API. Cuando se admiten, estas plantillas incluyen un parámetro para especificar la clave de encriptación de Cloud KMS, como la siguiente:
KMSEncryptionKeytokenKMSEncryptionKeyapiKeyKMSEncryptionKey
Para usar las claves de encriptación de Cloud KMS con estas plantillas, sigue estos pasos:
- Otorga a la cuenta de servicio de trabajador de Dataflow el rol de desencriptador de CryptoKey de Cloud KMS.
- Crea una clave de encriptación.
- Usa la clave para encriptar los datos.
- Codifica en Base64 los datos encriptados.
- Cuando ejecutes la plantilla, especifica la clave de encriptación y usa los valores de los parámetros encriptados.
Si especificas una clave de encriptación, debes encriptar todos los parámetros que admiten la encriptación. Para comprender qué parámetros se pueden encriptar, consulta la documentación de la plantilla específica.
Ejemplo
En el siguiente ejemplo, se usa la plantilla de MySQL a BigQuery.
Crea un llavero de claves.
gcloud kms keyrings create "KEY_RING_NAME" \ --location "global"Crea una clave de encriptación.
gcloud kms keys create "KEY_NAME" \ --location "global" \ --keyring "KEY_RING_NAME" \ --purpose "encryption"Encripta y codifica en Base64 el nombre de usuario, la contraseña y la cadena de conexión de 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`Ejecuta la plantilla.
gcloud dataflow flex-template run mysql-job \ --project=PROJECT_ID \ --region=us-central1 \ --template-file-gcs-location=gs://dataflow-templates/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
Soluciona problemas
En esta sección, se incluye información para solucionar problemas relacionados con la encriptación de parámetros de plantilla.
Permiso denegado
Cuando ejecutas el trabajo, ves 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 encriptación. Asegúrate de que la cuenta de servicio del trabajador tenga el rol de Desencriptador de CryptoKey de Cloud KMS. Para obtener más información, consulta Seguridad y permisos de Dataflow.
¿Qué sigue?
- Obtén más información sobre Cloud Key Management Service.
- Consulta la lista de plantillas que proporciona Google.