#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