概要
CloudFrontの署名付きURLを使ってS3にアップロードしたファイルをブラウザから直接ダウンロードする方法は調べるといくつか出てくるが、アップロードの情報が少なかったので備忘録として書いておく。
今回はS3のpresigned-urlを使ってファイルアップロードするのではなくCloudFront経由でファイルアップロードする必要があった。
BackendをGolangで作っており、署名付きURL実装もGolangで実装していたため、SDKのリファレンスを眺めていたが関連しそうなものがなかった。
結論
CloudFrontに署名付きURLの設定を行うと自動的にS3のバケットポリシーを追加してくれるが、そこにActionを追加してから生成した署名付きURLにputでリクエストするだけで良かった。
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity *****"
},
"Action": [
"s3:GetObject",
"s3:PutObject" ←これを追加
],
"Resource": "arn:aws:s3:::S3のドメイン/*"
}
]
}