Vault 後端
Spring Cloud Config 伺服器也支援 Vault 作為後端。
有關 Vault 的更多資訊,請參閱 Vault 快速入門指南。
若要啟用組態伺服器以使用 Vault 後端,您可以使用 vault
profile 執行組態伺服器。例如,在組態伺服器的 application.properties
中,您可以新增 spring.profiles.active=vault
。
預設情況下,組態伺服器假設您的 Vault 伺服器在 127.0.0.1:8200
上執行。它也假設後端的名稱為 secret
,金鑰為 application
。所有這些預設值都可以在組態伺服器的 application.properties
中設定。下表描述了可組態的 Vault 屬性
名稱 | 預設值 |
---|---|
host |
127.0.0.1 |
port |
8200 |
scheme |
http |
backend |
secret |
defaultKey |
application |
profileSeparator |
, |
kvVersion |
1 |
skipSslValidation |
false |
timeout |
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 伺服器的 token。
首先,將一些資料放入您的 Vault 中,如下例所示
$ vault kv put secret/application foo=bar baz=bam
$ vault kv put secret/myapp foo=myappsbar
其次,向您的組態伺服器發出 HTTP 請求以檢索值,如下例所示
$ curl -X "GET" "http://localhost: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 伺服器與 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 伺服器應用程式需要額外依賴 Spring Vault 才能啟用其他驗證選項。有關如何新增該依賴項,請參閱 Spring Vault 參考指南。 |
多個屬性來源
使用 Vault 時,您可以為您的應用程式提供多個屬性來源。例如,假設您已將資料寫入 Vault 中的以下路徑
secret/myApp,dev
secret/myApp
secret/application,dev
secret/application
寫入 secret/application
的屬性可供 所有使用 Config 伺服器的應用程式 使用。名稱為 myApp
的應用程式將可以使用寫入 secret/myApp
和 secret/application
的任何屬性。當 myApp
啟用 dev
profile 時,寫入上述所有路徑的屬性都將可供使用,清單中第一個路徑中的屬性優先於其他路徑中的屬性。
解密屬性來源中的 Vault 機密
Spring Cloud Config 伺服器支援透過使用特殊的佔位符前綴 {vault}
來解密來自 Vault 的屬性。此功能允許在運行時直接從 Vault 動態解析敏感組態屬性。
組態步驟
用於與 Vault 整合的所有組態設定都應放置在您的 application.yml
或 application.properties
中。以下是啟用 Vault profile、連接到您的 Vault 伺服器以及使用 {vault}
前綴格式化屬性所需的特定組態。