通过 IBM InfoSphere Guardium 实现大数据安全性和审计

监控和审计 IBM InfoSphere BigInsights 和 Cloudera Hadoop 的访问权限

在本文中,您将学习 InfoSphere® Guardium® 如何提供数据库活动监控和审计功能,使您能够将 Hadoop 数据保护无缝地集成到现有企业数据安全策略中。您还将学习如何配置系统,以及如何使用 InfoSphere Guardium 安全策略和专为 Hadoop 环境定制的报告。您也将学习一个仅适用于 IBM InfoSphere BigInsights 的快速启动监控实现。

Sundari Voruganti, QA 专家, IBM

Sundari Voruganti 是 IBM 硅谷实验室 InfoSphere Guardium QA 团队的一名成员。在此之前,她在 System z SWAT 团队从事 IBM InfoSphere Warehouse 工作。Sundari Voruganti 有 12 年的 IT 行业经验,主要是在 IBM 从事测试和客户支持。



Kathryn Zeidenstein, InfoSphere Guardium 推广人员, IBM

Kathy Zeidenstein 已在 IBM 工作了许多年。目前,她是 InfoSphere Guardium 数据活动监控的技术推广人员,在硅谷实验室工作。此前,她是 InfoSphere Optim 数据生命周期工具的信息开发经理。她还担任过 IBM 信息管理和 ECM 部门的一些技术支持、产品管理和产品营销职务。



2013 年 3 月 26 日

概述

大数据骚动主要集中在支持极限容量、速度和多样性的基础架构和该基础架构支持的实时分析功能中。虽然像 Hadoop 这样的大数据环境是相对较新的,但事实是在大数据环境中数据安全问题的关键是预先解决。哪里有数据,哪里就有可能存在隐私泄密、非授权访问或特权用户的不恰当访问。

整个大数据环境和更多传统的大数据管理架构中应该执行相同的合规性要求,没有理由因为技术尚不成熟、正在改进就减弱数据安全性。事实上,随着大数据环境吸收的数据越来越多,组织将面临极大的存储库(数据保存在其中)风险和威胁。

如果您在组织中负责数据安全,则可能需要回答以下问题,比如:

  • 谁正在运行特定的大数据请求?他们运行的是哪些 map-reduce 作业?他们试图下载所有的敏感数据吗?或者这是获取客户洞察的正常市场营销查询吗?
  • 是否具有可能是因为黑客试图通过算法访问敏感数据而造成的大量文件权限异常?
  • 这些作业是授权访问该数据的程序列表的一部分吗?或者已经开发了一些新应用程序而您之前并没有意识到?

您所需要的是能够将大数据应用程序和分析集成到一个现有数据安全基础架构中,而不是依赖自己开发的脚本和监控程序,自己开发脚本和监控程序可能既费力又容易出错,且常常会受到滥用。

本文将带您了解如何扩展 IBM InfoSphere Guardium V9(一个综合的数据活动监控和合规性解决方案)来包括 Hadoop 生态系统的访问监控和报告。

尽管本文包含了 InfoSphere Guardium 的高级概述,但并没有介绍如何安装和配置 InfoSphere Guardium Collector。本文将介绍如何配置 InfoSphere Guardium 以监控支持的 Hadoop 活动,并将其发送到 InfoSphere Guardium Collector 供安全分析师编制报告。您将会看到几个开箱即用的报告示例,以帮助您快速入门。

InfoSphere Guardium 简介

IBM InfoSphere Guardium 解决方案通过轻量级软件探测器连续监控数据库事务,如图 1 所示。

图 1. InfoSphere Guardium Data 活动监控
在集群节点上显示的 Stap 反馈给收集器

这些探测器(称为 S-TAP,用于软件)在操作系统内核级别无需依靠数据库审计日志即可监控所有数据库事务(包括特权用户的事务),这样可以确保职责分离。S-TAP 也不需要对数据库或其应用程序进行任何更改。

探测器将事务转发给网络上的一个加强的收集器(一个设备),在其中与之前定义的策略进行比较来探测违规操作。该系统可响应各种基于策略的行动,包括生成警报。

InfoSphere Guardium 支持各种各样的部署,从而支持非常大的且在地理上分散的基础架构。因为本文只是对 InfoSphere Guardium 进行了简单介绍,您可以查看 参考资料 部分来获取更多关于 InfoSphere Guardium 功能的链接。注意,并不是所有功能都可用于所有数据资源。

使用 InfoSphere Guardium 进行 Hadoop 监控的好处

使用 InfoSphere Guardium 可通过提供有针对性的、可操作的信息极大地简化您的审计就绪过程。试想一下,如果您目前的 Hadoop 审计就绪计划是基于压缩日志数据的,那么希望您永远不需要它,仅从时效性而言,您可能无法满足很多审计需求。鉴定分析毫无疑问是耗时的,而且需要浪费资源自己开发脚本,其实您更愿意将这些资源用在通过 Hadoop 创建业务优势上。

有了 InfoSphere Guardium,很多繁重的任务就可以交给您了。定义安全策略指定需要保存什么数据以及如何应对策略违规。数据事件直接写入 InfoSphere Guardium 收集器,特权用户甚至都没有机会访问并隐藏他们的踪迹。开箱即用的报告可以让您立即开始快速运行 Hadoop 监控,而且这些报告可以很容易通过定制来符合您的审计需求。

InfoSphere Guardium S-TAP 最初的设计目的是以较小的开销提高性能;毕竟,S-TAP 也用于监控产品数据库环境。有了 Hadoop,您将不太可能看到超过 3% 的开销,这对于大多数 HAdoop 工作负载来说微乎其微。

最后,InfoSphere Guardium 提供贯穿整个 Hadoop 堆栈的监控功能,从用户界面直到存储,如图 2 所示。

图 2. 整个 Hadoop 堆栈的数据活动监控的重要性
该图显示了存储、应用程序和用户界面层,以及如何必须在每一层中实现监控以回答问题

为什么这是最重要的?尽管 Hadoop 中的很多活动都分解成 MapReduce 和 HDFS 了,但是在这个级别上,您可能无法知道堆栈中级别更高的用户真正想做的是什么,或者甚至不知道用户是谁。这类似于显示一些磁盘段 I/O 操作,而不是一个数据库的审计跟踪。因此,只有提供不同级别的监控,才有可能理解活动,才能够审计直接通过堆栈中的较低点进入的活动。

Hadoop 活动监控

可被监控的事件包括:

  • 会话和用户信息。
  • HDFS 操作 – 命令(cat、tail、chmod、chown、expunge,等等)。
  • MapReduce 作业 - 作业、操作、权限。
  • 异常,比如授权故障。
  • Hive/HBase 查询 - 改变、计数、创建、删除、获取、放置、列出,等等。

以下示例描述了如何在 InfoSphere Guardium 报告中显示一些简单的 Hadoop 命令。

术语

如果您刚接触 InfoSphere Guardium,那么可能会对关系数据库术语偶尔用于报告和策略规则中而感到惊讶。尽管 SQL 并不用于文件系统数据,但是使用常用术语会使 Guardium 提供一个跨数据库的活动视图。

HBase:以下是 HBase 中的一个 Craete 命令:

create ‘test_hbase’, ‘test_col’

InfoSphere Guardium 将显示流入 HBase 的实际命令,如图 3 所示。

图 3. HBase 报告
该报告突出显示了 command __HBASE createTable 命令和相关参数。

HDFS:以下是 Hadoop 中的一个简单的 -ls 命令:

hadoop fs –ls,如图 4 所示。

图 4. HDFS ls 命令
该报告显示了 HDFS getlisting 和 HDFS file info 命令。

您可以看到,该命令在内部被分解成 2 个不同命令来获取清单和相关文件信息。

这个看似简单的活动监控背后是一个功能强大且灵活的基础架构,可用于策略配置和报告。例如,在本文的稍后部分中,您将学习如何创建一个策略,该策略将记录一个事件,当未知用户访问敏感数据时向您发出警报。您也可以创建一个审计报告,帮助您探测新建应用程序或未知应用程序何时访问 Hadoop 数据。

快速启动 IBM InfoSphere BigInsights 活动监控

IBM InfoSphere BigInsights 包括一个集成功能,称为 Guardium Proxy,可读取日志消息并发送到 InfoSphere Guardium 用于分析和报告。有了这个代理,BigInsights 就可以将消息从 Hadoop 日志发送到 InfoSphere Guardium 收集器。

该代理的优势包括以下几点:

  • 易于启动和运行。不需要安装 S-TAP 或配置端口。只需要在 NameNode 启用代理就可以使用了。
  • 由于代理使用 Apache 日志数据作为消息发送到 InfoSphere Guardium,所以需要从消息(例如状态和心跳信息)中过滤的噪音就很少。
  • Guardium 对支持新版的 BigInsights 利用消息协议变更不存在延迟。

限制:由于 Hadoop 没有将异常记录到其日志中,所以没有办法将异常发送到 InfoSphere Guardium。如果您需要异常报告,那就需要实现一个 S-TAP。除此之外,不支持监控 HBase 或 Hive 查询,但您将可以从 Hive 和 HBase 看到基础的 MapReduce 或 HDFS 消息。

如果您对在 InfoSphere BigInsights 中通过使用 Guardium Proxy 开始入门感兴趣,请参阅 附录 A,其中提供了启用 Hadoop 服务代理的配置说明。


先决条件

以下部分介绍了 InfoSphere Guardium 和 Cloudera Hadoop 两方面的需求。

InfoSphere Guardium 安全性和合规性解决方案

IBM InfoSphere Guardium 解决方案提供以下产品:

  • 硬件产品 - 一个配置完整的软件解决方案,在 IBM 提供的物理设备上交付。
  • 软件产品 – 解决方案作为软件映像交付,既可直接部署在自己的硬件上,也可作为一个虚拟设备部署。

为了监控 Hadoop 环境,您必须有一个作为收集器配置的补丁级别为 2 的 InfoSphere Guardium Appliance V9.0(硬件或软件),以及 InfoSphere Guardium Standard Activity Monitor for Hadoop 软件授权。尝试监控 Hadoop 之前,请确保检查 IBM 支持站点获取可能需要的其他补丁。

随着系统的增长,您也可以获得作为中央管理器和聚合器配置的设备,该设备将通过一个基于 Web 的控制台提供多个收集器的集中式管理,这会从多个收集器有效创建一个联邦系统。您可以使用该系统集中管理安全性策略和设备设置,比如归档调度、补丁安装、用户管理等。该系统也可聚合来自多个收集器的原始数据和报告,从而生成整体的、企业级审计报告。

本文不对 IBM InfoSphere Guardium 设备的安装和配置进行介绍,而且假设您至少有一个设备连接到网络上的 Hadoop 集群。

Cloudera

InfoSphere Guardium 支持下列在 Red Hat 或 SUSE Linux 上运行的 Cloudera 级别的监控:

  • CDH3 - 更新 2、3 和 4。
  • CDH4。
  • 对于 Hive,使用 MySQL 作为 Beeswax 数据库。对于只在 MySQL 中使用的 Beeswax 报告,InfoSphere Guardium 依赖一个特定的消息格式。

在 ibm.com 上查阅 InfoSphere Guardium 系统需求信息,了解 Cloudera 受支持的版本级别或其他受支持的 Hadoop 版本的更新。

IBM InfoSphere BigInsights

IBM InfoSphere Big Insights 1.4 或更新版。IBM InfoSphere Guardium 也支持在 Cloudera 上覆盖安装。


配置数据活动监控

安装和配置需要如下步骤:

  1. 计划 – 确保您对自己的 Hadoop 集群(包括 IP 地址和相关的端口号)的网络架构有一个很好的理解。
  2. 安装 S-TAP 并在适当的 Hadoop 节点上配置检测引擎。
  3. 验证 此活动是否受监控,通过创建和检查活动报告来验证。
  4. 安装一个安全策略

计划

计划步骤对于 InfoSphere Guardium 和 Hadoop 的成功集成至关重要。以下小节将提供架构的高度概述,为您提供所需要的理解。

