[英]AWS Lambda Access from S3 Only with API Gateway
我想要完成的是允许 lambda function 由来自指定 S3 存储桶的请求执行。 API 网关用于与 lambda 功能进行通信。 我只需要允许使用基于 S3 存储桶的端点。
我可以设置 CORS,但这不是我打算做的。 我需要的不仅仅是浏览器安全性。 我所有允许的请求必须仅来自 S3 存储桶。 如何在 API 网关中创建这样的策略或验证? 或者有没有其他方法可以完成这个任务?
我现在解释更多。 所以认为我有一个 S3 存储桶,它有一个 static 网站。 我还有一个 lambda function。 现在我的网站想要加载一些数据,所以我使用我的 API 网关调用 lambda function。 API 现已开放。 没有身份验证或 CORS。 如果请求仅来自特定的 S3 存储桶,我需要我的 API 网关来允许请求。 我们不希望 API 只是打开。 现在 CORS 只是浏览器安全,所以我们想要的不止这些。 我已经为这个特定的用例搜索了很多,但找不到任何东西。
S3 不是“调用”其他服务的服务,例如 Lambda 或 API 网关。
我相信您正在寻找的是利用 S3 事件,在这种情况下,来自 S3 的事件(如 object 创建)可以触发 lambda 执行。 请参阅此处: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html
我想限制世界使用 lambda 但只允许从我的 S3 访问它。 我再次使用 API 网关进行通信。
Since you want to restrict the world from accessing your lambda function, basically you need to place your AWS Lambda
within a VPC
and make your API Gateway
private . The API Gateway
will need to have a resource policy which is a JSON
object specifying the VPC
(or set of IP addresses) that has access to the AWS Lambda
. 任何超出VPC
范围的请求都将被API Gateway
阻止。
创建VPC
将此VPC
分配给您的 lambda function
使用以下S3 policy
创建IAM
角色以指定哪个存储桶可以访问您的 lambda function。 将此角色附加到您的 lambda function。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::your-s3-bucket/*", "arn:aws:s3:::your-s3-bucket" ] } ] }
您需要将API Gateway
私有(您将在设置中找到此选项)并为其分配资源策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:{region}:{accountId}:{api-id}/*/*/*", "Condition": { "StringEquals": { "aws:sourceVpc": "vpc-1234" } } } ] }
进行这些更改后,不要忘记重新部署API Gateway
。
编辑:如果您想限制S3
存储桶访问,请导航到您的存储桶,它将有一个称为Bucket Policy
的东西。 向其中添加以下示例存储桶策略(您需要根据您的用例对其进行编辑)。 此策略将拒绝存储桶访问指定VPC
之外的所有内容。
请参阅: https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies-vpc-endpoint.html :
{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "Access-to-specific-VPC-only",
"Principal": "*",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::yours3bucket",
"arn:aws:s3:::yous3bucket/*"],
"Condition": {
"StringNotEquals": {
"aws:SourceVpc": "vpc-1234"
}
}
}
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.