首页/新闻资讯/正文详情

Ceph RGW 集成 KMIP:以 KMIP 协议作为 SSE-KMS 密钥管理后端的完整配置指南

发布时间:2026/9/23 20:24:54 来源:云帆数科 栏目:资讯中心
Ceph RGW 集成 KMIP:以 KMIP 协议作为 SSE-KMS 密钥管理后端的完整配置指南
存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载本文基于当前仓库 doc/radosgw/kmip.rst 整理结合 src/rgw/rgw_kms.cc、src/rgw/rgw_kmip_client.h、src/rgw/rgw_kmip_client_impl.cc 等源码深入讲解。导读Ceph 对象网关RadosGW支持将对象加密Server-Side Encryption的密钥托管到外部 KMS 系统KMIPKey Management Interoperability Protocol即是被支持的 KMS 后端之一。本文完整介绍如何在 KMIP 服务端注册 Ceph 客户端、创建加密密钥、配置 RGW 启用 KMIP 后端以及最终通过 AWS CLI 上传加密对象并理解密钥的获取链路。KMIP 在 Ceph 中的定位KMIP 是一个用于密钥管理的互操作协议在 Ceph 中可以充当服务端加密SSE-KMS参见 加密文档的安全密钥管理服务。当rgw_crypt_s3_kms_backend设置为kmip时RadosGW 不会像 Barbican、Vault 那样把密钥托管在自己的配置或独立 KMS 服务中而是通过 KMIP 协议向 KMIP 服务器发起密钥查找LOCATE、获取GET等操作取得对象的加密密钥后再完成对象数据的加解密。原始文档中的交互流程如下--------- --------- ------ ------- | Client | | RadosGW | | KMIP | | OSD | --------- --------- ------ ------- | create secret key for key ID | | |----------------------------------| | | | | | upload object with key ID | | |----------------------------------| request | | | secret key | | | for key ID | | |------------| | |------------| | | return | | | secret key | | | | | | encrypt | | | object with | | | secret key | | | | | | store | | | encrypted | | | object | | |------------|从 rgw_kms.cc 的代码可以看到RGW 在取密钥时是一个典型的“后端分派”结构根据rgw_crypt_s3_kms_backend的取值分别调用 Barbican、Vault、KMIP 或 testing本地测试实现KMIP 分支最终进入get_actual_key_from_kmip()。也就是说 KMIP 只是 RGW SSE-KMS 家族中的一个可插拔后端本文的配置并不影响其他后端的使用。在正式使用 KMIP 之前需要完成三件事在 KMIP 中为 Ceph 关联客户端信息把 Ceph 注册为可信客户端配置 CephRGW使用这份客户端信息在 KMIP 中创建一个或多个密钥。在 KMIP 中为 Ceph 配置访问权限在 KMIP 服务端登记 Ceph 的方式完全取决于你所使用的 KMIP 实现。原文档介绍了两种实现IBM Security Guardium Key Lifecycle ManagerSKLM商业产品支持完善和 PyKMIP小型 Python 项目仅适合实验与测试。使用 IBM SKLMIBM SKLM 使用证书对客户端进行认证。证书可以是自签名证书例如用 OpenSSL 生成也可以是 SKLM 签发的证书。操作路径大致如下先把 Ceph 配置为使用 KMIP见下文“配置 Ceph 对象网关”然后发起一次使用 KMIP 的操作这次操作预期会失败但它会在 SKLM 中留下一个 untrusted client device certificate不受信任的客户端设备证书通过 SKLM Web 界面完成注册进入Advanced Configuration→Client Device Communication Certificates找到不受信任的客户端选择Modify SSL/KMIP Certificates for Clients然后打开allow the server to trust this certificate and communicate...开关将其升级为已注册客户端。使用 PyKMIPPyKMIP 没有专门的注册流程它直接信任客户端证书。但有两个前提客户端证书必须由 PyKMIP 信任的证书颁发机构CA签发PyKMIP 倾向于证书带有 extended key usage 扩展。若证书缺少该扩展可以在服务端配置中设置enable_tls_client_authFalse来绕过。在 KMIP 中创建密钥部分 KMIP 实现自带 Web 界面或管理工具来创建和管理密钥此时直接参考对应产品的文档即可。KMIP 协议本身也支持创建与管理密钥PyKMIP 自带 Python 客户端库可以按如下方式使用。首先准备好 Ceph 将要使用的 KMIP 客户端证书与私钥即上一节为 Ceph 创建的那份证书。然后创建虚拟环境并安装pykmipvirtualenv $HOME/my-kmip-env source $HOME/my-kmip-env/bin/activate pip install pykmip接着为 pykmip 客户端准备一个配置文件默认端口为 5696即 KMIP 标准端口cat EOF $HOME/my-kmip-configuration [client] host{hostname} port5696 certfile{clientcert} keyfile{clientkey} ca_certs{clientca} ssl_versionPROTOCOL_TLSv1_2 EOF需要把{hostname}替换为 KMIP 主机名把{clientcert}、{clientkey}、{clientca}替换为 PEM 编码证书与密钥的路径——可以直接使用为 Ceph 创建的那份证书。随后在 shell 中直接运行下面的 Python 脚本它会从标准输入逐行读取密钥名为每个名字创建一个 256 位 AES 密钥并激活python from kmip.pie import client from kmip import enums import ssl import os import sys import json c client.ProxyKmipClient(config_fileos.environ[HOME]/my-kmip-configuration) while True: lsys.stdin.readline() keynamel.strip() if keyname : break with c: key_id c.create( enums.CryptographicAlgorithm.AES, 256, operation_policy_namedefault, namekeyname, cryptographic_usage_mask[ enums.CryptographicUsageMask.ENCRYPT, enums.CryptographicUsageMask.DECRYPT ] ) c.activate(key_id) attrs c.get_attributes(uidkey_id) r {} for a in attrs[1]: r[str(a.attribute_name)] str(a.attribute_value) print (json.dumps(r))若直接在 shell 交互提示符下粘贴Python 会先显示、...提示符等脚本读取完毕后开始处理每行输入的名称无提示符直到输入空行或 EOF^D为止遇到错误也会终止。你也可以把它改写成常规 Python 脚本文件来执行。注意脚本中创建的密钥用途掩码cryptographic usage mask同时包含ENCRYPT与DECRYPT这正是 RGW 加解密对象所必需的权限。配置 Ceph 对象网关编辑 Ceph 配置文件即 配置指南 中的ceph.conf启用 KMIP 作为服务端加密的 KMS 后端rgw crypt s3 kms backend kmip rgw crypt kmip ca path /etc/ceph/kmiproot.crt rgw crypt kmip client cert /etc/ceph/kmip-client.crt rgw crypt kmip client key /etc/ceph/private/kmip-client.key rgw crypt kmip kms key template pykmip-$keyid上面的证书路径需要根据你实际存放 KMIP 证书数据的位置调整。在 rgw.yaml.in 中KMIP 相关的全部配置项及其默认行为如下配置项说明rgw_crypt_s3_kms_backendSSE-KMS 密钥存储后端枚举值barbican默认、vault、testing、kmip设为kmip即启用本指南所述功能rgw_crypt_kmip_addrKMIP 服务器地址host:port。从源码 rgw_kmip_client_impl.cc 可以看到RGW 会解析地址中的端口未指定端口时默认使用5696rgw_crypt_kmip_ca_path用于校验 KMIP 服务器的 CA 证书路径rgw_crypt_kmip_username/rgw_crypt_kmip_password使用用户名/密码认证时的凭据与证书认证二选一rgw_crypt_kmip_client_cert/rgw_crypt_kmip_client_key使用客户端证书认证时的证书与私钥路径rgw_crypt_kmip_kms_key_templateSSE-KMS 模式下 KMIP 密钥名的模板$keyid会被替换为请求中的 key IDrgw_crypt_kmip_s3_key_templateSSE-S3 模式下 KMIP 密钥模板默认值为$keyidrgw_crypt_s3_kms_cache_enabled是否缓存 SSE-KMS 加密密钥默认true相关缓存参数还包括rgw_crypt_s3_kms_cache_max_size默认 128 个每个 AES-256 密钥约 32 字节加开销、rgw_crypt_s3_kms_cache_positive_ttl成功查询缓存 60 秒范围 10~3600、rgw_crypt_s3_kms_cache_transient_error_ttl瞬时错误缓存 10 秒、rgw_crypt_s3_kms_cache_negative_ttl永久性错误如密钥不存在缓存 120 秒rgw_crypt_suppress_logs抑制可能打印客户端密钥的日志默认true对密钥安全有实际意义密钥名模板key template的语义KMIP 密钥模板描述的是RGW 在向 KMIP 查询密钥前如何改写用户提供的 key ID。默认值就是$keyid。如果不希望 RGW 看到 KMIP 中全部密钥可以借此把 RGW 限制在 KMIP 密钥命名空间的指定子集内。这一逻辑在源码中对应 rgw_kms.cc 的KmipGetTheKey::keyid_to_keyname()它读取rgw_crypt_kmip_kms_key_template将字符串中的$keyid全部替换为请求携带的 key ID模板为空时直接使用 key ID。后续的get_uniqueid_for_keyname()通过 KMIPLOCATE操作按名称查找唯一 ID若查不到返回-ENOENT查到多个则返回-EINVALget_key_for_uniqueid()再通过 KMIPGET操作按唯一 ID 取回密钥字节。整个过程封装在 rgw_kmip_client.h 定义的RGWKMIPTransceiver中它支持的操作包括CREATE、LOCATE、GET、GET_ATTRIBUTES、GET_ATTRIBUTE_LIST、DESTROY——后两者为未来的管理能力预留RGW 当前取密钥主要走LOCATEGET。客户端连接层在 rgw_kmip_client_impl.cc 中实现协议版本固定为 KMIP 1.0通过 OpenSSL 建立 TLS 连接BIO_set_conn_hostname/BIO_set_conn_port并支持两种认证方式——客户端证书client cert/key与用户名/密码凭据UsernamePasswordCredential。上传加密对象配置完成后向 Ceph 对象网关上传对象时在请求中携带 SSE 的 key ID 即可。以 AWS 命令行客户端为例aws --endpointhttp://radosgw:8000 s3 cp plaintext.txt \ s3://mybucket/encrypted.txt --sseaws:kms --sse-kms-key-id mybucketkeyRGW 会从 KMIP 获取密钥、加密对象并存入 bucket任何下载对象的请求都会使 RGW 自动从 KMIP 取回对应密钥并解密对象。需要注意的是RGW 会用“密钥模板替换$keyid”构造出来的名称去 KMIP 中取密钥。以上面的 Ceph 配置为例--sse-kms-key-id mybucketkey对应的 KMIP 密钥名即为pykmip-mybucketkey因此在“在 KMIP 中创建密钥”一节中通过 pykmip 脚本创建的密钥名应与此模板规则保持一致例如创建名为pykmip-mybucketkey的密钥否则LOCATE将查不到密钥上传/下载会报错。小结与故障排查提示KMIP 集成让 Ceph 对象网关可以把对象加密密钥托管在符合 KMIP 标准的密钥管理系统中适合已有 KMIP 基础设施、希望统一密钥治理的场景。落地时请重点核对以下几点rgw_crypt_s3_kms_backend kmip是否生效这是后端分派 rgw_kms.cc 的入口判断rgw_crypt_kmip_addr是否可达未写端口时默认 5696客户端证书与 CA 是否被 KMIP 服务端信任SKLM 需完成 untrusted→registered 升级PyKMIP 需 CA 信任且注意 extended key usage 或关闭enable_tls_client_auth密钥名的模板替换结果pykmip-keyid与 KMIP 中实际创建的密钥名是否一致密钥的用途掩码需同时包含ENCRYPT与DECRYPT且密钥处于激活activate状态。以上配置均可在运行中通过ceph config set或写入ceph.conf完成涉及密钥与证书的配置项如rgw_crypt_kmip_client_key、密码建议以仅 RGW 进程可读的权限存放并保持rgw_crypt_suppress_logs默认开启以避免密钥泄露到日志。赞分享存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载相关推荐如何扩展Money Ruby库自定义货币加载器和启发式算法完整指南如何扩展Money Ruby库自定义货币加载器和启发式算法完整指南 Money Ruby库是一个强大的Ruby工具用于处理货币和货币转换。本文将详细介绍如何存储分布式文件系统对象存储后端高可用Serial Studio 开源版和Pro怎么选Serial Studio 开源版和Pro怎么选 你接了一块 Arduino 开发板想把它打印的温度值画成实时曲线。Serial Studio 是个跨平台遥测桌面应用数据可视化物联网mflux深度拆解从语义理解到像素生成的全链路技术揭秘mflux深度拆解从语义理解到像素生成的全链路技术揭秘 在AI图像生成领域mflux作为基于MLX框架的FLUX移植项目展现了一套完整而精妙的技术架构。与上一篇ClickHouse-Grafana插件数据可视化进阶世界地图、直方图、饼图等高级图表制作教程下一篇终极iOS开发实战指南从入门到精通的完整学习路径创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

