В области безопасности никогда (IMHO) никогда не было достаточно решений с открытым исходным кодом, и Брюс Шнайер писал об этом несколько раз в прошлом , и нет необходимости переписывать аргументы снова.
Теперь, когда на рынке появились «открытые исходные коды» и «большие данные», у рынка безопасности наконец-то есть пересечение… если можно, союз, где новые решения для решения проблем, которые преследуют наше общество, могут, наконец, начать возникать (и уже во многих случаев). Мошенничество, вредоносные программы, фишинг, спам и т. Д. Теперь можно решать с помощью новых решений в области безопасности благодаря большим данным и открытым источникам.
На переднем крае этого находится Apache Accumulo, который представляет собой базу данных Big Data, Open Source и Secure NoSQL, которая работает поверх Apache Hadoop . Первоначально он был разработан Агентством национальной безопасности США и передан Фонду Apache в качестве открытого исходного кода в 2011 году, когда уже началось 3 года разработки и производства.
Accumulo расширяет модель данных BigTable для реализации механизма безопасности, известного как безопасность на уровне ячейки. Каждая пара ключ-значение имеет свою собственную метку безопасности, которая хранится под элементом видимости столбца ключа, который используется для определения того, соответствует ли данный пользователь требованиям безопасности для считывания значения. Это позволяет хранить данные с разными уровнями безопасности в одной строке, а пользователи с разной степенью доступа могут запрашивать одну и ту же таблицу, сохраняя при этом конфиденциальность данных.
БЕЗОПАСНОСТЬ ЭТИКЕТКА ВЫРАЖЕНИЯ
Когда применяются мутации, пользователи могут указать метку безопасности для каждого значения. Это делается, когда мутация создается путем передачи объекта ColumnVisibility в метод put ():
01
02
03
04
05
06
07
08
09
10
|
Text rowID = new Text( "row1" ); Text colFam = new Text( "myColFam" ); Text colQual = new Text( "myColQual" ); ColumnVisibility colVis = new ColumnVisibility( "public" ); long timestamp = System.currentTimeMillis(); Value value = new Value( "myValue" ); Mutation mutation = new Mutation(rowID); mutation.put(colFam, colQual, colVis, timestamp, value); |
БЕЗОПАСНОСТЬ ЭТИКЕТКА СИНТАКСИЯ
Метки безопасности состоят из набора пользовательских токенов, которые необходимы для считывания значения, с которым связана метка. Необходимый набор токенов может быть указан с использованием синтаксиса, который поддерживает логические комбинации токенов AND и OR, а также объединяет группы токенов вместе.
Например, предположим, что в нашей организации мы хотим пометить наши значения данных метками безопасности, определенными в терминах пользовательских ролей. У нас могут быть токены, такие как:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
admin audit system These can be specified alone or combined using logical operators: // Users must have admin privileges: admin // Users must have admin and audit privileges admin&audit // Users with either admin or audit privileges admin|audit // Users must have audit and one or both of admin or system (admin|system)&audit |
Когда оба | и & операторы используются, круглые скобки должны использоваться, чтобы указать приоритет операторов.
РАЗРЕШЕНИЕ
Когда клиенты пытаются прочитать данные из Accumulo, все имеющиеся метки безопасности проверяются на соответствие набору полномочий, переданных клиентским кодом при создании сканера или BatchScanner. Если установлено, что авторизации недостаточно для удовлетворения метки безопасности, значение подавляется из набора результатов, отправляемых обратно клиенту.
Полномочия указываются в виде списка токенов, разделенных запятыми, которыми обладает пользователь:
1
2
3
4
|
// user possess both admin and system level access Authorization auths = new Authorization( "admin" , "system" ); Scanner s = connector.createScanner( "table" , auths); |
ПОЛНОМОЧИЯ ПОЛЬЗОВАТЕЛЯ
Каждый накопленный пользователь имеет набор связанных меток безопасности. Чтобы манипулировать ими в оболочке, используйте команды setuaths и getauths. Они также могут быть изменены с использованием API операций безопасности Java.
Когда пользователь создает сканер, передается набор авторизаций. Если полномочия, переданные на сканер, не являются подмножеством полномочий пользователя, то будет выдано исключение.
Чтобы пользователи не могли писать данные, которые они не могут прочитать, добавьте ограничение видимости в таблицу. Используйте параметр -evc в команде оболочки createtable, чтобы включить это ограничение. Для существующих таблиц используйте следующую команду оболочки, чтобы включить ограничение видимости. Убедитесь, что номер ограничения не конфликтует ни с одним из существующих ограничений.
1
2
|
config -t table -s table.constraint.1=org.apache.accumulo.core.security.VisibilityConstraint |
Любой пользователь с разрешением изменить таблицу может добавить или удалить это ограничение. Это ограничение не применяется к массово импортируемым данным, если это вызывает беспокойство, отключите разрешение на массовый импорт.
ОБРАБОТКА БЕЗОПАСНЫХ АВТОРИЗАЦИЙ
Для приложений, обслуживающих много пользователей, не ожидается, что общий пользователь будет создан для каждого пользователя приложения. В этом случае должен быть накопленный пользователь со всеми правами доступа, необходимыми любому из пользователей приложений. Для обслуживания запросов приложение должно создать сканер с полномочиями пользователей приложения. Эти разрешения могут быть получены от доверенной третьей стороны.
Часто производственные системы будут интегрироваться с инфраструктурой открытых ключей (PKI) и назначать клиентский код на уровне запросов для согласования с серверами PKI с целью аутентификации пользователей и получения их токенов авторизации (учетных данных). Это требует от пользователей указывать только ту информацию, которая необходима для аутентификации в системе. Как только личность пользователя установлена, его учетные данные могут быть доступны клиентскому коду и переданы в Accumulo вне досягаемости пользователя.
ПОСЛЕДОВАТЕЛЬНЫЕ УСЛУГИ
Поскольку основной метод взаимодействия с Accumulo — через Java API, производственные среды часто требуют реализации уровня Query. Это можно сделать с помощью веб-служб в контейнерах, таких как Apache Tomcat, но это не является обязательным требованием. Уровень Query Services предоставляет механизм для предоставления платформы, на которой могут быть построены пользовательские приложения. Это позволяет разработчикам приложений изолировать потенциально сложную логику запросов и предоставляет удобную точку для выполнения основных функций безопасности.
Некоторые производственные среды выбирают реализацию аутентификации на этом уровне, где идентификаторы пользователей используются для получения учетных данных доступа, которые затем кэшируются на уровне запросов и представляются в Accumulo через механизм авторизации.
Как правило, уровень служб запросов находится между Accumulo и пользовательскими рабочими станциями.
Apache Accumulo версии 1.5 только что вышел для скачивания с документами
Новое программное обеспечение как сервисное решение начнет появляться на рынке, как и новые готовые решения с открытым исходным кодом. Независимо от того, пытаемся ли мы предотвратить мошенничество в сфере здравоохранения, защитить отдельных лиц от выявления кражи или корпораций от вторжения, без ущерба для (C) конфиденциальности, (I) целостности и (A) доступности данных и распределения систем.