【问题标题】:C# S3 Bucket TransferUtilityDownloadRequest working but TransferUtilityDownloadDirectoryRequest does notC# S3 Bucket TransferUtilityDownloadRequest 工作,但 TransferUtilityDownloadDirectoryRequest 没有
【发布时间】:2020-03-29 22:36:37
【问题描述】:

我正在使用 TransferUtilityDownload 和 TransferUtilityDownloadDirectory 下载文件和完整目录。但是,即使我使用相同的存储桶名称格式,它也适用于单个文件但不适用于目录并返回 403 Access Denied。 (列出对象时同样的问题):

        string bucketName = "my-bucket-us-east-1-prod";
        string UnscheduledIn = "abc/butter/input_butter_11nov2019/unscheduled";

        AmazonS3Client client = new AmazonS3Client(RegionEndpoint.USEast1);

        // request for object download
        var request = new TransferUtilityDownloadRequest(); 
        // request for directory download
        var drequest = new TransferUtilityDownloadDirectoryRequest();

        //This request for single file download
        request.BucketName = bucketName + "/" + UnscheduledIn;
        request.FilePath = "D:\\input\\" + "test.csv";
        request.Key = "test.csv";

        //This request for directory download
        drequest.BucketName = bucketName + "/" + UnscheduledIn;
        drequest.S3Directory = "unscheduled"; 
        drequest.LocalDirectory = "D:\\input\\";
        drequest.DownloadFilesConcurrently = true;

        TransferUtility fileTransferUtility = new TransferUtility(new AmazonS3Client(RegionEndpoint.USEast1));

        // This one works
        fileTransferUtility.Download(request);

        // This one does not work
        fileTransferUtility.DownloadDirectory(drequest); 

403 Access Denied 错误通常是由于错误的存储桶或目录名称(如果请求找不到存储桶或目录,这是一个已知问题)。但是存储桶名称和目录名称是正确的。我想知道是否缺少格式或设置某些属性?

快速注意此版本也返回相同的 403 错误:

               //This request for directory download
              drequest.BucketName = bucketName;
              drequest.S3Directory = UnscheduledIn; 
              drequest.LocalDirectory = "D:\\input\\";
              drequest.DownloadFilesConcurrently = true;

【问题讨论】:

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


    【解决方案1】:

    似乎存储桶名称和 s3 目录路径存在问题。使用这段代码更新您的代码。

    //This request for directory download
    drequest.BucketName = bucketName;
    drequest.S3Directory = '/' + UnscheduledIn; 
    drequest.LocalDirectory = "D:\\input";
    drequest.DownloadFilesConcurrently = true;
    

    更新:

    一般来说,403 禁止来自服务器,以防身份验证失败/权限问题。 请检查您的存储桶政策以允许下载。

        {
          "Sid": "AllowAllS3ActionsInUserFolder",
          "Effect": "Allow",
          "Action": ["s3:*"],
          "Resource": ["arn:aws:s3:::my-bucket-us-east-1-prod/abc/butter/input_butter_11nov2019/*","arn:aws:s3:::my-bucket-us-east-1-prod/abc/butter/input_butter_11nov2019/unscheduled/*"]
        }
    

    【讨论】:

    • 很遗憾同样的结果访问被拒绝 - Web 异常:远程服务器返回错误 (403)
    • 我刚刚更新了答案,你能检查一下你的存储桶策略吗?
    • 请仔细阅读,我可以使用 fileTransferUtility.Download(request); 但问题在于 fileTransferUtility.DownloadDirectory(drequest);所以不存在政策问题。
    • 嗨@JohnG 我相信我仔细阅读了它,否则我会建议您检查您的访问密钥或密钥。您正在下载的目录是另一个(父)目录的内容,而您正在下载的文件是另一个(子)目录的内容,并且这些目录的存储桶策略可能不同,因此只要求检查两个目录的存储桶策略.
    • @Tinker 谢谢你的解释。这是一个 EC2 框,是的,我们确实检查了所有策略都没有问题。
    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 2017-04-16
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多