我正在尝试根据前缀文件夹列出对象并删除每个对象。
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()
。
我做错了什么?
答案 0 :(得分:4)
问题标题看起来不对。您可以列出对象;但不能删除对象。这看起来是许可问题。
与密钥关联的用户无权删除该S3存储桶上的对象。检查此问题的最简单方法是在AWS控制台上以该用户身份登录(如果该用户具有aws控制台用户名/密码);并尝试手动删除对象。