代码之家  ›  专栏  ›  技术社区  ›  Anjali

将文件放入私有子网中的S3存储桶

  •  0
  • Anjali  · 技术社区  · 4 年前

    在过去的两天里,我一直在努力解决这个问题。我正在尝试将一个文件放在私有子网的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:远程服务器返回了一个错误:(403)Forbidden。 内部异常:

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

    enter image description here

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

    如有任何帮助,我们将不胜感激。

    0 回复  |  直到 4 年前
        1
  •  1
  •   jarmod    4 年前

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

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

    一个合适的策略将包括这样的内容(假设您的bucket名称为 mybucket ):

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