使用服务帐户和 IAM 角色管理 dataproc 集群访问

manage dataproc cluster access using service account and IAM roles

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

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

现在我创建了两个名为

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

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

我想我必须去编辑我的存储桶权限,如给定的 link 所示。 Edit Bucket Permission

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

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

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

以及需要为给定的特定存储桶添加哪些 read/write 权限,我认为必须通过添加成员并为其分配正确的权限来配置。 (如上文link所示)

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

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

如果我遗漏了什么或可以做更好的事情,也请告诉我。

根据 Dataproc IAM doc:

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,您可以按照 here 中的说明进行操作。但在这种情况下,您必须在工作节点之间分发服务帐户密钥或将其放入 GCS/HDFS.