Vorlagenparameter mit Cloud KMS verschlüsseln

Damit vertrauliche Anmeldedaten wie API-Schlüssel und Passwörter nicht im Nur-Text-Format in Dataflow-Jobkonfigurationen angezeigt werden, können Sie von Google bereitgestellte Vorlagenparameter mit dem Cloud Key Management Service (Cloud KMS) verschlüsseln. Verwenden Sie die folgenden Informationen, um Parameterwerte mit einem Cloud KMS-Schlüssel zu verschlüsseln und den verschlüsselten Text (Geheimtext) an Ihre Pipeline zu übergeben.

Übersicht

Mit einigen von Google bereitgestellten Vorlagen können Sie sensible Daten in den Vorlagenparametern verschlüsseln, z. B. Nutzernamen, Passwörter, JDBC-Verbindungsstrings und API-Schlüssel. Wenn diese Vorlagen unterstützt werden, enthalten sie einen Parameter zum Angeben des Cloud KMS-Verschlüsselungsschlüssels, z. B.:

  • KMSEncryptionKey
  • tokenKMSEncryptionKey
  • apiKeyKMSEncryptionKey

Führen Sie die folgenden Schritte aus, um Cloud KMS-Verschlüsselungsschlüssel mit diesen Vorlagen zu verwenden:

  1. Weisen Sie dem Worker-Dienstkonto von Dataflow die Rolle Cloud KMS CryptoKey Decrypter zu.
  2. Verschlüsselungsschlüssel erstellen
  3. Verwenden Sie den Schlüssel, um die Daten zu verschlüsseln.
  4. Codieren Sie die verschlüsselten Daten mit Base64.
  5. Geben Sie beim Ausführen der Vorlage den Verschlüsselungsschlüssel an und verwenden Sie die verschlüsselten Parameterwerte.

Wenn Sie einen Verschlüsselungsschlüssel angeben, müssen Sie alle Parameter verschlüsseln, die die Verschlüsselung unterstützen. Informationen dazu, welche Parameter verschlüsselt werden können, finden Sie in der Dokumentation zur jeweiligen Vorlage.

Beispiel

Im folgenden Beispiel wird die Vorlage MySQL für BigQuery verwendet.

  1. Schlüsselbund erstellen

    gcloud kms keyrings create "KEY_RING_NAME" \
     --location "global"
    
  2. Verschlüsselungsschlüssel erstellen

    gcloud kms keys create "KEY_NAME" \
     --location "global" \
     --keyring "KEY_RING_NAME" \
     --purpose "encryption"
    
  3. Verschlüsseln und base64-codieren Sie den Nutzernamen, das Passwort und den JDBC-Verbindungsstring.

    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. Führen Sie die Vorlage aus.

    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
    

Fehlerbehebung

Dieser Abschnitt enthält Informationen zur Fehlerbehebung beim Verschlüsseln von Vorlagenparametern.

Berechtigung verweigert

Wenn Sie den Job ausführen, wird in den Joblogs ein PERMISSION_DENIED-Fehler angezeigt, der in etwa so aussieht:

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

Zum Entschlüsseln der Daten benötigt das Dataflow-Worker-Dienstkonto die Berechtigung cloudkms.cryptoKeyVersions.useToDecrypt für den Verschlüsselungsschlüssel. Achten Sie darauf, dass das Worker-Dienstkonto die Rolle Cloud KMS CryptoKey Decrypter hat. Weitere Informationen finden Sie unter Sicherheit und Berechtigungen in Dataflow.

Nächste Schritte