概觀

來源隱藏是一套技術,旨在減少 Web 應用程式的受攻擊面。最好的做法是將 CloudFront 當作 Web 應用程式的單一進入點使用,在其中應用安全控制,例如防範 DDoS 攻擊和不樂見的機器人的保護措施。來源隱藏可阻止惡意人士繞過 CloudFront 及其安全控制,直接攻擊來源,並使用防火牆規則封鎖不是來自 CloudFront 進入點的任何流量。來源隱藏可以在 OSI 模型的多個層級上實現。

網路層

當您的來源允許您控制傳入網路存取時,請新增限制以僅允許來自 CloudFront 網路的流量。

如果您的來源是 EC2 執行個體、Application Load Balancer 或 Network Load Balancer,您可以將來源保留在 VPC 中的私有子網路中,並利用 CloudFront 的 VPC 來源功能。它可讓您在自己的 AWS 帳戶中限制針對設定有 VPC 來源的 CloudFront 分佈的專屬存取權。

VPC 來源

如果必須將此類資源保留在公有子網路中 (例如,您的 ALB 將由多個 CDN 存取),或者您的來源類型不受 CloudFront 的 VPC 來源支援,則可以使用安全群組限制對 CloudFront 的存取。您需要將來源與安全群組關聯,在其中新增 Amazon CloudFront 的 AWS 受管字首清單

如果您的來源位於內部部署,您可以透過允許列出 CloudFront 面向來源的 IP 位址來限制對 CloudFront 的存取,當您篩選服務欄位的 CLOUDFRONT_ORIGIN_FACING 值時,可以在此 IP 清單中找到該位址。在此方法中,您需要訂閱 IP 變更以更新 ACL。請查看這篇部落格文章,了解如何在內部部署 Web 伺服器上使用第三方防火牆實作來源隱藏。如需進一步隔離網際網路,請考慮使用 Direct Connect 連線上的公有虛擬介面,在內部部署基礎設施和 AWS 之間設定 AWS Direct Connect

網路層的存取控制是一個起點,但對您來說可能還不夠。例如,如果有人在您的內部部署中發現來源網域名稱,他們可以在自己的 AWS 帳戶中建立 CloudFront 發佈,並繞過您自己的發佈。另一個範例是,當您使用 VPC 來源功能時,您可能想要將來源限制為 AWS 帳戶中的特定 CloudFront 分佈,而不是讓您的 AWS 帳戶中設定有 VPC 來源的所有 CloudFront 分佈都可以存取它。在這種情況下,考慮使用應用程式層存取控制進行強化。

應用程式層

來源存取控制

使用來源存取控制 (OAC) 將某些類型的來源鎖定至 CloudFront 變得非常簡單,OAC 是 CloudFront 的一項功能,可使用基於 IAM 政策AWS 第 4 版簽署程序演算法 (sigv4) 在以原生方式簽署特定類型的來源的請求。如今,OAC 與 S3MediaStoreMediaPackageLambda 函數 URLS3 Object Lambda 相容。當 OAC 與 S3 一起使用時,您可以將 S3 儲存貯體設為私密,並根據 S3 儲存貯體政策,對 CloudFront 進行專屬存取。

當 OAC 不支援來源類型時,您可以使用邊緣函數簽署對來源的請求。下列部落格說明範例實作:

根據共用私密金鑰進行存取控制

如果您的來源不支援請求簽署,或者您認為應用程式不需要此層級的存取控制,則您可以將 CloudFront 設定為傳送包含與來源共用密碼的自訂標頭,您的來源可以驗證該標頭以處理請求。請考慮以下範例實作:

  • 基於 ALB 的來源。如果您的 ALB 已與 AWS WAF WebACL 建立關聯,您可以使用 ALB 規則或使用 AWS WAF 規則,驗證基於 ALB 的來源上的密碼標頭。
  • 基於 API Gateway 的來源。您可以使用 API 金鑰驗證 API Gateway 上的密碼標頭。
  • 基於 NGINX 的來源。假設 CloudFront 傳送值為 abc123 的自訂標頭 X-CloudFront,則您可以在 /etc/nginx/nginx.conf Nginx 組態檔的伺服器標籤中加入下列程式碼,以驗證基於 Nginx 的 Web 伺服器 (基於雲端或基於內部部署) 上的密碼標頭:

    if ($http_x_cloudfront != "abc123") {
        return 403;
    }
  • 基於 Apache 的來源。假設 CloudFront 傳送值為 abc123 的自訂標頭 X-CloudFront,則您可以在 httpd.conf 組態檔案 (若使用 ssl.conf 檔案,則也包含在內) 中加入下列程式碼,以驗證基於 Apache 的 Web 伺服器 (基於雲端或基於內部部署) 上的密碼標頭:

    RewriteEngine On
    RewriteCond %{HTTP:x-cloudfront} !^abc123$ [NC]
    RewriteRule ^ - [F]

在所有情況下,建議您定期輪換此共用密碼,以降低洩漏密碼的風險。在以上分享的範例實作中,使用 API Gateway 和 ALB 的實作都包含自動輪換密碼。

本頁對您是否有幫助?