独自取得したドメインをRoute 53で管理して、CloudFrontのディストリビューションに使用する方法を確認してみた。
事業本部Delivery部のアベシです。
独自に取得したドメインをCloudFrontのディストリビューションの代替ドメインに使用する方法を調べて自分なりにまとめてみました。
また、通信はHTTPSで暗号化したかったのでAWS Certificate Manager (ACM)の発行するSSL証明書を利用しました。
下記の流れで進めていきます。
- 取得したドメインをRoute53の管理下に設定
- ネームサーバーをレジストラに登録
- AWS Certificate Managerで証明書を発行
- 証明書のCNAMEをRoute53に登録して証明書の検証
- Cloud Frontのディストリビューションに証明書と代替ドメインを設定
- 動作確認
前提
ドメイン名の取得
ドメインはお名前.com
で取得しました。
ドメイン取得ができている前提で進めていきます。
お名前.comでのドメイン取得については方法は以下の記事を参考にしてください。
今回取得したドメインは1年間無料のものでした。1年間も無料であれば検証などには十分使えるのでありがたいですね。
CloudFrontの作成とOAIによるオリジンのアクセス制限
CloudFrontの作成とOAIによるオリジンへのアクセス制限についても完了している前提で説明します。 以前に下のブログでCDKを使ってこの構成を作成しました。コードをブログに記載してますので参考にしてください。
取得したドメインをRoute 53の管理下に設定
ドメインの登録先にRoute 53を使用します。 Route 53の管理下にドメインを登録するには、Route 53のホストゾーンを作成します。 登録は以下のAWS CLIコマンドで行います。
aws route53 create-hosted-zone \ --name example.com \ --caller-reference `date +"%Y-%m-%d-%H-%M-%S"`
各オプションの記載内容は以下の通りになります。
--name
ドメイン名--caller-reference
任意の文字列- 今回はコマンドを実行した時間にしました。
出力は以下の通りになります。
{ "Location": "https://route53.amazonaws.com/2013-04-01/hostedzone/****************", "HostedZone": { "Id": "/hostedzone/****************", "Name": "example.com.", "CallerReference": "2023-03-30-15-56-41", "Config": { "PrivateZone": false }, "ResourceRecordSetCount": 2 }, "ChangeInfo": { "Id": "/change/C005009612I95U5A4Q8GW", "Status": "PENDING", "SubmittedAt": "2023-03-30T06:56:43.101000+00:00" }, "DelegationSet": { "NameServers": [ "ns-****.awsdns-01.co.uk", "ns-***.awsdns-02.net", "ns-****.awsdns-29.org", "ns-***.awsdns-38.com" ] } }
NameServersに記載されているのがネームサーバの情報です。次の項でこの値をレジストラ(お名前.com)に登録します。
コンソール上でも登録されたドメインのネームサーバー情報が確認できます。
ネームサーバーをレジストラに登録
続きまして、ネームサーバーをレジストラに登録します。
お名前.comの場合は、ドメインの管理画面からネームサーバーを登録します。
まずはお名前.comの管理画面にログインします。
ネームサーバーの設定のタブの中にあるネームサーバーの設定
をクリックします。
遷移したページで他のネームサーバーを利用
のタブに切り替えます。
表示されたネームサーバー情報入力欄に先程ドメインを作成した時に出力されたNameServersの値を入力します。
"NameServers": [ "ns-****.awsdns-01.co.uk", "ns-***.awsdns-02.net", "ns-****.awsdns-29.org", "ns-***.awsdns-38.com" ]
その後は確認画面に進んで設定を完了させてください。
ネームサーバーの反映には最大72時間かかると書いてましたが、私の場合だと3時間後に確認したらすでに反映されてました。
確認にはnslookup
コマンドを使います。
nslookup -type=NS example.com
Non-authoritative answer
の下にネームサーバーの情報が出力されていればOKです。
Server: 127.0.2.2 Address: 127.0.2.2#53 Non-authoritative answer: abeshifortest.com nameserver = ns-****.awsdns-01.co.uk. abeshifortest.com nameserver = ns-***.awsdns-02.net. abeshifortest.com nameserver = ns-****.awsdns-29.org. abeshifortest.com nameserver = ns-***.awsdns-38.com.
AWS Certificate Managerで証明書を発行
以下のAWS CLIコマンドで証明書を発行します。
aws acm request-certificate \ --domain-name *.example.com \ --validation-method DNS \ --region us-east-1
オプションの説明は以下の通りです。
- domain-name
- 対象のドメイン名を記載します。複数のサブドメインを使用する予定があったので、ワイルドカードを使って
*.example.com
としています。
- 対象のドメイン名を記載します。複数のサブドメインを使用する予定があったので、ワイルドカードを使って
- validation-method
- ドメインの所有権を確認するための方法を指定します。
- 方法はEmailとDNSがあります。Route 53で管理するドメインの場合はDNSが推奨されています。
ドメインの所有権を確認するために、ドメインのDNSレコードにCNAMEを追加する必要があります。後ほど解説します。
- region
- リージョンを指定します。ドメインを割り当てるリソースのリージョンに合わせます。
- 今回はCloudFrontのディストリビューションに使う予定だったので、リージョンは
米国東部(バージニア北部)us-east-1
で発行しました。これはCloudFrontがリージョナルサービスではない事が理由となります。
CLIコマンドは以下のリンク先の公式リファレンスを参考にしました。
正常に作成されると、以下のような形式の出力が返ってきます。
{ "CertificateArn": "arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012" }
証明書のCNAMEをRoute 53に登録して証明書の検証
先程作成した証明書のステータスはまだ保留中の検証
となっている事が確認できます。次にやることとして署名書の所有権を確認して検証を完了させるために、ドメインのDNSレコードにCNAMEを追加します。
ACMのコンソールを開きます。右上にあるRoute 53 でレコードを作成
というボタンを押します。
遷移先のページでレコード作成
というボタンを押します。
Route 53のドメインのページを開くとCNAMEレコードが作成されていることが確認できます。
この後1分もしない内に証明書の検証が完了し、証明書のステータスが発行済み
となります。
ディストリビューションにルーティングするサブドメインを作成
私はサブドメインを作成してディストリビューションの代替URLに使用したかったので、サブドメインを作成しました。
対象のホストゾーンのページを開きレコードの作成
を押します。
遷移したページで以下の必要事項を記入してレコードの作成
を押します。
必要事項
- レコード名
- サブドメイン名を記載します。今回は
subdomain
を指定しました。
- サブドメイン名を記載します。今回は
- レコードタイプ
A
レコードを指定します。 エイリアスを有効にします。
- トラフィックのルーティング先
CloudFront ディストリビューション
を選択します。- CloudFrontのURLを記入します。`https://`は不要です。
CloudFrontのディストリビューションに証明書と代替ドメインを設定
CloudFrontのコンソールから対象のディストリビューションの画面をを開きます。
画像
一般
タブ内の編集
ボタンを押してディストリビューションの設定画面を開きます。
- 代替ドメイン名
- 先程作成したサブドメインを指定します。
- カスタム SSL 証明書
- 作成した証明書を選択します。
サブドメインが代替URLに表示されました。
- 作成した証明書を選択します。
動作確認
代替ドメイン名に指定したサブドメインにアクセスしてみます。
S3にホストしたオリジンのアプリが正常に表示されました。
証明書を確認します。
間違いなくAmazonにより発行された証明書であることが確認できます。
以上。