建议:对于初步部署,考虑仅从支持一个特定业务需求的最简单配置开始,然后再进行扩展。例如,开始仅满足监控 HDFS 和 MapReduce 以及验证配置的需求,然后根据需要扩展到包含 Hive HBase。

图 5 向您显示了需要特别在集群中的哪个地方安装特定于操作系统的 S-TAPs,从而完全监控 InfoSphere Guardium 提供的覆盖范围。

图 5. 监控 Hadoop 堆栈所需的 STAP
Hive 服务器、作业跟踪器、hdfs 名称节点,以及 hbase 主机上所需的 STAPS。地区可选为 hbase puts。

IBM InfoSphere Guardium 提供一个集中的解决方案,可使用 Guardium Installation Manager 安装和更新多个 S-TAP,从而使 S-TAP 管理更简单、更加自动化。

注意:对于从节点,HBase Region Servers 监控插入 (HBase Puts) 仅需要 S-TAP。

您在相关节点上安装了特定于操作系统的 S-TAP 之后,就可以通过为该 S-TAP 定义所谓的检测引擎来配置 S-TAP 将要监控的端口。这些检测引擎也有与其相关的特定监控协议。S-TAP 拦截网络数据包,进行复制,然后执行一些解析和分析,并将信息发送给 InfoSphere Guardium Collector 以进行进一步解析、分析并存储在 InfoSphere Guardium Collector 本地数据库中。

在进行下一步之前,检查以下几个方面:

  • 确保您正在运行一个 Cloudera 或 InfoSphere BigInsights 支持的版本。
  • 确保您知道 InfoSphere Guardium Collector(s) 的 IP 地址,该地址将接收从 Hadoop 集群采集的流量。
  • 确保您知道服务器的 IP 地址,在该服务器上需要 S-TAP。
  • 根据表 1 和 表 2 中的信息,记下将要监控的端口以及这些端口应用到的主机。本文基于 Cloudera 默认端口上的端口设置,该默认端口通常与 IBM BigInsights 是相同的。您的具体配置可能会稍有不同。
表 1. 要监控的 Hadoop 服务端口
服务端口
HDFS Name Node8020、50470 和 50070
Hue (NameNode) 专用的 HDFS Thrift 插件10090
MapReduce Job Tracker8021、9290 和 50030
HBase Master60000 和 60010
HBase Region60020
HBase Thrift 插件9090
Hive Server10000
Beedwax Server8002
Cloudera Manager Agent9001

安装 S-TAP 并配置检测引擎

S-TAP 是特定于操作系统的,因此,您将需要为每个适当的节点安装 Red Hat 或 SUSE Linux S-TAP。该流程在 InfoSphere Guardium S-TAP 帮助手册中有良好的文档记录,也可以使用 InfoSphere Guardium Installation Manager 完成,或使用一个非交互式安装流程,让您使用同一命令在多个节点上进行安装。

接下来,您需要配置适合该节点以及被监控服务的检测引擎。检测引擎是您指出哪个协议用于监控 (Hadoop),以及定义监控哪个端口的地方。表 1 显示了 Cloudera 默认使用以及 InfoSphere Guardium 可以监控的端口的一段摘要。您的具体端口可能会稍有不同。

表 2 向您展示了本文中用于配置 Hadoop 集群的信息,而且基于默认的 Cloudera 端口。

表 2. 使用需要监控的 Hadoop 服务端口配置 Hadoop 集群
所用检测引擎协议端口范围KTAP DB Real 端口
HDFS、Job Tracker、Beeswax 服务器HADOOP8000-80218021
MapReduce Master 和 Thrift 插件HADOOP9000-9291929l
Hive Server 和用于 Hue 的 HDFS Thrift 插件HADOOP10000-1009010090
HDFS Name NodesHADOOP50010-5047050470l
HBase MasterHADOOP60000-6001060010
HBase RegionHADOOP60020-6002060020l

建议:您可以为每个服务器指定多个检测引擎;如果协议相同的话您应该这样做;而且您应该避免为检测引擎配置太大的端口范围。最好的做法是不要配置很多不需要的端口,因为这会为 InfoSphere Guardium 组件带来额外开销,这将需要分析不相关的流量。然而,为了简单起见,您可能需要在一些有意义的检测引擎上包括端口范围。

您可以从用户界面添加检测引擎:Administration Console >Local Taps >S-TAP Control >Add Inspection Engine

或者您可以使用一个 API create_stap_inspection_engine。查阅 附录 B 获取示例 API 命令,可用这些命令来通过默认端口创建检测引擎。

图 6 显示了一些经过定义的检测引擎示例。

图 6. 几个 Hadoop 检测引擎样例
该图显示了端口范围为 8000-8021 和 9000-9021 的检测引擎以及 hadoop 协议。

可以在 S-TAP 帮助文档中阅读更多关于检测引擎配置字段的信息,可在网上找到该帮助文档。不过,下面是一些关键字段的总结。

  • Protocol:将被 (Hadoop) 监控的数据源类型,该选项作为下拉菜单提供。
  • Port Range:该检测引擎监控的端口范围。如上所述,尽可能限制这个范围。在本文中,可用端口分成密切对应的组,比如 9000 左右或 5000 左右。
  • K-TAP real port:该参数应该只设置为检测引擎端口范围的最后一个。如果只定义了一个端口,那么将 K-TAP real port 设置为同一个。
  • Client IP Addresses/Masks:每个检测引擎监控一个或多个客户端和服务器 IP 地址之间的流量。该字段充当过滤器,定义和限制将要监控的客户端。例如,您可能有一些不需要审计的可信客户端,可以提前过滤出这些客户端,这样可以减少收集器上的整体工作负载。IP 地址是一个单一位置,而掩码作为通配符允许您定义一个 IP 地址范围。掩码 255.255.255.255(没有零位元)只识别 IP 地址指定的单个地址。在本文中,客户和掩码都使用 0.0.0.0,因此所有客户端都将受到监控。
  • Connect to IP:用来连接到受监控数据源的 S-TAP IP 地址。对于 Hadoop,可以使用默认值 127.0.0.1。
  • Process name:对于 Hadoop 配置,您不需要该参数。

