簡體   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