[英]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.