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

Spring Cloud Dataflow - how to pass credentials to task

我使用 spring 部署到 Pivotal Cloud Foundry 的云数据流,将 运行 spring 批处理作业作为 spring 云任务,并且这些作业需要 aws 凭据才能访问一个 s3 桶。

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

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

我也探索过使用保管库和 spring 云配置,但同样,我需要将凭据传递给任务才能访问 spring 云配置。

谢谢!

这里是Task/Batch-Jobexample

此应用程序使用 spring-cloud-starter-aws。这个启动器已经提供了引导自动配置和覆盖 AWS 凭证作为引导属性的能力。

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

task launch --name S3LoaderJob --arguments "--cloud.aws.credentials.accessKey= --cloud.aws.credentials.secretKey= --cloud.aws.region.static= --cloud.aws.region.auto=false"

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

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

在考虑了提供的答案中包含的方法后,我继续测试和研究并得出结论,最好的方法是使用 Cloud Foundry "User Provided Service" 为任务提供 AWS 凭证。

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

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

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

然后我在应用程序中使用属性占位符-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}