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?

ALBのリスナーで複数ドメインのSSL通信を実現する方法

Posted at

概要

Application Load Balancer(ALB)のリスナー機能を使用して、複数のドメインに対してSSL通信を設定する方法を解説します。証明書の管理からリスナールールの設定まで、実際の構築手順を詳しく説明します。

目次

  1. はじめに
  2. ALBのリスナーとは
  3. 複数ドメインSSL通信の概要
  4. 実装手順
  5. 動作確認
  6. 料金とベストプラクティス
  7. 終わりに

はじめに

現代のWebアプリケーションでは、複数のドメインやサブドメインを使用したサービス提供が一般的になっています。例えば、メインサイトがexample.com、APIエンドポイントがapi.example.com、管理画面がadmin.example.comといった構成です。

これらすべてのドメインでSSL通信を実現する場合、従来は複数のロードバランサーを用意する必要がありました。しかし、AWS Application Load Balancer(ALB)のリスナー機能を使用すれば、1つのALBで複数ドメインのSSL通信を効率的に処理できます。

image.png

ALBのリスナーとは

ALBのリスナーは、指定されたプロトコルとポートで接続要求をチェックし、設定されたルールに基づいて適切なターゲットグループにリクエストを転送する機能です。

リスナーの主な特徴:

  • プロトコル対応:HTTP、HTTPS、gRPCに対応
  • ポート指定:1つのALBに複数のリスナーを設定可能
  • ルールベース:ホストヘッダー、パス、HTTPメソッドなどの条件で転送先を決定
  • SSL終端:ALBでSSL/TLS処理を行い、バックエンドには平文で転送可能

AWS公式ドキュメントによると、『リスナーは、設定したプロトコルとポートを使用して接続要求をチェックするプロセスです』( https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html )と説明されています。

複数ドメインSSL通信の概要

ALBで複数ドメインのSSL通信を実現する方法は主に2つあります:

1. ワイルドカード証明書を使用

*.example.comのワイルドカード証明書を使用し、すべてのサブドメインに対応する方法です。

メリット:

  • 証明書管理が簡単
  • 新しいサブドメイン追加時の作業が不要

デメリット:

  • 異なるドメイン(example.comとother.com)には対応不可
  • セキュリティ上、必要以上の権限を持つことになる

2. 複数証明書を使用

ドメインごとに個別の証明書を取得し、ALBに複数の証明書を関連付ける方法です。

メリット:

  • 異なるドメインに対応可能
  • 必要最小限の権限で運用可能
  • 証明書の更新を個別に管理可能

デメリット:

  • 証明書管理が複雑
  • ドメイン追加時に証明書の追加作業が必要

今回は、より実用的な「複数証明書を使用する方法」を中心に解説します。

image.png

実装手順

4.1 SSL証明書の準備

まず、AWS Certificate Manager(ACM)で各ドメインの証明書を取得します。

# example.com用の証明書をリクエスト
aws acm request-certificate \
    --domain-name example.com \
    --validation-method DNS \
    --region us-east-1

# api.example.com用の証明書をリクエスト
aws acm request-certificate \
    --domain-name api.example.com \
    --validation-method DNS \
    --region us-east-1

# admin.example.com用の証明書をリクエスト
aws acm request-certificate \
    --domain-name admin.example.com \
    --validation-method DNS \
    --region us-east-1

注意点:

  • ALBと同じリージョンで証明書を取得する必要があります
  • DNS検証を使用する場合は、Route 53での自動検証が便利です
  • 証明書の発行には数分から数時間かかる場合があります

4.2 ALBの作成

次に、ALB本体を作成します。

# ALBの作成
aws elbv2 create-load-balancer \
    --name multi-domain-alb \
    --subnets subnet-12345678 subnet-87654321 \
    --security-groups sg-12345678 \
    --scheme internet-facing \
    --type application \
    --ip-address-type ipv4

セキュリティグループでは、以下のポートを開放する必要があります:

  • 80番ポート:HTTP通信(HTTPSへのリダイレクト用)
  • 443番ポート:HTTPS通信

4.3 リスナーの設定

ALBにHTTPSリスナーを作成し、デフォルト証明書を設定します。

