[英]403 - AccessDenied when listing objects on service running on AWS EC2 instance
我有一个运行时带有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
谢谢
首先,您必须检查用于API的IAM角色[访问密钥和密钥]。
如果[访问密钥和密钥]正常并且您遇到同样的问题,则需要检查IAM角色策略,设置S3完全访问权限。 此访问权限非常重要,大多数情况下此权限设置解决了访问被拒绝的问题。 希望它能为你效劳。
还是行不通? 然后检查存储桶策略,谁可以读取和写入存储桶中的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.