[英]how to configure s3 bucket to allow aws application load balancer (not class) use it? currently throws' access denied'
[英]How to configure AWS S3 to allow POST to work like GET
Facebook 在其畫布設置文檔中聲明:
我們的服務器將向該網址發出 HTTP POST 請求。 檢索到的結果將顯示在 Facebook 的 Canvas 框架內。
我的應用程序作為靜態網站托管在 AWS S3 上,使用以下 CORS 配置:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
我已經在這里遇到了問題。 GET
請求工作正常,但POST
到http://my-bucket-name.s3-website-us-east-1.amazonaws.com 會反彈:
<html>
<head>
<title>405 Method Not Allowed</title>
</head>
<body>
<h1>405 Method Not Allowed</h1>
<ul>
<li>Code: MethodNotAllowed</li>
<li>Message: The specified method is not allowed against this resource.</li>
<li>Method: POST</li>
<li>ResourceType: OBJECT</li>
<li>RequestId: 94159551A72424C7</li>
<li>HostId: +Lcz+XaAzL97Y47OZFvaTwqz4Z7r5koaJGHjZJBBMOTUHyThTfKbZG6IxJtYEbtsXWcb/bFxeI8=</li>
</ul>
<hr/>
</body>
</html>
第 1 步:^ 我想我需要讓它發揮作用。
但是等等,還有更多
Facebook 還需要一個安全的網址。 所以為此,我去了cloudfront。
我的配置是這樣的:
就像直接使用 S3 時一樣,向https://app-cloudfront-id.cloudfront.net/發出GET
請求就像冠軍一樣,POSTing 會反擊:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>MethodNotAllowed</Code>
<Message>The specified method is not allowed against this resource.</Message>
<Method>POST</Method>
<ResourceType>OBJECT</ResourceType>
<RequestId>657E87A80AFBB3B0</RequestId>
<HostId>SY2g4smvhr06kAAQYVMsYeQZ+pSKbIIvsh/OaPBiMADGt5UKut0sXSZkFsnFmcRXQ2PFBVgPK4M=</HostId>
</Error>
在 facebook.com 上查看該應用程序顯示:
我錯過了什么嗎?
所以 - 我也認為這應該很容易並且在 2016 年得到 AWS 的良好支持。顯然,從我所做的所有閱讀來看,我們錯了。
沒有辦法從 s3 為 facebook 應用程序提供索引頁面 - 無論是否有 cloudfront。
可能可以通過 cloudfront 和 s3 的其他所有內容從備用來源(即,您自己的 httpd 在某處運行)提供索引頁面 - 但我還沒有嘗試深入研究那個兔子洞。 如果您仍然必須運行自己的 HA httpd...根據您的資產規模,復雜性可能不值得。 即http://www.bucketexplorer.com/documentation/cloudfront--how-to-create-distributions-post-distribution-with-multiple-origin-servers.html
你 - 可以 - 在你自己的源 httpd 前面使用 cloudfront 來提供靜態內容以利用緩存和邊緣分布 - 它只會將 POST(和 PUT 等)轉發到你的源並繞過緩存邊緣。
這些答案是舊的,大約在 2011 年,但我找不到任何證據表明任何事情都發生了變化。
https://forums.aws.amazon.com/thread.jspa?messageID=228988𷹼
https://forums.aws.amazon.com/thread.jspa?threadID=62525
希望我們可以在此線程上進行一些活動以證明我錯了,我現在也可以使用它。
我有一個類似的情況,使用單頁 JS 應用程序,其中所有未解決的請求通常應該處理主頁面/index.html
。
潛在的問題是 S3 不會像 GET 一樣對待 POST。 POST 是一個修改請求。 有一種方法可以配置 S3 來處理 POST,但它用於 S3 修改,而不是像 GET 這樣的只讀請求。
為了處理 POST 請求,我創建了一個 AWS CloudFront 行為,它使用 200 HTTP 響應代碼將錯誤重定向回/index.html
。 這樣 POST 請求將轉到主頁,並通過應用程序進行管理。 我對 403 和 404 錯誤做了同樣的事情。
編輯 CloudFront 分配,轉到錯誤頁面,並創建 3 個不同的自定義錯誤響應,如上所示。
僅供參考,您可以通過 CloudFront 輕松添加動態端,避免所有 CORS 問題。 CloudFront 可以通過行為混合靜態和動態內容。
嘗試將頁面創建為 Lambda 函數的響應對象,並使用 ApiGateway 創建一個路由來處理頁面處理。
將靜態內容保留在 S3、CloudFront 以提供 SSL 支持和 Lambda 以進行任何動態頁面處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.