支持用于身份验证凭据的外部密钥管理器¶
本规范描述了 Tacker 中使用外部密钥管理器服务(例如 OpenStack Key Manager (barbican) [1])对身份验证凭据进行加密和解密的方法。
问题描述¶
Tacker 将一些身份验证凭据存储在 Tacker DB 中。但是,在 Tacker 的实际 NFV 操作中,这些信息应该加密,以实现安全的 NFV 管理和安全要求,防止攻击者窃听和数据利用。
以下是 VnfInstanceV2.vimConnectionInfo (Kubernetes) 的一个示例:身份验证凭据是密码、bearer_token 和 client_secret。
{
"vim1": {
"vimType": "ETSINFV.KUBERNETES.V_1",
"accessInfo": {
"username": "nfv_user",
"password": "password",
"bearer_token": "bearer_token",
"client_secret": "client_secret"
},
"interfaceInfo": {
"endpoint":"http://123.124.64.6:8443",
"ssl_ca_cert": "ssl_ca_cert"
}
}
}
本规范提出使用“cryptography”库和外部密钥管理服务来管理凭据和密钥,从而实现通用的密钥方案进行加密和解密。
提议的变更¶
将提出以下更改
添加与外部密钥管理器集成的实用函数。
添加使用 v2API 和 OpenStack Key Manager 的示例实现。
添加配置选项。
添加与外部密钥管理器集成的实用函数¶
由于 Tacker 在多个 DB 表中存储敏感凭据,因此本规范将实现通用的实用函数,以便与外部密钥管理器配合使用,对凭据进行加密和解密,这对于 v1 和 v2 API 都是必需的。
需要加密的身份验证凭据示例¶
以下是 Tacker 中需要加密的身份验证凭据示例列表。
VimConnectionInfo 中的 accessInfo:密码、bearer_token 和 client_secret
authentication 中的 paramsBasic 和 paramsOauth2ClientCredentials:密码和 clientPassword
Prometheus Plugin 中的 metadata.targetsInfo.authInfo:ssh_password
注意
此函数也将通用地用于其他敏感信息。
我们将分析并在实现过程中发现新的目标时添加更详细的目标数据。
通用实用函数包括三个主要角色
与外部密钥管理器配合管理加密密钥。它能够注册和删除加密密钥。
使用加密密钥加密身份验证凭据,并将其存储到 Tacker DB。
通过解密密钥解密存储在 Tacker DB 中的身份验证凭据,并在 VNF 操作中使用它们。
用户可以在不知情的情况下执行 VNF 操作。另一方面,身份验证凭据在 tacker DB 中被加密,从而降低了被窃听或数据被利用的可能性。
创建两种类型的加密密钥:主密钥和表密钥。表密钥用于加密身份验证信息,主密钥用于加密表密钥。在将身份验证信息保存到 DB 时创建表密钥,在启动 Tacker 时创建主密钥。表密钥和主密钥存储在一个新表中,该表用于存储加密密钥。
添加使用 v2API 和 Barbican 的示例实现¶
在本规范中,它实现了在 v2 API 中与 barbican [1] 集成以加密和解密身份验证凭据的示例用例。
VNF LCM 中建议的序列示例¶
以下是在 VNF LCM 操作中考虑的身份验证凭据加密和解密的序列示例。
以下是在考虑使用 barbican 的 VNF 实例实例化流程。
以下是使用 barbican 的 VNF 实例终止流程。
添加配置选项¶
由于本规范中定义的函数更改了默认序列,因此建议将配置选项添加到 tacker.conf 文件中。因此,用户可以选择是否启用此功能。
“use_credential_encryption”的布尔值。此参数确定是否使用加密。
默认值:“false”
“keymanager_type”的字符串值。此参数确定外部密钥管理服务的类型。
默认值:“barbican”
“crypt_key_dir”的字符串值。此参数指定存储加密密钥的路径。
默认值:“”
注意
barbican 将在 Tacker Bobcat 周期中得到支持。如果将来支持其他外部密钥管理服务,则此参数允许更改目标服务。
作为建议的实现,当 use_credential_encryption 为 True 时,身份验证凭据的加密和解密功能生效;当 use_credential_encryption 为 False 时,此功能将不会执行。
备选方案¶
无
数据模型影响¶
外部密钥管理器的密钥相关信息(例如,密钥类型、密钥 ID)需要添加到数据模型中。
属性名称 |
数据类型 |
参数描述 |
|---|---|---|
id |
字符串 |
密钥信息 ID(主键) |
secret_uuid |
字符串 |
在 barbican 中注册的主密钥的 UUID |
encrypted_key |
字符串 |
tacker 的表密钥 |
key_type |
字符串 |
如何保留主密钥。本地或 barbican |
in_use |
布尔值 |
标志,表示是否使用了最新的密钥 |
REST API 影响¶
无
安全影响¶
如果应用此更改,Tacker DB 中的身份验证凭据将使用加密密钥加密,因此必须通过外部密钥管理器保护加密密钥。也允许将加密密钥存储在本地,但在生产环境中不建议这样做。
此外,需要备份加密密钥,以便用户可以在发生故障或灾难恢复时解密凭据。以下是使用 barbican [1] 作为外部密钥管理器时的密钥备份示例。
Barbican 的密钥备份方法¶
根据后端类型,备份和恢复加密密钥的过程会有所不同。对于简单的 crypto 后端,需要备份两个单独的组件:密钥加密密钥 (KEK) 和数据库。
备份和恢复 KEK。
对于简单的 crypto 后端,要备份包含主加密密钥的 barbican.conf 文件;KEK 被写入。此文件必须备份到安全加固的位置。实际数据存储在 Barbican 数据库中。
要从备份恢复密钥,需要将恢复的 barbican.conf 覆盖现有的 barbican.conf。
备份和恢复 barbican 数据库。
在登录到 controller-0 节点时运行以下步骤。
检索 barbican 用户密码
备份 barbican 数据库
数据库备份存储在
/home/heat-admin中恢复数据库
注意
只有 barbican 用户才能访问 barbican 数据库。因此,备份或恢复数据库需要 barbican 用户密码。
有关更多信息,请参阅 OpenStack Key Manager 备份文档 [2]。
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
Tacker 需要访问外部密钥管理器服务才能对身份验证凭据进行加密和解密。如果每次调用 Rest API 时使用加密的身份验证凭据的案例很少,则性能影响可能为 LOW。
但是,如果需要访问外部密钥管理器来处理 DB 表中的每个数据,则影响可能为 HIGH。
需要仔细决定实施策略。
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
Kenta Fukaya <kenta.fukaya@ntt.com>
Yuta Kazato <yuta.kazato@ntt.com>
- 其他贡献者
新見雄介 <niimi.yusuke@fujitsu.com>
Yoshiyuki Katada <katada.yoshiyuk@fujitsu.com>
Ayumu Ueha <ueha.ayumu@fujitsu.com>
工作项¶
实现 Tacker 以支持
添加与外部密钥管理器集成的实用函数
添加使用 v2API 和 OpenStack Key Manager 的示例实现
添加配置选项。
添加新的单元和功能测试。
编写 Tacker 文档,以说明如何使用本规范中描述的功能。
依赖项¶
测试¶
将添加单元和功能测试,以涵盖本规范所需的案例。
文档影响¶
将通过此功能向 Tacker 用户指南添加如何使用外部密钥管理服务。