Skip to content

oamlab/STS

Repository files navigation

STS v0.1.0

Secret Transfer Service

license repo-size

github | gitee | English


🌏 前言

*国内访问请使用国内资料仓gitee入口,点击进入

🔒 背景

  • 解决业务环境配置项的涉密密码的加密需求。譬如:某系统平台的管理的配置项有秘钥明码的问题,在日常管理过程中,可能造成人为的秘钥外泄。
  • 某项目的基础设施平台部署后,需要进行从接口到DB的压力测试。

🔑 用途

  • 场景A: 可用于业务环境涉密配置项加密,如下:
  • 1、某项目的生产环境数据库管理员新建了数据库账号A,密码P
  • 2、生产环境数据库管理员使用STS接口获取keyid,结合密码P,在STS接口获得密码P的密文XXX
  • 3、生产环境数据库管理员将密文XXX和keyid发放给项目组成员放入业务程序的配置项,或放入平台的ConfigMaps。
  • 4、业务程序启动后将密文XXX和keyid发送到STS接口获得明文密码P
  • 5、业务程序使用账号A和密码P连接数据库。
  • 注意:
  • 1、要求该STS只有生产环境数据库管理员和业务程序主机IP可访问,其他人和设备无法访问该STS接口;
  • 2、也可以把账号也加密了。
  • 3、理论上密文XXX和keyid对外泄露不会产生泄密影响,因为脱离该STS则该密文无法解密。
  • 4、测试环境可以独立部署一套STS,与生产环境区别开来。
  • 场景B: 可用于基础设施环境交付前的接口测试、压力测试,如下:
  • 1、某项目新部署了一套kubernetes平台。
  • 2、测试人员将STS部署到kubernetes内,并启动100个Pod,这些Pod连接同一数据库。
  • 3、测试人员以1万QPS的速度进行了10分钟制造秘钥的接口请求,理论上将会产生600万条数据。
  • 4、测试人员将实际获得的数据条数除以600万,获得了接口可用率数据、性能数据。
  • 5、在此过程中测试人员也观察到了宿主机和平台的CPU、内存、网络、磁盘等相关负载能力数据和图表。
  • 6、测试人员总结生成综合报告,向业务部门反馈该kubernetes平台的负载能力。

🔖 基本概况

  • 开发语言:JAVA
  • Java_Version:1.8.0
  • 秘钥算法:SM4加密,对称加密
  • 接口类型:RESTful
  • 使用范围:业务项目范围内、微服务集群内
  • 访问控制:iptables限制客户端IP范围,nginx限制客户端IP范围
  • 高可用:数据库主从(主宕机不能新增key,但不影响查询)、接口双活+VIP

📃 概要功能伪代码

def makeKey():
    key = random(对称秘钥X位)
    sqlquery(conn,insert,key)
    keyId = sqlquery(conn,select,key)
    return keyId,key

def getKey(keyId):
    key = sqlquery(conn,select,keyId)
    return key

def encrypt(keyId,明文):
    密文 = 算法(encrypt,明码字符,key=getKey(keyId))
    return 密文

def decrypt(keyId,密文):
    明文 = 算法(decrypt,密文,key=getKey(keyId))
    return 明文

def healthy():
    healthyStatus = Math.abs(mysqlTimeStamp - javaTimeStamp)
    return healthyStatus

def getVersion():
    versionTag = 20230818-223301
    return versionTag

🚥 服务端口

  • 8080

📑 待改善

  • 1、 当前只是实现设想中的功能,代码结构需要进一步设计,也可以嵌入到更完善的框架内。
  • 2、 建议部署于集群内,因为接口无鉴权,当前看起来也不需要鉴权。
  • 3、 待添加URL过滤、字符过滤等。
  • 4、 明文要进行base64编码。
  • 5、 待进行进一步安全设计。
  • 6、 异常捕捉、日志(可以不记录业务日志)。
  • 7、 其他。

📰 其他

  • 1、 工程内的数据库密码等,是随手写的,可以依需要进行修改。

📋 自测

自测地址:
http://127.0.0.1:8080/OAMLab/doc.html

制造秘钥: http://127.0.0.1:8080/OAMLab/api/v1/key/makeKey
方法: POST
{
	"cipherText": "",
	"id": 0,
	"key": "",
	"keyId": "",
	"plainText": ""
}

加密: http://127.0.0.1:8080/OAMLab/api/v1/key/dataEncrypt
方法: POST
{
	"cipherText": "",
	"id": 0,
	"key": "",
	"keyId": "6GsjGc6febXsRPqyRMKAATe2olVdjqBJuja5vbr6lCmpaia54qdvNhr2KZNYITu3",
	"plainText": "OAMLab"
}

解密: http://127.0.0.1:8080/OAMLab/api/v1/key/dataDecrypt
方法: POST
{
	"cipherText": "4808bd3336f933121118ba0798dc0a61",
	"id": 0,
	"key": "",
	"keyId": "6GsjGc6febXsRPqyRMKAATe2olVdjqBJuja5vbr6lCmpaia54qdvNhr2KZNYITu3",
	"plainText": ""
}

API健康检查: http://127.0.0.1:8080/OAMLab/api/v1/healthy
方法: GET
{
	"healthy": "1",
}

版本标识: http://127.0.0.1:8080/OAMLab/api/v1/version
方法: GET
{
	"version": "20230818-223301",
}

📶 技术交流群

深圳运维圈 QQ交流群:216589280 点击加入

*国内访问请使用国内资料仓gitee入口,点击进入

🔨 编译


OAMLab_sts_build_example

📡 启动

OAMLab_sts_start_example

🔧 调试与试用

OAMLab_sts_MakeKey

OAMLab_sts_dataEncrypt

OAMLab_sts_dataDecrypt

🔩 压力测试

OAMLab_sts_Kubernetes_STS

OAMLab_sts_Kubernetes_STS_Jmeter_Thread_Group

OAMLab_sts_Kubernetes_STS_Jmeter_Report

OAMLab_sts_Kubernetes_STS_Jmeter_Mysql_Data

🔃 提交代码

  • 提交代码路径:个人分支 >> develop >> main
  • 譬如:develop_AndyYao_202301 >> develop >> main
  • 为了方便做代码评审,每次最多提交5个代码文件,每次最多提交200行代码。
  • 使用SSH的方式连接GitHub

🆓 版权说明

  • 原软件或依赖软件仍保持其原有授权。
  • 独立于原软件或依赖软件之外编写的代码、辅助软件、使用方法、文档等,是GNU General Public License v3.0授权。
  • 譬如:XXX Community Server 1.0.1是基于GPL v2.0授权,我们编写的辅助软件start_XXX.sh和文档是基于GPL v3.0。

OAMLab_sts_github_img

About

Secret Transfer Service

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages