【问题标题】:AWS S3 Cross-account file transfer via Spark: Getting access denied on the transferred objects in the destination bucket通过 Spark 的 AWS S3 跨账户文件传输:在目标存储桶中的传输对象上被拒绝访问
【发布时间】: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


    【解决方案1】:

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

    (不要将 IAM 角色无法发挥作用的事实视为个人技能失败。每个人都担心与他们相关的支持问题)

    【讨论】:

    • 我通过在角色定义中添加 s3:PutBucketAcl 解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 2018-05-19
    • 2019-02-03
    • 1970-01-01
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 2021-02-25
    相关资源
    最近更新 更多