3个细节搞定凯旋而归性能优化面试通关
3个细节搞定凯旋而归性能优化面试通关

3个细节搞定凯旋而归性能优化面试通关 看了一堆教程还是不会写项目?别慌,这不是你笨,是没人教你怎么把“凯旋而归”这种抽象概念落地成代码。很多同学在面试中被问到凯旋而归时,脑子里只有“成功了”三个字,面试官却盯着你的 性能优化 方案。… · 2026/9/23 20:24:48

Agent Substrate 分布式追踪实践指南:基于 OpenTelemetry 的 Span 生成、采样策略与端到端链路实现
Agent Substrate 分布式追踪实践指南:基于 OpenTelemetry 的 Span 生成、采样策略与端到端链路实现

人工智能AI AgentAgent 沙箱云原生容器运行时零信任 【免费下载链接】substrate Agent Substrate: the core system 项目地址: https://gitcode.com/GitHub_Trending/substrate7/substrate 点击查看 免费下载 本指南聚焦 Agent Substrate(substrate&… · 2026/9/23 20:24:48

SSM化妆品配方工艺管理系统实战:强事务+非标字段+国产数据库适配
SSM化妆品配方工艺管理系统实战:强事务+非标字段+国产数据库适配

简介:本资源是一套面向计算机专业本科生与毕业设计学习者的高分SSM框架实战项目,聚焦化妆品配方及工艺管理系统的全流程开发实践。项目完整覆盖需求分析、数据库设计、前后端功能实现与论文撰写,特别适合Java Web技术栈入门到进阶的学习者用于… · 2026/9/23 20:24:34

