Почему я получаю сообщение об ошибке при загрузке с URL-адреса корзины S3?
2 ответа
Добавление этого в Bucket Policy решило проблему !!!
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"PublicRead",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject","s3:GetObjectVersion"],
"Resource":["arn:aws:s3:::Bucket_Name/*"]
}
]
}
Вы можете использовать заранее подписанный URL. Все объекты по умолчанию приватные. Только владелец объекта имеет разрешение на доступ к этим объектам. Однако владелец объекта может дополнительно обмениваться объектами с другими, создавая заранее подписанный URL-адрес, используя свои собственные учетные данные, чтобы предоставить ограниченное по времени разрешение на загрузку объектов [1].
Вам необходимо создать пользователя с программным доступом с необходимыми разрешениями [2].
const S3 = require('aws-sdk/clients/s3');
function async getObject(objectKey) {
const s3 = new S3({
accessKeyId: userAwsAccessKey,
secretAccessKey: userAwsSecretAccessKey,
});
try {
// S3 library documentation [3]
const url = await s3.getSignedUrlPromise('getObject', {
Bucket: bucketName,
Key: objectKey,
Expires: 60, // seconds
});
return url;
} catch (error) {
throw new Error(error);
}
}
[1] https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html
[2] https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_api
[3] https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrlPromise-property