簡體   English   中英

如何在Cloud Foundry中加密用戶提供的服務值?

[英]How to encrypt User-Provided Service values in cloud foundry?

我正在嘗試在Cloud Foundry上加密我的用戶名和密碼。 目前,我將這些值存儲為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 

根據您要歸檔的內容,可以使用您提到的spring Vault或具有hashicorp Service Broker https://github.com/hashicorp/cf-vault-service-broker的外部Vault實例在以下位置檢索/存儲憑據:一種安全的方法。

附帶說明-屏幕截圖上的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呈現給Cloud Foundry應用

由於您似乎已經在使用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中,則不希望將其檢入源代碼管理中,並且對該文件必須格外小心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM