CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-apache-ranger--ranger-plugins-audit

Apache Ranger Audit Plugin Framework providing centralized audit logging capabilities for Apache Ranger security plugins across various big data components.

Pending
Overview
Eval results
Files

core-framework.mddocs/

Core Audit Framework

The core audit framework provides the foundational components for audit event processing, including factories, handlers, and event models that enable centralized audit logging across Apache Ranger security plugins.

Capabilities

Audit Provider Factory

Primary singleton factory for creating and managing audit providers with centralized configuration management.

/**
 * Primary factory for creating and managing audit providers
 */
public class AuditProviderFactory {
    /**
     * Get singleton instance of the audit provider factory
     * @return AuditProviderFactory instance
     */
    public static AuditProviderFactory getInstance();
    
    /**
     * Initialize the audit provider factory with configuration
     * @param props Properties containing audit configuration
     * @param appType Application type identifier
     */
    public void init(Properties props, String appType);
    
    /**
     * Get the configured audit provider
     * @return AuditHandler configured audit provider
     */
    public AuditHandler getAuditProvider();
    
    /**
     * Shutdown the audit provider factory and all providers
     */
    public void shutdown();
}

Audit Writer Factory

Factory for creating audit file writers with support for different output formats.

/**
 * Factory for creating audit file writers
 */
public class AuditWriterFactory {
    /**
     * Get singleton instance of the audit writer factory
     * @return AuditWriterFactory instance
     */
    public static AuditWriterFactory getInstance();
    
    /**
     * Create audit writer for specified format
     * @param writerType Type of writer to create ("json", "orc")
     * @return RangerAuditWriter writer instance
     */
    public RangerAuditWriter createWriter(String writerType);
    
    /**
     * Get configured audit writer
     * @return RangerAuditWriter configured writer
     */
    public RangerAuditWriter getAuditWriter();
}

Audit Handler Interface

Primary interface that all audit handlers must implement, providing the contract for audit event processing.

/**
 * Primary interface for all audit handlers
 */
public interface AuditHandler {
    /**
     * Log a single audit event
     * @param event AuditEventBase event to log
     * @return boolean true if successful, false otherwise
     */
    public boolean log(AuditEventBase event);
    
    /**
     * Log a collection of audit events
     * @param events Collection<AuditEventBase> events to log
     * @return boolean true if successful, false otherwise
     */
    public boolean log(Collection<AuditEventBase> events);
    
    /**
     * Log a JSON string audit event
     * @param event String JSON-formatted audit event
     * @return boolean true if successful, false otherwise
     */
    public boolean logJSON(String event);
    
    /**
     * Log a collection of JSON string audit events
     * @param events Collection<String> JSON-formatted events
     * @return boolean true if successful, false otherwise
     */
    public boolean logJSON(Collection<String> events);
    
    /**
     * Log audit events from a file
     * @param file File containing audit events
     * @return boolean true if successful, false otherwise
     */
    public boolean logFile(File file);
    
    /**
     * Initialize the audit handler with configuration
     * @param props Properties configuration properties
     */
    public void init(Properties props);
    
    /**
     * Initialize the audit handler with base property name
     * @param props Properties configuration properties
     * @param basePropertyName String base property name for configuration
     */
    public void init(Properties props, String basePropertyName);
    
    /**
     * Start the audit handler
     */
    public void start();
    
    /**
     * Stop the audit handler
     */
    public void stop();
    
    /**
     * Wait for completion of pending operations
     */
    public void waitToComplete();
    
    /**
     * Wait for completion with timeout
     * @param timeout long timeout in milliseconds
     */
    public void waitToComplete(long timeout);
    
    /**
     * Get handler name for logging purposes
     * @return String handler name
     */
    public String getName();
    
    /**
     * Flush any pending audit events
     */
    public void flush();
}

Authorization Audit Event

Primary audit event model for authorization events with comprehensive metadata and JSON serialization support.

