

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 限制您內容的地理分佈
<a name="georestrictions"></a>

您可以使用*地理限制*功能 (有時也稱為*地理封鎖*)，來防止特定地理位置的使用者存取您透過 Amazon CloudFront 分佈所散發的內容。若要使用地理限制，您有兩個選擇：
+ 使用 CloudFront 地理位置限制功能。使用此選項可限制對與分佈相關聯的所有檔案的存取，並限制在國家/地區層級的存取。
+ 使用第三方地理位置服務。使用此選項來針對與分佈相關聯檔案的子集作限制存取，或在比國家/地區層級更細的層級作限制存取。

**Topics**
+ [使用 CloudFront 地理限制](#georestrictions-cloudfront)
+ [使用第三方地理位置服務。](#georestrictions-geolocation-service)

## 使用 CloudFront 地理限制
<a name="georestrictions-cloudfront"></a>

當使用者請求內容時，無論使用者身在何處，CloudFront 通常會為請求的內容提供服務。如果您需要防止特定國家/區域的使用者存取您的內容，則可以使用 CloudFront 地理限制功能執行以下其中一項內容：
+ 只有當使用者位於您允許清單上其中一個核准國家/地區時，才能存取您的內容。
+ 如果使用者位於您封鎖清單上的被禁國家/地區，則阻止其存取您的內容。

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

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

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

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

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

1. 米蘭的邊緣節點會查詢您的分佈，並確定摩納哥的使用者沒有下載您的內容的許可。

1. CloudFront 會將 HTTP 狀態碼 `403 (Forbidden)` 傳回使用者。

您可以選擇性地設定 CloudFront，向使用者傳回自訂錯誤訊息，而且也可指定您希望 CloudFront 針對請求檔案的錯誤回應，為其建立快取的留存時間。預設值為 10 秒。如需詳細資訊，請參閱[針對特定的 HTTP 狀態碼建立自訂錯誤頁面](creating-custom-error-pages.md)。

地理限制適用於整個分佈。如果您需要對部分內容套用一個限制，並對內容的其他部分套用不同的限制 (或不限制)，則必須建立單獨 CloudFront 分佈或[使用第三方地理位置服務](#georestrictions-geolocation-service)。

如果您啟用 CloudFront [標準日誌](AccessLogs.md) (即存取日誌)，則可以透過搜尋 `sc-status` 值 (即 HTTP 狀態代碼) 為 `403` 的日誌項目，來識別 CloudFront 已拒絕的請求。不過，如果只使用標準日誌，您無法區分 CloudFront 是根據使用者所在位置而拒絕的請求，還是 CloudFront 因為使用者不具有存取檔案的許可 (有其他的理由) 而拒絕的請求。如果您有第三方地理位置服務，例如 Digital Element 或 MaxMind，則可以根據存取日誌中 `c-ip` (用戶端 IP) 列中的 IP 位址來識別請求的位置。如需有關 CloudFront 標準日誌的詳細資訊，請參閱 [存取日誌 （標準日誌）](AccessLogs.md)。

下列程序說明如何使用 CloudFront 主控台將地理限制新增到現有的分佈。如需有關如何使用主控台建立分佈的詳細資訊，請參閱[建立分發](distribution-web-creating-console.md)。<a name="restrictions-geo-procedure"></a>

**將地理限制功能新增至您的 CloudFront Web 分佈 (主控台)**

1. 登入 AWS 管理主控台 ，並在 開啟 CloudFront 主控台[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

1. 在導覽窗格中，選擇**分佈**，然後選擇您要更新的分佈。

1. 選擇**安全性**分頁，然後選擇**地理限制**。

1. 選擇**編輯**。

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

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

## 使用第三方地理位置服務。
<a name="georestrictions-geolocation-service"></a>

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

當您使用第三方地理位置服務時，我們建議您使用 CloudFront 的已簽署 URL，這可讓您指定到期日期和時間，在此日期和時間之後 URL 不再有效。此外，我們建議您使用 Amazon S3 儲存貯體做為原始伺服器，因為您可使用 CloudFront [原始存取控制](private-content-restricting-access-to-s3.md)，以防止使用者直接從原始伺服器存取您的內容。如需有關已簽署的 URL 和原始存取控制的詳細資訊，請參閱 [使用已簽署 URL 和已簽署 Cookie 提供私有內容](PrivateContent.md)。

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

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

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

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

1. 設定 Amazon CloudFront 和 Amazon S3 以提供私有內容。如需詳細資訊，請參閱 [使用已簽署 URL 和已簽署 Cookie 提供私有內容](PrivateContent.md)。

1. 寫入您的 Web 應用程式，以執行下列動作：
   + 將每個使用者請求的 IP 位址傳送到地理位置服務。
   + 評估來自地理位置服務傳回的值，以判斷使用者是否位於您希望 CloudFront 分配內容的位置。
   + 如果您想要將內容分配至使用者的位置，請為您的 CloudFront 內容產生已簽署的 URL。如果您不想將內容分配到該位置，請將 HTTP 狀態碼 `403 (Forbidden)` 傳回給使用者。或者，您可以設定 CloudFront 以返回自訂錯誤訊息。如需詳細資訊，請參閱[針對特定的 HTTP 狀態碼建立自訂錯誤頁面](creating-custom-error-pages.md)。

   如需詳細資訊，請參閱您所使用的地理位置服務的文件。

您可以使用 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 位址詐騙。