Я пытаюсь протестировать самые основные варианты использования шифрования / дешифрования с помощью AWS S3 и AWS java SDK (пробуя и v1, и v2).
Вот что я делаю:
Я загружаю небольшой файл json с помощью консоли aws, а затем проверяю, что в Свойствах> crypt выбран «AWS-KMS» и выбран мой псевдоним ключа. Я предполагаю, что это говорит о том, что файл зашифрован моим ключом, но у меня нет возможности проверить это, поскольку, если я пытаюсь открыть файл с помощью консоли aws, он отображается в виде открытого текста.
Я пытаюсь загрузить файл различными способами, и я ожидаю получить зашифрованный файл, когда я использую самый простой метод.
Итак, используя этот клиент (sdk v2):
@Bean
public S3Client s3Clientv2(AppProperties appProperties, CustomAwsCredentialsProvider customAwsCredentialsProvider) {
return S3Client.builder()
.httpClientBuilder(httpClientBuilder)
.credentialsProvider(customAwsCredentialsProvider)
.region(Region.EU_WEST_3)
.build();
}
и этот метод загрузки:
public void downloadFile(String bucket, String key) {
s3Client.getObject(GetObjectRequest.builder().bucket(bucket).key(key).build(), ResponseTransformer.toFile(Paths.get("test_aws.json")));
}
Я ожидал получить зашифрованный файл, но это не так.
Затем я попытался использовать клиент, способный«шифрование / дешифрование» само по себе «Любые объекты, которые вы получаете из Amazon S3 с помощью этого клиента, автоматически дешифруются» источник: https://docs.aws.amazon.com/en_pv/sdk-for-java/v1/developer-guide/examples-crypto-kms.html
AmazonS3Encryption s3Encryption = AmazonS3EncryptionClientBuilder
.standard()
.withRegion(Regions.US_WEST_2)
.withCryptoConfiguration(new CryptoConfiguration(CryptoMode.EncryptionOnly).withAwsKmsRegion(Region.getRegion(Regions.US_WEST_2)))
// Can either be Key ID or alias (prefixed with 'alias/')
.withEncryptionMaterials(new KMSEncryptionMaterialsProvider("alias/s3-kms-key"))
.build();
Но с использованием:клиентский вызов вызывает у меня предупреждение: «Не удалось обнаружить информацию о шифровании для объекта«% s »в корзине«% s ». Возвращается объект без расшифровки.»
- Так что же я здесь не так делаю?
- Как я могу проверить, действительно ли мой файл зашифрован?
- Что быправильный конфиг для загрузки и расшифровки без предупреждения «файл не зашифрован»?
Обновление : конечно, я проверил метаданные объекта, которые содержат KMSинформация и идентификатор ключа KMS, но клиент шифрования ожидает другую информацию об этом:
/** Initialization vector (IV) header that is used in the symmetric and envelope encryption mechanisms */
public static final String CRYPTO_IV = "x-amz-iv";
и это:
/**
* Encrypted symmetric key header that is used in the Encryption Only (EO) envelope
* encryption mechanism.
*/
public static final String CRYPTO_KEY = "x-amz-key";