Amazon CloudFront 常見問答集

gRPC

gRPC 是現代的開放原始碼遠端程序呼叫 (RPC) 架構,可讓用戶端和伺服器之間透過長時間的 HTTP/2 連線進行雙向通訊。透過使用持續開放連線,用戶端和伺服器可以彼此傳送即時資料,而無需用戶端經常重新啟動連線並檢查要交換的新資料。gRPC 非常適合低延遲和高傳輸速度至關重要的使用案例,例如即時通訊應用程式和線上遊戲。

在 CloudFront 分佈的每個快取行為上啟用 gRPC。啟用 gRPC 將確保在您的分佈上也啟用 HTTP/2 和 POST 請求支援。gRPC 僅支援透過 HTTP/2 的 POST 方法。

滿足以下條件時,Amazon CloudFront 會在 gRPC 上進行通訊:

  1. 您的分佈上已啟用 HTTP/2
  2. 在緩存行為上啟用 POST 請求和 gRPC
  3. 用戶端透過 HTTP/2 連線傳送具有「application/grpc」值的「content-type」標頭
  1. 安全性 - gRPC 使用 HTTP/2,可確保流量從用戶端到您的原始伺服器進行端對端加密。此外,使用 gRPC 時,您可以免費取得 AWS Shield Standard,而且可以設定 AWS WAF 以協助保護 gRPC 流量免受攻擊。
  2. 更理想的效能 - gRPC 利用稱為協定緩衝區的二進位訊息格式,這種格式比傳統承載小,例如與 RESTful API 搭配使用的 JSON。協定緩衝區的解析是低 CPU 密集型的任務,因為資料採用二進位格式,意即可更快速地交換訊息。這樣就可帶來更理想的整體效能。
  3. 內建串流支援 - 串流是 gRPC 架構的內建部分,並支援用戶端和伺服器端串流語義。這樣就可更加輕鬆地建置串流服務或用戶端。CloudFront 上的 gRPC 支援下列串流組合:
    • 一元 (無串流)
    • 用戶端至伺服器串流
    • 伺服器至用戶端串流
    • 雙向串流

目前沒有。CloudFront 僅支援透過 HTTP/2 的 gRPC。

安全性

CloudFront 提供兩種全受管的方法保護您的來源:

  1. 來源存取控制 (OAC):CloudFront 來源存取控制 (OAC) 是一項安全功能,可限制對 Amazon Simple Storage Service (S3) 來源、AWS Elemental 來源和 Lambda 函數 URL 的存取,確保僅有 CloudFront 可存取內容。
  2. VPC 來源:CloudFront 虛擬私有雲端 (VPC) 來源可讓您使用 Amazon CloudFront 從 VPC 私有子網路中託管的應用程式交付內容。您可以將私有子網路中的 Application Load Balancers (ALB)Network Load Balancers (NLB)EC2 執行個體用作 CloudFront 的 VPC 來源

如果 CloudFront 受管解決方案不符合使用案例要求,則以下是一些可用的替代方法:

  1. 自訂來源標頭:使用 CloudFront,您可以將自訂標頭附加到您的傳入請求,然後設定來源以驗證這些特定的標頭值,從而有效地將存取權限制為僅透過 CloudFront 路由的請求。此方法會建立額外的身分驗證層,大幅降低未經授權直接存取來源的風險。
  2. IP 允許清單:您可以設定來源的安全群組或防火牆,以專門僅允許來自 CloudFront IP 範圍的傳入流量。為便於您使用,AWS 會維護並定期更新這些 IP 範圍。有關實作 IP 允許清單的詳細資訊,請參閱如下的綜合文件:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/LocationsOfEdgeServers.html#managed-prefix-list。此資源提供了如何利用 AWS 的受管字首清單以達到最佳安全性組態的逐步指引。
  3. SSL/TLS 加密:您可以將 CloudFront 設定為專門將 HTTPS 連線與您的來源搭配使用,以透過 CloudFront 分佈與來源之間的加密通訊實現端對端資料保護。

VPC 來源

CloudFront 虛擬私有雲端 (VPC) 來源是一項新功能,可讓您使用 CloudFront 從 VPC 私有子網路中託管的應用程式交付內容。使用 VPC 來源,您可以將應用程式置於 VPC 中的私有子網路,僅可透過 CloudFront 分發存取該子網路。這樣就可不再要求來源必須具有外部可解析的網域名稱服務 (DNS) 名稱。您可以使用在 Application Load Balancer (ALB)、Network Load Balancer (NLB) 和 EC2 執行個體上執行的應用程式設定 VPC 來源。VPC 來源僅在 AWS 商業區域提供,支援 AWS 區域的完整清單可在此處取得。

