无法使用java从AWS S3删除对象?

时间:2018-05-21 18:39:16

标签: java amazon-web-services amazon-s3 aws-sdk

我正在尝试根据前缀文件夹列出对象并删除每个对象。

AWSCredentials awsCredentials = new BasicAWSCredentials("accesskey", "secretkey");
AmazonS3 s3client = new AmazonS3Client(awsCredentials);
ListObjectsRequest listObjectsRequest = 
               new ListObjectsRequest("bucketname","folder",null,"/",1000);

s3client
      .listObjects(listObjectsRequest)
      .getObjectSummaries()
      .forEach(
          (file) -> {
            DeleteObjectRequest deleteRequest = new DeleteObjectRequest("bucketname", file.getKey());
            s3client.deleteObject(deleteRequest);
          });

但是我得到了以下异常

com.amazonaws.services.s3.model.AmazonS3Exception:拒绝访问(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;

    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4187)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4134)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4128)
    at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:839)

我使用的密钥有效。我可以执行其他操作,例如getobject()

我做错了什么?

1 个答案:

答案 0 :(得分:4)

问题标题看起来不对。您可以列出对象;但不能删除对象。这看起来是许可问题。

与密钥关联的用户无权删除该S3存储桶上的对象。检查此问题的最简单方法是在AWS控制台上以该用户身份登录(如果该用户具有aws控制台用户名/密码);并尝试手动删除对象。