gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:11:00 24 4
gpt4 key购买 nike

使用 java Amazon AWS SDK,在调用 AmazonS3Client.getObject() 方法时出现无法解释的 403 AccessDenied 异常。这里奇怪的是,我使用相同的 AmazonS3Client 上传对象,因此对象资源所有者应该是相同的。

    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

即使我使用 putObject() 调用指定 ACL,我仍然会收到 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!!!

我已经通过将受让人 ALL_USERS 的 ACL 包含到 amazonS3.putObject() 调用中对此进行了测试,这允许我使用 amazonS3.getObject() 调用好吧,没有任何异常(exception),所以这似乎是某个地方的权限问题。但在哪里?!

亚马逊文档明确指出资源所有者有权访问该资源:“默认情况下,所有 Amazon S3 资源(存储桶、对象和相关子资源(例如,生命周期配置和网站配置))都是私有(private)的:只有资源所有者(创建该资源的 AWS 账户)才能访问该资源。”

编辑

我本来应该提到我正在使用 RiakCS 客户端连接到 S3。在进行此编辑时,这似乎是 RiakCS 的问题。

最佳答案

您的 Riak CS S3 端点很可能不支持或未针对 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

关于java - 无法解释的 AmazonS3Client getObject() 403 AccessDenied 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34648102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com