验证活动是否受到监控

作为一个管理员,导航到 InfoSphere Guardium Web 控制台的 System View 选项卡,并确保 Hadoop 集群的 S-TAP 是活动的,且显示为绿色,这表示 S-TAP 连接到 InfoSphere Guardium 收集器。图 7 显示了一个主机可能出现的状态。

图 7. S-TAP 状态监控
该图显示端口范围为 8000-8021 和 9000-9021 的检测引擎以及 hadoop 协议。

验证了 S-TAP 在所有可以节点上配置正确之后,应该可以捕获在系统上运行的任何工作。您可以运行一个 shell 命令或样例 wordcount 作业来验证是否看到了数据。在这两种情况下,需要使用 InfoSphere Guardium 下钻报告 (drill-down reports)(可从用户 View 选项卡获取),或者创建自己的报告来查看该活动。

关于 Hadoop 报告的更多细节在 InfoSphere Guardium 包含的 Hadoop 报告 小节中进行了详细介绍。为了验证,本文将介绍如何使用可供安全管理员使用的下钻报告,在该系统上为安全管理员分配了用户角色。

当您以用户身份登录时,单击 View 选项卡,将看到一个图,如图 8 所示,双击此图向下钻取到详细信息。

图 8. 向下钻取到详细信息
该图显示了 hadoop、mysql http 和 mssql..

有许多获得数据的方法。图 9 显示了一个样例下钻。

图 9. 样例下钻
通过客户端 ip 从服务器类型、服务器 ip、客户端 ip 和完整的 sql 下钻

当单击报告中的任何一行时,会出现一个选项菜单,可根据想要查看的下一级报告从中进行选择。


InfoSphere Guardium 包含的 Hadoop 报告

InfoSphere Guardium 包括几个开箱即用的 Hadoop 报告,具体内容如下:

  • 供 BigInsights 和 Cloudera 使用的 MapReduce 活动。
  • Unauthorized MapReduce 作业。
  • Hue/Beeswax 活动。
  • HDFS、HBase 和 Hive 活动。
  • 异常报告。

如果作为一个用户登录,单击 View 选项卡会发现预定义的报告。在左边的导航面板上单击 Hadoop,该位置就会列出报告。

如果作为 Admin 登录,则需要将报告添加到控制台上。下列步骤假设在您的控制台上已定义了一个 My New Reports 选项卡,而且您是作为管理员登录的。

  1. 导航到 Tools>Report Building>Report Builder
  2. 在报告标题部分中,使用下拉菜单定位其中一个报告,比如 Hadoop - Hue/Beeswax 报告,然后单击 Search
  3. 在报告搜索结果窗口中,单击 Add to My New Reports 按钮,如图 10 所示。
    图 10. 将报告添加到 My New Reports 面板
    搜索结果中的 Hue-Beeswax 报告。单击 add to my new reports 按钮将其添加到面板...
  4. 现在,您可以在 Beeswax 中使用 Hue 运行一个命令并查看报告。例如,在本文中,输入下列 Hive 命令,如图 11 所示。
    图 11. 在 Beeswax 中提交一个查询
    该图显示了在客户端上显示的上述查询
  5. 转到 Hue/Beeswax 报告,您将可能看到出现 No data found。这是因为您需要指定一些运行时参数来告诉系统要显示什么。要实现这一点,单击铅笔图标自定义报告查询,如图 12 所示。
    图 12. 在 Beeswax 中提交一个查询
    单击右上角的铅笔图标自定义查询并指定搜索参数. .
  6. 为查询的起始日期和结束日期添加一个时间周期(根据您的工作负载,您可能想要选择一个较小的值,也许是几小时或是一天),并为 SQL 和 Table_Name 字段的 LIKE 字段添加百分比符号或其他搜索参数,如图 13 所示。
    图 13. 为 Hue/Beeswax 报告指定运行时参数
    为查询的结束和起始数据添加信息,并为完整的 SQL 和表名称 LIKE 参数添加 %。
  7. 现在,您应该可以看到一些数据出现在报告中,如图 14 所示。
    图 14. Hue/Beeswax 报告
    该报告显示了在 select * from sample07 和 select * from wordcount 之后有一个 get_table. .
  8. 现在,对 MapReduce 报告执行同样的步骤(如果您是 admin 用户):
    1. 导航到 Tools>Report Building>Report Builder
    2. 搜索 MapReduce 报告。
    3. 添加一个报告面板。
    4. 编辑报告以添加运行时参数。
  9. 运行一个 MapReduce 作业。本文使用 Cloudera 中的样例字数统计程序,运行 wordcount 的语法是:bin/hadoop jar hadoop-*-examples.jar wordcount in-dir out-dir
  10. 在本文中,运行的是以下命令:hadoop jar hadoop-0.20.2-cdh3u4-examples.jar wordcount/user/svoruga /user/svoruga/wc100。您可以看到一个报告,如图 15 所示。
    图 15. MapReduce 报告
    mapreduce 报告,高亮部分显示更多消息细节。

    (查看图 15 的 放大图。)

    正如您所看到的,本文中通过自定义查询参数来指定消息 (Full SQL) 中的惟一活动(svorugaword%count 出现在其中)需要返回到报告中。

故障排除

InfoSphere Guardium Hue/Beeswax 报告假设使用 Thrift 消息格式和 MySQL 数据库。如果您使用的是 MySQL,那么您的 Hue/Beeswax 报告仍然不能显示数据,可能需要将 Beeswax 配置为使用端口 8002,如下所示,在本文的系统示例中,该端口为 Thrift 所用。

  1. 导航到 Hue .ini 文件:
    • 对于 CDH3,执行 /etc/hue/hue-beeswax.ini
    • 对于 CDH4,执行 /etc/hue/hue/ini,其中 -hadoop *examples.jar "* 在 /user/lib/hadoop 目录下。替换为正确的 jar 文件。
      in-dir 是放置输入文件的 HDFS 目录。
      out-dir 是放置输出文件的 HDFS 目录。
  2. 取消对下列行的注释:
    beeswax_server_port=8002
  3. 使用以下命令停止并重启 hue:
    • /etc/init.d/hue stop
    • /etc/init.d/hue start