如果您想要在維持高效能和全域可擴展性的同時增強 Web 應用程式的安全性,則應該將 VPC 來源與 CloudFront 搭配使用。使用 VPC 來源,您可以限制僅允許 CloudFront 分佈存取 VPC 中的來源,而不需要進行複雜的設定,例如機密標頭或存取控制清單。VPC 來源還允許您在具有內部免費 IPv4 IP 地址的私有子網路中路由至來源,從而最佳化 IPv4 成本。如果您想簡化安全管理,則 VPC 來源是理想的選擇,可讓您更專注於發展核心業務,而不是管理複雜的安全措施。

  1. 安全性 - 使用 VPC 來源,您可以將負載平衡器和 EC2 執行個體放置在私有子網路中,同時使 CloudFront 成為唯一的輸入點,從而增強應用程式的安全狀態。使用者請求會透過私有、安全的連線從 CloudFront 轉移到 VPC 來源,為您的應用程式提供額外的安全性。
  2. 管理 - VPC 來源可讓您將來源移至沒有公有存取權的私有子網路,而且無需實作存取控制清單、機密共用標頭或其他限制存取來源的機制,從而降低安全 CloudFront - 來源連線所需的營銷開銷。這樣,您就可以輕鬆地使用 CloudFront 保護其 Web 應用程式,而無需投入成本完成無差別的開發工作。
  3. 可擴展性和效能 - 藉助 VPC 來源,客戶可以使用 CloudFront 的全球邊緣節點和 AWS 骨幹網路,享受與其他現有內容交付方法相似的規模和效能,同時取得更完善的安全狀態。該解決方案簡化安全管理,同時為客戶提供全球應用程式,從而可以輕鬆地將 CloudFront 用作應用程式的單一前門。

CloudFront 虛擬私有雲端 (VPC) 來源可讓您使用 CloudFront 從應用程式交付內容,這些應用程式在具有 Application Load Balancer、Network Load Balancer 和 EC2 執行個體的 VPC 私有子網路中託管。Amazon VPC 封鎖公共存取 (VPC BPA) 是一種簡單的宣告式控制項,可透過 AWS 提供的網際網路路徑以授權方式封鎖傳入 (輸入) 和傳出 (輸出) VPC 流量。在具有 VPC 來源的子網路上啟用 VPC BPA 時,來自 CloudFront 的作用中連線會終止於該子網路。新連線不會傳送至該子網路,而且會路由到 VPC 來源所在且未啟用 BPA 的其他子網路,或者如果 VPC 來源所在的所有子網路均已啟用 BPA,則會被刪除。

VPC 來源支援 Application Load Balancer、Network Load Balancer 和 EC2 執行個體。

否,VPC 私有來源不支援 IPv6。使用 VPC 來源,您需要私有 IPv4 地址,這些地址是免費的,並且不會產生 IPv4 費用。

串流

媒體品質感知彈性 (MQAR) 是 Amazon CloudFront 與 AWS 媒體服務之間的整合式功能,可根據動態產生的影片品質分數提供自動、跨區域的來源選取和容錯移轉。使用 MQAR,您可以在兩個不同的 AWS 區域部署備援 AWS 媒體服務工作流程,以實現彈性的即時事件傳遞。當您為您的發佈版本啟用 MQAR 功能時,您會授權 CloudFront 自動選取被視為具有最高品質分數的來源。品質分數表示從來源感知的媒體串流品質問題,例如黑色畫面、凍結或丟失畫面,或重複畫面。例如,如果您的 AWS Elemental MediaPackage v2 來源部署在兩個不同的 AWS 區域,而其中一個區域報告的媒體品質分數比另一個區域更高,CloudFront 將自動切換到報告較高分數的來源。此功能可模擬持續監控,以提供即時事件和全天播放節目頻道,並旨在助您為觀眾提供高品質體驗。您可以閱讀 CloudFront 開發人員指南,進一步了解 MQAR。

任播靜態 IP

