403 - 在AWS EC2实例上运行的服务上列出对象时的AccessDenied

时间:2017-05-08 18:25:34

标签: java amazon-web-services amazon-s3 amazon-ec2

我有一个运行时带有IAM角色的EC2实例。

如果我在该实例的终端上运行以下命令,它会正确列出存储桶的内容。

aws s3 ls --region my-region s3://my-bucket-name

但是,如果我运行的是我认为相同的代码,但在Java中,我得到了403

AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
        .withRegion(my-region)
        .withCredentials(new InstanceProfileCredentialsProvider(false))
        .withPayloadSigningEnabled(true)
        .build();
s3Client.listObjectsV2(my-bucket-name);

生成以下内容

com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied

原始listObjects

也是如此
s3Client.listObjects(TestArtefactsBucket);

由于我使用的是InstanceProfileCredentialsProvider,因此应该使用与CLI使用的相同的配置文件,因此请使用相同的权限吗?

我正在使用com.amazonaws:aws-java-sdk-s3:1.11.93并且因为它在另一个线程中提到过,我正在使用joda-time:joda-time:2.9.7。

Java的版本是java-1.8.0-openjdk.x86_64。

任何帮助都会受到赞赏,我确信权限设置正确,但我没有运气获取权限。

我还应该补充一点,我可以在EC2实例上列出运行以下cli命令的存储桶内容

aws s3api list-objects-v2 --region my-region --bucket my-bucket

由于

1 个答案:

答案 0 :(得分:0)

首先,您必须检查您的IAM角色[访问密钥&秘密密钥],用于API。

如果[访问密钥&密钥]没问题,你面临同样的问题,那么你需要检查IAM角色策略,设置S3完全访问权限。此访问权限非常重要,大多数情况下此权限设置解决了访问被拒绝的问题。希望它对你有用。

S3 access permission

仍然无法使用?然后检查存储桶策略,谁可以读取和写入存储桶中的对象。