Golang Go语言中的一个简单KMS实现

发布于 1周前 作者 sinazl 来自 Go语言

使用 GO 写了一个简单的秘钥管理系统,现在支持的功能

  • 秘钥管理分为三层,rootkey ==> key encryption key ===>access key 。root key 使用服务端证书 hkdf 派生算出来。
  • 每个 access key 按照 namespace & name 做索引。区分 environment (还没限制 environment 必须是 test/staging/production ,现在可以随便写)
  • 使用 grpc 的 tls 双向认证做权限控制,每张 CA 签发出来的证书是一个用户,每个用户证书里面的 subject 需要有不同的 appkey 内容。用户创建 ak 后可以授权给其它用户读取或者更新

实现上:

  • 使用 postgresql 做数据持久化
  • 使用 grpc 的双向 tls 做认证

目前功能还比较简单,只有创建 /读取 /授权等功能。还没加入 KEK 轮转,AK 自动生成等功能。等待后期增强。

有什么建议可以直接提。谢谢

github 链接: https://github.com/hxndg/qkms


Golang Go语言中的一个简单KMS实现

更多关于Golang Go语言中的一个简单KMS实现的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

不错,今天正好在弄 KMS

更多关于Golang Go语言中的一个简单KMS实现的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


有啥问题或者需求可以直接提,我正好想把这个做的稍微好用点。

在Go语言中实现一个简单的KMS(Key Management Service)可以通过以下几个步骤来完成。KMS的主要功能是安全地生成、存储、检索和管理加密密钥。以下是一个基本的实现思路:

  1. 密钥生成:使用Go的crypto包来生成对称密钥或非对称密钥对。例如,可以使用crypto/rand来生成随机字节,并使用crypto/aes来创建AES密钥。

  2. 密钥存储:密钥需要以安全的方式存储。可以使用文件系统,但应确保文件权限设置得当以防止未授权访问。更高级的做法是使用内存数据库(如Redis)或加密的数据库存储。

  3. 密钥检索:实现一个API端点,允许授权用户通过特定的标识符(如密钥ID)来检索密钥。确保在传输过程中使用HTTPS来保护数据。

  4. 访问控制:实现身份验证和授权机制,确保只有具有适当权限的用户才能访问或管理密钥。可以使用JWT(JSON Web Tokens)或其他身份验证方法来验证用户身份。

  5. 日志记录和监控:记录所有密钥管理操作,以便审计和监控潜在的安全事件。

  6. 安全性增强:考虑使用硬件安全模块(HSM)或云KMS服务来增强密钥管理的安全性。

请注意,这只是一个简单的实现思路。在实际生产环境中,还需要考虑更多的安全性、性能和可用性方面的因素。此外,务必遵守相关的法律和行业标准,以确保密钥管理的合规性。

回到顶部