当前位置: 首页 > 知识库问答 >
问题:

无法解释的AmazonS3Client getObject()403 AccessDenied异常

裴存
2023-03-14
    ClientConfiguration config = new ClientConfiguration();
    config.setProtocol(Protocol.HTTP); // TODO Change to HTTPS?
    AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKeyID","mySecretAccessKey");
    AmazonS3 amazonS3 = new AmazonS3Client(awsCredentials, config);
    amazonS3.setEndpoint(serviceInfo.getHost());
    S3ClientOptions options = new S3ClientOptions();
    options.setPathStyleAccess(true);
    amazonS3.setS3ClientOptions(options);

    amazonS3.putObject(“myBucket”, “keyVal”, file);
    amazonS3.getObject(“myBucket”, “keyVal”); //AccessDenied
Owner owner = amazonS3.getS3AccountOwner();
AccessControlList acl = new AccessControlList();
acl.grantPermission(new CanonicalGrantee(owner.getId()), Permission.Read);
amazonS3.putObject(new PutObjectRequest("mybucket", "myKey", f).withAccessControlList(acl));
amazonS3.getObject(“myBucket”, “keyVal”); //AccessDenied Still!!!

编辑

我本来应该提到我正在使用RiakCS客户机连接到S3。在本文编辑时,RIAKCS似乎存在一个问题。

共有1个答案

丌官运诚
2023-03-14

很可能您的Riak CS S3endpoint不支持AWS v4签名,或者没有配置为AWS v4签名。GetObject在这方面似乎很特别,因为它默认使用当前SDK版本中的v4签名。

您所能做的就是将客户端配置为使用v2签名:

ClientConfiguration opts = new ClientConfiguration();
opts.setSignerOverride("S3SignerType");  // NOT "AWS3SignerType"
AmazonS3Client s3 = new AmazonS3Client(opts);

参见这里的讨论:https://github.com/aws/aws-sdk-java/issues/372

 类似资料:
  • 我正在学习Hibernate,但当我尝试使用Brandid进行筛选时,我不断得到以下错误: 这是我在mysql中的2个表 } 有人能告诉我我做错了什么吗

  • 问题内容: 我目前正在从事一些简单的项目,并且在以下字符串中有日期: 并希望将此字符串转换为对象。我正在使用以下代码行来做到这一点。我搜索了站点,找到了解决方法: 但是我可能做错了,因为我总是会遇到异常: 这似乎是我正在使用的模式的问题,但尝试了不同的模式,但没有任何效果。 问题答案: 某些字段(例如,星期几字段和/或AM / PM标记)可能与您的默认字段不匹配。具有方法getErrorOffse

  • 问题内容: 在照顾了几个现有的帖子之后,我仍然无法使我的SimpleDateFormat解析器正常工作。这是代码: 我总是以ParseException结尾。这是调试消息的输出: 06-09 23:52:17.478:DEBUG / DEBUG(2436):java.text.ParseException:无法解析的日期:06-09 23:52:17.478:DEBUG / DEBUG(2436)

  • 我的应用程序使用了一个定时器,该定时器使用格式的字符串构造。当用户超过resetTimeString记录的时间时,下一个重置时间将通过递增到下一天(“a”值不变)并将该值存储在数据库中来确定。简单地说,它代表一个每日计时器,每个用户都可以选择他们自己的'a'值。 我让许多用户联系了一次崩溃,在比较了数据库中的值之后,他们似乎都有的 我测试了值的一系列不同值,它们都工作得非常好: 我对这次撞车很困惑

  • 问题:java提交了大量的虚拟内存,并且没有释放它。然后服务器出现故障。但是java(tomcat)消耗了正常的内存量。例如,实际堆是1gb,但提交的virtaul内存是30g...旧配置的参数:最小/最大堆 - 512m/2048m,胎面堆栈大小 512kb,烫发 64m,最大烫发 256m 服务器现在状态:物理内存: 16383.55 MB可用内存:4917.84 MB总页面文件:47103.

  • 问题内容: 代码如下所示: 在上面的代码中,抛出不可解析的日期异常: 我不知道原因。 问题答案: 为什么要将日期转换为字符串并将其解析回日期? 代码失败的原因是因为您试图使用仅接受dd-MMM-yyy格式的日期的格式化程序转换完整日期。