権威DNSサービス調査
DPF-APIを使ってみました！
2022年4月22日㈱ミライコミュニケーションネットワーク
田中温子

自己紹介
• 名前田中温子• 所属

株式会社ミライコミュニケーションネットワーク
技術部運用チームチーフ• DNSとの関わり

2005年
2018年

デージーネット入社、DNSと出会う
ミライコミュニケーションネットワーク入社
自社DNSサーバの構築、運用
2021年11月 DNSOPS.JPの権威DNSサービス調査に参加

2

アジェンダ• DPF-APIとは• 調査のきっかけ• DPF-APIを使った更新処理の流れ• やってみた• アクセストークン取得• 情報取得• 更新• 使ってみた感想
3

DPF-APIとは？
• IIJ DNSプラットフォームサービス（略してDPF）のDNSレコードやゾーン情報等をプログラムから操作するためのAPI• IIJ IDサービスの契約が必要（月額0円～）

4

調査のきっかけ• 権威DNSサービスのGUIでできないことがある• 時間指定で自動的にレコード反映（20時に新しいメールサーバに切り替えて、サイトを11時にリニューアルしたい、とか）• BINDのGENERATEの代わりに多数のレコードを追加

APIを使えばできるのか調査
5

DPF-APIを使った更新処理の流れ
最初だけIIJ-ID
アクセストークン
取得

GET(ゾーンID取得)

更新リクエストをするサーバ

POST(レコード更新)
GET(処理結果確認)
GET(ゾーンID取得)
GET(処理結果確認)

IIJ DNS
プラット
フォーム

アクセストークン取得• IIJ-IDのGUIへログイン• アクセストークンを発行• アクセストークンごとに権限を設定可能• 有効期限は1～43800時間(5年)で設定可能• ブラウザ上に1度だけ表示

7

情報取得
• アクセストークンを指定してGETリクエストを送る
Request
GET /dpf/v1/zones HTTP/1.1
Host: api.dns-platform.jp
Authorization: Bearer
eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImtleV8wMDAwMDAwMDAwIn0.eyJpc3MiOiJodHRwczpcL1wvd3d3LmF1dGguaWlqLmpwXC9vcCIsInN1YiI6IjljOGMwODY0LWYzMGMtNDQzMi04ZmI5LThlYzQ5ZjJiYjZmMCIsImF1ZCI6Imh0dHBzOlwvXC93d3cuZG5zLXBsYXRmb3JtLmpwXC8iLCJleHAiOjE2NDMwMjM2ODUsImlhdCI6MTY0MjE1OTY4NSwic2NvcGUiOlsiZHBmX3JlYWQi
アクセストークン
LCJkcGZfd3JpdGUiLCJkcGZfY29udHJhY3QiXSwidGVuYW50IjoiYXNpaWRhLTAwMDAxNTA1NDgzMkMiLCJyYW5kIjoiNTc5ZDg5YWVlMGYyN2IyYWFjNDI1Mjk0NzU0ZTU3NGEifQ.r2N8d7jLd1YsO7e1B0HXVs0alW4ItS22tcyMFmVAm12G1i92Xx7i3ZoLtlAMwL_rgXDtcuXY1aPxzrdu01ZpXHCHOPVA35qXG26YQ1Dhq6dbbsJ1ora-Mjwu81P6xAnVxcJVLJWXEz2n0MsI3qvihHQ7cX3yFQR_8kxP0HRZP8zfs5ClVvYQUGOukRJBwvj55Wd7ZEPm73tFxzXdKXzduEgnGfLXZjIxDO48rPWXvujdbGJNwHoMJ1JhjtEKqatyOCgMFF8zAHrFkmiXtBCzYPdW7wVyizFhHWfS3b_3_MpegYyZ_3tubBJiX3G83m1IsQV39iuH48D***************
Content-Type: application/json; charset=UTF-8

Responce{"request_id":"6451906f8c80dfd62f809c18861ceb26","results":[{"id":"mwvfayhgo9****”,“common_config_id”:6198,“service_code”:”dpm1465****","state":2,"favorite":2,"name":"olab-sun-ii.jp.","network":null,"description":""}]}

