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)の問題点:
- S3 ドメインへの直接アクセスが可能(CloudFront バイパス)
- CloudFront 側の WAF・IP制限・Shield Standard がバイパスされる
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 方式一択