Создание AmazonS3Client с использованием шифрования KMS

#amazon-web-services #amazon-s3 #amazon-kms

Вопрос:

Мои сегменты команд S3 зашифрованы в KMS, в то время как некоторые другие-нет. Итак, вот как мы создаем экземпляр client :

 protected lazy val creds = new BasicAWSCredentials(s3AccessKey, s3SecretKey)   if (kmsEncryptionEnabled) {  val kmsClient: AWSKMS = AWSKMSClientBuilder.standard.withRegion(s3Region).build  AmazonS3EncryptionClientV2Builder  .standard()  .withKmsClient(kmsClient)  .withCredentials(new AWSStaticCredentialsProvider(creds))  .withRegion(s3Region)  .build()  }  else {  AmazonS3ClientBuilder  .standard()  .withCredentials(new AWSStaticCredentialsProvider(creds))  .withRegion(s3Region)  .build()  }   

Когда мы сталкиваемся с нашим ведром, мы получаем это:

 "stack_trace":"java.lang.IllegalArgumentException: EncryptionMaterialsProvider parameter must not be null.ntat com.amazonaws.services.s3.AmazonS3EncryptionClientV2.assertParameterNotNull(AmazonS3EncryptionClientV2.java:202)ntat com.amazonaws.services.s3.AmazonS3EncryptionClientV2.validateParameters(AmazonS3EncryptionClientV2.java:129)ntat com.amazonaws.services.s3.AmazonS3EncryptionClientV2.lt;initgt;(AmazonS3EncryptionClientV2.java:108)ntat com.amazonaws.services.s3.AmazonS3EncryptionClientV2Builder.build(AmazonS3EncryptionClientV2Builder.java:101)ntat com.amazonaws.services.s3.AmazonS3EncryptionClientV2Builder.build(AmazonS3EncryptionClientV2Builder.java:23)ntat com.amazonaws.client.builder.AwsSyncClientBuilder.build(AwsSyncClientBuilder.java:46)ntat com.gemini.util.s3.S3Client.client$lzycompute(S3Client.scala:49)  

Очевидно, что это EncryptionMaterialsProvider необходимо установить при создании экземпляра клиента. Итак, как мы это предоставляем EncryptionMaterialsProvider ? Один из способов таков:

 .withEncryptionMaterialProvider(keyPair)  

Создаем ли мы это в коде или просим администратора S3 предоставить это. Отказ от ответственности: Не эксперт AWS или S3.

Другой способ-создать экземпляр простого клиента (проверьте else предложение в фрагменте кода), но предоставляйте kmsencryption его в каждом вызове, что означает, что нам, возможно, придется сделать if/else предложение в каждом методе, чтобы проверить, нужно ли нам kms шифрование или нет.

Был бы очень признателен за немного света. Не уверен, что это правильный подход. Спасибо!