# HTTPSリスナーの作成
aws elbv2 create-listener \
    --load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/multi-domain-alb/1234567890123456 \
    --protocol HTTPS \
    --port 443 \
    --certificates CertificateArn=arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012 \
    --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/default-tg/1234567890123456

追加の証明書を関連付けるには、以下のコマンドを使用します:

# 追加証明書の関連付け
aws elbv2 add-listener-certificates \
    --listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789012:listener/app/multi-domain-alb/1234567890123456/1234567890123456 \
    --certificates CertificateArn=arn:aws:acm:us-east-1:123456789012:certificate/87654321-4321-4321-4321-210987654321 \
                   CertificateArn=arn:aws:acm:us-east-1:123456789012:certificate/11111111-2222-3333-4444-555555555555

4.4 リスナールールの作成

各ドメインを適切なターゲットグループに振り分けるルールを作成します。

# api.example.com用のルール
aws elbv2 create-rule \
    --listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789012:listener/app/multi-domain-alb/1234567890123456/1234567890123456 \
    --priority 100 \
    --conditions Field=host-header,Values=api.example.com \
    --actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/api-tg/1234567890123456

# admin.example.com用のルール
aws elbv2 create-rule \
    --listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789012:listener/app/multi-domain-alb/1234567890123456/1234567890123456 \
    --priority 200 \
    --conditions Field=host-header,Values=admin.example.com \
    --actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/admin-tg/1234567890123456

ルールの優先度について:

  • 数字が小さいほど優先度が高い
  • 1から50000までの範囲で設定可能
  • デフォルトルール(優先度最低)は自動的に作成される

image.png

動作確認

設定完了後、以下の方法で動作を確認できます:

1. DNS設定の確認

各ドメインがALBのDNS名に正しく向いているか確認します:

# DNSレコードの確認
nslookup example.com
nslookup api.example.com
nslookup admin.example.com

2. SSL証明書の確認

ブラウザまたはコマンドラインツールで証明書が正しく配信されているか確認します:

# SSL証明書の確認
curl -I https://example.com
curl -I https://api.example.com
curl -I https://admin.example.com

3. 振り分け動作の確認

各ドメインが正しいターゲットグループに振り分けられているか確認します:

# レスポンスの確認
curl -H "Host: example.com" https://ALB_DNS_NAME/
curl -H "Host: api.example.com" https://ALB_DNS_NAME/
curl -H "Host: admin.example.com" https://ALB_DNS_NAME/

料金とベストプラクティス

料金について

ALBの料金は以下の要素で構成されます:

項目 料金(東京リージョン)
ALB時間料金 約$0.0243/時間
LCU(Load Balancer Capacity Unit)料金 約$0.008/LCU時間
ACM証明書 無料

LCUについて:
LCUは以下の4つのメトリクスの最大値で計算されます:

  • 新規接続数(25接続/秒 = 1LCU)
  • アクティブ接続数(3000接続 = 1LCU)
  • 処理帯域幅(1GB/時 = 1LCU)
  • ルール評価数(1000評価/秒 = 1LCU)

ベストプラクティス

  1. 証明書の自動更新

    • ACMを使用すると証明書の自動更新が可能
    • 外部証明書を使用する場合は更新スケジュールを管理
  2. セキュリティ設定

    • 最新のSSL/TLSプロトコルを使用
    • 不要な古いプロトコルは無効化
  3. モニタリング

    • CloudWatchでALBのメトリクスを監視
    • アクセスログを有効化して詳細な分析を実施
  4. リスナールールの整理

    • 優先度を適切に設定
    • 不要なルールは削除してパフォーマンスを向上

AWS公式ドキュメントでは、『SSL/TLS証明書の管理にはAWS Certificate Managerを使用することを強く推奨します』( https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html )と記載されています。

終わりに

ALBのリスナー機能を使用することで、1つのロードバランサーで複数ドメインのSSL通信を効率的に処理できます。この方法により、インフラストラクチャのコストを削減しながら、柔軟なWebサービスの構築が可能になります。

次のステップとして:

  • WAF(Web Application Firewall)との連携
  • CloudFrontとの組み合わせによるパフォーマンス向上
  • Route 53 Health Checkを使用したフェイルオーバー設定

これらの機能を組み合わせることで、より堅牢で高性能なWebアプリケーション基盤を構築できます。

参考文献・参考サイト

AWS公式ドキュメント

参考記事

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?