安装一个安全策略

在 InfoSphere Guardium 中,安全策略包含一个有序的规则集,适用于客户端和服务器之间的观察的流量。结合使用一个或多个规则可以创建一个策略,在本文中,对于 Hadoop 安全策略,定义了访问规则,这些规则有助于减少将被记录到 InfoSphere Guardium 收集器的流量。

建议:不要修改样例策略。相反,创建一个副本然后使用该副本作为进行修改的基础。

要访问 Hadoop Policy 并创建一个副本,执行以下操作。

  1. 以管理员身份登录并导航到 Tools>Config & Control>Policy Builder
  2. Policy Finder 中,选择 Hadoop Policy,然后单击 Clone 按钮。
  3. 为策略输入一个新名称,然后单击 Save

要安装一个策略,执行以下操作。

  1. 以管理员身份登录并导航到 Administration Console > Configuration > Policy Installation
  2. 选择所创建的 Hadoop policy 副本,然后选择适当的安装操作。查看在线帮助手册,获取有关策略安装的更多信息,以及采用多个策略的影响。

Hadoop Policy 规则如图 16 所示。单击加号查看更多细节,可以通过单击铅笔按钮来编辑该规则。

图 16. 样例 Hadoop 策略中的规则
下面文本中描述了 3 个规则。

下面是对策略中每个规则的总结。

  • 访问规则:Low Interest Objects:Allow

    图 17 显示了规则定义。

    图 17. Hadoop 的 Low Interest Objects 规则
    该策略显示了一个名为 Hadoopskipobjects 的组,并指出该组的构建者 idcon。还显示了支持的操作。

    下面是该策略中值得注意的 2 个主要条款。

    • 一组对象的一个定义(比如用户偏好)不太可能让人感兴趣。如果单击组构建者图标,则可以看到 HadoopSkipObjects 组的部分对象,如图 18 所示。
      图 18. Hadoop 的 Low Interest Objects 规则
      该策略显示了一个名为 Hadoopskipobjects 的组,并指出该组的构建者 idcon。还显示了支持的操作。
      您可以根据需要修改该组。
    • Allow 操作意味着这些对象的策略违规将不会被记录,而且也不考虑对它们进行进一步分析。
  • 访问规则:Low Interest Commands:Allow

    类似于上述规则,但是专用于命令。

  • 访问规则:Filter based on Server IP:Log Full Details

    该规则支持过滤来自非 Hadoop 服务器的活动,这些服务器使用相同的 Guardium Collector。

重要事项:您必须 修改 Not Hadoop Servers 组来包括想要过滤掉的所有服务器的 IP。如果没有这样的服务器,那么输入一个虚拟 IP,但不能是 0.0.0.0。如果没有对该组进行任何操作,那么您的报告将不能正常工作。


您能做的很酷的事

您可以使用 InfoSphere Guardium 帮助您满足 Hadoop 审计和合规性需求,下面是其中的一些关键事项。本节将介绍如何回答本文开头所提出的问题。

当未授权用户访问敏感数据时请告诉我

有许多不同的规则,您可以用来创建帮助执行审计需求的策略。

技巧:如果将一些规则添加到 Hadoop 策略副本中,务必确保前一个规则选中 Continue to next rule。否则,永远不可能对新规则进行评估。

图 19 显示了一条规则,其中两个组具有如下定义。

  • 已知 Hadoop 用户
  • 已知敏感数据对象/文件
图 19. 访问敏感文件的示例策略规则
该规则包括拒绝 Hadoop Users。包括 Sensitive Hadoop 对象组。

该规则有一个已知用户拒绝行为,这意味着如果不属于已知组的用户访问那些敏感文件,则会记录下用户信息,您可以在事故报告中查看这些事件以便进一步调查。如果事实证明访问是合法的,就可以将该用户添加到已知组。

当新的 MapReduce 作业使用该系统时请告诉我

很多企业都很关注跟踪访问其数据的新应用程序,而且一个自动化报告可以帮助您实现这一点。InfoSphere Guardium 提供一个未授权的 MapReduce 作业报告,您可以通过自定义来帮助确定新的 MapReduce 作业何时进入系统。

您可以安排该报告作为审计流程的一部分在后台定期运行。这就使得当新作业进入系统时您就能得到通知,这样就可以对它们进行检查,如果合适的话就添加到授权作业列表。

设置这个报告需要进行一些配置。需要创建和自定义一个名为 Hadoop Authorized Job List 的组。您需要:

  1. 创建一个组,并使用系统中的已知授权作业列表填充该组。
  2. 为该组分配角色,以便使组织中的相关人员在构建报告过程中查看和使用该组。
  3. 自定义 Hadoop-Unauthorized MapReduce Jobs 报告,作为一个运行时参数包括该组。

以下是有关如何配置该组的详细步骤:

  1. 从管理控制台中,转到 Tools > Config and Control > Group Builder。或者,如果是以用户身份登录的,转到 Monitor/Audit > Build Reports> Group Builder,然后单击 Next
  2. Create New Group 字段中,将 Public 指定为应用程序类型,并为其命名(比如 Hadoop Authorized Job List),然后从 Group Type Description 下拉列表中选择 OBJECTS,如 图 20 所示。单击 Add 按钮。
    图 20. 为新组命名
    该字段描述了 din 文本
  3. 在 Manage Members 面板中,在 Create & add new members 字段中输入一个 MapReduce 作业名,然后单击 Add 将该成员添加到组中。继续添加名称,如 图 21 所示。当完成添加 MapReduce 作业名称时,单击 Back 按钮。
    图 21. 使用授权作业填充该组
    该图显示了向列表添加 sortlines 和 wordcount 的填充过程。
  4. 在 Group Builder 中,在 Modify Existing Group 列表中找到您的组,然后单击 Roles 按钮,如 图 22 所示。
    图 22. 将角色与组相关联
    该图显示了选中的 Roles 按钮
  5. 选择您希望能够使用该组的角色。在这里我们只需选择 All Roles,如 图 23 所示。单击 Apply 按钮。
    图 23. 指出哪些角色可以使用该组
    该图显示了选中的 All Roles。还有其他复选框可供选择特定角色

