本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
限制內容的地理分佈
您可以使用地理限制功能 (有時也稱為地理封鎖),來防止特定地理位置的使用者存取您透過 Amazon CloudFront 分佈所散發的內容。若要使用地理限制,您有兩個選擇:
-
使用 CloudFront 地理位置限制功能。使用此選項可限制對與分佈相關聯的所有檔案的存取,並限制在國家/地區層級的存取。
-
使用第三方地理位置服務。使用此選項來針對與分佈相關聯檔案的子集作限制存取,或在比國家/地區層級更細的層級作限制存取。
使用 CloudFront 地理限制
當使用者請求內容時,無論使用者身在何處,CloudFront 通常會為請求的內容提供服務。如果您需要防止特定國家/區域的使用者存取您的內容,則可以使用 CloudFront 地理限制功能執行以下其中一項內容:
-
只有當使用者位於您允許清單上其中一個核准國家/地區時,才能存取您的內容。
-
如果使用者位於您封鎖清單上的被禁國家/地區,則阻止其存取您的內容。
例如,若請求來自您未授權分配內容的國家/區域,則可以使用 CloudFront 地理限制來封鎖該請求。
注意
CloudFront 會使用第三方資料庫來判斷使用者的位置。IP 地址與國家/地區之間的映射的準確性因區域而異。根據最近的測試,整總體準確性為 99.8%。如果 CloudFront 無法判斷使用者的位置,CloudFront 會提供使用者所請求的內容。
以下是地理限制的運作方式:
-
假設您有權僅在列支敦斯登分配您的內容。您更新 CloudFront 分佈,來新增僅包含列支敦斯登的允許清單。(或者,您可以新增包含除了列支敦斯登以外的每個國家/地區的封鎖清單。)
-
摩納哥的使用者請求您的內容,而 DNS 會將請求路由到位於義大利米蘭的 CloudFront 節點。
-
米蘭的邊緣節點會查詢您的分佈,並確定摩納哥的使用者沒有下載您的內容的許可。
-
CloudFront 會將 HTTP 狀態碼
403 (Forbidden)
傳回使用者。
您可以選擇性地設定 CloudFront,向使用者傳回自訂錯誤訊息,而且也可指定您希望 CloudFront 針對請求檔案的錯誤回應,為其建立快取的留存時間。預設值為 10 秒。如需詳細資訊,請參閱針對特定 HTTP 狀態碼建立自訂錯誤頁面。
地理限制適用於整個分佈。如果您需要對部分內容套用一個限制,並對內容的其他部分套用不同的限制 (或不限制),則必須建立單獨 CloudFront 分佈或使用第三方地理位置服務。
如果您啟用 CloudFront 標準日誌 (即存取日誌),則可以透過搜尋 sc-status
值 (即 HTTP 狀態代碼) 為 403
的日誌項目,來識別 CloudFront 已拒絕的請求。不過,如果只使用標準日誌,您無法區分 CloudFront 是根據使用者所在位置而拒絕的請求,還是 CloudFront 因為使用者不具有存取檔案的許可 (有其他的理由) 而拒絕的請求。如果您有第三方地理位置服務,例如 Digital Element 或 MaxMind,則可以根據存取日誌中 c-ip
(用戶端 IP) 列中的 IP 地址來識別請求的位置。如需有關 CloudFront 標準日誌的詳細資訊,請參閱 標準記錄 (存取日誌)。
下列程序說明如何使用 CloudFront 主控台將地理限制新增到現有的分佈。如需有關如何使用主控台建立分佈的詳細資訊,請參閱建立分發。
將地理限制功能新增至您的 CloudFront Web 分佈 (主控台)
登入 AWS Management Console ,並在 開啟 CloudFront 主控台https://console.aws.amazon.com/cloudfront/v4/home
。 -
在導覽窗格中,選擇分佈,然後選擇您要更新的分佈。
-
選擇安全性分頁,然後選擇地理限制。
-
選擇編輯。
-
選擇 Allow list (允許清單) 建立允許的國家/地區清單,或 Block list (封鎖清單) 建立封鎖的國家/地區清單。
-
將所需的國家/地區新增至清單中,然後選擇 Save changes (儲存變更)。
使用第三方地理位置服務
CloudFront 地理限制功能可讓您控制內容在國家/地區層級的分佈,以便您在特定的 Web 分佈中散發所有檔案。如果您有適用地理限制的使用案例,但此限制並非遵循國界,或是想透過指定分佈,來限制僅可存取提供的某些檔案,您可將 CloudFront 與第三方地理位置服務組合使用。這讓您不僅可以根據國家/地區控制對內容的存取,還可以根據城市、郵遞區號,甚至是緯度和經度來控制對內容的存取。
當您使用第三方地理位置服務時,我們建議您使用 CloudFront 的已簽署 URL,這可讓您指定到期日期和時間,在此日期和時間之後 URL 不再有效。此外,我們建議您使用 Amazon S3 儲存貯體做為原始伺服器,因為您可使用 CloudFront 原始存取控制,以防止使用者直接從原始伺服器存取您的內容。如需有關已簽署的 URL 和原始存取控制的詳細資訊,請參閱 使用簽章的 URLs Cookie 提供私有內容。
以下步驟解釋如何使用第三方地理位置服務來控制對檔案的存取。
使用第三方地理位置服務來限制對 CloudFront 分佈中檔案的存取
-
使用地理位置服務取得帳戶。
-
將內容上傳至 Amazon S3 儲存貯體。
-
設定 Amazon CloudFront 和 Amazon S3 以提供私有內容。如需詳細資訊,請參閱 使用簽章的 URLs Cookie 提供私有內容。
-
寫入您的 Web 應用程式,以執行下列動作:
-
將每個使用者請求的 IP 地址傳送到地理位置服務。
-
評估來自地理位置服務傳回的值,以判斷使用者是否位於您希望 CloudFront 分配內容的位置。
-
如果您想要將內容分配至使用者的位置,請為您的 CloudFront 內容產生已簽署的 URL。如果您不想將內容分配到該位置,請將 HTTP 狀態碼
403 (Forbidden)
傳回給使用者。或者,您可以設定 CloudFront 以返回自訂錯誤訊息。如需詳細資訊,請參閱針對特定 HTTP 狀態碼建立自訂錯誤頁面。
如需詳細資訊,請參閱您所使用的地理位置服務的文件。
-
您可以使用 Web 伺服器變動變數來獲得瀏覽您的網站的使用者的 IP 位址。請注意以下警告:
-
如果您的 Web 伺服器透過負載平衡器無法連線至網際網路,則可以使用 Web 伺服器變數來獲得遠端 IP 地址。不過,此 IP 地址不一定是使用者的 IP 地址。它也可以是代理伺服器的 IP 地址,取決於使用者如何連接到網際網路。
-
如果您的 Web 伺服器透過負載平衡器連線至網際網路,則 Web 伺服器變數可能包含負載平衡器的 IP 地址,而非使用者的 IP 地址。在這個組態中,我們建議您使用
X-Forwarded-For
HTTP 標頭中的最後一個 IP 地址。此標頭通常包含多個 IP 地址,其中大部分用於代理或負載平衡器。清單中的最後一個 IP 地址最有可能與使用者的地理位置相關聯。
如果您的 Web 伺服器無法連接到負載平衡器,我們建議您使用 Web 伺服器變數而非 X-Forwarded-For
標頭,以避免 IP 地址詐騙。