Encripte os parâmetros de modelos através do Cloud KMS

Esta página explica como encriptar dados confidenciais em parâmetros de modelos fornecidos pela Google, usando chaves de encriptação com o Cloud KMS.

Vista geral

Alguns modelos fornecidos pela Google permitem-lhe encriptar dados confidenciais nos parâmetros do modelo, como nomes de utilizador, palavras-passe, strings de ligação JDBC e chaves de API. Quando suportados, estes modelos incluem um parâmetro para especificar a chave de encriptação do Cloud KMS, como:

  • KMSEncryptionKey
  • tokenKMSEncryptionKey
  • apiKeyKMSEncryptionKey

Para usar chaves de encriptação do Cloud KMS com estes modelos, siga os passos seguintes:

  1. Conceda à conta de serviço do trabalhador do Dataflow a função desencriptador de CryptoKey do Cloud KMS.
  2. Crie uma chave de encriptação.
  3. Use a chave para encriptar os dados.
  4. Codifique os dados encriptados em Base64.
  5. Quando executar o modelo, especifique a chave de encriptação e use os valores dos parâmetros encriptados.

Se especificar uma chave de encriptação, tem de encriptar todos os parâmetros que suportam encriptação. Para saber que parâmetros podem ser encriptados, consulte a documentação do modelo específico.

Exemplo

O exemplo seguinte usa o modelo MySQL para o BigQuery.

  1. Crie um conjunto de chaves.

    gcloud kms keyrings create "KEY_RING_NAME" \
     --location "global"
    
  2. Crie uma chave de encriptação.

    gcloud kms keys create "KEY_NAME" \
     --location "global" \
     --keyring "KEY_RING_NAME" \
     --purpose "encryption"
    
  3. Encripte e codifique em base64 o nome de utilizador, a palavra-passe e a string de ligaçã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
    

Resolução de problemas

Esta secção contém informações de resolução de problemas para encriptar parâmetros de modelos.

Autorização recusada

Quando executa a tarefa, é apresentado um erro PERMISSION_DENIED nos registos da tarefa, semelhante ao seguinte:

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

Para desencriptar os dados, a conta de serviço do trabalhador do Dataflow precisa da autorização cloudkms.cryptoKeyVersions.useToDecrypt para a chave de encriptação. Certifique-se de que a conta de serviço do trabalhador tem a função desencriptador de CryptoKey do Cloud KMS. Para mais informações, consulte o artigo Segurança e autorizações do fluxo de dados.

O que se segue?