CLBにおける証明書利用について

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、SecurityHubで検出される「[ELB.2] SSL/HTTPS リスナーを使用する Classic Load Balancer は、 が提供する証明書を使用する必要があります AWS Certificate Manager」について解説します。

ポリシーの説明
[ELB.2] SSL/HTTPS リスナーを使用する Classic Load Balancer は、 AWS Certificate Managerが提供する証明書を使用する必要があります
Elastic Load Balancing の Security Hub コントロール – AWS Security Hub
Classic Load Balancer が AWS Certificate Manager (ACM) によって提供される HTTPS/SSL 証明書を使用しているかどうかをチェックします。HTTPS/SSL リスナーで構成された Classic Load Balancer が ACM によって提供される証明書を使用しない場合、コントロールは失敗します。
リスク: HTTPS/SSLリスナーを使用するClassic Load BalancerがAWS Certificate Manager (ACM) によって提供されない証明書を使用している場合、以下のようなリスクや課題が生じる可能性があります。
- 管理の複雑化: ACM以外の証明書(IAMにアップロードされた証明書など)は、有効期限の管理、更新作業、デプロイなどが手動で行われるため、管理が煩雑になり、更新漏れによるサービス停止のリスクが高まります。
- セキュリティリスクの増大: 証明書の有効期限切れは、ユーザーにセキュリティ警告を表示させ、サイトへの信頼性を損なうだけでなく、暗号化通信が確立できなくなるため、セキュリティリスクを増大させる可能性があります。
- ACMの利点の享受不足: ACMは、証明書の取得、デプロイ、更新を自動化し、追加料金なしで利用できるため、これを利用しないことはコスト効率や運用効率の面で不利となります。
- 統合の制限: ACMは、他のAWSサービス(CloudFront、API Gatewayなど)との統合が容易ですが、IAMにアップロードされた証明書などは、サービス間の連携が煩雑になる場合があります。
対策: HTTPS/SSLリスナーを使用するClassic Load Balancerには、AWS Certificate Manager (ACM) によって提供される証明書を使用するように移行することが推奨されます。
- ACM証明書の取得: ACMコンソールまたはAWS CLI/SDKを使用して、必要なドメイン名のSSL/TLS証明書をリクエストまたはインポートします。
- リスナー証明書の更新: Classic Load BalancerのHTTPS/SSLリスナーの設定を更新し、ACMから取得した証明書を使用するように設定します。
- 古い証明書の削除: IAMにアップロードされた古い証明書で、ACMに移行済みのものは削除し、管理の複雑さを軽減します。
- 証明書の自動更新の確認: ACM証明書は自動的に更新されるため、その設定を確認し、適切な状態であることを保証します。
修復方法
AWSコンソールでの修復手順
AWSコンソールを用いて、Classic Load BalancerのHTTPS/SSLリスナーで使用されている証明書をACMの証明書に置き換えます。
- AWSコンソールにログインします。
- ナビゲーションペインから EC2 を選択します。
- 左側のメニューの「ロードバランシング」セクションから Load Balancers を選択します。
- 該当するClassic Load Balancerを選択します。
- Listeners タブを選択します。
- HTTPSまたはSSLプロトコルのリスナーを選択し、「アクション」ドロップダウンメニューから Edit を選択します。
- 「SSL Certificate」セクションで、「Change」を選択します。
- 「Choose an existing certificate from AWS Certificate Manager (ACM)」を選択し、ドロップダウンメニューから適切なACM証明書を選択します。
- Save ボタンをクリックして変更を適用します。
- 古いIAM証明書が不要になった場合は、IAMコンソールに移動し、「証明書」セクションから該当する証明書を選択して削除します。

Terraformでの修復手順
TerraformでClassic Load BalancerのHTTPS/SSLリスナーにACM証明書を設定するには、aws_elb_listener
リソースの ssl_certificate_id
パラメータにACM証明書のARNを指定します。
resource "aws_acm_certificate" "example" {
domain_name = "example.com"
validation_method = "DNS"
# その他の設定 ...
}
resource "aws_elb" "example" {
name = "my-load-balancer"
listeners {
instance_port = 80
instance_protocol = "HTTP"
lb_port = 80
lb_protocol = "HTTP"
}
listeners {
instance_port = 443
instance_protocol = "HTTP"
lb_port = 443
lb_protocol = "HTTPS"
ssl_certificate_id = aws_acm_certificate.example.arn # ACM証明書のARNを指定
}
# その他の設定 ...
}
上記の例では、aws_elb_listener
ブロックのHTTPSリスナーの ssl_certificate_id
に、aws_acm_certificate.example
で作成したACM証明書のARNを設定しています。
既存のClassic Load Balancerの設定を更新する場合は、該当する aws_elb_listener
リソースを修正し、terraform apply
を実行します。古いIAM証明書を使用している場合は、ssl_certificate_id
をACM証明書のARNに更新します。IAM証明書をTerraformで管理している場合は、該当する aws_iam_server_certificate
リソースを削除することで、AWS上からも削除できます。
最後に
今回は、HTTPS/SSLリスナーを使用するClassic Load BalancerがACM以外の証明書を使用していることによるリスクと、ACM証明書を使用するように移行するための対策について解説しました。ACM証明書の利用は、運用効率の向上とセキュリティリスクの低減に繋がります。Classic Load Balancerをご利用の場合は、ACM証明書への移行を検討ください。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。
運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。