簡體   English   中英

AWS CloudFront 使用查詢字符串返回拒絕來自 S3 源的訪問

[英]AWS CloudFront Returns Access Denied from S3 Origin with Query String

我已經設置了一個 CloudFront 分配和一個 Lambda@Edge 函數,如本文所述:

https://aws.amazon.com/blogs/networking-and-content-delivery/resizing-images-with-amazon-cloudfront-lambdaedge-aws-cdn-blog/

我現在想將 S3 存儲桶限制為私有,並且只允許 CloudFront 分配訪問該存儲桶。 我已將 Origin Access Identity 添加到 S3 Origin 配置,並更新了存儲桶策略以允許此 OAI GetObject 訪問存儲桶。 我已從存儲桶策略中刪除了使其公開可讀的語句,並將 ACL 更改為私有。 如果我在對 CloudFront 的請求中不包含任何查詢字符串參數,則圖像將按預期返回,並且無法直接訪問 S3 鏈接。

但是,該解決方案依賴於傳入查詢參數來動態調整圖像大小(通過 2 個 Lambda@Edge 函數),並且在將存儲桶設為私有后,我會收到來自 CloudFront 的拒絕訪問 403 響應。

我嘗試禁用沒有效果的查詢字符串的轉發。 我還嘗試僅更新存儲桶策略以刪除公共讀取訪問權限,並將 ACL 保留為 PublicRead 並且它起作用了。 所以這讓我覺得 ACL 設置為私有有問題

我想知道當存儲桶設為私有時,S3 是否會返回 403 而不是 404? 但是后來我不明白為什么添加列入白名單的查詢字符串參數會產生與沒有查詢字符串的相同圖像的請求不同的結果

更新

工作 URL 示例: http://<my_distro>.cloudfront.net/images/house.jpeg

損壞的 URL 示例: http://<my_distro>.cloudfront.net/images/house.jpeg?size=1200

經過調查發現,如果存儲桶是私有的,那么如果存儲桶中不存在對象,則 S3 將返回 403 而不是 404,這從安全的角度來看是有意義的(防止對象枚舉等)。

當查詢字符串存在時,來自博客文章的 Lambda 中的查看器請求代碼轉換了圖像 url。 如果此圖像不存在,它會即時生成。 博客文章中的原始響應函數正在檢查 404 狀態以觸發圖像大小調整。 但是,當存儲桶設為私有時,響應為 403,因此 Lambda@Edge 只是轉發響應。 解決方法是處理 403 或公開存儲桶。 我和前者一起去了

Lambda@Edge 通過特殊用戶與 s3 配合使用。 因此,您必須在 s3 存儲桶策略中添加規則,如下所示:

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXX"
            },
            "Action": [
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::xxx/*"
        },
        {
            "Sid": "2",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXX"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::xxxx"
        }
    ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM