# STS **Repository Path**: oamlab/STS ## Basic Information - **Project Name**: STS - **Description**: Secret Transfer Service。主仓库在github上。 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-04-16 - **Last Updated**: 2024-08-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

STS v0.1.0

Secret Transfer Service

license repo-size

GitHub | Gitee | English

--- ## 🌏 前言 - [在线文档:https://gitee.com/oamlab/STS](https://gitee.com/oamlab/STS) - [Online Documentation:https://github.com/oamlab/STS](./README.English.md) *[国际访问请使用国际资料仓GitHub入口,点击进入](https://github.com/oamlab/STS) ## 🔒 背景 - 解决业务环境配置项的涉密密码的加密需求。譬如:某系统平台的管理的配置项有秘钥明码的问题,在日常管理过程中,可能造成人为的秘钥外泄。 - 某项目的基础设施平台部署后,需要进行从接口到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 ## 📃 概要功能伪代码 ``` java 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 version(): versionTag = 20230818-223301 return versionTag ``` ## 🚥 服务端口 - 8080 ## 📑 待改善 - **1、** 当前只是实现设想中的功能,代码结构需要进一步设计,也可以嵌入到更完善的框架内。 - **2、** 建议部署于集群内,因为接口无鉴权,当前看起来也不需要鉴权。 - **3、** 待添加URL过滤、字符过滤等。 - **4、** 明文要进行base64编码。 - **5、** 待进行进一步安全设计。 - **6、** 异常捕捉、日志(可以不记录业务日志)。 - **7、** 其他。 ## 📰 其他 - **1、** 工程内的数据库密码等,是随手写的,可以依需要进行修改。 - **2、** 因为统计性能测试效果和请求成功率的原因,代码中不使用“retry”。 ## 📋 自测 ``` java 自测地址: 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 [点击加入](https://jq.qq.com/?_wv=1027&k=tdDtDoUp) *[国际访问请使用国际资料仓GitHub入口,点击进入](https://github.com/oamlab/STS) ## 🔨 编译

OAMLab_sts_build_example

## 📡 启动

OAMLab_sts_start_example

## 🔧 调试与试用

OAMLab_sts_MakeKey

OAMLab_sts_dataEncrypt

OAMLab_sts_dataDecrypt

## 🔩 压力测试 - 云平台:Kubernetes - 容器数(STS):2 - 并发:200 - 总请求次数:20000 - [JMeter-Testing-profile](./Performance_Testing/301_Apache_JMeter_TestPlanA.20221114.1115.jmx)

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](https://github.com/oamlab/oamlab/blob/main/OAMLab/171_%E8%BF%90%E7%BB%B4%E5%B7%A5%E5%85%B7/301_%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/211_GitHub_SSH_Key.md) ## 🆓 版权说明 - 原软件或依赖软件仍保持其原有授权。 - 独立于原软件或依赖软件之外编写的代码、辅助软件、使用方法、文档等,是GNU General Public License v3.0授权。 - 譬如:XXX Community Server 1.0.1是基于GPL v2.0授权,我们编写的辅助软件start_XXX.sh和文档是基于GPL v3.0。

OAMLab_sts_gitee_img