Vault 後端

Spring Cloud Config Server 還支援 Vault 作為後端。

Vault 是一個安全訪問秘密的工具。秘密是指任何您希望嚴格控制訪問許可權的資訊,例如 API 金鑰、密碼、證書和其他敏感資訊。Vault 為任何秘密提供統一介面,同時提供嚴格的訪問控制並記錄詳細的審計日誌。

有關 Vault 的更多資訊,請參閱 Vault 快速入門指南

要使配置伺服器能夠使用 Vault 後端,您可以使用 vault 配置檔案執行您的配置伺服器。例如,在您的配置伺服器的 application.properties 中,您可以新增 spring.profiles.active=vault

預設情況下,Spring Cloud Config Server 使用基於令牌的身份驗證從 Vault 獲取配置。Vault 還支援其他身份驗證方法,如 AppRole、LDAP、JWT、CloudFoundry、Kubernetes Auth。為了使用 TOKEN 或 X-Config-Token 標頭以外的任何身份驗證方法,我們需要在類路徑上新增 Spring Vault Core,以便 Config Server 可以將身份驗證委託給該庫。請將以下依賴項新增到您的 Config Server App。

Maven (pom.xml)

<dependencies>
	<dependency>
		<groupId>org.springframework.vault</groupId>
		<artifactId>spring-vault-core</artifactId>
	</dependency>
</dependencies>

Gradle (build.gradle)

dependencies {
    implementation "org.springframework.vault:spring-vault-core"
}

預設情況下,配置伺服器假定您的 Vault 伺服器執行在 127.0.0.1:8200。它還假定後端名稱為 secret,鍵為 application。所有這些預設值都可以在您的配置伺服器的 application.properties 中配置。下表描述了可配置的 Vault 屬性

名稱 預設值

host

127.0.0.1

port

8200

scheme

http

backend

secret

defaultKey

application

defaultLabel

main(僅當 enableLabel 設定為 true 時使用)

enableLabel

profileSeparator

,

kvVersion

1

skipSslValidation

超時

5

namespace

null

上表中所有屬性都必須以 spring.cloud.config.server.vault 為字首,或放置在複合配置的正確 Vault 部分中。

所有可配置屬性都可以在 org.springframework.cloud.config.server.environment.VaultEnvironmentProperties 中找到。

Vault 0.10.0 引入了版本化的鍵值後端(k/v 後端版本 2),它暴露了一個與早期版本不同的 API,現在它要求在掛載路徑和實際上下文路徑之間有一個 data/,並將秘密包裝在一個 data 物件中。設定 spring.cloud.config.server.vault.kv-version=2 將考慮這一點。

此外,還支援 Vault Enterprise 的 X-Vault-Namespace 標頭。要將其傳送到 Vault,請設定 namespace 屬性。

在您的配置伺服器執行後,您可以向伺服器發出 HTTP 請求以從 Vault 後端檢索值。為此,您需要一個用於您的 Vault 伺服器的令牌。

首先,在您的 Vault 中放置一些資料,如以下示例所示

$ vault kv put secret/application foo=bar baz=bam
$ vault kv put secret/myapp foo=myappsbar

其次,向您的配置伺服器發出 HTTP 請求以檢索值,如以下示例所示

$ curl -X "GET" "https://:8888/myapp/default" -H "X-Config-Token: yourtoken"

您應該看到類似於以下內容的響應

{
   "name":"myapp",
   "profiles":[
      "default"
   ],
   "label":null,
   "version":null,
   "state":null,
   "propertySources":[
      {
         "name":"vault:myapp",
         "source":{
            "foo":"myappsbar"
         }
      },
      {
         "name":"vault:application",
         "source":{
            "baz":"bam",
            "foo":"bar"
         }
      }
   ]
}

客戶端向 Config Server 提供必要認證以使其與 Vault 通訊的預設方式是設定 X-Config-Token 標頭。但是,您也可以省略該標頭,並透過設定與 Spring Cloud Vault 相同的配置屬性來在伺服器中配置認證。要設定的屬性是 spring.cloud.config.server.vault.authentication。它應該設定為其中一種支援的認證方法。您可能還需要設定與您使用的認證方法相關的其他屬性,方法是使用與 spring.cloud.vault 文件中相同的屬性名稱,但使用 spring.cloud.config.server.vault 字首。有關更多詳細資訊,請參閱 Spring Cloud Vault 參考指南

如果您省略 X-Config-Token 標頭並使用伺服器屬性設定認證,則 Config Server 應用程式需要額外依賴 Spring Vault 才能啟用其他認證選項。有關如何新增該依賴項,請參閱 Spring Vault 參考指南

多個屬性源

使用 Vault 時,您可以為應用程式提供多個屬性源。例如,假設您已將資料寫入 Vault 中的以下路徑

secret/myApp,dev
secret/myApp
secret/application,dev
secret/application

寫入 secret/application 的屬性可供使用 Config Server 的所有應用程式使用。名為 myApp 的應用程式將可以使用寫入 secret/myAppsecret/application 的任何屬性。當 myApp 啟用了 dev 配置檔案時,它將可以使用寫入上述所有路徑的屬性,其中列表中第一個路徑中的屬性優先於其他路徑中的屬性。

透過標籤啟用搜索

預設情況下,Vault 後端在搜尋秘密時不會使用標籤。您可以透過將 enableLabel 功能標誌設定為 true,並可選地設定 defaultLabel 來更改此行為。當未提供 defaultLabel 時,將使用 main

enableLabel 功能標誌開啟時,Vault 中的秘密在其路徑中應始終包含所有三個段(應用程式名稱、配置檔案和標籤)。因此,上一節中的示例,在啟用了功能標誌的情況下,將如下所示:

secret/myApp,dev,myLabel
secret/myApp,default,myLabel       # default profile
secret/application,dev,myLabel     # default application name
secret/application,default,myLabel # default application name and default profile.

在屬性源中解密 Vault 秘密

Spring Cloud Config Server 透過使用特殊佔位符字首 {vault} 支援從 Vault 解密屬性。此功能允許在執行時直接從 Vault 動態解析敏感配置屬性。

配置步驟

所有與 Vault 整合的配置設定都應放置在您的 application.ymlapplication.properties 中。以下是啟用 Vault 配置檔案、連線到您的 Vault 伺服器以及使用 {vault} 字首格式化屬性所需的特定配置。

啟用 Vault 配置檔案

為您的 Spring Cloud Config Server 啟用 Vault 配置檔案

spring:
  profiles:
    active: vault

Vault 配置

設定與您的 Vault 伺服器的連線以及必要的認證詳細資訊

spring:
  cloud:
    config:
      server:
        vault:
          host: vault.example.com
          port: 8200
          scheme: https
          backend: secret
          defaultKey: application
          kvVersion: 2
          authentication: TOKEN
          token: ${VAULT_TOKEN}
          skipSslValidation: true

這些設定指定 Vault 伺服器地址、認證方法以及訪問 Vault 所需的令牌。

屬性格式

定義帶有 {vault} 字首的屬性,以指定用於檢索秘密的 Vault 路徑和鍵

some:
  sensitive:
    value: '{vault}:path/to/secret#key'

此格式直接對映到秘密在 Vault 中的儲存位置 (path/to/secret) 和要檢索的特定秘密鍵 (key)。

錯誤處理

如果配置伺服器在解密過程中遇到任何問題,例如路徑不正確、訪問問題或缺少鍵,受影響的屬性將以 invalid. 為字首,其值將設定為 <n/a>。此方法類似於處理以 {cipher} 為字首的屬性,但它專門為與 Vault 整合而定製,在解密失敗時提供清晰的反饋。

© . This site is unofficial and not affiliated with VMware.