Apache Ranger安全区介绍

2024-04-15 14:48
文章标签 介绍 apache ranger 安全区

本文主要是介绍Apache Ranger安全区介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文主要介绍大数据安全管理系统Apache Ranger的安全区Security Zone,根据官方文档人工翻译而来。

介绍

        Apache Ranger为很多Hadoop组件服务和非Hadoop服务提供授权和访问审计服务,比如HDFS、Hive、 HBase、YARN、 Kafka、Storm、 Knox、Atlas、NiFi、Solr等。另外,Apache Ranger可为服务组件提供可伸缩的密钥管理服务,比如为HDFS提供用于数据传输加密的密钥管理服务。并且支持Hive数据仓库的数据脱敏和行过滤策略。

        Apache Ranger可以管理授权策略,交互式查看同一部署环境中跨组件的资源访问情况,从一个集中的管理台界面操作使得管理更简单。同时,Apache Ranger提供丰富的Rest API接口,使得与其它应用的集成更简单。

        在本文中,我们将介绍一种新的特性“安全区”,它将允许分配一个服务中的资源到多个区域中,以便更好地进行安全策略管理。可以使多个管理员基于已赋予管理权限的区域为服务设置安全策略。

例如,让我们考虑两个安全区“财务”和“销售”:

  1. 安全区“财务”包含hive 仓库中名为“财务”的所有内容
  2. 安全区“销售”包含hive 仓库中名为“销售”的所有内容
  3. 用户和组的集合被指定为每个安全区的管理员
  4. 用户只能在他们作为管理员的安全区中设置策略 
  5. 安全区中定义的策略仅适用于区域中的资源
  6. 可以扩展区域以包括来自多个服务(例如HDFS,Hive,HBase,Kafka等)的资源,从而允许安全区管理员为所在组织服务拥有的资源设置策略。

在本文中我们将了解到安全区更详细的信息。

Apache Ranger授权

在我们深入研究安全区之前,让我们先简要了解一下Ranger的授权模型:

- Ranger 管理台, 一个WEB应用,提供UI控制台界面用于创建安全策略和交互地查看访问审计日志

- Ranger授权插件在服务组件中执行资源访问授权,比如HDFS、 Hive、 HBase、YARN、Kafka等服务,并且生成访问审计日志

- Ranger授权插件根据配置通过REST API调用Ranger管理台获得安全策略这些插件还定期从Ranger管理台拉取安全策略的变化信息。

- 每个服务(比如HDFS NameNode、HiveServer2)的安全策略在Ranger 管理台的“service”中定义。 Ranger授权插件根据配置使用指定服务的策略。

安全区

什么是安全区?

1. 安全区由一个或多个服务组件的资源设置组成。 安全区相关的例子如下:

区域: 财务 

