跳至內容

如何讓 CloudFront 符合我組織使用 DNSSEC 的要求?

1 分的閱讀內容
0

我有一個 Amazon CloudFront 發佈項目,而且我必須遵循組織的法規要求來使用域名系統安全性延伸功能 (DNSSEC)。

簡短說明

預設的 CloudFront 網域 cloudfront.net 不允許 DNSSEC。若要為您的網域啟用 DNSSEC,您必須先建立 DNSKEY 資源記錄集。然而,由於 AWS 管理 CloudFront 網域的 DNS 記錄,您無法設定 DNSKEY 記錄。這表示您無法直接為 CloudFront 網域啟用 DNSSEC。相反地,您必須透過替代網域將其啟用。

如果您的組織要求使用 DNSSEC,請先封鎖來自 CloudFront 網域對發佈項目的存取。接著,在附加到 CloudFront 發佈項目的替代網域名稱或正規名稱記錄 (CNAME) 上啟用 DNSSEC。

解決方法

封鎖來自 CloudFront 的存取

若要封鎖任何主機標頭中包含 cloudfront.net 網域的請求,請使用 AWS WAF 或函式。

使用 AWS WAF

使用可封鎖以下任一請求類型的 AWS WAF 規則

  • cloudfront.net 結尾的主機標頭。
  • 所有在單一標頭中包含發佈項目網域 (例如 d123abc.cloudfront.net) 的請求。

使用函式

使用 CloudFront 函式AWS Lambda@Edge 函式,封鎖任何主機標頭值以 cloudfront.net 結尾的請求。最佳實務是使用 CloudFront 函式,因為成本較低且效能較快。

以下 CloudFront 函式範例會封鎖主機標頭中包含 CloudFront 網域 cloudfront.net 的請求:

function handler(event) {
  var request = event.request;
    // Extract the host header value
    var host = request.headers.host.value;
    // Check if the host header value ends with "cloudfront.net"
    if (host.endsWith('cloudfront.net')) {
      // Return a response to block the request
      return {
        statusCode: 403,
        statusDescription: 'Forbidden',
        headers: {
          'content-type': {
            value: 'text/plain'
          }
        },
        body: 'Access to this resource is forbidden.'
      };
    }
    // Allow the request to proceed
    return request;
  }

在替代網域名稱上啟用 DNSSEC

在您封鎖來自 CloudFront 網域的存取後,您可以在替代網域名稱 (CNAME) 上啟用 DNSSEC。若要執行此操作,請按照啟用 DNSSEC 簽署並建立信任鏈中的步驟進行。

測試您的網域

若要確認 DNSSEC 在您的網域中運作正確,請使用 Verisign 網站上的 DNSSEC 分析器

AWS 官方已更新 6 個月前