Cassandra的数据审计

时间:2014-07-10 19:09:25

标签: cassandra cassandra-2.0

如何实施cassandra数据的审核? 我正在寻找一个开源选项。

cassandra的任何功能是否有助于审核? 我可以使用触发器将记录记录到表中吗?我遵循了Triggers示例,当另一个表上发生更新时,能够将记录插入到triggers_log表中。 但不确定如何捕获触发更新的user/session详细信息。我来自CQLSH终端,创建userstrigger_log table

create table AUDIT_LOG ( 
       transaction_id int,
       entries map<text, text>,  --> to capture the modifications done to the tables
       user varchar,  //authenticated user
       time timestamp, 
       primary key(transaction_id));
CREATE TABLE users (
  user_id int PRIMARY KEY,
  fname text,
  lname text
);

使用CREATE TRIGGER

中的cqlsh语法在用户表上定义触发器

到目前为止的代码。

public class AuditTrigger implements ITrigger {

    @Override
    public Collection<RowMutation> augment(ByteBuffer key, ColumnFamily update) {

        List<RowMutation> mutations = new ArrayList<RowMutation>();
        for (Column column : update) {
            if (column.value().remaining() > 0) {
                RowMutation mutation = new RowMutation("mykeyspace", key);
           //What do I need here to capture the updates to users 
           //table and log the updates into various columns of audit_log
                mutations.add(mutation);
            }
        }
        return mutations;
    }
}

如果触发器不是正确的方法(任何弹簧AOP方法?),请建议替代方案。我也试过Cassandra vs logging activity解决方案,但它不会打印执行sql,经过身份验证的用户信息。

3 个答案:

答案 0 :(得分:7)

不幸的是,此时,触发器不能用作您需要的ClientState,它包含用户信息并且不会传递给触发器。

我可以想到两种方法。(您需要查看Cassandra代码库以更好地理解这些方法)

一种方法是AOP,即添加AOP并使用Agent启动Cassandra的代理。需要切入点的类是QueryProcessor#processStatement方法。对此方法的调用将使用预准备语句和QueryState作为参数。从PreparedStatement中,您可以识别用户的意图。 QueryState.getClientState将返回用户信息所在的ClientState。

另一种方法涉及自定义身份验证器和授权者。这里描述了在Cassandra中配置它。

http://www.datastax.com/documentation/cassandra/2.0/cassandra/security/secure_about_native_authenticate_c.html

您可以让自定义授权程序扩展AllowAllAuthorizer(这将禁用权限缓存)。每当您在Authorizer上获得授权请求时,您都可以记录它。这种方法的缺点是你不知道用户打算对表做什么,只是他要求对它进行一些授权。权限是包含他想要对表执行的操作的权限,但不会传递给授权人。

如果您决定使用其中任何一种方法,如果您需要更多详细信息,可以自由发布后续内容。

答案 1 :(得分:1)

以下是执行Cassandra审核日志的示例:https://github.com/xiaodong-xie/cassandra-audit

该解决方案基于名为&#34; cassandra.custom_query_handler_class&#34;的系统属性。它包含用户身份验证部分,假设使用AWS System Manager参数存储和LDAP服务器。

顺便说一句,Cassandra v4.x(https://issues.apache.org/jira/browse/CASSANDRA-12151

似乎支持审计日志

答案 2 :(得分:0)

ecAudit是一个Apache Cassandra插件,它完全支持Cassandra 3.0.x和3.11.x中的审核日志。

https://github.com/Ericsson/ecaudit

它将为身份验证尝试和CQL查询创建审核记录。它使您可以定义过滤器,以根据角色/键空间/表/查询限制审计日志。