AzureのTraffic ManagerでカスタムドメインやSSL証明書を割り当てる際の手順と注意:Tech TIPS
手軽にリージョンをまたいだ分散サイトシステムを構築できるMicrosoft AzureのTraffic Manager。Web Appsを対象として、独自(カスタム)ドメインとそのSSL証明書を割り当てる手順を説明する。特に作業の順序に要注意だ。
対象サービス:Microsoft Azure、Traffic Manager、Web Apps
Microsoft Azureには、複数のリージョンをまたいでサイトの負荷分散や性能向上、耐障害性向上を実現できる「Traffic Manager」という機能がある。
- Traffic Manager概要ページ(マイクロソフト)
障害発生時のダウンタイムを減らすべく、このサービスを弊社のマップサービス「ロケスマWeb」などのバックエンドサーバに適用してみた(既存サイトに対して別リージョンの新サイトとTraffic Managerプロファイルを追加した)。その際、分かりにくかったりつまづいたりした点を説明していきたい。Traffic Manager自体については、次のドキュメントなどを参照していただきたい。
- Traffic Managerのドキュメント(マイクロソフト)
さて、Traffic Managerによる公開Webサイトの分散システムの構築手順は、大まかには次のようになる(動作確認は含めていない)。
- 各リージョンにWebサイトを構築する
- Traffic Managerが各Webサイトを監視するためのヘルスチェックファイルを設置する
- Traffic Managerプロファイルを作成・設定する
- 各WebサイトをTraffic Managerに登録する
- 各WebサイトにカスタムドメインとSSL証明書を割り当てる
- カスタムドメインのDNSレコードを切り替える
本稿ではこのうち、5.のカスタムドメインとSSL証明書の割り当てに焦点を当て、具体的な手順と注意点を説明する。4.までの手順は既に完了しているものとする。また個々のWebサイトは同じAzureの「Web Apps」を前提としている。
まずTraffic ManagerプロファイルのDNSレコードで下準備
通常、Web Appsのサイトにカスタムドメイン(例:www.example.jp)を割り当てるには、そのデフォルトのDNS名(<サイト名>.azurewebsites.net)あるいはIPアドレスとの対応を表すDNSレコードを設定する必要がある。
だがTraffic Managerの配下になるWeb Appsサイトについては、Traffic ManagerプロファイルのDNS名(<プロファイル名>.trafficmanager.net)と対象のカスタムドメインをひも付ければ済む。つまり、DNSレコードについてはサイトごとに1つずつ作成する手間は不要だ。
まずはTraffic ManagerプロファイルのDNS名を確認する。
Traffic ManagerプロファイルのDNS名を確認する
Azureポータルで対象のプロファイルを開いたところ。
(1)サービス一覧から[Traffic Manager]を選択し、該当のプロファイルを選ぶ。
(2)[概要]を選ぶ。
(3)[DNS名]は「<プロファイル名>.trafficmanager.net」であるはずだ。これをメモしておく。
ところで、既に公開中でユーザーにサービス提供中のWeb Appsサイトの場合、既にカスタムドメインのDNSレコードは「<サイト名>.azurewebsites.net」またはそのIPアドレスに名前解決されるように設定済みのはずだ。
いきなりこれをTraffic Managerに付け替えると、この時点で準備が整っていない各サイトがTraffic Managerを介してユーザーの目に触れる恐れがあり、好ましくない(適切に設定すれば既存サイトだけにアクセスを振り向けられるとしても)。
そこで、代わりに検証専用のサブドメイン「awverify」のCNAMEレコードをカスタムドメインのゾーンに作成する。
awverify.<カスタムドメイン名>. CNAME awverify.<プロファイル名>.trafficmanager.net.
これでもカスタムドメインとTraffic Managerプロファイルとのひも付けは可能だ。
カスタムドメインとTraffic Managerプロファイルとをひも付けるDNSレコードを作成する
これはGoogle Cloud DNSで「locationsmart.org」というゾーンに設定しているところ。作り方は一般的なCNAMEレコードと変わらないので、各DNSサービス/サーバのマニュアルを参照していただきたい。
(1)DNS名には「awverify.<カスタムドメイン名>.」を指定する。
(2)「CNAME」を選ぶ。
(3)TTLは数分程度でよいだろう。
(4)「awverify.<プロファイル名>.trafficmanager.net.」を指定する。
上記の設定後、DNSの伝搬遅延を待たなくても、すぐに次のカスタムドメイン割り当てを実行できる。
カスタムドメインの割り当てはWeb Apps側の作業
次はWeb Appsにカスタムドメインを割り当てる。これは割り当て済みの既存サイトを除いて、サイトごとに1つずつ実施する必要がある。
Web Appsサイトにカスタムドメインを割り当てる(1/3)
これはAzureポータルのWeb Apps設定画面。
(1)サービス一覧から「App Service」を選択し、該当のWeb Appsを選ぶ。
(2)[カスタム ドメイン]を選ぶ。
(3)登録済みのドメイン。「〜.trafficmanager.net」はTraffic ManagerプロファイルにこのWeb Appsサイトを登録すると自動的に追加される。
(4)カスタムドメインを追加登録するには、[ホスト名の追加]ボタンをクリックする。
Web Appsサイトにカスタムドメインを割り当てる(2/3)
ホスト名すなわちカスタムドメイン名の設定パネルが現れる。
(5)カスタムドメイン名をFQDNで指定する。
(6)[検証]ボタンをクリックする。
(7)(6)の後、数十秒待つと緑色のチェックマークが付き、検証済みとして該当のカスタムドメインを追加できるようになる。もし警告やエラーのメッセージが表示されたら、前述のDNSの設定が正しいか再確認する。
(8)(7)で検証済みとなったら、[ホスト名の追加]ボタンをクリックする。
(9)(8)の後、数十秒ほどでホスト名(カスタムドメイン名)の追加が完了したという通知が届くはずだ。この通知アイコンをクリックして確認する。
Web Appsサイトにカスタムドメインを割り当てる(3/3)
通知を受けた後、ホスト名追加パネルを閉じて元のパネルに戻ったところ。
(10)カスタムドメインが正しく追加されると、この一覧に表示される。
カスタムドメイン→SSL証明書の順に割り当てる
SSL/TLSのためのサーバ証明書は、Traffic Managerプロファイルではなく配下の各サイトに1つずつ割り当てる必要がある。
Web Appsの場合、カスタムドメインを割り当てないと、そのドメイン用のSSL証明書も割り当てることができない(Azureポータルでそのドメインが選択肢として表示されない)。必ずここまでの手順を実施してから、次のSSL証明書の設定に進むこと。
Web AppsにSSL証明書を割り当てるには、あらかじめSSL証明書の発行およびWeb Appsへの登録が必要だ。その手順は、次のTIPSを参照していただきたい。
Web AppsのサイトにSSL証明書を割り当てる(1/2)
これはAzureポータルのWeb Apps設定画面。
(1)[SSL 証明書]を選ぶ。
(2)あらかじめWeb AppsにSSL証明書を登録しておく(その手順は前述のTIPS参照)。
(3)登録済みのSSL証明書一覧。名前(共通名:Common Name、サブジェクトの別名:Subject Alternative Name)と有効期限、母印(Thumbprint)によって区別できる。
(4)ドメインとSSL証明書のひも付け一覧。これが実際にHTTPSでの接続に用いられる。
(5)ひも付けを追加するには[バインディングの追加]ボタンをクリックする。
Web AppsのサイトにSSL証明書を割り当てる(2/2)
SSL証明書の割り当て設定パネルが現れる。
(6)[ホスト名]には割り当て可能なカスタムドメインの一覧が表示されるので、該当するものを選ぶ。もし該当ドメイン名が見当たらなければ、前述の手順でカスタムドメインが正しく登録済みか再確認する。
(7)[証明書]から(6)のドメイン名と一致する共通名の証明書を選択する。
(8)[SNI SSL]か[IP ベースのSSL]のどちらかを選ぶ。前者はWindows XPなど古いシステムに正しく認識されない。後者は2枚目の証明書から有償になる。
HTTPS接続を確認するには、例えばクライアントのhostsファイルでWeb Appsの該当サイトのIPアドレスとカスタムドメインをひも付けるレコードを加えてみよう*1。IPアドレスは前述のWeb Appsの[カスタムドメイン]設定画面に表示される。
後は普通にWebブラウザで「https://<カスタムドメイン名>/」を開くと、SSL証明書のエラーもなくWebページが表示されるはずだ。
*1 クライアントがフォワードプロキシ経由でインターネットに接続する環境だと、この方法では接続できない。プロキシを回避するか、プロキシ側で一時的に名前解決を変更する必要がある。
カスタムドメイン→Traffic ManagerプロファイルDNS名、として公開
全ての準備と動作確認が完了したら、カスタムドメインの名前解決をTraffic Managerに付け替えて、ユーザーに公開してみる。
それにはカスタムドメインに対してCNAMEでTraffic ManagerプロファイルのDNS名を割り当てるよう、DNSレコードを修正する。
<カスタムドメイン名>. CNAME 300 <Traffic ManagerプロファイルのDNS名>.
手順は前述のawverifyサブドメインの場合と共通だ。設定したら、nslookupコマンドあるいはdigコマンドで名前解決を確認してみる。カスタムドメイン「www.locationsmart.org」の例を以下に記す。DNSの伝搬遅延後、このような名前解決に切り替わるはずだ。
C:\>dig www.locationsmart.org +noadditional +noauthority +nocomments +nostats
; <<>> DiG 9.10.5 <<>> www.locationsmart.org +noadditional +noauthority +nocomments +nostats
;; global options: +cmd
;www.locationsmart.org. IN A
www.locationsmart.org. 215 IN CNAME locasmaw2.trafficmanager.net.
locasmaw2.trafficmanager.net. 215 IN CNAME locasmawjw2.azurewebsites.net.
locasmawjw2.azurewebsites.net. 1715 IN CNAME waws-prod-os1-001.vip.azurewebsites.windows.net.
waws-prod-os1-001.vip.azurewebsites.windows.net. 224 IN CNAME waws-prod-os1-001.cloudapp.net.
waws-prod-os1-001.cloudapp.net. 47 IN A 138.91.16.18
これは弊社のロケスマWebの例。「www.locationsmart.org」からTraffic Managerプロファイル→Web Appsサイト→……とCNAMEレコードが続き、最後にAzure西日本リージョン内のIPアドレスに解決している。Traffic Managerプロファイルの設定次第では、振り分けにより、別の時間帯/クライアントだと別のリージョンのサイトに名前解決される。
「<プロファイル名>.trafficmanager.net.」が正引きされるようになったら、Webブラウザで「https://<カスタムドメイン名>/」を開いてみよう。
一見すると、従来の既存サイトと何も変わらないWebページが表示されるものの、実際にはTraffic Managerプロファイルによって選出されたサイトが応答しているはずだ。
Google Chromeなら、F12開発者ツールの[Network]タブで対象ページの「Remote Address」を参照すると、IPアドレスから実際の接続先サイトを特定できるだろう。
Traffic ManagerとWeb Appsのカスタムドメイン割り当ての注意点
●ネイキッドドメインは割り当てられない
ネイキッドドメインとは、例えば「example.com」「example.co.jp」のように「www」などのサブドメインが付いていない、取得したドメインそのままの名前を意味する。
Traffic Managerではその仕組み上、カスタムドメインのDNS正引きを必ずCNAMEレコードで設定する必要がある(AレコードやAAAAレコードは不可)。だがDNSの仕様上、ネイキッドドメインに対してCNAMEレコードは設定できない。
よってネイキッドドメインはTraffic Managerでは利用できない。「www」付きドメインへリダイレクトする、といった対処が必要だ。
●Web Appsの価格レベルはBasic不可
Web AppsのサイトをTraffic Managerの配下に組み入れる場合、その価格レベルはStandardかPremiumにする必要がある。Basicでは設定できないので事前に価格レベルをStandard以上にしておこう。
●「〜.trafficmanager.net」だとHTTPS接続は事実上不可
カスタムドメインを割り当てなくても、「http://<プロファイル名>.trafficmanager.net/」にアクセスすればTraffic Manager経由でのアクセスが可能だ。
だが、このドメイン名に対してSSL証明書は割り当てられておらず、HTTPSで接続すると証明書のエラーが発生する。
またtrafficmanager.netドメインはマイクロソフトが所有しているため、そのサブドメインに対応した公的なSSL証明書は発行してもらえない。
■関連リンク
- Traffic Managerのドキュメント(マイクロソフト)
- 会社のインターネット ドメインで Azure Traffic Manager ドメインが参照されるようにする(マイクロソフト)
- Traffic Manager を使用して Azure App Service Web アプリのカスタム ドメイン名を構成する(マイクロソフト)
- カスタム ドメインにおける Web アプリの DNS レコードの作成(マイクロソフト)
- App Service の価格(マイクロソフト)
Copyright© Digital Advantage Corp. All Rights Reserved.