ECS(Fargate)で起動したNginxコンテナに独自ドメイン&HTTPSでアクセスできるようにする
概要
以前、ECSでNginxコンテナを起動し「Hello Wolrd」を表示してみるという記事を書きました。
その時は、ALBを前段の置き、ALBのドメインに対してアクセスを行いました。
今回、このコンテナに独自ドメイン&HTTPSでアクセスするように変更を加えていきます。
構成図
独自ドメイン
お名前.comでドメインを取得する
お名前.comでsy-test-domain.com
というテスト用ドメインを取得します。
Route 53でホストゾーンを作成する
AWSコンソールからRoute53のページに行きます。
「ホストゾーンを作成」を選択します。
以下のように、ドメイン名とタイプを選択します。
Route 53が提供するネームサーバをお名前.comに登録する
この作業の目的
多くの場合、ドメインを購入するとドメイン登録業者のDNSサーバがネームサーバとして設定されています。つまり、デフォルトではドメインの名前解決はその業者のDNSサーバによって行われるということです。Route 53をDNSサービスとして利用する場合、このネームサーバをドメイン登録業者のものからRoute 53のものに変更する必要があります。
この手順を実施することで、Route 53の提供するネームサーバが名前解決を行うようになります。
登録方法
作成したホストゾーンの詳細ページで、ネームサーバ(NS)が確認できます。
ここに記載されたネームサーバは、Route 53が提供するDNSサーバであり、今回取得した独自ドメインの名前解決を担当するサーバです。
これらのネームサーバをドメインを取得したお名前.comに登録します。
お名前.comのページに行き、トップページ > ネームサーバの設定 > 他のネームサーバを利用の流れで選択します。すると、ネームサーバ情報を入力するフォームが出てきます。ここに、Route 53で確認した4つのネームサーバを入力します。
独自ドメインとALBを紐づける
ホストゾーンにターゲットをALBとするAレコードを追加します。
レコードを作成 | |
---|---|
レコード名 | 空白 |
レコードタイプ | A-IPv4 |
トラフィックのルーテーティング先 | Application Load Balancer |
リージョン | アジアパシフィック(東京) |
ロードバランサーを選択 | 事前に作成済みのALBを選択 |
上記の要領でAレコードを追加します。
Aレコードは本来ドメイン名に対応するIPv4アドレスを持ちますが、Route 53の場合はALBやCloudFrontなどのAWSリソースを直接指定できます。
今回は、ALBと取得した独自ドメインを紐付けたいので、ALBを選択しています。
Aレコードとは
ドメイン名をIPアドレスにマッピングするためのDNSレコードのことです。ドメイン名に対応するIPv4アドレスを指定します。Route 53を使用する場合は、IPv4アドレスを直接指定するのではなく、ALBやCloudFrontなど特定のAWSリソースを直接指定することができます(エイリアスAレコード)。
エイリアスAレコードを使用すると、ALBやCloudFrontの動的なIPアドレスの変更にも自動で対応してくれます。
アクセスできるかを確認する
http://sy-test-domain.com
にアクセスすると、「Hello World!!」が表示されることが確認できました。
HTTPSアクセスできるように設定する
続いて、sy-test-domain.com
にhttpsでアクセスできるようにします。
ACMでSSL/TLS証明書を取得する
SSL/TLS証明書のおさらい
以下の2つを役割を担う認証局から発行される電子証明書
- ウェブサイトの運営者の実在性を確認すること
- ブラウザとWebサーバ間で通信データの暗号化を行うこと
証明書の取得方法
AWSコンソールから「AWS Private Certificate Authority」のページに行き、「AWS Certificate Manager」を選択します。その後、「証明書をリクエスト」を押します。
証明書タイプ | パブリック証明書をリクエスト |
ドメイン名 | sy-test-domain.com |
検証方法 | DNS検証 |
キーアルゴリズム | RSA 2048 |
上記の要領で入力し、リクエストを押すと証明書リソースが作成されます。
DNS検証前のため、ステータスが保留中になっています。
CNAMEレコードをドメインのDNS設定に追加する
検証方法にDNS検証を選択した場合、ドメインのDNS設定にCNAMEレコードを追加する必要があります。CNAMEの内容は証明書の詳細ページで確認できます。
Route53のホストゾーンのレコードからCNAMEレコードを追加します。Route 53 > ホストゾーン > sy-test-domain.comを開き、「レコードを作成」を押します。
レコード名 | 証明書のCNAME名(sy-test-domain.com 部分を除く) |
値 | 証明書のCNAME値 |
レコードを作成を押すと、CNAMEレコードが追加されました。
しばらくすると、証明書のステータスが「保留中の検証」から「成功」に変わります。10分程度掛かりました。
ALBの設定を行う
ALB側も2点修正する点があります。
- HTTPSリスナーを追加する
- セキュリティグループを更新する
HTTPSリスナーを追加する
ALBの詳細ページのリスナーセクションの「リスナーの追加」を押します。
リスナーの詳細 | |
---|---|
プロトコル | HTTPS |
ポート | 443 |
セキュアリスナーの設定 | |
---|---|
Certificate source | ACMから |
Certificate (from ACM) | 先ほど作成した証明書を選択 |
追加を押すと、リスナーとルールにHTTPS:443が追加されました。
到達不可能と表示されてますが、これはALBと関連付けしてあるセキュリティグループが HTTPS:443 のトラフィックを許可していないためです。
セキュリティグループを更新する
ALBと関連付けしているセキュリティグループを編集して、HTTPS:443 のトラフィック受信を許可します。
該当のセキュリティグループ > インバウンドルールから「インバウンドルールを編集」を押します。
以下のルールを追加します。
タイプ | HTTPS |
ソース | 0.0.0.0/0 |
「ルールを保存」を押すと、インバウンドルールにHTTPSが追加されます。
HTTPSでアクセスできることを確認する
これまでの設定でsy-test-domain.com
にHTTPSでアクセスできるようになりました。
https//sy-test-domain.com
にアクセスして確認します。
期待通り「Hello World!!」が表示され、証明書も確認できました。
Discussion