【问题标题】:Google Dataflow can write to anywhere without permissionGoogle Dataflow 可以在未经许可的情况下写入任何地方
【发布时间】:2020-01-06 06:20:09
【问题描述】:

我创建了一个服务帐号,并将 Dataflow 开发人员角色、Compute Viewer 角色和 Storage Object Admin 角色分配给临时存储桶。然后,我使用名为 gs://outputbucket 的管理员用户帐户(具有项目所有者角色)创建了另一个存储桶。最后,我使用以下 cmd 提交了一个数据流作业:

export GOOGLE_APPLICATION_CREDENRTIALS=<path-to-credential>
TMPBUCKET=temporarybucket
OUTBUCKET=outputbucket
PROJECT=myprojectid

python -m apache_beam.examples.wordcount \
  --input gs://dataflow-samples/shakespeare/kinglear.txt \
  --output gs://$OUTBUCKET/wordcount/outputs \
  --runner DataflowRunner \
  --project $PROJECT \
  --temp_location gs://$TMPBUCKET/tmp/

同样,我创建了一个从现有 Cloud Pub/Sub 到 BigQuery 模板的 Dataflow 作业。它可以在未经许可的情况下写入同一项目中的任何表。谁能解释这怎么可能?

此外,根据 Google 的Principle of Least Privilege,这是否是一个潜在的安全问题?


【问题讨论】:

  • 在您的代码示例中,您是否使用新的服务帐户来运行数据流?
  • 我将环境变量 GOOGLE_APPLICATIONS_CREDENRTIALS 设置为服务帐户 cred json 文件的路径,我将其更新为命令行。

标签: google-cloud-platform dataflow


【解决方案1】:

您用于此命令的服务帐户

export GOOGLE_APPLICATIONS_CREDENRTIALS=<path-to-credential>

用于创建 Dataflow 管道,但管道工作人员不使用它。

为此,您必须在管道选项中添加服务帐户电子邮件,如here 所述。如果不是,则使用的是计算引擎服务帐户。

【讨论】:

  • 我想我还从 GCP 中找到了一个名为 service controller account 的新概念。简而言之,当尝试运行作业时,如果--service_account_email=account@name.com 未指定,GCP 将使用默认为项目创建的默认service controller account。我看到我的问题的原因是,默认帐户分配了项目编辑角色。见:cloud.google.com/dataflow/docs/concepts/…
  • 是的,默认服务帐户是计算服务帐户(如我的回答中所述),它具有此模式&lt;PROJECT_NUMBER&gt;-compute@developer.gserviceaccount.com
【解决方案2】:

这取决于您用于运行作业的服务帐户或用户(我猜)

根据 Google 文档,Dataflow Controller Service Account,默认情况下,工作人员使用您项目的 Compute Engine 服务帐户作为控制器服务帐户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 2020-10-09
    相关资源
    最近更新 更多