AWS CloudFrontの署名付きURLでOAI使ってS3にPUTしたファイルにHeadObjectすると Forbidden: null
取り急ぎ パーミッションとかバケットポリシーに問題が無い前提で
S3の前にCloudFrontを立てて、CloudFrontの署名付きURLを使ってS3にPUTしたファイルに HeadObject
すると Forbidden
になるという問題があった。
CloudFrontはOrigin Access Identityを使ってS3にアクセスする設定にしてあった。
Node.jsの aws-sdk
を使ってたんだけど、そのとき出たエラーが↓こう。
同じことをAWS-CLIでやると↓こう。
AWSコンソールからS3上の当該ファイルを確認すると、ファイルの所有者がOAIになっており、これのせいで他の人が触れなくなってしまっているらしい。
似たようなケースは公式に記載があったんだけど……
他のアカウントによってアップロードされた S3 オブジェクトから 403 エラーを解決する
他のアカウントじゃなくて同じアカウントのOrigin Access Identityなのですが
いろいろ調べてドンピシャだったのは以下の記事。
結論だけ書くと、S3にファイルをアップロードする時にACL bucket-owner-full-control
を指定するとエラーにならなくなる。
S3に直接 PutObject
するならAWS-CLIで --acl bucket-owner-full-control
を指定すればいいらしいんだけど、ここではCloudFrontの署名付きURLだからそれは違う。
コマンドラインから curl
とか、Webアプリから axios
とかでPUTする場合は、リクエストヘッダ X-Amz-Acl: bucket-owner-full-control
を付与すればよい。
↓こんなかんじ。
同じことで困ってる人がいたらやってみて