Amazon-Web-Services

嘗試將別名目標從 Route 53 設置為 S3 時沒有可用的目標

  • November 7, 2019

我正在嘗試設置一個簡單的基於 Amazon AWS S3 的網站,如此所述。

我已經設置了 S3 儲存桶(simples3websitetest.com),給了它(希望)正確的權限:

{
   "Version": "2012-10-17",
   "Statement": [
       {
           "Sid": "AddPerm",
           "Effect": "Allow",
           "Principal": {
               "AWS": "*"
           },
           "Action": [
               "s3:GetObject"
           ],
           "Resource": [
               "arn:aws:s3:::simples3websitetest.com/*"
           ]
       }
   ]
}

我上傳了 index.html,設置了網站訪問,可以通過http://simples3websitetest.com.s3-website-us-west-2.amazonaws.com/index.html訪問

到目前為止一切順利,現在我想設置 Amazon Route53 訪問,這就是我卡住的地方。

我已經在我擁有的域(resourcesbox.net)上設置了一個託管區域,然後點擊“創建記錄集”,然後進入“設置別名”步驟,但是當我在 S3 網站端點下得到“無可用目標”時嘗試設置別名目標。

我錯過了什麼??

您創建的 A 記錄別名必須與儲存桶的名稱相同,因為 S3 中儲存桶的虛擬託管要求Host:瀏覽器發送的標頭與儲存桶名稱匹配。實際上並沒有另一種實用的方法可以實現儲存桶的虛擬託管……儲存桶必須通過某種機制來辨識,而這種機制就是 http 標頭。

為了在“example.com”域中為儲存桶創建別名,儲存桶名稱還必須是您可以在該域中合法聲明的主機名……Route 53 A-Record“testbucket.example .com”,例如,只能別名為名為“testbucket.example.com”的儲存桶……而不是其他儲存桶。

在你的問題中,你打破了這個約束……但你只能在“simples3websitetest.com”域內部(和頂點)創建一個名為“simples3websitetest.com”的儲存桶的別名。

這是設計使然,並不完全是 Route 53 或 S3 的限制。他們只是阻止你做一些不可能工作的事情。Web 伺服器不知道任何別名或 CNAME 或 DNS 中所做的任何其他事情——它們只接收瀏覽器認為它正在嘗試連接的原始主機名,在瀏覽器發送的 http 標頭中……並且 S3 使用這個資訊以辨識虛擬託管請求應用到的儲存桶的名稱。

Amazon S3 要求您為儲存桶提供與域相同的名稱。這樣當使用者從您的網站請求內容時,Amazon S3 可以正確解析 Web 瀏覽器發送的主機標頭。因此,我們建議您在付費註冊域名之前,在 Amazon S3 中為您的網站創建儲存桶。

http://docs.aws.amazon.com/gettingstarted/latest/swh/getting-started-create-bucket.html#bucket-requirements

但請注意,此限制僅適用於您未在儲存桶前使用 CloudFront 時。

使用 CloudFront,有更大的靈活性,因為Host:可以在請求傳遞到 S3 之前重寫標頭(由 CloudFront 本身)。您在 CloudFront 分配中配置“源主機”,your-bucket.s3-website-xx-yyyy-n.amazonaws.com其中 xx-yyyy-n 是創建儲存桶的 S3 的 AWS 區域。此端點顯示在每個儲存桶的 S3 控制台中。

引用自:https://serverfault.com/questions/584635