Skip to content

Conversation

@jpkeepersecurity
Copy link
Contributor

Proposed commit message

Add Keeper Security agentless integration package

This PR introduces a new Keeper Security integration that enables truly agentless audit event collection by allowing Keeper to push data directly to Elasticsearch via the Bulk API without requiring any Elastic Agent installation.

WHAT:

  • New integration package keeper_security_siem_integration with complete ECS field mapping
  • Agentless architecture: Keeper Security Platform → Elasticsearch Bulk API → Ingest Pipeline → Index
  • Comprehensive ingest pipeline with timestamp normalization, GeoIP enrichment, and ECS compliance
  • Pre-built Kibana dashboard for audit event visualization
  • Support for multiple timestamp formats and robust error handling
  • Built-in field mappings for user information, source IPs, organization data, and related entities

WHY:

  • Eliminates the operational overhead of installing and managing Elastic Agents
  • Provides real-time audit event processing directly from Keeper Security platform
  • Ensures consistent ECS field mapping for better integration with Elastic Security workflows
  • Offers immediate value with pre-configured dashboards and visualizations
  • Supports enterprise security monitoring with minimal infrastructure requirements

The integration processes Keeper audit events (authentication, security actions, user management) and enriches them with geographic location data, user correlation fields, and standardized ECS categorization.

Checklist

  • I have reviewed tips for building integrations and this pull request is aligned with them.
  • I have verified that all data streams collect metrics or logs.
  • I have added an entry to my package's changelog.yml file.
  • I have verified that Kibana version constraints are current according to guidelines.
  • I have verified that any added dashboard complies with Kibana's Dashboard good practices

Author's Checklist

  • Integration package structure follows Elastic standards with proper manifest, changelog, and documentation
  • Ingest pipeline includes comprehensive error handling and ECS field mapping
  • Data stream configuration supports dynamic datasets and namespaces
  • Documentation includes complete setup instructions with API key creation and GeoIP configuration
  • Dashboard provides meaningful visualizations for audit event analysis
  • Field mappings include related.* fields for proper entity correlation

How to test this PR locally

  1. Install the integration assets in Kibana:

    # Navigate to Management > Integrations in Kibana # Search for "Keeper Security" and install assets only
  2. Create API key for data ingestion:

    POST /_security/api_key { "name": "keeper-integration-test", "expiration": "365d", "role_descriptors": { "keeper-writer": { "cluster": ["monitor"], "indices": [ { "names": ["logs-keeper.audit-*"], "privileges": ["auto_configure", "create_doc"] } ] } } }
  3. Enable GeoIP enrichment:

    PUT /_cluster/settings { "persistent": { "ingest.geoip.downloader.enabled": true } }
  4. Test data ingestion:

    curl --location 'https://YOUR_ELASTICSEARCH_HOST/logs-keeper.audit-1.0.0/_bulk' \ --header 'Authorization: ApiKey YOUR_API_KEY' \ --header 'Content-Type: application/x-ndjson' \ --data-raw '{"create":{}} {"audit_event":"test_login","remote_address":"8.8.8.8","username":"test@company.com","enterprise_id":1234,"timestamp":"2025-08-28T17:36:11.621Z","client_version":"Web.1.0.0","category":"authentication"} '
  5. Verify in Kibana:

    • Check data in Discover with index pattern logs-keeper.audit-*
    • View the "Keeper SIEM Integration - Dashboard"
    • Verify ECS field mapping and GeoIP enrichment

Related issues

  • Addresses enterprise customer requirements for agentless security event collection
  • Supports Keeper Security platform integration with Elastic SIEM workflows

Screenshots

image image

The integration includes a pre-built dashboard showing:

  • Audit event timeline and volume
  • Geographic distribution of access attempts
  • User activity patterns and authentication events
  • Event categorization and outcome analysis
…anifest, changelog, license, and documentation files. This integration allows for direct collection of audit events via Elasticsearch Bulk API without the need for agents.
…changelog, license, manifest, and data stream configurations. This cleanup eliminates unnecessary files for the agentless integration with Elasticsearch.
…ne. Removed commented-out code and unnecessary properties for clarity and maintainability.
@jpkeepersecurity jpkeepersecurity requested a review from a team as a code owner August 28, 2025 17:57
@cla-checker-service
Copy link

