Criptografar parâmetros de modelo usando o Cloud KMS

Nesta página, explicamos como criptografar dados sensíveis em parâmetros de modelo fornecidos pelo Google usando chaves de criptografia com o Cloud KMS.

Visão geral

Alguns modelos fornecidos pelo Google permitem criptografar dados sensíveis nos parâmetros do modelo, como nomes de usuário, senhas, strings de conexão JDBC e chaves de API. Quando houver suporte, esses modelos incluem um parâmetro para especificar a chave de criptografia do Cloud KMS, como:

  • KMSEncryptionKey
  • tokenKMSEncryptionKey
  • apiKeyKMSEncryptionKey

Para usar chaves de criptografia do Cloud KMS com esses modelos, siga estas etapas:

  1. Conceda à conta de serviço do worker do Dataflow o papel Descriptografador do Cloud KMS CryptoKey.
  2. Crie uma chave de criptografia.
  3. Use a chave para criptografar os dados.
  4. Codifique os dados criptografados em Base64.
  5. Ao executar o modelo, especifique a chave de criptografia e use os valores de parâmetro criptografados.

Se você especificar uma chave de criptografia, será necessário criptografar todos os parâmetros que ofereçam suporte à criptografia. Para entender quais parâmetros podem ser criptografados, consulte a documentação do modelo específico.

Exemplo

O exemplo a seguir usa o modelo MySQL para BigQuery.

  1. Criar um keyring

    gcloud kms keyrings create "KEY_RING_NAME" \
     --location "global"
    
  2. Crie uma chave de criptografia.

    gcloud kms keys create "KEY_NAME" \
     --location "global" \
     --keyring "KEY_RING_NAME" \
     --purpose "encryption"
    
  3. Criptografe e codifique em base64 o nome de usuário, a senha e a string de conexão 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. Execute o modelo.

    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
    

Solução de problemas

Esta seção contém informações de solução de problemas para criptografar parâmetros de modelo.

Permissão negada

Ao executar o job, você encontra um erro PERMISSION_DENIED nos registros do job, semelhante a este:

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

Para descriptografar os dados, a conta de serviço do worker do Dataflow precisa da permissão cloudkms.cryptoKeyVersions.useToDecrypt para a chave de criptografia. Verifique se a conta de serviço do worker tem o papel de Descriptografador do CryptoKey do Cloud KMS. Para mais informações, consulte Segurança e permissões do Dataflow.

A seguir