IDCF テックブログ

IDCF テックブログ

クラウド・データセンターを提供するIDCフロンティアの公式テックブログ

IDCFクラウドDNSに新しいレコードタイプを追加した話

はじめまして。クラウドSRE部の篠田です。IDCFクラウドDNSを担当しています。

10/15にIDCFクラウドDNSに新しいレコードタイプであるALIASレコードとCAAレコードをリリースしましたので、その紹介をさせてください。

f:id:shinoda-idcf:20191016183020p:plain

新しいレコードタイプの紹介

ALIASレコード

ALIASレコードは、値に指定したFQDNを名前解決して得られるIPアドレスが直接返却されるレコードです。

たとえば、以下のようなレコードが存在するとします。

www.example.com.     IN   A   93.184.216.34
alias.idcfcloud.com.     IN   ALIAS   www.example.com.

このとき、alias.idcfcloud.com93.184.216.34を返します。

$ dig alias.idcfcloud.com +shor
93.184.216.34

ドメインを別のドメインへ転送できるため、ALIASレコードの動作はCNAMEレコードと似ています。大きく違うのは、CNAMEではできなかったZone Apexの転送が可能ということです。

CNAMEレコードは他のレコードと共存できない仕様のため、Zone Apexには必ずNSレコードが必要なことから、CNAMEレコードをZone Apexに対して設定することはできませんでした。このような仕様はALIASレコードにはありません。

しかし、Zone Apexのドメイン転送はフィッシング詐欺などに悪用されてしまう可能性が比較的高いです。そのため、ALIASレコードの値には自身の所有するホストのFQDNしか指定することができないような制約を設けました。現在はILBとCDNのFQDNのみ指定することができます。

CAAレコード

CAAレコードは、SSLサーバ証明書の発行を許可する認証局を指定するレコードです。

たとえば、以下のようなCAAレコードを作成することで、www.example.comのLet's Encryptの証明書・ワイルドカード証明書の発行が許可されます。同時に、Let's Encrypt以外の認証局の証明書の発行は拒否されます。証明書発行が拒否された場合、それがtest@idcf.com宛てにメール通知されます。

www.example.com.     IN   CAA   0 issue "letsencrypt.org"
www.example.com.     IN   CAA   0 issuewild "letsencrypt.org"
www.example.com.     IN   CAA   0 iodef "mailto:test@idcf.com"

2019年10月現在、CAAレコードが存在しなくてもSSLサーバー証明書の発行は可能です。そのため、証明書を発行するという用途ではCAAレコードを作成するということは少ないと思います。

CAAレコードが効果を発揮するのは、証明書の発行を拒否できるという点です。これにより、第三者に勝手に証明書を発行されるということを防ぐことができます。上述のCAAレコードではLet's Encrypt以外の認証局からの証明書の発行を拒否できますが、すべての証明書発行を拒否する場合は以下のようにCAAレコードを作成します。

www.example.com.     IN   CAA   0 issue ";"
www.example.com.     IN   CAA   0 issuewild ";"
www.example.com.     IN   CAA   0 iodef "mailto:test@idcf.com"

新しいレコードタイプの作成方法

管理画面

DNSの管理画面にアクセスします。

f:id:shinoda-idcf:20191106134527p:plain

レコードを作成するゾーンを選択します。

f:id:shinoda-idcf:20191106134203p:plain

レコード登録画面を開きます。

f:id:shinoda-idcf:20191106134416p:plain

レコード登録画面のタイプの欄にALIAS, CAAのボタンが追加されています。こちらをクリックすることでそれぞれの登録フォームを表示することができます。画面上には各設定値に指定できる値の制約条件を記載していますので、参考にしてください。

f:id:shinoda-idcf:20191016185103p:plain

ちなみに、制約条件の一覧は仕様書にまとまっています。今回のリリースに併せてこちらもアップデートしています。

API

APIからの作成も可能です。
以下はidcfcloud-cliを利用して作成したものです。CLIは簡単でいいですね。
CAAの値にはダブルクオーテーションが必要なので、JSONで記述する場合にエスケープが必要です。

$ idcfcloud dns create_record XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX '{"name":"alias.example.com","type":"ALIAS","content":"alias.public.ilb.jp-west.idcfcloud.net","ttl":"3600"}'
{
  "status": 200,
  "message": "",
  "data": {
    "uuid": "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY",
    "name": "alias.example.com",
    "type": "ALIAS",
    "content": "alias.public.ilb.jp-west.idcfcloud.net",
    "ttl": 3600,
    "description": "",
    "created_at": "2019-10-16T19:08:17+09:00",
    "updated_at": "2019-10-16T19:08:17+09:00"
  }
}
$ idcfcloud dns create_record XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX '{"name":"caa.example.com","type":"CAA","content":"0 issue \"ca.example.net\"","ttl":"3600"}'
{
  "status": 200,
  "message": "",
  "data": {
    "uuid": "ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ",
    "name": "caa.example.com",
    "type": "CAA",
    "content": "0 issue \"ca.example.net\"",
    "ttl": 3600,
    "description": "",
    "created_at": "2019-10-16T19:11:17+09:00",
    "updated_at": "2019-10-16T19:11:17+09:00"
  }
}

※一部情報はマスクしています

最後に

今回の新規レコードタイプ追加ですが、かなり前から計画していたものをやっとリリースできたというものでした。特にALIASレコードの方はお客さまからのご要望の声も多く、ずっと提供したいと思っていた…と聞いています。

はい、実は私はIDCFクラウドDNSを担当するようになってまだ1年未満の新入りなのです。そんな私が今回のプロジェクトをメインで任されたということで、すごく大きな想いを背負った仕事だったのですが、責任感を持って取り組むことができたと達成感を感じています。

また、同時期に私は別件にも携わっていたのですが、こちらもこちらで私にとっては初めての経験でかなり苦労してしまい、そんな大変なプロジェクトを掛け持ちでやる切ることができたことに安堵しています。

DNSはWebシステムを支える大黒柱。そんな緊張感と責任感を持って、引き続きお客さまに満足していただけるサービスを提供していきたいと思っています。

Copyright © IDC Frontier Inc.