opencodex 修复 Cursor 工具通道:用 AgentRunRequest.mcp_tools 让注入工具真正可调用
opencodex 修复 Cursor 工具通道:用 AgentRunRequest.mcp_tools 让注入工具真正可调用

【免费下载链接】opencodex Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code 项目地址: https://gitcode.com/gh_mirrors/ope/opencodex 点击… · 2026/9/23 21:09:59

XP关机变重启?从ACPI和BIOS排查断电与唤醒问题
XP关机变重启?从ACPI和BIOS排查断电与唤醒问题

简介:电脑XP系统关机异常,表现为无法正常关机或关机后自动重启,是一类常见且令人困扰的故障。这份小型PDF资料面向使用Windows XP的老用户、电脑维护人员和网络管理员,系统梳理了造成该问题的典型原因,包括退出声音文件… · 2026/9/23 21:09:52

Windows蓝牙音质提升指南:用Alternative A2DP Driver解锁LDAC与aptX HD
Windows蓝牙音质提升指南:用Alternative A2DP Driver解锁LDAC与aptX HD

1. 为什么要在Windows上折腾LDAC这件事先说结论:Windows系统自带的蓝牙音频栈,对高音质编解码器的支持一直是个短板。你花大几百甚至上千块买的支持LDAC的耳机,插到Windows电脑上,大概率只能跑SBC或者AAC,音质直接打回… · 2026/9/23 21:09:52

