代码设计文档 ============================================================================== Lakeformation 的 Data Access Model 是遵循: Principal, Resource, Permission 铁三角模型的. 一个 Access Policy 的本质就是, 谁 (Principal), 可以对 什么 (Resource) 做些什么 (Permission). 而对于 Lakeformation 所有的权限定义以及部署, 本质上就是管理这三者的关系. Lakeformation 服务本身不负责 创建, 管理, 删除 Principal 和 Resource. Principal 主要是 IAM, 由 IAM 服务管理. Resource 主要是 Data Catalog, 由 Glue Data Catalog 管理. 而 LakeFormation 主要负责的是定义 LF Tag, 以及 Tag 和 Principal / Resource 之间的绑定关系. 在我们的 Python 实现中, 会有很多类. 对于每个 LakeFormation 中的原生抽象概念, 我们都会定义一个类. 而对于一个最小的部署单位, 我们将其定义为一个 ``Playbook``. 一个 ``Playbook`` 的管理范围包括 ``LfTag``, ``LfTag / Principal / Permission binding``, ``LfTag / Resource binding``. 也就是说一个 ``Playbook`` 中会有很多属性, 通常是 ``LfTag`` 等对象的 collection 数据结构. 每次部署时候将这些被定义的数据结构用 CRUD API 进行 创建, 更新, 删除. 并把当前的 ``Playbook`` 序列化成 JSON 保存. 以后每次有新的部署, 都会和上一次的 Playbook 进行比较, 找到差异部分, 并对其进行更新即可.