访问控制

本节提供有关 Snowflake Open Catalog 访问控制工作原理的信息。

Open Catalog 使用基于角色的访问控制 (RBAC) 模型,在该模型中,Open Catalog 管理员将访问权限分配给目录角色,然后通过将目录角色分配给主体角色来将资源访问权限授予服务主体。

以下是了解 Open Catalog 中访问控制的关键概念:

  • 安全对象

  • 主体角色

  • 目录角色

  • 权限

安全对象

安全对象是可以向其授予访问权限的对象。Open Catalog 具有以下安全对象:

  • 目录

  • 命名空间

  • Iceberg 表

  • 视图

Open Catalog 的 RBAC 模型是细粒度的;也就是说,可以对整个目录或目录中的命名空间、表或视图授予权限。如果要授予对某个命名空间的权限,还可以保护在该命名空间下分组的表以及嵌套在该命名空间下的任何子命名空间或表。

主体角色

主体角色是 Open Catalog 中的一种资源,可以使用它对 Open Catalog 服务主体进行逻辑分组,并授予对安全对象的权限。

Open Catalog 支持服务主体和主体角色之间的多对一关系。例如,要向多个服务主体授予相同的权限,可以向这些服务主体授予单个主体角色。一个服务主体只能被授予一个主体角色。注册服务连接时,Open Catalog 管理员指定授予服务主体的主体角色。

不能直接向主体角色授予权限。而是应在目录角色级别配置对象权限,然后将目录角色授予主体角色。

下表显示了可以在 Open Catalog 中配置的主体角色的示例:

主体角色名称

描述

Data_engineer

授予多个服务主体以运行数据工程作业的角色。

Data_scientist

授予多个服务主体以运行数据科学或 AI 作业的角色。

目录角色

目录角色属于 Open Catalog 中的特定目录资源,指定对目录或目录中的对象(例如目录命名空间或表)进行操作的一组权限。可以为目录创建一个或多个目录角色。

向目录角色授予权限,然后将目录角色授予主体角色,以将权限授予一个或多个服务主体。

注意

如果更新授予服务主体的权限,则更新将在最多一个小时内不会生效。这意味着,如果撤消或授予对某个目录的某些权限,则更新后的权限在最多一小时内不会对任何具有该目录访问权限的服务主体生效。

Open Catalog 还支持目录角色和主体角色之间的多对多关系。可以将同一目录角色授予一个或多个主体角色。同样,主体角色可以授予一个或多个目录角色。

下表显示了可以在 Open Catalog 中配置的目录角色的示例:

示例目录角色

描述

目录管理员

已授予多种权限以模拟对目录的完全访问权限的角色。

已授予此角色的主体角色可以在目录中创建、更改、读取、写入和删除表。

目录阅读者

已授予目录中表的只读权限的角色。

已授予此角色的主体角色可以从目录中的表中读取。

目录贡献者

已授予对属于目录的所有表的读写访问权限的角色。

已授予此角色的主体角色可以对目录中的表执行读写操作。

用户角色

用户是指登录 Open Catalog Web 界面以管理 Open Catalog 账户的人员。但是,在用户可以管理账户之前,他们必须被授予至少一个用户角色。可授予用户的用户角色包括服务管理员和目录管理员。

服务管理员角色

服务管理员角色允许用户管理整个账户,但有少数例外。

允许的权限

具有服务管理员权限的用户是服务管理员。服务管理员可以在账户中执行以下任务:

  • 创建服务连接。

  • 使用网络策略。

  • 管理用户:创建和删除用户,向用户授予角色,以及从用户撤消角色。

  • 创建目录并管理他们创建的目录。

当服务管理员创建目录时,他们也会自动被授予目录管理员角色。服务管理员可以对其具有目录管理员权限的目录执行以下操作:

  • 将该目录的目录管理员角色授予其他用户。这样,两个用户都可以访问该目录。

  • 撤消他们自己对该目录的目录管理员权限,从而失去对该目录的访问权限。但是,在撤消其目录管理员权限之前,他们必须首先向另一个用户授予对该目录的目录管理员权限。

不允许的权限