服务: prod_hadoop; path=/finance/*, /taxes/*

服务: prod_hive; database=finance

服务: prod_kafka; topic=FIN_*

服务: test_hadoop; path=/finance/*, /taxes/*

区域: 销售

服务: prod_hadoop; path=/sales/*

服务: prod_hive; database=sales

服务: prod_kafka; topic=SALES_*

从上面可以看到,资源可以使用通配符指定 - 比如 FIN_*SALES_*

一个资源不能映射对应多个安全区,Ranger 不允许创建的安全区指定的资源匹配到另一个安全区的资源。

例如,尝试修改如上财务安全区指定HDFS资源路径为/sales/finance/* 是不允许的,因为这与销售安全区指定的HDFS 资源路径 - /sales/*冲突。

2. 用户和组的集合可以指定为每个安全区的管理员。这些用户可以为这个安全区的资源创建、修改、删除安全策略。

3. 用户和组的集合可以被授权查看访问安全区资源的审计日志。其它未授权用户不允许查看该区域资源的访问审计日志。

安全区管理

1. Ranger安全区只能由ROLE_SYS_ADMIN角色的用户创建、修改、删除。

2. 用户只能在拥有管理权限的安全区查看、获取、修改安全策略。

如何用安全区授权?

        当一个Ranger 授权插件授权一个资源访问请求时,首先判断待访问的资源属于哪个安全区。如果资源匹配到一个安全区,只有这个安全区的策略适用于访问授权。如果这个资源未匹配到任何安全区,那么用默认安全区unnamed策略进行访问授权

安全区标签策略

在给定的服务中,每个安全区可以配置从一个标签服务中的具体区域使用标签策略,这使得在资源所属的安全区可以使用不同的基于标签的授权策略。

审计日志

Ranger 授权插件生成审计日志包含访问资源所属的安全区名称,只有在本安全区拥有相应权限的用户可以查看这些审计日志。

APIs 

安全区管理

以下类捕获RangerSecurityZone 对象详情,用于REST APIs创建、获取、修改、删除安全区。Ranger安全区只能由ROLE_SYS_ADMIN角色的用户创建、修改、删除。

package org.apache.ranger.plugin.model;

public class RangerSecurityZone extends RangerBaseModelObject {

private String name;

private List<RangerSecurityZoneService> services;

private List<String> adminUsers;

private List<String> adminUserGroups;

private List<String> auditUsers;

private List<String> auditUserGroups;

}

public static class RangerSecurityZoneService {

private String serviceName;

private List<Map<String, String>> resources;

private String tagService;

private String tagServiceZone;

}

Ranger管理台提供以下 REST APIs 来管理安全区:

@Path("plugins")

@Component

public class SecurityZoneREST {

@POST

@Path("/zones")

public RangerSecurityZone createSecurityZone(RangerSecurityZone securityZone) {

// ...

}

@PUT

@Path("/zones/{name}")

public RangerSecurityZone updateSecurityZone(@PathParam("name") String zoneName,

RangerSecurityZone securityZone) {

// ...

}

@DELETE

@Path("/zones/{name}")

public void deleteSecurityZone(@PathParam("name") String zoneName) {

// ...

}

@GET

@Path("/zones/{name}")

public RangerSecurityZone getSecurityZoneByName(@PathParam("name") String zoneName) {

// ...

}

@GET

@Path("/zones/names")

public List<String> getAllZoneNames() {

// ...

}

}

根据需要将新增更多类似APIs。

策略APIs 

RangerPolicy 

RangerPolicy是用于在REST APIs 中处理策略的类。此类已更新为包含属性“zone”。如下所示:

public class RangerPolicy extends RangerBaseModelObject {

private String service;

private String zone;

private String name;

private Integer policyType;

private Integer policyPriority;

private String description;

}

在引入安全区之前创建的策略此属性设置为null策略如果未定义一个指定安全区,此属性将设置为null。请注意此属性的值是不可改变 的(immutable),即一个策略不能从一个安全区移动到另一个安全区。允许这样做可能会导致意想不到的后果,比如一个安全区中的通配符策略(如*或/*)移动到另一个安全区时将适用于另一组资源

服务REST API 

应更新对策略执行创建/更新/删除/获取操作的所有API,以强制执行安全区管理权限,即应该只允许安全区管理员更改策略和获取策略。

ServicePolicys

ServicePolicys是Ranger管理用来向Ranger授权插件发送策略的类。修改此类以包含与服务相关的安全区信息;这将由授权插件中的Ranger策略引擎用于选择授权访问资源的正确策略集。 

public class ServicePolicies implements java.io.Serializable {

private String serviceName;

private Long serviceId;

private Long policyVersion;

private Date policyUpdateTime;

private List<RangerPolicy> policies;

private RangerServiceDef serviceDef;

private String auditMode = RangerPolicyEngine.AUDIT_DEFAULT;

private TagPolicies tagPolicies;

private List<RangerSecurityZone> zones;

}

审计APIs

VXAccessAudit

VXAccessAudit是REST APIs中用于从Ranger 管理台获取访问审核详细信息的类  该类已更新为包含属性“zone” 访问资源所属的安全区名称,将由Ranger 授权插件填入值。

public class VXAccessAudit extends VXDataObject {

protected int auditType;

protected int accessResult = RangerConstants.ACCESS_RESULT_DENIED;

protected String accessType;

protected String zone;

}

XAuditREST 

获取审计日志的REST API被更新,以确保仅返回来自用户具有管理员权限的安全区的日志。

导出/导入变更 

除了对“service-name(s)”的现有支持外,还应更新导出模块以“zone-name(s)”作为参数,以便仅导出给定安全区中的策略

除了对重命名“service(s)”的现有支持外,还应更新导入模块以启用对“zone(s)”的重命名。

UI变更 (文本模型) 

考虑一个Ranger管理控制台示5个服务,如下所示:

 

以及2个安全区Sales Marketing如下所示:

Zone: Sales

prod_hdfs: /sales

prod_hbase: sales

prod_hive: sales

test_hive: sales

Zone: Marketing

prod_hdfs: /marketing

prod_hbase: marketing

prod_kafka: m_topic1, m_topic2

prod_hive: marketing

test_hive: marketing

Ranger 管理界面将显示以下内容请注意顶部的标签介绍每个安全区一个标签

 

Unzoned”选项卡显示所有服务,这些策略将适用于不属于任何安全区的资源。

 

Sales选项卡包括Sales安全区中含的服务,请注意此处未列出prod_kafka服务。服务中的策略仅适用于Sales安全区中的资源。Marketing 安全区同样如此

与前期版本的兼容

策略 APIs 

用户通过前期api创建/更新/获取/删除策略不知道安全区的概念Ranger 管理台将在默认(unnamed安全区处理API调用。

Grant/Revoke 

用于诸如Hive、HBase支持grant revoke 操作等服务的Ranger授权插件,这些操作在适当的服务中创建/更新策略。随着安全区的引入,应该增强Ranger管理台中的grant/revoke实现,以根据所涉及的资源选择要更新策略的安全区

来源于前期版本的Ranger授权插件

来源于前期版本的Ranger授权插件不知道安全区的概念,将不能识别安全区并评估安全区中的策略。但是它们应该继续使用默认(unnamed)安全区中的策略。

这篇关于Apache Ranger安全区介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/906117

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Apache Ignite缓存基本操作实例详解

《ApacheIgnite缓存基本操作实例详解》文章介绍了ApacheIgnite中IgniteCache的基本操作,涵盖缓存获取、动态创建、销毁、原子及条件更新、异步执行,强调线程池注意事项,避免... 目录一、获取缓存实例(Getting an Instance of a Cache)示例代码:二、动态

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

SpringBoot整合Apache Flink的详细指南

《SpringBoot整合ApacheFlink的详细指南》这篇文章主要为大家详细介绍了SpringBoot整合ApacheFlink的详细过程,涵盖环境准备,依赖配置,代码实现及运行步骤,感兴趣的... 目录1. 背景与目标2. 环境准备2.1 开发工具2.2 技术版本3. 创建 Spring Boot