如何在雲上使用confd+ACM管理敏感數據

在前面的一些文章中,咱們介紹瞭如何在雲上安全的存放配置數據,可是上面的方法都是有代碼侵入性的,也就是說須要修改應用程序,本文會講解如何使用 confd+ACM 在不修改代碼的狀況下動態修改應用所需的配置,而且能夠從新啓動應用加載最新的配置。這樣作能夠在無代碼侵入的狀況下增強應用程序的安全性和運維效率:mysql

  • 安全性:應用程序的數據多是敏感數據,ACM 具備健壯的訪問控制機制,能夠對敏感數據進行加密來安全的保存密碼、API密鑰、證書等敏感信息;
  • 運維效率:當須要修改應用的某些配置內容時,若是隻有一兩臺機器能夠手工操做,可是當涉及幾十上百臺數量的時候,confd+ACM能夠經過配置的發佈批量進行配置修改和重啓操做;
  • 無代碼侵入:經過confd+ACM的組合能夠作到無需修改應用代碼便可達到讓應用配置動態生效的效果

下面以應用的數據庫配置爲例講解如何使用confd+ACM安全管理應用配置sql

準備工做

在操做本文的示例以前須要配置好開通ACM和對confd的使用有基本概念。數據庫

建立confd配置文件

建立confd所需的toml格式配置文件json

vim /etc/confd/conf.d/myapp.toml

指定模版文件,
ACM中的加密配置須要以/cipher-開頭
check_cmd用於檢驗配置的正確性,防止錯誤配置致使應用加載失敗
reload_cmd用於重啓應用或者讓應用動態加載配置vim

[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-開頭的配置進行解密安全

{{$data := json (getv "/cipher-myapp/database/jdbc")}}
jdbc.url={{$data.url}}
jdbc.username={{$data.username}}
jdbc.password={{$data.password}}

在ACM上建立所需的配置文件

建立dataId爲cipher-myapp.database.jdbc的配置文件,group使用默認的DEFAULT_GROUP便可,配置內容爲app

{
"url":"jdbc:mysql://localhost:3306/dbName",
"username":"testuser",
"password":"testpassword"
}

啓動confd

和官網文檔不一樣的是,要支持解密功能,須要設置confd的-openKMS開關,而且設置kms服務的regionId,這個信息能夠從示例代碼中得到運維

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配置內容

當須要修改數據庫的鏈接串的時候,直接在ACM上修改cipher-myapp.database.jdbc配置,confd會從新生成數據庫配置文件,並讓應用加載最新配置。固然在實際生產環境中,可使用ACM的Beta功能對幾臺機器先進行灰度發佈,檢驗沒問題再繼續全量發佈url


原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索