Я хочу получить доступ к изображению, хранящемуся в корзине s3, с помощью предварительно подписанного URL-адреса. Это изображение должно получить доступ к тому, у кого есть предварительно подписанный URL-адрес. Пожалуйста, помогите мне решить эту проблему.
Понятия не имею, что Если он получает мою подпись, то как это работает для других пользователей. Пожалуйста, помогите мне
Когда я делаю это. Она покажет эту ошибку
<Error>
<Code>SignatureDoesNotMatch</Code>
</Message>
<AWSAccessKeyId>XX</AWSAccessKeyId>
<StringToSign>GET 1900675866 /bucketname/161305.jpg</StringToSign>
<SignatureProvided>xxxx</SignatureProvided>
<StringToSignBytes>
47 45 54 0a 0a 0a 31 39 30 30 36 37 35 38 36 36 0a 2f 6b 6c 70 2d 6d 65 64 69 61 2f 31 36 31 33 30 35 2e 6a 70 67
</StringToSignBytes>
<RequestId>xxxxx</RequestId>
<HostId>
xxxx
</HostId>
</Error>
Вот код, который я пытался сгенерировать с помощью preigned-url
exports.handler = async function (event, context) {
console.log('strarting to generate pre-signed image url');
let s3BucketName = process.env.S3_BUCKET_NAME;
const request = JSON.parse(event.body);
const objectKey = request.key;
const studentId = request.studentId;
console.log(' generate pre-signed image url for:' + objectKey);
console.log('Started getting pre signed url for:' + objectKey);
let params = {
Bucket: s3BucketName,
Key: objectKey,
Expires: 60 * 60 * 24 * 365 * 10,
ContentType: 'image/jpg'
};
return await s3.getSignedUrlPromise('putObject', params).then(async url => {
console.log('Successfully generated pre signed image url', url);
const payload = {
message: 'success',
imageUrl: url
};
const response = {
statusCode: 201,
headers: responseHeaders,
body: JSON.stringify(payload),
};
return response;
}).catch(error => {
console.error(`Failed to generate presigned url: ${error}`);
return {
statusCode: error.statusCode || 501,
headers: responseHeaders,
body: JSON.stringify({
message: `Failed to generate presigned url. Request Id: ${context.awsRequestId}`
})
};
});
}
на стороне aws, я заблокировал весь доступ publi c. Вот политика ведра
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::media/*"
}
]
}