8更新(1)• アクセストークンを指定してPOSTリクエストを送る
RequestPOST /dpf/v1/zones/mwvfayhgo983il/records HTTP/1.1
ゾーンID
Host: api.dns-platform.jp
Authorization: BearereXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImtleV8wMDAwMDAwMDAwIn0.eyJpc3MiOiJodHRwczpcL1wvd3d3LmF1dGguaWlqLmpwXC9vcCIsInN1YiI6IjljOGMwODY0LWYzMGMtNDQzMi04ZmI5LThlYzQ5ZjJiYjZmMCIsImF1ZCI6Imh0dHBzOlwvXC93d3cuZG5zLXBsYXRmb3JtLmpwXC8iLCJleHAiOjE2NDMwMjM2ODUsImlhdCI6MTY0MjE1OTY4NSwic2NvcGUiOlsiZHBmX3JlYWQi
アクセストークン
LCJkcGZfd3JpdGUiLCJkcGZfY29udHJhY3QiXSwidGVuYW50IjoiYXNpaWRhLTAwMDAxNTA1NDgzMkMiLCJyYW5kIjoiNTc5ZDg5YWVlMGYyN2IyYWFjNDI1Mjk0NzU0ZTU3NGEifQ.r2N8d7jLd1YsO7e1B0HXVs0alW4ItS22tcyMFmVAm12G1i92Xx7i3ZoLtlAMwL_rgXDtcuXY1aPxzrdu01ZpXHCHOPVA35qXG26YQ1Dhq6dbbsJ1ora-Mjwu81P6xAnVxcJVLJWXEz2n0MsI3qvihHQ7cX3yFQR_8kxP0HRZP8zfs5ClVvYQUGOukRJBwvj55Wd7ZEPm73tFxzXdKXzduEgnGfLXZjIxDO48rPWXvujdbGJNwHoMJ1JhjtEKqatyOCgMFF8zAHrFkmiXtBCzYPdW7wVyizF
hHWfS3b_3_MpegYyZ_3tubBJiX3G83m1IsQV39iuH48D***************
Content-Type: application/json; charset=UTF-8{"name":"apitest","rrtype":"A","rdata":[{"value":"210.172.222.136"}]}

更新内容をPOST

Responce

更新処理は非同期リクエスト
レスポンスは結果を確認するためのURLが返る{"request_id":"5ca1985700f455220aa28b3c78d6****","jobs_url":"https://api.dns-platform.jp/dpf/v1/jobs/5ca1985700f455220aa28b3c78d6****"}

9更新(2)• POSTのレスポンスで返されたURLへGETリクエストを送る
Request
GET /dpf/v1/jobs/5ca1985700f455220aa28b3c78d6bd65 HTTP/1.1
レスポンスで返されたURL
Host: api.dns-platform.jp
Authorization: Bearer
eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImtleV8wMDAwMDAwMDAwIn0.eyJpc3MiOiJodHRwczpcL1wvd3d3LmF1dGguaWlqLmpwXC9vcCIsInN1YiI6IjljOGMwODY0LWYzMGMtNDQzMi04ZmI5LThlYzQ5ZjJiYjZmMCIsImF1ZCI6Imh0dHBzOlwvXC93d3cuZG5zLXBsYXRmb3JtLmpwXC8iLCJleHAiOjE2NDMwMjM2ODUsImlhdCI6MTY0MjE1OTY4NSwic2NvcGUiOlsiZHBmX3JlYWQi
アクセストークン
LCJkcGZfd3JpdGUiLCJkcGZfY29udHJhY3QiXSwidGVuYW50IjoiYXNpaWRhLTAwMDAxNTA1NDgzMkMiLCJyYW5kIjoiNTc5ZDg5YWVlMGYyN2IyYWFjNDI1Mjk0NzU0ZTU3NGEifQ.r2N8d7jLd1
YsO7e1B0HXVs0alW4ItS22tcyMFmVAm12G1i92Xx7i3ZoLtlAMwL_rgXDtcuXY1aPxzrdu01ZpXHCHOPVA35qXG26YQ1Dhq6dbbsJ1ora-Mjwu81P6xAnVxcJVLJWXEz2n0MsI3qvihHQ7cX3yFQR_8kxP0HRZP8zfs5ClVvYQUGOukRJBwvj55Wd7ZEPm73tFxzXdKXzduEgnGfLXZjIxDO48rPWXvujdbGJNwHoMJ1JhjtEKqatyOCgMFF8zAHrFkmiXtBCzYPdW7wVyizF
hHWfS3b_3_MpegYyZ_3tubBJiX3G83m1IsQV39iuH48D***************
Content-Type: application/json; charset=UTF-8

Responce{"request_id":"4343959239a6fb55fe78e2fdb788****","status":"SUCCESSFUL","resources_url":"https://api.dns-platform.jp/dpf/v1/zones/mwvfayhgo****/records/rr875tnkw9****"}URLへGETをすると処理結果が返る10更新(3)• APIでレコード更新をして、反映をGUIから行うことも可能
ココで反映

11

使ってみた感想• わかりやすいマニュアルがあり使用するハードルは高くない• 沢山のレコードをプログラムで追加するのには便利• アクセストークンは定期的に更新するのがよい• 例えば有効期限を5年間にすると5年後に動かなくなる時限爆弾ができあがる• 情報取得以外は（一応）非同期なので、理解した上で使う必要はある• 私が色々やってみた感触では即時反映• 反映を自動化するにしても、正しく切り替わったかの確認はやっぱり必要• DNSSECなど時間がかかる処理もあるそう
12