新ネットワークスペシャリスト道

ネットワーク、セキュリティ、何の話?

【AWS 100日チャレンジ - 2日目】 テーマ「ALB経由でPrivateSubnetのEC2へインターネットからHTTPS接続する」

2日目です。

まだまだやる気は充実してます。

どれだけ続くか、わかりませんが、頑張ります。

 

AWS 100日チャレンジの記事を書く上でのルール

・100日続ける(休日まとめ投稿もあり)

・記事を読んでもらうことを目的とはしない(すいません、継続することを重視します。自己満です)

・社会人のため、風邪および業務によりキャンセルすることもある。

・核となるサービス以外は、CloudFormation(VPCやサブネット、EC2など)やすでに設定済のサービス(SNSなど)を利用して構築する。

ルールが緩くてごめんなさい。

課題

ALBを経由してPrivateSubnetに所属しているEC2へインタネットからHTTPS接続できるようにする

実施 (キャプチャのみの場合もあり)

1. 全体構成のイメージ

主な構成要素とデータの流れは以下の通りです。

  • Internet Gateway: 外部からの通信を受け取ります。

  • ALB (Public Subnet): HTTPS(ポート443)で待ち受け、SSL証明書で復号します。

  • EC2 (Private Subnet): ALBからのリクエストをターゲットグループ経由で受け取ります。

まずACMで使用するHTTPSで必要なオレオレ証明書を作成する

まず、公式の証明書が用意するのが大変なのでオレオレ証明書を作成します。

 

1. windowsでopensslを使用できるように以下よりダウンロードしてインストール

https://slproweb.com/products/Win32OpenSSL.html

2. 環境変数設定

set PATH=%PATH%;C:\Program Files\OpenSSL-Win64\bin

3. 秘密鍵(Private Key)の作成

openssl genrsa -out private.key 2048

4. 証明書署名要求(CSR)の作成

openssl req -new -key private.key -out server.csr

質問には適当に入力する。

  • Country Name: JP

  • State or Province Name: Tokyo

  • Locality Name: Minato-ku

  • Organization Name: Test Inc

  • Common Name (重要): shigashiga.com(適当なドメイン名でOK。ALBにアクセスする際の名前になります)※ ドメイン名をexample.comにするとACMの証明書インポートでドメイン名が空になるのでexample.comを使用しなほうがいい

  • Email Address / Extra attributes: すべて空欄(エンター連打)でOKです。

5. 自己署名証明書(CRT)の発行

openssl x509 -req -days 365 -in server.csr -signkey private.key -out server.crt

カレントフォルダ内に server.crt が作成されている。これがオレオレ証明書。

 

ACMでのSSL証明書リクエスト
  1. AWSコンソールでACMを開く > 「証明書をインポート」をクリック。

  2. 証明書本文: server.crt の中身を --BEGIN CERTIFICATE-- から --END CERTIFICATE-- まで全部コピーして貼り付け。

  3. 証明書のプライベートキー: private.key の中身を --BEGIN RSA PRIVATE KEY-- から --END RSA PRIVATE KEY-- まで全部コピーして貼り付け。

  4. 証明書チェーン: 自己署名の場合は空欄のままでOK。

  5. 「次へ」を押して確定。



ALBリスナーの設定(HTTPSの有効化)

次に、ALBが443番ポート(HTTPS)で待ち受けをするように設定します。

  1. EC2コンソールの左メニューから「ロードバランサー」を選択し、作成したALBにチェックを入れます。

  2. 下部の「リスナー」タブを選択し、「リスナーの追加」をクリックします。

  3. プロトコル:ポート: HTTPS : 443 を指定します。
    ※HTTP:80は削除しました。

  4. ルーティングアクション: 「ターゲットグループに転送」を選択し、CloudFormation等であらかじめ作成しておいた(EC2が紐付いている)ターゲットグループを選択します。

  5. セキュアリスナーの設定(証明書): * 「ACMから」を選択。

    • 先ほどインポートした自己署名証明書を選択します。

  6. 「追加」ボタンを押して保存します。

 

セキュリティグループの最終確認

ここが漏れると接続できません。以下の設定になっているか再確認してください。

  • ALBのセキュリティグループ:

    • インバウンドルールに HTTPS (443) / ソース 0.0.0.0/0(または自分のIP)が許可されていること。

  • EC2のセキュリティグループ:

    • インバウンドルールに HTTP (80) / ソース ALBのセキュリティグループID が許可されていること。

 

Route 53 ホストゾーンの作成

まず、AWS上でそのドメインを管理するための「箱」を作ります。

  1. Route 53 コンソールを開き、「ホストゾーン」をクリックします。

  2. 「ホストゾーンの作成」をクリックします。

  3. ドメイン名: shigashiga.com を入力します。

  4. タイプ: 「パブリックホストゾーン」を選択して作成します。

 

ALBへのルーティング設定(Aレコードの作成)

次に、ドメイン名とALBを紐付けます。

  1. 作成した shigashiga.com のホストゾーンを開き、「レコードを作成」をクリックします。

  2. レコード名: 空欄(または www など)にします。

  3. レコードタイプ: A - IPv4 アドレス、および一部の AWS リソースへのトラフィックをルーティングします。 を選択。

  4. 「エイリアス」 のスイッチを オン にします。

  5. トラフィックのルーティング先:

    • Application Load Balancer へのエイリアス を選択。

    • リージョン(例:アジアパシフィック (東京))を選択。

    • 作成した ALB名 を選択します。

  6. 「レコードを作成」をクリックします。

 

ローカル端末PCのhostsファイルを編集する

ここまで設定しましたがアクセスできませんでした。

今日はここまで持ち越します。

 

原因はprivatesubnetに配置したEC2にWebサーバがインストールできなかったということです。NATgatewayが必要。

 

日を改めて再度TRYしてみます。