首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >com.amazonaws.services.s3.model.AmazonS3Exception:访问被拒绝

com.amazonaws.services.s3.model.AmazonS3Exception:访问被拒绝
EN

Stack Overflow用户
提问于 2017-03-15 00:15:35
回答 2查看 27.8K关注 0票数 7

以下是我的Java代码:

代码语言:javascript
运行
复制
        AmazonS3 conn = new AmazonS3Client();
        AmazonS3URI uri = new AmazonS3URI(s3uri);
        ObjectListing objects = conn.listObjects(uri.getBucket(), uri.getKey());

这是一个非常简单的任务,我尝试使用AmazonS3 Java访问S3,但这一行conn.listObjects始终失败,并给出了以下例外:

代码语言:javascript
运行
复制
Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: XXXXXXXX), S3 Extended Request ID: xxxxxxxxx
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1389)
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:902)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:607)
    at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:376)
    at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:338)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:287)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3826)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3778)
    at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:610)
    at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:588)
  1. 一个非常明显的错误代码: 403表示我的aws凭据是错误的,然而,这完全是我的同事用来访问同一个s3桶的凭证,为了排除我在某个地方有错误的可能性,我真的删除了以前的错误,使用了我的同事发送给我的相同的凭证,并将它们放在~/.aws/下面。
  2. 我还研究了其他可能的原因,其中一个原因可能是这个S3桶没有将权限授予我的IAM角色,显然这也不是我的情况。

有什么帮助吗?罪魁祸首是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-15 02:17:27

AWS有一个DefaultAWSCredentialsProviderChain,它按照以下顺序检查凭据:

  • 环境变量- AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY (推荐它们被所有AWS和CLI (.NET除外)识别),或者AWS_ACCESS_KEY和AWS_SECRET_KEY (只有Java才能识别)
  • Java系统属性- aws.accessKeyId和aws.secretKey
  • 凭据配置文件位于所有AWS和AWS共享的默认位置(~/.aws/credentials)
  • 如果设置了 EC2容器服务环境变量,并且安全管理器具有访问该变量的权限,则通过AWS_CONTAINER_CREDENTIALS_RELATIVE_URI容器服务传递凭据。
  • 通过 EC2元数据服务传递的实例配置文件凭据

在查询所需的配置文件之前,可能会设置凭据。

检查所使用的凭据的一种方法是使用aws iam get-user命令显示当前用户。您还可以使用GetUser()调用在Java中进行尝试。

票数 10
EN

Stack Overflow用户

发布于 2020-10-22 17:38:30

如果这对任何人都有帮助--我得到了这个错误,因为当没有指定服务器端加密时,当试图上传到桶时没有指定服务器端加密时,桶策略被设置为拒绝。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42798926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档