AWS Lambda 由 PUT 触发到单独帐户中的 s3 存储桶

AWS Lambda triggered by PUT to s3 bucket in separate account

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

我尝试过的方法是在具有 s3 存储桶的帐户中设置一个角色,该角色具有 s3 存储桶的所有权限。然后在使用 Lambda 的帐户中,我扮演一个角色,在另一个帐户中扮演这样的角色:

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

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

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

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


旧答案:

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

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

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

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

  1. 向要从中调用的 lambda 函数添​​加权限 帐户-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