aws S3 400 Bad Request

时间:2016-12-14 00:06:58

标签: amazon-s3

我正在尝试缩小以下400 Bad Request错误:

com.amazonaws.services.s3.model.AmazonS3Exception: Bad Request (Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request; Request ID: 7FBD3901B77A07C0), S3 Extended Request ID: +PrYXDrq9qJwhwHh+DmPusGekwWf+jmU2jepUkQX3zGa7uTT3GA1GlmHLkJjjjO67UQTndQA9PE=
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1343)
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:961)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:738)
    at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:489)
    at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:448)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:397)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:378)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4039)
    at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:1177)
    at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:1152)
    at com.amazonaws.services.s3.AmazonS3Client.doesObjectExist(AmazonS3Client.java:1212)
    at com.abcnews.apwebfeed.articleresolver.APWebFeedArticleResolverImpl.makeS3Crops(APWebFeedArticleResolverImpl.java:904)
    at com.abcnews.apwebfeed.articleresolver.APWebFeedArticleResolverImpl.resolve(APWebFeedArticleResolverImpl.java:542)
    at sun.reflect.GeneratedMethodAccessor62.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.xfire.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:54)
    at org.codehaus.xfire.service.binding.ServiceInvocationHandler.sendMessage(ServiceInvocationHandler.java:322)
    at org.codehaus.xfire.service.binding.ServiceInvocationHandler$1.run(ServiceInvocationHandler.java:86)
    at java.lang.Thread.run(Thread.java:662)

我正在测试一些像这样的实现:

boolean exists = s3client.doesObjectExist("aws-wire-qa", "wfiles/in/wire.json");

我手动添加了wfiles / in / wire.json文件。当我在本地应用程序中运行此行时,我恢复正常。但是在一个单独的远程服务中,它会抛出上面的错误。我使用与我在本地应用程序中使用的服务相同的凭据。我还设置了“启用网站托管”,但没有区别。 我的权限设置为:

Grantee: Any Authenticated AWS User
y List 
y Upload/DeleteView 
y PermissionsEdit Permissions    

所以我认为错误可能与没有策略在桶上并在桶上为GET / PUT / DELETE对象创建了一个策略文件有关,但我仍然得到相同的错误。我的政策如下:

{
"Version": "2012-10-17",
"Id": "Policy1481303257155",
"Statement": [
    {
        "Sid": "Stmt1481303250933",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::755710071517:user/law"
        },
        "Action": [
            "s3:DeleteObject",
            "s3:GetObject",
            "s3:PutObject"
        ],
        "Resource": "arn:aws:s3:::aws-wire-qa/*"
    }
]
}

我被告知它不能是防火墙或代理问题。我还能尝试什么?该错误非常具体。到目前为止,我只进行了本地开发,所以我不知道还有什么不能在这里设置。非常感谢这里的一些帮助。

5 个答案:

答案 0 :(得分:5)

curl -XPUT 'http://localhost:9200/_snapshot/repo_s3' -d '{
      "type": "s3",
      "settings": {
        "bucket": "my-bucket",
        "base_path": "/folder/in/bucket",
        "region": "eu-central"     
      }
}'

就我而言,这是一个地区问题! 我不得不从elasticsearch.yml中删除该区域并在命令中设置。如果我没有从yml文件中删除该区域,弹性不会启动(使用最新的s3-repository插件)

Name: repository-s3
Description: The S3 repository plugin adds S3 repositories
Version: 5.2.2
 * Classname: org.elasticsearch.plugin.repository.s3.S3RepositoryPlugin

答案 1 :(得分:1)

我已经连续数天收到此错误,在每种情况下,这都是因为我的临时访问令牌已过期(或者是因为我无意中将包含旧令牌的hdfs-site.xml实例构建到JAR中)。它与地区无关。

答案 2 :(得分:0)

使用Fiddler我看到我的网址错了。

我不需要使用ServiceURL属性和配置类,而是使用此构造函数作为客户端,使用您的区域作为第三个参数。

        AmazonS3Client s3Client = new AmazonS3Client(
                ACCESSKEY,
                SECRETKEY,
                Amazon.RegionEndpoint.USEast1
                );

答案 3 :(得分:0)

我也有同样的错误,后来发现这是由于代理设置存在问题。禁用后,代理可以正常上传到S3。

img = imread('image1.jpg')

# Convert from RGB -> BGR
img = img[..., [2, 1, 0]]

答案 4 :(得分:0)

这只是为了登记我的特殊情况... 我正在配置 dspace 以使用 S3。解释得很清楚,但是对于区域“eu-north-1”不起作用。 Amazonaws 返回 400 错误。

使用 us-west-1(默认)创建一个存储桶测试,然后尝试。