AWSを活用したドメイン取得からHTTPS設定まで
Overview
この記事では、AWSサービスを利用してドメインの取得から、サブドメインの登録、ACM証明書の発行までの流れをまとめます。最終的に、ALBにACM証明書を指定して443ポートのHTTPS通信を設定するところまでをスコープに含めます。
Route 53とドメインについて
Route 53とは
Amazon Route 53は、AWSが提供するスケーラブルで高可用性のあるDNSウェブサービスです。
提供する機能
- ドメイン登録: Route 53を使用して新しいドメインを登録できます。
- DNSルーティング: ドメイン名をIPアドレスに解決するDNSレコードを管理できます。
- ヘルスチェック: ウェブサイトのヘルスチェックとモニタリングが可能です。
ドメインについて
ドメインとは、インターネット上で特定のウェブサイトやサービスを識別するための名前です。例えば、example.comはドメイン名です。ドメイン名は、DNS(Domain Name System)によってIPアドレスに変換され、ユーザーがウェブサイトにアクセスできるようになります。
DNSレコードについての解説
DNSレコードの解説
DNS(Domain Name System)レコードは、ドメイン名をIPアドレスなどの情報にマッピングするための設定です。主に以下の3種類のレコードがよく使用されます:NSレコード、Aレコード、CNAMEレコード。それぞれの解説と具体例を以下に示します。
代表的な3つのレコード
NSレコード(Name Serverレコード)
説明: ドメインのDNSサーバーを指定し、そのドメインのDNS情報を管理するサーバーを定義します。
具体例:
ドメインexample.comのDNS情報を管理するDNSサーバーを指定し、DNSクエリは指定されたDNSサーバーに転送されます。
example.com. IN NS ns1.exampledns.com.
example.com. IN NS ns2.exampledns.com.
ユースケース
例えば、AWSの別アカウントで新しいホストゾーンを作成した場合、そのホストゾーンに関連するNSレコードが発行されます。このNSレコードを、ドメインを管理しているレジストラのDNS設定に登録する必要があります。これにより、ドメインのDNSクエリは新しいホストゾーンに転送され、正しく管理されます。
具体的には、AWSアカウントAでexample.comのホストゾーンを作成し、その際に以下のようなNSレコードが発行されたとします。
example.com. IN NS ns-123.awsdns-45.net.
example.com. IN NS ns-678.awsdns-90.org.
example.com. IN NS ns-345.awsdns-12.co.uk.
example.com. IN NS ns-456.awsdns-34.com.
これらのNSレコードを、ドメインexample.comを管理しているレジストラのDNS設定に追加します。こうすることで、ドメインexample.comのDNSクエリはAWSアカウントAで作成したホストゾーンに転送されるようになります。
Aレコード(Addressレコード)
説明: ドメイン名をIPv4アドレスにマッピングし、ウェブサイトのドメイン名がどのIPアドレスに解決されるかを指定します。
具体例:
www.example.comを特定のIPv4アドレス192.0.2.1に解決し、ユーザーがwww.example.comにアクセスすると、192.0.2.1のサーバーに接続されます。
www.example.com. IN A 192.0.2.1
ユースケース:
ドメインを取得したホストゾーンに対して、サブドメインのレコードを作成する際にもAレコードを使用します。
例えば、blog.example.comを特定のサーバーのIPアドレスに解決する場合、以下のように設定します。
blog.example.com. IN A 192.0.2.2
CNAMEレコード(Canonical Nameレコード)
説明: ドメイン名を別のドメイン名にエイリアスとしてマッピングし、複数のドメイン名を1つの実際のドメイン名に集約します。
具体例:
blog.example.comをwww.example.comのエイリアスとして設定し、blog.example.comへのアクセスはwww.example.comにリダイレクトされます。
blog.example.com. IN CNAME www.example.com.
ユースケース:
ACM(AWS Certificate Manager)でSSL/TLS証明書を発行する際に、ドメイン所有権を検証するためにCNAMEレコードを使用します。例えば、www.example.comに対してACM証明書を発行する場合、AWSは以下のようなCNAMEレコードを提供します。このCNAMEレコードをドメインのDNS設定に追加することで、ドメインの所有権が確認されます。
_acme-challenge.example.com. IN CNAME _acme-challenge.example.com.acm-validations.aws.
これにより、ACM証明書の発行プロセスが完了し、ドメインやサブドメインに対してHTTPS通信を設定することができます。
参考
手順
1. ドメインを取得する
- Route 53コンソールにアクセス: AWSマネジメントコンソールにログインし、Route 53サービスに移動します。
- ドメイン登録: 「ドメインの登録」タブをクリックし、新しいドメインを検索します。利用可能なドメインを選択し、カートに追加します。
- ドメイン設定の確認: 選択したドメインの設定を確認し、登録者情報を入力します。
- 支払い情報の入力: 支払い情報を入力し、購入を完了します。
注意点、選び方、料金について
ドメイン取得の注意点
-
ドメイン名の選択:
- 短くて覚えやすい名前
- ブランド名や事業名に関連する名前
- 特殊文字や記号は避ける
-
トップレベルドメイン(TLD)の選択:
- 一般的なTLD(例:
.com
,.net
,.org
)は信頼性が高い - 地域特化型のTLD(例:
.jp
,.us
) - 新しいgTLD(例:
.tech
,.shop
)
- 一般的なTLD(例:
-
ドメインの可用性:
- Route 53の検索機能を使用します。同じ名前が既に登録されている場合、他の候補を検討する必要がある
料金について
AWS Route 53のドメイン登録料金は、TLDによって異なります。
-
登録料金:
- 地域特化型のTLDや新しいgTLDは、一般的なTLDよりも高額になることがあります。
-
更新料金:
- ドメインの更新料金も、TLDによって異なります。登録時の料金と同程度の費用が毎年発生します。
- ドメインの自動更新を設定することで、更新忘れを防ぐことができます。
-
移管料金:
- 他のレジストラからAWS Route 53にドメインを移管する場合、移管料金が発生することがあります。移管後、通常は1年間の登録が追加されます。
参考:
2. サブドメインを登録する
ドメインを取得した後、サブドメインを登録します。サブドメインは、sub.example.com
のように、メインドメインの一部として機能します。
- ホストゾーンの作成: Route 53で新しいホストゾーンを作成します。
- サブドメインのレコード作成: 作成したホストゾーンにサブドメインのDNSレコードを追加します。
ALBのDNS名をAレコードのエイリアスとして指定する
AWS ALB(Application Load Balancer)を使用する場合、サブドメインのAレコードをALBのDNS名にエイリアスとして設定することが一般的です。これにより、サブドメインにアクセスしたユーザーは、ALBを介してトラフィックが処理されます。
- Route 53コンソールにアクセスし、作成したホストゾーンを選択します。
- [レコードの作成]ボタンをクリックします。
- レコードタイプとして"Aレコード"を選択し、以下の情報を入力します:
-
名前:
sub
(これにより、sub.example.com
が作成されます) -
値: サブドメインが指すALBのDNS名(例:
my-alb-1234567890.us-east-1.elb.amazonaws.com
) - タイプ: エイリアス(ALBのDNS名を直接指定する)
3. ACM証明書を発行する
AWS Certificate Manager(ACM)を使用して、HTTPS通信に必要なSSL/TLS証明書を発行します。
- ACMコンソールにアクセス: AWSマネジメントコンソールからACMサービスにアクセスします。
- 証明書のリクエスト: [証明書のリクエスト]ボタンをクリックし、ドメイン名を指定して証明書をリクエストします。
4. ACM証明書をドメインのCNAMEレコードに登録する
ACM証明書の検証のために、CNAMEレコードをRoute 53に登録します。これにより、証明書の所有権が確認されます。
- CNAMEレコードの取得: ACMコンソールからCNAMEレコードを取得します。
- CNAMEレコードの登録: Route 53のホストゾーンにCNAMEレコードを追加します。
※ 正常に登録された場合、ステータスが更新されます
5. ACM証明書をALBに付与する
最後に、ALB(Application Load Balancer)にACM証明書を付与して、HTTPS通信を設定します。
- ALBの作成: EC2コンソールから新しいALBを作成します。
- リスナーの設定: 443ポート用のリスナーを作成し、SSL/TLS証明書としてACM証明書を指定します。
Topic: 応用
証明書を共通するか、サブドメインごとにACM証明書を作成するか
サブドメインごとに異なる証明書を発行するか、ワイルドカード証明書を使用して一つの証明書を共通で使用するかの選択があります。
- 共通の証明書を使用する: ワイルドカード証明書(例:*.example.com)を使用すると、管理が簡素化され、コストが削減されます。
- サブドメインごとに証明書を発行する: 各サブドメインに個別の証明書を発行することで、セキュリティを強化し、特定のサブドメインに対する証明書の更新や再発行が容易になる。
証明書の自動更新
ACMは自動更新をサポートしており、証明書の有効期限が近づくと自動的に更新されます。しかし、以下の点に注意が必要です。
- 検証方法: 証明書の更新時にドメインの所有権を再検証する必要があるため、CNAMEレコードやDNS設定を正確に維持することが重要です。
- 通知設定: 証明書の更新や検証に失敗した場合に備えて、通知設定を有効にしておくと良いです。
HTTPからHTTPSへのリダイレクト
- ウェブサーバーの場合: HTTPからHTTPSへのリダイレクトはセキュリティの強化に有効です。HSTS(HTTP Strict Transport Security)ヘッダーを設定することで、ブラウザが常にHTTPSを使用するようになります。
- APIサーバーの場合: APIリクエストにおいては、HTTPからHTTPSへのリダイレクトは推奨されません。代わりに、HTTPリクエストに対してエラーレスポンスを返すことで、早期に問題を発見し修正することが重要なります。
詳しくは以下の記事を参照してください↓
参考:https://jviide.iki.fi/http-redirects
Route 53のヘルスチェック
Route 53のヘルスチェック機能を使用すると、指定したリソースが正常に動作しているかどうかを定期的に監視できます。異常が検出された場合、Route 53は他のリソースにトラフィックを自動的にルーティングすることができます。
- 設定方法: ヘルスチェックを設定する際には、HTTP、HTTPS、TCPのいずれかのプロトコルを選択し、監視対象のリソースのエンドポイント(IPアドレスまたはドメイン名)を指定します。例えば、HTTPプロトコルを使用する場合、ヘルスチェックは指定したURLに対してHTTPリクエストを送信し、正常なレスポンスが返ってくるかどうかを確認します。
- 監視間隔: ヘルスチェックの頻度を設定でき、通常は30秒ごとにリクエストを送信します。異常が検出されるまでの連続失敗回数や、正常に戻るまでの連続成功回数も設定可能です。
- 通知設定: ヘルスチェックが失敗した場合に、SNSを使用して通知を受け取る設定が可能です。これにより、迅速に問題を把握し、対応することができます。
フェイルオーバー設定
Route 53のフェイルオーバー設定を使用すると、プライマリリソースが利用不可になった場合にセカンダリリソースに自動的に切り替えることができます。これにより、システムの高可用性を実現できます。
- プライマリとセカンダリの設定: フェイルオーバー設定を行う際には、プライマリリソースとセカンダリリソースを定義します。通常、プライマリリソースは通常時にトラフィックを受け取るリソースであり、セカンダリリソースはプライマリが利用不可になった場合にトラフィックを受け取るリソースです。
- フェイルオーバー条件: プライマリリソースのヘルスチェックが失敗した場合に、セカンダリリソースにトラフィックを切り替える条件を設定します。この条件には、連続失敗回数や再試行間隔が含まれます。
DNS TTL(Time To Live)の設定
DNSレコードのTTLを適切に設定することで、レコードのキャッシュ期間を制御し、変更が迅速に反映されるようにします。特に、頻繁に更新が必要なリソースについては、短いTTLを設定することが推奨されます。
Route53加重ルーティング機能
Route 53の加重ルーティング機能は、異なるリソースに対してトラフィックの分散を制御するための機能です。
1. Route 53コンソールにアクセス:
Route 53のホストゾーンに移動し、対象のドメイン名を選択します。
2. 加重ルーティングのレコードセットを作成:
「レコードセットの作成」を選択し、トラフィックを分散させるためのAレコードを作成します。
「ルーティングポリシー」で「加重」を選択します。
3. 各リソースの加重値を設定:
各レコードセットに対して、ターゲットリソースのIPアドレスやDNS名を指定し、加重値を設定します。
加重値の合計が100%となるように設定します。
4. 設定を保存:
すべての設定を確認し、レコードセットを保存します。
1. トラフィック分散
複数のEC2インスタンスに対してトラフィックを分散する場合、加重値を設定して特定のリソースに対するトラフィックの割合を制御します。
- www.example.com に対して、加重ルーティングを設定。
- 2つのEC2インスタンス (ec2-instance-1 と ec2-instance-2) に対してトラフィックを分散。
- ec2-instance-1 に70%、ec2-instance-2 に30%のトラフィックを分配。
2. 段階的なデプロイ
新しいバージョンのアプリケーションを段階的にリリースする際に、旧バージョンと新バージョンの間でトラフィックを分ける場合。
- www.example.com に対して、加重ルーティングを設定。
- 旧バージョン (primary-version) と新バージョン (canary-version) に対してトラフィックを分散。
- primary-version に80%、canary-version に20%のトラフィックを分配。
3. リージョン間の負荷分散
複数のAWSリージョンにまたがるリソース間でトラフィックを分散し、リージョンごとの負荷を均等にする場合。
- www.example.com に対して、加重ルーティングを設定。
- 東京リージョン (ap-northeast-1) とオレゴンリージョン (us-west-2) にトラフィックを分散。
- 東京リージョンに60%、オレゴンリージョンに40%のトラフィックを分配。
まとめ
この記事では、AWSサービスを利用してドメインの取得から、サブドメインの登録、ACM証明書の発行、そしてALBにACM証明書を指定してHTTPS通信を設定するまでの手順を説明しました。この手順を通じて、安全なHTTPS通信を簡単に設定することができます。
Discussion