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