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

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 在前面的一些文章中,我们介绍了如何在云上安全的存放配置数据,但是上面的方法都是有代码侵入性的,也就是说需要修改应用程序,本文会讲解如何使用 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

相关文章
|
存储 安全 API
oss客户端加密密钥管理
阿里云OSS数据加密涉及SSE-C和SSE-KMS两种方案。SSE-C中,客户端自动生成并管理DEK,负责加密和解密数据,需确保密钥的安全存储和访问控制。SSE-KMS则利用KMS生成和管理密钥,客户端通过API请求加密/解密密钥,实现更安全的密钥管理。无论哪种方式,都需要遵循密钥生命周期管理、访问控制、安全存储和定期轮换等最佳实践。选择SSE-C需要客户端有安全的密钥存储,而SSE-KMS则需关注与KMS的API交互和访问策略。
342 3
|
SQL 存储 缓存
SqlAlchemy 2.0 中文文档(三十七)(4)
SqlAlchemy 2.0 中文文档(三十七)
118 1
|
存储 SQL API
SqlAlchemy 2.0 中文文档(二十四)(4)
SqlAlchemy 2.0 中文文档(二十四)
174 0
|
算法 大数据 量子技术
探索未来:量子计算在解决复杂问题中的潜力与挑战
本文深入探讨了量子计算技术如何为解决传统计算机无法有效处理的复杂问题开辟新路径。通过分析量子计算的原理、当前发展状况以及面临的主要技术挑战,文章揭示了量子计算在未来可能带来的革命性变化,并讨论了其对科学研究、密码学和大数据处理等领域的潜在影响。
|
存储 弹性计算 网络安全
对象存储OSS产品常见问题之图片无法在网页显示如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。对象存储OSS产品常见问题之
2010 0
|
弹性计算 运维 Kubernetes
带你读《云原生架构白皮书2022新版》——Serverless(上)
带你读《云原生架构白皮书2022新版》——Serverless(上)
1916 63
|
网络协议
TCP连接的关键之谜:揭秘三次握手的必要性
在这篇文章中,我们将深入探讨TCP连接建立过程中的关键步骤——三次握手。三次握手是确保客户端和服务端之间建立可靠连接的重要过程。通过三次握手,双方可以确认彼此的接收和发送能力,并同步双方的初始序列号,从而确保连接的稳定性和可靠性。文章还解释了三次握手的原因,它可以避免历史重复连接的初始化,确保双方都收到可靠的初始序列号,并避免资源浪费和消息滞留的问题。通过三次握手,TCP连接可以保证数据的准确性和完整性,确保通信的可靠性。
297 1
TCP连接的关键之谜:揭秘三次握手的必要性
|
数据中心
Terraform使用本地编译(In-house)的Providers
## Terraform Provider的全网标识符 Terraform的Provider在全网的的标识符由三部分组成,分别为`hostname`,`namespace`和`type`组成,即`//`。`hostname`是指分发、下载Provider的域名,默认为`registry.terraform.io`。`namespace`是指提供、开发Provider的组织的命名空间,默认为`has
1460 0
CocosCreator 面试题(七)优化cocos creator 包体体积
CocosCreator 面试题(七)优化cocos creator 包体体积
721 0
|
消息中间件 缓存 Cloud Native
大促场景系统稳定性保障实践经验总结
11月11日0点刚过26秒,天猫双11的订单创建峰值就达到58.3万笔/秒,阿里云又一次扛住全球最大规模流量洪峰!58.3万笔/秒,这一数字是2009年第一次天猫双11的1457倍。
12880 82
大促场景系统稳定性保障实践经验总结