繁体   English   中英

从asp.net MVC应用程序访问AWS S3存储桶给出403错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM