大数据生态安全框架的实现原理与最佳实践(下篇) 2

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 大数据生态安全框架的实现原理与最佳实践(下篇)

2. HIVE 授权详解

先来回顾下 hive 的整体架构:

  • hive整体分为客户端和服务端两部分;
  • 客户端包括 hive cli, beeline,webui等;
  • 服务端又分为 hiveserver2 和 hms,以及底层的元数据持久存储 metastore db;
  • Hive 又作为 hadoop的客户端,访问底层的 hdfs 和 yarn;

640.png

当前市面上HIVE的使用方式分两种:

  • 只使用 HMS,将hive 看做是单独的 table format layer,比如 spark/flink on hive: Hive as a table storage layer: These users have direct access to HDFS and the metastore server (which provides an API for metadata access);
  • 完整地使用 hive, 包括 hiveserver2+ hms, 比如 hive on mr/tez/spark: Hive as a SQL query engine: These users have all data/metadata access happening through HiveServer2. They don't have direct access to HDFS or the metastore.
  • 第一种只使用 hms 的方式下,spark 等应用会直接访问 hdfs, 所以授权依赖于 hdfs 的 authentication 机制:HDFS access is authorized through the use of HDFS permissions. (Metadata access needs to be authorized using Hive configuration.)
  • 第二种使用 hiveserver2 的方式,用户通过 hiveserver2 进而访问 hms 和 hdfs/s3,hive 更容易统一管控用户权限,也更容易组织底层文件的layout和存储格式,比如支持 orc acid事务表,从而提供高效的数据服务,是Hive 社区期望的方式;

当前 HIVE 共有四种 authentication 认证机制:

  • Storage Based Authorization in the Metastore Server
  • SQL Standards Based Authorization in HiveServer2
  • Authorization using Apache Ranger & Sentry
  • Old default Hive Authorization (Legacy Mode)

之所以有这么多 authentication 机制,从根本上来说,还是因为 hive 历史发展的原因:

  • 早期的 hive 仅仅是一个简单的存储引擎之上的SQL解析与执行层,对底层存储引擎中的数据没有完整的掌控力,允许外部应用如 spark/presto/flink 等,直接访问 hms获取元数据,并进而读写底层的数据(schema on read);
  • 后续hive 逐渐迭代,加强了对底层存储引擎中的数据的管控,包括文件的目录结构文件名称存储格式等,并进而支持了 orc acid 事务表等高效的数据存取格式,越来越像一款类似 mysql/oracle 等的数据库,推荐用户使用 hiveserver2 来访问底层数据;
  • 所以 hive 需要支持外部计算引擎直接使用 hms 与使用 hiveserver2两种方式,需要支持 orc acid 事务表,也需要支持其它格式的各种内部表和外部表;

640.png

2.1 HIVE授权详解-Old default Hive Authorization (Legacy Mode)

  • Hive Old Default Authorization 是 hive 2.0 之前默认的 authorization model, 支持类似 RDBMS 中对 user/group/roles 赋予 database/table 各种权限的机制:authorization based on users, groups and roles and granting them permissions to do operations on database or table
  • 但是 Hive Old Default Authorization 并不是一个完整的权限控制模型:leaving many security gaps unaddressed, for example, the permissions needed to grant privileges for a user are not defined, and any user can grant themselves access to a table or database.
  • hive 2.0 之后默认的 authorization model 已经被切换为 SQL standards based authorization mode (HIVE-12429);

640.png

2.2 HIVE授权详解 - Storage Based Authorization in the Metastore Server

  • HMS 提供了对 hive metastore db 中的元数据的访问,为保护这些元数据被各种 hms 客户端如 spark/presto/flink 错误地访问和修改,HMS 不能完全依赖这些客户端自身的认证和授权等安全机制,为此 Hive 0.10 通过 HIVE-3705 增加了对 HMS 的 authorization 能力,即 Storage Based Authorization;
  • Storage Based Authorization 底层依赖 hdfs permissions 作为 source of truth: it uses the file system permissions for folders corresponding to the different metadata objects as the source of truth for the authorization policy.
  • Storage Based Authorization 提供了客户端直接访问 HMS 时,对底层元数据的保护:To control metadata access on the metadata objects such as Databases, Tables and Partitions, it checks if you have permission on corresponding directories on the file system;
  • Storage Based Authorization 通过代理机制(hive.server2.enable.doAs =true),也可以提供对客户端通过 hiveserver2 访问HIVE数据时,对底层元数据和数据的保护:You can also protect access through HiveServer2 by ensuring that the queries run as the end user;
  • Storage Based Authorization 可以通过 hdfs acl 提供权限的灵活性:Through the use of HDF ACL, you have a lot of flexibility in controlling access to the file system, which in turn provides more flexibility with Storage Based Authorization;

640.png


Storage based authorization 因为其自身的机制原理,在使用上也有其局限性:

  • 由于Storage based authorization 的底层原理是依赖用户对底层存储系统中数据的访问权限,且该用户在hiveserver2开启代理与不开启代理机制下身份不同,所以其主要用来在用户直接访问 hms 时,提供对底层元数据的保护;
  • 对于用户使用 hiveserver2 的情况,需要限制 HiveServer2 中可以执行的操作,此时不能单纯依靠 Storage based authorization, 还需要配合 “SQL Standards Based Authorization” 或 “Authorization using Apache Ranger & Sentry,或者配置使用 FallbackHiveAuthorizer:

640.png

2.3 HIVE授权详解 - SQL Standards Based Authorization in HiveServer2

  • Storage Based Authorization 只能基于文件系统的目录/文件的权限管理机制提供database/table/partition 粒度的权限管控,为提供更细粒度的权限管控,比如行级别,列级别,视图级别的权限管控, Hive 0.13.0 通过 HIVE-5837 引入了SQL Standards Based Authorization;
  • SQL Standards Based Authorization,其作用域是 HiveServer2,可以跟/需要跟 hms 的 storage based authorization 结合使用,以提供对HIVE元数据和数据的全面的安全管控;
  • SQL Standards Based Authorization,会在 hiveserver2 解析编译用户的 sql query 语句时,校验提交该 sql query 语句的业务用户的权限, 但是在底层执行该 query 时,使用的是 Hive 系统用户,所以 hive 系统用户需要有对底层数据对应的目录/文件的访问权限;
  • 由于 SQL Standards Based Authorization 的作用域是 HiveServer2,所以对于直接访问底层hdfs数据的用户,比如 spark on hive/Hive CLI/hadoop jar命令等,需要依赖 hms 的 storage based authorization 来进行安全管控;
  • SQL Standards Based Authorization,对 hiveserver2 中能提交的命令,做了限制;
  • 启用该 authorization 机制时,Dfs/add/delete/compile/reset 等命令时被禁用的;
  • 使用白名单机制,通过参数 hive.security.authorization.sqlstd.confwhitelist,限制了可以通过 set 覆盖哪些参数配置;

640.png640.png

2.4 HIVE授权详解 - Authorization using Apache Ranger & Sentry

  • Apache Ranger 和 Apache Sentry 通过插件机制,提供了对 hive authorization的支持,Sentry和Ranger这两个框架非常类似,都是基于角色的访问控制模型(role-based access control,RBAC),基于角色的访问控制在需要对大量用户进行授权时能大大减轻所需的ACL配置工作;
  • Sentry最初是由Cloudera公司内部开发而来的,初衷是为了让用户能够细粒度的控制Hadoop系统中的数据(主要指HDFS,Hive的数据),所以Sentry对HDFS,Hive以及同样由Cloudera开发的Impala有着很好的支持性;
  • 而Ranger最初是由另一家公司Hortonworks(已经被Cloudera收购)主导开发的,它同样是做细粒度的权限控制,但相比较于Sentry而言,ranger有着更加丰富的策略控制,以及更加通用性的大数据组件支持,包括于HDFS, Hive, HBase, Yarn, Storm, Knox, Kafka, Solr 和 NiFi等在Cloudera公司新推出的大数据平台cdp中,不在提供对sentry的支持而是统一使用了Ranger;
  • CDH中默认使用的是 Sentry, HDP 中默认使用的是 Ranger, 由于 sentry 项目已经从 asf 中退役了,目前业界推荐的,CDP中默认的,都是 Ranger;
  • Ranger 作为集中式平台,对 Hadoop 生态中的大多数组件,包括hdfs/hive/hbase/yarn/kafka等,综合提供了授权,密钥管理和审计功能;
  • Ranger 采用了 ABAC 模型 (Attribute based access control),基于标签策略,根据分类(标记)控制对资源的访问;
  • Ranger 提供了很多高级特性,如 web ui直观和细粒度的策略查看和管理,全面的可扩展的审核日志记录,动态的行和列级别的访问控制,动态数据掩码可实时保护敏感数据等。

