Google Cloudにも Cloud DNS があり、DNSサーバーをホスト可能です。
Let’s Encryptのワイルドカード証明書取得のためのCertbotプラグインもCloud DNSをサポートしています。
Cloud DNSの設定
まず、Google Cloud DNS上に既存のDNS情報(ドメインとIPアドレスの組み合わせ)を再現します。
Cloud DNSは Google Cloudコンソール で設定可能です(ネットワークサービス -> Cloud DNS)。
ゾーン作成
対象ドメイン(example.comなど)を指定してゾーンを作成します。
レコードセットを追加
既存のDNS設定を参照して、Aレコード・MXレコード・CNAMEレコードなど、使用しているドメイン設定をすべてGoogle Cloud DNSのレコードセット設定に記載します。
- ルートドメインの設定に@を指定する必要はない
- ドメイン文字列には、基本的に末尾のピリオドも必要
- TXTレコードでスペースの含まれた文字列はダブルクオートで囲む必要あり
- TTLは切り替えを反映する時間のため、動作確認がとれてから長い時間に変更すると安全
ネームサーバー変更
レジストラ(ドメインを購入したサービス)の管理画面で、ネームサーバー変更操作を行います。
ネームサーバーに記載すべきドメイン文字列は、Google Cloudのコンソール画面に掲載されているものをそのまま書き写します。
Google Cloud DNSのNSサーバーはゾーンごとに異なり、ns-cloud-x1.googledomains.com.のようなアドレスが割り当てられます。
- 複数のレコードが掲載されており、すべて書き写す
- 基本的に末尾のピリオドも必要
なお、実際のネームサーバー切り替えタイミングは即時ではありません。既存のTTL設定しだいで時間がかかります。
DNSの状態確認
MacOSやLinuxを利用していれば、ターミナルからdigコマンドで現在のDNS設定値を確認できます。
たとえば、dig @8.8.8.8 ns example.com というコマンドではネームサーバーを調べます。8.8.8.8はGoogleのPublic DNS上の掲載情報を参照しています。
ただし、digはあるDNSサーバーに問い合わせているだけなので、このコマンドで期待する結果になったとしてもDNS全般が新しい設定に切り替わるまで、なお時間がかかる可能性があることには注意しましょう。
既存ネームサーバーの削除
ネームサーバーが安定的にCloudDNSを参照している状態になれば、既存のネームサーバーを削除できます。
既存のネームサーバーは参照されない状態になるため、もともと追加コストがかかっていないサービス(レジストラの付帯サービスを利用していた場合など)であればあわてて削除しなくても特に問題はありません。
Let’s Encryptのワイルドカード証明書発行
無料SSL証明書のLet’s EncryptがACMEv2プロトコルでワイルドカード証明書発行に対応しました。サブドメインを羅列する必要がありません。
certbotクライアントの 公式ドキュメント のDNS pluginsに”Doing domain validation in this way is the only way to obtain wildcard certificates from Let’s Encrypt.” と記載されているとおり、ワイルドカード証明書を発行するには、DNS上で認証する必要があります。
Let’s Encrypt証明書の有効期限は3ヶ月に限定されており、更新の自動化を考慮に入れると、certbotのDNSプラグインが対応しているネームサーバーの利用が前提となります。
Google Cloud DNSやAmazon Route53などが対象となっています
certbotで証明書更新
ワイルドカード証明書取得には、DNSプラグインを利用できるcertbotが必要です。
CertbotのDockerhubリポジトリ
で各種dockerイメージが提供されています。
たとえばGoogle Cloud DNS用の場合、
certbot/dns-google
を利用します。
certbotコマンド例は以下のようなものになります。
$ certbot certonly --dns-google \
--dns-google-credentials </path/to/service-account.json> \
--non-interactive --force-renewal \
--agree-tos -m <[email protected]> \
-d <example.com> -d <*.example.com>
dns-googleプラグインにより–dns-googleオプションが利用可能になっています。
オプションの設定値は、
プラグイン別リファレンス
に掲載されています。
ACME認証の過程でDNSのtxtレコードを書き換える動作となるため、APIクレデンシャルの指定が必要になります。(Google Cloudのクレデンシャルについては、 別記事 参照)
なお、dns-googleの実装はServiceAccountのproject内でCloudDNSのマネージドゾーンを検索するため、CloudDNSの定義と同一プロジェクトのServiceAccountである必要があります。ServiceAccountに別プロジェクトのCloudDNS操作権限を追加してもエラーになるため注意が必要です。
証明書取得対象のドメインは-dオプションで指定でき、ベースドメインと*サブドメインの2種類指定しました。
ワイルドカード証明書のメリット
ワイルドカード証明書を取得しておくことで、新規ドメイン追加の際の手間が1つ減ります。
また、Javascriptのアプリケーション開発では、有効な証明書を前提とする機能が増えてきており、実在するドメインと干渉しないサブドメインの証明書を取得できるのは便利です。