独自取得したドメインをRoute 53で管理して、CloudFrontのディストリビューションに使用する方法を確認してみた。

2023.03.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

事業本部Delivery部のアベシです。
独自に取得したドメインをCloudFrontのディストリビューションの代替ドメインに使用する方法を調べて自分なりにまとめてみました。
また、通信はHTTPSで暗号化したかったのでAWS Certificate Manager (ACM)の発行するSSL証明書を利用しました。

下記の流れで進めていきます。

  1. 取得したドメインをRoute53の管理下に設定
  2. ネームサーバーをレジストラに登録
  3. AWS Certificate Managerで証明書を発行
  4. 証明書のCNAMEをRoute53に登録して証明書の検証
  5. Cloud Frontのディストリビューションに証明書と代替ドメインを設定
  6. 動作確認

前提

ドメイン名の取得

ドメインはお名前.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により発行された証明書であることが確認できます。

以上。