跳至内容

如何让 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 个月前