0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[AWS]AWSで個人Webサーバを構築して独自ドメイン+HTTPS化してみた

0
Posted at

1. 初めに

オンプレミスLinuxの学習とクラウドの学習を兼ねて、AWS上でインフラを構築してみました。

2. 構成図

image.png

3. 全体設計

ネットワーク
  • VPC : 10.0.0.0/16
  • Public-1a : 10.0.0.0/24 ← NATゲートウェイ、ALB
  • Private-1a : 10.0.1.0/24 ← Web-1
  • Public-1c : 10.0.2.0/24 ← ALB
  • Private-1c : 10.0.3.0/24 ← Web-2
Security Group
  • ALB用SG : 0.0.0.0/0から 80, 443ポート許可
  • EC2用SG : ALB用SGから 80ポート許可
ALB
  • HTTPはHTTPSへリダイレクト
  • seenewlab.site → Web-1
  • sub.seenewlab.site → Web-2

4. ネットワーク作成

下記の順でネットワークを作成します。

  1. VPC作成
  2. Subnet作成
  3. IGW作成
  4. EIP取得
  5. NATGW作成
  6. Route Table作成
  7. Security Group作成

1. VPC作成

VPC → お使いのVPC → VPCを作成

  • 作成するリソース : VPCのみ
  • 名前 : seenew-vpc
  • IPv4 CIDR : 10.0.0.0/16
    image.png

2. Subnet作成

VPC → サブネット → サブネットを作成

Public-1a
  • VPC : seenew-vpc
  • サブネット名 : seenew-public-1a
  • AZ : ap-northeast-1a
  • IPv4 サブネット CIDRブロック : 10.0.0.0/24
Private-1a
  • VPC : seenew-vpc
  • サブネット名 : seenew-private-1a
  • AZ : ap-northeast-1a
  • IPv4 サブネット CIDRブロック : 10.0.1.0/24
Public-1c
  • VPC : seenew-vpc
  • サブネット名 : seenew-public-1c
  • AZ : ap-northeast-1c
  • IPv4 サブネット CIDRブロック : 10.0.2.0/24
Private-1c
  • VPC : seenew-vpc
  • サブネット名 : seenew-private-1c
  • AZ : ap-northeast-1c
  • IPv4 サブネット CIDRブロック : 10.0.3.0/24

3. IGW作成

VPC → インターネットゲートウェイ → インターネットゲートウェイの作成

  • 名前 : seenew-igw

作成後、IGW詳細 → アクション → VPCにアタッチ

  • VPC : seenew-vpc

4. EIP取得

VPC → Elastic IP → Elastic IP アドレスを割り振る


5. NATゲートウェイ作成

VPC → NATゲートウェイ → NATゲートウェイを作成

  • 名前 : seenew-nat
  • アベイラビリティーモード : ゾーナル
  • サブネット : seenew-public-1a
  • 接続タイプ : パブリック
  • Elastic IP 割り当て ID : 先ほどのEIP

6. Route Table作成

VPC → ルートテーブル → ルートテーブルを作成

Public Route Table
  • 名前 : seenew-public-rtb
  • VPC : seenew-vpc

作成後、ルート編集 → ルートを追加

  • 送信先 : 0.0.0.0/0
  • ターゲット : seenew-igw

ルート追加後、アクション → サブネット関連付けを編集

  • seenew-public-1a、seenew-public-1cをチェックし、関連付けを保存
Private Route Table
  • 名前 : seenew-private-rtb
  • VPC : seenew-vpc

作成後、ルート編集 → ルートを追加

  • 送信先 : 0.0.0.0/0
  • ターゲット : seenew-nat

ルート追加後、アクション → サブネット関連付けを編集

  • seenew-private-1a、seenew-private-1cをチェックし、関連付けを保存

7. Security Group

VPC(EC2) → セキュリティグループ → セキュリティグループを作成

ALB用SG
  • セキュリティグループ名 : seenew-sg-alb
  • 説明 : Security Group for ALB
  • VPC : seenew-vpc
  • インバウンドルール① : カスタムTCP 80 / ソース : Anywhere-IPv4
  • インバウンドルール② : カスタムTCP 443 / ソース : Anywhere-IPv4
  • アウトバウンドルール : すべてのトラフィック / ソース : Anywhere-IPv4
EC2用SG
  • セキュリティグループ名 : seenew-sg-ec2
  • 説明 : Security Group for EC2
  • VPC : seenew-vpc
  • インバウンドルール : カスタムTCP 80 / ソース : seenew-sg-alb
  • アウトバウンドルール : すべてのトラフィック / ソース : Anywhere-IPv4

5. IAM

SSMで接続するためのロールを作成します。

IAM → ロール → ロールを作成

  • 信頼されたエンティティタイプ : AWSのサービス
  • ユースケース : EC2
  • 許可ポリシー : AmazonSSMManagedInstanceCore
  • ロール名 : seenew-role-ec2-ssm

6. EC2起動

EC2 → インスタンス → インスタンスを起動

