移除租户-密钥关联表¶
https://blueprints.launchpad.net/barbican/+spec/data-remove-tenant-secret-assoc
目前 Barbican 中存储的所有密钥都通过租户-密钥关联表间接关联到 Keystone “项目”(以前称为“租户”)。这种关联是在 Barbican 生命周期的早期添加的,当时认为这种关联将有助于检索具有不同 RBAC 行为的分组密钥的不同组件。然而,最近与 OpenStack 项目的讨论表明,该功能可以通过其他方式更好地实现。因此,这种关联在选择查询中增加了额外的连接,没有任何好处,因此应该删除。
问题描述¶
Barbican 中的密钥通过租户密钥关联表间接关联到 Keystone “项目”。这种关联当前未用于 Barbican 中的任何功能,但设想允许多个“项目”以不同的访问权限访问相同的密钥。团队随后与希望与 Barbican 集成的 OpenStack 项目进行了多次讨论,并且可以通过 Keystone Trusts 实现访问控制,或者通过基于密钥级别配置的元数据的“用户”和“项目”级别策略来实现(参见蓝图 [1])。
因此,租户密钥关联对于任何设想的 Barbican 用例都不需要,因此代表了所有密钥相关查询的浪费连接。
提议的变更¶
此蓝图建议删除未使用的租户密钥关联。
备选方案¶
无
数据模型影响¶
将删除租户密钥表,以及相关的 SQLAlchemy 模型和仓库查询。这种模式修改需要一个非平凡的迁移来实现零停机时间,如下面的“工作项目”部分所述。
REST API 影响¶
无
安全影响¶
无
通知与审计影响¶
无
其他最终用户影响¶
无
性能影响¶
删除租户密钥关联可以删除密钥相关查询中的一个连接,并删除创建 SQLAlchemy 租户密钥模型所需的 Python 代码。因此,应该提高性能和代码可读性。
其他部署者影响¶
需要在已经存在的部署上运行迁移脚本。否则不会有其他影响。
开发人员影响¶
无
实现¶
负责人
- 主要负责人
john-wood-w
工作项¶
需要分阶段进行模式修改,以避免破坏使用当前租户密钥关联存储密钥的现有部署。
第一阶段将在密钥实体中添加新的、最初可为空的“tenant_id”外键关系,所有新添加的密钥都将设置此外键,并继续添加租户密钥关系(直到旧版本被淘汰)。密钥检索将首先尝试通过外键进行简单的查询,并在出错时回退到当前的租户密钥连接。需要进行以下修改::* models.py:在 Tenant 模型类中添加一个“secrets_assoc”关系到 secrets 模型,类似于“Container”关系。在 Secret 模型中,添加一个类似于 Container 模型“tenant_id”外键关系的“tenant_id”外键引用,但设置为 nullable=True。* repositories.py:在 SecretRepo 仓库类中添加一个不使用租户密钥连接的查询,但在出错时回退到现有的租户密钥连接查询。* plugin/resources.py:将设置新的“tenant_id”外键添加到 secrets 到“_save_secret()”函数。* store_crypto.py:将设置新的“tenant_id”外键添加到 secrets 到“_store_secret_and_datum()”函数。
第二阶段将提供一个 Alembic 迁移脚本,为所有尚未设置“tenant_id”外键的密钥设置“tenant_id”外键。然后,“tenant_id”外键将被设置为 nullable=False。
第三阶段将删除与租户密钥关系相关的所有逻辑。需要进行以下修改::* models.py:删除 TenantSecret SQLAlchemy 模型类。* repositories.py:从 SecretRepo 仓库类中的查询中删除 TenantSecret 连接。删除 ProjectSecretRepo 仓库类。从 Repositories 类中删除“ProjectSecretRepo”。删除“get_project_secret_repository”函数。* plugin/resources.py:从“_save_secret()”函数中删除“new_assoc”行。* store_crypto.py:从“_store_secret_and_datum()”函数中删除“new_assoc”行。* api/test_resources.py:从“_test_should_add_new_secret_metadata_without_payload”测试方法中删除“project_secret_repo”行。* test_repositories.py:删除所有“TenantSecret”相关行。* test_store_crypto.py:删除所有“project_secret_repo”行。
第四阶段将提供一个 Alembic 迁移脚本,从所有密钥中删除租户密钥关系,然后完全删除租户密钥表。
依赖项¶
无
测试¶
当前的单元测试也将被修改以反映此更改。至少需要手动对不同阶段的迁移进行测试。
文档影响¶
无
参考资料¶
无