|
@@ -19,219 +19,280 @@ import java.net.InetAddress;
|
|
|
import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
|
|
|
-public class AuditTrailService implements AuditTrail {
|
|
|
+public class AuditTrailService {
|
|
|
|
|
|
+ private static final AuditTrail NOOP_AUDIT_TRAIL = new NoopAuditTrail();
|
|
|
+ private final CompositeAuditTrail compositeAuditTrail;
|
|
|
private final XPackLicenseState licenseState;
|
|
|
- private final List<AuditTrail> auditTrails;
|
|
|
-
|
|
|
- @Override
|
|
|
- public String name() {
|
|
|
- return "service";
|
|
|
- }
|
|
|
|
|
|
public AuditTrailService(List<AuditTrail> auditTrails, XPackLicenseState licenseState) {
|
|
|
- this.auditTrails = Collections.unmodifiableList(auditTrails);
|
|
|
+ this.compositeAuditTrail = new CompositeAuditTrail(Collections.unmodifiableList(auditTrails));
|
|
|
this.licenseState = licenseState;
|
|
|
}
|
|
|
|
|
|
- /** Returns the audit trail implementations that this service delegates to. */
|
|
|
+ public AuditTrail get() {
|
|
|
+ if (compositeAuditTrail.isEmpty() == false && licenseState.isAuditingAllowed()) {
|
|
|
+ return compositeAuditTrail;
|
|
|
+ } else {
|
|
|
+ return NOOP_AUDIT_TRAIL;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // TODO: this method only exists for access to LoggingAuditTrail in a Node for testing.
|
|
|
+ // DO NOT USE IT, IT WILL BE REMOVED IN THE FUTURE
|
|
|
public List<AuditTrail> getAuditTrails() {
|
|
|
- return auditTrails;
|
|
|
+ return compositeAuditTrail.auditTrails;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static class NoopAuditTrail implements AuditTrail {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String name() {
|
|
|
+ return "noop";
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void authenticationSuccess(String requestId, String realm, User user, RestRequest request) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void authenticationSuccess(String requestId, String realm, User user, String action, TransportMessage message) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void anonymousAccessDenied(String requestId, String action, TransportMessage message) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void anonymousAccessDenied(String requestId, RestRequest request) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void authenticationFailed(String requestId, RestRequest request) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void authenticationFailed(String requestId, String action, TransportMessage message) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void authenticationFailed(String requestId, AuthenticationToken token, String action, TransportMessage message) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void authenticationFailed(String requestId, AuthenticationToken token, RestRequest request) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void authenticationFailed(String requestId, String realm, AuthenticationToken token,
|
|
|
+ String action, TransportMessage message) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void authenticationFailed(String requestId, String realm, AuthenticationToken token, RestRequest request) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void accessGranted(String requestId, Authentication authentication, String action, TransportMessage message,
|
|
|
+ AuthorizationInfo authorizationInfo) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void accessDenied(String requestId, Authentication authentication, String action, TransportMessage message,
|
|
|
+ AuthorizationInfo authorizationInfo) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void tamperedRequest(String requestId, RestRequest request) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void tamperedRequest(String requestId, String action, TransportMessage message) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void tamperedRequest(String requestId, User user, String action, TransportMessage request) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void connectionGranted(InetAddress inetAddress, String profile, SecurityIpFilterRule rule) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void connectionDenied(InetAddress inetAddress, String profile, SecurityIpFilterRule rule) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void runAsGranted(String requestId, Authentication authentication, String action, TransportMessage message,
|
|
|
+ AuthorizationInfo authorizationInfo) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void runAsDenied(String requestId, Authentication authentication, String action, TransportMessage message,
|
|
|
+ AuthorizationInfo authorizationInfo) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void runAsDenied(String requestId, Authentication authentication, RestRequest request,
|
|
|
+ AuthorizationInfo authorizationInfo) {}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void explicitIndexAccessEvent(String requestId, AuditLevel eventType, Authentication authentication,
|
|
|
+ String action, String indices, String requestName, TransportAddress remoteAddress,
|
|
|
+ AuthorizationInfo authorizationInfo) {}
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public void authenticationSuccess(String requestId, String realm, User user, RestRequest request) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ private static class CompositeAuditTrail implements AuditTrail {
|
|
|
+
|
|
|
+ private final List<AuditTrail> auditTrails;
|
|
|
+
|
|
|
+ private CompositeAuditTrail(List<AuditTrail> auditTrails) {
|
|
|
+ this.auditTrails = auditTrails;
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean isEmpty() {
|
|
|
+ return auditTrails.isEmpty();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String name() {
|
|
|
+ return "service";
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void authenticationSuccess(String requestId, String realm, User user, RestRequest request) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.authenticationSuccess(requestId, realm, user, request);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void authenticationSuccess(String requestId, String realm, User user, String action, TransportMessage message) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void authenticationSuccess(String requestId, String realm, User user, String action, TransportMessage message) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.authenticationSuccess(requestId, realm, user, action, message);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void anonymousAccessDenied(String requestId, String action, TransportMessage message) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void anonymousAccessDenied(String requestId, String action, TransportMessage message) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.anonymousAccessDenied(requestId, action, message);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void anonymousAccessDenied(String requestId, RestRequest request) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void anonymousAccessDenied(String requestId, RestRequest request) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.anonymousAccessDenied(requestId, request);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void authenticationFailed(String requestId, RestRequest request) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void authenticationFailed(String requestId, RestRequest request) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.authenticationFailed(requestId, request);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void authenticationFailed(String requestId, String action, TransportMessage message) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void authenticationFailed(String requestId, String action, TransportMessage message) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.authenticationFailed(requestId, action, message);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void authenticationFailed(String requestId, AuthenticationToken token, String action, TransportMessage message) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void authenticationFailed(String requestId, AuthenticationToken token, String action, TransportMessage message) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.authenticationFailed(requestId, token, action, message);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void authenticationFailed(String requestId, String realm, AuthenticationToken token, String action, TransportMessage message) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void authenticationFailed(String requestId, String realm, AuthenticationToken token, String action,
|
|
|
+ TransportMessage message) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.authenticationFailed(requestId, realm, token, action, message);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void authenticationFailed(String requestId, AuthenticationToken token, RestRequest request) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void authenticationFailed(String requestId, AuthenticationToken token, RestRequest request) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.authenticationFailed(requestId, token, request);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void authenticationFailed(String requestId, String realm, AuthenticationToken token, RestRequest request) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void authenticationFailed(String requestId, String realm, AuthenticationToken token, RestRequest request) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.authenticationFailed(requestId, realm, token, request);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void accessGranted(String requestId, Authentication authentication, String action, TransportMessage msg,
|
|
|
- AuthorizationInfo authorizationInfo) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void accessGranted(String requestId, Authentication authentication, String action, TransportMessage msg,
|
|
|
+ AuthorizationInfo authorizationInfo) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.accessGranted(requestId, authentication, action, msg, authorizationInfo);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void accessDenied(String requestId, Authentication authentication, String action, TransportMessage message,
|
|
|
- AuthorizationInfo authorizationInfo) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void accessDenied(String requestId, Authentication authentication, String action, TransportMessage message,
|
|
|
+ AuthorizationInfo authorizationInfo) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.accessDenied(requestId, authentication, action, message, authorizationInfo);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void tamperedRequest(String requestId, RestRequest request) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void tamperedRequest(String requestId, RestRequest request) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.tamperedRequest(requestId, request);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void tamperedRequest(String requestId, String action, TransportMessage message) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void tamperedRequest(String requestId, String action, TransportMessage message) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.tamperedRequest(requestId, action, message);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void tamperedRequest(String requestId, User user, String action, TransportMessage request) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void tamperedRequest(String requestId, User user, String action, TransportMessage request) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.tamperedRequest(requestId, user, action, request);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void connectionGranted(InetAddress inetAddress, String profile, SecurityIpFilterRule rule) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void connectionGranted(InetAddress inetAddress, String profile, SecurityIpFilterRule rule) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.connectionGranted(inetAddress, profile, rule);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void connectionDenied(InetAddress inetAddress, String profile, SecurityIpFilterRule rule) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void connectionDenied(InetAddress inetAddress, String profile, SecurityIpFilterRule rule) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.connectionDenied(inetAddress, profile, rule);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void runAsGranted(String requestId, Authentication authentication, String action, TransportMessage message,
|
|
|
- AuthorizationInfo authorizationInfo) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void runAsGranted(String requestId, Authentication authentication, String action, TransportMessage message,
|
|
|
+ AuthorizationInfo authorizationInfo) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.runAsGranted(requestId, authentication, action, message, authorizationInfo);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void runAsDenied(String requestId, Authentication authentication, String action, TransportMessage message,
|
|
|
- AuthorizationInfo authorizationInfo) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void runAsDenied(String requestId, Authentication authentication, String action, TransportMessage message,
|
|
|
+ AuthorizationInfo authorizationInfo) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.runAsDenied(requestId, authentication, action, message, authorizationInfo);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void runAsDenied(String requestId, Authentication authentication, RestRequest request,
|
|
|
- AuthorizationInfo authorizationInfo) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void runAsDenied(String requestId, Authentication authentication, RestRequest request,
|
|
|
+ AuthorizationInfo authorizationInfo) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.runAsDenied(requestId, authentication, request, authorizationInfo);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Override
|
|
|
- public void explicitIndexAccessEvent(String requestId, AuditLevel eventType, Authentication authentication, String action,
|
|
|
- String indices, String requestName, TransportAddress remoteAddress,
|
|
|
- AuthorizationInfo authorizationInfo) {
|
|
|
- if (licenseState.isAuditingAllowed()) {
|
|
|
+ @Override
|
|
|
+ public void explicitIndexAccessEvent(String requestId, AuditLevel eventType, Authentication authentication, String action,
|
|
|
+ String indices, String requestName, TransportAddress remoteAddress,
|
|
|
+ AuthorizationInfo authorizationInfo) {
|
|
|
for (AuditTrail auditTrail : auditTrails) {
|
|
|
auditTrail.explicitIndexAccessEvent(requestId, eventType, authentication, action, indices, requestName, remoteAddress,
|
|
|
- authorizationInfo);
|
|
|
+ authorizationInfo);
|
|
|
}
|
|
|
}
|
|
|
}
|