Spring Cloud Dataflow - 如何将凭据传递给任务

时间:2018-05-25 13:39:15

标签: spring-batch spring-cloud cloudfoundry spring-cloud-dataflow spring-cloud-task

我使用部署到关键云代工厂的spring cloud数据流,将Spring批处理作业作为Spring云任务运行,并且作业需要aws凭据才能访问s3存储桶。

我尝试将aws凭据作为任务属性传递,但凭据作为参数或属性显示在任务的日志文件中。 (https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/htmlsingle/#spring-cloud-dataflow-global-properties

目前,我在每次部署后手动将凭据设置为pcf中的env变量,但我尝试自动执行此操作。在实际启动任务之前,不会部署任务,因此在部署时我必须启动任务,然后等待由于缺少凭据而导致失败,然后使用cf设置env变量凭据CLI。我如何提供这些凭据,而不在pcf应用程序的日志中显示它们?

我还探讨了使用保险库和弹簧云配置,但同样,我需要将凭据传递给任务以访问spring cloud配置。

谢谢!

3 个答案:

答案 0 :(得分:1)

这是一个任务/批处理作业example

此应用使用spring-cloud-starter-aws。此启动器已经提供了Boot自动配置,并且能够将AWS信誉覆盖为Boot属性。

从SCDF启动时会覆盖属性,如:

  

任务启动--name S3LoaderJob --arguments“--cloud.aws.credentials.accessKey = --cloud.aws.credentials.secretKey = --cloud.aws.region.static = --cloud.aws.region 。汽车=假“

您可以决定控制任务的日志级别,因此不会以纯文本格式记录它们。

答案 1 :(得分:1)

任务的安全凭证应该通过任务定义中的环境变量进行配置,或者使用Spring Cloud Config Server之类的东西来配置(并在休息时加密存储它们)。 Spring Cloud Task以明文形式存储数据库中的所有命令行参数,这就是不应该以这种方式传递的原因。

答案 2 :(得分:0)

在考虑所提供答案中包含的方法后,我继续进行测试和研究,并得出结论,最佳方法是使用Cloud Foundry“用户提供的服务”为任务提供AWS凭据。

https://docs.cloudfoundry.org/devguide/services/user-provided.html

Spring Boot自动处理每个应用程序容器中包含的VCAP_SERVICES环境变量。

http://engineering.pivotal.io/post/spring-boot-injecting-credentials/

然后我在application-cloud.properties中使用了属性占位符来将处理后的属性映射到spring-cloud-aws属性中:

cloud.aws.credentials.accessKey=${vcap.services.aws-s3.credentials.aws_access_key_id}
cloud.aws.credentials.secretKey=${vcap.services.aws-s3.credentials.aws_secret_access_key}