oneidentity/safeguard-devops由于Safeguard for Privileged Passwords中SignalR技术的升级,DevOps密钥代理(Safeguard Secrets Broker for DevOps)的SignalR客户端版本也需同步升级。用于监控密码变更事件的升级后SignalR技术不向后兼容旧版本,因此1.5.0及以上版本的DevOps密钥代理仅兼容Safeguard for Privileged Passwords 6.8.0及以上版本。DevOps密钥代理1.0.0版本必须搭配Safeguard for Privileged Passwords 6.7.0及以下版本使用。
DevOps对不同人可能有不同含义,明确我们所说的“保障DevOps安全”的具体范畴至关重要。
DevOps是软件开发团队与运维团队之间用于构建、测试和发布软件的自动化形式,旨在实现速度与弹性。通常,人们将DevOps与SaaS解决方案部署到云环境的自动化联系起来,但DevOps也可以简单到源代码仓库钩子触发构建服务器检出并构建.NET库,再推送到NuGet服务器。
One Identity开源项目通过One Identity GitHub issues和One Identity社区提供支持,包括所有脚本、插件、SDK、模块、代码片段或其他解决方案。如需协助,可在GitHub项目页面提交新Issue,或访问One Identity社区提问。通过官方One Identity支持渠道提交的协助请求将被引导至GitHub和社区论坛,以便所有用户受益。
DevOps技术面临以下安全挑战:
上述所有安全问题均涉及资源访问限制,而访问控制需要身份验证。系统必须能识别请求者或确认其可信度才能做出访问控制决策,此过程通过密钥完成——拥有密钥即证明请求者可信(密钥可以是密码、私钥、API密钥等)。
DevOps中,请求者是自动化流程而非人类,导致基于密钥的身份验证更复杂。DevOps场景对速度要求高,自动化流程无法等待传统PAM中的手动审批(发布门控除外)来获取密钥。
最简单的DevOps自动化方式是使用静态嵌入密钥,但安全合规要求密钥需安全存储并定期轮换,且需安全交付给自动化流程(构建系统、编排器、脚本等)。此外,开发人员可能在代码、配置文件或虚拟机中嵌入密钥,导致IT组织担忧影子IT风险。
Safeguard推荐的最佳实践是将安全性较低的DevOps环境与PAM环境完全隔离,实现“零访问”PAM环境。解决方案核心是让Safeguard“推送密钥到DevOps”:
!SafeguardDevOpsService
Safeguard提供A2A(应用到应用)REST API和核心REST API(图中标记为Config),用于配置A2A服务及其他Safeguard服务,还提供用于访问这些API的.NET Standard 2.0开源SDK。
开源组件,可部署为服务或容器,包含可扩展插件以与多种DevOps技术集成。该服务发现配置为推送到不同DevOps技术的A2A密钥。
单页Web应用,用于引导DevOps密钥代理与Safeguard之间的身份验证配置。
为从TPAM迁移的Safeguard客户设计的新PARCache服务。
,可在Linux系统下载部署。
以下命令下载并部署密钥代理Docker镜像:
bash$ docker run -it -p 443:4443 --cap-add NET_ADMIN oneidentity/safeguard-devops
-p 443:4443将内部端口映射到外部443。如需映射至其他外部端口,替换443为目标端口。--cap-add NET_ADMIN参数在外部端口为特权端口(<1024)时必需。初始化时可通过环境变量控制调试级别和数据库加密。出于安全考虑,建议通过here-document传递环境变量:
bash$ docker run -it -p 443:4443 --cap-add NET_ADMIN --env-file <(cat <<EOF SSBEncPasswd=thisisapasswordformyencrypteddatabase EOF ) oneidentity/safeguard-devops
bash$ docker pull oneidentity/safeguard-devops
警告:部分Docker环境中,容器可能无法正确识别主机IP,导致A2A IP限制与主机不匹配,进而阻止密码监控启动。若
SafeguardDevOpsService.log显示监控启动失败,可通过Safeguard桌面客户端导航至设置中的“应用到应用”注册配置,编辑与密钥代理匹配的SafeguardDevOpsServer-xxx和SafeguardDevOpsServiceVaultCredentials-xxx注册,在“凭证检索”选项卡中修改限制以匹配密钥代理主机IP。此问题将在未来版本中修复。
Windows或Docker环境中,可通过环境变量控制密钥代理初始化。Windows通过appsettings.json(重命名_appsettings.json)设置,Docker通过命令行传递。可用环境变量如下:
Information,Docker默认Debug;可选值:Information、Debug、Error、Warning、Fatal、Verbose。appsettings.json修改。https://<服务IP或DNS>。!SafeguardDevOpsService
!SafeguardDevOpsService
!SafeguardDevOpsService
!SafeguardDevOpsService
证书准备:密钥代理需要两类证书(均需私钥):
安装客户端证书:
GET /service/devops/Safeguard/CSR,指定证书类型A2AClient(可选证书大小和主题名)生成CSR。POST /service/devops/Safeguard/ClientCertificate上传证书:json{ "Base64CertificateData": "<证书Base64数据>", "Passphrase": "<PFX密码>" // 仅上传带私钥的PFX时需要,否则省略 }
POST /service/devops/Safeguard/Configuration,请求体为空{}(也可在此调用中包含上述证书JSON体一并上传)。此操作将存储证书和私钥至密钥代理数据库,在SPP中创建带适当权限的DevOpsService用户,创建两个带IP限制的A2A注册,完成密钥拉取准备。配置监听端口和日志级别:
ProgramFiles\SafeguardDevOpsService目录下有示例配置文件_appsettings.json,重命名为appsettings.json后编辑:
"HttpPort": "<端口>":设置监听端口。"LogLevel": "<级别>":设置日志级别(默认Information,可选:Information、Error、Fatal、Verbose、Warning、Debug)。POST /service/devops/Plugins/File上传插件ZIP,密钥代理将自动检测、加载并注册插件。GET /service/devops/Plugins验证插件是否已部署注册。PUT /service/devops/Plugins/{name},请求体仅包含Configuration字段。例如,配置HashiCorp Vault插件:json{ "Configuration": { "address": "<hashicorp-url>", "mountPoint": "secret" } }
GET /service/devops/Safeguard/AvailableAccounts获取SPP中所有可请求的账户列表。POST /service/devops/Safeguard/A2ARegistration/RetrievableAccounts,请求体为步骤1结果中需添加的账户(可编辑移除不需要的账户)。POST /service/devops/Plugins/{name}/Accounts,请求体为步骤2结果中需映射到该插件的账户(可编辑)。对每个需拉取密码的插件重复此操作。GET /service/devops/Safeguard/AvailableAccounts获取所有可用账户。POST /service/devops/Plugins/{name}/VaultAccount,请求体为对应第三方密钥库的资产账户信息(从步骤1结果复制)。对每个插件重复此操作。调用POST /service/devops/Monitor启动监控:
json{ "Enabled": true }
"Enabled": false可停止监控。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务