在前面的一些文章中,咱們介紹瞭如何在雲上安全的存放配置數據,可是上面的方法都是有代碼侵入性的,也就是說須要修改應用程序,本文會講解如何使用 confd+ACM 在不修改代碼的狀況下動態修改應用所需的配置,而且能夠從新啓動應用加載最新的配置。這樣作能夠在無代碼侵入的狀況下增強應用程序的安全性和運維效率:html
下面以應用的數據庫配置爲例講解如何使用confd+ACM安全管理應用配置mysql
在操做本文的示例以前須要配置好開通ACM和對confd的使用有基本概念,ACM的開通及其基本使用能夠參考:這裏
confd的基本使用能夠參考:這裏sql
建立confd所需的toml格式配置文件數據庫
vim /etc/confd/conf.d/myapp.toml
指定模版文件,
ACM中的加密配置須要以/cipher-開頭
check_cmd用於檢驗配置的正確性,防止錯誤配置致使應用加載失敗
reload_cmd用於重啓應用或者讓應用動態加載配置json
[template] src = "jdbc.properties.tmpl" dest = "/tmp/jdbc.properties" keys = [ "/cipher-myapp/database/jdbc", ] #check_cmd = "check config is correct" reload_cmd = "restart app"
vim /etc/confd/templates/jdbc.properties.tmpl
getv從ACM中獲取對應dataId的配置:
/cipher-myapp/database/jdbc對應的dataId爲cipher-myapp.database.jdbc
confd基於kms會自動對/cipher-開頭的配置進行解密vim
{{$data := json (getv "/cipher-myapp/database/jdbc")}} jdbc.url={{$data.url}} jdbc.username={{$data.username}} jdbc.password={{$data.password}}
建立dataId爲cipher-myapp.database.jdbc的配置文件,group使用默認的DEFAULT_GROUP便可,配置內容爲安全
{ "url":"jdbc:mysql://localhost:3306/dbName", "username":"testuser", "password":"testpassword" }
和官網文檔不一樣的是,要支持解密功能,須要設置confd的-openKMS開關,而且設置kms服務的regionId,這個信息能夠從示例代碼中得到app
confd -backend nacos -endpoint {endpoint}:8080 -namespace {namespace} -accessKey {accessKey} -secretKey {secretKey} -openKMS true -regionId {regionId} -watch
查看生成的/tmp/jdbc.properties配置文件,若是生成了該文件,而且文件內容以下則說明整個流程運行正常運維
jdbc.url=jdbc:mysql://localhost:3306/dbName jdbc.username=testuser jdbc.password=testpassword
當須要修改數據庫的鏈接串的時候,直接在ACM上修改cipher-myapp.database.jdbc配置,confd會從新生成數據庫配置文件,並讓應用加載最新配置。固然在實際生產環境中,可使用ACM的Beta功能對幾臺機器先進行灰度發佈,檢驗沒問題再繼續全量發佈加密
本文演示瞭如何使用confd+ACM安全管理敏感數據,ACM安全配置更多信息還能夠參考:這裏
本文做者:風卿,Nacos 社區 Committer
本文爲雲棲社區原創內容,未經容許不得轉載。