限制您內容的地理分佈 - Amazon CloudFront

限制您內容的地理分佈

您可以使用地理限制功能 (有時也稱為地理封鎖),來防止特定地理位置的使用者存取您透過 CloudFront 分佈所分佈的內容。若要使用地理限制,您有兩個選擇:

  • 使用 CloudFront 地理位置限制功能。使用此選項可限制對與分佈相關聯的所有檔案的存取,並限制在國家/地區層級的存取。

  • 使用第三方地理位置服務。使用此選項來針對與分佈相關聯檔案的子集作限制存取,或在比國家/地區層級更細的層級作限制存取。

使用 CloudFront 地理限制

當使用者請求內容時,無論使用者身在何處,CloudFront 通常會為請求的內容提供服務。如果您需要防止特定國家/區域的使用者存取您的內容,則可以使用 CloudFront 地理限制功能執行以下其中一項內容:

  • 只有當使用者位於您允許清單上的其中一個核准國家/地區時,才能存取您的內容。

  • 如果使用者位於您封鎖清單上的被禁國家/地區,則防止其存取您的內容。

例如,若請求來自您未授權分配內容的國家/區域,則可以使用 CloudFront 地理限制來封鎖該請求。

注意

CloudFront 會使用第三方資料庫來判斷使用者的位置。IP 地址與國家/地區之間的映射的準確性因區域而異。根據最近的測試,整總體準確性為 99.8%。如果 CloudFront 無法判斷使用者的位置,CloudFront 會提供使用者所請求的內容。

以下是地理限制的運作方式:

  1. 假設您有權僅在列支敦斯登分配您的內容。您更新 CloudFront 分佈,來新增僅包含列支敦斯登的允許清單。(或者,您可以新增包含除了列支敦斯登以外的每個國家/地區的封鎖清單。)

  2. 摩納哥的使用者請求您的內容,而 DNS 會將請求路由到位於義大利米蘭的 CloudFront 節點。

  3. 米蘭的節點尋找您的分佈,並決定摩納哥的使用者不允許下載您的內容。

  4. 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 分佈 (主控台)

  1. 登入 AWS Management Console 並開啟位於 https://console.aws.amazon.com/cloudfront/v3/home 的 CloudFront 主控台。

  2. 選擇您要更新的分佈。

  3. 選擇 Geographic restrictions (地理限制)

  4. 選擇 Edit (編輯)。

  5. 選擇 Allow list (允許清單) 建立允許的國家/地區清單,或 Block list (封鎖清單) 建立封鎖的國家/地區清單。

  6. 將所需的國家/地區新增至清單中,然後選擇 Save changes (儲存變更)

使用第三方地理位置服務

CloudFront 地理限制功能可讓您控制內容在國家/區域層級的分佈,以便您在特定的 Web 分佈中分佈所有檔案。如果您有適用地理限制的使用案例,但此限制並非遵循國界,或是想透過指定分佈,來限制僅可存取提供的某些檔案,您可以將 CloudFront 與第三方地理位置服務組合使用。這可讓您不僅可以根據國家/地區控制對內容的存取,還可以根據城市、郵遞區號,甚至是緯度和經度來控制對內容的存取。

當您使用第三方地理位置服務時,我們建議您使用 CloudFront 簽署的 URL,這可讓您指定過期日期和時間,之後 URL 將不再有效。此外,我們建議您使用 Amazon S3 儲存貯體做為原始伺服器,因為您可以使用 CloudFront 原始存取身分,以防止使用者直接從原始伺服器存取您的內容。如需有關已簽署的 URL 和原始存取身分的詳細資訊,請參閱 使用已簽署的 URL 和已簽署的 Cookie 提供私有內容

以下步驟解釋如何使用第三方地理位置服務來控制對檔案的存取。

使用第三方地理位置服務來限制對 CloudFront 分佈中檔案的存取

  1. 使用地理位置服務取得帳戶。

  2. 將內容上傳至 Amazon S3 儲存貯體。

  3. 設定 Amazon CloudFront 和 Amazon S3 以提供私有內容。如需詳細資訊,請參閱 使用已簽署的 URL 和已簽署的 Cookie 提供私有內容

  4. 寫入您的 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 地址詐騙。