【问题标题】:How to determine service account used to run Dataflow job?如何确定用于运行 Dataflow 作业的服务帐户?
【发布时间】:2021-02-09 17:44:31
【问题描述】:

我的 Dataflow 作业在尝试访问机密时失败:

“线程“主”com.google.api.gax.rpc.PermissionDeniedException 中的异常:io.grpc.StatusRuntimeException:PERMISSION_DENIED:资源“projects/REDACTED/secrets/REDACTED/”的权限“secretmanager.versions.access”被拒绝版本/最新的'(或者它可能不存在)。”

我使用gcloud dataflow flex-template run 启动工作。我可以在控制台中查看秘密。当我在笔记本电脑上运行相同的代码时,它可以工作。据我了解,当我使用上述命令提交作业时,它在可能具有不同权限的服务帐户下运行。如何确定作业在哪个服务帐户下运行?

【问题讨论】:

    标签: google-cloud-dataflow


    【解决方案1】:

    由于 Dataflow 创建工作人员,因此他们创建实例。您可以在 Logging 上查看此内容

    • 打开 GCP 控制台
    • 打开 Logging -> Logs Explorer(确保您没有使用“Legacy Logs Viewer”)
    • 在查询生成器中输入protoPayload.serviceName="compute.googleapis.com"
    • 点击运行查询
    • 扩展v1.compute_instances.createcompute.googleapis.com 使用的任何其他资源的条目
    • 您应该能够看到用于创建实例的服务帐户。此服务帐户(红色框内)用于与运行数据流作业相关的任何事情。

    请注意,我使用 official dataflow quick start 对此进行了测试。

    【讨论】:

      【解决方案2】:

      默认情况下,数据流的工作节点使用缺少“Secret Manager Secret Accessor”权限的 compute engine default service 帐户 (YOUR_PROJECT_NUMBER-compute@developer.gserviceaccount.com) 运行。

      您需要将这些权限添加到服务帐户,或者您必须specify the service account in the pipeline options

      gcloud dataflow flex-template run ... --parameters service_account_email="your-service-account-name@YOUR_PROJECT_NUMBER.iam.gserviceaccount.com"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-16
        • 2021-09-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多