在前面的一些文章中,咱们介绍了如何在云上安全的存放配置数据,可是上面的方法都是有代码侵入性的,也就是说须要修改应用程序,本文会讲解如何使用 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
本文做者:中间件小哥
本文为云栖社区原创内容,未经容许不得转载。