AWS Route53 で DNSSEC を使う

こんにちは。re:Invent 2020 最終日の本日(JST基準)、[Route53がDNSSECのサポートを始める](https://aws.amazon.com/ko/about-aws/whats-new/2020/12/announcing-amazon-route-53-support-dnssec/)という発表がありました。AWSはDNSSECはやらない方針だという噂を聞いたことがあるので、アメリカで何か流れが変わってきたのかな？と推測しつつ、早速試してみました。Route53のDNSSEC設定方法と検証結果をみなさまと共有します。

## 目次
- 前提
- 設定
- 検証
- RRSIGについて解説
- 参考資料

## 前提
- ドメイン: uu1.jp (検証用に持っている本物のドメインです)
- ドメインレジストラー: JPRS

## 設定

### 1. AWS Route53でDNSSEC署名の有効化

1. Route53のホストゾーンをクリックすると「DNSSEC署名」という新しいタブメニューが出来ていました。それをクリックします。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326401/d1482ad9-51ae-0d8e-7d15-ea24e52bbc6a.png)

2. 右上の「DNSSEC署名を有効化する」をクリックします。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326401/f8db9dab-b8e8-4ed6-694f-6cd7fc10bc7d.png)

3. キー署名キー(KSK)を作ります。まず名前を付けて、
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326401/867b2dbe-0b53-0517-4293-efdbf3a1f15f.png)

4. AWS KMS(Key Management Service)のCMK(Custom Master Key)を作成し、有効化します。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326401/b09fe4fe-ae26-ee2d-0cbe-c8eb08902425.png)

5. キー署名キー(KSK)がアクティブになったことを確認します。数分かかります。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326401/09d84c9d-983c-ab34-67de-4a37e9ef419d.png)

6. アクティブになったら「DSレコードを作成するための情報を表示」をクリックします。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326401/7b2943fd-6725-842f-57f3-bc6a52baeb0e.png)

7. 「信頼チェーンを確立情報 > 別のドメインレジストラ」でDSレコードを確認し、コピーしておきます。AWS側の作業はこれで終わりです。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326401/28eeeca2-09f7-65d2-0f94-975f12372d92.png)


### 2. ドメインレジストラーでDSを登録

ドメインレジストラーのドメインのNameserver設定メニューに入り、上記でコピーしたDSレコードを追加します。
ここは、利用しているドメインレジストラー毎にメニューやUIで差があるので割愛します。

## 検証

### 1. digで引いてみる
```console
# dig +dnssec uu1.jp soa

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> +dnssec uu1.jp soa
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13724
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;uu1.jp.                                IN      SOA

;; ANSWER SECTION:
uu1.jp.                 840     IN      SOA     ns-852.awsdns-42.net. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
uu1.jp.                 840     IN      RRSIG   SOA 13 2 900 20201221022147 20201221000647 4359 uu1.jp. koEqk+5b7nmjMyroGnVprJTYl9IVLfLyoYHowQzbDDjFC0rZkbfu2WpR Jl0scud4UMDKlcicj/jnCzBpJBMetw==
```

### 2. drillで引いてみる
```console
# drill -r named.root -k root.key -S uu1.jp soa
;; Number of trusted keys: 1
;; Chasing: uu1.jp. SOA

DNSSEC Trust tree:
uu1.jp. (SOA)
|---uu1.jp. (DNSKEY keytag: 11110 alg: 13 flags: 256)
    |---uu1.jp. (DNSKEY keytag: 7052 alg: 13 flags: 257)
    |---uu1.jp. (DS keytag: 7052 digest type: 2)
        |---jp. (DNSKEY keytag: 18321 alg: 8 flags: 256)
            |---jp. (DNSKEY keytag: 46369 alg: 8 flags: 257)
            |---jp. (DS keytag: 46369 digest type: 2)
                |---. (DNSKEY keytag: 26116 alg: 8 flags: 256)
                    |---. (DNSKEY keytag: 20326 alg: 8 flags: 257)
;; Chase successful
```

### 3. dnsvizでAnalyzeしてみる
![uu1.jp-2020-12-18-07_24_34-UTC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326401/5356776f-6a18-11a4-f149-753abd4b8db0.png)

ちゃんとチェーンが出来ています。素晴らしい。


## RRSIG署名について解説
### 有効期間
ふと、RRSIGの有効期間を見ると、かなり短いですね。一般的には1週間とか2週間で運用するのが多いのかと思っていましたが、2時間くらいになっています。