來自 Amazon CloudFront 的任播靜態 IP 是一組靜態 IP 地址,可讓您連線至全球所有 CloudFront 邊緣節點。它們提供一個可用於各種使用案例 (例如零評級計費) 的小型靜態 IP 清單,從中網路供應商透過適當的協議免除特定 IP 地址的資料費用,並將用戶端列入允許清單以增強安全狀態。透過使用任播靜態 IP,您可以消除不斷更新允許清單或 IP 映射的營運挑戰,因為同一組 IP 適用於 CloudFront 的整個全球網路,同時仍然受益於 CloudFront 的所有功能。

若要啟用任播靜態 IP,您需要先發出請求並在 AWS 帳戶中建立任播靜態 IP 清單。建立清單後,您可以將 CloudFront 分佈與任播靜態 IP 清單關聯。可以透過 AWS 主控台上的任播靜態 IP 部分來完成此關聯,也可以透過編輯每個分佈並從下拉式功能表中選取所需的任播靜態 IP 清單來完成關聯。儲存這些變更後,您可以從 AWS 主控台中顯示的清單或透過 API 複製或下載與您的分佈相關聯的特定靜態 IP 地址集

啟用 CloudFront 任播靜態 IP 時,您將收到 21 個適用於 IPv4 的 IP 地址。您需要將所有這些 IP 地址新增至任何相關的允許清單中。

否。CloudFront 任播僅適用於分散在多個地理區域的 IP。

隨著 CloudFront 新增新的邊緣節點,您的任播靜態 IP 清單將繼續保持有效。我們將在適當時宣布來自新邊緣節點的 IP。

所有 CloudFront 功能都可與任播搭配使用,但有三個顯著的例外:1/ 任播靜態 IP 不支援無法支援 SNI 的舊式用戶端,2/ 在使用任播靜態 IP 時要求您使用價格分級「全部」,3/ 使用任播靜態 IP 時必須停用 IPv6。任播靜態 IP 在 DNS 解析階段工作,一旦請求到達主機,所有現存功能和與其他 AWS 服務的整合都將繼續提供給您的分佈。

您可以將任播靜態 IP 與多個分佈搭配使用,但這些分佈必須位於同一個帳戶中。CloudFront 任播靜態 IP 可以在帳戶中的多個分佈之間進行關聯。CloudFront 任播靜態 IP 將支援伺服器名稱指示 (SNI),因此會從與其任播靜態 IP 政策關聯的任意數量分佈傳回正確的憑證。如果您希望自己帳戶中的多個分佈擁有不同的靜態 IP,則可以建立一個額外的任播靜態 IP 清單,並將它們關聯到特定分佈。

在啟用任播靜態 IP 的帳戶中建立新分佈時,您必須明確地將新分佈與現有任播靜態 IP 清單關聯。依預設,它將使用動態 IP 地址,直至您將其連結至靜態 IP 清單。

日誌記錄和報告

  1. 標準日誌 (存取日誌) CloudFront 標準日誌提供對分佈發出的每個請求的相關詳細記錄。這些日誌在許多情況下可發揮作用,包括安全性和存取稽核。
  2. 即時日誌 CloudFront 即時日誌以即時方式提供對分佈發出的請求的相關資訊 (在收到請求後的幾秒鐘內交付日誌記錄)。您可以為即時日誌選擇取樣率,即要接收即時日誌記錄的請求百分比。
  3. 記錄邊緣函數:您可以使用 Amazon CloudWatch Logs 來取得邊緣函數的日誌,包括 Lambda@Edge 和 CloudFront Functions。您可以使用 CloudWatch 主控台或 CloudWatch Logs API 存取這些日誌。如需詳細資訊,請參閱邊緣函數日誌
  4. 記錄服務活動:您可以使用 AWS CloudTrail 記錄 AWS 帳戶中的 CloudFront 服務活動 (API 活動)。CloudTrail 提供使用者、角色或 AWS 服務在 CloudFront 中所執行 API 動作的記錄。使用 CloudTrail 收集的資訊,您可以確定向 CloudFront 發出的 API 請求、從中發出請求的 IP 地址、發出請求的人員、發出請求的時間以及其他詳細資訊。如需詳細資訊,請參閱使用 AWS CloudTrail 記錄 Amazon CloudFront API 呼叫
  • CloudFront 標準日誌會交付至您選擇的 Amazon S3 儲存貯體、Amazon CloudWatch Logs 和 Amazon Data Firehose。如需詳細資訊,請參閱使用標準日誌 (存取日誌)。
  • CloudFront 即時日誌會交付至 Amazon Kinesis Data Streams 中您選擇的資料串流。除了使用 Kinesis Data Streams 所產生的費用外,CloudFront 還會收取即時日誌的費用。如需詳細資訊,請參閱使用即時日誌
  • CloudFront 邊緣函數日誌 (Lambda@Edge 和 CloudFront Functions) 會交付至 Amazon CloudWatch Logs

