CloudFrontディストリビューションの非推奨TLS設定を最新化する手順

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、 「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、CloudFrontディストリビューションの非推奨TLS設定を最新化する手順について、リスクと対策を解説します。

ポリシーの説明
CloudFrontディストリビューションにおいて、ビューアー(エンドユーザー)とCloudFront間、およびCloudFrontとオリジンサーバー間の両方の通信で、SSL 3.0やTLS 1.0/1.1などの非推奨プロトコルが使用されていないかを確認します。これらの古いプロトコルは既知の脆弱性を持ち、中間者攻撃やデータ漏洩のリスクを高めます。TLS 1.2以降のプロトコルのみを使用することで、エンドツーエンドの通信セキュリティを確保できます。
修復方法
コンソールでの修復手順
AWSのコンソールを使用して、CloudFrontディストリビューションのTLS設定を更新します。
ステップ1: CloudFrontコンソールにアクセス
- AWSマネジメントコンソールにログイン
- 「CloudFront」サービスに移動
- 対象のディストリビューションIDをクリック
ステップ2: ビューアー接続のTLS設定を更新
- 「Behaviors」タブを選択
- デフォルトのキャッシュビヘイビアを選択し、「Edit」をクリック
- 「Viewer Protocol Policy」セクションで以下を設定:
HTTPS Only
またはRedirect HTTP to HTTPS
を選択
- 「Save changes」をクリック
ステップ3: カスタム証明書とセキュリティポリシーの設定
- 「General」タブを選択
- 「Settings」セクションで「Edit」をクリック
- 「Custom SSL Certificate」セクションで:
- ACM証明書を選択(まだない場合は新規作成、必ずus-east-1リージョンで作成
- 「Security Policy」で最適なTLSポリシーを選択してください
- 「Save changes」をクリック
ステップ4: オリジン接続のTLS設定を更新
- 「Origins」タブを選択
- 対象のオリジンを選択し、「Edit」をクリック
- カスタムオリジンの場合:
- 「Origin Protocol Policy」で
HTTPS Only
を選択 - 「Origin SSL Protocols」で最低限
TLSv1.2
にチェック(オリジンがサポートしている場合はTLSv1.3
も追加) - TLSv1、TLSv1.1、SSLv3のチェックを外す
- 「Origin Connection Attempts」と「Origin Connection Timeout」を環境に応じて調整
- 「Origin Protocol Policy」で
- S3オリジンの場合:
- 「Origin Access」で「Origin access control settings (recommended)」を選択
- OACを作成または既存のものを選択
- 「Save changes」をクリック
Terraformでの修復手順
TerraformでCloudFrontディストリビューションのTLS設定を最新化するコードと、主要な修正ポイントを説明します。
resource "aws_cloudfront_distribution" "secure_distribution" {
enabled = true
is_ipv6_enabled = true
default_root_object = "index.html"
# オリジン設定 - TLS 1.2のみを使用
origin {
domain_name = "example.com"
origin_id = "secure-origin"
custom_origin_config {
http_port = 80
https_port = 443
origin_protocol_policy = "https-only" # HTTPSのみを強制
# TLS 1.2以降を許可(非推奨プロトコルを除外)
# オリジンがTLS 1.3をサポートする場合は追加
origin_ssl_protocols = ["TLSv1.2", "TLSv1.3"]
# タイムアウト設定
origin_keepalive_timeout = 5
origin_read_timeout = 30
}
}
# デフォルトキャッシュビヘイビア
default_cache_behavior {
allowed_methods = ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"]
cached_methods = ["GET", "HEAD"]
target_origin_id = "secure-origin"
forwarded_values {
query_string = false
cookies {
forward = "none"
}
}
# ビューアープロトコルポリシー - HTTPSを強制
viewer_protocol_policy = "redirect-to-https"
min_ttl = 0
default_ttl = 3600
max_ttl = 86400
compress = true
}
# 価格クラス
price_class = "PriceClass_100"
# 地理的制限(必要に応じて設定)
restrictions {
geo_restriction {
restriction_type = "none"
}
}
# ビューアー証明書設定 - 最新のTLSポリシーを使用
viewer_certificate {
# ACM証明書を使用(事前に作成が必要)
acm_certificate_arn = aws_acm_certificate_validation.cert.certificate_arn
ssl_support_method = "sni-only"
# TLS 1.2以降のみを許可する最新のセキュリティポリシー
minimum_protocol_version = "TLSv1.2_2021"
}
# タグ
tags = {
Name = "Secure CloudFront Distribution"
Environment = "Production"
Security = "TLS1.2-Enforced"
}
}
# ACM証明書の例(CloudFrontではus-east-1リージョンの証明書が必須)
provider "aws" {
alias = "us-east-1"
region = "us-east-1"
}
resource "aws_acm_certificate" "cert" {
provider = aws.us-east-1
domain_name = "example.com"
subject_alternative_names = ["*.example.com"]
validation_method = "DNS"
lifecycle {
create_before_destroy = true
}
tags = {
Name = "CloudFront Certificate"
}
}
# 証明書検証
resource "aws_acm_certificate_validation" "cert" {
provider = aws.us-east-1
certificate_arn = aws_acm_certificate.cert.arn
validation_record_fqdns = [for record in aws_route53_record.cert_validation : record.fqdn]
}
主要な修正ポイント
- origin_protocol_policy:
"https-only"
に設定し、オリジンへの接続をHTTPSに限定 - origin_ssl_protocols:
["TLSv1.2", "TLSv1.3"]
を指定し、非推奨プロトコルを除外(オリジンのサポート状況に応じて調整) - viewer_protocol_policy:
"redirect-to-https"
でHTTPリクエストを自動的にHTTPSにリダイレクト - minimum_protocol_version:
"TLSv1.2_2021"
: TLS 1.3をサポート(推奨)"TLSv1.2_2019"
: TLS 1.2のみ(互換性重視)"TLSv1.2_2018"
: より広い暗号スイートをサポート(レガシー環境向け)
- ssl_support_method:
"sni-only"
でSNI(Server Name Indication)を使用し、専用IPアドレスのコストを削減
最後に
この記事では、CloudFrontディストリビューションの非推奨TLS設定を最新化する手順について、包括的なリスク分析と具体的な修復方法を解説しました。
SSL 3.0やTLS 1.0/1.1などの古いプロトコルは既知の脆弱性(POODLE、BEAST攻撃など)を持ち、攻撃者に悪用される可能性があります。TLS 1.2以降のプロトコルのみを使用することで、通信の安全性を大幅に向上させ、PCI DSS、HIPAA等のコンプライアンス要件を満たすことができます。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。