启用 DNSSEC 签名并建立信任链。 - Amazon Route 53

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

启用 DNSSEC 签名并建立信任链。

递增步骤适用于托管区域拥有者和父区域维护者。这二者可以是同一个人,但如果不是,区域拥有者应该通知父区域维护者并与其合作。

我们建议按照本文中的步骤对区域进行签名并将其纳入信任链中。以下步骤将最大限度地降低启用 DNSSEC 所存在的风险。

注意

在 Amazon Route 53 中配置 DNSSEC 签名 中开始之前,请务必阅读先决条件。

启用 DNSSEC 签名需要执行三个步骤,如以下几节所述。

步骤 1:准备启用 DNSSEC 签名

准备步骤可通过监控区域可用性并减少启用签名与插入委派签名者 (DS) 记录之间的等待时间,帮助您最大限度地降低启用 DNSSEC 所存在的风险。

准备启用 DNSSEC 签名
  1. 监控区域可用性。

    您可以监控区域以了解域名的可用性。这可以帮助您在启用 DNSSEC 签名后解决可能需要回滚的任何问题。您可以使用查询日志记录来监控流量最多的域名。有关设置查询日志记录的更多信息,请参阅 监控 Amazon Route 53

    可以通过 Shell 脚本或第三方服务来完成监控。但是,其不应作为确定是否需要回滚的唯一信号。由于域名不可用,您也可能会从客户处获得反馈。

  2. 降低区域的最大 TTL。

    区域的最大 TTL 是该区域中最长的 TTL 记录。在以下示例区域中,区域的最大 TTL 为 1 天(86400 秒)。

    名称 TTL 记录类 记录类型 记录数据

    example.com。

    900

    IN

    SOA

    ns1.example.com. hostmaster.example.com。2002022401 10800 15 604800 300

    example.com。

    900

    IN

    NS

    ns1.example.com。

    route53.example.com。

    86400

    IN

    TXT

    some txt record

    降低区域的最大 TTL 将有助于缩短启用签名与插入委派签名者 (DS) 记录之间的等待时间。我们建议将区域的最大 TTL 降低到 1 小时(3600 秒)。如果任何解析程序在缓存已签名记录时遇到问题,您可以在一个小时后回滚。

    回滚:撤消 TTL 更改。

  3. 降低 SOA TTL 和 SOA 最小字段。

    SOA 最小字段是 SOA 记录数据中的最后一个字段。在以下 SOA 记录示例中,最小字段的值为 5 分钟(300 秒)。

    名称 TTL 记录类 记录类型 记录数据

    example.com。

    900

    IN

    SOA

    ns1.example.com. hostmaster.example.com。2002022401 10800 15 604800 300

    SOA TTL 和 SOA 最小字段决定了解析程序记住否定回答的时长。启用签名后,Route 53 名称服务器开始返回否定回答的 NSEC 记录。NSEC 包含解析程序可能用来综合否定回答的信息。如果由于 NSEC 信息导致解析程序对姓名假定否定回答而必须回滚,那么您只需等待 SOA TTL 和 SOA 最小字段的最大值,解析程序就会停止假定。

    回滚:撤消 SOA 更改。

  4. 确保 TTL 和 SOA 最小字段更改有效。

    用于确保您GetChange到目前为止所做的更改已传播到所有 Route 53 DNS 服务器。

步骤 2:启用 DNSSEC 签名并创建 KSK

您可以在 Route 53 控制台上使用 AWS CLI 或启用 DNSSEC 签名并创建密钥签名密钥 (KSK)。

当您提供或创建客户管理的 KMS 密钥时,有几个要求。有关更多信息,请参阅 使用适用于 DNSSEC 的客户托管密钥

CLI

您可以使用已有密钥,或通过使用自己的 hostedzone_idcmk_arnksk_nameunique_string 值运行如下 AWS CLI 命令来创建密钥(以确保请求是唯一的):

aws --region us-east-1 route53 create-key-signing-key \ --hosted-zone-id $hostedzone_id \ --key-management-service-arn $cmk_arn --name $ksk_name \ --status ACTIVE \ --caller-reference $unique_string

