【发布时间】:2021-12-18 10:13:13
【问题描述】:
我的集群配置为使用 ROLE_B,这使我可以访问 BUCKET_IN_ACCOUNT_B,但不能访问 BUCKET_IN_ACCOUNT_A。所以我假设 XACCOUNT_ROLE 可以访问 BUCKET_IN_ACCOUNT_A。以下代码可以正常工作。
sc._jsc.hadoopConfiguration().set("fs.s3a.credentialsType", "AssumeRole")
sc._jsc.hadoopConfiguration().set("fs.s3a.stsAssumeRole.arn", XACCOUNT_ROLE)
sc._jsc.hadoopConfiguration().set("fs.s3a.acl.default", "BucketOwnerFullControl")
df = spark.read.option("multiline","true").json(BUCKET_IN_ACCOUNT_A)
但是,当我尝试将此数据帧写回 BUCKET_IN_ACCOUNT_B 如下所示时,我得到 java.nio.file.AccessDeniedException。
df.write \
.format("delta") \
.mode("append") \
.save(BUCKET_IN_ACCOUNT_B)
我认为是这种情况,因为我的 spark 集群仍然配置为使用 XACCOUNT_ROLE。我的问题是,如何切换回 ROLE_B?
sc._jsc.hadoopConfiguration().set("fs.s3a.credentialsType", "AssumeRole")
sc._jsc.hadoopConfiguration().set("fs.s3a.stsAssumeRole.arn", ROLE_B)
sc._jsc.hadoopConfiguration().set("fs.s3a.acl.default", "BucketOwnerFullControl")
没用。
【问题讨论】:
-
不确定 Databricks,但更简单的方法是请运行账户 B 的好心人将桶 B 的访问权限授予您通常使用的 IAM 角色。这样,它可以访问两个帐户中的存储桶。他们需要向存储桶 B添加存储桶策略,从账户 A 向您的 IAM 角色授予适当的权限。
标签: amazon-web-services apache-spark amazon-s3 databricks