51

Getting the following exception when using the AWS SDK for Java and Java 1.8u60+.

com.amazonaws.services.s3.model.AmazonS3Exception: AWS authentication requires a valid Date or x-amz-date header (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 41C359C079CBAFCF)
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1182) ~[aws-java-sdk-core-1.10.10.jar:na]
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:770) ~[aws-java-sdk-core-1.10.10.jar:na]
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:489) ~[aws-java-sdk-core-1.10.10.jar:na]
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:310) ~[aws-java-sdk-core-1.10.10.jar:na]
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3608) ~[aws-java-sdk-s3-1.10.10.jar:na]
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3561) ~[aws-java-sdk-s3-1.10.10.jar:na]
    at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:647) ~[aws-java-sdk-s3-1.10.10.jar:na]
    at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:632) ~[aws-java-sdk-s3-1.10.10.jar:na]
Andrew Shore
  • 1,391
  • 1
  • 9
  • 7

6 Answers6

87

This is caused by a bug between JodaTime and versions of Java greater then 1.8u60. Upgrading to JodaTime version 2.8.1 or later solves the issue. See the following Github issues for reference.

https://github.com/aws/aws-sdk-java/issues/484 https://github.com/aws/aws-sdk-java/issues/444

Andrew Shore
  • 1,391
  • 1
  • 9
  • 7
5

As far as I can see, there are three solutions to this issue:

  • upgrade joda time
  • upgrade the AWS java SDK
  • downgrade java to a version less than 1.8u60 (java7 seems to work fine)
mooreds
  • 4,932
  • 2
  • 32
  • 40
  • is there a newer java update that fixes the issue? is this a bug with java or is this always going to break with future java releases? – pstanton Mar 20 '18 at 06:27
4

Update your AWS Java SDK to 1.10.1 or later

Rhythm
  • 151
  • 5
2

I faced while using presto. The problem is with java version jdk1.8.0_60 greater downgrade it to jdk1.8.0_45 will solve the problem

Avinash Singh
  • 1,006
  • 9
  • 10
1

i have faced same problem.i have solved now.only thing is that java 1.8u60+ does not support aws sdk 1.10.10 so you can just update aws sdk version 1.11.52 ..i mean latest version and it resolved it.

Also please look out for the conflicts in the dependency tree, when you upgrade the versions. In my case there was a conflict with the httpclient after upgrading aws sdk version.

singh
  • 1,020
  • 7
  • 8
0

All the answers above drove me nuts because they recommend changing libraries, clients or some other major change. I have to use client 1.9.31 and I don't have control over which joda or JVM. So here is the java fix without having to do everything above!

Before you send your request, like PutObjectRequest, do this:

putObjectRequest.putCustomRequestHeader("x-amz-date", getServerTime());

public static String getServerTime() {
    SimpleDateFormat dateFormat = new SimpleDateFormat(
        "EEE, dd MMM yyyy HH:mm:ss Z", Locale.US);
    return dateFormat.format(Calendar.getInstance().getTime());
}