コンテンツにスキップ
Dev Classmethod Jp Articles Cloudfront S3 Signature Oac Comparison

S3 Presigned URLをCloudFrontでリバプロする構成を検証してみた

  • URL: https://dev.classmethod.jp/articles/cloudfront-s3-signature-oac-comparison/
  • 日付: 2026-06-05
  • Tier: Tier 3
  • 要旨: S3 Presigned URL をCloudFrontでリバプロする方式と CloudFront署名付きURL + OAC の2方式を実際に構築して比較。結論は「新規設計なら OAC 方式が基本」で、リバプロ方式には CloudFront バイパス・WAF回避・キャッシュ不能という制約あり。

詳細

  • 背景: 許可ドメイン制限環境で S3 ドメインにアクセスできない場合の代替構成を検証
  • 重要な前提: S3 Presigned URL と OAC は併用不可(InvalidArgument: Only one auth mechanism allowed エラー)。リバプロ方式ではOACを外す必要がある

リバプロ方式(S3 Presigned URL + CloudFront)の問題点:

  1. S3 ドメインへの直接アクセスが可能(CloudFront バイパス)
  2. CloudFront 側の WAF・IP制限・Shield Standard がバイパスされる
  3. X-Amz-Signature クエリパラメータが毎回変化するためキャッシュキーが変動しCDNとして機能しない

CloudFront署名付きURL + OAC 方式の特徴:

  • OAC あり(originAccessLevels: [READ, WRITE])で s3:PutObject も許可

  • trustedKeyGroups で CloudFront 公開鍵による署名を必須化

  • マルチパートアップロード(CreateMultipartUpload/CompleteMultipartUpload)も通ることを実証

  • CDK 設定例: ビヘイビアに AllowedMethods.ALLOW_ALL + CachingDisabled + ALL_VIEWER_EXCEPT_HOST_HEADER + trustedKeyGroups を組み合わせ

  • 評価: 既存システムの改修コストが小さいリバプロ方式は「動くが安全でない」。新規設計は OAC 方式一択