现在,您已经完成了创建 Hadoop Authorized Job List 组的任务,可以进行下一项任务了,就是将其与该报告相关联。

  1. 正如 包含 InfoSphere Guardium 的 Hadoop 报告 中所述,如果作为一个用户登录,通过单击 View 选项卡就可以找到预定义的报告。在左侧导航面板中,单击 Hadoop,报告在此列出。
  2. 单击 Hadoop – Unauthorized MapReduce Jobs。可能会显示 “No data found”。单击铅笔按钮自定义该报告,如 图 24 所示。
    图 24. 自定义报告
    单击报告右上角的铅笔按钮..
  3. 从列表中选择组名,如 图 25 所示。确保日期参数包含一个时间段,您认为在这段时间里您至少会查看一组结果以验证该报告是否运行。然后单击 Update 按钮。
    图 25. 将组添加到报告运行时参数
    该图显示了添加到报告运行时参数的授权组列表。
  4. 从左侧导航面板中,再次单击 Hadoop – Unauthorized MapReduce Jobs 报告。该报告应该使用来自其他报告(不在您的授权作业组中)的数据进行填充,报告摘录如 图 26 所示,其中您可以看到显示一个名为 PiEstimator 的作业,因为该作业不在授权作业列表中。
    图 26. 包含来自非授权组作业的活动的报告
    来自一个名为 PiEstator 的作业的活动。

如果有数量异常的文件权限错误请告诉我

InfoSphere Guardium 包括 Hadoop 开箱即用的异常报告。例如,如果作为一个用户登录,可以转到 View > Hadoop > Hadoop - Exception Report 查看开箱即用的报告,这类似于 图 27 所示。

图 27. 样例 Hadoop 异常报告
该图显示两个具有错误 101 的文件授权异常

您也可以根据用于该报告的相同查询创建一个警报。有了警报,当特定条件阈值(比如文件权限异常)超过某一限制时,就会发送一个电子邮件。

您也可以选择将该警报记录为一个策略违规,这个策略违规将该警报放在 InfoSphere Guardium Web 控制台的 Incident Management 选项卡上。

以下是一些高级步骤,可创建异常查询并在警报中启用。

  1. 导航到 Alert Builder:
    • 对于管理员,转到 Tools> Config and Control> Alert Builder
    • 对于用户,转到 Protect> Correlation Alert> Alert Builder
  2. 从 Alert Finder 中,单击 New
  3. 在 Add Alert 界面的 Query Definition 部分中,从下拉菜单中选择 Hadoop – Exception Report ,如 图 28 所示,并填写警报需求的其余部分。
    图 28. 使用异常报告查询构建警报
    该图高亮显示了名为 Hadoop -Exception 报告的下拉菜单

图 29 是为本文创建的一个警报示例,该示例将文件授权异常指定为异常 101。

图 29. 警报构建程序
构建程序记录检查出的策略违规,teh 查询是 hadoop 异常报告。并选中 exceptionno 字符串 101。

注意,警报是作为一个策略违规进行记录的,所以触发的任何警报也出现在 Incident Management 选项卡上。另外,注意示例底部,警报触发时管理员 Divid Roz 将至少收到一封邮件。


结束语

希望您会喜欢这次通过 InfoSphere Guardium 保护 Cloudera Hadoop 环境的旅程。如果您正在使用或评估 Hadoop,或考虑关于其部署的一个安全策略,那么我们认为本文提供的信息可帮助您思考您需要什么以及 InfoSphere Guardium 如何帮助您。现有的 Guardium 用户可以轻松地将其当前的数据安全性和审计流程扩展为包括 Hadoop。

致谢

作者谨感谢以下所有人,没有他们本文就不可能与大家见面:

  • David Rozenblat,花费了很多时间帮助我们构建报告和策略,并提供了管理支持。
  • Joe DiPietro,为我们提供了需要解决的示例业务问题。
  • Ury Segal,负责技术指导。

附录 A:在 IBM InfoSphere BigInsights 中配置 Guardium 代理

本附录介绍在 IBM InfoSphere BigInsights 中启用 Guardium Proxy 来将相关日志消息的副本发送到 InfoSphere Guardium 的步骤。

图 30 显示了解决方案的架构。

图 30. 将日志消息发送到 Guardium Proxy,然后转发到 Guardium Collector
该图显示了来自 oozie、hdfs、mapreduce 的消息,这些消息通过代理发送到该收集器。收集器发送回 ping 消息..

您需要启用 Guardium Proxy,然后在 log4j 属性文件上跨集群配置 Guardium Proxy 日志附加器,以便将所记录的事件发送给 NameNode 上的 Guardium Proxy。日志事件通过一个套接字连接发送。该套接字连接使用端口 16015。然后,代理将这些消息转发到 InfoSphere Guardium 收集器(默认端口为 16016),该收集器将在 Guardium 内部表中解析并存储这些消息以便用于报告、警报等。

以下步骤被用于配置该解决方案。

  1. 计划集成
  2. 启用集成
  3. 配置 log4j.properties 文件,然后跨集群同步属性
  4. 在 NameNode 上启动 GuardiumProxy,然后重启 Hadoop
  5. 验证配置

计划配置

在进行下一步之前,检查以下信息。

  • 确保运行的是适当级别的 IBM BigInsights:IBM BigInsights 1.4 或更高版本(只有企业版)。
  • 确保您知道 InfoSphere Guardium 收集器 IP 地址和 Hadoop 集群的 NameNode。
  • 确保您有权修改 BigInsights 属性和日志文件设置;也就是说,您需要 biadmin 授权。

启用集成

更改任何属性文件之前,必须停止所有的 BigInsights 服务。实现这一点的脚本位于 $BIGINSIGHTS_HOME/bin 中。

  • stop-all.sh 将停止所有的 Hadoop 服务
  • stop.sh hadoop oozie 将停止 Hadoop 和 Oozie 服务

