#javascript #amazon-s3 #aws-sdk #amazon-ecs
Вопрос:
Я пытаюсь получить доступ к корзине S3 с помощью SDK AWS JS, но безуспешно.
У меня есть определение задачи, в котором используется роль задачи под названием Foo
. Эта роль задачи как вложенная политика для доступа к корзине S3:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::foo-bucket"
}
]
}
В документации AWS о загрузке учетных данных из ролей IAM для EC2 говорится, что я должен настроить свой экземпляр для использования ролей IAM. Но я ничего не могу найти об этом в документации AWS.
Я попытался определить credentials
, используя AWS.ECSCredentials class
:
const options = {
apiVersion: '2006-03-01',
region: bucketSettings.region,
credentials: new AWS.ECSCredentials({
httpOptions: { timeout: 5000 }, // 5 second timeout
maxRetries: 10, // retry 10 times
retryDelayOptions: { base: 200 }, // see AWS.Config for information
})
};
this.s3Instance = new AWS.S3(options);
Когда я пытаюсь получить доступ к файлу в корзине S3:
const document = await this.s3Instance
.getObject({ Bucket: bucketSettings.name, Key: key })
.promise();
return document;
У меня все еще есть
доступ запрещен
Есть идеи, чего мне там не хватает?
Ответ №1:
В политике доступа к корзине S3 произошла ошибка (обратите внимание /*
в конце ресурса).:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::foo-bucket/*"
}
]
}
Кроме того, credentials
опция, предоставляемая в SDK AWS, не требуется:
const options = {
apiVersion: '2006-03-01',
region: bucketSettings.region,
};
this.s3Instance = new AWS.S3(options);
Комментарии:
1. Я пытаюсь сделать то же самое, однако, когда я оставляю учетные данные, я получаю сообщение об ошибке «Отсутствуют учетные данные», и если я добавляю учетные данные, я получаю сообщение об ошибке «ECSCredentials не является конструктором». Есть какие-нибудь советы ?