Herokuは、セキュリティを高めるための機能を多く持っています。今回、その中から、カスタムドメインでのSSL運用を自動化する「Automated Certificate Management」(ACM)と、Herokuアプリケーションを隔離したネットワークへ配置できる「Heroku Private Spaces」について説明します。
SSLの運用をカンタン自動化 “ACM”を使ってみよう
昨今、セキュリティの強化の一つの手段として、「常時SSL(Always On SSL)」が推奨されています。これは、重要な情報を入力する一部のWebサイトだけではなく、企業や団体の持つWebサイトすべてをSSL化して、安全性を高めるものです。
とは言え、SSLを適用するためには、SSL証明書を取得して、それを運用する手間がかかります。最近、Let’s Encryptのような無料のSSL証明書を発行するサービスも出てきたことで、SSL証明書を取得しやすくなりました。しかし、Let’s Encryptでは、更新期間は最大でも90日間と、1年単位で発行してくれる認証機関と比較すると、短く感じます。その分、証明書を更新する頻度も増え、運用に手間がかかるともいえます。SSL証明書の期間が短いほうが、より安全だという話もありますが、運用者から見たとき、まず運用の手間が増えることを懸念するでしょう。
Herokuでは、カスタムドメインを設定する際に、Let’s Encryptの証明書を使って、自動的にSSL証明書を更新する機能を「標準で」持っています。この機能をACM(Automated Certificate Management)といいます。この機能は、有償で提供されるHobbyやProfessional Dyno(Dynoのスペックと料金体系)で利用できます。
ACM を設定してみよう
どれほどカンタンにACMを設定することができるか、実際の画面とともに紹介します
まず、ACMを設定する場合に必要な前提条件について説明します。
- ドメインを有し、かつDNSレコードを編集できる権限を持っていること
- HobbyまたはProfessionalで稼働するDynoがあること
1.について、Herokuでは現在、ドメイン名の管理や運用は、標準機能では行うことができません。したがって、Herokuアプリケーションへ割り当てるドメイン名そのものや、設定変更できる権限が必要になります。もし、ドメイン名を所有しているもののDNSサーバをお持ちでない場合は、Herokuには、ドメインを管理するサードパーティーの提供するPointDNSというアドオンもあります。
次に2.について、ACMの機能は、ACMはFree Dynoではお使いいただくことができません。ACMをご利用いただく場合には、Free Dynoではなく、Hobby以上のDynoを選択ください。
以上 2点の条件を満たしていれば、設定だけなら5分とかかりません。まず、Herokuダッシュボードから、対象のHerokuアプリケーションの「Settings」画面を表示してください。設定画面の中央から少ししたあたりに、図1の「Domains and certificates」という設定項目があります。ここの「SSL」項目から[Configure SSL]ボタンをクリックしてください。
すると、図2の「Configure SSL」ダイアログが表示されますので、「Automatically」をチェックして[Continue]ボタンをクリックします。「Automatically」欄を読んでいただくと、Herokuでは、先に紹介した「Let's Encrypt」のSSL証明書を利用していることがわかりますね。
この設定は、HerokuのCLIでも実行可能です。heroku certs:auto:enable コマンドです。実行すると、「heroku certs:auto:enable を実行した結果」のとおり、ACMが適用されます。
$ heroku certs:auto:enable Enabling Automatic Certificate Management... done === Your certificate will now be managed by Heroku. Check the status by running heroku certs:auto.
その後、マルチドメインを保持している場合の注意事項や、設定には少し時間がかかるよというアナウンスが表示されますので、内容を確認の上、ダイアログ下部のボタンをクリックして進めてください。すると、元の設定画面へ戻ってきます。ここで、「Domains and certificates」を確認すると、図3のように「SSL」項目の内容が変わっていることがわかります。ACMが適用されて、自動的に証明書を管理する状態になっています。
次に、Heroku アプリケーションに、カスタムドメイン名を割り当てていきます。[Add domain]をクリックしましょう。「New domain」ダイアログが表示されます。「Domain Name」部分に、割り当てたいカスタムドメイン名を入力して、[Save changes]ボタンをクリックします。Herokuでの設定は以上です。すぐに終わりましたね!
この後は、Herokuとは別に、DNSの設定を行っていただきます。DNSの設定に必要な内容は、設定画面に記載があります。図5をご覧ください。カスタムドメインを追加した後、「Domain Name」欄に、先程追加したカスタムドメイン名が表示されています。その隣の「DNS Target」欄もご覧ください。「xxx.xxx.herokudns.com」といったドメイン名が表示されています。このドメイン名は、Herokuがカスタムドメインで接続させるために準備した、Heroku上で一意のドメイン名になります。
DNSで設定を行うときは、「Domain Name」で表記された名前に対して、「DNS Target」の内容を「CNAME」へ割り当てます。すると、Herokuが、その設定された内容を自動的に検知して、SSL証明書の設定を始めます。DNSの設定方法については各DNSの管理ツールにより異なりますので、ここでは割愛します。
SSL証明書の設定には、多少時間が必要です。公式のガイドの「View your certificate status」によると、およそ45~60分程度とありますので、しばらくお待ちください。証明書が登録されると、図5 のようにカスタムドメイン名の左側のアイコンが「✅」に変わります。
SSL証明書が登録された後、そのHerokuアプリケーションへアクセスをして、証明書の内容を確認してみましょう。図6のようにLet's Encryptによって発行されたSSL証明書が適用されていることがわかります。通常、Let's Encryptの運用では、最大3ヶ月ごとに証明書の入れ替え作業が発生します。ACMでは、その作業を自動化していますので、その入れ替え作業も必要ありません。ここまでの設定だけで、SSL証明書の運用まで自動化されました。簡単でとても便利ですね!
注意
ACMは、2017年6月現在ではこの後紹介するPrivate Spaces環境には対応しておりませんのでご注意ください。