Spring boot 从SCDF执行任务时作为部分作业参数公开的DB凭据
我有定制的SCDF,它在Openshift中构建为docker映像,在server-deployment.yaml中称为docker映像。我使用Oracle db存储任务元数据,并且是这里的外部源。我在configmap中传递所有db属性。DB密码是base64编码的,并作为机密添加到配置映射中。SCDF正在使用这些数据库详细信息来存储任务元数据 这些作业参数由SCDF传递给正在执行的作业。但这些作业参数(这些作业参数是数据源属性,包括configmap中存在的db密码)将作为作业参数和批处理作业执行参数表打印在日志中 我认为在configmap中使用密码作为机密应该可以解决这个问题。但事实并非如此。下面是正在打印的作业参数的日志和表片段 我想知道如何避免将这些db属性作为作业参数传递给正在执行的作业,以防止暴露凭据?Spring boot 从SCDF执行任务时作为部分作业参数公开的DB凭据,spring-boot,kubernetes,spring-batch,openshift,spring-cloud-dataflow,Spring Boot,Kubernetes,Spring Batch,Openshift,Spring Cloud Dataflow,我有定制的SCDF,它在Openshift中构建为docker映像,在server-deployment.yaml中称为docker映像。我使用Oracle db存储任务元数据,并且是这里的外部源。我在configmap中传递所有db属性。DB密码是base64编码的,并作为机密添加到配置映射中。SCDF正在使用这些数据库详细信息来存储任务元数据 这些作业参数由SCDF传递给正在执行的作业。但这些作业参数(这些作业参数是数据源属性,包括configmap中存在的db密码)将作为作业参数和批处理作
12-06-2020 18:12:38.540 [main] INFO org.springframework.batch.core.launch.support.SimpleJobLauncher.run - Job:
[FlowJob: [name=Job]] launched with the following parameters: [{
-spring.cloud.task.executionid=8010,
-spring.cloud.data.flow.platformname=default,
-spring.datasource.username=ACTUAL_USERNAME,
-spring.cloud.task.name=Alljobs,
Job.ID=1591985558466,
-spring.datasource.password=ACTUAL_PASSWORD,
-spring.datasource.driverClassName=oracle.jdbc.OracleDriver,
-spring.datasource.url=DATASOURCE_URL,
-spring.batch.job.names=Job_1}]
为作业执行创建的Pod-openshift屏幕截图
数据库表
任何帮助都将不胜感激。谢谢。这不是一个完美的例子,但是您可以使用logback(Spring Boot使用的默认日志库)的功能在日志中屏蔽密码 将下面的配置放入您的logback,它将用替换密码****
<springProfile name="local">
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{dd-MM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %replace(%msg){'password=\S*', 'password=****'}%n
</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="console"/>
</root>
</springProfile>
%d{dd MM yyyy HH:MM:ss.SSS}[%thread]-5级%logger{36}。%M-%replace(%msg){'password=\S*','password=***'}%n
对于登录数据库的密码,看起来我们运气不好。我们能做的最好的事情是将它放在一个单独的模式中,并拥有访问这些SCDF表的特定权限。在SCDF V2.6.2中,团队解决了这个问题。数据库凭证不再在日志、POD描述页面或数据库中公开。默认情况下,凭据将可见。因此,任何有此问题的人都必须添加以下环境变量作为部署配置的一部分,并将该值设置为true
SPRING\u CLOUD\u DATAFLOW\u TASK\u USE\u KUBERNETES\u SECRETS\u FOR\u DB\u CREDENTIALS=true
我不确定我是否理解您的问题。你能澄清一下你的问题是什么吗?更新了问题,没有更多的信息。基本上,当作业通过SCDF在kubernetes平台中执行时,SCDF传递的作业参数包含db凭据。如何避免这种情况?这里正在跟踪:谢谢Hoang的回答。谢天谢地,作为发布的一部分,scdf it已经解决了这个问题。我将在单独的回答中提供这些细节。感谢@Rajesh2389的更新:)。我的团队也有类似的问题,我们还不能升级SCDF。我会暂时保留答案,以防有人有同样的问题。很高兴他们解决了。我的团队仍然坚持使用SCDF 1.7.x。。。
<springProfile name="local">
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{dd-MM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %replace(%msg){'password=\S*', 'password=****'}%n
</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="console"/>
</root>
</springProfile>