certman作ってACMの証明書の作り方を忘れる予定が、各方面からの指摘で詳しくなりつつあるマネジメントコンソールではできないこともできるようになってきた
— k1LoW (@k1LoW) 2017年4月12日
SSL証明書を作っては消し作っては消し
— k1LoW (@k1LoW) 2017年5月2日
日本だけでなく海外の方にも(どこで見つけたんだ?)使って頂いていて、ACMやDNSにおける知識を教えてもらいつつ修正を繰り返してとりあえず一段落した感じです。
前回 からのアップデートをCHANGELOG代わりに記録しておきます。
--remain-resources
オプションを追加した
証明書の自動更新の条件に当てはまらないときのための対応です。
ACMを取得するために利用したRoute53/SES/S3の設定を残しておくというものです。
実はこの条件についてリクエストをもらうまで知りませんでした。ありがたいです。
これをきっかけにできるだけ将来にわたってリソースを残しても問題がなくなるように、 v0.7.0までにわたっていろいろ改修を加えました。
各リージョンでACMを発行しても問題がないようにした
当初はRoute53でも使える証明書が発行できる us-east-1 固定でした。
リクエストをもらって各リージョンでも使えるようにしました。
その際に不可解な現象に悩まされ(あるリージョンではうまくいくけどあるリージョンではうまくいかない)、 muranushi さんにかなり付き合ってもらいながら改善できました。
ちなみに不可解な現象というのはS3のバケット名のバリデーションがリージョンごとに違ったというものでした。
ワイルドカード指定のドメインや www.
なドメインに対応した
やっぱり要望がありました。Pull Requestまでいただきました。
まあ、そうですよねー。
認証用メール用のドメイン(MXレコードの配置)についていろいろなパターンに対応した
認証メールを受け取る方法がいろいろあるので(これもあまり知らなかったです)、いろいろとアドバイスをもらいながら修正をしました。
- 基本は指定のドメイン (
blog.example.com
) でMXレコードとルール (admin@blog.example.com
) を配置 - ワイルドカードドメイン (
*.example.com
) やwww.
なドメイン (www.example.com
) はルートドメインでMXレコードとルール (admin@example.com
) を配置 - サブドメイン (
blog.example.com
) ですでにCNAMEが指定されていたら、ルートドメインでMXレコードとルール (admin@example.com
) を配置
S3/SESのリージョンをCertman側で指定するようにした
SESは全てのリージョンにはないので、SESがないリージョンでACMの証明書を作成する場合SESは別のリージョンになります。
最初は「別のリージョンにする必要があれば」us-east-1にするような実装だったのですが、これを「ドメイン名をハッシュ関数に渡して、Certman側でSES/S3のリージョンを指定する」ようにしました。
これはCertmenを作成する際に、Certman側でSES/S3のリージョンを知る方法が必要だったのと、リージョンが分散されているほうが有効だと判断したためです。
SESのReceipt Ruleを作成する際に、既存のActive Receipt Rule Setに追加するようにした
SESのActive Receipt Rule Setは各リージョンで1つしか設定できません。当初は新しいReceipt Rule Setを作成してそれに切り替えてACMの認証メールを受け取っていました(終わったら既存のReceipt Rule Setに戻す)。
しかし、これだと認証メールを受け取っている間、既存のReceipt Rule SetにあったRecipt Ruleが動かないという問題あります。
さらに、 --remain-resources
を指定してリソースを残してしまうと既存のReceipt Rule Setが適用されないままになります。
なので、v0.7.0からCertman用Receipt Ruleは既存のActive Receipt Rule Setに追加するように修正しました。
認証メールの再送に対応した
CertmanではACMの認証に必要なリソースを一気に作るので、ときどき認証メールを受け取れないタイミングがあります。 なので、ACMの認証メールを一定間隔で再送するようにしました。
今後対応したいこと
- 最初のpromtをスキップできようにする(
-y
オプション) - 既存のACM証明書の認証メール取得用AWSリソースを後から作成できるようにする ( コマンド名決まっていない )
- 証明書のインポートに対応する (
import
コマンド ) - 証明書のステータスを取得する (
status
コマンド )
Certmen (ACMの証明書全てを管理する何か) が必要かどうかはいろんな人からフィードバック貰いたいところですね。
ACMの証明書取得方法を忘れたい人は是非利用してみてください。