如何在云上使用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


原文连接 本文为云栖社区原创内容,未经容许不得转载。

相关文章
相关标签/搜索