共享 VIM 用于策略动作执行

https://blueprints.launchpad.net/tacker/+spec/shared-barbican-secret

本文档描述了实现共享 VIM 用于策略动作执行的计划。

问题描述

在当前实现 [1] 中,已注册 VIM 的密码由 fernet 加密,fernet 密钥保存在 barbican 中作为 secret。由于 barbican 的默认策略,只有创建 secret 的用户才能获取 secret,这导致已注册的 VIM 无法被其他租户共享。

因此,如果我们想通过 tacker api 以外的方式执行 VNF LCM 操作,例如策略动作执行,我们将没有 keystone token 来访问 barbican secret。

BP [2] 想要使用 mistral 来进行 VNF 监控和执行策略动作,这依赖于本规范的实现。

提议的变更

有三种方法可以解决这个问题。我们将使用第一种方法。

  • 将 fernet 密钥保存在一个特定的租户中,例如 tacker 服务租户。这种方法将导致所有 VIM 都可以被其他租户调用。

    主要实现如下
    • 注册 VIM

      我们使用 fernet 加密 VIM 密码,然后使用 tacker.conf 中配置的 tacker 服务租户将 fernet 密钥保存到 barbican 中作为 secret。barbican 将返回 secret_uuid。然后将加密后的密码保存到 VIM 数据库的 password 字段中,并将 secret uuid 保存到 VIM 数据库字段 secret_uuid 中。

    • 检索 VIM

      我们使用 tacker.conf 中配置的 tacker 服务租户和 secret_uuid 从 barbican 获取 fernet 密钥,并使用 fernet 解码 password

    • 删除 VIM

      我们使用 tacker.conf 中配置的 tacker 服务租户通过 VIM 数据库中的 secret_uuid 从 barbican 删除 secret。

  • 我们将 tacker 服务租户添加到 barbican 中所有 fernet_key 的 ACL 中。只有服务租户才能调用所有 VIM。策略动作将使用此服务租户。这种方法需要修改其他项目。因此不推荐。

  • 在创建带有监控策略的 VNF 时,我们保存上下文信息(由于其具有过期时间,因此没有 token)。然后策略动作使用这些信息访问 barbican。最初,fernet 密钥是基于 VIM 的。如果更改为这样,它将位于 VNF 中,因此它将存储大量 secret 信息。因此不推荐。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

此功能需要具有“admin”角色的“tacker”用户。在使用 devstack 创建“tacker”用户时,我们需要将“admin”角色添加到“tacker”用户。

开发人员影响

实现

负责人

主要负责人

李佳乐 <lijiale@cmss.chinamobile.com>

其他贡献者

闫兴安 <yanxingan@cmss.chinamobile.com

工作项

  • 单元测试

  • 功能测试

  • 功能文档位于 doc/source/devref/feature

依赖项

测试

文档影响

  • 使用新步骤更新 doc/source/contributor/encrypt_vim_auth_with_barbican.rst。

参考资料