有关客户托管式密钥的更多信息,请参阅 使用适用于 DNSSEC 的客户托管密钥。另请参阅 CreateKeySigningKey

要启用 DNSSEC 签名,请使用您自己的值运行如下 AWS CLI 命令:hostedzone_id

aws --region us-east-1 route53 enable-hosted-zone-dnssec \ --hosted-zone-id $hostedzone_id

有关更多信息,请参阅enable-hosted-zone-dnssecEnableHostedZoneDNSSEC

Console
要启用 DNSSEC 签名并创建 KSK
  1. 登录 AWS Management Console 并打开 Route 53 控制台,网址为 https://console.aws.amazon.com/route53/

  2. 在导航窗格中,选择 Hosted zones(托管区域),然后选择您要为其启用 DNSSEC 签名的托管区域。

  3. DNSSEC signing(DNSSEC 签名)选项卡上,选择 Enable DNSSEC signing(启用 DNSSEC 签名)。

    注意

    如果本部分中的选项为 Disable DNSSEC signing(禁用 DNSSEC 签名),则表示您已完成启用 DNSSEC 签名的第一步。请确保您为 DNSSEC 的托管区域建立了信任链,或者此区域已经存在信任链,然后您便完成了操作。有关更多信息,请参阅 步骤 3:建立信任链

  4. Key-signing key (KSK) creation(密钥签名密钥 (KSK) 创建)部分,选择 Create new KSK(创建新的 KSK),并在 Provide KSK name(提供 KSK 名称)下输入 Route 53 将为您创建的 KSK 名称。名称只能包含字母、数字和下划线 (_)。此名称必须唯一。

  5. Customer managed CMK(客户托管 CMK)中,选择 Route 53 在为您创建 KSK 时要使用的客户管理密钥。您可以使用适用于 DNSSEC 签名的现有客户托管密钥,也可以创建新的客户托管密钥。

    当您提供或创建客户托管密钥时,有几个要求。有关更多信息,请参阅 使用适用于 DNSSEC 的客户托管密钥

  6. 输入现有客户托管密钥的别名。如果要使用新的客户托管式密钥,请输入客户托管密钥的别名,Route 53 将为您创建密钥。

    注意

    如果您选择让 Route 53 创建客户托管密钥,请注意,每个客户托管密钥都会单独收取费用。有关更多信息,请参阅 AWS 密钥管理服务定价

  7. 选择 Enable DNSSEC signing(启用 DNSSEC 签名)。

启用区域签名后,请完成以下步骤(无论是使用控制台还是 CLI):

  1. 确保区域签名有效。

    如果你使用了 AWS CLI,你可以使用EnableHostedZoneDNSSEC()调用输出中的操作 ID 来运行 get-changeGetChange确保所有 Route 53 DNS 服务器都在签署响应(status =INSYNC)。

  2. 至少等待前一个区域的最大 TTL 的时长。

    等待解析程序清除其缓存中的所有未签名记录。为此,等待时长至少应为前一个区域的最大 TTL。在上面的 example.com 区域,等待时间为 1 天。

  3. 监控客户问题报告。

    启用区域签名后,客户可能会开始看到与网络设备和解析程序相关的问题。建议的监控周期为 2 周。

    下面是可能会看到的问题示例:

    • 某些网络设备可以将 DNS 响应大小限制在 512 字节以下,这对于某些签名响应来说太小。应重新配置这些网络设备,以便允许更大的 DNS 响应。

    • 一些网络设备对 DNS 响应进行深入检查并删除其无法理解的某些记录,如用于 DNSSEC 的记录。应该重新配置这些设备。

    • 一些客户的解析程序称可以接受比其网络支持的响应大小更大的 UDP 响应。您可以测试网络功能并适当配置解析程序。有关更多信息,请参阅 DNS 回复大小测试服务器

回滚:调用 DisableHostedZoneDNSSEC,然后回滚中的步骤。步骤 1:准备启用 DNSSEC 签名