要启用或禁用 IBM BigInsights 和 InfoSphere Guardium 之间的集成,使用以下文件:
$BIGINSIGHTS_HOME/conf/guardiumproxy.properties

  • guardiumproxy.enable:默认值为 yes。改为 yes 以启用 IBM BigInsights 和 InfoSphere Guardium 之间的集成。
  • guardiumproxy.host:Guardium 代理将在其中运行的主机。当安装了 BigInsights 时,默认是名称节点。不需要改变,除非您想在集群中的其他主机上运行。
  • guardiumproxy.port:Guardium 代理将要监听的端口。该值设置为 16015。这是默认值。
  • guardium.server:InfoSphere Guardium 收集器的 IP 地址。
  • guardium.server.port:Guardium 收集器将要监听的端口。该值设置为 16016。这是默认值。

下面是一个样例代理文件。

清单 1. IBM InfoSphere BigInsights 的 Guardium 代理文件
# Flag to enable or disable guardium proxy. Turn off this switch, user won't be 
# able to start guardium proxy. If turn it on, run start.sh guardiumproxy to start 
# proxy on Biginsights NameNode ( by default on hdfs, other FS uses jobtracker ), 
# it communicates the guardium server defined in guardium.server, 
# sends messages to the server. 
# After start guardium proxy, log4j.properties files in hadoop/oozie component must be 
# updated based on the template, then restart hadoop/oozie. 
guardiumproxy.enable=yes
                
# The hostname or ip address a guardium proxy instance will be running on, only one host
# can be specified for this property.
guardiumproxy.host=hadoop-bigi-node01.guard.nnn.nnnn.ibm.com
                
# The port guardium proxy will be listening on.
guardiumproxy.host.port=16015
                
# The maximum size in megabyte the message queue in guardiumproxy will approx. use, 
#   audit log events arriving at guardium proxy will be dropped if queue is full.
# Recommended default: 100 MB
guardiumproxy.queue.maxsize=100
                
# The timeout in seconds the guardium proxy will wait in case of a 
# refused or lost connection to the Guardium server.
# Recommended default: 60 seconds
guardiumproxy.reconnection_timeout=60
                
# The timeout in seconds until a background script restarts a guardium proxy
# (JVM) in case it terminated.
# Recommended default: 600 seconds
guardiumproxy.restart_timeout=600
                
# The log4j logging level on which the guardiumproxy will log about such 
# events like connection status and failures
#   set to DEBUG to retrieve information for each processed audit log, 
# but use INFO in productive mode
#   valid values are FATAL, ERROR, WARN, INFO, DEBUG
# Recommended default: INFO
#guardiumproxy.loglevel=DEBUG
guardiumproxy.loglevel=INFO
                
# The host name or ip address where a guardium server is running. 
# ake sure the guardiumproxy.host  can connect to the server host.
guardium.server=nnnn.guard.nnn.nnnn.ibm.com
                
# The port guardium server is listening on.
guardium.server.port=16016

配置 log4j 属性文件并同步化

在这一步中,您将在 namenode 中修改两个 log4j 属性文件,以通知 BigInsights 要将哪些日志消息(Guardium 代理)发送给 Guardium,然后跨集群同步这些更改。两个要修改的文件是:

  • 对于 HDFS、MapReduce 和 Hadoop RPC,修改:$BIGINSIGHTS_HOME/hdm/hadoop-conf-staging/log4j,如 清单 2 所示。
  • 对于 Oozie,修改:$BIGINSINGHTS_HOME/hdm/components/oozie/conf/oozie-log4j.properties,如 清单 3 所示。

在这两种情况下,您都需要验证 Guardium 代理将监听的端口号 (16015),以及 NameNode(假设您使用默认配置,具有在 NameNode 上运行的 Guardium 代理)的 IP 地址。在这两个文件中,您将需要取消几行注释,其中有明确记录。

清单 2. HDFS、MapReduce 和 Hadoop RPC 的 BigInsights Log4j 设置
# GUARDIUM PROXY INTEGRATION - Setup for HDFS, MapReduce and Hadoop RPC
# Set up following lines
log4j.appender.GuardiumProxyAppender=org.apache.log4j.net.SocketAppender
# Set RemoteHost to cluster node (main node, the one from which you installed BI)
log4j.appender.GuardiumProxyAppender.RemoteHost=hadoop-bigi-node01.guard.swg.usma.ibm.com
# When changing the Port for cluster-intern communication with GuardiumProxy,
#   also change it in $BIGINSIGHTS_HOME/conf/guardiumproxy.properties (main node)
log4j.appender.GuardiumProxyAppender.Port=16015
log4j.appender.GuardiumProxyAppender.Threshold=INFO
# MapReduce audit log Guardium integration: Uncomment to enable
log4j.logger.org.apache.hadoop.mapred.AuditLogger=INFO, GuardiumProxyAppender
log4j.additivity.org.apache.hadoop.mapred.AuditLogger=false
# Hadoop RPC audit log Guardium integration: Uncomment to enable
log4j.logger.SecurityLogger=INFO, GuardiumProxyAppender
log4j.additivity.SecurityLogger=false
# GUARDIUM PROXY INTEGRATION - End of Setup
清单 3. Oozie 的 BigInsights Log4j 设置
# GUARDIUM PROXY INTEGRATION - Setup for HDFS, MapReduce and Hadoop RPC
# GUARDIUM PROXY INTEGRATION - Setup for Oozie
# Set up following lines
log4j.appender.GuardiumProxyAppender=org.apache.log4j.net.SocketAppender
# Set RemoteHost to cluster node (main node, the one from which you installed BI)
log4j.appender.GuardiumProxyAppender.RemoteHost=hadoop-bigi-node01.guard.swg.usma.ibm.com
# When changing the Port for cluster-intern communication with GuardiumProxy,
#   also change it in $BIGINSIGHTS_HOME/conf/guardiumproxy.properties (main node)
log4j.appender.GuardiumProxyAppender.Port=16015
log4j.appender.GuardiumProxyAppender.Threshold=INFO
# Oozie audit log Guardium integration: 
#    Switch (un)comment between lines to enable GuardiumProxyAppender for Oozie
#log4j.logger.oozieaudit=INFO, oozieaudit (make sure this line is COMMENTED OUT)
log4j.logger.oozieaudit=INFO, oozieaudit, GuardiumProxyAppender (UNCOMMENT this line)
# GUARDIUM PROXY INTEGRATION - End of Setup

