Apache spark AWS S3通过Spark进行跨帐户文件传输:拒绝访问目标存储桶中传输的对象

Apache spark AWS S3通过Spark进行跨帐户文件传输:拒绝访问目标存储桶中传输的对象,apache-spark,hadoop,amazon-s3,Apache Spark,Hadoop,Amazon S3,我有一个用例,我想利用Spark在两个不同AWS帐户的S3存储桶之间传输文件 我有Spark运行在不同的AWS帐户(比如帐户a)。我没有访问此AWS帐户的权限。 我有AWS帐户B,它持有源S3存储桶(S3_source_bucket),AWS帐户C持有目标S3存储桶(S3_destination_bucket) 我在帐户C(比如:CrossAccountRoleC)中创建了一个IAM角色,用于从目标S3存储桶进行读写 我已在帐户B中设置了主要IAM角色(例如:CrossAccountRoleB)

我有一个用例,我想利用Spark在两个不同AWS帐户的S3存储桶之间传输文件

我有Spark运行在不同的AWS帐户(比如帐户a)。我没有访问此AWS帐户的权限。 我有AWS帐户B,它持有源S3存储桶(S3_source_bucket),AWS帐户C持有目标S3存储桶(S3_destination_bucket)

我在帐户C(比如:CrossAccountRoleC)中创建了一个IAM角色,用于从目标S3存储桶进行读写

我已在帐户B中设置了主要IAM角色(例如:CrossAccountRoleB)

  • 在信托实体中添加帐户A的spark IAM角色
  • 向帐户B和帐户C中的S3存储桶添加读写权限
  • 添加内联策略以假定CrossAccountRoleC
在CrossAccountRoleC中将CrossAccountRoleB添加为受信任的实体

还将CrossAccountRoleB添加到S3_DESTINATION_bucket中的bucket策略中

我使用Hadoop的FileUtil.copy在源和目标S3存储桶之间传输文件。传输成功时,对复制对象的403访问被拒绝

当我指定
hadoopConfiguration.set(“fs.s3.canned.acl”,“BucketOwnerFullControl”)
时,我得到一个错误,它说“请求者无权对资源[s3 Source或Sink]执行操作[s3:GetObject、s3:PutObject或kms:Decrypt]”。从日志中可以看出,在写入目标存储桶时,操作似乎失败了


我遗漏了什么?

您最好使用s3a每个存储桶设置,并为不同的存储桶使用不同的凭据集。不像IAM角色游戏那样“纯粹”,但因为没有人了解IAM角色或知道如何调试它们,所以它更有可能工作


(不要将IAM角色不起作用视为个人技能的失败。每个人都担心与之相关的支持问题)

我通过在角色定义中添加s3:PutBucketAcl解决了这个问题。