/**
 * Primary audit event model for authorization events
 */
public class AuthzAuditEvent extends AuditEventBase {
    // Repository information
    public String getRepositoryName();
    public void setRepositoryName(String repositoryName);
    public int getRepositoryType();
    public void setRepositoryType(int repositoryType);
    
    // User and access information
    public String getUser();
    public void setUser(String user);
    public String getAccessType();
    public void setAccessType(String accessType);
    public short getAccessResult();
    public void setAccessResult(short accessResult);
    
    // Resource information
    public String getResourceType();
    public void setResourceType(String resourceType);
    public String getResourcePath();
    public void setResourcePath(String resourcePath);
    
    // Policy information
    public long getPolicyId();
    public void setPolicyId(long policyId);
    public String getPolicyVersion();
    public void setPolicyVersion(String policyVersion);
    
    // Event metadata
    public Date getEventTime();
    public void setEventTime(Date eventTime);
    public String getEventId();
    public void setEventId(String eventId);
    
    // Client information
    public String getClientIP();
    public void setClientIP(String clientIP);
    public String getClientType();
    public void setClientType(String clientType);
    
    // Additional fields
    public String getAction();
    public void setAction(String action);
    public String getRequestData();
    public void setRequestData(String requestData);
    public String getResultReason();
    public void setResultReason(String resultReason);
    
    // JSON serialization
    public String toJson();
    public void fromJson(String jsonString);
}

Base Audit Handler

Abstract base implementation providing common functionality for audit handlers including statistics, logging, and lifecycle management.

/**
 * Base implementation for audit handlers with common functionality
 */
public abstract class BaseAuditHandler implements AuditHandler {
    /**
     * Initialize the handler with properties
     * @param props Properties configuration properties
     */
    public void init(Properties props);
    
    /**
     * Log a single audit event (delegates to concrete implementation)
     * @param event AuditEventBase event to log
     */
    public void log(AuditEventBase event);
    
    /**
     * Log JSON string event (delegates to concrete implementation)
     * @param event String JSON-formatted event
     */
    public void logJSON(String event);
    
    /**
     * Log audit events from file (delegates to concrete implementation)
     * @param file File containing audit events
     */
    public void logFile(File file);
    
    // Statistics methods
    public long getErrorLogCount();
    public long getSuccessLogCount();  
    public long getStashedLogCount();
    public int getQueueSize();
    
    // Status and lifecycle methods
    public boolean isFlushPending();
    public void logStatusIfRequired();
    public String getName();
    public void setName(String name);
    public boolean stop(boolean isWaitToComplete);
}

Usage Examples:

import org.apache.ranger.audit.provider.AuditProviderFactory;
import org.apache.ranger.audit.provider.AuditHandler;
import org.apache.ranger.audit.model.AuthzAuditEvent;
import org.apache.ranger.audit.model.EnumRepositoryType;

// Initialize audit framework
Properties auditProps = new Properties();
auditProps.setProperty("xasecure.audit.is.enabled", "true");
auditProps.setProperty("xasecure.audit.hdfs.is.enabled", "true");

AuditProviderFactory factory = AuditProviderFactory.getInstance();
factory.init(auditProps, "ranger-plugin");

// Get audit provider
AuditHandler auditProvider = factory.getAuditProvider();

// Create audit event
AuthzAuditEvent event = new AuthzAuditEvent();
event.setRepositoryName("hdfs-service");
event.setRepositoryType(EnumRepositoryType.HDFS);
event.setUser("alice");
event.setAccessType("read");
event.setResourcePath("/data/sensitive");
event.setAccessResult(1); // ALLOWED
event.setEventTime(new Date());

// Log the event
auditProvider.log(event);

// Batch logging
List<AuditEventBase> events = Arrays.asList(event1, event2, event3);
auditProvider.log(events);

// JSON logging
String jsonEvent = event.toJson();
auditProvider.logJSON(jsonEvent);

