概觀

基於不同原因針對 Web 應用程式實作地理封鎖政策,例如遵守禁運國家/地區相關法規,或在 Web 應用程式不具串流權限的國家/地區封鎖影片串流。

常見使用案例

您可利用 CloudFront 的原生地理限制、邊緣函數或 AWS WAF 來實作地理封鎖。每種方法均提供不同的匹配資料粒度、可自訂的邏輯與價格層級。也可組合這些方法,但需了解 CloudFront 會先評估其地理限制規則,然後 AWS WAF 評估其地理匹配規則,最後再執行邊緣函數來評估其代碼的地理封鎖邏輯。請注意,CloudFront 與 AWS WAF 會利用第三方資料庫來確定使用者的位置。IP 地址與國家/地區之間的映射準確性因地區而異。

利用 AWS 邊緣服務進行地理封鎖

CloudFront 的簡易全球地理限制

利用 CloudFront 地理限制在分佈層級限制國家/地區,不需額外費用。您可允許或封鎖特定的一組國家/地區,這些國家/地區將被套用至 CloudFront 分佈所收到的所有請求。因設定的地理限制而受限制的檢視器將收到 CloudFront 的「403 禁止」回應。您可利用 CloudFront 的自訂錯誤頁面來提供支援錯誤頁面。

利用 CloudFront Functions 執行進階地理封鎖邏輯

運用在檢視器請求事件設定的 CloudFront Functions 及 javascript 來實作進階地理封鎖邏輯。CloudFront Functions 可搭配使用特定 CloudFront 快取行為 (例如 /api/ * 路徑) 達到精細資料粒度,代碼邏輯可更精細,且可結合其他存取控制邏輯 (例如授權)。若要在 CloudFront functions 實作基於地理的邏輯,您需要在來源請求政策允許列出所需的 CloudFront 標頭 (例如 CloudFront-檢視器-國家/地區或 CloudFront-檢視器-國家/地區-區域),該政策連接關聯函數的相同 CloudFront 快取行為。

以下範例的 CloudFront Function 封鎖來自烏克蘭頓涅茨克 (14) 或盧甘斯克 (9) 地區的檢視器。

function handler(event) {
  var request = event.request;
  var country = request.headers['cloudfront-viewer-country'];
  var region = request.headers['cloudfront-viewer-country-region'];

  if (country && country.value === 'UA' && region && (region.value === '9' || region.value === '14')) {
    return {
      statusCode: 403,
      statusDescription: 'Forbidden',
    };
  }
  return request;
}

資源

本頁對您是否有幫助?