#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
шифрование или нет.
Был бы очень признателен за немного света. Не уверен, что это правильный подход. Спасибо!