如何在云上使用confd+ACM管理敏感数据

简介: 在前面的一些文章中,我们介绍了如何在云上安全的存放配置数据,但是上面的方法都是有代码侵入性的,也就是说需要修改应用程序,本文会讲解如何使用 confd+ACM 在不修改代码的情况下动态修改应用所需的配置,并且可以重新启动应用加载最新的配置。

在前面的一些文章中,我们介绍了如何在云上安全的存放配置数据,但是上面的方法都是有代码侵入性的,也就是说需要修改应用程序,本文会讲解如何使用 confd+ACM 在不修改代码的情况下动态修改应用所需的配置,并且可以重新启动应用加载最新的配置。这样做可以在无代码侵入的情况下加强应用程序的安全性和运维效率:

  • 安全性:应用程序的数据可能是敏感数据,ACM 具有健壮的访问控制机制,可以对敏感数据进行加密来安全的保存密码、API密钥、证书等敏感信息;
  • 运维效率:当需要修改应用的某些配置内容时,如果只有一两台机器可以手工操作,但是当涉及几十上百台数量的时候,confd+ACM可以通过配置的发布批量进行配置修改和重启操作;
  • 无代码侵入:通过confd+ACM的组合可以做到无需修改应用代码即可达到让应用配置动态生效的效果

下面以应用的数据库配置为例讲解如何使用confd+ACM安全管理应用配置

准备工作

在操作本文的示例之前需要配置好开通ACM和对confd的使用有基本概念,ACM的开通及其基本使用可以参考:这里
confd的基本使用可以参考:这里

创建confd配置文件

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

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

指定模版文件,
ACM中的加密配置需要以/cipher-开头
check_cmd用于检验配置的正确性,防止错误配置导致应用加载失败
reload_cmd用于重启应用或者让应用动态加载配置

[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即可,配置内容为

{
"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

12

生成配置文件

查看生成的/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功能对几台机器先进行灰度发布,检验没问题再继续全量发布

本文演示了如何使用confd+ACM安全管理敏感数据,ACM安全配置更多信息还可以参考:这里

本文作者:风卿,Nacos 社区 Committer

相关文章
|
22天前
|
人工智能 Java 开发工具
阿里开源 AI 代码审查神器 OpenCodeReview:让 AI 真正读懂你的 Git Diff
阿里开源的 OpenCodeReview 是一款专为 AI 代码审查设计的 CLI Agent 工具。它通过确定性工程(文件筛选、分组、规则匹配、敏感过滤)与智能 Agent 协同,解决传统大模型直接 Review Git Diff 时的上下文缺失、误判、Token 浪费等问题。支持多语言、自定义规则、CI 集成及 JSON 输出,兼顾精度与生产可用性。(239字)
725 0
|
定位技术
阿里架构总监一次讲透中台架构,13页PPT精华详解,建议收藏!
本文整理了阿里几位技术专家,如架构总监 谢纯良,中间件技术专家 玄难等几位大牛,关于中台架构的几次分享内容,将业务中台形态、中台全局架构、业务中台化、中台架构图、中台建设方法论、中台组织架构、企业中台建设实施步骤等总共13页PPT精华的浓缩,供大家学习借鉴。
40232 117
|
10月前
|
存储 自然语言处理 测试技术
一行代码,让 Elasticsearch 集群瞬间雪崩——5000W 数据压测下的性能避坑全攻略
本文深入剖析 Elasticsearch 中模糊查询的三大陷阱及性能优化方案。通过5000 万级数据量下做了高压测试,用真实数据复刻事故现场,助力开发者规避“查询雪崩”,为您的业务保驾护航。
2540 89
|
4月前
|
SQL 人工智能 文字识别
阿里开源的 AI 代码审查工具 open-code-review 来了
阿里巴巴开源Open Code Review(OCR),融合确定性工程与LLM Agent,已服务数万开发者、发现百万级缺陷。内置NPE、SQL注入等安全规则,支持CLI、Agent集成及多平台部署,让AI代码审查更精准、稳定、可落地。(239字)
9034 1
Java 类是如何被加载的
这篇文章从双亲委派讲到了Class文件的加载,最后又绕回到双亲委派,看似有点绕,其实只有理解了Class的加载机制,才能更好的理解类似双亲委派这样的机制,否则只死记硬背一些空洞的理论,是无法起到由内而外的理解的。
14412 121
|
NoSQL 安全 Java
Redisson框架使用:支持高并发的RBucket功能剖析
整体来看,无论你是在开发新的分布式应用,还是在维护一个现有的大型系统,Redisson 框架和 RBucket 功能都能为你提供非常大的帮助。正如扳手能让你轻松地拧紧螺丝,Redisson 和 RBucket 也能让你轻松处理并发的问题。一起来享受编程的乐趣吧!
749 10
|
XML 机器学习/深度学习 JSON
|
存储 Java
【Java】已解决java.util.concurrent.RejectedExecutionException异常
【Java】已解决java.util.concurrent.RejectedExecutionException异常
1402 1
|
NoSQL Java Redis
开发实战:使用Redisson实现分布式延时消息,订单30分钟关闭的另外一种实现!
本文详细介绍了 Redisson 延迟队列(DelayedQueue)的实现原理,包括基本使用、内部数据结构、基本流程、发送和获取延时消息以及初始化延时队列等内容。文章通过代码示例和流程图,逐步解析了延迟消息的发送、接收及处理机制,帮助读者深入了解 Redisson 延迟队列的工作原理。
|
监控 关系型数据库 测试技术
性能压测工具选型对比
本文是《Performance Test Together》(简称PTT)系列专题分享的第二期,该专题将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性能压测的理论体系,并提供有例可依的实战。
24270 115