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 中。您实际上可以通过以下方式做到这一点:
向要从中调用的 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> \
在S3的事件触发中,指定你的lambda函数的ARN
我正在尝试在更新到 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 中。您实际上可以通过以下方式做到这一点:
向要从中调用的 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> \
在S3的事件触发中,指定你的lambda函数的ARN