```console
# dig @ns-48.awsdns-06.com. +dnssec uu1.jp soa
...
;; ANSWER SECTION:
uu1.jp.                 900     IN      SOA     ns-852.awsdns-42.net. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 864
uu1.jp.                 900     IN      RRSIG   SOA 13 2 900 20201218062631 20201218041131 11110 uu1.jp. Qzkzm...(略)
```
有効期間が2020年12月18日 04:11:31 ～ 2020年12月18日 06:26:31 です。期間が2時間15分です。
TTLが15分と短いのでいいですが、長いとどうなるのでしょうか。1日にしてやってみましょう。

```console
# dig @ns-48.awsdns-06.com. +dnssec ttl-86400.uu1.jp a
...
;; ANSWER SECTION:
ttl-86400.uu1.jp.       86400   IN      A       1.1.1.1
ttl-86400.uu1.jp.       86400   IN      RRSIG   A 13 3 86400 20201219061446 20201218041446 11110 uu1.jp. B9RoA...(略)
```

2020年12月18日 04:14:46 ～ 2020年12月19日 06:14:46 になりました。期間が1日と2時間になりました。
なるほど。TTL + 2時間 がRRSIGの有効期間ということのようです。

### 署名タイミング
署名の有効期間開始日時もちょっと気になります。現在時刻になっているような気がします。
試してみましょう。

```console
# dig @ns-48.awsdns-06.com. +norec +dnssec uu1.jp soa
...
;; ANSWER SECTION:
uu1.jp.                 900     IN      SOA     ns-852.awsdns-42.net. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
uu1.jp.                 900     IN      RRSIG   SOA 13 2 900 20201218063622 20201218042122 11110 uu1.jp. +3v2yqQSUmPANtvqEmLma5dtrauehT2zEP+5nR5H5Z2P0YUf5jodAE+I PSt8RRTN96BqE4gyxwPrJEAh0EAq8Q==
```
2秒後

```console
# dig @ns-48.awsdns-06.com. +norec +dnssec uu1.jp soa
...
;; ANSWER SECTION:
uu1.jp.                 900     IN      SOA     ns-852.awsdns-42.net. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
uu1.jp.                 900     IN      RRSIG   SOA 13 2 900 20201218063624 20201218042124 11110 uu1.jp. YH5Q+JGAK9KkXiQCt1Wio7AlvSPG2iKu9Yx5jB3sJtd3Qq4CSj25O+34 obVpzeuSaACuckcyDOWLntaln8iywA==
```

やはり、現在時刻ですね。
あらかじめ署名したZoneを用意するのではなく、Queryが来るたびに署名しているようです。
たくさんあるDNSサーバーにZSKのPrivate Keyを使えるようにするのが大変そうですが、さすがAWSですね。
### DNSKEYの署名
レコードセットの中でも、DNSKEYだけは、ZSKではなくKSKで署名されます。
こちらはどうでしょうか。

```console
# dig @ns-48.awsdns-06.com. +norec +dnssec uu1.jp dnskey
...
;; ANSWER SECTION:
uu1.jp.                 3600    IN      DNSKEY  256 3 13 4rIKNvbTPUfKYk1nJEQvtChbIheFCjpukQlt35iKoKwMag32hEhc124h h6qxQRbrXG7JC4HE0AJyo8+m5SIAYA==
uu1.jp.                 3600    IN      DNSKEY  257 3 13 /FcqSpmG5z0DXzFOBnm5vGGweJUZ1BewWNZ7zLf5amARaEU1HTcKjGLT n6hmBND92WkjI4tkfSkFeRcVJuB4BQ==
uu1.jp.                 3600    IN      RRSIG   DNSKEY 13 2 3600 20201218090000 20201217230000 7052 uu1.jp. bUofVksYDT3Z5/H5OwS3vP7bb8X3KFq3vgEq5C/GwS8zlIVeGOvBDiy4 te+Ah1x2j3FbJ15M/kM3Zc5SN0gneA==
```

こちらは毎回署名するわけではなさそうですね。


## 参考資料

- [Announcing Amazon Route 53 support for DNSSEC](https://aws.amazon.com/ko/about-aws/whats-new/2020/12/announcing-amazon-route-53-support-dnssec/)
- [AWS Route53 - ドメインの DNSSEC の設定](https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/domain-configure-dnssec.html)
- [DNS, DNSSECの仕組み](https://qiita.com/qualitia_cdev/items/7d6be1cc56372c5c94f2)
- [DNSでもセキュアにしたい](https://qiita.com/qualitia_cdev/items/44a4b4289680649ea402)