CloudFront 標準存取日誌可交付至 Amazon S3、Amazon CloudWatch 和 Amazon Data Firehose。您可以選擇輸出日誌格式 (純文字、w3c、JSON、csv 和 Parquet)。您可以選取要記錄的欄位,以及將這些欄位包含在日誌中的順序。對於交付至 S3 的日誌,您也可以為這些日誌啟用分割,即設定每小時或每天自動分割日誌。您也可以將標準存取日誌交付至選擇加入 AWS 區域中的 S3 儲存貯體。請參閱 CloudFront 開發人員指南的標準存取日誌部分以了解更多資訊。

CloudFront 不會為啟用標準日誌而收取費用,但根據日誌交付目的地,您需要為交付、儲存和存取日誌支付費用。請參閱 CloudFront 定價頁面的「其他功能」部分以了解更多資訊。

您可以根據使用案例選擇目的地。如果您具有時間緊迫性使用案例,並且需要在幾秒內快速存取日誌資料,則選擇即時日誌。如果您需要更實惠的即時日誌管道,則可選擇透過僅針對特定快取行為啟用日誌,或選擇較低的取樣率來篩選日誌資料。即時日誌管道可用於快速資料傳遞。因此,如果存在資料延遲,則可能會刪除日誌記錄。另一方面,如果您需要低成本日誌處理解決方案,不需要即時資料,則目前的標準日誌選項非常適合您。S3 中的標準日誌是專為完整性建置,並且通常會在幾分鐘內提供這些日誌。可以針對整體分發而非特定快取行為啟用這些日誌。因此,如果需要用於臨時調查、稽核和分析的日誌,則可以選擇僅在 S3 中啟用標準日誌。您可以選擇使用兩種日誌的組合。使用即時日誌篩選清單洞察操作,然後使用標準日誌進行稽核。
 

CloudFront 標準日誌已傳遞至您的 S3 儲存貯體。此外,您還可以使用第三方解決方案 (如 DataDog 和 Sumologic) 的整合建置,從這些日誌中建立儀表板。

即時日誌將傳遞至您的 Kinesis Data Stream。可以從 Kinesis Data Streams 將日誌發佈至 Amazon Kinesis Data Firehose。Amazon Kinesis Data Firehose 支援將資料輕鬆傳遞至 Amazon S3、Amazon Redshift、Amazon Elasticsearch Service,以及 Datadog、New Relic 和 Splunk 等服務供應商。此外,Kinesis Firehose 還支援將資料傳遞至通用 HTTP 端點。

使用下列步驟來估計所需的分區數量:

  1. 計算 (或估計) 您的 CloudFront 分發每秒收到的請求數。您可以使用 CloudFront 用量報告或 CloudFront 指標,來協助您計算每秒的請求數。
  2. 確定單一即時日誌記錄的典型大小。包含所有可用欄位的典型記錄約為 1 KB。如果不確定日誌記錄的大小,您可以啟用取樣率較低 (例如 1%) 的即時日誌,然後使用 Kinesis Data Streams 中的監控資料,來計算平均記錄大小 (總數記錄數除以總傳入位元組數)。
  3. 將每秒的請求數 (步驟 1 得出) 乘以典型的即時日誌記錄大小 (步驟 2 得出),確定您的即時日誌組態可能傳送至 Kinesis Data Stream 的每秒資料量。
  4. 使用每秒資料量計算所需的分區數量。單一分區每秒可處理不超過 1 MB,以及每秒處理 1,000 個請求 (日誌記錄)。在計算所需分區數量時,我們建議新增最多 25% 的緩衝區。

例如,假設您的分發每秒接收 10,000 個請求,您的即時日誌記錄大小通常為 1 KB。這意味著您的即時日誌組態每秒可產生 10,000,000 位元組 (10,000 x 1,000) 或9.53 MB。在此情況下,您只需要 10 個 Kinesis 分區。您應考慮建立至少 12 個分區以便擁有一些緩衝區。