繁体   English   中英

AWS Lambda 仅使用 API 网关从 S3 访问

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM