OneUptime Monitor Secrets 实战指南:加密密钥的创建、注入与访问控制
OneUptime Monitor Secrets 实战指南加密密钥的创建、注入与访问控制【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptimeMonitor Secrets 是 OneUptime 内置的敏感信息管理能力用于在 API、网站、SNMP、Synthetic 脚本等各类监控检查中安全地存放 API Key、密码、令牌等凭据替代把明文写死在监控配置里的做法。本文以官方文档为主体结合仓库内数据模型、加密实现与注入管线源码完整讲解 Monitor Secret 的创建、授权、引用、轮换与权限管控读完你可以在自托管或云端 OneUptime 中为监控检查接入一套「加密存储、按监控器授权、模板语法注入」的密钥体系。Monitor Secrets 是什么Monitor Secret 是一个可以被监控器使用的加密密钥变量。仓库中数据模型的官方描述见 MonitorSecret.ts定义得很清楚Monitor Secret is a secret variable that can be used in monitors. For example you can store auth tokens, passwords, etc. in Monitor Secret and use them in your monitors. Monitor Secret is encrypted and only accessible by the probe.它解决的是监控场景下最典型的两个痛点避免凭据散落API 的Authorization头、SNMP 的 community string、Synthetic 脚本里的令牌等敏感值不必再以明文形式保存在监控步骤配置中而是集中存放于一处安全可审计密钥值加密落库、保存后永不可回读且每个密钥可以精确控制「哪些监控器有权限使用」从存储到消费全程可控。创建与管理 Monitor Secret操作入口在 OneUptime Dashboard 中按以下路径进入 Monitor Secrets 管理页Monitors - Settings - Secrets - Create Monitor Secret对应的前端页面实现位于 MonitorSecrets.tsx是一个基于ModelTableMonitorSecret的标准 CRUD 表格页支持创建、编辑、删除以及行级操作「Update Secret Value」。表单字段说明创建表单由四个字段组成其中三个与密钥本身相关字段是否必填说明Name是密钥的名称是项目内唯一的标识符。源码校验规则为最短 2 个字符、不含空格、不含特殊字符只能使用字母、数字、连字符-和下划线_见 MonitorSecrets.tsxDescription否便于记忆的友好描述例如「Api Key for GitHub」Secret Value是密钥本体例如sk_test_...这样的真实凭据Monitors which have access to this secret否多选下拉指定哪些监控器可以使用该密钥其中 Name 字段的名称就是后续在监控配置中引用的名字。例如你在上图中创建了一个名为ApiKey的密钥并勾选了APIRequest这个监控器那么在APIRequest的配置里就可以用{{monitorSecrets.ApiKey}}来引用它。三个必须知道的安全行为官方文档特别强调密钥保存后有以下行为这直接决定了密钥的运维方式值永不回显Secret Value 一旦保存就不会再出现在列表中、不会出现在编辑表单里也不会通过 API 返回。前端实现中该字段使用doNotShowWhenEditing: true见 MonitorSecrets.tsx编辑时表单根本不渲染该字段丢失只能重设由于值不可回读如果你遗失了密钥原文只能回到其来源系统如第三方服务后台重新获取然后在 OneUptime 中重新设置轮换不需要删除重建对需要更换的密钥直接点击该行上的Update Secret Value按钮更新值即可无需先删除再创建。这样密钥与监控器的授权关系、引用点都保持不变只是底层的明文凭据被替换。存储模型与加密实现数据模型MonitorSecret是一个标准的 OneUptime 数据库模型定义见 MonitorSecret.ts其核心字段如下字段类型说明projectIdObjectID租户列TenantColumn密钥归属于某个项目nameShortText密钥名称通过UniqueColumnBy(projectId)保证同一项目内唯一descriptionLongText可选描述secretValueVeryLongText密钥值标注encrypted: true即加密后落库monitorsEntityArray与Monitor的多对多关系即授权列表createdByUserId/deletedByUserIdObjectID创建人 / 删除人审计字段其中monitors关系由 TypeORM 的ManyToMany实现通过名为MonitorSecretMonitor的中间表连接monitorSecretId与monitorId两列见 MonitorSecret.ts。该表在数据库迁移中也有对应的建表与外键定义见 InitialMigration外键ON DELETE CASCADE——删除密钥或监控器时关联关系自动清理。模型对外暴露的 CRUD API 路径为/monitor-secretCrudApiEndpoint服务层实现位于 MonitorSecretService.ts继承自通用DatabaseServiceMonitorSecret。此外模型还开启了EnableWorkflow意味着密钥资源本身可以接入 OneUptime 的工作流自动化创建 / 删除 / 更新 / 读取事件均可作为工作流触发点。加密实现secretValue列标记为encrypted: true见 MonitorSecret.ts它归属于 OneUptime 的通用列加密机制。根据 EnvironmentConfig.ts 中的说明所有TableColumn({ encrypted: true })的列值——包括 OAuth 令牌、SMTP 密码、告警日历 feed token 以及 Monitor Secret——都会使用环境变量ENCRYPTION_SECRET进行AES 加密后再写入数据库。这一点对自托管用户尤其重要代码里专门提供了IsEncryptionSecretInsecure检查如果ENCRYPTION_SECRET未设置、为空或仍使用仓库自带的占位符以please-change-this前缀开头启动日志会发出高音量警告——因为任何人拿到数据库导出都可以用公开在仓库中的占位密钥解密所有加密列。因此自托管部署时务必设置一个足够随机的ENCRYPTION_SECRET这是 Monitor Secret 加密存储真正生效的前提。另一个值得注意的细节是secretValue的列级读取权限为空read: []见 MonitorSecret.ts意味着除了项目 Owner / Admin表级read权限任何角色都无法通过查询读取到密钥值——这正是「保存后永不可回读」在数据访问层的落地。权限与计费门槛MonitorSecret模型上同时声明了两类访问控制表级计费控制TableBillingAccessControlcreate / read / update / delete均要求Growth 及以上计划即 Monitor Secrets 属于 Growth 计划才开放的能力表级权限控制TableAccessControl创建需ProjectOwner/ProjectAdmin/CreateMonitorSecret读取需ReadMonitorSecret更新需EditMonitorSecret删除需DeleteMonitorSecret见 MonitorSecret.ts。四个动作均有对应的独立权限点便于按角色精细授权。在监控中使用 Secrets引用语法在监控配置中需要用到密钥的任意字段里写入模板引用即可{{monitorSecrets.SECRET_NAME}}例如官方文档的场景在 API 监控的 Request Headers 中添加一个键APIKEY值为{{monitorSecrets.ApiKey}}探针发起请求时就会携带解析后的真实密钥值。支持的监控类型与可注入位置官方文档明确列出四类而仓库源码进一步证实了更多类型和字段位置。完整清单如下监控类型可注入位置API请求头request headers、请求体request body、URLWebsite / IP / Port / Ping / SSL Certificate监控目标 URLSynthetic Monitor / Custom Code Monitor自定义脚本代码customCodeSNMP MonitorNetwork Devicecommunity stringSNMPv2 团体名、SNMPv3 auth key、SNMPv3 priv keySQL Query Monitor连接 password / username / host / databaseName甚至查询语句本身Database Health Monitor连接 password / username / host / databaseNameDNS Monitor自定义 DNS 服务器 hostname、查询名query nameDomain / DNSSEC Monitor域名External Status Page Monitor状态页 URLAPI / WebsitemTLS 场景TLS 客户端证书、客户端密钥、密钥口令tlsClientCertificate/tlsClientKey/tlsClientKeyPassphrase其中 API、Website、IP、Port、Ping、SSLCertificate 类监控注入的是monitorDestination监控目标地址API / Website 还支持 mTLS 证书与私钥的注入见 MonitorStep.ts 的说明Values can be raw PEM strings or {{monitorSecrets.name}} references。SQL / Database 监控的字段则直接支持用{{monitorSecrets.name}}引用密码、用户名、主机名等敏感连接信息见 MonitorStepSqlMonitor.ts 与 SqlConnectionConfig.ts。注入管线占位符如何变成真实凭据官方文档描述为「Secrets are injected on the probe before Synthetic or Custom Code monitor scripts execute」即脚本执行前引用已解析为明文。从源码看这一过程实际由后端 Telemetry 服务在向探针下发监控配置之前完成。核心实现在 Telemetry/Utils/Monitor.ts主要分四步检测monitorStepsReferenceSecrets()检查监控步骤序列化的 JSON 字符串中是否包含子串monitorSecrets.只有确实存在引用时才触发后续加载避免对每个监控器都做一次多余的数据库查询加载loadMonitorSecrets(monitorId)通过MonitorSecretService.findBy查询「关联了该监控器」的密钥且只select出name与secretValue两个字段使用isRoot: true的根级权限执行见 Monitor.ts。另有批量变体loadMonitorSecretsForMonitors一次查询即可为一批监控器加载各自的密钥并严格按monitors关系分组——某个监控器永远拿不到没有授予它的密钥见 Monitor.ts填充populateSecretsInMonitorSteps()按监控类型遍历所有监控步骤对匹配的字段请求头、URL、脚本、SNMP 字段等逐一执行替换见 Monitor.ts替换fillSecretsInStringOrJSON()把密钥集合构造成{ monitorSecrets: { ApiKey: 真实值 } }这样的映射再交给VMUtil.replaceValueInPlace完成{{monitorSecrets.ApiKey}}→ 真实值的文本替换见 Monitor.ts。替换完成后解析好的监控步骤随配置一起派发给探针。对 Synthetic / Custom Code 监控而言探针执行脚本时拿到的customCode中已是解密后的明文且该明文只存在于探针进程的内存执行上下文中不会随探针回传的检查数据落库——这也是「密钥只对探针可见」的语义所在。此外populateSecretsOnMonitorTest()说明 Monitor Test监控测试运行同样会执行这一套密钥解析让你在正式上线前就能验证引用是否正确见 Monitor.ts。探针侧的 MonitorUtil.test.ts 亦覆盖了 URL 中{{monitorSecrets.ApiKey}}占位符的传递与解析行为。访问控制与最小授权Monitor Secret 的授权模型非常直接monitors多对多关系本身就是授权。创建或编辑密钥时勾选的监控器列表决定了哪些监控器在注入阶段能通过关系查询拿到该密钥而这个授权是随时可更新的——想给新监控器授权或回收某监控器的使用权直接编辑该密钥的「Monitors which have access to this secret」字段即可无需改动任何监控配置。这套「按监控器授权」的机制与 OneUptime 对监控器自身凭据的最小权限设计是一脉相承的。仓库中 MonitorSecretKeyColumnAccessControl.test.ts 专门验证了监控器上三个 bearer 凭据列serverMonitorSecretKey、incomingRequestSecretKey、incomingEmailSecretKey的读取权限——只有具备轮换该密钥能力ProjectOwner / ProjectAdmin / ProjectMember / MonitorAdmin / MonitorMember / EditProjectMonitor的角色才能读取纯粹的 Viewer / MonitorViewer 只读角色一律被拒绝其原则是「能读到凭据的人必须同时具备吊销轮换它的能力」。Monitor Secret 的设计同样贯彻了这一原则密钥的创建与授权由具备管理权限的人掌控而普通只读用户既看不到密钥值也无法把密钥授权给新的监控器。最佳实践建议综合文档与源码以下是使用 Monitor Secrets 的几条建议自托管务必先配置强随机的ENCRYPTION_SECRET这是所有加密列包括 Monitor Secret 值AES 加密的根密钥使用仓库默认占位符会让加密形同虚设一个密钥只授权给必要的监控器借由monitors关系实现最小授权避免某个密钥在项目内被过多监控器共享优先用Update Secret Value轮换而非删除重建轮换保持引用与授权关系不变操作成本最低怀疑泄露时应立即轮换明文只保留在来源系统OneUptime 保存后不会回显密钥值请在自己的密码管理器或来源系统中留存原文以免遗失后无法恢复上线前用 Monitor Test 验证引用通过监控测试运行提前确认{{monitorSecrets.*}}引用解析正确避免正式监控因密钥名拼写错误而失败利用独立权限点做角色隔离CreateMonitorSecret/ReadMonitorSecret/EditMonitorSecret/DeleteMonitorSecret四个权限点可以按团队角色拆分例如只给运维角色分配创建与授权能力给监控维护角色分配使用能力。Monitor Secrets 把「敏感凭据」从监控配置中剥离出来统一收口到加密存储与按监控器授权的密钥体系中配合模板语法注入是 OneUptime 监控配置中处理 API Key、数据库口令、SNMP 凭据等敏感信息的标准姿势。【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

30分钟跑通 Apache APISIX Admin API:从第一条路由到自动化部署

30分钟跑通 Apache APISIX Admin API:从第一条路由到自动化部署

30分钟跑通 Apache APISIX Admin API:从第一条路由到自动化部署 【免费下载链接】apisix The Cloud-Native API Gateway 项目地址: https://gitcode.com/GitHub_Trending/ap/apisix Apache APISIX 是云原生 API 网关,Admin API 是管理路由、上游、…

2026/9/20 1:19:20 阅读更多 →
差分隐私直方图重采样过滤合成指令:dp_instructions 模块实战指南

差分隐私直方图重采样过滤合成指令:dp_instructions 模块实战指南

差分隐私直方图重采样过滤合成指令:dp_instructions 模块实战指南 【免费下载链接】google-research Google Research 项目地址: https://gitcode.com/gh_mirrors/go/google-research 本指南围绕 dp_instructions/resample_with_dp_histogram 模块展开&#…

2026/9/20 1:19:20 阅读更多 →
PyPTO 算子开发快速入门:CANNBot 7 阶段编排工作流实战指南

PyPTO 算子开发快速入门:CANNBot 7 阶段编排工作流实战指南

PyPTO 算子开发快速入门:CANNBot 7 阶段编排工作流实战指南 【免费下载链接】pypto-gym PyPTO-Gym 是基于 PyPTO 编程框架构建的算子与模型样例仓库 项目地址: https://gitcode.com/cann/pypto-gym 本指南面向希望在 CANN 平台上使用 PyPTO 框架快速开发自定义…

2026/9/20 1:19:20 阅读更多 →

最新新闻

飞机燃油系统仿真:Flowmaster一维CFD稳态与瞬态分析实战

飞机燃油系统仿真:Flowmaster一维CFD稳态与瞬态分析实战

简介:这份PDF白皮书聚焦Flowmaster在飞机燃油系统仿真中的基础应用,面向航空燃油系统设计人员、热流体仿真工程师及航空院校相关专业学习者,帮助读者理解如何用一维CFD工具在系统级别评估压力、温度与流量等关键性能。内容以典型客机燃油系统…

2026/9/20 1:59:36 阅读更多 →
Page Assist 上手指南:三步用本地 AI 模型辅助网页浏览

Page Assist 上手指南:三步用本地 AI 模型辅助网页浏览

Page Assist 上手指南:三步用本地 AI 模型辅助网页浏览 【免费下载链接】page-assist Use your locally running AI models to assist you in your web browsing 项目地址: https://gitcode.com/GitHub_Trending/pa/page-assist 想总结一篇长网页&#xff0c…

2026/9/20 1:59:36 阅读更多 →
VC++与DirectX运行库原理与精准安装指南

VC++与DirectX运行库原理与精准安装指南

1. 这不是“装个补丁”那么简单:为什么90%的玩家和办公用户反复踩坑在VC与DirectX运行库上 你有没有遇到过这样的场景:刚下载完一款期待已久的游戏,双击启动,弹出一行红色错误提示——“MSVCP140.dll 丢失”;或者打开…

2026/9/20 1:59:36 阅读更多 →
QuickRecorder:macOS 轻量录屏工具的安装、7种录制模式与进阶完整指南

QuickRecorder:macOS 轻量录屏工具的安装、7种录制模式与进阶完整指南

QuickRecorder:macOS 轻量录屏工具的安装、7种录制模式与进阶完整指南 【免费下载链接】QuickRecorder A lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具 项目地址: https://gitcode…

2026/9/20 1:59:36 阅读更多 →
BrewUI 使用指南:给 Homebrew 套上图形界面,告别命令行门槛

BrewUI 使用指南:给 Homebrew 套上图形界面,告别命令行门槛

最近在折腾开发环境的时候,发现身边不少朋友开始用起了 BrewUI 这个工具。先简单交代一下背景,BrewUI 是一款专门给 Homebrew 做图形化包装的开源软件,目前主要在 macOS 上用,也有针对 Linux 的版本在推进。简单说,它是…

2026/9/20 1:59:36 阅读更多 →
彻底卸载360壁纸:三层驻留机制与清理实战

彻底卸载360壁纸:三层驻留机制与清理实战

1. 360壁纸为什么这么难缠:先搞懂它的三层驻留机制很多人以为卸载360壁纸就是打开控制面板点一下“卸载”按钮的事,结果重启之后发现壁纸还在换、屏保还在跳、右下角还时不时弹个小窗。我前后帮同事处理过不下二十台被这类壁纸软件“绑架”的Win10机器&a…

2026/9/20 1:58:36 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →