2015-10-19 1168 views
3

从几天前我收到这个异常,当我尝试将文件推送到我的S3Bucket。 Ealier似乎都能正常工作,我相信我身边没有任何代码变更。com.amazonaws.services.s3.model.AmazonS3Exception:Forbidden(服务:Amazon S3;状态码:403;错误代码:403禁止;请求ID:XXXXXXXX)

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代码,我觉得可能会解决我的问题。

什么我可以尝试解决这个问题

我使用AWS-Java的SDK:1.9.10推送文件到S3桶。

+0

您是否已验证您的访问密钥仍可访问S3资源,特别是该存储区? – gregwhitaker

+0

是的,我确定我的密钥和秘密有效 –

+0

您是否通过尝试使用AWS CLI执行相同的操作来验证过? – gregwhitaker

回答

0

很可能您的实例尚未使用可访问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

0

在我的情况桶的名字是在机器人侧不同(斗的名字是“A”,在S3,我在Android的一侧进入“AB”),通过改变斗名,反之亦然,我解决问题。