添加 KMIP 密钥管理器包装器

https://blueprints.launchpad.net/castellan/+spec/kmip-key-manager

KMIP[1] 设备是密钥管理器,并且由于 Castellan 是一个密钥管理器接口,因此有人希望 Castellan 直接连接到 KMIP 设备,而不是通过后端连接 KMIP 设备的 Barbican。此蓝图提供了一种使用 Castellan 直接与 KMIP 设备通信的解决方案。

问题描述

目前,要使用 Castellan 与 KMIP 设备通信,Castellan 必须首先与连接了后端 KMIP 设备的 Barbican 通信。通过创建 KMIP 密钥管理器接口,Castellan 可以直接与 KMIP 设备交互。

这还具有以下好处:允许客户端决定是否需要将 Barbican 放置在其 KMIP 设备前面。无论他们拥有自己的设备还是从云提供商处购买设备,他们可能不需要 Barbican 的所有功能或资源,而只想直接连接到 KMIP 设备。

这将允许私有或专用云在无需 Barbican 的情况下使用 Castellan。

需要记住的重要一点是,KMIP 设备不保证多租户功能。一些设备提供创建单独用户的功能,从而根据唯一用户帐户分隔密钥。但是,并非所有设备都支持此功能。此外,KMIP 设备目前不支持使用 keystone 作为身份验证方式。以下部分详细介绍了未来的更改以及对多租户和 keystone 身份验证的可能支持。

提议的变更

将创建一个名为 kmip_key_manager 的模块。该模块将位于现有的密钥管理器接口所在的位置,并可用于直接与 KMIP 设备交互。

为了使 KMIP 密钥管理器能够接收上下文对象,需要创建两种新的凭据类型。一种是 Certificate(证书),它将仅接收证书的位置,另一种是 KMIP,它将是 Certificate 的扩展。KMIP 凭据对象将接收建立与 KMIP 设备连接所需的所有必要值,包括证书。

KMIP 凭据对象使用的值将与 Barbican 用于建立与 KMIP 设备连接的变量相同,并且可以通过 castellan.conf 文件或通过 Castellan 本身进行修改。这将使支持单独用户帐户的 KMIP 设备能够提供一些多租户功能。

当 KMIP 设备开始支持 keystone 令牌时,KMIP 密钥管理器类可以更新为接收 KMIP 凭据对象或 keystone 令牌凭据对象作为上下文。这将允许我们今天在 Barbican 中看到的所有多租户功能。

以下是将在 castellan.conf 文件中添加的新值的示例

[kmip]

#
# From castellan.config
#

# Username for user authorized to access KMIP device  (string value)
#username = admin

# Password for KMIP authenticated user (string value)
#password = password

# Use this endpoint to connect to the KMIP device (string value)
#host = localhost

# Port that KMIP device is listening on (string value)
#port = 5696

# Keyfile used by castellan (string value)
#keyfile = '/path/to/certs/cert.key'

# Certificate used by castellan to talk to KMIP device (string value)
#certfile = '/path/to/certs/cert.crt'

# List of certificates and CA's that castellan willaccept (string value)
#ca_certs = '/path/to/certs/LocalCA.crt'

这些值可以驻留在 castellan.conf 文件中,也可以添加到现有的配置文件中。Castellan 只需要获得读取文件的位置即可。

其余代码将与 Barbican 中的 KMIP 密钥存储代码非常相似。[2]

备选方案

数据模型影响

REST API 影响

安全影响

KMIP 设备不保证多租户功能。这意味着用户应该意识到,当 Castellan 是 KMIP 设备的接口时,任何具有 KMIP 凭据访问权限的用户都可能与该设备通信。由于 keystone 目前不能用作身份验证形式,因此无法根据用户的角色或项目进行区分。这需要在文档中进行详细说明。

通知与审计影响

所有对设备的 CRUD 请求都需要进行记录。建立和结束连接也应进行记录,以确保连接成功且已成功终止。

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

silos (Christopher Solis)

工作项

  1. 创建 Certificate 和 KMIP 凭据对象

  2. 创建 KMIP 密钥管理器

  3. 将 KMIP 部分添加到示例 Castellan 配置文件

  4. 对密钥管理器包装器和凭据对象进行单元和功能测试

  5. 文档

依赖项

测试

需要添加新的单元测试和功能测试。

文档影响

应更新 Castellan 文档以反映新后端的添加。

参考资料

[1] https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=kmip

[2] https://github.com/openstack/barbican/blob/master/barbican/plugin/kmip_secret_store.py