У меня есть лямбда, которая генерирует подписанный URL-адрес для пользователей для загрузки файлов в корзину s3. Код находится в nodejs:
export const getSignedURL = async (): Promise<{ signedURL: string }> => {
try {
const s3 = new S3();
const params = {
Bucket: CONFIG.s3Bucket,
Key: `${CONFIG.s3PictureFolder}/${uuidv4()}`,
Expires: CONFIG.presignedURLExpires,
};
const signedURL = await s3.getSignedUrlPromise('putObject', params);
console.log(`generate signedURL url: ${signedURL}`);
return { signedURL };
} catch (err) {
console.error(err);
throw err;
}
};
Я могу получить успешный URL-адрес. Однако, когда я тестировал его через curl
:
curl -XPUT PRESIGNED_URL --data "my data"
, я получил эту ошибку:
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><AWSAccessKeyId>XXXX</AWSAccessKeyId><StringToSign>
Кажется, что для этого URL-адреса требуется ключ доступа. Означает ли этот ключ AWS ключ учетных данных, который выдается IAM
?
Этот URL-адрес был создан лямбда-функцией. Как узнать, какой ключ он использует? И я хотел бы создать заранее созданный URL-адрес publi c для загрузки пользователями. Есть ли способ сделать это?