Web-1
  • 名前 : seenew-ec2-web1
  • OSイメージ : Amazon Linux 2023 kernel-6.1 AMI
  • インスタンスタイプ : t3.micro
  • キーペア : キーペアなしで実行
  • VPC : seenew-vpc
  • サブネット : seenew-private-1a
  • パブリックIPの自動割り当て : 無効化
  • セキュリティグループ : seenew-sg-ec2
  • 高度な詳細 → IAMインスタンスプロフィール : seenew-role-ec2-ssm
Web-2
  • 名前 : seenew-ec2-web2
  • サブネット : seenew-private-1c
  • 他はWeb-1と同様
起動後

System Manager → セッションマネージャー → セッションの開始 → 起動中のEC2へ接続

sudo dnf update -y
sudo dnf install nginx -y
sudo systemctl start nginx
systemctl status nginx

echo "<h1> Hello From Web-1 </h1>" | sudo tee /usr/share/nginx/html/index.html #web-1
echo "<h1> Hello From Web-2 </h1>" | sudo tee /usr/share/nginx/html/index.html #web-2

7. ALB作成

ターゲットグループ

ターゲットグループ ①

EC2 → ターゲットグループ → ターゲットグループの作成

  • ターゲットの種類 : インスタンス
  • ターゲットグループ名 : seenew-alb-tg-web1
  • プロトコル・ポート : HTTP, 80
  • VPC : seenew-vpc
  • プロトコルバージョン : HTTP1
  • ヘルスチェックプロトコル : HTTP
  • ヘルスチェックパス : /
  • ターゲット : seenew-ec2-web1
ターゲットグループ ②
  • ターゲットグループ名 : seenew-alb-tg-web2
  • ターゲット : seenew-ec2-web2
  • 他は TG ①と同様

ALB

EC2 → ロードバランサー → ロードバランサーの作成

  • 種類 : Application Load Balancer
  • ロードバランサー名 : seenew-alb
  • スキーム : インターネット向け
  • VPC : seenew-vpc
  • アベイラビリティーゾーンとサブネット : seenew-public-1a, seenew-public-1c
  • セキュリティグループ : seenew-sg-alb
  • リスナー① : HTTP(80) → HTTPS(443)へリダイレクト
  • リスナー② : HTTPS, 443 / ターゲットグループへ転送 / seenew-alb-tg-web1 / ポリシー名 : ELBSecurityPolicy-TLS13-1-2-Res-PQ-2025-09 / ACMから

リスナー②は 8. Route 53 + ACM を作成してから実施してください。

ALBを作成して、詳細を確認するとリスナーとルールに2つのルールが登録されています。
image.png
ここで、HTTPS:443をクリックし、ルールを追加します。

  • 条件 : ホストヘッダー
  • 一致パータンタイプ : 値マッチング
  • ホストヘッダー条件値 : sub.seenewlab.site
  • ターゲットグループへ転送 : seenew-alb-tg-web2
  • 優先度 : 10

8. Route53 + ACM

Route 53

Route53のホストゾーンを作成するためには独自ドメインが必要です。

1. ホストゾーン作成
Route 53 → ホストゾーン → ホストゾーンの作成
ドメイン名 : seenewlab.site (独自ドメイン)

作成が終わったらホストゾーンの詳細を確認します。
ネームサーバー欄にいくつかのドメインが書いています。
image.png

そのネームサーバーを自分がドメインを購入したサイトに登録します。
image.png

2. レコード作成
ホストゾーンの詳細 → レコードを作成

  • レコード名 : seenewlab.site
  • レコードタイプ : A
  • エイリアス : ○
  • トラフィックのルーティング先 : seenew-alb
  • 同様に*.seenewlab.siteのレコードも作成します。

ACM

Certificate Manager → 証明書を一覧 → リクエスト

  • 完全修飾ドメイン名 : seenewlab.site , 「別の名前を追加」で *.seenewlab.siteも追加
  • 検証方法 : DNS検証
  • キーアルゴリズム : RSA 2048

リクエストが終わったら証明書の詳細に ドメインが2つ表示されます。
右上の Route 53でレコードを作成をクリックします。
image.png
全部選択してレコードを作成。

9. 動作確認

ブラウザに http://seenewlab.site と入力します。
image.png
自動的に HTTPSにリダイレクトされ、web1の画面が表示されます。

証明書も正常に適用されています。
image.png


次はブラウザに http://sub.seenewlab.site と入力します。
image.png

sub.seenewlab.siteの場合は正常にweb2の方に転送されることが確認できます。

10. 終わりに

AWSを利用することで、簡単に公開Webサイトを構築できることがわかりました。
特に、HTTPS認証の方法が想像以上に簡単にできたので驚きました。

一方で、証明書作成時に出てきた「RSA 2048」やTLSポリシーなど、まだ理解しきれていない部分も多くありました。
今後は、単に構築するだけではなく、セキュリティや暗号化の仕組みについても理解を深めていきたいと思います。

また今回はALBを利用して、ドメインごとに別サーバへ振り分ける構成も試すことができ、実際のWebサービスに近い構成を体験できたのも良い経験になりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?