640.png

2.5 HIVE授权详解-总结

  • HIVE的权限管控机制,最常用的是结合 Storage Based Authorization in the Metastore Server 和 SQL Standards Based Authorization in HiveServer2 或 sentry/ranger 插件;
  • 其中前者基于底层文件系统的权限管理机制,提供对 hms API 的权限管控,比如查看/新增/删除表或分区等;
  • 后者提供通过 hiveserver2 访问hive数据时,更细粒度的权限管控,比如行级别,列级别,视图级别的权限管控;
  • 当使用 spark/flink/presto on hive 方案时,应用会直接访问 hms 和 hdfs ,只有 Storage Based Authorization起作用,主要依赖的是 hdfs 的权限管控机制(posix mode + posix acl)
  • 当使用 hive on mr/tez/spark 方案时,应用通过 hiveserver2 访问 hms 和 hdfs, Storage Based Authorization 和 sentry/range 都起作用 (需要关闭代理功能 hive.server.enable.doAs=false);
  • 终端业务用户比如 xyz 提交给 HIVESERVER2 的 SQL作业,经过 HIVESERVER2 的解析编译和优化后,一般会生成 MR/TEZ/SPARK 任务(之所以说一般,是因为有的 SQL 是直接在HIVESERVER2中执行的,不会生成分布式的 MR/TEZ/SPARK 任务),这些 MR/TEZ/SPARK 任务最终访问底层的基础设施 HDFS 和 YARN 时,一样要经过这些基础设施 hdfs/yarn的权限校验;
  • 那么这些底层基础设施 hdfs/yarn 进行权限校验时,是针对 hive 系统用户进行校验(hiveserver2 这个服务的系统用户一般是linux操作系统上的用户 hive),还是针对终端业务用户比如 hundsun进行校验呢?这点可以通过参数 hive.server2.enable.doAs进行控制(老版本参数是hive.server2.enable.impersonation):hive.server2.enable.doAs=false/TRUE:“Setting this property to true will have HiveServer2 execute Hive operations as the user making the calls to it.”;
  • 当启用了 HIVE 的代理机制时(hive.server.enable.doAs=true),业务终端用户如 xyz 提交的 HIVE SQL 作业底层的 MR/TEZ/SPARK 任务访问 HDFS/YARN 时,HDFS/YARN 验证的是业务终端用户 xyz 的身份 (后续 HDFS/YARN 的权限校验,校验的也是 xyz 用户的权限);
  • 当没有启用 HIVE 的代理机制时(hive.server.enable.doAs=false),业务终端用户提交的 HIVE SQL 作业底层的 MR/TEZ/SPARK 任务访问 HDFS/YARN 时,需要验证的是 hiveserver2 服务对应的用户,即 hive 的身份 (后续 HDFS/YARN 的权限校验,校验的也是 hive 用户的权限);

640.png

640.png

640.png

2.6 HIVE授权详解-相关参数

HIVE授权相关参数主要有:

  • hive.security.authorization.enabled: Enable or disable the Hive client authorization
  • hive.security.authorization.manager:org.apache.hadoop.hive.ql.security.authorization.plugin.fallback.FallbackHiveAuthorizerFactory/org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider/org.apache.hadoop.hive.ql.security.authorization.DefaultHiveMetastoreAuthorizationProvider/org.apache.sentry.binding.hive.authz.SentryHiveAuthorizerFactory;
  • hive.metastore.pre.event.listeners: The pre-event listener classes to be loaded on the metastore side to run code whenever databases, tables, and partitions are created, altered, or dropped. Set this configuration property to org.apache.hadoop.hive.ql.security.authorization.AuthorizationPreEventListener in hive-site.xml to turn on Hive metastore-side security;
  • hive.security.metastore.authorization.manager: This tells Hive which metastore-side authorization provider to use. Defaults to org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider .
  • hive.security.metastore.authenticator.manager:The authenticator manager class name to be used in the metastore for authentication, defaults to org.apache.hadoop.hive.ql.security.HadoopDefaultMetastoreAuthenticator
  • hive.security.authorization.createtable.owner.grants
  • hive.security.authorization.sqlstd.confwhitelist
  • hive.warehouse.subdir.inherit.perms
  • hive.server2.enable.doAs/hive.server2.enable.impersnation

