Как убедиться, что ваши файлы зашифрованы при использовании шифрования AWS S3 KMS? - PullRequest
2 голосов
/ 15 октября 2019

Я пытаюсь протестировать самые основные варианты использования шифрования / дешифрования с помощью AWS S3 и AWS java SDK (пробуя и v1, и v2).

Вот что я делаю:

  1. Я загружаю небольшой файл json с помощью консоли aws, а затем проверяю, что в Свойствах> crypt выбран «AWS-KMS» и выбран мой псевдоним ключа. Я предполагаю, что это говорит о том, что файл зашифрован моим ключом, но у меня нет возможности проверить это, поскольку, если я пытаюсь открыть файл с помощью консоли aws, он отображается в виде открытого текста.

  2. Я пытаюсь загрузить файл различными способами, и я ожидаю получить зашифрованный файл, когда я использую самый простой метод.

Итак, используя этот клиент (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";

1 Ответ

0 голосов
/ 16 октября 2019

Ладно, думаю, я понял: я запутался между шифрованием на стороне сервера и шифрованием на стороне клиента.

Так что клиент AmazonS3Encryption только примерно шифрование на стороне клиента . Когда вы используете шифрование на стороне сервера , любой доступ к файлу расшифровывает его.

Поэтому ответ на мой вопрос будет следующим: отключите шифрование на стороне сервера и используйте шифрование на стороне клиентаесли вам нужен детальный контроль над шифрованием и возможность загружать все еще зашифрованный контент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...