[英]Deleting a file from a sub directory of an AWS S3 bucket using asp.net
[英]Accessing AWS S3 bucket from asp.net mvc application give 403 error
我是Amazon AWS平台的新手。
我的实现方案是这样的,我需要一个具有公共读取访问权限的S3存储桶,以存储用户的个人资料图片和网站的其他静态图片(如徽标和背景)。 该应用程序的用户可以上传个人资料图片。
当我尝试访问此S3存储桶时,出现403禁止错误。
我通过阅读一些博客来完成以下工作,不确定确切的错误所在。
步骤1:为具有公共读取访问权限的US-EAST-2区域(与EC2实例相同的区域)创建一个名为“ test.domain.com”的S3 buck。
步骤2:使用以下配置创建策略
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:ListObject"
],
"Resource": [
"arn:aws:s3:::test.domain.com/*"
]
}
步骤3:为Amazon EC2创建新角色,并附加上面创建的策略。
步骤4:将新创建的角色附加到EC2实例
步骤5:使用VS2015随附的预定义模板创建MVC应用程序,通过nuget软件包管理器安装Amazon AWSSDK,并编写以下代码以查看一切是否正常。
//getting instanceprofilecredentials
var profile = new InstanceProfileAWSCredentials();
//creating s3 client with credentials and region
var s3= new AmazonS3Client(profile, Amazon.RegionEndpoint.USEast2);
//creating a new request and assigning bucket name
var request = new ListObjectsRequest();
request.BucketName = "test.domain.com";
//sending the request
var response = s3.ListObjects(request);
//counting no of existing objects
int totalObjects=response.S3Objects.Count;
//display as controllers action result
return Content(totalObjects)
步骤6:使用VS2015的Web部署来部署应用程序。
任何帮助,不胜感激。 谢谢。
我认为您需要在bucket策略中添加Principal
元素 。 我在下面的代码中添加的这一行将允许所有人访问。
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:ListObject"
],
"Resource": [
"arn:aws:s3:::test.domain.com/*"
]
}
添加以下策略规则以允许基于角色的访问已解决此问题
{
"Sid": "AllowPassRole",
"Effect": "Allow",
"Action": [
"iam:PassRole",
"iam:ListInstanceProfiles"
],
"Resource": "*"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.