Crittografa i parametri del modello utilizzando Cloud KMS

Per evitare che credenziali sensibili come chiavi API e password vengano visualizzate in testo normale nelle configurazioni dei job Dataflow, puoi criptare i parametri dei modelli forniti da Google utilizzando Cloud Key Management Service (Cloud KMS). Utilizza le seguenti informazioni per criptare i valori parametro con una chiave Cloud KMS e passare il testo criptato (testi cifrati) alla pipeline.

Panoramica

Alcuni modelli forniti da Google consentono di criptare i dati sensibili nei parametri del modello, come nomi utente, password, stringhe di connessione JDBC e chiavi API. Se supportati, questi modelli includono un parametro per specificare la chiave di crittografia Cloud KMS, ad esempio:

  • KMSEncryptionKey
  • tokenKMSEncryptionKey
  • apiKeyKMSEncryptionKey

Per utilizzare le chiavi di crittografia Cloud KMS con questi modelli, segui questi passaggi:

  1. Concedi al service account worker di Dataflow il ruolo Cloud KMS CryptoKey Decrypter.
  2. Crea una chiave di crittografia.
  3. Utilizza la chiave per criptare i dati.
  4. Codifica in base64 i dati criptati.
  5. Quando esegui il template, specifica la chiave di crittografia e utilizza i valori parametro criptati.

Se specifichi una chiave di crittografia, devi criptare tutti i parametri che supportano la crittografia. Per capire quali parametri possono essere criptati, consulta la documentazione del modello specifico.

Esempio

L'esempio seguente utilizza il modello Da MySQL a BigQuery.

  1. Crea chiavi automatizzate.

    gcloud kms keyrings create "KEY_RING_NAME" \
     --location "global"
    
  2. Crea una chiave di crittografia.

    gcloud kms keys create "KEY_NAME" \
     --location "global" \
     --keyring "KEY_RING_NAME" \
     --purpose "encryption"
    
  3. Cripta e codifica in Base64 il nome utente, la password e la stringa di connessione 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. Esegui il template.

    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
    

Risoluzione dei problemi

Questa sezione contiene informazioni sulla risoluzione dei problemi relativi alla crittografia dei parametri del template.

Autorizzazione negata

Quando esegui il job, nei log del job viene visualizzato un errore PERMISSION_DENIED, simile al seguente:

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

Per decrittografare i dati, il account di servizio worker Dataflow deve disporre dell'autorizzazione cloudkms.cryptoKeyVersions.useToDecrypt per la chiave di crittografia. Assicurati che il account di servizio worker abbia il ruolo Cloud KMS CryptoKey Decrypter. Per saperne di più, consulta Sicurezza e autorizzazioni di Dataflow.

Passaggi successivi