Загрузка URL — адреса под председательством S3-Подпись запроса, которую мы рассчитали, не совпадает с предоставленной вами подписью. Проверьте свой ключ и способ подписи

#java #node.js #amazon-web-services #amazon-s3 #aws-sdk

Вопрос:

зависимость от узла:

 "aws-sdk": "^2.873.0",  

Я могу получить правильный предварительно подписанный URL-адрес с помощью js sdk;

 let params = {  Bucket: s3_credentials.s3Bucket,  Key: s3key,  ContentType: contentType,  ServerSideEncryption: 'aws:kms',  SSEKMSKeyId: s3_credentials.kmsKeyName,  Expires: 500 //time to expire in seconds  };   const signedUrl = s3.getSignedUrl('putObject', params);  

И ответ имеет тип содержимого, шифрование на стороне сервера x-amz, шифрование на стороне сервера x-amz-aws-kms-идентификатор ключа

зависимость от maven:

 lt;dependencygt;  lt;groupIdgt;software.amazon.awssdklt;/groupIdgt;  lt;artifactIdgt;aws-sdk-javalt;/artifactIdgt;  lt;versiongt;2.17.66lt;/versiongt;  lt;/dependencygt;  

Но когда я использую следующий java-код, в ответном URL-адресе нет параметров, связанных с kms:

 PutObjectRequest objectRequest = PutObjectRequest.builder()  .bucket(SPEC_BUCKET_NAME)  .key(s3Key)  .contentType(contentType)  .serverSideEncryption(ServerSideEncryption.AWS_KMS)  .ssekmsKeyId(getKmsId())  .expires(expiration)  .build();  PutObjectPresignRequest presignRequest = PutObjectPresignRequest.builder().putObjectRequest(objectRequest).signatureDuration(Duration.ofMinutes(60)).build();  PresignedPutObjectRequest presignedRequestResponse = s3Presigner.presignPutObject(presignRequest);  String presignedUrl = presignedRequestResponse.url().toString();  

Это код извлечения идентификатора kms:

 private String getKmsId() {  KmsClient kmsClient = KmsClient.builder().build();  DescribeKeyRequest req = DescribeKeyRequest.builder().keyId("alias/xxx").build();  DescribeKeyResponse res = kmsClient.describeKey(req);   logger.info(res.keyMetadata().toString());  return res.keyMetadata().keyId();  }  

Я также попытался следовать

 .serverSideEncryption(ServerSideEncryption.AWS_KMS)  .ssekmsKeyId("alias/xxxx")  

Комментарии:

1. Как вы настраиваете учетные данные для приложения Java? В большинстве случаев это проблема с учетными данными

2. Они уже используют один и тот же vpc, а также подсети. Это 2 службы, работающие в ecs. Для аутентификации нет специальной конфигурации. Я уже могу загружать файлы из s3 в приложении java