【发布时间】:2021-06-07 17:03:47
【问题描述】:
我有一个用例,我想利用 Spark 在 2 个不同 AWS 账户中的 S3 存储桶之间传输文件。
我在不同的 AWS 账户(比如账户 A)中运行 Spark。我无权访问此 AWS 账户。 我有持有源 S3 存储桶 (S3_SOURCE_BUCKET) 的 AWS 账户 B 和持有目标 S3 存储桶 (S3_DESTINATION_BUCKET) 的 AWS 账户 C。
我在账户 C 中创建了一个 IAM 角色(例如:CrossAccountRoleC)以从目标 S3 存储桶读取和写入。
我已在账户 B 中设置了主要 IAM 角色(例如:CrossAccountRoleB)。
- 在信任实体中添加账户 A 的 spark IAM 角色
- 为账户 B 和账户 C 中的 S3 存储桶添加读写权限
- 添加内联策略以承担 CrossAccountRoleC
在 CrossAccountRoleC 中添加 CrossAccountRoleB 作为可信实体
还在 S3_DESTINATION_BUCKET 的存储桶策略中添加了 CrossAccountRoleB。
我正在使用 Hadoop 的 FileUtil.copy 在源 S3 存储桶和目标 S3 存储桶之间传输文件。传输成功时,我在复制的对象上收到 403 访问被拒绝。
当我指定 hadoopConfiguration.set("fs.s3.canned.acl", "BucketOwnerFullControl") 时,我收到一条错误消息,提示“请求者无权对资源 [s3 Source or Sink] 执行操作 [s3:GetObject、s3:PutObject 或 kms:Decrypt]” .从日志来看,写入目标存储桶时操作似乎失败了。
我错过了什么?
【问题讨论】:
标签: apache-spark hadoop amazon-s3