【问题标题】:putting a file in S3 bucket in private subnet将文件放在私有子网的 S3 存储桶中
【发布时间】:2021-12-14 01:26:11
【问题描述】:

过去两天我一直在努力解决这个问题。我正在尝试将文件放在私有子网的 S3 存储桶中。以下是我的代码:

var s3Config = new AmazonS3Config() { ServiceURL = "https://myVPCnameamazonaws.com" };
            using (var cli = new AmazonS3Client(
               awsAccessKey,
               awsSecretKey,
               s3Config))

            {
                PutObjectRequest req = new PutObjectRequest()
                {
                    BucketName = "test",
                    ContentType = "image/jpg",
                    InputStream = st,
                    Key = fileName
                    
                };
                var response = cli.PutObject(req);

在我的代码的最后一行,我收到一条错误消息:HttpErrorResponseException: The remote server returned an error: (403) Forbidden。 内部异常:

WebException:远程服务器返回错误:(403) Forbidden。

我不确定应该编写什么代码来消除此错误。我正在使用 AWS 工具包。 Visual Studio 2019..net 框架 4.7.2

对此的任何帮助将不胜感激。

【问题讨论】:

  • 您在使用 VPC 终端节点吗?这就是https://myVPCnameamazonaws.com 所代表的吗?您提供的实际值是否是真正的 VPC 端点 URL?它看起来像这样:vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com.

标签: c# amazon-web-services amazon-s3 amazon-ec2


【解决方案1】:

问题似乎是 AccessDenied 响应,表明您的请求已到达 S3,但您的凭据无权将对象上传到该 S3 存储桶。

检查与您的 AWS 凭证关联的 IAM 策略。他们是否拥有必要的 S3 权限?

适当的策略会包括这样的内容(假设您的存储桶名称是 mybucket):

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:PutObjectAcl"
         ],
         "Resource":"arn:aws:s3:::mybucket/*"
      }
   ]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-26
    • 2019-01-25
    • 2017-03-19
    • 2018-01-14
    • 2020-12-29
    • 1970-01-01
    • 2019-12-31
    • 2017-08-31
    相关资源
    最近更新 更多