【问题标题】:I want my lambda code to directly upload files into an Amazon S3 bucket of a different account我希望我的 lambda 代码直接将文件上传到不同账户的 Amazon S3 存储桶
【发布时间】:2021-09-07 21:55:34
【问题描述】:

所以我有一个触发 Amazon SageMaker 处理作业的 lambda 函数,该作业当前将一些文件写入我的 Amazon S3 存储桶。我已经提到了我的 output_uri ='s3://outputbucket-in-my-acc/' 现在我希望将相同的文件直接上传到不同的 AWS 账户,而不是在我的账户中。我如何实现这一目标?我不希望在我的帐户中存储文件的任何痕迹。

我在这里找到了类似的解决方案,但这会将文件复制到不同的帐户中,而原始文件仍存在于源帐户中: AWS Lambda put data to cross account s3 bucket

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda amazon-iam amazon-sagemaker


    【解决方案1】:

    您的 Lambda 函数(账户 A)需要在另一个有权写入 s3 位置的账户(账户 B)中担任角色。为此,您需要在具有跨账户角色的账户之间建立信任。

    之后,您从您的 Lambda 函数代码中担任账户 B 中的角色并执行 S3 命令。

    在此处查找 boto3 示例:https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-assume-iam-role/

    【讨论】:

    • 好的,假设我正确地遵循了这些步骤。之后,当我提到 - output_uri ='s3://outputbucket-in-ACCOUNT-B/' 时,文件会直接上传到 ACC B 的 s3 存储桶吗?
    • 是的。 S3 存储桶名称是全球唯一的。如果您写信给s3://outputbucket-in-ACCOUNT-B/,那么文件将在拥有该存储桶的帐户中。
    • 您也可以使用存储桶策略执行此操作并直接写入文件,但这会增加对象所有权的复杂性
    • 当您从 lambda 上传文件时,它会开箱即用。当您从 sagemaker 上传文件时,您需要弄清楚如何从那里在另一个帐户中担任此角色。我不熟悉处理作业,但如果它类似于 sagemaker 笔记本,您可以使用相同的 python 代码来承担角色。
    • 那么,我的 lambda 函数应该承担资源共享的角色还是 lambda 函数?将文件写入输出 s3 存储桶的绝对是 sagemaker 作业,但所有这些都发生在 lambda 函数中,我不是手动启动 sm 作业。
    【解决方案2】:

    用于创建作业的 SageMaker API 通常(总是?)包含一个 RoleARN,它将是 SageMaker 代入代表您工作的 IAM 角色。 IAM role 必须具有必要的权限,以便 Amazon SageMaker 能够成功完成其任务(例如,具有相关 S3 存储桶的 PutObject 权限)并且必须具有允许 SageMaker 服务 (sagemaker.amazonaws.com) 承担的必要信任策略角色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-28
      • 2014-04-05
      • 2018-04-04
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      • 2020-10-10
      • 2020-03-14
      相关资源
      最近更新 更多