自动化配置加密可保护自动化代理的本地备份配置文件中的敏感凭证。当代理将集群配置的备份存储在磁盘上时,它会使用 AES-256-GCM 对敏感字段(包括密码和身份验证密钥)进行加密,而不是以明文形式写入。
此功能可帮助组织满足 PCI-DSS、HIPAA 和 SOC 2 等框架的合规要求。
默认下禁用加密。除非您明确启用此功能,否则现有部署将保持未加密状态。
加密方法
Ops Manager支持三种自动化配置加密方法:
方法 | 最适合 | 密钥加密密钥(KEK) 来源 |
|---|---|---|
在线 (KMIP) | 具有 KMIP 基础架构的环境 | 客户托管的 KMIP服务器 |
离线 | 气隙或独立运行环境 | 机器生成的密钥 |
默认 | 自动合规性对齐 | 遵循静态加密设置 |
在线 (KMIP)
提示
当 KMIP 基础架构可用时,使用在线 ( KMIP)模式。它提供了最强的安全性,因为主密钥永远不会离开您的 HSM。
在线模式最适合具有 KMIP 基础架构的环境。主密钥驻留在与 KMIP 兼容的外部 HSM 中,从不接触磁盘。单独的引导密钥可在本地保护 KMIP 证书凭证,从而实现无人值守重启。
注意
此方法需要现有的与 KMIP 兼容的服务器。您必须配置客户端证书 (mTLS)身份验证,以与MongoDB Enterprise Advanced 的 security.kmip.* 配置相匹配。
要使用在线模式,请将 encryptionMethod设立为 ONLINE_KMS 并提供您的 KMIP服务器详细信息。
Parameter | 说明 | 必需 |
|---|---|---|
| KMIP服务器主机名或IP | 是 |
| KMIP服务器端口。默认值: | No |
| CA 证书路径 (Unix) | 是 |
| CA 证书路径 (Windows) | 可选的 |
| 客户端证书路径 (Unix) | 是 |
| 客户端证书路径 (Windows) | 可选的 |
| 客户端证书密码(如果 PEM 已加密) | No |
| KMIP服务器上现有密钥的 UUID。如果为空,代理会自动创建一个新密钥。 | No |
| 使用 KMIP 1.0/1.1(创建+获取)而不是 KMIP 1.2(加密/解密)。当 KMIP服务器不支持KMIP 1.2 时使用。 | No |
配置模式
{ "configEncryption": { "encryptionMethod": "ONLINE_KMS", "kmip": { "serverName": "<hostname>", "port": 5696, "serverCAFile": "<path-unix>", "serverCAFileWindows": "<path-windows>", "clientCertificateFile": "<path-unix>", "clientCertificateFileWindows": "<path-windows>", "clientCertificatePassword": "<password>", "keyIdentifier": "<optional-uuid>", "useLegacyProtocol": false } } }
开始之前
在启用在线KMIP加密之前,请验证以下内容:
TLS 握手:运行以下命令并确认握手成功且证书已接受:
openssl s_client -connect <serverName>:<port> \ -CAfile <serverCAFile> -cert <clientCertificateFile> 证书权限:确认客户端证书已获授权执行所需的 KMIP 操作。检查 KMIP 服务器的管理控制台或日志。
网络可访问性:确认代理托管可以通过配置的端口访问 KMIP服务器。验证防火墙规则、安全组和 DNS 解析。
证书过期:确保服务器CA 和客户端证书未过期。要进行检查,运行:
openssl x509 -enddate -noout -in <certFile>
KMIP 服务器权限
必须为 KMIP服务器上的以下操作授权客户端证书:
KMIP模式 | 所需操作 |
|---|---|
默认 (KMIP 1.2) | 创建、加密、解密对称密钥 |
旧版 ( | 创建、获取对称密钥 |
如果提供 keyIdentifier,则不需要“创建”权限。请参阅 KMIP服务器文档,为客户端证书配置适当的权限。
离线
离线模式最适合气隙或独立运行运行环境。该代理将客户提供的 UUID 与物理机参数相结合,从而派生出加密密钥。此方法不需要外部依赖。
要使用离线模式,请将 encryptionMethod设立为 OFFLINE_SOFTWARE 并提供以下参数:
Parameter | 说明 | 必需 |
|---|---|---|
| 用于密钥派生的 UUID。用作轮换触发。 | 是 |
动态 Salt UUID
dynamicSalt 是加密随机 UUID,用作密钥派生进程的附加输入。
Ops Manager用户界面:单击 Generate自动生成新的 UUID。
公共API:提供加密随机 UUID(版本4 )。使用安全的随机生成器。避免使用可预测、连续或硬编码的 UUID。
将动态盐更改为新的 UUID 会触发密钥重新派生,这是离线模式的主节点 (primary node in the replica set)轮换机制。
配置模式
{ "configEncryption": { "encryptionMethod": "OFFLINE_SOFTWARE", "dynamicSalt": "<UUID>" } }
默认
如果对部署中的任何进程启用了静态加密 (security.enableEncryption),则离线加密会自动激活,无需显式配置。否则,配置将保持未加密状态。
注意
默认模式不支持手动密钥轮换。
配置加密
您可以使用Ops Manager用户界面或公共API配置自动化配置加密。
通过Ops Manager用户界面
在Ops Manager中配置项目级别的加密。
通过公共API
您可以通过Ops Manager自动化配置端点管理自动化配置加密。
端点:PUT /groups/{PROJECT-ID}/automationConfig
在自动化配置请求正文中包含configEncryption 对象。要学习;了解有关完整请求和响应的更多信息,请参阅 更新自动化配置。
您必须具有Project Automation Admin 角色才能使用此端点。
请求正文
在自动化配置请求正文中包含configEncryption 对象。有关完整的字段引用,请参阅在线 (KMIP) 或离线。
在线 (KMIP):
{ "configEncryption": { "encryptionMethod": "ONLINE_KMS", "kmip": { "serverName": "kmip.example.com", "serverCAFile": "/path/to/ca.pem", "clientCertificateFile": "/path/to/client.pem" } } }
离线:
{ "configEncryption": { "encryptionMethod": "OFFLINE_SOFTWARE", "dynamicSalt": "<UUID>" } }
响应代码
有关完整的响应规范,请参阅更新自动化配置。以下错误代码特定于configEncryption 验证:
HTTP代码 | 说明 | 注意 |
|---|---|---|
| 配置已保存为草稿。 | 返回一个空的JSON对象: |
|
| 如果 |
|
| 如果项目受到外部托管锁的限制,则返回此函数。 |
禁用加密
要禁用自动化配置加密,请将加密方法设立为“默认”。
注意
如果项目中没有使用静态加密的部署,则在部署此更改后将禁用加密。
加密字段
只有敏感字段才会被加密。端口、日志路径和拓扑结构等非敏感操作数据仍以明文形式存在。
category | 字段 |
|---|---|
身份验证 | auth.keyauth.newKeyauth.autoPwdauth.newAutoPwdauth.autoKerberosWindowsPassword |
用户凭证 | auth.usersWanted.[].initPwdauth.usersWanted.[].scramSha1Creds.saltauth.usersWanted.[].scramSha1Creds.storedKeyauth.usersWanted.[].scramSha1Creds.serverKeyauth.usersWanted.[].scramSha256Creds.saltauth.usersWanted.[].scramSha256Creds.storedKeyauth.usersWanted.[].scramSha256Creds.serverKey |
TLS |
|
LDAP | ldap.bindQueryPasswordldap.newBindQueryPassword |
Prometheus | prometheus.passwordprometheus.passwordHashprometheus.passwordSaltprometheus.tlsPemPassword |
BI Connector |
|
加密提供者 | encryptionProviders.awsKms.accessKeyIdencryptionProviders.awsKms.secretAccessKeyencryptionProviders.awsKms.sessionTokenencryptionProviders.azureKeyVault.clientIdencryptionProviders.azureKeyVault.tenantIdencryptionProviders.azureKeyVault.secretencryptionProviders.googleCloudKMS.serviceAccountKey |
配置加密 |
|
文件工件
该代理会在其配置的备份目录中存储两个文件。代理用户必须具有此目录的读/写入访问权限。
file | 说明 | 权限 (Unix / Windows) |
|---|---|---|
| 具有内联加密敏感字段的集群配置 |
|
| 封装的加密密钥(JSON) |
|
代理使用原子模式写入文件(写入临时文件,然后重命名)。代理会在密钥文件之前保留配置文件,以确保在写入期间发生崩溃时一致的回滚。
警告
请勿修改这些文件。当无法访问Ops Manager时,代理使用它们从重启中恢复。
密钥轮换
代理支持手动和自动密钥轮换。
手动轮换
要手动轮换加密密钥,请使用以下触发器:
模式 | 触发器 |
|---|---|
在线 (KMIP) | 更新Ops Manager中的任何 KMIP 配置属性 |
离线 | 在Ops Manager中生成新的动态 Salt UUID |
默认 | 先切换到 Online 或 Offline模式 |
自动轮换
代理会在以下情况下自动轮换加密密钥:
代理进程将重新启动。
代理版本变更(升级或降级)。
何时轮换
在以下情况下轮换密钥:
疑似密钥泄露
根据组织的安全策略安排轮换
涉及基础设施访问权限的人事变动
Considerations
以下情况可能会影响部署中的自动化配置加密。
硬件更改:更换硬件或迁移虚拟机可能会使代理无法访问本地备份。该代理通过从Ops Manager获取新配置来自动恢复。
虚拟机克隆:克隆的虚拟机保留相同的机器身份,并且可以解密离线加密的数据。使用在线 (KMIP)模式实现克隆隔离的安全性。
代理升级和降级:更改代理版本会使加密项目失效。代理自动从Ops Manager获取新配置以重新加密。
Ops Manager连接:如果代理无法解密本地文件且无法访问Ops Manager ,则会进入错误状态并重试,直到连接恢复。
KMIP服务器可用性:在代理操作进行密钥包装和解包期间,必须可访问 KMIP服务器。
Kubernetes Operator:Operator模式会禁用加密。 Kubernetes Operator 单独管理密钥。
延迟迁移:现有部署在升级转为默认模式。如果为任何进程启用了静态加密,则会自动激活离线加密。
安全架构
加密系统使用信封加密,并使用加密字段的数据加密密钥(DEK)和保护 DEK 的密钥加密密钥 (KEK)。在 Online模式下,KEK 驻留在与 KMIP 兼容的 HSM 中,并且从不接触磁盘。在离线模式下,代理从特定于机器的属性中派生出 KEK,将加密数据绑定到物理托管。
加密算法
下表列出了加密进程每个阶段使用的加密算法。
用途 | 算法 | 详情 |
|---|---|---|
字段加密 | AES-256-GCM | 256 位密钥、96 位随机数、128 位身份身份验证标签。每个字段都使用唯一的随机数,并通过经过身份验证的数据 (AAD) 绑定到其配置路径,从而防止篡改或字段重新定位。 |
KEK 派生(离线) | PBKDF2-HMAC-SHA256 | 使用高迭代次数派生 KEK,以实现针对暴力攻击的计算强化。 |
DEK 包装 | AES 密钥包装 (RFC 3394) | 经 NIST 批准的算法,用于在 KEK 下保护 DEK。生成具有 8 字节完整性检查值的包装密钥。 |
DEK 包装(在线 KMIP 1.2) | KMIP 服务器端加密/解密 | 主密钥永远不会离开 KMIP服务器。服务器直接包装和解包 DEK。 |
DEK 封装(旧版 Online KMIP) | AES 密钥包装 (RFC 3394) | 该代理从 KMIP服务器检索密钥并在本地用于 AES 密钥换行,然后从内存中将其清零。 |
安全属性
自动化配置加密系统提供以下安全ACID 一致性保证。
在线模式引导:一个单独的本地包装密钥保护存储在 config.json 中的 KMIP 证书凭证。这使代理能够在无人值守的重启期间对 KMIP服务器进行身份验证,而无需在磁盘上存储明文密钥。
原子写入:代理使用崩溃安全原子模式写入配置和密钥文件。写入期间,代理可点从故障中完全恢复。
磁盘上没有明文密钥:启用加密后,代理会将备份文件中的所有档案字段替换为加密值。
master.key文件仅包含打包(加密)的密钥。
安全最佳实践
请按照以下建议加强自动化配置加密部署。
当 KMIP 基础架构可用时,首选在线 (KMIP)。它提供最强的安全性。
使用 KMIP 1.2(默认)而不是传统协议。主密钥永远不会离开 HSM。
根据组织的策略定期轮换密钥。
限制对代理配置目录的文件系统访问权限。
在脱机模式下更改硬件或迁移虚拟机之前,确保Ops Manager连接。代理通过在下次成功轮询时获取新配置来自动恢复。
故障排除
以下部分介绍常见问题、强制恢复步骤和代理日志标签。
常见问题
下表列出了常见症状、可能的原因以及解决步骤。
症状 | 可能的原因 | 解决方案 |
|---|---|---|
代理在初创企业时进入错误状态 | 硬件或机器身份已更改(离线模式) | 恢复Ops Manager连接。代理会自动恢复。 |
代理在初创企业时进入错误状态 | 无法访问 KMIP服务器或证书已过期(在线模式) | 验证 KMIP 连接和证书有效性。如有需要,请在Ops Manager中更新凭证。运行 |
日志显示“无法找到对象:KEY_ID” | 加密密钥在 KMIP 中不可用 | 使用以下选项之一:
|
| TLS 握手被拒绝 | 验证 |
| KMIP服务器拒绝了操作 | 验证客户端证书是否具有所需权限(创建/加密/解密或创建/获取)。验证 |
备份文件未更新 | 文件权限或磁盘空间不足 | 验证代理用户是否具有对配置目录的写入访问权限。 |
升级或降级后解密失败 | 加密工件受版本限制 | 代理会自动从Ops Manager获取新配置。 |
强制恢复
如果代理无法解密其本地备份并且可以访问Ops Manager ,则可以重置加密状态。
警告
在启动代理之前, Ops Manager必须可访问。如果没有连接,代理就没有可回退的配置,并进入错误状态。
Log Tags
以下日志标签标识代理日志中与加密相关的事件。
Tag | 等级 | 说明 |
|---|---|---|
| INFO | 已启动写操作 |
| DEBUG | 写入完成 |
| INFO | 已启动读取/解密操作 |
| DEBUG | 读取/解密已完成 |
| DEBUG | 从缓存提供的加密密钥 |
| INFO | 未缓存密钥;正在再生 |
| INFO | 已触发密钥轮换 |
| ERROR | 密钥轮换失败 |
| INFO | 加密方法已更改 |
| DEBUG | 加密密钥包装(包括方法) |
| DEBUG | 解包的加密密钥(包括方法) |
| DEBUG | 加密的字段路径(仅路径,无值) |
| DEBUG | 解密字段路径(仅路径,无值) |
| ERROR | 加密操作失败 |
| ERROR | 解密操作失败 |
| ERROR | 加密子系统中出现意外错误 |
| DEBUG | 已建立 KMIP TLS 连接 |
| ERROR | KMIP TLS 连接失败(包括服务器、端口、重试次数) |
| DEBUG | KMIP 操作已完成(操作类型、密钥ID、持续时间) |
| ERROR | KMIP 操作失败(操作类型、密钥ID、错误) |
| INFO | 在 KMIP服务器上创建的新密钥(密钥ID) |
| DEBUG | 重复使用现有 KMIP 密钥(密钥ID、来源) |
| DEBUG | 已构建 KMIP TLS 配置(证书路径、密码保护标志) |
注意
Ops Manager从不记录敏感值。