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コンソールにアクセス

  1. AWSマネジメントコンソールにログイン
  2. 「CloudFront」サービスに移動
  3. 対象のディストリビューションIDをクリック

ステップ2: ビューアー接続のTLS設定を更新

  1. 「Behaviors」タブを選択
  2. デフォルトのキャッシュビヘイビアを選択し、「Edit」をクリック
  3. 「Viewer Protocol Policy」セクションで以下を設定:
    • HTTPS OnlyまたはRedirect HTTP to HTTPSを選択
  4. 「Save changes」をクリック

ステップ3: カスタム証明書とセキュリティポリシーの設定

  1. 「General」タブを選択
  2. 「Settings」セクションで「Edit」をクリック
  3. 「Custom SSL Certificate」セクションで:
    • ACM証明書を選択(まだない場合は新規作成、必ずus-east-1リージョンで作成
    • 「Security Policy」で最適なTLSポリシーを選択してください
  4. 「Save changes」をクリック

ステップ4: オリジン接続のTLS設定を更新

  1. 「Origins」タブを選択
  2. 対象のオリジンを選択し、「Edit」をクリック
  3. カスタムオリジンの場合:
    • 「Origin Protocol Policy」でHTTPS Onlyを選択
    • 「Origin SSL Protocols」で最低限TLSv1.2にチェック(オリジンがサポートしている場合はTLSv1.3も追加)
    • TLSv1、TLSv1.1、SSLv3のチェックを外す
    • 「Origin Connection Attempts」と「Origin Connection Timeout」を環境に応じて調整
  4. S3オリジンの場合:
    • 「Origin Access」で「Origin access control settings (recommended)」を選択
    • OACを作成または既存のものを選択
  5. 「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]
}

 

主要な修正ポイント

  1. origin_protocol_policy: "https-only"に設定し、オリジンへの接続をHTTPSに限定
  2. origin_ssl_protocols: ["TLSv1.2", "TLSv1.3"]を指定し、非推奨プロトコルを除外(オリジンのサポート状況に応じて調整)
  3. viewer_protocol_policy: "redirect-to-https"でHTTPリクエストを自動的にHTTPSにリダイレクト
  4. minimum_protocol_version:
    • "TLSv1.2_2021": TLS 1.3をサポート(推奨)
    • "TLSv1.2_2019": TLS 1.2のみ(互換性重視)
    • "TLSv1.2_2018": より広い暗号スイートをサポート(レガシー環境向け)
  5. 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機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。

参考資料

この記事をシェアする

クラウドセキュリティ対策実践集一覧へ戻る

貴社の利用状況に合わせた見積もりを作成します。

料金プランを詳しく見る