【问题标题】:credentials used by google cloud dataflow谷歌云数据流使用的凭据
【发布时间】:2016-03-09 02:33:08
【问题描述】:

目前对数据流使用的凭据/配置有些混淆...

从我的实验来看,数据流似乎总是使用默认配置而不是活动配置。那是对的吗? (例如,在我的gcloud config 中,如果我的项目 A 有默认配置,而我的活动配置在项目 B 上,似乎我的数据流作业将始终提交给项目 A。同样以这种方式,数据流作业似乎是忽略options.setProject() 中设置的内容,所以有点想知道数据流何时再次使用options.getProject()...?)

还想知道我是否可以通过任何方式提交具有自定义配置的数据流作业,比如我想在同一运行中将多个作业提交到具有不同凭据的不同项目(无需手动更改我的gcloud config)?

顺便说一句,我正在数据流服务云平台上运行数据流作业,但如果会有所作为,请从非 gce 云服务帐户提交作业。

【问题讨论】:

    标签: google-cloud-dataflow


    【解决方案1】:

    默认情况下,Google Cloud Dataflow 使用 application default credentials 库来获取未指定的凭据。该库目前仅支持使用 gcloud 默认配置获取凭据。同样,对于该项目,Google Cloud Dataflow 使用 gcloud 默认配置。

    为了能够使用不同的项目运行作业,可以在命令行上手动指定(例如--project=myProject,如果使用PipelineOptionsFactory.fromArgs)或使用GcpOptions.setProject 显式设置选项。

    为了能够使用不同的凭据运行作业,可以构造一个credentials 对象并可以使用GcpOptions.setGcpCredential 显式设置它,或者可以依赖使用application default credentials 库支持自动生成凭据对象的方式与 Google Cloud Dataflow 相关联。一个示例是使用环境变量GOOGLE_APPLICATION_CREDENTIALS,如here 所述。

    【讨论】:

    • 您好 Lukasz,感谢您的详细解答!不确定我是否理解正确,所以只想确定:如果我在默认配置和GcpOptions 中都设置了项目,我的管道将在哪个项目中运行,在这种情况下又会出现什么预期行为?
    • 在各种选项类上设置的值只有在未设置时才会被推断。因此,您在 GcpOptions 上设置的任何值都将被接受,并且项目的默认配置将被忽略。请注意,如果您只设置项目,凭据仍会从默认配置中推断出来。
    • 嗨@LukaszCwik 我刚刚尝试使用 GcpOptions.setGcpCredential 方法从服务帐户设置凭据。 options.setGcpCredential(ServiceAccountCredentials.fromStream(new FileInputStream("key.json"))); options.setServiceAccount("xxx@yyy.iam.gserviceaccount.com"); 这样做时,我被要求指定范围。我不能只使用此服务帐户有权访问的范围吗?也许我在这里混淆了范围和权限。每当我启动并运行它时,我都可以将其添加为答案,或者您可以添加此代码:)
    • 范围先于 IAM 帐户,并且需要指定,直到所有 Google 服务都支持 IAM。最好的办法是使用与 Dataflow 在此处定义的相同范围:github.com/apache/beam/blob/…
    • 太棒了,这对我有用@LukaszCwik。我将添加我的代码作为将来参考的答案,希望它可以帮助人们:)
    【解决方案2】:

    我曾经让 Dataflow 使用我们想要的服务帐户填充其工作人员的代码(除了上面 Lukas 的回答):

    final List<String> SCOPES = Arrays.asList(
          "https://www.googleapis.com/auth/cloud-platform",
          "https://www.googleapis.com/auth/devstorage.full_control",
          "https://www.googleapis.com/auth/userinfo.email",
          "https://www.googleapis.com/auth/datastore",
          "https://www.googleapis.com/auth/pubsub");
    options.setGcpCredential(ServiceAccountCredentials.fromStream(new FileInputStream("key.json")).createScoped(SCOPES));
    options.setServiceAccount("xxx@yyy.iam.gserviceaccount.com");
    

    【讨论】:

    • 正是我想要的。花了很长时间才找到这个。不知道为什么没有足够好的记录
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多