Atlas是一组可伸缩且可扩展的核心基础治理服务 - 使企业能够在Hadoop内有效地满足其合规性要求,并允许与整个企业数据生态系统集成。 Apache Atlas为组织提供开放式元数据管理和治理功能,以构建其数据资产目录,对这些资产进行分类和管理,并为数据科学家,分析师和数据治理团队提供围绕这些数据资产的协作功能。
本文档介绍了Apache Atlas支持的授权模型的详细信息,以控制对Atlas管理的元数据的访问。
Apache Atlas提供了一种类型(Type)系统,允许用户对他们想要管理的元数据对象进行建模。该模型由称为“类型”的定义组成。 Apache Atlas类型系统支持以下种类的类型:
- Entity
- Classification
- Relationship
- Struct
- Enum
授权模型允许控制哪些用户,组可以根据类型名称和类型类别对类型执行以下操作:
- create
- update
- delete
以下是模型支持的访问控制的几个示例:
- 管理员用户可以create/update/delete所有类别的类型
- 数据管理员可以create/update/delete分类类型
- 健康检查(Healthcare)数据管理员可以create/update/delete名称以“hc”开头的类型
实体是Entity类型的实例,此类实例表示现实世界中的对象:例如Hive中的表,HDFS文件,Kafka主题。授权模型可以控制哪些用户,组可以对实体执行以下操作(基于实体类型,实体分类,实体ID):
- read
- create
- update
- delete
- read classification
- add classification
- update classification
- remove classification
以下是模型支持的访问控制的几个示例:
- 管理员用户可以对所有类型的实体执行所有实体操作
- 数据管理员可以对所有类型的实体执行除删除之外的所有实体操作
- 数据质量管理员可以 add/update/remove DATA_QUALITY分类
- 特定组中的用户可以使用PII分类或其子分类来read/update实体
- 财务用户可以read/update ID以“finance”开头的实体
授权模型可以控制哪些用户、组可以执行以下管理操作:
- 导入实体
- 导出实体
具有上述访问权限的用户可以导入/导出实体,而无需授予它们细粒度的实体级访问权限。
Apache Atlas支持可插入的授权接口,如下所示,启用备用实现来处理授权。
可以使用配置atlas.authorizer.impl
向Apache Atlas注册实现授权接口的类的名称。如果未设置此属性,Apache Atlas将在org.apache.atlas.authorize.simple.AtlasSimpleAuthorizer
中使用其默认实现。
package org.apache.atlas.authorize;
public interface AtlasAuthorizer {
void init();
void cleanUp();
boolean isAccessAllowed(AtlasAdminAccessRequest request) throws AtlasAuthorizationException;
boolean isAccessAllowed(AtlasEntityAccessRequest request) throws AtlasAuthorizationException;
boolean isAccessAllowed(AtlasTypeAccessRequest request) throws AtlasAuthorizationException;
}
简单授权程序是Apache Atlas中包含的默认授权程序实现。有关设置Apache Atlas以使用简单授权程序的详细信息,请参阅后面章节:设置Atlas以使用Simple Authorizer。
要将Apache Atlas配置为使用Apache Ranger提供的授权实现,请在application.properties配置文件中包含以下属性:
atlas.authorizer.impl=ranger
Apache Ranger Authorizer需要设置配置文件,例如指定Apache Ranger管理服务器URL,包含授权策略的服务名称等。有关详细信息,请参阅后面章节:设置Atlas以使用Ranger Authorizer。
除了默认授权程序之外,Apache Atlas还包括一个允许所有用户访问的授权程序。此授权程序在测试环境和单元测试中非常有用。要使用此授权程序,请设置以下配置:
atlas.authorizer.impl=NONE