【问题标题】:AWS Lambda triggered by PUT to s3 bucket in separate account由 PUT 触发的 AWS Lambda 到单独账户中的 s3 存储桶
【发布时间】:2016-08-09 13:07:04
【问题描述】:

我正在尝试触发 Lambda 函数在更新到 s3 存储桶时运行。我尝试触发 Lambda 的 s3 存储桶位于单独的 AWS 账户中。

我尝试过的方法是在具有 s3 存储桶的帐户中设置一个角色,该角色拥有 s3 存储桶的所有权限。然后在使用 Lambda 的帐户中,我有一个角色,在另一个帐户中担任该角色,如下所示:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "sts:AssumeRole"
        ],
        "Resource": [
            "arn:aws:iam::..."
        ]
    }
]
}

我无法在存储桶列表中看到 s3 存储桶以触发 Lambda 事件。

是否可以在单独的账户中使用 s3 存储桶来触发 Lambda?这是正确的解决方案吗?

【问题讨论】:

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


    【解决方案1】:

    更新:看来,从 S3 跨账户触发 Lambda 函数实际上是可能的。见:Using Resource-Based Policies for AWS Lambda (Lambda Function Policies)


    旧答案:

    Amazon S3 可以在将对象添加到存储桶或从中删除对象时触发 AWS Lambda 函数。

    但是,此触发器必须在存储桶本身上设置。您将需要存储桶的所有者(或具有足够权限的人)来设置配置以触发 Lambda。

    此外,被调用的 Lambda 函数必须在与 Amazon S3 存储桶相同的账户中。您可以在一个账户中创建一个 Lambda 函数,然后调用另一个账户中的 Lambda 函数(给予足够的权限),但是账户 A 中的存储桶不可能直接触发 Account 中的 Lambda 函数B.

    【讨论】:

      【解决方案2】:

      假设您的存储桶位于 Account-A 中,而您的 lambda 在 Account-B 中。您实际上可以通过以下方式做到这一点:

      1. 为要从 账户-A S3 存储桶事件:

        aws lambda add-permission \
          --function-name MyFunction \
          --region <your-region> \
          --statement-id <whatever> \
          --action "lambda:InvokeFunction" \
          --principal s3.amazonaws.com \
          --source-arn <source-bucket-arn> \
          --source-account <Account-A-id> \
        
      2. 在 S3 的事件触发中,指定 lambda 函数的 ARN

      【讨论】:

      • 抱歉格式错误,我仍然需要改进这一点:p
      • 谢谢!效果很好。对于那些想知道在哪里可以获得 Account-A-Id 的人,它是您帐户设置中的数字 ID
      • 乐于提供帮助 :) 如果需要,您还可以在资源的 ARN 或“支持”面板中找到您的帐户 ID
      猜你喜欢
      • 2019-01-15
      • 2019-06-28
      • 2020-03-29
      • 2022-01-07
      • 1970-01-01
      • 2020-01-18
      • 2017-07-21
      • 2021-03-28
      • 2020-07-05
      相关资源
      最近更新 更多