如何在云代工厂中加密用户提供的服务值?

时间:2017-02-27 20:32:48

标签: encryption spring-boot cloudfoundry

我正在尝试在云代工厂上加密我的用户名和密码。目前我将这些值存储为CUPS(VCAP_SERVICES)。

SPRING_DATASOURCE_URL: jdbc:oracle:thin:@//spring.guru.csi0i9rgj9ws.us-east-1.rds.a‌​mazonaws.com:1521/OR‌​C
SPRING_DATASOURCE_USERNAME: UserAdmin
SPRING_DATASOURCE_PASSWORD: p4ssw0rd
SPRING_DATASOURCE_initialize: false

我想对它进行加密,以便显示某种类型的令牌/加密或UUID,而不是我的实际用户名和密码。我如何加密这些值,以便在查看我的VCAP_SERVICES时,这些值不会暴露?

Cloud Foundry提供的服务示例

VCAP_SERVICES=
{
  cleardb: [
    {
      name: "cleardb-1",
      label: "cleardb",
      plan: "spark",
      credentials: {
        SPRING_DATASOURCE_URL: "jdbc:oracle:thin:@//spring.guru.csi0i9rgj9ws.us-east-1.rds.a‌​mazonaws.com:1521/OR‌​C",
        SPRING_DATASOURCE_USERNAME: "UserAdmin",
        SPRING_DATASOURCE_PASSWORD: "p4ssw0rd",
        SPRING_DATASOURCE_initialize: "false"
      }
    }
  ]

正如您所看到的,上面的VCAP_SERVICES已经公开,我如何加密它以便加密用户名和密码,如下例所示

所需的输出

 Username: hVB5j5GgdiP78xCSV9sNv4FeqQJducBxXlB81090ozYB
 Password: hVB523fff78xCSV9sNv4FeqQ341090324234fdfdsrrf 

2 个答案:

答案 0 :(得分:2)

根据您要归档的内容,您可以使用您提供的弹簧库或使用hashicorp服务代理https://github.com/hashicorp/cf-vault-service-broker的外部保险库实例,以安全的方式检索/存储应用程序中的凭据。

作为旁注 - 屏幕截图上的Mongodb服务凭据未加密,而是由服务代理随机生成。

最重要的是 - 您不应在应用程序清单中存储/提供服务凭据,而是通过解析环境变量VCAP_SERVICES来获取此凭据(对于绑定的cloudfoundry服务)。 https://docs.cloudfoundry.org/devguide/deploy-apps/environment-variable.html#VCAP-SERVICES

应通过CUPS https://docs.cloudfoundry.org/devguide/services/user-provided.html

向云代工厂应用提供外部服务

答案 1 :(得分:2)

由于您似乎已经在使用Spring,因此您可能需要查看Spring Cloud Config。

https://cloud.spring.io/spring-cloud-config/

对于较大的项目,可以轻松地外化和管理您的配置。常见的设置是将配置存储在Git中(但还有其他后端,包括Vault),然后Spring Cloud Config作为服务器运行,并为正在运行的应用程序(客户端)提供配置。除了包括Spring Cloud Config依赖项和几行配置之外,您的应用程序(客户端)不需要做太多工作。设置是通过Environment和PropertySource抽象自动获得并集成的,这样可以实现非常干净的集成,而不需要做很多工作。

对于较小的项目,它可能比你喜欢的开销更大。首先,您必须运行Spring Cloud Server。如果您只有一个或两个小应用程序,则运行SCC服务器的资源可能超过您的应用程序或应用程序总数。复杂性将是另一个问题。使用SCC肯定会增加一些复杂性和可能的​​故障情况。您需要了解发生问题的原因,以便在遇到问题时排除故障。

对于较小的项目,您可能需要考虑的只是在CF中使用用户提供的服务。这些是存储配置设置的中心位置(不仅仅是数据库,也可能是键和其他东西)。然后,您可以将这些绑定到您的应用程序,以将配置设置公开给该应用程序。

Cloud Controller有一些安全措施可以管理谁可以访问您的服务。我相信Cloud Controller存储的信息也是静态加密的,这是一个加分。也就是说,信息通过环境变量(即VCAP_SERVICES)暴露给您的应用程序,因此容器中可以看到环境变量的任何内容都能够读取您的设置。

使用用户提供的服务是环境变量的一步。从安全角度来看并非如此,更多来自管理层的观点。您可以创建一次用户提供的服务,然后将其绑定到任意数量的应用程序。使用env变量,您需要为每个应用设置这些变量。它更乏味,而且容易出现错别字。您还可以将服务名称放入manifest.yml文件中,以便它自动绑定到应用程序并仍然将其检入源代码管理中。如果你将带有敏感信息的env变量放入manifest.yml,你就不想将它检查到源代码控制中,你必须对该文件更加小心。