Não é possível acessar o URL pré-assinado do S3 devido a autorização

Usando Java8 e aws-java-sdk 1.10.43 Estou tentando obter uma URL pré-assinada para um arquivo S3. Eu recebo de volta um link, mas navegar até ele leva a esse erro:

O mecanismo de autorização que você forneceu não é suportado. Por favor use AWS4-HMAC-SHA256

Para enfatizar, desejo gerar um URL que possa ser enviado por e-mail e aberto em um navegador, não para usar o código Java para ler esse URL.

Eu estou usando o código abaixo, e acredito em descobrir que eu preciso de alguma forma definir setSSEAlgorithm para usar “v4”, no entanto eu não consegui fazer o trabalho. o que estou perdendo? O que devo configurar (observação: estou evitando o arquivo de configuração propositadamente, desejo que o código defina todos os atributos das variables ​​de ambiente)

Date expiration = ; GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, targetPath); generatePresignedUrlRequest.setMethod(HttpMethod.GET); generatePresignedUrlRequest.setExpiration(expiration); AmazonS3 s3client = new AmazonS3Client(s3Credentials); URL s = s3client.generatePresignedUrl(generatePresignedUrlRequest); 

O balde está na eu-central-1

Obrigado

Usando alguma ajuda eu encontrei a resposta, que foi uma combinação de duas partes faltando (uma das quais foi mencionada nos comentários):

  1. Precisa definir isso:

     System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY, "true"); 
  2. Deve definir o “endPoint” (que não foi necessário para upload ou download):

     s3Client.setEndpoint(endpoint); 

Opcionalmente, pode ser útil adicionar também isto:

 s3Client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true));