Utility Classes

Core utility class providing essential system-level functions used throughout the Apache Ranger audit framework including token replacement, authentication, JSON processing, and configuration management.

/**
 * Comprehensive utility class with essential system-level functions
 */
public class MiscUtil {
    // Token replacement constants
    public static final String TOKEN_START = "%";
    public static final String TOKEN_END = "%";
    public static final String TOKEN_HOSTNAME = "hostname";
    public static final String TOKEN_APP_TYPE = "app-type";
    public static final String TOKEN_JVM_INSTANCE = "jvm-instance";
    public static final String TOKEN_TIME = "time:";
    public static final String TOKEN_PROPERTY = "property:";
    public static final String TOKEN_ENV = "env:";
    
    // Token replacement utilities
    public static String replaceTokens(String str, long time);
    
    // System information utilities
    public static String getHostname();
    public static void setApplicationType(String applicationType);
    public static String getApplicationType();
    public static String getJvmInstanceId();
    public static String getSystemProperty(String propertyName);
    public static String getEnv(String envName);
    public static String getFormattedTime(long time, String format);
    
    // File and directory operations
    public static void createParents(File file);
    
    // Time and rollover management
    public static long getNextRolloverTime(long lastRolloverTime, long interval);
    public static long getRolloverStartTime(long nextRolloverTime, long interval);
    
    // Parsing and conversion utilities
    public static int parseInteger(String str, int defValue);
    public static int toInt(Object value);
    public static long toLong(Object value);
    public static Date toDate(Object value);
    public static Date toLocalDate(Object value);
    
    // UUID and GUID generation
    public static String generateUniqueId();
    public static String generateGuid();
    
    // JSON serialization/deserialization
    public static ObjectMapper getMapper();
    public static <T> String stringify(T log);
    public static <T> T fromJson(String jsonStr, Class<T> clazz);
    
    // Properties management
    public static String getStringProperty(Properties props, String propName);
    public static String getStringProperty(Properties props, String propName, String defValue);
    public static boolean getBooleanProperty(Properties props, String propName, boolean defValue);
    public static int getIntProperty(Properties props, String propName, int defValue);
    public static long getLongProperty(Properties props, String propName, long defValue);
    public static Map<String, String> getPropertiesWithPrefix(Properties props, String prefix);
    
    // Collection utilities
    public static List<String> toArray(String destListStr, String delim);
    
    // Security and authentication methods
    public static String getCredentialString(String url, String alias);
    public static UserGroupInformation createUGIFromSubject(Subject subject);
    public static void setUGILoginUser(UserGroupInformation newUGI, Subject newSubject);
    public static UserGroupInformation getUGILoginUser();
    public static Subject getSubjectLoginUser();
    public static <X> X executePrivilegedAction(final PrivilegedExceptionAction<X> action);
    public static <X> X executePrivilegedAction(final PrivilegedAction<X> action);
    
    // Kerberos authentication
    public static String getKerberosNamesRules();
    public static String getShortNameFromPrincipalName(String principal);
    public static Set<String> getGroupsForRequestUser(String userName);
    public static void setUGIFromJAASConfig(String jaasConfigAppName);
    public static void authWithKerberos(String keytab, String principal, String nameRules);
    public static void loginWithKeyTab(String keytab, String principal, String nameRules);
    public static UserGroupInformation getLoginUser();
    
    // UTC date utilities
    public static Date getUTCDateForLocalDate(Date date);
    public static Date getUTCDate();
    
    // Logging utilities
    public static boolean logErrorMessageByInterval(Logger useLogger, String message);
    public static boolean logErrorMessageByInterval(Logger useLogger, String message, Throwable e);
}

Install with Tessl CLI

npx tessl i tessl/maven-org-apache-ranger--ranger-plugins-audit

docs

audit-destinations.md

core-framework.md

index.md

queue-async.md

writers-formats.md

tile.json