步骤 3:建立信任链

在 Route 53 中为托管区域启用 DNSSEC 签名后,请为托管区域建立信任链,以完成 DNSSEC 签名设置。您可以通过在托管区域创建 Delegation Signer (DS) 记录,并使用 Route 53 提供的信息,以完成此操作。根据域注册的位置,您可以将记录添加到 Route 53 中的父托管区域或其它域注册商。

要建立 DNSSEC 签名信任链。
  1. 登录 AWS Management Console 并打开 Route 53 控制台,网址为 https://console.aws.amazon.com/route53/

  2. 在导航窗格中,选择 Hosted zones(托管区域),然后选择要为其建立 DNSSEC 信任链的托管区域。您必须首先启用 DNSSEC 签名。

  3. DNSSEC signing(DNSSEC 签名)选项卡,在 DNSSEC signing(DNSSEC 签名)中,选择 View information to create DS record(查看信息以创建 DS 记录)。

    注意

    如果您没有在本部分中看到 View information to create DS record(查看信息以创建 DS 记录),那么在建立信任链之前,必须启用 DNSSEC 签名。选择 Enable DNSSEC signing(启用 DNSSEC 签名)并完成 步骤 2:启用 DNSSEC 签名并创建 KSK 中的所述步骤,然后回到这些步骤建立信任链。

  4. Establish a chain of trust(建立信任链)中,选择 Route 53 registrar(Route 53 注册商)或者 Another domain registrar(另一域注册商),具体取决于您的域注册位置。

  5. 使用步骤 3 提供的值以在 Route 53 中为父托管区域创建 DS 记录。如果您的域未托管在 Route 53,请使用提供的值在域注册商网站上创建 DS 记录。

    • 如果父区域是通过 Route 53 管理的域,请按照以下步骤操作:

      请确保配置了正确的签名算法(ECDSAP256SHA256 和类型 13)和摘要算法(SHA-256 和类型 2)。

      如果 Route 53 是您的注册商,请在 Route 53 控制台中执行以下操作:

      1. 请注意 Key type(密钥类型)、Signing algorithm(签名算法)和 Public key(公有密钥)的值。在导航窗格中,选择 Registered domains

      2. 选择一个域,然后在 DNSSEC status(DNSSEC 状态)中,选择 Manage keys(管理密钥)。

      3. Manage DNSSEC keys(管理 DNSSEC 密钥)对话框中,从下拉菜单中为 Route 53 registrar(Route 53 注册商)选择适当的 Key type(密钥类型)和 Algorithm(算法)。

      4. 为 Route 53 注册商复制 Public key(公有密钥)。在 Manage DNSSEC keys(管理 DNSSEC 密钥)对话框中,将值粘贴到 Public key(公有密钥)框中。

      5. 选择 添加

        Route 53 会将 DS 记录从公有密钥添加到父区域。例如,如果您的域是 example.com,则 DS 记录会添加到 .com DNS 区域。

    • 如果父区域托管在 Route 53 上,或者域名由其他注册管理机构管理,请联系父区域或域注册所有者,按照以下说明进行操作:

      为确保以下步骤顺利进行,请将低 DS TTL 引入父区域。如果您需要回滚更改,我们建议将 DS TTL 设置为 5 分钟(300 秒)以加快恢复速度。

      • 如果您的父区域由其他注册表管理,请联系注册商以引入区域的 DS 记录。通常无法调整 DS 记录的 TTL。

      • 如果您的父区域托管在 Route 53 上,请联系父区域拥有者以引入区域的 DS 记录。

        $ds_record_value 提供给父区域拥有者。您可以通过在控制台中单击 View Information to create DS record(查看信息以创建 DS 记录)并复制 DS record(DS 记录)字段,或者通过调用 GetDNSSEC API 并检索“DSRecord”字段的值:

        aws --region us-east-1 route53 get-dnssec --hosted-zone-id $hostedzone_id

        父区域拥有者可以通过 Route 53 控制台或 CLI 插入记录。

        • 要使用插入 DS 记录 AWS CLI,父区域所有者创建并命名了一个类似于以下示例的 JSON 文件。父区域拥有者可能会将文件命名为 inserting_ds.json

          { "HostedZoneId": "$parent_zone_id", "ChangeBatch": { "Comment": "Inserting DS for zone $zone_name", "Changes": [ { "Action": "UPSERT", "ResourceRecordSet": { "Name": "$zone_name", "Type": "DS", "TTL": 300, "ResourceRecords": [ { "Value": "$ds_record_value" } ] } } ] } }

          然后运行以下命令:

          aws --region us-east-1 route53 change-resource-record-sets --cli-input-json file://inserting_ds.json
        • 要使用控制台插入 DS 记录,

          通过以下网址打开 Route 53 控制台:https://console.aws.amazon.com/route53/

          在导航窗格中,选择 Hosted zones(托管区域)、托管区域的名称,然后选择 Create record(创建记录)按钮。确保为 Routing policy(路由策略)选择简单路由。

          Record name(记录名称)字段中输入与 $zone_name 相同的名称,从 Record type(记录类型)下拉菜单中选择 DS,并在 Value(值)字段中输入 $ds_record_value 的值,然后选择 Create records(创建记录)。

    回滚:从父区域中删除 DS,等待 DS TTL,然后回滚建立信任的步骤。如果父区域托管在 Route 53 上,父区域拥有者可以将 JSON 文件中的 ActionUPSERT 更改为 DELETE,然后重新运行上面的示例 CLI。

  6. 等待更新传播,具体基于域记录的 TTL。

    如果父区域使用的是 Route 53 DNS 服务,则父区域所有者可以通过 GetChangeAPI 确认完全传播。

    否则,您可以定期检查 DS 记录的父区域,然后再等 10 分钟,以提高完整传播 DS 记录插入的可能性。请注意,一些注册商计划了 DS 插入,例如,每天一次。

