AWSではアーキテクチャに応じてHTTPSを追加する複数の方法があります。ロードバランサー、CloudFront、スタンドアロンEC2インスタンスのどれを使用するかで最適なアプローチが異なります。
判断ツリー
ALB、NLB、CloudFrontを使用していますか?
├── はい → AWS Certificate Manager(ACM)を使用 -- 無料、自動更新
└── いいえ(スタンドアロンEC2)?
├── Certbotをインストールできる? → EC2上のCertbot(自動更新)
└── root不要 / 素早いセットアップ? → GetHTTPS → EC2に手動インストール
オプション1:AWS Certificate Manager(ACM)— ロードバランサーとCloudFront用
ACMは無料の自動更新SSL証明書を提供します。AWSサービス(ALB、NLB、CloudFront、API Gateway)でのみ動作し、秘密鍵はダウンロードできません。
証明書のリクエスト
- コンソールでAWS Certificate Managerを開く
- 証明書のリクエスト → パブリック証明書のリクエストをクリック
- ドメインを入力:
example.com、*.example.com - 検証方法を選択:DNS検証(推奨)またはメール
- リクエストをクリック
ALBへのアタッチ
- EC2 → ロードバランサー → ALBを選択
- リスナータブ → リスナーを追加
- プロトコル:HTTPS、ポート:443
- デフォルトSSL/TLS証明書: ACM証明書を選択
オプション2:EC2上のLet’s Encrypt(スタンドアロンインスタンス)
ロードバランサーなしで単一のEC2インスタンスを実行する場合、サーバーに直接証明書をインストールします。
GetHTTPSを使用(インストール不要)
- GetHTTPSから証明書を取得
- EC2インスタンスにファイルをアップロード:
scp fullchain.pem privkey.pem ec2-user@your-ec2-ip:/etc/ssl/ - インスタンス上でNginxまたはApacheを設定
Certbotを使用(自動更新)
# Amazon Linux 2023
sudo dnf install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
ACM vs Let’s Encrypt(AWS上)
| ACM | Let’s Encrypt(GetHTTPS/Certbot) | |
|---|---|---|
| コスト | 無料 | 無料 |
| ALB/CloudFrontで動作 | ✅ | ❌ |
| EC2で直接動作 | ❌ | ✅ |
| 自動更新 | ✅(AWS管理) | ✅(Certbot)または手動(GetHTTPS) |
| 秘密鍵へのアクセス | ❌(AWSが保持) | ✅(あなたが保持) |
目安: ALBまたはCloudFrontの背後にあるものにはACMを使用。スタンドアロンEC2インスタンスにはLet’s Encryptを使用。
よくある質問
EC2で直接ACM証明書を使えますか?
いいえ。ACM証明書はAWSマネージドサービス(ALB、NLB、CloudFront、API Gateway)にのみアタッチできます。秘密鍵はエクスポートできません。スタンドアロンEC2にはGetHTTPSまたはCertbotを使用してください。
ACMのリージョンはどこにすべきですか?
ALB/NLBの場合:ロードバランサーと同じリージョンで証明書をリクエスト。CloudFrontの場合:オリジンの場所に関係なく、証明書はus-east-1(バージニア北部)に必ず配置してください。
ACMは本当に無料ですか?
はい。ACMのパブリックSSL/TLS証明書は無料です。証明書あたりの料金も更新料金もありません。証明書を使用するAWSリソース(ALB、CloudFrontなど)の料金のみが発生します。