Регулируемые отрасли и правительственные организации по всему миру доверяют Cloudera хранение и анализ петабайтов данных - очень важной или конфиденциальной информации о людях, персональных и медицинских данных, финансовых данных или просто служебной информации, конфиденциальной для самого клиента.
Любой, кто хранит информацию о клиентах, медицинскую, финансовую или конфиденциальную информацию, должен убедиться, что приняты необходимые меры для защиты этих данных, включая обнаружение и предотвращение непреднамеренного или злонамеренного доступа. Согласно исследованию Ponemon Institute, за два года в мире средний ущерб от инсайдерских угроз вырос на 31% и достиг 11,45 миллиона долларов, а частота инцидентов за тот же период увеличилась на 47%. В отчете за 2019 год указано, что компании больше всего беспокоятся о непреднамеренных нарушениях со стороны инсайдеров (71%), утечках данных из-за небрежности (65%) и злонамеренных действиях злоумышленников (60%), чем о взломанных учетных записях или машинах (9%).
Законодательные нормы GDPR, CCPA, HIPAA, PCI DSS и FIPS-200, требуют, чтобы организации принимали соответствующие меры для защиты конфиденциальной информации. Эти меры могут включать в себя три основных элемента:
Шифрование данных - в «состоянии покоя» и при передаче по сети - гарантирует, что неаутентифицированные субъекты не могут получить доступ к данным.
Контроль доступа (строгая аутентификация и авторизация) гарантирует, что пользователь – именно тот, кем он себя называет (аутентификация), и что он получит доступ только к тому, к чему ему разрешено (авторизация).
Аудит и учет - знание того, кто к чему, и когда и кто обращался, и кто менял разрешения или настройки контроля доступа; потенциально предупреждает об утечках данных по мере их возникновения, а не постфактум.
В платформе Cloudera Data Platform с помощью Cloudera Shared Data Experience (SDX) обеспечивается сквозная безопасность. В CDP:
Все «проводные» протоколы можно шифровать с использованием TLS или SASL.
Все хранимые данные можно защитить с помощью прозрачного шифрования данных HDFS (частное облако) или шифрования хранилища объектов (публичное облако).
Аутентификация пользователей как в публичном, так и в частном облаке выполняется через Kerberos/SPNEGO или SAML.
С помощью Apache Ranger (как части SDX) весь доступ к данным реализуется на базе атрибутов или на основе ролей.
Все средства управления доступом к данным проверяются с помощью Apache Ranger.
Защитный мониторинг
Эффективная программа защитного мониторинга (Protective Monitoring) может гарантировать видимость того, кто обращается или пытается получить доступ к данным: к каким данным и с каких устройств по всей своей ИТ-инфраструктуре. Это можно сделать с помощью следующих средств:
Compliance and Reporting (проверка соответствия и отчетность) - постфактум сообщает о том, кто имеет доступ к определенным активам данных.
Digital forensics and incident response (цифровая криминалистика и реагирование на инциденты) - реагирование на предписания регулирующих органов или уполномоченных по информации после выявления нарушений.
Advanced threat detection (расширенное обнаружение угроз) - мониторинг событий в реальном времени для выявления изменений в поведении на уровне доступа пользователей, на уровне активов данных или коммуникаций между системами. Некоторые платформы SIEM, такие как Securonix, включают такие возможности.
Аудит в Cloudera Data Platform
Все компоненты доступа к данным в CDP отправляют события аудита в Apache Ranger, где они хранятся и доступны для поиска в течение настраиваемого периода хранения.
Здесь мы продемонстрируем, как этот поток событий аудита можно передать на стороннюю SIEM платформу через системный журнал или локальный файл, откуда агенты SIEM могут их забрать. В этой архитектуре мы настроим подключаемый модуль для каждой из служб для экспорта событий аудита на удаленный сервер системного журнала и записи на локальный диск.
Примером удаленного сервера системного журнала, способного выполнять сложную логику фильтрации и маршрутизации, является кластер NiFi, на котором запущен процессор ListenSyslog.
Для этого настроим плагин Ranger для записи событий в log4j, а затем настроим log4j для каждой из служб, чтобы добавить файлы и приложения syslog.
HDFS
В ходе аудита HDFS проверяет все взаимодействия всех служб с файлами. Используя Cloudera Manager, мы установим следующие настройки:
HDFS Service Advanced Configuration Snippet (Safety Valve) for ranger-hdfs-audit.xml |
Name: xasecure.audit.destination.log4j Value: true Name: xasecure.audit.destination.log4j.logger Value: ranger.audit |
NameNode Logging Advanced Configuration Snippet (Safety Valve) |
log4j.appender.RANGER_AUDIT=org.apache.log4j.DailyRollingFileAppender log4j.appender.RANGER_AUDIT.File=/var/log/hadoop-hdfs/ranger-hdfs-audit.log log4j.appender.RANGER_AUDIT.layout=org.apache.log4j.PatternLayout log4j.appender.RANGER_AUDIT.layout.ConversionPattern=%m%n log4j.logger.ranger.audit=INFO,RANGER_AUDIT,SYSAUDIT log4j.appender.SYSAUDIT=org.apache.log4j.net.SyslogAppender log4j.appender.SYSAUDIT.threshold=INFO log4j.appender.SYSAUDIT.syslogHost=<sysloghost> log4j.appender.SYSAUDIT.layout=org.apache.log4j.PatternLayout log4j.appender.SYSAUDIT.layout.conversionPattern=%d{MMM dd HH:mm:ss} ${hostName}HDFS: %m%n log4j.appender.SYSAUDIT.filter.a=org.apache.log4j.varia.LevelRangeFilter log4j.appender.SYSAUDIT.filter.a.LevelMin=INFO log4j.appender.SYSAUDIT.filter.a.LevelMax=INFO |
HiveServer 2
Этот плагин будет проверять весь SQL, отправленный в HiveServer2. Конфигурация HiveServer2 использует синтаксис, отличный от синтаксиса других служб. Связано это с тем, что HiveServer2 использует Log4j2. С помощью Cloudera Manager установим следующие настройки в сервисе Hive on Tez:
Hive Service Advanced Configuration Snippet (Safety Valve) for ranger-hive-audit.xml |
Name: xasecure.audit.destination.log4j Value: true Name: xasecure.audit.destination.log4j.logger Value: ranger.audit |
HiveServer2 Logging Advanced Configuration Snippet (Safety Valve) |
appenders=console, DRFA, redactorForRootLogger, RANGERAUDIT, SYSAUDIT loggers = Ranger logger.Ranger.name = ranger.audit logger.Ranger.level = INFO logger.Ranger.appenderRefs = SYSAUDIT, RANGERAUDIT logger.Ranger.appenderRef.RANGERAUDIT.ref = RANGERAUDIT logger.Ranger.appenderRef.SYSAUDIT.ref = SYSAUDIT appender.RANGERAUDIT.type=file appender.RANGERAUDIT.name=RANGERAUDIT appender.RANGERAUDIT.fileName=/var/log/hive/ranger-audit.log appender.RANGERAUDIT.filePermissions=rwx------ appender.RANGERAUDIT.layout.type=PatternLayout appender.RANGERAUDIT.layout.pattern=%d{ISO8601} %q %5p [%t] %c{2} (%F:%M(%L)) - %m%n appender.SYSAUDIT.type=Syslog appender.SYSAUDIT.name=SYSAUDIT appender.SYSAUDIT.host = <sysloghost> appender.SYSAUDIT.port = 514 appender.SYSAUDIT.protocol = UDP appender.SYSAUDIT.layout.type=PatternLayout appender.SYSAUDIT.layout.pattern=%d{MMM dd HH:mm:ss} ${hostName} Hive: %m%n |
Impala
Демоны Impala будут регистрировать все операторы Impala SQL. Это также настраивается через Cloudera Manager:
Impala Service Advanced Configuration Snippet (Safety Valve) for ranger-impala-audit.xml |
Name: xasecure.audit.destination.log4j Value: true Name: xasecure.audit.destination.log4j.logger Value: ranger.audit |
Impala Daemon Logging Advanced Configuration Snippet (Safety Valve) |
log4j.appender.RANGER_AUDIT=org.apache.log4j.DailyRollingFileAppender log4j.appender.RANGER_AUDIT.File=/var/log/impalad/ranger-impala-audit.log log4j.appender.RANGER_AUDIT.layout=org.apache.log4j.PatternLayout log4j.appender.RANGER_AUDIT.layout.ConversionPattern=%m%n log4j.logger.ranger.audit=INFO,RANGER_AUDIT,SYSAUDIT log4j.appender.SYSAUDIT=org.apache.log4j.net.SyslogAppender log4j.appender.SYSAUDIT.threshold=INFO log4j.appender.SYSAUDIT.syslogHost=<sysloghost> log4j.appender.SYSAUDIT.layout=org.apache.log4j.PatternLayout log4j.appender.SYSAUDIT.layout.conversionPattern=%d{MMM dd HH:mm:ss} ${hostName}Impala: %m%n log4j.appender.SYSAUDIT.filter.a=org.apache.log4j.varia.LevelRangeFilter log4j.appender.SYSAUDIT.filter.a.LevelMin=INFO log4j.appender.SYSAUDIT.filter.a.LevelMax=INFO |
Solr
Сервер Solr будет регистрировать все запросы, отправленные в Solr API. Опять же, это должно быть настроено через Cloudera Manager:
Solr Service Advanced Configuration Snippet (Safety Valve) for ranger-solr-audit.xml |
Name: xasecure.audit.destination.log4j Value: true Name: xasecure.audit.destination.log4j.logger Value: ranger.audit |
Solr Server Logging Advanced Configuration Snippet (Safety Valve) |
appenders=console, DRFA, redactorForRootLogger, RANGERAUDIT, SYSAUDIT loggers = Ranger logger.Ranger.name = ranger.audit logger.Ranger.level = INFO logger.Ranger.appenderRefs = SYSAUDIT, RANGERAUDIT logger.Ranger.appenderRef.RANGERAUDIT.ref = RANGERAUDIT logger.Ranger.appenderRef.SYSAUDIT.ref = SYSAUDIT appender.RANGERAUDIT.type=file appender.RANGERAUDIT.name=RANGERAUDIT appender.RANGERAUDIT.fileName=/var/log/solr/ranger-solr.log appender.RANGERAUDIT.filePermissions=rwx------ appender.RANGERAUDIT.layout.type=PatternLayout appender.RANGERAUDIT.layout.pattern=%d{ISO8601} %q %5p [%t] %c{2} (%F:%M(%L)) - %m%n appender.SYSAUDIT.type=Syslog appender.SYSAUDIT.name=SYSAUDIT appender.SYSAUDIT.host = <sysloghost> appender.SYSAUDIT.port = 514 appender.SYSAUDIT.protocol = UDP appender.SYSAUDIT.layout.type=PatternLayout appender.SYSAUDIT.layout.pattern=%d{MMM dd HH:mm:ss} ${hostName} Solr: %m%n |
Hue
Hue в настоящее время не интегрирован с Ranger, однако может отслеживать события в файле, включая события входа в систему и загрузку пользователями результатов запросов. Это можно включить через Cloudera Manager:
Hue Service Advanced Configuration Snippet (Safety Valve) for hue_safety_valve.ini |
[desktop] audit_event_log_dir=/var/log/hue/audit/hue-audit.log |
Пример вывода
После настройки этих параметров мы можем проверить, правильно ли отправляются события.
Следующие события были записаны сервером Rsyslog, запущенным на удаленном сервере с пользовательской конфигурацией:
HDFS
2021-05-04T03:25:36-07:00 host1.example.com HDFS: {"repoType":1,"repo":"cm_hdfs","reqUser":"teststd","evtTime":"2021-05-04 03:25:35.069","access":"open","resource":"/tstest/testfile2","resType":"path","action":"read","result":1,"agent":"hdfs","policy":-1,"reason":"/tstest/testfile2","enforcer":"hadoop-acl","cliIP":"172.27.172.2","reqData":"open/CLI","agentHost":"host1.example.com","logType":"RangerAudit","id":"41a20548-c55d-4169-ac80-09c1cca8265e-0","seq_num":1,"event_count":1,"event_dur_ms":1,"tags":[],"additional_info":"{\"remote-ip-address\":172.27.172.2, \"forwarded-ip-addresses\":[], \"accessTypes\":[read]","cluster_name":"CDP PvC Base Single-node Cluster"}
2021-05-04T03:29:27-07:00 host1.example.com HDFS: {"repoType":1,"repo":"cm_hdfs","reqUser":"teststd","evtTime":"2021-05-04 03:29:22.375","access":"open","resource":"/tstest/testfile3","resType":"path","action":"read","result":0,"agent":"hdfs","policy":-1,"reason":"/tstest/testfile3","enforcer":"hadoop-acl","cliIP":"172.27.172.2","reqData":"open/CLI","agentHost":"host1.example.com","logType":"RangerAudit","id":"e6806644-1b66-4066-ae0d-7f9d0023fbbb-0","seq_num":1,"event_count":1,"event_dur_ms":1,"tags":[],"additional_info":"{\"remote-ip-address\":172.27.172.2, \"forwarded-ip-addresses\":[], \"accessTypes\":[read]","cluster_name":"CDP PvC Base Single-node Cluster"}
В приведенном выше примере было отказано во втором доступе (результат: 0).
Hive
2021-05-04T03:35:25-07:00 host1.example.com Hive: {"repoType":3,"repo":"cm_hive","reqUser":"admin","evtTime":"2021-05-04 03:35:23.220","access":"SELECT","resource":"default/sample_07/description,salary","resType":"@column","action":"select","result":1,"agent":"hiveServer2","policy":8,"enforcer":"ranger-acl","sess":"303bbfbe-3538-4ebe-ab48-c52c80f23a35","cliType":"HIVESERVER2","cliIP":"172.27.172.2","reqData":"SELECT sample_07.description, sample_07.salary\r\nFROM\r\n sample_07\r\nWHERE\r\n( sample_07.salary \u003e 100000)\r\nORDER BY sample_07.salary DESC\r\nLIMIT 1000","agentHost":"host1.example.com","logType":"RangerAudit","id":"b6903fd2-49bd-4c8e-bad6-667ae406f301-0","seq_num":1,"event_count":1,"event_dur_ms":1,"tags":[],"additional_info":"{\"remote-ip-address\":172.27.172.2, \"forwarded-ip-addresses\":[]","cluster_name":"CDP PvC Base Single-node Cluster","policy_version":1}
Impala
2021-05-04T03:32:01-07:00 host1.example.com Impala: {"repoType":3,"repo":"cm_hive","reqUser":"admin","evtTime":"2021-05-04 03:31:54.666","access":"select","resource":"default/sample_07","resType":"@table","action":"select","result":1,"agent":"impala","policy":8,"enforcer":"ranger-acl","cliIP":"::ffff:172.27.172.2","reqData":"SELECT s07.description, s07.salary, s08.salary,\r s08.salary - s07.salary\r FROM\r sample_07 s07 JOIN sample_08 s08\r ON ( s07.code \u003d s08.code)\r WHERE\r s07.salary \u003c s08.salary\r ORDER BY s08.salary-s07.salary DESC\r LIMIT 1000","agentHost":"host1.example.com","logType":"RangerAudit","id":"f995bc52-dbdf-4617-96f6-61a176f6a727-0","seq_num":0,"event_count":1,"event_dur_ms":1,"tags":[],"cluster_name":"CDP PvC Base Single-node Cluster","policy_version":1}
Solr
В аудите Solr по умолчанию проверяется только факт выполнения запроса:
{"repoType":8,"repo":"cm_solr","reqUser":"admin","evtTime":"2021-05-04 02:33:22.916","access":"query","resource":"twitter_demo","resType":"collection","action":"query","result":1,"agent":"solr","policy":39,"enforcer":"ranger-acl","cliIP":"172.27.172.2","agentHost":"host1.example.com","logType":"RangerAudit","id":"951c7dea-8ae7-49a5-8539-8c993651f75c-0","seq_num":1,"event_count":2,"event_dur_ms":199,"tags":[],"cluster_name":"CDP PvC Base Single-node Cluster","policy_version":2}
Однако, если в Solr включена авторизация на уровне документа, мы также увидим текст запроса:
2021-05-04T06:23:00-07:00 host1.example.com Solr: {"repoType":8,"repo":"cm_solr","reqUser":"admin","evtTime":"2021-05-04 06:22:55.366","access":"query","resource":"testcollection","resType":"collection","action":"others","result":0,"agent":"solr","policy":-1,"enforcer":"ranger-acl","cliIP":"172.27.172.2","reqData":"{! q\u003dtext:mysearchstring doAs\u003dadmin df\u003d_text_ echoParams\u003dexplicit start\u003d0 rows\u003d100 wt\u003djson}","agentHost":"host1.example.com","logType":"RangerAudit","id":"6b14c79f-e30d-4635-bd07-a5d116ee4d0f-0","seq_num":1,"event_count":1,"event_dur_ms":1,"tags":[],"cluster_name":"CDP PvC Base Single-node Cluster"}
Hue
Эти строки записываются непосредственно из файла журнала аудита Hue.
{"username": "admin", "impersonator": "hue", "eventTime": 1620124241293, "operationText": "Successful login for user: admin", "service": "hue", "url": "/hue/accounts/login", "allowed": true, "operation": "USER_LOGIN", "ipAddress": "10.96.85.63"}
{"username": "admin", "impersonator": "hue", "eventTime": 1620131105118, "operationText": "User admin downloaded results from query-impala-46 as xls", "service": "notebook", "url": "/notebook/download", "allowed": true, "operation": "DOWNLOAD", "ipAddress": "10.96.85.63"}
Заключение
Аудит и учет - это нормативный контроль безопасности для организаций, которые хранят и обрабатывают информацию о клиентах, данные систем здравоохранения, финансовую или служебную информацию, защищая ее от растущей угрозы действий инсайдеров (как непреднамеренных, так и злонамеренных).
Выше мы обсудили способы отправки событий аудита в CDP на внешнюю систему SIEM с использованием аудита на основе файлов и системного журнала.
Для получения дополнительной информации о настройке и использовании Apache Ranger ознакомьтесь с документацией по CDP.