Hi Fred,

Thanks for opening the discussion. There are probably multiple ways to
solve it, you could also think about addressing this problem in a catalogue
and hide any password/keywords in there. But then again, I do think your
solution could also work and is straightforward.

If there are no people who have a better alternative or think otherwise, I
think it should be fine to open a Jira ticket and if you're willing to make
a contribution, that would be great!

Best regards,

Martijn Visser
https://twitter.com/MartijnVisser82
https://github.com/MartijnVisser


On Wed, 30 Mar 2022 at 10:25, Teunissen, F.G.J. (Fred)
<fred.teunis...@ing.com.invalid> wrote:

> Hi devs,
>
> Some SQL Table properties contain sensitive data, like passwords that we
> do not want to expose in the VVP ui to other users. Also, having them clear
> text in a SQL statement is not secure. For example,
>
> CREATE TABLE Orders (
>     `user` BIGINT,
>     product STRING,
>     order_time TIMESTAMP(3)
> ) WITH (
>     'connector' = 'kafka',
>
>     'properties.bootstrap.servers' = 'kafka-host-1:9093,kafka-host-2:9093',
>     'properties.security.protocol' = 'SSL',
>     'properties.ssl.key.password' = 'should-be-a-secret',
>     'properties.ssl.keystore.location' = '/tmp/secrets/my-keystore.jks',
>     'properties.ssl.keystore.password' = 'should-also-be-a-secret',
>     'properties.ssl.truststore.location' =
> '/tmp/secrets/my-truststore.jks',
>     'properties.ssl.truststore.password' = 'should-again-be-a-secret',
>     'scan.startup.mode' = 'earliest-offset'
> );
>
> I would like to bring up for a discussion a proposal to provide these
> secrets values via environment variables since these can be populated from
> a K8s configMap or secrets.
>
> For implementing the SQL Table properties, the ConfigOption<T> class is
> used in connectors and formatters. This class could be extended that it
> checks whether the config-value contains certain tokens, like
> ‘${env-var-name}’. If it does, it could fetch the value from the
> environment variable and use that to replace that token in the config-value.
>
> The above SQL statement would then look like,
>
> CREATE TABLE Orders (
>     `user` BIGINT,
>     product STRING,
>     order_time TIMESTAMP(3)
> ) WITH (
>     'connector' = 'kafka',
>
>     'properties.bootstrap.servers' = 'kafka-host-1:9093,kafka-host-2:9093',
>     'properties.security.protocol' = 'SSL',
>     'properties.ssl.key.password' = '${secret_kafka_ssl_key_password}',
>     'properties.ssl.keystore.location' = '/tmp/secrets/my-keystore.jks',
>     'properties.ssl.keystore.password' =
> '${secret_kafka_ssl_keystore_password}',
>     'properties.ssl.truststore.location' =
> '/tmp/secrets/my-truststore.jks',
>     'properties.ssl.truststore.password' =
> '${secret_kafka_ssl_truststore_password}',
>     'scan.startup.mode' = 'earliest-offset'
> );
>
> For the purpose of secrets I don’t think you need any complex processing
> of tokens but perhaps there are other usages as well. For instance,
>
>     'properties.bootstrap.servers' =
> 'kafka-${otap_env}-1:9093,kafka-${otap_env}-2:9093',
>
> Because it is possible that (but I think unlikely) someone wants a
> property value like ‘${not-an-env-var}’ you need to be able to escape this
> ’$’ token like ‘$${not-an-env-var}’. This also means that in theory it
> would break compatibility.
>
> Looking forward for your feedback!
>
> Best,
> Fred Teunissen
>
> -----------------------------------------------------------------
> ATTENTION:
> The information in this e-mail is confidential and only meant for the
> intended recipient. If you are not the intended recipient, don't use or
> disclose it in any way. Please let the sender know and delete the message
> immediately.
> -----------------------------------------------------------------
>

Reply via email to