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):
Precisa definir isso:
System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY, "true");
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));