2016-12-14 61 views
2

我试图缩小以下400错误请求错误:AWS S3 400错误的请求

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) 

我测试的imple的东西,因为这:

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 /删除对象,但我仍然得到相同的错误。我的政策是这样的:

{ 
"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/*" 
    } 
] 
} 

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

+2

这与权限无关。您可能会将请求发送到错误的S3区域。 –

+0

@ Michael-sqlbot:你是对的,我之前正在测试另一个桶,并设法不改变这个区域。非常感谢!正确的目标! – user2917629

+0

权限问题很容易排除,因为它应该是'403 Forbidden' ......我很高兴修正它,但说实话,这只是一个直观的猜测 - 几个可能导致一个'400坏请求回复。我想认为Java SDK提供了一种访问响应标题和正文的机制,因为信息应该在那里,并且这将提供更合理和有用的答案。 –

回答

3
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存储库的插件)

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

我也是一个区域错误,使用小提琴来查看他们的反应,因为.net异常不明确。 –

+0

也是我的区域错误,但有趣的是,该文件在S3中依然显示正常。去搞清楚。 – d512

+0

区域错误+1 –

0

使用招我已经看到了我的网址是错误的。

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

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