具有服务管理员权限的用户不能在账户中执行以下任务:

  • 访问或管理不是他们创建的目录。

  • 授予对服务管理员未创建的目录的目录管理员权限。

目录管理员角色

目录管理员角色允许用户管理账户中的目录。必须为每个目录授予目录管理员角色。

允许的权限

目录管理员角色向用户授予访问和管理目录的权限,如下所示:

  • 访问目录。

  • 在目录中创建命名空间。

  • 在目录中创建目录角色并向其授予权限。

  • 向主体角色授予目录角色,使服务主体拥有授予目录角色的权限。

不允许的权限

仅具有目录管理员权限的用户不能在账户中执行以下任务:

  • 创建服务连接。

  • 访问或管理尚未授予其目录管理员角色的目录。

  • 创建或移除目录。

  • 使用网络策略。

  • 管理用户。

RBAC 模型

下图说明了 Open Catalog 使用的 RBAC 模型。对于每个目录,Open Catalog 目录管理员为目录角色分配访问权限,然后通过为主体角色分配目录角色来向服务主体授予对资源的访问权限。Open Catalog 支持服务主体和主体角色之间的多对一关系。

![显示 Open Catalog RBAC 模型的图表。](img/rbac-model.svg“Open Catalog RBAC 模型”)

还可以在表或命名空间级别授予访问控制权限。例如,下图描述了授予对目录中的命名空间和表的权限的情况。

![在表、命名空间级别显示 Open Catalog RBAC 模型的图表。](img/rbac-model-namespace-table.svg“在表、命名空间级别显示 Open Catalog RBAC 模型”)

访问控制权限

本节描述 Open Catalog 访问控制模型中可用的权限。将权限授予目录角色,将目录角色授予主体角色,将主体角色授予服务主体,以指定服务主体可以对 Open Catalog 中的对象执行的操作。

要授予某个对象的全部权限(删除、列出、读取、写入等),可以使用 全部权限 选项。

目录权限

权限

描述

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

允许配置目录特性。

NAMESPACE_CREATE

允许在目录中创建命名空间。

NAMESPACE_DROP

允许从目录中删除命名空间。

NAMESPACE_FULL_METADATA

授予所有命名空间权限。

NAMESPACE_LIST

允许列出命名空间中的任何对象,包括嵌套命名空间和表。

NAMESPACE_READ_PROPERTIES

允许读取所有命名空间属性。

NAMESPACE_WRITE_PROPERTIES

允许配置命名空间属性。

TABLE_CREATE

允许向目录注册表。

TABLE_DROP

允许从目录中删除表。

TABLE_FULL_METADATA

授予所有表权限,但 TABLE_READ_DATA 和 TABLE_WRITE_DATA 除外,这两个权限需要单独授予。

TABLE_LIST

允许列出目录中的任何表。

TABLE_READ_DATA

允许通过从目录接收短期只读存储凭据来从表中读取数据。

TABLE_READ_PROPERTIES

