使用 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()
毫无例外地使用调用,所以这似乎是某个地方的权限问题。但是哪里?!
Amazon 文档特别指出资源所有者有权访问该资源:“默认情况下,所有 Amazon S3 资源——存储桶、对象和相关子资源(例如,生命周期配置和网站配置)——都是私有的:只有资源所有者,创建它的 AWS 账户可以访问该资源。”</p>
编辑
我最初应该提到我正在使用 RiakCS 客户端连接到 S3。在此编辑时,这似乎是 RiakCS 的一个问题。