Search code examples
javaapache-kafkaapache-kafka-security

is it possible to refer environmental variable as values for properties in the kafkaProducer.properties and KafkaConsumer.properties files of Kafka


Im have a producer and consumer java code and Im trying to upgrade it to connect with the Kafka which is secured with SSL. I'm in a situation that the ssl related passwords should be given only via environmental variables. So is it possible to directly refer to the values refered by Environmental variables in the KafkaProducer.properties and KafkaConsumer.properties files

For Example: I declare an environmental variable in linux system SSL_KEY_PASSWORD=password

And inside the KafkaProducer/Consumer properties, I declare as, ''' ssl.key.password=${SSL_KEY_PASSWORD} '''

Sample KAFKA Consumer/Producer property file config may look like,

# For SSL
security.protocol=SSL
ssl.truststore.location=/var/private/ssl/client.truststore.jks
ssl.truststore.password=${TRUSTSTORE_PASS_ENV_VARIABLE}
# For SSL auth
ssl.keystore.location=/var/private/ssl/client.keystore.jks
ssl.keystore.password=${KEYSTORE_PASS_ENV_VARIABLE}
ssl.key.password=${KEY_PASS_ENV_VARIABLE}

Solution

  • Don't think properties file values are interpolated but probably you can test it once. Alternatively you can also remove these lines from property file and do it from code something like below...

       final Properties properties = new Properties();
       final FileInputStream input = new FileInputStream(yourExistingFile);
       
       properties.load(input); 
       properties.put("ssl.key.password",System.getenv("SSL_KEY_PASSWORD"));//this is additional property