Chiffrer les paramètres de modèle à l'aide de Cloud KMS

Cette page explique comment chiffrer des données sensibles dans les paramètres de modèle fournis par Google, à l'aide de clés de chiffrement avec Cloud KMS.

Présentation

Certains modèles fournis par Google vous permettent de chiffrer des données sensibles dans les paramètres du modèle, tels que les noms d'utilisateur, les mots de passe, les chaînes de connexion JDBC et les clés API. Lorsque cela est possible, ces modèles incluent un paramètre permettant de spécifier la clé de chiffrement Cloud KMS, par exemple:

  • KMSEncryptionKey
  • tokenKMSEncryptionKey
  • apiKeyKMSEncryptionKey

Pour utiliser des clés de chiffrement Cloud KMS avec ces modèles, procédez comme suit:

  1. Accordez au compte de service de nœud de travail Dataflow le rôle Déchiffreur de CryptoKey Cloud KMS.
  2. Créez une clé de chiffrement.
  3. Utilisez la clé pour chiffrer les données.
  4. Encodez les données chiffrées en base64.
  5. Lorsque vous exécutez le modèle, spécifiez la clé de chiffrement et utilisez les valeurs de paramètre chiffrées.

Si vous spécifiez une clé de chiffrement, vous devez chiffrer tous les paramètres compatibles avec le chiffrement. Pour savoir quels paramètres peuvent être chiffrés, consultez la documentation du modèle spécifique.

Exemple

L'exemple suivant utilise le modèle MySQL vers BigQuery.

  1. Créer un trousseau de clés.

    gcloud kms keyrings create "KEY_RING_NAME" \
     --location "global"
    
  2. Créez une clé de chiffrement.

    gcloud kms keys create "KEY_NAME" \
     --location "global" \
     --keyring "KEY_RING_NAME" \
     --purpose "encryption"
    
  3. Chiffrez et encodez en Base64 le nom d'utilisateur, le mot de passe et la chaîne de connexion 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. Exécutez le modèle.

    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
    

Dépannage

Cette section contient des informations de dépannage pour le chiffrement des paramètres de modèle.

Autorisation refusée

Lorsque vous exécutez la tâche, une erreur PERMISSION_DENIED s'affiche dans les journaux de la tâche, semblable à celle-ci:

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

Pour déchiffrer les données, le compte de service de nœud de calcul Dataflow doit disposer de l'autorisation cloudkms.cryptoKeyVersions.useToDecrypt pour la clé de chiffrement. Assurez-vous que le compte de service du worker dispose du rôle Déchiffreur de CryptoKey Cloud KMS. Pour en savoir plus, consultez la section Sécurité et autorisations pour Dataflow.

Étape suivante