我在Windows笔记本电脑上使用.NET Core 2开发web api。我试图访问我的S3存储桶并收到“拒绝访问”错误。
有趣的是它适用于AWS CLI。
我的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:Access Denied。
当我从AWS CLI执行此操作时,它可以正常工作。
aws --profile my-profile s3 ls shel-bucket
PRE test1/
PRE images/
PRE projects/
PRE test4/
我的凭据和配置文件位于.aws中的默认位置。
答案 0 :(得分:1)
在您的代码中,尝试将“启动”替换为:
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中上传了一个ASP.NET CORE中针对S3存储桶的基本CRUD示例。
答案 1 :(得分:0)
我尝试了所有这些方法,并且在部署到AWS Lambda时有效,但是从未在本地环境中工作。我通过自己创建一个新的S3Client而不是注入它来解决它:
var S3Client = new AmazonS3Client(Amazon.RegionEndpoint.USWest2);
答案 2 :(得分:0)
检查您对帐户中文件写/读访问的权限,或通过编码尝试操作
CannedACL = S3CannedACL.BucketOwnerFullControl
当我遇到相同的问题时,它解决了我的问题。
答案 3 :(得分:0)