Веб-API ASP.NET Core 2 AWS .NET SDK S3 Доступ запрещен
Я разрабатываю веб-API с использованием.NET Core 2 на ноутбуке с Windows. Я пытаюсь получить доступ к своей корзине S3 и получаю сообщение об ошибке "Отказано в доступе".
Интересно, что он работает с CLI AWS.
Мой файл appSettings.Development.json:
"AWS": {
"Profile": "my-profile",
"Region": "us-east-1"
}
Файл Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
var options = Configuration.GetAWSOptions();
services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
services.AddAWSService<IAmazonS3>();
}
Файл BucketController.cs:
public async Task<IEnumerable<string>> Get()
{
// List all objects
ListObjectsRequest listRequest = new ListObjectsRequest
{
BucketName = "shel-bucket"
};
ListObjectsResponse listResponse;
do
{
// Get a list of objects
listResponse = await _client.ListObjectsAsync(listRequest);
foreach (S3Object obj in listResponse.S3Objects)
{
Console.WriteLine("Object - " + obj.Key);
Console.WriteLine(" Size - " + obj.Size);
Console.WriteLine(" LastModified - " + obj.LastModified);
Console.WriteLine(" Storage class - " + obj.StorageClass);
}
// Set the marker property
listRequest.Marker = listResponse.NextMarker;
} while (listResponse.IsTruncated);
return null;
}
Я получаю ошибку AmazonS3Exception: доступ запрещен.
Когда я делаю это из интерфейса командной строки AWS, это работает.
aws --profile my-profile s3 ls shel-bucket
PRE test1/
PRE images/
PRE projects/
PRE test4/
Мои учетные данные и файлы конфигурации находятся в папке по умолчанию в.aws.
2 ответа
В своем коде попробуйте заменить ваш запуск:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddSingleton<IS3Service, S3Service>();
services.AddAWSService<IAmazonS3>();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
Сначала вам нужно установить в Package Manager Console
:
`Install-package AWSSDK.Extensions.NETCORE.Setup`
`Install-package AWSSDK.S3`
Тогда вам нужно иметь файл учетных данных в каталоге:
`C:\Users\username\.aws\credentials`
Файл учетных данных должен иметь следующий формат:
[default]
aws_access_key_id=[Write your access key in here]
aws_secret_access_key=[Write your secret access key in here]
region=[Write your region here]
Я загрузил в github пример базового CRUD в ASP.NET CORE для корзин S3.
Проверьте свои разрешения на доступ к записи / чтению файла в своей учетной записи или попробуйте через кодирование
CannedACL = S3CannedACL.BucketOwnerFullControl
Это решило мою проблему, когда я столкнулся с той же проблемой.
- Я решил с помощью следующих шагов
- Сервис Goto AWS IAM
- Выберите пользователей
- Нажмите Добавить разрешения.
- Дайте доступ к S3 и попробуйте сейчас.
Я попробовал все это, и это работало при развертывании на AWS Lambda, но никогда не работало в моей локальной среде. Я решил это, создав новый S3Client самостоятельно, а не вводя его:
var S3Client = new AmazonS3Client(Amazon.RegionEndpoint.USWest2);