3. 金融行业大数据安全最佳实践

  • 在金融行业强调安全的背景下,我们推荐对大数据集群开启kerberos 安全认证, 开启用户权限校验:hadoop.security.authentication=kerberos,dfs.permissions.enabled=true
  • HDFS 文件的授权,要遵循最小化原则,不能对目标目录笼统设置777!
  • HDFS文件的授权,建议主要使用 POSIX MODE 来进行设置,必要时通过 POSIX ACL 进行补充:dfs.namenode.acls.enabled=true
  • 业务用户对HDFS文件的使用,建议将所有文件,比如 jar/配置文件/数据字典等,存放在统一的目录下,比如/user/hundsun/dap
  • 针对HIVE的认证,我们推荐两种方式:只开启Kerberos认证模式/开启Kerberos认证和LDAP认证模式,其中后者的实际含义是“大数据集群(hdfs/yarn/zookeeper/hive等)开启了kerberos安全认证,同时 hive 组件 配置了使用 LDAP认证”;
  • 具体的LDAP,如果要跟企业域账户打通,则需要使用企业内部统一的 LDAP 服务器;否则建议使用一个单独的 ldap 服务器(比如 OpenLdap/ApacheDS/microsoft AD 等 ldap的某个具体实现),比如在 TDH中,底层实际使用的是 Guardien 底层自带的一个 ldap实现(本质是ApacheDS),创建用户更改密码等操作都是在 Guardien 中操作的,更企业域账户是独立的;
  • 针对HIVE的授权,我们推荐使用 sentry/ranger等第三方插件统一进行授权和鉴权,此时需要关闭hive的代理功能 Hive.server2.enableDoas=false;
  • 我们推荐各个业务系统使用该系统对应的业务用户的身份提交业务SQL,而不是各个业务系统统一都使用 HIVE 系统用户;
  • 业务用户对HIVE表的使用,如果都是通过HIVESERVER2来访问,建议使用 ORC 事务内表;如果通过 SPARK 等计算引擎做 ETL,建议使用 orc/parquet格式的HIVE外表,并存放在统一的目录下,比如/user/hundsun/dap,针对外表目录的授权,需要结合 HDFS POSIX ACL 来进行;
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
2月前
|
SQL 消息中间件 分布式计算
大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
79 5
|
2月前
|
存储 分布式计算 API
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
99 0
|
4天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
21 2
|
4天前
|
存储 分布式计算 安全
MaxCompute Bloomfilter index 在蚂蚁安全溯源场景大规模点查询的最佳实践
MaxCompute 在11月最新版本中全新上线了 Bloomfilter index 能力,针对大规模数据点查场景,支持更细粒度的数据裁剪,减少查询过程中不必要的数据扫描,从而提高整体的查询效率和性能。
|
3天前
|
分布式计算 DataWorks 搜索推荐
DataWorks产品评测:大数据开发治理平台的最佳实践与体验
DataWorks是阿里云推出的一款大数据开发治理平台,集成了多种大数据引擎,支持数据集成、开发、分析和任务调度。本文通过用户画像分析的最佳实践,评测了DataWorks的功能和使用体验,并提出了优化建议。通过实践,DataWorks在数据整合、清洗及可视化方面表现出色,适合企业高效管理和分析数据。
37 0
|
1月前
|
存储 安全 大数据
大数据隐私保护:用户数据的安全之道
【10月更文挑战第31天】在大数据时代,数据的价值日益凸显,但用户隐私保护问题也愈发严峻。本文探讨了大数据隐私保护的重要性、面临的挑战及有效解决方案,旨在为企业和社会提供用户数据安全的指导。通过加强透明度、采用加密技术、实施数据最小化原则、加强访问控制、采用隐私保护技术和提升用户意识,共同推动大数据隐私保护的发展。
|
1月前
|
存储 安全 大数据
|
2月前
|
存储 分布式计算 druid
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
69 3
|
2月前
|
消息中间件 分布式计算 druid
大数据-154 Apache Druid 架构与原理详解 基础架构、架构演进
大数据-154 Apache Druid 架构与原理详解 基础架构、架构演进
64 2
|
2月前
|
消息中间件 监控 Java
大数据-109 Flink 体系结构 运行架构 ResourceManager JobManager 组件关系与原理剖析
大数据-109 Flink 体系结构 运行架构 ResourceManager JobManager 组件关系与原理剖析
80 1