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

时间:2016-04-17 22:45:39

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

我正在尝试触发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可能吗?这是正确的解决方案吗?

2 个答案:

答案 0 :(得分:10)

更新:似乎可以实现从S3实际的跨帐户触发Lambda函数。请参阅:Using Resource-Based Policies for AWS Lambda (Lambda Function Policies)

旧回答:

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

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

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

答案 1 :(得分:3)

让我们假设您的存储桶位于Account-A中,而您的lambda位于Account-B中。您实际上可以通过以下方式执行此操作:

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