允许读取表的 属性 (https://iceberg.apache.org/docs/nightly/configuration/#table-properties)。

TABLE_WRITE_DATA

允许通过从目录接收短期读写存储凭据来将数据写入表。

TABLE_WRITE_PROPERTIES

允许配置表的 属性 (https://iceberg.apache.org/docs/nightly/configuration/#table-properties)。

VIEW_CREATE

允许向目录注册视图。

VIEW_DROP

允许从目录中删除视图。

VIEW_FULL_METADATA

授予所有视图权限。

VIEW_LIST

允许列出目录中的任何视图。

VIEW_READ_PROPERTIES

允许读取所有视图属性。

命名空间权限

权限

描述

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

允许全面管理命名空间、目录角色和在其下分组的任何表或嵌套在其下的任何子命名空间或表。

NAMESPACE_CREATE

允许在命名空间之外创建子命名空间。

NAMESPACE_DROP

允许从目录中删除命名空间。

NAMESPACE_FULL_METADATA

授予对命名空间的所有命名空间权限。

NAMESPACE_LIST

允许列出命名空间中的任何对象,包括嵌套命名空间和表。

NAMESPACE_READ_PROPERTIES

允许读取所有命名空间属性。

NAMESPACE_WRITE_PROPERTIES

允许配置命名空间属性。

TABLE_CREATE

允许向命名空间注册表。

TABLE_DROP

允许从命名空间中删除表。

TABLE_FULL_METADATA

授予在命名空间中分组的表的所有表权限,但 TABLE_READ_DATA 和 TABLE_WRITE_DATA 除外,这两个权限需要单独授予。

TABLE_LIST

允许列出命名空间中的任何表。

TABLE_READ_DATA

允许通过从目录接收短期只读存储凭据来从在命名空间下分组的任何表中读取数据。

TABLE_READ_PROPERTIES

允许读取在命名空间下分组的任何表的 属性 (https://iceberg.apache.org/docs/nightly/configuration/#table-properties)。

TABLE_WRITE_DATA

允许通过从目录接收短期读写存储凭据来将数据写入在命名空间中分组的任何表。

TABLE_WRITE_PROPERTIES

允许配置在命名空间下分组的任何表的 属性 (https://iceberg.apache.org/docs/nightly/configuration/#table-properties)。

VIEW_CREATE

允许向命名空间注册视图。

VIEW_DROP

允许从命名空间中删除视图。

VIEW_FULL_METADATA

授予命名空间中所有视图的所有视图权限。

VIEW_LIST

允许列出命名空间中的任何视图。

VIEW_READ_PROPERTIES

允许读取命名空间中所有视图的所有视图属性。

VIEW_WRITE_PROPERTIES

允许为命名空间中的任何视图配置视图属性。

表权限

权限

描述

TABLE_DROP

允许从目录中删除表。

TABLE_FULL_METADATA

授予所有表权限,但 TABLE_READ_DATA 和 TABLE_WRITE_DATA 除外,这两个权限需要单独授予。

TABLE_LIST

允许列出目录中的任何表。

TABLE_READ_DATA

允许通过从目录接收短期只读存储凭据来从表中读取数据。

TABLE_READ_PROPERTIES

允许读取表的 属性 (https://iceberg.apache.org/docs/nightly/configuration/#table-properties)。

TABLE_WRITE_DATA

允许通过从目录接收短期读写存储凭据来将数据写入表。

TABLE_WRITE_PROPERTIES

允许配置表的 属性 (https://iceberg.apache.org/docs/nightly/configuration/#table-properties)。

VIEW_READ_PROPERTIES

允许读取所有视图属性。

视图权限

权限

描述

VIEW_CREATE

允许向目录注册视图。

VIEW_DROP

允许从目录中删除视图。

VIEW_LIST

允许列出目录中的任何视图。

VIEW_READ_PROPERTIES

允许读取所有视图属性。

VIEW_WRITE_PROPERTIES

允许配置视图属性。

VIEW_FULL_METADATA

授予所有视图权限。

RBAC 示例

下图说明了 RBAC 在 Open Catalog 目录级别的工作方式,其中包括以下用户:

  • Alice: 注册 Open Catalog 的服务管理员。Alice 可以创建服务主体。她还可以创建目录和命名空间,并为 Open Catalog 资源配置访问控制。

    注意

    Alice 的服务主体在 Open Catalog 用户界面中不可见。

  • Bob: 一名数据工程师,使用 Snowpipe Streaming(在 Snowflake 中)和 Apache Spark 连接与 Open Catalog 进行交互。

    • Alice 为 Bob 创建了一个服务主体。其已被授予 Data_engineer 主体角色,而该主体角色又被授予以下目录角色:目录贡献者和数据管理员(对于下图中的 Silver 和 Gold 区域目录)。

      • 目录贡献者角色授予在 Bronze 区域目录中创建命名空间和表的权限。

      • 数据管理员角色授予 Silver 区域目录和 Gold 区域目录的完全管理权限。

  • Mark: 使用 Snowflake AI 服务与 Open Catalog 进行交互的数据科学家。

    • Alice 为 Mark 创建了一个服务主体。其已被授予 Data_scientist 主体角色,而该主体角色又被授予名为目录阅读者的目录角色。

      • 目录阅读者角色授予名为 Gold 区域目录的目录的只读访问权限。

![显示 RBAC 在 Open Catalog 中的工作方式示例的图表。](img/rbac-example.svg“Open Catalog RBAC 示例”)

语言: 中文