cla-checker-service bot commented Aug 28, 2025

💚 CLA has been signed

@andrewkroh andrewkroh added New Integration Issue or pull request for creating a new integration package. dashboard Relates to a Kibana dashboard bug, enhancement, or modification. documentation Improvements or additions to documentation. Applied to PRs that modify *.md files. needs CLA User must sign the Elastic Contributor License before review. labels Aug 28, 2025
@jamiehynds jamiehynds added the Team:Security-Service Integrations Security Service Integrations team [elastic/security-service-integrations] label Sep 1, 2025
@elasticmachine
Copy link

Pinging @elastic/security-service-integrations (Team:Security-Service Integrations)

@efd6
Copy link
Contributor

efd6 commented Sep 1, 2025

@jpkeepersecurity Please sign the CLA with all the email addresses used as author email in the commits in this PR.

@jpkeepersecurity
Copy link
Contributor Author

I just signed @efd6

@andrewkroh andrewkroh removed the needs CLA User must sign the Elastic Contributor License before review. label Sep 4, 2025
Copy link
Contributor

@efd6 efd6 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add pipeline and system tests.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be done in _dev/build/docs/README.md and generated to here.

Please also take a look at the guidelines here and make the documentation match that structure.

# If no keeper.timestamp, try to use existing @timestamp or set current time
- set:
field: '@timestamp'
value: "{{_ingest.timestamp}}"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
value: "{{_ingest.timestamp}}"
value: "{{{_ingest.timestamp}}}"

use triple stache throughout

Though this processor does not need to be included since the @timestamp will be set by fleet if it is not present, and including this here means that the product of the pipeline tests will not be resproducible.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With set you can use copy_from instead of the Mustache templates.

jpkeepersecurity and others added 2 commits September 9, 2025 15:55
Co-authored-by: Dan Kortschak <dan.kortschak@elastic.co>
Co-authored-by: Dan Kortschak <dan.kortschak@elastic.co>
@efd6
Copy link
Contributor

efd6 commented Sep 9, 2025

/test

Copy link
Contributor

@efd6 efd6 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please make the following change:

diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index e54e89dd94..0e842c8e83 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -290,6 +290,7 @@ /packages/juniper_srx @elastic/integration-experience /packages/kafka @elastic/obs-infraobs-integrations /packages/kafka_log @elastic/obs-infraobs-integrations +/packages/keeper_security_siem_integration @elastic/security-service-integrations /packages/keycloak @elastic/security-service-integrations /packages/kibana @elastic/stack-monitoring /packages/kubernetes @elastic/obs-ds-hosted-services
# If no keeper.timestamp, try to use existing @timestamp or set current time
- set:
field: '@timestamp'
value: "{{_ingest.timestamp}}"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With set you can use copy_from instead of the Mustache templates.

value: "{{username}}"
if: ctx.username != null

# If username looks like email, set user.email
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These comments can go into the description field. Then they become part of the pipeline specification and are visible in other places that you can access the pipeline definition, like the Ingest Pipeline editor/viewer.

type: date
description: Date/time when the audit event occurred
- name: message
type: wildcard
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment on lines 5 to 6
dynamic_dataset: true
dynamic_namespace: true
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are these necessary? The pipeline sets static values for both dataset and namespace. And these are primarily used to give the Elastic Agent permissions to write to a wide swath of logs-*-*, but this integration advertises itself as not needing an Elastic Agent.

dependencies:
ecs:
reference: git@v8.17.0
import_mappings: true
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This shouldn't be needed any more. All integrations receive the ecs@mappings template which provides similar functionality as import_mappings: true.

@@ -0,0 +1,4 @@
dependencies:
ecs:
reference: git@v8.17.0
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are newer ECS versions. Can we use the latest version?