同步文件:完成属性文件更新之后,转到 $BIGINSIGHTS_HOME/bin,然后运行 syncconf.sh

重启 Hadoop

您需要重启 Hadoop(以及 Guardium 代理)使更改生效。如果您在上述属性文件中正确启用了 Guardium Proxy,那么重启 Hadoop 服务将自动启动该代理。启动脚本位于 $BIGINSIGHTS_HOME/bin 中。

  • start-all.sh 将启动所有 Hadoop 服务,包括 Guardium 代理。
  • start.sh hadoop oozie guardiumproxy 将启动 Hadoop、Oozie 以及 Guardium 代理。

验证配置

您可以通过提交一个作业(包括样例作业 wordcount),并在 InfoSphere Guardium 报告中查看结果来测试配置。

通过 BigInsights Web 控制台,提交一个 wordcount 作业。查看 参考资料 部分的 BigInsights 信息中心,获取有关如何进行这一操作的更多信息

以用户身份登录到 InfoSphere Guardium Web 控制台,并选择一个 Hadoop 报告,比如 BigInsights - MapReduce。图 26 向您显示了当使用代理时 BigInsights 的一个 MapReduce 报告摘要。

图 31. BigInsights 的部分 MapReduce 报告
该图展示了突出显示的 full sql、bi 用户名以及 bi jar 和 bi 作业名。

(查看图 26 的 放大图

您可以在报告的 Full SQL 部分中查看关于权限的信息。您还可以看到报告包括关于作业名的信息、提交作业的用户名,甚至是作业的 jar 文件名。信息从完整的消息中为您解析,因为该信息是作为一个字段出现在报告中,所以您可以进行一些操作,比如在这些字段上创建警报。查看文章 本节内容 获取有关自定义报告的详细信息。


附录 B:配置检测引擎的样例 GuardAPI 命令

GuardAPI 提供从命令行访问 InfoSphere Guardium 功能的权限,这使您能够自动操作重复性任务。要想运行这些命令,您必须使用一个 CLI(命令行接口)帐户登录,并获得 admin 或 CLI 角色的授权。有关 API 的更多信息,参见 InfoSphere Guardium Appendices 在线帮助手册。

清单 4 显示了本文中用于通过 API 创建检测引擎的命令。

清单 4. 在样例环境中配置检测引擎的样例 grdapi 命令
#hdfs job tracker, hdfs name node beeswax server 
grdapi create_stap_inspection_engine client=0.0.0.0/0.0.0.0 protocol=HADOOP 
ktapDbPort=8021 portMax=8021 portMin=8000 stapHost=<My Hadoop Node IP>
                
#Mapreduce job tracker, cloudera agent and thrift plugin
grdapi create_stap_inspection_engine client=0.0.0.0/0.0.0.0 protocol=HADOOP 
ktapDbPort=9291 portMax=9291 portMin=9000 stapHost= <My Hadoop Node IP>
                
#hive server, thrift plugin
grdapi create_stap_inspection_engine client=0.0.0.0/0.0.0.0 protocol=HADOOP 
ktapDbPort=10090 portMax=10090 portMin=10000 stapHost= <My Hadoop Node IP>
                
#HDFS name node ports
grdapi create_stap_inspection_engine client=0.0.0.0/0.0.0.0 protocol=HADOOP 
ktapDbPort=50470 portMax=50470 portMin=50010 stapHost= <My Hadoop Node IP>
                
#HBase region servers
grdapi create_stap_inspection_engine client=0.0.0.0/0.0.0.0 protocol=HADOOP 
KtapDbPort=60010 portMax=60010 portMin=60000 stapHost= <My Hadoop Node IP>

您需要确保您的检测引擎正确映射到 Hadoop 节点,相应服务已安装在该节点上。在本例中,该节点是一个简单的单节点配置,所以检测引擎根据同类端口号进行分组。您的配置可能比这更复杂。


附录 C. 使用 Guardium 命令行接口 (CLI) 过滤 Hadoop 噪音

InfoSphere Guardium 有一个丰富的命令行接口。您可以使用 CLI 直接配置 Collector 的分析器组件来过滤 Hadoop 噪音,而不需要使用安全策略,方法是通过使用 store gdm_analyzer_rule new 命令指定要排除的特定 Hadoop 应用程序和模式。清单 5 中的示例显示了使用命令行过滤 HBase getServerRegion 消息。

清单 5. 使用 CLI 命令修改收集器的过滤操作
store gdm_analyzer_rule new
Please enter rule description (optional): HDP
Please enter rule type (required): 5
Please enter rule acdtion (optional. Default to 0):
Please enter active flag (optional. Default to 1):
Please enter DB protocol (required): 25
Please enter server IP (optional):
Please enter server IP mask (optional. Default to 255.255.255.255):
Please enter service name (optional):
Please enter pattern (optional): getServerRegion
Please enter format (optional): 1

感兴趣的选项包括:

  • 规则类型:Hadoop 排除规则指定为 5。
  • 规则操作:保留默认值。
  • DB 协议:Hadoop 指定为 25。
  • 模式:输入想要排除的消息格式的准确名称和案例。
  • 格式:输入 Hadoop 服务要排除的代码,值为:
    0 - HDFS
    1 - HBase
    2 - Hadoop IPC
    3 - Job Tracker

参考资料

学习

获得产品和技术

  • 使用 IBM 试用软件 构建您的下一个开发项目,可直接从 developerWorks 上下载。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=862637
ArticleTitle=通过 IBM InfoSphere Guardium 实现大数据安全性和审计
publish-date=03262013