首页 > 解决方案 > 使用服务帐号和 IAM 角色管理 dataproc 集群访问

问题描述

我是云初学者,我想限制我对项目中dataproc cluster给定gcs buckets的访问权限。

可以说我创建了一个service account命名为'data-proc-service-account@my-cloud-project.iam.gserviceaccount.com' ,然后我创建了一个 dataproc 集群并为其分配了服务帐户。

现在我创建了两个名为的 gcs 存储桶

'gs://my-test-bucket/spark-input-files/'
'gs://my-test-bucket/spark-output-files/'

这些存储桶包含一些输入文件,这些文件需要由运行在我的 dataproc 集群上的 spark 作业访问,并且还充当我的 spark 作业可以写入一些输出文件的位置。

我想我必须去编辑我的存储桶权限,如给定链接所示。 编辑存储桶权限

我希望我的 spark 作业只能从这个特定的存储桶中读取文件'gs://my-test-bucket/spark-input-files/'。如果他们正在写入 gcs 存储桶,他们只能写入''gs://my-test-bucket/spark-output-files/'

这里的问题是:(很可能是与SRE资源相关的问题)

需要 data-proc-service-account@my-cloud-project.iam.gserviceaccount.comIAM控制台页面上将所有 IAM 权限添加到我的数据处理服务帐户中。

以及需要为给定的特定存储桶添加哪些所有读/写权限,我认为必须通过添加成员并为其分配正确的权限来配置。(如上面提到的链接所示)

我是否需要将我的数据处理服务帐户添加为成员,并且可以在这两个角色下面添加。这行得通吗?

Storage Object Creator  for bucket 'gs://my-test-bucket/spark-output-files/
Storage Object Viewer   for bucket 'gs://my-test-bucket/spark-input-files/'

如果我错过了任何事情或者可以做更好的事情,也请告诉我。

标签: apache-sparkgoogle-cloud-platformgoogle-cloud-storagegoogle-cloud-dataprocsre

解决方案


根据Dataproc IAM 文档

To create a cluster with a user-specified service account, the specified service
account must have all permissions granted by the Dataproc Worker role. Additional
roles may be required depending on configured features.

dataproc.worker角色具有与 GCS 相关的权限列表,包括storage.objects.getstorage.objects.create. 这些适用于任何存储桶。

您想要做的是为您的服务帐户提供几乎相同的dataproc.worker角色权限,但限制storage.xxx.xxx对 Dataproc 暂存存储桶的所有权限。然后,添加对输出存储桶的写入访问权限和对输入存储桶的读取访问权限。

或者,您可以在运行 Spark 作业时使用与 Dataproc 服务帐号不同的服务帐号。此作业特定服务帐户只需要对输入存储桶的读取权限和对输出存储桶的写入权限。假设您使用 GCS 连接器(预装在 Dataproc 集群上)来访问 GCS,您可以按照此处的说明进行操作。但在这种情况下,您必须在工作节点之间分发服务帐户密钥或将其放在 GCS/HDFS 中。


推荐阅读