概要
- ドメイン所有者ではないアカウントがサブドメインを使用するために、別のホストゾーンにサブドメインの権限を移譲する
- 権限移譲したサブドメインとCloudFrontを紐付ける
- CloudFrontからホスティングしたサイトのHTTPS化
背景&要件
- 案件で弊社CloudFrontでホスティングしているサービスを取引先企業の所有しているドメインのサブドメインでもホスティング出来るようにしなければいけないことがありました。
前提
アカウントA: ドメイン所有者
アカウントB: サーバー所有者、サブドメイン使用者、CloudFrontでHTTPS公開済み
流れ
- アカウントB: Route53でサブドメインを含んだホストゾーンを新規作成
- アカウントB: 手順1で作成されたホストゾーンからNSレコードをメモする
- アカウントB: 企業AにNSレコードの値を渡す
- アカウントA: ドメインのホストゾーンにサブドメインのNSレコードを作成、値は手順3で取得したNSレコードの値を入力
- サブドメインの名前解決の伝播を待つ
- S3 + Cloudfrontの作成
- アカウントB: SSL証明書を作成
- アカウントB: Route53で手順1で作成したホストゾーンにサブドメインでCloudFrontにアクセス出来るようにAレコードを作成
- アカウントB: SSL証明書をサブドメインで作成
- アカウントB: SSL証明書の検証用レコード(CNAME)をホストゾーンに追加
- SSL証明書の検証を完了を待つ
- アカウントB: CloudFrontに代替ドメインを設定
- アカウントB: 検証されたSSL証明書(ACMで作成した)をアタッチ
- サブドメインがHTTPS化されることを確認
手順
今回使用するドメイン名
ドメイン名: snsnap.net
サブドメイン名: qiita-sample.snsnap.net
アカウントB: サブドメインを含んだホストゾーンの作成
まずは、Route53
でサブドメインを含んだホストゾーンを作成します。
アカウントB: NSレコードの確認
ホストゾーンを作成すると、NSレコードとSOAレコードが生成されます。
NSレコードの値をアカウントAに渡します。
アカウントA: サブドメインのNSレコードの作成
snsnap.net
のホストゾーンにサブドメインqiita-sample.snsnap.net
を作成します。
レコードタイプをNSレコードに選択し、アカウントBから受け取ったNSレコードの値を入力します。
レコードの作成が完了し、しばらくすると、サブドメインの伝播が行われます。
アカウントB: S3+ Cloudfrontの作成
ホスティングする静的サイトの作成を行います。
今回はメインではないので、割愛します。
アカウントB: SSL証明書の作成
CloudFrontに代替カスタムドメインを割り当てるにはACMでSSL証明書を作成します。
ここで注意しなければならないことは、SSL証明書を作成するリージョンはバージニア北部:us-east-1
でなければいけないことです。
CloudFrontにカスタムSSL証明書をアタッチする際は、バージニア北部を選択しないといけません。
詳しくはこちらを参照ください。
バージニア北部
を選択し、ACMからSSL証明書のリクエストを行います。
アカウントB: SSL証明書の検証用レコード(CNAME)をホストゾーンに追加
リクエストが完了すると、証明書一覧に証明書が追加されますが、検証(使用可能な状態)が完了していないので、検証を行うために、CNAMEを追加します。
上記画像のRoute53でレコードを作成
を選択し、CNAMEのレコードを作成します。
しばらくすると検証が完了し、SSL証明書が使用出来るようになります。
アカウントB: サブドメインのAレコードを作成
サブドメインからのアクセスをCloudFrontのURLに名前解決が出来るように、Aレコードを追加します。
Route53
からqiita-sample.snsnap.net
を選択し、レコードを作成します。
エイリアスを選択し、CloudFrontのディストリビューションを選択します。
アカウントB: 代替ドメインの設定とSSL証明書のアタッチ
作成済みのCloudFront
のディストリビューションを編集します。
代替ドメイン名と検証済みのSSL証明書を選択し、更新します。
接続確認
これで、サブドメインでサイトにアクセスすることが出来るようになりました!
まとめ
以上が、サブドメインを別AWSアカウントに権限移譲しCloudFrontでホスティングする方法でした。
頻繁に起こることはあまりないと思いますが、自分の場合はDNSの理解が足りておらず、実際にやってみるまでサブドメインをどのように委譲すればいいのか分かりませんでした。
参考になれば幸いです。