#google-cloud-dataflow
#google-облако-поток данных
Вопрос:
Мое задание потока данных завершается с ошибкой при попытке доступа к секрету:
«Исключение в потоке «main» com.google.api.gax.rpc.PermissionDeniedException: исключение ввода-вывода.grpc.StatusRuntimeException: PERMISSION_DENIED: разрешение’secretmanager.versions.access’ отказано для ресурса ‘проекты / ОТРЕДАКТИРОВАННЫЕ / секреты / ОТРЕДАКТИРОВАННЫЕ / версии / последние’ (или оно может не существовать)».
Я запускаю задание с помощью gcloud dataflow flex-template run
. Я могу просмотреть секрет в консоли. Тот же код работает, когда я запускаю его на своем ноутбуке. Насколько я понимаю, когда я отправляю задание с помощью приведенной выше команды, оно выполняется под учетной записью службы, которая может иметь разные разрешения. Как определить, под какой учетной записью службы выполняется задание?
Ответ №1:
Поскольку поток данных создает рабочих, они создают экземпляры. Вы можете проверить это при регистрации
- Откройте консоль GCP
- Откройте ведение журнала -> Обозреватель журналов (убедитесь, что вы не используете «Устаревший просмотрщик журналов»)
- В построителе запросов введите
protoPayload.serviceName="compute.googleapis.com"
- Нажмите кнопку Выполнить запрос
- Разверните запись для
v1.compute_instances.create
или любых других ресурсов, используемыхcompute.googleapis.com
- Вы должны иметь возможность видеть учетную запись службы, используемую для создания экземпляра. Эта учетная запись службы (выделена красным цветом) используется для всего, что связано с выполнением задания потока данных.
Обратите внимание, что я протестировал это с помощью официального быстрого запуска потока данных.
Ответ №2:
По умолчанию рабочие узлы потока данных выполняются с учетной записью службы compute engine по умолчанию ( YOUR_PROJECT_NUMBER-compute@developer.gserviceaccount.com
), не имеющей прав доступа к секретному доступу Secret Manager.
Либо вам нужно добавить эти права к учетной записи службы, либо вы должны указать учетную запись службы в параметрах конвейера:
gcloud dataflow flex-template run ... --parameters service_account_email="your-service-account-name@YOUR_PROJECT_NUMBER.iam.gserviceaccount.com"