ブラウザからs3バケットにデータをアップロードしようとしています。事前に署名されたURLを生成しましたが、403の禁止された応答を受け取ります。
私のサーバーコードは
const s3 = new AWS.S3({
accessKeyId: settings.resourceBucketKey,
secretAccessKey: settings.resourceBucketSecret,
region: 'eu-west-1'
})
const params = {
Bucket: 'my-bucket',
Key: 'photo.png',
ContentType: 'image/png',
ACL: 'authenticated-read',
}
const url = s3.getSignedUrl('putObject', params)
console.log(url)
私のクライアントコードは(生成されたURLを使用して)
const input = $('#myinput')
input.on('change', (res) => {
var theFormFile = $('#myinput').get()[0].files[0];
$.ajax({
url: url,
type: 'PUT',
contentType: 'image/png',
processData: false,
data: theFormFile,
}).success(function(){
alert('success')
})
}, false)
バケットのcorsを次のように設定しました:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
しかし、私はまだ403の応答を禁止されています。アップロードしようとしている画像は「photo.png」です。ここで何かが足りませんか?
事前署名されたURLの作成者(あなた)は、ファイルをアップロードするためにS3バケットにアクセスできる権限を持っている必要があります。これは、S3ドキュメントでより雄弁に説明されています。
事前署名されたURLは、事前署名されたURLの作成者がそのオブジェクトにアクセスする権限を持っている場合に限り、URLで識別されたオブジェクトへのアクセスを提供します。つまり、オブジェクトをアップロードするための事前署名されたURLを受け取った場合、事前署名されたURLの作成者がそのオブジェクトをアップロードするために必要な権限を持っている場合にのみ、オブジェクトをアップロードできます。
事前署名されたURLを作成しているIAMユーザーが必要な権限を持っていることを確認してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加