概观
Apache Sentry是一个基于角色的粒度授权模块,适用于Hadoop。Sentry提供了对经过身份验证的用户和应用程序(如Presto)的数据控制和强制执行精确级别权限的功能。
Presto Enterprise与Apache Sentry集成,强制在Hive对象上授予相同和现有的权限。Presto将强制分配给Hive数据库,表,列和视图的权限。如果用户没有查询对象的权限,则查询将失败并返回错误。
Presto Enterprise仅可从Staburst获得。有关Presto Enterprise和Apache Sentry集成的更多信息或获得免费试用版,请联系。
在你开始之前
在使用Apache Sentry配置Presto之前,请验证以下先决条件:
- 安装了Apache Sentry和Hive的Cloudera Enterprise 5.12+。
- Presto Coordinator和Presto Workers具有相应的网络访问权限,可与Apache Sentry Service进行通信。通常这是端口8038。
- 如果LDAP用于组映射,则Presto Coordinator和Presto Workers具有相应的网络访问权限以与LDAP服务器通信。通常这是端口636或389。
如果您是Apache Sentry的新手,Cloudera提供了安装和配置Apache Sentry的优秀文档:
建筑
当查询提交给Presto时,Presto会解析并分析查询,以了解用户访问特定对象所需的权限。Presto与Apache Sentry Service通信以确定请求是否有效。如果请求有效,则查询继续执行。如果请求无效,则会向用户返回错误。
缓存还用于提高性能并减少对Sentry服务的请求数。
使用Apache Sentry配置Presto
Apache Sentry配置
与Hive,Impala,Spark和Hue一样,您必须为Presto创建一个名为Admin的Admin Group presto
。您可以通过Cloudera Manager执行此操作,也可以通过sentry.service.admin.group
在sentry-site.xml
文件中添加属性来手动执行此操作 。Presto进程的用户应属于该组。此外,您必须普雷斯托用户添加(从sentry.client-principal
)以sentry.service.allow.connect
在sentry-site.xml
。
有关其他信息,请参阅Cloudera文档:
Apache Sentry的Presto配置
必须配置Starburst Presto Enterprise才能使Presto与Apache Sentry服务进行通信。要启用,请在Hive连接器配置中设置以下属性。
hive.security =哨兵
为Presto启用Apache Sentry后,还需要其他必需和可选属性才能进一步配置。您还可以在查看配置属性的完整列表。
组映射
Sentry管理角色权限和角色到用户组关联。Sentry不管理用户到用户组关联。因此,需要将使用Sentry的任何应用程序配置为能够确定用户的组。在Presto中,该sentry.group-mapping
属性指定如何确定用户组。默认情况下,它设置为HADOOP_DEFAULT
。有关其他可能的值,请参阅。
有关Cloudera文档的更多信息,请参阅:
注意
可能需要重用现有sentry-site.xml
配置,而不是在Hive连接器配置中设置新配置。要让Presto使用XML配置文件,请设置sentry.config.resources
为配置文件的文件位置sentry-site.xml
。
使用HADOOP_DEFAULT
组映射并sentry.config.resources
设置,并且提供的文件包含值时hadoop.security.group.mapping
,将使用配置的用户组映射。如果未设置,sentry.config.resources
Presto将使用Hadoop的默认行为,即从本地操作系统检索用户组。同样,在使用LDAP
组映射并使用sentry.config.resources
属性提供Hadoop配置文件时 ,您可以避免在Hive连接器配置中设置LDAP组映射属性。
授权信息
可以通过查询以下表来访问Sentry授权信息:
information_schema.roles
- 返回有关所有现有角色的信息(相当于)SHOW ROLES
information_schema.applicable_roles
- 返回授予当前用户的角色information_schema.enabled_roles
- 返回当前用户当前正在使用的角色列表(相当于)SHOW CURRENT USER
information_schema.table_privileges
- 根据当前启用的角色返回授予用户的所有表权限
高速缓存
对远程过程调用Apache Sentry以及同步LDAP组有一些延迟。Presto包含一个缓存机制,以便后续调用可以在进行远程调用之前查看缓存。有关缓存属性及其默认值,请参阅。根据您的使用情况,您可能希望增加或减少默认ttl值。
故障排除
- 如果你得到例外, 那么你需要确保使用正确。
GSSException: Failure unspecified at GSS-API level (Mechanism level: Checksum failed)
sentry.service-principal
- 如果你得到一个
SentryAccessDeniedException
则例外确保您的设置用户sentry.admin-user
属于上市任何团体sentry.service.admin.group
在sentry-site.xml
。- 如果普雷斯托不能够连接到基于Kerberos的哨兵,你会得到一个异常 确保您添加的普雷斯托用户(从)以在。另外,确保字母外壳匹配。
Peer indicated failure: Problem with callback handler
sentry.client-principal
sentry.service.allow.connect
sentry-site
- 确保您的
sentry.server
价值是正确的。它不是IP或主机名。它是Sentry中的服务器对象名称。
限制
Presto仅强制执行Apache Sentry策略。Presto不支持在Sentry中修改授权策略。这包括CREATE ROLE,GRANT或REVOKE等命令。如果您需要修改角色和权限,则必须通过其他工具(如Apache Hive或Hue)完成。Sentry Policy Files也不受支持。