Semver 语义化版本速查指南:版本号、范围表达式与 npm 工程实践
Semver 语义化版本速查指南:版本号、范围表达式与 npm 工程实践

Semver 语义化版本速查指南:版本号、范围表达式与 npm 工程实践 【免费下载链接】reference 为开发人员分享快速参考备忘清单(速查表) 项目地址: https://gitcode.com/jaywcjlove/reference Semantic Versioning(语义化版本,简称 Semv… · 2026/9/23 21:09:52

网络运维述职报告怎么写:数据准备与五段式结构全解析
网络运维述职报告怎么写:数据准备与五段式结构全解析

简介:网络运维部优秀述职报告范文.docx 是一份可直接编辑套用的 Word 述职报告模板,适合网络运维工程师、部门主管及行政人事人员参考,用于快速撰写结构完整、数据量化的年度或半年度述职材料。文档以真实岗位职责为蓝本,围绕交换… · 2026/9/23 21:09:52

rmax特征提取:零中心归一化瞬时幅度谱密度最大值实战指南
rmax特征提取:零中心归一化瞬时幅度谱密度最大值实战指南

简介:这份资源围绕「零中心归一化瞬时幅度谱密度最大值」这一通信信号关键指标,面向通信工程、信号处理方向的学习者与研究人员,帮助理解并计算2ASK、2FSK、2PSK与MSK四种数字调制方式下的幅度谱密度特性。压缩包共6个文件,全部为… · 2026/9/23 21:09:39

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码