NodeJを使用してファイルをAWS S3にアップロードしています。クライアントがファイルを安全にダウンロードできるようにしたい。だから私は署名付きのURLを生成しようとしています。私のコードは次のようになります:
アップロード中
const s3bucket = new AWS.S3({
accessKeyId: 'my-access-key-id',
secretAccessKey: 'my-secret-access-key',
Bucket: 'my-bucket-name',
})
const uploadParams = {
Body: file.data,
Bucket: 'my-bucket-name',
ContentType: file.mimetype,
Key: `files/${file.name}`,
}
s3bucket.upload(uploadParams, function (err, data) {
// ...
})
ダウンロード中
const url = s3bucket.getSignedUrl('getObject', {
Bucket: 'my-bucket-name',
Key: 'file-key',
Expires: 300,
})
問題
URLを開くと、次のようになります。
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>AccessDenied</Code>
<Message>
There were headers present in the request which were not signed
</Message>
<HeadersNotSigned>Host</HeadersNotSigned>
<RequestId>D63C8ED4CD8F4E5F</RequestId>
<HostId>
9M0r2M3XkRU0JLn7cv5QN3S34G8mYZEy/v16c6JFRZSzDBa2UXaMLkHoyuN7YIt/LCPNnpQLmF4=
</HostId>
</Error>
私はなんとか間違いを見つけることができませんでした。私は本当にどんな助けにも感謝します:)
私は同様の問題を抱え続けましたが、私の設定は地域設定によるものでした。バックエンドには、アプリの構成設定がいくつかありました。
その1つは"region": "us-west-2"
だったため、署名済みURLはこのリージョンで作成されましたが、フロントエンドで呼び出されたとき、リージョンは"us-west-1"
に設定されました。
同じになるように変更すると、問題が修正されました。