はじめに
AWS CloudFront が Amazon Route 53 の HTTPS DNS エイリアスレコードをサポートしました。これにより接続クライアントは、DNS による名前解決フェーズで HTTP プロトコルを見つけることができます。従来の DNS レコードと HTTPS レコードによる名前解決と接続確立フローの違いや脆弱性の軽減については、参考情報にあげている AWS ブログが参考になります。
この記事では、実際に自分の Web サイトで使用している CloudFront と Route 53 の HTTPS レコードを設定してみます。
エイリアスレコードを使用しない場合は、Amazon Route 53 で新しくサポートされた HTTPS リソースレコードで HTTP/3 対応を DNS レベルで最適化してみたの記事が参考になります。
参考情報
環境構築
Route 53 のエイリアス HTTPS レコードを有効にするためには、CloudFront ディストリビューションの設定を行います。その後、Route 53 の HTTPS DNS エイリアスレコードを作成します。
CloudFrontディストリビューションの設定
CloudFront ディストリビューションの設定を行います。 Supported HTTP Versions
で HTTP/2 または HTTP/3 、もしくはその両方を有効にします。ここでは、両方を有効にしました。
Route 53 のエイリアスレコードの作成
Route 53 のエイリアスレコードを作成します。CloudFront ディストリビューションの設定で HTTP/2 または HTTP/3 、もしくはその両方が有効になっていると、Route 53 の HTTPS DNS エイリアスレコードを作成できます。
入力内容:
- レコード名: 空 (サブドメインなしの
rev-system.net
に対して HTTPS DNS エイリアスレコードを作成するため) - レコードタイプ: HTTPS
- エイリアス: 有効
- トラフィックのルーティング先: CloudFront ディストリビューションへのエイリアス
- ルーティングポリシー: シングルルーティング
設定を保存すると、Route 53 の HTTPS DNS エイリアスレコードが作成されます。
確認
❯ dig rev-system.net HTTPS +noall +answer
rev-system.net. 60 IN HTTPS 1 . alpn="h2,h3"
HTTPS DNS レコードフォーマットは以下のようになります。
<domain> <TTL> IN HTTPS <priority> <target> <parameters>
今回の設定では、それぞれ以下のようになります。HTTP/2 と HTTP/3 を有効にしているので、parameters は alpn="h2,h3"
となります。たとえば、HTTP/2 のみを有効にした場合は、 alpn="h2"
となります。参考記事では TTL:キャッシュ時間 (秒単位) (300-86400)
となっていますが、Route 53 のエイリアスレコードの TTL は 60 秒固定で変更はできません。
- domain: rev-system.net.
- TTL: 60
- priority: 1
- target: .
- parameters: alpn="h2,h3"
HTTPS レコードに対応していないクライアント対策
参考記事内の CloudFront HTTPS DNS レコードと HTTP/3:安全な名前解決と接続確立フロー
にあるように、接続クライアントは HTTPS と A/AAAA レコードで問い合わせを行います。そのため、HTTPS レコードでの名前解決に失敗した場合あるいは未対応のクライアントは、A/AAAA レコードで名前解決を行います。2022年の IIJ Engineers blog の記事でも同様の記載があります。
HTTPS レコードによる名前解決に対応していない接続クライアントや DNS キャッシュサーバーを考慮する場合は、従来通り A/AAAA レコードも併記する必要があります。
例:
❯ dig rev-system.net A +noall +answer
rev-system.net. 60 IN A 143.204.80.27
rev-system.net. 60 IN A 143.204.80.114
❯ dig rev-system.net AAAA +noall +answer
rev-system.net. 60 IN AAAA 2600:9000:2138:9c00:4:cea:ca40:93a1
rev-system.net. 60 IN AAAA 2600:9000:2138:de00:4:cea:ca40:93a1
まとめ
CloudFront ディストリビューションに Route 53 の HTTPS DNS エイリアスレコードを設定し、名前解決の結果を確認しました。CloudFront ディストリビューションの Supported HTTP Versions
の設定により、HTTPS DNS エイリアスレコードを作成できました。
HTTPS レコードに対応していない接続クライアント対策もあるため、大きな影響なく HTTPS レコードを導入できるのではないでしょうか。