無料ドメイン(.tk)とRoute53を利用して0円でHTTPS環境を設定してみた
はじめに
AWSチームのすずきです。
南太平洋、ニュージーランド領のトケラウ諸島に割当られた国別ドメイン(ccTLD)の「.tk」、 条件付きですが簡単な申し込みで無料利用することが可能です。
また、AWSが提供するDNSサーバのAmazon Route53、1つのHostedZoneあたり 月額0.5$の利用費が発生しますが、設置後12時間以内の利用であれば検証用として扱われるため、こちらも無料での利用が可能です。
今回、「.tk」を取り扱うドメインレジストラのfreenom、AWSの各種サービスを利用して、 無料のHTTPS環境を構築する機会がありましたので、その内容について紹介します。
利用したサービス
Freenum
AWS
DNS
Webサーバ
証明書発行
CDN(コンテンツ配信ネットワーク)
構築手順
freenom作業(1)
アカウント取得
- ドメインレジストラのfreenomのアカウント、事前に取得します
- Googleアカウント連携が便利ですが、メールアドレス、パスワードによる登録も可能です
空ドメイン確認
- ドメインとして利用を希望する文字列を記入しチェックを行います。
- 利用可能なドメインが表示されます
- 4文字以上、予約文字列以外のドメインが無償提供対象です
- 今回「.tk」ドメインを選択し、申し込みを実施しました
AWS作業 (1)
Hosted Zone作成
- 今回取得するドメインのDNS、Amazon Route53 管理とするためZone作成を行います
- AWSコンソールのRoute53画面で取得予定のドメイン名を指定し、Hosted Zoneを作成します
- Hosted Zone の作成後、NSレコードが4件生成されます。これらをレジストラに登録のために控えます
freenom作業 (2)
DNS 設定
- 申し込むドメイン名を管理するDNS設定を実施します。
- ドメインレジストラ提供のDNSではなく、任意のDNSを利用する設定(Use DNS)とします。
- Route53で発行した、NSレコードをNameserverとして登録します。
- DNSレコードとして入力可能な欄は2件に限られる為、一旦2件のみを登録します。
- Nameserver指定時、末尾の「.」は不要です
チェックアウト
- 費用が0$、登録内容を確認の上、申込みを実施します
- 申し込み成功画面です
DNS 追加設定
- Route53で発行されたNSレコードとして指定されたDNS障害に備え、4つのNSレコードを反映する場合には、追加でDNS設定を行います。
- Nameserver3,4 の欄に、Route53で作成されたNSレコードを追記します。
AWS作業 (2)
S3 設定
- 今回WebサーバとしてAmazon S3を利用します。
- S3、サインアップから1年間の無償利用枠として5GBのストレージ、月間2万件のGetリクエストが存在します
- S3のwebホスティングについては、下記ドキュメントを参照ください。
- Amazon S3 での静的ウェブサイトのホスティング
S3 バケットの作成
- AWS コンソール を利用し、S3バケットを作成します
- S3のバケット名は「mesoko.tk」としました。 - S3バケット名と公開FQDNを揃える事で、Route53設定でCDN(CloudFront)を切り離し、S3のみで「http://mesoko.tk」の提供が可能になります。
コンテンツの設置
- Web公開するコンテンツとして、今回は画像ファイル(mesoko_01.png)、1ファイルのみをS3に転送しました
- 今回は画像ファイルのみの設置していますがHTML、CSSなどを転送すれば、FTP転送などで利用するWebホスティング環境と同様にS3を利用する事が可能です。
バケットポリシー設定
- Web公開用のS3に設置されたファイル、誰でも参照出来る状態とするため、バケットポリシーの設定を実施します。
- バケットポリシーの内容は以下を指定します
バケットポリシー設定例
- Resouceの指定(「mesoko.tk」)は、作成したS3バケット毎に読み替えてご利用ください。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::mesoko.tk/*" } ] }
静的ウェブサイトホスティング設定
- 静的ウェブサイトホスティングを有効化します
- インデックスドキュメント、通常は「index.html」としますが、今回は表示確認の簡略化のため、画像ファイル(png)を利用する設定としました。
- エンドポイントとして示されたURLをWebブラウザで開くと、先程S3にアップロードした画像が表示されます。
ACM 設定
- AWS Certificate Manager(ACM)を利用し、SSL/TLS通信(HTTPS)に必要なサーバ証明書を発行します。
- Amazonが発行した証明書は、無料でCloudFront、ELBで利用する事が可能です。
- 今回、CloudFrontで証明書を利用するため、リージョンはバージニア(us-east-1)のACMを利用します。
- 証明書のドメイン名は「*.mesoko.tk」、追加の名前として「mesoko.tk」とした、ZoneApex対応のワイルドカード証明書を作成しました。
ACM、証明書発行時のドメイン認証をEメールで実施しますが、freenomで取得した「.tk」ドメイン、WHOIS情報のドメイン管理者情報を更新する事が出来ません。 以下の方法でAWSのメールサービスSESを利用して「mesoko.tk」のメール環境を設定し、「[email protected]」のメールアドレスによるドメイン認証を実施しています。
[ACM] SSL証明書発行時のドメイン認証メールをSESで受け取ってみた
CloudFront 設定
- 独自ドメインによるHTTPS接続の為、CloudFrontの設定を実施します。
-
CloudFront、サインアップから1年間の無償利用枠として、50GB のデータ送信(アウト)と 2,000,000 件の HTTP および HTTPS リクエストが無料で利用できます。
Distribution 作成
- AWSコンソール、CloudFrontの画面より「Create Distribution」→Web「Get Started」に進みます
Origin Settings
- Origin Domain Name は、S3のWebホスティングのエンドポイント「mesoko.tk.s3-website-ap-northeast-1.amazonaws.com」、カスタムオリジンを指定します。
- カスタムオリジンではなく、S3オリジン(mesoko.tk.s3.amazonaws.com)を指定する事も可能ですが、S3 Webホスティングにより提供されるリダイレクトなどに制限がでる点にご注意ください。
Distribution Settings
- Alternate Domain Names (CNAMEs)は、「mesoko.tk」「www.mesoko.tk」として、以下URLでのアクセスを可能にします。
- https://mesoko.tk
- https://www.mesoko.tk
- SSL Certificateは「Custom」を指定し、先にACMで作成した「*.mesoko.tk」を指定します。
-
Custom SSL Client Supportは「SNI」とし、追加費用発生を回避します。
-
Loggingは、今回は0円利用の実現のため「Off」のままとします。
- 継続利用される場合には、「On」とする事をお勧めします
Domain Name確認
- 「mesoko.tk」用に作成した、Distribution の DomainNameを確認します。
- 作成直後のStatusは「InProgress」、30分程度で「Deployed」になると、CDNとして利用可能になります
Route53 設定
DNSレコード登録
- 「.tk」ドメインでの公開を可能とするため、Route53のレコード設定を実施します
- 公開URLは「https://mesoko.tk」、「http://www.mesoko.tk」の2つ用意します。
- DNSレコードは「Alias」として設定する事で、名前解決クエリに対し発生する利用量は無料で利用できます。
Amazon Route 53のALIASレコード利用のススメ
- Alias Targetは、「CloudFront Distribution」として表示された「mesoko.tk」を指定します
- Taget欄の選択表示に時間がかかる場合、先に作成したCloudFrontのDomainName(d3ollr0rkz6o27.cloudfront.net)を直接記入します。
確認
- Aliasレコードとして登録された事を確認します
- Webブラウザで、設定したURLに正しくHTTPS接続出来る事、Amazon発行の証明書が利用されている事を確認します。
- https://mesoko.tk/
- https://www.mesoko.tk/
撤去
- 0円利用の為、リソースの撤去を実施します
Route53
- 事前にDNSレコード(NS、SOA以外)を削除します。
- 設置後12時間以内に削除したHosteZoneは、月額0.5$の課金対象外として扱われます。
S3
- Webホスティング用に設置したS3、「バケットを空にする」「バケットの削除」を実施して撤去します。
CloudFront
- Distribution を削除し、Botなどのアクセスによる課金を回避します
まとめ
完全無料は12時間の制限が伴うものの、freenomとAWSを利用して0円で独自ドメインのWeb環境を構築する事が出来ました。
Route53のDNS設定や、GoogleやAppleが進めるHTTPSの必須化に向けた、常時SSLの検証環境などの確認に活用できると思われます。
尚、freenomが無償で提供している「.tk」ドメインには、以下の制約が存在します。
- whois情報の変更ができない
- 自動更新はできず、失効15日前に都度手続きが必要
- 一定利用実績が無い場合には、自動解除される
Dot TK Operational Content Policy
サービスの根幹を支えるドメイン、その失効や障害はサービス継続に致命的な影響を及ぼす場合があります。
継続的に稼働する本番環境で利用するドメインは、以下の利用をおすすめします。
- Route53のドメインレジストラを利用し、自動更新を有効とする
- DNSはRoute53のHostedZoneを利用する
- AWS(ELB,CloudFront)上で利用する証明書、Amazon発行のもの(ACM)を利用する
補足
今回CloudFrontとS3で構築したSSL対応のWeb環境、継続稼働させた場合でも、 月額の固定費は1$以下、廉価に維持できるだけでなく、 SNSの一斉配信、TVの全国放送連携などで発生する、100万PVが数分間に集中するような場合でも落ちる事のない、堅牢なWeb環境として利用する事が可能です。
AWSの費用は主にCloudFront(CDN)のネットワーク転送費用で発生。1ページの平均サイズが2MBのサイトであれば、1万PV(20GB)毎に定価では約3$で利用可能です。
- CloudFront オンデマンド料金: 日本向け転送単価1GB毎:0.14$
また、AWSのパートナーがCloudFrontを一括仕入れし、ボリュームディスカウントを効かせて提供する形も存在し、1万PV(20GB)毎の費用は約1$での利用することも可能です。あわせてご検討ください。
- Classmethod CloudFront提供価格: 東京の単価$0.14/GBに対して、$0.05/GBで提供