AWS Certificate Manager (ACM)
ACM 是 AWS 的 TLS/SSL 憑證管理服務。幫你申請、管理、部署 HTTPS 用的憑證,而且免費。
基本概念
使用者 → https://my-app.example.com → ALB (用 ACM 憑證做 TLS 終結) → Pod (HTTP)
↑
ACM 管這段
| 概念 | 說明 |
|---|---|
| TLS/SSL 憑證 | 證明「這個 domain 是我的」,讓瀏覽器顯示 HTTPS 鎖頭 |
| ACM | AWS 免費幫你申請和管理憑證 |
| TLS 終結 (TLS Termination) | ALB 負責解密 HTTPS,後端 Pod 只收 HTTP |
| Domain Validation | 證明你擁有這個 domain(透過 DNS 或 Email) |
憑證類型
| 類型 | 涵蓋範圍 | 範例 |
|---|---|---|
| 單一域名 | 只有一個 domain | api.example.com |
| Wildcard | 一個層級的所有子域名 | *.example.com → 涵蓋 api.example.com, app.example.com 等 |
| SAN (Subject Alternative Names) | 列舉多個特定域名 | api.example.com, app.example.com, admin.example.com |
Wildcard vs SAN
Wildcard 憑證: *.example.com
✅ api.example.com
✅ app.example.com
✅ anything.example.com
❌ sub.api.example.com (不涵蓋兩層)
❌ example.com (不涵蓋裸域名)
SAN 憑證: [api.example.com, app.example.com, admin.example.com]
✅ api.example.com
✅ app.example.com
✅ admin.example.com
❌ new.example.com (沒列在清單裡)
→ 要加新域名就要重新申請/修改憑證
Domain Validation (DNS 驗證)
ACM 需要你證明你擁有這個 domain。最常用的是 DNS 驗證:
1. 你在 ACM 申請 api.example.com 的憑證
2. ACM 給你一筆 CNAME record:
_abc123.api.example.com → _xyz789.acm-validations.aws.
3. 你把這筆 CNAME 加到 Route53 (或你的 DNS provider)
4. ACM 驗證 CNAME 存在 → 確認你擁有這個 domain → 發憑證
5. 只要 CNAME 一直存在,ACM 會自動 renew 憑證 (不用手動)
ACM Console 裡 的 "Create record in Route53" 按鈕就是幫你做步驟 3。
跟 ALB 搭配使用
ALB 做 TLS 終結,你不需要在 Pod 裡面處理 HTTPS:
Client ALB Pod
│ │ │
│── HTTPS:443 ──────────→│ │
│ (ACM 憑證加密) │── HTTP:80 ────────────→│
│ │ (內部明文, 安全) │
│←── HTTPS response ─────│←── HTTP response ──────│