Google Cloud Platform - поток данных не расшифровывает данные с помощью ключа KMS - PullRequest
1 голос
/ 29 апреля 2020

У меня есть задание Dataflow, написанное с использованием Apache Beam. Он похож на этот шаблон, но сохраняет данные из JDB C в облачное хранилище:

https://github.com/GoogleCloudPlatform/DataflowTemplates/blob/master/src/main/java/com/google/cloud/teleport/templates/JdbcToBigQuery.java

Моя проблема была в том, что все могли видеть базу данных учетные данные в интерфейсе Dataflow. Поэтому я нашел статью

https://medium.com/google-cloud/using-google-cloud-key-management-service-with-dataflow-templates-71924f0f841f

, где сообщество показывает, как зашифровать эти данные. Я сделал все, как в этой статье, но мое задание Dataflow не хочет расшифровывать учетные данные с указанным ключом KMS (когда я запускаю его с помощью функции Cloud).

Поэтому я попытался запустить его в Cloud Shell

gcloud dataflow jobs run JOB_NAME \
--region=us-west1 \
--gcs-location=TEMPLATE_LOCATION \
--dataflow-kms-key=projects/PROJECT_ID/locations/us-west1/keyRings/KEY_RING/cryptoKeys/KEY_NAME \
--parameters=...,KMSEncryptionKey=projects/PROJECT_ID/locations/us-west1/keyRings/KEY_RING/cryptoKeys/KEY_NAME,...

Но у меня ошибка

Error message from worker: java.lang.RuntimeException: org.apache.beam.sdk.util.UserCodeException: com.google.api.gax.rpc.PermissionDeniedException: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Permission 'cloudkms.cryptoKeyVersions.useToDecrypt' denied on resource 'projects/PROJECT_ID/locations/us-west1/keyRings/KEY_RING/cryptoKeys/KEY_NAME' (or it may not exist).

Я застрял полностью. Кто-нибудь имел такую ​​же проблему и мог бы помочь?

1 Ответ

1 голос
/ 29 апреля 2020

Необходимо убедиться, что вы присвоили роль Cloud KMS CryptoKey Encrypter / Decrypter учетной записи службы Dataflow, а также учетной записи службы Compute Engine.

См. Этот документ, Управление ключами облака Ключ шифрования службы (Cloud KMS) с потоком данных

При использовании функций Cloud может также потребоваться назначить учетной записи службы агента службы облачных функций разрешения на шифрование и расшифровывать с помощью KMS.

Убедитесь, что пользователь, вызывающий методы шифрования и дешифрования, выполняет роль clAssign Cloud KMS CryptoKey Encrypter / Decrypter для службы Dataflow account.oudkms.cryptoKeyVersions.useToEncrypt и cloudkms.cryptoKey Разрешения .useToDecrypt для ключа, используемого для шифрования или дешифрования.

Один из способов разрешить пользователю шифровать или дешифровать - добавить пользователя в role / cloudkms.cryptoKeyEncrypter, role / cloudkms.cryptoKeyDecrypter или role / cloudkms.cryptoKeyEncrypterDec rypter

Также убедитесь, что переданные параметры верны;

PYTHON

python -m apache_beam.examples.wordcount \
  --input gs://dataflow-samples/shakespeare/kinglear.txt \
  --output gs://STORAGE_BUCKET/counts \
  --runner DataflowRunner \
  --project PROJECT_ID \
  --temp_location gs://STORAGE_BUCKET/tmp/ \
  --dataflow_kms_key=KMS_KEY

JAVA

mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
  -Dexec.args="--inputFile=gs://dataflow-samples/shakespeare/kinglear.txt \
               --output=gs://STORAGE_BUCKET/counts \
               --runner=DataflowRunner --project=PROJECT_ID \
               --gcpTempLocation=gs://STORAGE_BUCKET/tmp \
               --dataflowKmsKey=KMS_KEY"
  -Pdataflow-runner

Задание параметров выполнения конвейера

...