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 ECS × Cloudflare 環境でHTTPS対応に苦戦した記録

0
Posted at

📌 既存アーキテクチャの状態

初期構成は以下の通り。

  • Docker Image → ECR に保存
  • ECS(Multi-AZ)でデプロイ
  • ALB 使用(HTTP のみ)
  • GitHub Actions による CI/CD
  • DB は Neon(PostgreSQL)
  • Cloudflare 使用(WAF / Rate Limiting)
  • HTTPS は Cloudflare の Flexible SSL のみで対応

構成イメージ:

問題はここ。

👉 HTTPS は Cloudflare までで、それ以降はすべて HTTP(非暗号化)

つまり「見た目だけ HTTPS」状態だった。

❗ 問題点

  • Cloudflare → ALB 間が平文 HTTP
  • End-to-End HTTPS ではない
  • セキュリティ的に不十分
  • 認証・Cookie・セキュリティポリシーに影響の可能性あり

🎯 目標

Cloudflare → ALB 間も HTTPS 化すること

最終構成:

🧱 実施ステップ

1. ACM 証明書の発行

AWS Certificate Manager で:

  • Public certificate を選択
  • ドメイン入力
    • api.example.com
  • 検証方法:DNS

2. Cloudflare DNS に CNAME を追加

ACM が提供する検証用 CNAME を登録

  • Type: CNAME
  • Name: _xxxxx
  • Target: _xxxxx.acm-validations.aws

⚠️ 重要:

  • Proxy status: DNS only(グレー雲)

理由:

  • ACM は実際の DNS レコードを確認する必要がある
  • Proxied 状態だと Cloudflare が応答を加工 → 検証失敗

3. ACM のステータス確認

  • Status: Issued

この状態になって初めて ALB で使用可能

4. (最大の落とし穴)リージョン問題

ACM 証明書は:

👉 ALB と同じリージョンでなければ使えない

例:

  • ALB: ap-northeast-2
  • ACM: us-east-1 → ❌ 表示されない

👉 対策:同じリージョンで再発行

5. ALB に HTTPS リスナー追加

  • Protocol: HTTPS
  • Port: 443
  • Certificate: ACM 証明書選択
  • Target Group: 既存の ECS

オプション:

  • Client certificate(mTLS):未使用

6. ALB のセキュリティグループ設定

Inbound:

  • HTTPS(443)許可
  • Source: 0.0.0.0/0(テスト用)

7. HTTP → HTTPS リダイレクト

ALB 側で:

  • HTTP(80) → HTTPS(443)へリダイレクト

8. Cloudflare の SSL モード変更

  • Flexible ❌
  • Full ❌
  • Full(Strict) ✅

🔍 最終構成

⚠️ よくあるハマりポイント

  1. ACM 証明書が表示されない

    • 原因:リージョン不一致
  2. 証明書が Pending のまま

    • 原因:Cloudflare の CNAME が Proxied
  3. HTTPS リスナーの警告(Reachability)

    • 原因:ALB のセキュリティグループで 443 未開放
  4. セキュリティグループとターゲットグループの混同

    • Security Group = ファイアウォール
    • Target Group = トラフィックの転送先

🔐 DNS 設定まとめ

レコード 設定
ACM 検証用 CNAME DNS only
サービス用ドメイン Proxied

📦 結果

  • Cloudflare → ALB 間も HTTPS 化完了
  • End-to-End に近い構成を実現
  • 既存の ECS / CI/CD はそのまま維持
  • セキュリティレベル向上

🧠 結論

HTTPS 対応の核心は:

  • ACM 証明書
  • ALB の 443 設定
  • Cloudflare の Full(Strict)

そして詰まりやすいポイントは:

  • リージョン
  • DNS 設定
  • セキュリティグループ

この3つさえ正しく押さえれば、全体の流れは意外とシンプル。

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?