当前位置: 首页 > 知识库问答 >
问题:

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

金理
2023-03-14

我对Amazon AWS平台相当陌生。

我的实现场景是这样的,我需要一个具有公共读取权限的S3存储桶来存储用户的个人资料图片和其他网站的静态图像,如徽标和背景。应用程序的用户可以上传个人资料图片。

当我尝试访问这个S3存储桶时,我得到了403禁止的错误。

通过阅读一些博客,我做到了以下几点,但不确定我到底错在哪里。

步骤1:为具有公共读取访问权限的区域US-EAST-2(与EC2实例相同的区域)创建一个名为“test.domain.com”的S3 bucked。

步骤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 package manager安装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 deploy部署应用程序。

对您的任何帮助都将不胜感激。非常感谢。

共有2个答案

谷玉韵
2023-03-14

添加以下策略规则以允许基于角色的访问已解决此问题

     {
        "Sid": "AllowPassRole",
        "Effect": "Allow",
        "Action": [
            "iam:PassRole",
            "iam:ListInstanceProfiles"
        ],
        "Resource": "*"
    }
百里渊
2023-03-14

我认为您需要将Principal元素添加到bucket策略中。我在下面代码中添加的行将允许每个人访问。

 {
        "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/*"
        ]
    }
 类似资料:
  • 使用Java AWS SDK,我创建了一个lambda函数来从s3 bucket读取csv文件。我已经将bucket公之于众,可以从任何浏览器轻松访问它和文件。为了测试它,我使用lambda控制台上的test按钮。我正在使用hello world测试配置输入模板。 它失败的原因是: 错误消息:指定的桶无效。(服务:Amazon S3;状态代码:400;错误代码:InvalidBucketName;

  • 我正在开发一个web应用程序,作为与Google云存储(GCS)的接口。 我正在使用后端服务来检索我存储在GCS上的文件列表及其使用JSON API的URL,并将其返回到我的Web应用程序。然而,我真的无法通过这些URL加载文件,总是返回403禁止。 我不确定GCS身份验证在幕后是如何工作的,也不确定是否可以直接授予对网络应用程序的访问权限。我不确定如何通过超文本传输协议请求附加应用程序鉴别信息。

  • 我正在尝试使用脚本从部署在谷歌云中的Hadoop集群访问谷歌存储桶。如果bucket访问是只读的,则会失败。 我在做什么: > 使用 在主机上: 看看GCS Java源代码,Google Cloud Storage Connector for Hadoop似乎需要空的“目录”对象,如果bucket是可写的,它可以自己创建这些对象;否则它就失败了。设置导致“检索对象时出错”错误。 是否可以以某种方式

  • 我一直在我的项目中使用基于azure定时器的功能。自从我开始使用该功能以来,我收到了与Azure存储帐户禁止访问相关的错误403。 我尝试在函数的配置中添加AzureWebJobs存储密钥我尝试添加azure存储帐户的允许ip范围的出站ip我尝试检查允许azure托管服务进入存储帐户的选项。 然而,我的函数应用程序中的特定计时器函数仍然存在错误。其他功能运行正常。 尽管如此,如果我允许存储帐户防火