Azure DNSでDNSSECする

先日の発表でAzure DNSのPublic DNS ZoneでDNSSECがPreviewでサポートされるようになったとありました。

というわけで早速やってみましょう。

やり方はDNSSEC を使用して Azure パブリック DNS ゾーンに署名する方法 (プレビュー)に従えばOKですが、自分が見た時はまだAzureポータルで操作できなかったのでAzure CLIを使うことにしました。
作業前にまずは現在のDNSSEC関連情報を見てみましょう。実際は見ようとすると無いって言われます。

$ az network dns dnssec-config show --resource-group "azuremoerg" --zone-name "azure.moe"

This command is experimental and under development. Reference and support levels: https://aka.ms/CLI_refstatus
(NotFound) DNSSEC is not enabled for DNS zone 'azure.moe' in resource group 'azuremoerg' of subscription '____________'.
Code: NotFound
Message: DNSSEC is not enabled for DNS zone 'azure.moe' in resource group 'azuremoerg' of subscription '____________'.

現在のDNSゾーンの情報も見ておきます。

$ az network dns zone show --resource-group "azuremoerg" --zone-name "azure.moe"
{
  "etag": "________________________",
  "id": "/subscriptions/________________________/resourceGroups/azuremoerg/providers/Microsoft.Network/dnszones/azure.moe",
  "location": "global",
  "maxNumberOfRecordSets": 5000,
  "name": "azure.moe",
  "nameServers": [
    "ns1-07.azure-dns.com.",
    "ns2-07.azure-dns.net.",
    "ns3-07.azure-dns.org.",
    "ns4-07.azure-dns.info."
  ],
  "numberOfRecordSets": 28,
  "resourceGroup": "azuremoerg",
  "tags": {},
  "type": "Microsoft.Network/dnszones",
  "zoneType": "Public"
}

という状態からまずはDSレコードを作成します。内部的には必要なDNSKeyとかも作られてるはず。

$ az network dns dnssec-config create --resource-group "azuremoerg" --zone-name "azure.moe"

This command is experimental and under development. Reference and support levels: https://aka.ms/CLI_refstatus
{
  "etag": "______________________",
  "id": "/subscriptions/______________________/resourceGroups/azuremoerg/providers/Microsoft.Network/dnszones/azure.moe/dnssecConfigs/default",
  "name": "default",
  "provisioningState": "Succeeded",
  "resourceGroup": "azuremoerg",
  "signingKeys": [
    {
      "delegationSignerInfo": [],
      "flags": _____,
      "keyTag": ______,
      "protocol": 3,
      "publicKey": "______________________",
      "securityAlgorithmType": 13
    },
    {
      "delegationSignerInfo": [
        {
          "digestAlgorithmType": 2,
          "digestValue": "______________________",
          "record": "____ 13 2 ______________________"
        }
      ],
      "flags": ___,
      "keyTag": ________,
      "protocol": 3,
      "publicKey": "______________________",
      "securityAlgorithmType": 13
    }
  ],
  "type": "Microsoft.Network/dnszones/dnssecConfigs"
}

というわけで必要な情報が作られました。

あとはこの情報を基に親ゾーンにもレコードを追加します。親がトップレベルドメインの場合はレジストラ側に依頼することになります。
今回は azure.moe ドメインを管理してるレジストラ(HEXONET)のポータル上でやってみようと思います。(ここはレジストラ次第で変わる部分)

さっき得られた delegationSignerInfo の record の値を参考にすれば埋められると思います。({keyタグ} {アルゴリズム} {ダイジェストタイプ} {ダイジェストの値} という並びになってるはず)

レジストラ側(上位側)で設定できればOKのはずです。チェッカーで見てみましょう。

https://dnsviz.net/でも見てみましょう。

大丈夫そうですね。一応digの結果も。

$ dig azure.moe DS +dnssec

; <<>> DiG 9.16.50 <<>> azure.moe DS +dnssec
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40700
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 1224
; COOKIE: 9a8bca7e9517c680 (echoed)
;; QUESTION SECTION:
;azure.moe.                     IN      DS

;; ANSWER SECTION:
azure.moe.              1800    IN      DS      58394 13 2 71E1EF82DB89A63FF5F90091D9EB89F8364F5470894D69D0898D3929 E4B58E7B
azure.moe.              1800    IN      RRSIG   DS 8 2 3600 20241122084005 20241109180128 7626 moe. VU++xIxSMqa+w4pemMLCAjfzN5+18fipx2ePzuPHXPqvc3ZqOxhuuT2J SyDZ8j3b8P/HvbWfil7omp1OCvQvRJMX+O5B9QANi5tULJhkULNQfmGz to7RRf+xvGXU5aLKKLJyU6+xTj1PnaEH+pFb3aVIAvE4wpctgYfLYFKu ZIQ4nR7pMd51sA+etCco8lVsBaZYAHrjRPE4xotVSSETCA==

;; Query time: 130 msec
;; SERVER: 168.63.129.16#53(168.63.129.16)
;; WHEN: Sat Nov 09 19:12:56 UTC 2024
;; MSG SIZE  rcvd: 293

DNSSECに必要な鍵の管理もAzure DNS側でしてくれますし、ポータルでも操作できるようになったら割と手軽にDNSSECできるんじゃないでしょうか?
書いててKeyTagとかダイジェストの値は公開情報なんでマスクしなくてもよかったなぁというのと、ドキュメントだと親ゾーンに設定する値が分かりにくかったな(delegationSignerInfoの値)という感じ。

コメントを残す