您如何將 Docker 機密(來自 /run/secrets 的檔案/資料)注入 application.properties 檔案?使用環境變數安全嗎?
uj5u.com熱心網友回復:
首先,將環境變數用于機密資料application.properties是不安全的。
在談論 Secrets 時,您主要有兩種選擇。
如果您在沒有 Docker Swarm 的情況下使用 Docker Secrets ,那么您可以直接將整個加載到
application.properties一個 secret 中,將其掛載/run/secrets并作為帶有 Spring 標志的組態檔參考它。如果您將 Docker Secrets與 Docker Swarm一起使用,那么您可以將您感興趣的具體欄位存盤為機密,并使用 Swarm 的配置模板與它們相關聯。
例子:
echo -n "myUser" | docker secret create db_user -
echo -n "myPass" | docker secret create db_password -
echo -n "jdbc://..." | docker secret create db_url -
application.properties.tmpl
spring.datasource.url={{ secret "db_url" }}
spring.datasource.user={{ secret "db_user" }}
spring.datasource.password={{ secret "db_password" }}
docker-compose.yml
version: '3.9'
services:
api:
image: yourapp:1.0.0
configs:
- source: application.properties
target: /usr/app/config/application.properties
secrets:
- db_url
- db_user
- db_password
configs:
application.properties:
template_driver: golang
file: ./application.properties.tmpl
name: myapp.application.properties
secrets:
db_url:
external: true
db_user:
external: true
db_password:
external: true
當您使用 部署時docker stack deploy -c docker-compose.yml myapp,它會自動使用機密內容填充配置,并將其安裝在目標路徑中。
uj5u.com熱心網友回復:
如果您訂閱關于配置的十二因素應用程式哲學,環境變數是為您的應用程式存盤機密的合適位置。
具體來說,使用 Spring Boot,可以UPPER_SNAKE_CASE按照映射到您的application.properties或application.yml檔案中的鍵的命名約定將它們設定為容器中的環境變數。例如,如果你想設定一個資料庫密碼,就像它database.password=i-am-the-password在你的application.properties檔案中定義的一樣,但在版本控制中忽略它,你可以這樣做:
$ export DATABASE_PASSWORD=i-am-the-password
(或將 env var 注入容器運行時的另一種方法。)
然后可以在 Java 代碼中訪問資料庫密碼,如下所示:
import org.springframework.beans.factory.annotation.Value;
public class Example {
private final String databasePassword;
public Example(
@Value("${database.password}") String databasePassword) {
this.databasePassword = databasePassword;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/360717.html
上一篇:在Docker上使用SpringBoot運行ActiveMQArtemis
下一篇:分派動作后更新Store
