Я пытаюсь сузить следующую ошибку 400 Bad Request:AWS 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/*"
}
]
}
Мне сказали, что это не может быть межсетевой экран или проблема с прокси-сервером. Что еще я мог попробовать? Ошибка очень неспецифична. И до сих пор я делал только локальное развитие, поэтому я понятия не имею, что еще не может быть создано здесь. Было бы очень полезно помочь здесь.
Это не относится к разрешениям. Возможно, вы можете отправить запрос в неправильную область S3. –
@ Michael-sqlbot: вы абсолютно правы, я раньше тестировал другое ведро и не мог изменить регион. Большое спасибо! Прямо на цель! – user2917629
Проблемы с разрешениями были легко исключены, потому что это должно быть '403 Forbidden' ... Я рад, что исправил это, но, честно говоря, это было просто интуитивное предположение - одна из возможностей, которая могла бы вызвать« 400 Bad Запросить ответ. Я хотел бы думать, что Java SDK обеспечивает механизм доступа к заголовкам ответов и телу, потому что информация должна быть там, и это сделает более законный и полезный ответ. –