com.amazonaws.services.s3.model.AmazonS3Exception:Forbidden(Service:Amazon S3; Status Code:403; Error Code:403 Forbidden; Request ID:XXXXXXXX)

时间:2015-10-19 15:38:27

标签: java amazon-web-services amazon-s3 grails-2.0 aws-sdk

从几天开始,当我尝试将文件推送到S3Bucket时,我收到此异常。 Ealier一切似乎都有效,我相信我的代码没有任何代码变化。

com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden
(Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden;
Request ID: XXXXXXXXXXXX),
S3 Extended Request ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1077)
at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:725)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:460)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:295)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3699)
at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:999)
at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:977)

.... ....

我遇到了许多与com.amazonaws.services.s3.model.AmazonS3Exception相关的Q:禁止跟随

  1. 我已在我的服务器上安装了NTP以解决任何与时间相关的问题。
  2. 我还为" AmazonS3Client"添加了endPointUrl。反对代码,我觉得可以解决我的问题。
  3. 我可以尝试解决此问题的其他任何事情

    我正在使用aws-java-sdk:1.9.10将文件推送到S3 Bucket。

2 个答案:

答案 0 :(得分:1)

很可能您的实例尚未使用可以访问S3的IAM实例配置文件角色启动。

所有对AWS服务的访问都必须使用访问密钥和密钥进行签名。当您从本地计算机执行此操作时,DefaultCredentialsProviderChain将使用您在.aws/credentials文件中定义的访问密钥和密码。

在AWS中启动EC2实例时,还需要对服务请求进行签名,例如s3。但是,它通过从内部元数据服务检索它的凭据来实现此目的。

所以你要做的是创建一个你的实例在启动时会假设的IAM实例配置文件。与用户的其他IAM配置文件一样,此IAM实例配置文件定义了实例可以访问的内容。

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html

答案 1 :(得分:0)

在我的情况下,在android端的存储桶名称不同(存储桶名称在S3处为'a',我在android端输入'ab'),通过更改存储桶名称反之亦然,我解决了问题。