在父区域中引入委派签名者 (DS) 记录时,已获取 DS 的经验证的解析程序将开始验证来自该区域的响应。

为了确保建立信任的步骤顺利进行,请完成以下操作:

  1. 找到最大 NS TTL。

    有 2 组 NS 记录与您的区域相关:

    • 委托 NS 记录 — 这是由父区域持有的您的区域的 NS 记录。您可以通过运行如下 Unix 命令找到此记录(如果区域为 example.com,则父区域为 com):

      dig -t NS com

      选择一个 NS 记录,然后运行以下命令:

      dig @one of the NS records of your parent zone -t NS example.com

      例如:

      dig @b.gtld-servers.net. -t NS example.com

    • 区内 NS 记录 — 这是您的区域中的 NS 记录。您可以通过运行以下 Unix 命令找到此记录:

      dig @one of the NS records of your zone -t NS example.com

      例如:

      dig @ns-0000.awsdns-00.co.uk. -t NS example.com

      请注意两个区域的最大 TTL。

  2. 等待最大 NS TTL。

    在 DS 插入之前,解析程序获得签名响应,但未验证签名。插入 DS 记录后,在区域的 NS 记录到期之前,解析程序无法看到该记录。当解析程序重新获取 NS 记录时,也将会返回 DS 记录。

    如果您的客户在时钟不同步的主机上运行解析程序,请确保时钟与正确时间相差 1 小时以内。

    完成此步骤后,所有 DNSSEC 感知解析程序将会验证您的区域。

  3. 注意名称解析。

    应注意解析程序验证您的区域时没有出现问题。确保同时考虑到客户向您报告问题所需的时间。

    我们建议监控最长 2 周时间。

  4. (可选)延长 DS 和 NS TTL。

    如果对设置满意,可以保存所做的 TTL 和 SOA 更改。请注意,Route 53 将已签名区域的 TTL 限制为 1 周。有关更多信息,请参阅 在 Amazon Route 53 中配置 DNSSEC 签名

    如果您可以更改 DS TTL,建议将其设置为 1 小时。