访问控制
基于角色的访问控制
本节介绍 Apache Polaris 的访问控制工作原理。
Polaris 使用基于角色的访问控制(RBAC)模型,由 Polaris 管理员将访问权限授予目录角色,然后通过将目录角色分配给主体角色,向主体授予对资源的访问权限。
ℹ️ 信息
对于需要外部策略管理或与现有策略基础设施集成的高级授权场景,Polaris 支持与外部策略决策点(PDP)集成,例如 Open Policy Agent(OPA)。有关更多信息,请参阅外部策略决策点。
以下是理解 Polaris 访问控制的关键概念:
- 可保护对象
- 主体角色
- 目录角色
- 权限
可保护对象
可保护对象是指可以被授予访问权限的对象。Polaris 包含以下可保护对象:
- 目录(Catalog)
- 命名空间
- Iceberg 表
- 视图
- 策略
主体角色
主体角色是 Polaris 中的一种资源,可用于将 Polaris 主体在逻辑上分组,并授予对可保护对象的权限。
Polaris 支持主体与主体角色之间的多对多关系。例如,要将相同的权限授予多个主体,可以将单个主体角色分配给这些主体。同样,一个主体也可以被授予多个主体角色。
你不会直接向主体角色授予权限。相反,你在目录角色级别配置对象权限,然后再将目录角色授予主体角色。
下表展示了你可能会在 Polaris 中配置的主体角色示例:
| 主体角色名称 | 描述 |
|---|---|
| Data_engineer | 授予多个主体以运行数据工程作业的角色。 |
| Data_scientist | 授予多个主体以运行数据科学或 AI 作业的角色。 |
目录角色
目录角色隶属于 Polaris 中的特定目录资源,用于指定对目录或目录内对象(如目录的命名空间或表)执行操作的一组权限。你可以为一个目录创建一个或多个目录角色。
你先向目录角色授予权限,然后将该目录角色授予主体角色,从而将权限赋予一个或多个主体。
Polaris 同样支持目录角色与主体角色之间的多对多关系。你可以将同一个目录角色授予一个或多个主体角色。同样,一个主体角色也可以被授予一个或多个目录角色。
下表展示了你可能会在 Polaris 中配置的目录角色示例:
示例目录角色描述
目录管理员
一个被授予了多项权限、从而拥有对目录完全访问权限的角色。
被授予此角色的主体角色可以在该目录中创建、修改、读取、写入和删除表。
目录读取者
一个被授予了对目录中表的只读权限的角色。
被授予此角色的主体角色可以在该目录中读取表。
目录贡献者
一个被授予了对属于该目录的所有表的读写访问权限的角色。
被授予此角色的主体角色可以在该目录中对表执行读写操作。
RBAC 模型
下图展示了 Polaris 所使用的 RBAC 模型。对于每个目录,Polaris 管理员将访问权限授予目录角色,然后通过将目录角色分配给主体角色来授予主体对资源的访问权限。Polaris 支持主体与主体角色之间的多对多关系。
访问控制权限
本节介绍 Polaris 访问控制模型中可用的权限。权限被授予目录角色,目录角色被授予主体角色,主体角色再被授予主体,以此指定主体可以对 Polaris 中的对象执行哪些操作。
若要授予某个对象的全部权限(删除、列出、读取、写入等),可以使用完整权限选项。
表权限
| 权限 | 说明 |
|---|---|
| TABLE_CREATE | 允许在目录中注册表。 |
| TABLE_DROP | 允许从目录中删除表。 |
| TABLE_LIST | 允许列出目录中的任意表。 |
| TABLE_READ_PROPERTIES | 允许读取表的属性。 |
| TABLE_WRITE_PROPERTIES | 允许配置表的属性。 |
| TABLE_READ_DATA | 允许通过从目录获取短期只读存储凭据来读取表中的数据。 |
| TABLE_WRITE_DATA | 允许通过从目录获取短期读写存储凭据来写入表中的数据。 |
| TABLE_FULL_METADATA | 授予除 TABLE_READ_DATA 和 TABLE_WRITE_DATA 之外的所有表权限,这两个权限需要单独授予。 |
| TABLE_ATTACH_POLICY | 允许为表附加策略。 |
| TABLE_DETACH_POLICY | 允许从表上分离策略。 |
视图权限
| 权限 | 说明 |
|---|---|
| VIEW_CREATE | 允许在目录中注册视图。 |
| VIEW_DROP | 允许从目录中删除视图。 |
| VIEW_LIST | 允许列出目录中的任意视图。 |
| VIEW_READ_PROPERTIES | 允许读取视图的所有属性。 |
| VIEW_WRITE_PROPERTIES | 允许配置视图的属性。 |
| VIEW_FULL_METADATA | 授予所有视图权限。 |
⚠️ 警告
表属性和视图属性属于可读取的元数据。拥有 TABLE_READ_PROPERTIES / TABLE_FULL_METADATA 或 VIEW_READ_PROPERTIES / VIEW_FULL_METADATA 的主体可以读取它们。请勿在表属性或视图属性中存储密码、令牌、访问密钥或其他机密信息。
命名空间权限
| 权限 | 描述 |
|---|---|
| NAMESPACE_CREATE | 允许在目录(catalog)中创建命名空间。 |
| NAMESPACE_DROP | 允许从目录中删除该命名空间。 |
| NAMESPACE_LIST | 允许列出命名空间中的任何对象,包括嵌套的命名空间和表。 |
| NAMESPACE_READ_PROPERTIES | 允许读取所有命名空间属性。 |
| NAMESPACE_WRITE_PROPERTIES | 允许配置命名空间属性。 |
| NAMESPACE_FULL_METADATA | 授予所有命名空间权限。 |
| NAMESPACE_ATTACH_POLICY | 允许将策略附加到命名空间。 |
| NAMESPACE_DETACH_POLICY | 允许从命名空间解除策略。 |
目录权限
权限描述
CATALOG_MANAGE_ACCESS包含向目录角色授予或撤销目录中对象权限的能力,以及向主体角色授予或撤销目录角色的能力。
CATALOG_MANAGE_CONTENT允许对目录的内容进行完整管理。该权限涵盖以下权限:
- CATALOG_MANAGE_METADATA
- TABLE_FULL_METADATA
- NAMESPACE_FULL_METADATA
- VIEW_FULL_METADATA
- TABLE_WRITE_DATA
- TABLE_READ_DATA
- CATALOG_READ_PROPERTIES
- CATALOG_WRITE_PROPERTIES
CATALOG_MANAGE_METADATA允许对目录、目录角色、命名空间和表进行完整管理。
CATALOG_READ_PROPERTIES允许列出目录并读取目录的属性。
CATALOG_WRITE_PROPERTIES允许配置目录属性。
CATALOG_ATTACH_POLICY允许将策略附加到目录。
CATALOG_DETACH_POLICY允许从目录解除策略。
策略权限
| 权限 | 说明 |
|---|---|
| POLICY_CREATE | 允许在指定的命名空间下创建策略。 |
| POLICY_READ | 允许读取策略内容和元数据。 |
| POLICY_WRITE | 允许更新策略详情,例如其内容或描述。 |
| POLICY_LIST | 允许列出目录中的任何策略。 |
| POLICY_DROP | 允许删除未附加到任何资源实体的策略。 |
| POLICY_FULL_METADATA | 授予所有策略权限。 |
| POLICY_ATTACH | 允许将策略附加到实体。 |
| POLICY_DETACH | 允许将策略从实体上分离。 |
RBAC 示例
下图展示了 Polaris 中 RBAC 的工作方式,其中包含以下用户:
Alice: 注册 Polaris 的服务管理员。Alice 可以创建主体(principal),也可以创建目录和命名空间,并为 Polaris 资源配置访问控制。
Bob: 使用 Apache Spark™ 与 Polaris 交互的数据工程师。
- Alice 为 Bob 创建了一个主体。该主体被授予了 Data_engineer 主体角色,而该角色又被授予了以下目录角色:Catalog contributor 和 Data administrator(对应下图中的 Silver 区域目录和 Gold 区域目录)。
- Catalog contributor 角色授予在 Bronze 区域目录中创建命名空间和表的权限。
- Data administrator 角色授予对 Silver 区域目录和 Gold 区域目录的完整管理权限。
Mark: 使用 Polaris 管理的数据进行模型训练的数据科学家。
- Alice 为 Mark 创建了一个主体。该主体被授予了 Data_scientist 主体角色,而该角色又被授予了名为 Catalog reader 的目录角色。
- Catalog reader 角色授予对名为 Gold zone catalog 的目录的只读访问权限。
评论
登录后参与评论
KnowForge