Java com.amazonaws.services.s3.model.amazons3异常:禁止(服务:AmazonS3;状态代码:403;错误代码:403禁止;请求ID:XXXXXXXX)

Java com.amazonaws.services.s3.model.amazons3异常:禁止(服务:AmazonS3;状态代码:403;错误代码:403禁止;请求ID:XXXXXXXX),java,amazon-web-services,amazon-s3,grails-2.0,aws-sdk,Java,Amazon Web Services,Amazon S3,Grails 2.0,Aws Sdk,从几天前开始,当我试图将文件推送到S3Bucket时,我收到了这个异常。很早,一切似乎都正常,我确信我这边没有代码更改 com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden (Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden; Request ID: XXXXXXXXXXXX), S3 Extended Request ID: XXXXXXXXXXXX

从几天前开始,当我试图将文件推送到S3Bucket时,我收到了这个异常。很早,一切似乎都正常,我确信我这边没有代码更改

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相关的问题:禁止遵循这些问题

  • 我已经在我的服务器上安装了NTP以解决任何与时间相关的问题
  • 我还向代码中添加了“AmazonS3Client”对象的endPointUrl,我觉得这可能会解决我的问题
  • 还有什么我能解决这个问题的吗


    我正在使用aws java sdk:1.9.10将文件推送到S3存储桶。

    很可能您的实例没有使用访问S3的IAM实例配置文件角色启动

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

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

    因此,您要做的是创建一个IAM实例概要文件,您的实例在启动时将采用该概要文件。此IAM实例配置文件与其他IAM用户配置文件(例如)一样,定义了实例可以访问的内容


    在我的例子中,android端的bucket名称是不同的(bucket name在S3中是'a',我在android端输入'ab'),通过改变bucket name,反之亦然,我解决了问题。

    您是否验证了您的访问密钥仍然可以访问S3资源,尤其是存储桶?是的,我确信我的密钥和机密有效。您是否验证了使用AWS CLI尝试相同的操作?未尝试CLI,但point正在从本地machiene worksCorrect执行相同的代码,但是您的本地计算机正在使用本地计算机上的密钥。您是否以IAM配置文件角色启动了您的AWS实例,该角色可以访问S3?我在尝试从pyspark访问S3时遇到了类似的问题。背景:我的目标是使用Python学习Spark。我还不想跳入EMR或HDSF等领域。所以,我创建了一个S3存储桶,放入一些文件,然后创建了一个简单的Ubuntu EC2实例,但忘记了附加IAM角色。我让pyspark工作,但我试图使用Spark访问S3文件,并得到上述错误。我还得到了hadoop-aws-2.7.1.jar和aws-java-sdk-1.7.4.jar文件,因为我没有安装hadoop。我在没有权限的情况下创建了IAM角色并将其分配给仍在运行的EC2实例。仍然有错误。有什么想法吗?