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

相关文章
|
监控 Java API
提升 Java 后台性能的十大方法
【4月更文挑战第5天】本文介绍了提升 Java 后台性能的十大方法,包括 JVM 参数调整、代码优化、并发编程、数据库性能优化、I/O 优化、微服务架构、API 设计、负载均衡、容器化和编排以及性能监控。通过这些方法,可以从代码到系统层面全面提升 Java 应用的效率和响应性。注意早期设计对性能的影响,持续优化是关键。
903 7
|
搜索推荐 数据可视化 数据挖掘
构建精准的目标客户群用户画像构建
构建精准的目标客户群用户画像
1732 6
|
数据可视化 网络安全 数据安全/隐私保护
Dokcer进阶 Docker配置可视化面板 Portainer可视化面板安装
容器可视化界面安装配置,以及可视化界面的一些基础操作,以及命令详解
2004 0
Dokcer进阶 Docker配置可视化面板 Portainer可视化面板安装
|
供应链 监控 数据可视化
智能库存方案:直击日常管理痛点,释放效益潜能
Leangoo 通过智能化仓储管理和智慧管理理念,解决了库存管理中常见的盘点繁琐、出入库混乱、补货滞后等问题。它提供精准的任务规划、可视化流程管理及智能预警系统,有效提升了库存管理的效率和准确性,促进了跨部门协作与沟通,开启了库存管理的新篇章。
1176 5
|
消息中间件 监控 测试技术
惊呆了!Python性能测试高手都用这些神器:JMeter+Locust,效率翻倍📈
【9月更文挑战第8天】在软件开发中,性能测试对确保应用稳定性和高效运行至关重要。对于Python开发者而言,选择合适的性能测试工具能显著提升测试效率并精准定位性能瓶颈。本文深入探讨了JMeter和Locust这两款工具的独特优势。JMeter作为跨平台的性能测试工具,支持多种协议,具备高度可定制性和扩展性;而Locust则专为Python应用设计,利用协程实现高并发,提供实时监控和分布式测试功能。两者结合使用,可在实际项目中实现1+1>2的效果,帮助开发者构建全面高效的测试方案,保障应用稳定运行。
925 2
|
Kubernetes 持续交付 开发者
微软Azure云上部署Docker容器的技术实践
【7月更文挑战第15天】Docker与Azure的集成,为开发者提供了一种快速、可扩展和可维护的应用部署方式。通过在Azure平台上部署Docker容器,开发者可以充分利用Azure丰富的云服务和强大的基础设施,实现应用的快速迭代和高效运行。未来,随着Docker和Azure的不断发展和集成,我们可以期待更加便捷和高效的容器化应用部署体验。
|
机器学习/深度学习 数据采集 算法
Python基础算法解析:逻辑回归
Python基础算法解析:逻辑回归【2月更文挑战第20天】
492 1
Python基础算法解析:逻辑回归
|
SQL 存储 安全
代码规范(如何提高代码规范)
在软件开发中,优雅的代码规范对于编写美观且实用的代码至关重要。以下是一些提升代码质量的建议: 1. **命名清晰**:使用描述性强的命名,使代码自解释,减少误解,提高可读性。 2. **简洁性**:用最少的代码实现功能,避免冗余,简洁的代码更易维护。 3. **一致性**:保持命名和编码风格的一致性,降低团队协作成本。 4. **注释**:合理注释解释代码意图,但避免过度注释。 5. **避免复杂性**:将复杂逻辑分解为简单部分,用函数或模块封装。 6. **重构**:定期重构代码以提高可读性和性能。 7. **测试**:编写单元测试确保代码的稳定性和可靠性。
322 1
|
存储 弹性计算 网络安全
对象存储OSS产品常见问题之图片无法在网页显示如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。对象存储OSS产品常见问题之
2539 0
|
设计模式 Java
设计模式在Java项目中的实际应用
设计模式在Java项目中的实际应用

热门文章

最新文章