jpkeepersecurity and others added 7 commits September 10, 2025 12:45
…asticsearch/ingest_pipeline/default.yml Co-authored-by: Dan Kortschak <dan.kortschak@elastic.co>
Co-authored-by: Andrew Kroh <andrew.kroh@elastic.co>
- Removed unnecessary Elasticsearch dynamic dataset settings from the audit manifest. - Cleaned up the ingest pipeline by adding descriptions for various processing steps and removing redundant comments. - Ensured clarity in the pipeline by maintaining essential functionality while enhancing documentation for future reference.
- Removed deprecated fields and descriptions to streamline the configuration. - Added ECS external references for data stream and event fields to enhance compatibility with Elastic Common Schema.
jpkeepersecurity and others added 6 commits September 26, 2025 10:47
…asticsearch/ingest_pipeline/default.yml Co-authored-by: Dan Kortschak <dan.kortschak@elastic.co>
…ions - Changed the version in manifest.yml from 1.0.0 to 0.1.0. - Removed unnecessary configuration files for test pipelines. - Updated ECS version in expected JSON files and ingest pipeline configuration to 8.17.0. - Simplified test-edge-cases.json by removing redundant user data.
…peline - Deleted unused test files: test-edge-cases.json, test-timestamp-formats.json, and their expected counterparts. - Updated the ingest pipeline to handle timestamp conversion directly from the 'timestamp' field instead of 'keeper.timestamp'. - Simplified the fields definition by removing the 'keeper' group and directly defining 'timestamp' and 'category' fields.
…tions - Updated expected JSON files to include additional event fields such as category, dataset, kind, outcome, and type for various actions. - Modified ingest pipeline conditions to reference the updated category field directly instead of the obsolete keeper.category.
@jpkeepersecurity
Copy link
Contributor Author

pr is up to date.

@efd6
Copy link
Contributor

efd6 commented Sep 29, 2025

/test

- Introduced a comprehensive README for the Keeper Security integration detailing its architecture, compatibility, data collection, deployment instructions, and troubleshooting steps. - Updated existing README to reflect the new structure and added clarity on integration setup and use cases. - Included information on API usage, ingest pipeline details, and performance considerations. - Added a new test sample JSON file to enhance testing capabilities.
- Removed obsolete fields 'dataset' and 'module' from the expected JSON files to streamline event structure. - Updated ingest pipeline to utilize 'copy_from' for setting user fields and source IP, enhancing clarity and reducing redundancy. - Adjusted error handling messages for timestamp parsing to improve accuracy.
- Introduced a new sample_event.json file to represent the audit event for setting two-factor authentication. - Updated expected JSON structure in test-sample.json-expected.json to include 'dataset' and 'module' fields for consistency with the new event format.
- Changed the audit event from 'set_two_factor_on' to 'change_master_password'. - Updated timestamp, enterprise ID, user details, and remote address to reflect new event context. - Enhanced source information with geographical data for improved event tracking.
@efd6
Copy link
Contributor

efd6 commented Sep 29, 2025

/test

- Updated Kibana version compatibility in manifest.yml to support versions 8.19.0 and 9.1.0. - Removed obsolete 'data_stream' and 'module' fields from test-sample.json-expected.json to streamline the event structure. - Refactored ingest pipeline by removing unnecessary data stream fields to enhance clarity and reduce redundancy.
@jpkeepersecurity
Copy link
Contributor Author

Currently, for agentless integrations of the push type, implementing system tests is not required, since during deployment elastic-package looks for elastic-agent environment variables by default.

However, given that there is now a new agentless push integration, I suggest updating elastic-package to support system tests for this type of solution. Once the tool provides this support, the integration can then include system tests as part of its setup.

@efd6
Copy link
Contributor

efd6 commented Sep 29, 2025

/test

@elasticmachine
Copy link

💚 Build Succeeded

History

@efd6 efd6 merged commit 5d58b32 into elastic:main Sep 29, 2025
9 checks passed
@elastic-vault-github-plugin-prod

Package keeper - 0.1.0 containing this change is available at https://epr.elastic.co/package/keeper/0.1.0/

@andrewkroh andrewkroh added the Integration:keeper_security_siem_integration Keeper Security (Partner supported) label Sep 30, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dashboard Relates to a Kibana dashboard bug, enhancement, or modification. documentation Improvements or additions to documentation. Applied to PRs that modify *.md files. Integration:keeper_security_siem_integration Keeper Security (Partner supported) New Integration Issue or pull request for creating a new integration package. Team:Security-Service Integrations Security Service Integrations team [elastic/security-service-integrations]

5 participants