From 6a76656479386c46309297d917c26e624e62b10d Mon Sep 17 00:00:00 2001 From: vinit-elastic Date: Thu, 1 Sep 2022 12:16:50 +0530 Subject: [PATCH 1/6] Initial Release for the BloxOne DDI --- .github/CODEOWNERS | 1 + packages/bloxone_ddi/_dev/build/build.yml | 3 + .../bloxone_ddi/_dev/build/docs/README.md | 76 + .../_dev/deploy/docker/docker-compose.yml | 15 + .../_dev/deploy/docker/files/config.yml | 19 + packages/bloxone_ddi/changelog.yml | 6 + .../_dev/test/pipeline/test-common-config.yml | 4 + .../pipeline/test-pipeline-dhcp-lease.log | 2 + ...test-pipeline-dhcp-lease.log-expected.json | 141 ++ .../_dev/test/system/test-default-config.yml | 9 + .../dhcp_lease/agent/stream/httpjson.yml.hbs | 54 + .../elasticsearch/ingest_pipeline/default.yml | 244 ++ .../data_stream/dhcp_lease/fields/agent.yml | 186 ++ .../dhcp_lease/fields/base-fields.yml | 20 + .../data_stream/dhcp_lease/fields/ecs.yml | 30 + .../data_stream/dhcp_lease/fields/fields.yml | 60 + .../data_stream/dhcp_lease/manifest.yml | 58 + .../data_stream/dhcp_lease/sample_event.json | 95 + .../_dev/test/pipeline/test-common-config.yml | 4 + .../pipeline/test-pipeline-dns-config.log | 2 + ...test-pipeline-dns-config.log-expected.json | 764 ++++++ .../_dev/test/system/test-default-config.yml | 9 + .../dns_config/agent/stream/httpjson.yml.hbs | 54 + .../elasticsearch/ingest_pipeline/default.yml | 2093 +++++++++++++++++ .../data_stream/dns_config/fields/agent.yml | 186 ++ .../dns_config/fields/base-fields.yml | 20 + .../data_stream/dns_config/fields/ecs.yml | 22 + .../data_stream/dns_config/fields/fields.yml | 1275 ++++++++++ .../data_stream/dns_config/manifest.yml | 58 + .../data_stream/dns_config/sample_event.json | 669 ++++++ .../_dev/test/pipeline/test-common-config.yml | 4 + .../test/pipeline/test-pipeline-dns-data.log | 2 + .../test-pipeline-dns-data.log-expected.json | 201 ++ .../_dev/test/system/test-default-config.yml | 9 + .../dns_data/agent/stream/httpjson.yml.hbs | 54 + .../elasticsearch/ingest_pipeline/default.yml | 433 ++++ .../data_stream/dns_data/fields/agent.yml | 186 ++ .../dns_data/fields/base-fields.yml | 20 + .../data_stream/dns_data/fields/ecs.yml | 22 + .../data_stream/dns_data/fields/fields.yml | 204 ++ .../data_stream/dns_data/manifest.yml | 58 + .../data_stream/dns_data/sample_event.json | 144 ++ packages/bloxone_ddi/docs/README.md | 1519 ++++++++++++ packages/bloxone_ddi/img/bloxone-ddi-logo.svg | 93 + .../img/bloxone-ddi-screenshot.png | Bin 0 -> 96683 bytes ...-85daef90-0ce7-11ed-8a96-d11b53f3d359.json | 607 +++++ ...-b8497140-0cdd-11ed-8a96-d11b53f3d359.json | 1048 +++++++++ ...-d3f8a270-0ce3-11ed-8a96-d11b53f3d359.json | 936 ++++++++ ...-d74c6fc0-26aa-11ed-918d-234d18ceca0c.json | 42 + packages/bloxone_ddi/manifest.yml | 83 + 50 files changed, 11844 insertions(+) create mode 100644 packages/bloxone_ddi/_dev/build/build.yml create mode 100644 packages/bloxone_ddi/_dev/build/docs/README.md create mode 100644 packages/bloxone_ddi/_dev/deploy/docker/docker-compose.yml create mode 100644 packages/bloxone_ddi/_dev/deploy/docker/files/config.yml create mode 100644 packages/bloxone_ddi/changelog.yml create mode 100644 packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-common-config.yml create mode 100644 packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log create mode 100644 packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log-expected.json create mode 100644 packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/system/test-default-config.yml create mode 100644 packages/bloxone_ddi/data_stream/dhcp_lease/agent/stream/httpjson.yml.hbs create mode 100644 packages/bloxone_ddi/data_stream/dhcp_lease/elasticsearch/ingest_pipeline/default.yml create mode 100644 packages/bloxone_ddi/data_stream/dhcp_lease/fields/agent.yml create mode 100644 packages/bloxone_ddi/data_stream/dhcp_lease/fields/base-fields.yml create mode 100644 packages/bloxone_ddi/data_stream/dhcp_lease/fields/ecs.yml create mode 100644 packages/bloxone_ddi/data_stream/dhcp_lease/fields/fields.yml create mode 100644 packages/bloxone_ddi/data_stream/dhcp_lease/manifest.yml create mode 100644 packages/bloxone_ddi/data_stream/dhcp_lease/sample_event.json create mode 100644 packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-common-config.yml create mode 100644 packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log create mode 100644 packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log-expected.json create mode 100644 packages/bloxone_ddi/data_stream/dns_config/_dev/test/system/test-default-config.yml create mode 100644 packages/bloxone_ddi/data_stream/dns_config/agent/stream/httpjson.yml.hbs create mode 100644 packages/bloxone_ddi/data_stream/dns_config/elasticsearch/ingest_pipeline/default.yml create mode 100644 packages/bloxone_ddi/data_stream/dns_config/fields/agent.yml create mode 100644 packages/bloxone_ddi/data_stream/dns_config/fields/base-fields.yml create mode 100644 packages/bloxone_ddi/data_stream/dns_config/fields/ecs.yml create mode 100644 packages/bloxone_ddi/data_stream/dns_config/fields/fields.yml create mode 100644 packages/bloxone_ddi/data_stream/dns_config/manifest.yml create mode 100644 packages/bloxone_ddi/data_stream/dns_config/sample_event.json create mode 100644 packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-common-config.yml create mode 100644 packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log create mode 100644 packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log-expected.json create mode 100644 packages/bloxone_ddi/data_stream/dns_data/_dev/test/system/test-default-config.yml create mode 100644 packages/bloxone_ddi/data_stream/dns_data/agent/stream/httpjson.yml.hbs create mode 100644 packages/bloxone_ddi/data_stream/dns_data/elasticsearch/ingest_pipeline/default.yml create mode 100644 packages/bloxone_ddi/data_stream/dns_data/fields/agent.yml create mode 100644 packages/bloxone_ddi/data_stream/dns_data/fields/base-fields.yml create mode 100644 packages/bloxone_ddi/data_stream/dns_data/fields/ecs.yml create mode 100644 packages/bloxone_ddi/data_stream/dns_data/fields/fields.yml create mode 100644 packages/bloxone_ddi/data_stream/dns_data/manifest.yml create mode 100644 packages/bloxone_ddi/data_stream/dns_data/sample_event.json create mode 100644 packages/bloxone_ddi/docs/README.md create mode 100644 packages/bloxone_ddi/img/bloxone-ddi-logo.svg create mode 100644 packages/bloxone_ddi/img/bloxone-ddi-screenshot.png create mode 100644 packages/bloxone_ddi/kibana/dashboard/bloxone_ddi-85daef90-0ce7-11ed-8a96-d11b53f3d359.json create mode 100644 packages/bloxone_ddi/kibana/dashboard/bloxone_ddi-b8497140-0cdd-11ed-8a96-d11b53f3d359.json create mode 100644 packages/bloxone_ddi/kibana/dashboard/bloxone_ddi-d3f8a270-0ce3-11ed-8a96-d11b53f3d359.json create mode 100644 packages/bloxone_ddi/kibana/search/bloxone_ddi-d74c6fc0-26aa-11ed-918d-234d18ceca0c.json create mode 100644 packages/bloxone_ddi/manifest.yml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c2c5da7bef..f6e638ea47 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -26,6 +26,7 @@ /packages/azure @elastic/obs-cloud-monitoring /packages/azure_metrics @elastic/obs-cloud-monitoring /packages/barracuda @elastic/security-external-integrations +/packages/bloxone_ddi @elastic/security-external-integrations /packages/bluecoat @elastic/security-external-integrations /packages/carbon_black_cloud @elastic/security-external-integrations /packages/carbonblack_edr @elastic/security-external-integrations diff --git a/packages/bloxone_ddi/_dev/build/build.yml b/packages/bloxone_ddi/_dev/build/build.yml new file mode 100644 index 0000000000..2254d90483 --- /dev/null +++ b/packages/bloxone_ddi/_dev/build/build.yml @@ -0,0 +1,3 @@ +dependencies: + ecs: + reference: git@v8.4.0-rc1 diff --git a/packages/bloxone_ddi/_dev/build/docs/README.md b/packages/bloxone_ddi/_dev/build/docs/README.md new file mode 100644 index 0000000000..4a6128d33b --- /dev/null +++ b/packages/bloxone_ddi/_dev/build/docs/README.md @@ -0,0 +1,76 @@ +# BloxOne DDI + +## Overview + +The [BloxOne DDI](https://www.infoblox.com/products/bloxone-ddi/) integration allows you to monitor DNS, DHCP and IP address management activity. DDI is the foundation of core network services that enables all communications over an IP-based network. + +Use the BloxOne DDI integration to collects and parses data from the REST APIs and then visualize that data in Kibana. + +## Data streams + +The BloxOne DDI integration collects logs for three types of events: DHCP lease, DNS data and DNS config. + +**DHCP Lease** is a BloxOne DDI service that stores information about leases. See more details about its API [here](https://csp.infoblox.com/apidoc?url=https%3A%2F%2Fcsp.infoblox.com%2Fapidoc%2Fdocs%2FDhcpLeases). + +**DNS Config** is a BloxOne DDI service that provides cloud-based DNS configuration with on-prem host serving DNS protocol. See more details about its API [here](https://csp.infoblox.com/apidoc?url=https%3A%2F%2Fcsp.infoblox.com%2Fapidoc%2Fdocs%2FDnsConfig). + +**DNS Data** is a BloxOne DDI service providing primary authoritative zone support. DNS Data is authoritative for all DNS resource records and is acting as a primary DNS server. See more details about its API [here](https://csp.infoblox.com/apidoc?url=https%3A%2F%2Fcsp.infoblox.com%2Fapidoc%2Fdocs%2FDnsData). + +## 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. + +This module has been tested against `BloxOne DDI API (v1)`. + +## Setup + +### To collect data from BloxOne DDI APIs, the user must have API Key. To create an API key follow the below steps: + +1. Log on to the Cloud Services Portal. +2. Go to ** -> User Profile**. +3. Go to **User API Keys** page. +4. Click **Create** to create a new API key. Specify the following: + - **Name**: Specify the name of the key. + - **Expires at**: Specify the expiry. +5. Click **Save & Close**. The API Access Key Generated dialog is shown. +6. Click **Copy**. + +### Enabling the integration in Elastic + +1. In Kibana go to **Management > Integrations**. +2. In the "Search for integrations" search bar, type **BloxOne DDI**. +3. Click on **BloxOne DDI** integration from the search results. +4. Click on **Add BloxOne DDI** button to add BloxOne DDI integration. +5. Enable the Integration to collect logs via API. + +## Logs Reference + +### dhcp_lease + +This is the `dhcp_lease` dataset. + +#### Example + +{{event "dhcp_lease"}} + +{{fields "dhcp_lease"}} + +### dns_config + +This is the `dns_config` dataset. + +#### Example + +{{event "dns_config"}} + +{{fields "dns_config"}} + +### dns_data + +This is the `dns_data` dataset. + +#### Example + +{{event "dns_data"}} + +{{fields "dns_data"}} diff --git a/packages/bloxone_ddi/_dev/deploy/docker/docker-compose.yml b/packages/bloxone_ddi/_dev/deploy/docker/docker-compose.yml new file mode 100644 index 0000000000..3f1c09b1ca --- /dev/null +++ b/packages/bloxone_ddi/_dev/deploy/docker/docker-compose.yml @@ -0,0 +1,15 @@ +version: '2.3' +services: + bloxone-ddi: + image: docker.elastic.co/observability/stream:v0.7.0 + hostname: bloxone-ddi + ports: + - 8080 + volumes: + - ./files:/files:ro + environment: + PORT: '8080' + command: + - http-server + - --addr=:8080 + - --config=/files/config.yml diff --git a/packages/bloxone_ddi/_dev/deploy/docker/files/config.yml b/packages/bloxone_ddi/_dev/deploy/docker/files/config.yml new file mode 100644 index 0000000000..e07fc44387 --- /dev/null +++ b/packages/bloxone_ddi/_dev/deploy/docker/files/config.yml @@ -0,0 +1,19 @@ +rules: + - path: /api/ddi/v1/dhcp/lease + methods: ['GET'] + responses: + - status_code: 200 + body: | + {"results":[{"address":"81.2.69.192","client_id":"abc3212abc","ends":"2022-07-11T11:51:15.417Z","fingerprint":"ab3213cbabab/abc23bca","fingerprint_processed":"12abca32bca32abcd","ha_group":"abc321cdcbda321","hardware":"00:00:5E:00:53:00","host":"admin","hostname":"Host1","iaid":0,"last_updated":"2022-07-11T11:51:15.417Z","options":{"message":"Hello"},"preferred_lifetime":"2022-07-11T11:51:15.417Z","protocol":"ip4","space":"DHCP lease Space","starts":"2022-07-14T11:51:15.417Z","state":"used","type":"DHCP lease Type"}]} + - path: /api/ddi/v1/dns/view + methods: ['GET'] + responses: + - status_code: 200 + body: | + {"results":[{"add_edns_option_in_outgoing_query":true,"comment":"DNS Config Comment","created_at":"2022-07-15T06:55:25.978Z","custom_root_ns":[{"address":"81.2.69.192","fqdn":"custom fqdn","protocol_fqdn":"custom protocol fqdn"}],"custom_root_ns_enabled":true,"disabled":true,"dnssec_enable_validation":true,"dnssec_enabled":true,"dnssec_root_keys":[{"algorithm":30,"protocol_zone":"Dnssec root protocol zone","public_key":"Dnssec root Public Key","sep":true,"zone":"Dnssec root Zone"}],"dnssec_trust_anchors":[{"algorithm":10,"protocol_zone":"Dnssec trust protocol zone","public_key":"Dnssec trust Public Key","sep":true,"zone":"Dnssec trust zone"}],"dnssec_validate_expiry":true,"ecs_enabled":true,"ecs_forwarding":true,"ecs_prefix_v4":22,"ecs_prefix_v6":33,"ecs_zones":[{"access":"ecs zones access","fqdn":"ecs zones fqdn","protocol_fqdn":"ecs zones protocol fqdn"}],"edns_udp_size":568,"forwarders":[{"address":"81.2.69.192","fqdn":"forwarders fqdn","protocol_fqdn":"forwarders protocol fqdn"}],"forwarders_only":true,"gss_tsig_enabled":true,"id":"adv12rgfh","inheritance_sources":{"add_edns_option_in_outgoing_query":{"action":"inherit","display_name":"displaynameadd_edns_option_in_outgoing_query","source":"sourceadd_edns_option_in_outgoing_query","value":true},"custom_root_ns_block":{"action":"override","display_name":"displaynamecustom_root_ns_block","source":"sourcecustom_root_ns_block","value":{"custom_root_ns":[{"address":"67.43.156.0","fqdn":"fqdn_custom_root_ns","protocol_fqdn":"protocolfqdn_custom_root_ns"}],"custom_root_ns_enabled":true}},"dnssec_validation_block":{"action":"inherit","display_name":"displaynamednssec_validation_block","source":"sourcednssec_validation_block","value":{"dnssec_enable_validation":true,"dnssec_enabled":true,"dnssec_trust_anchors":[{"algorithm":8,"protocol_zone":"protocolzonednssec_trust_anchors","public_key":"publickeydnssec_trust_anchors","sep":false,"zone":"is3zone"}],"dnssec_validate_expiry":true}},"ecs_zones":{"action":"override","display_name":"displaynameecs_zones","source":"sourceecs_zones","value":{"ecs_enabled":false,"ecs_forwarding":true,"ecs_prefix_v4":4,"ecs_prefix_v6":12,"ecs_zones":[{"access":"access_ecs_zones","fqdn":"fqdn_ecs_zones","protocol_fqdn":"protocolfqdn_ecs_zones"}]}},"ecs_block":{"action":"inherit","display_name":"displaynameecs_block","source":"sourceecs_block","value":{"ecs_enabled":false,"ecs_forwarding":true,"ecs_prefix_v4":4,"ecs_prefix_v6":10,"ecs_zones":[{"access":"inherit","fqdn":"fqdnecs_block","protocol_fqdn":"protocol_fqdnecs_block"}]}},"edns_udp_size":{"action":"inherit","display_name":"displaynameedns_udp_size","source":"sourceedns_udp_size","value":55},"forwarders_block":{"action":"inherit","display_name":"displaynameforwarders_block","source":"sourceforwarders_block","value":{"forwarders":[{"address":"89.160.20.128","fqdn":"forwarders_fqdn","protocol_fqdn":"forwarders_protocolfqdn"}],"forwarders_only":true}},"gss_tsig_enabled":{"action":"inherit","display_name":"displaynamegss_tsig_enabled","source":"sourcegss_tsig_enabled","value":true},"lame_ttl":{"action":"inherit","display_name":"displaynamelame_ttl","source":"sourcelame_ttl","value":45},"match_recursive_only":{"action":"inherit","display_name":"displaynamematch_recursive_only","source":"sourcematch_recursive_only","value":false},"max_cache_ttl":{"action":"inherit","display_name":"displaynamemax_cache_ttl","source":"sourcemax_cache_ttl","value":13},"max_negative_ttl":{"action":"inherit","display_name":"displaynamemax_negative_ttl","source":"sourcemax_negative_ttl","value":12},"max_udp_size":{"action":"inherit","display_name":"displaynamemax_udp_size","source":"sourcemax_udp_size","value":11},"minimal_responses":{"action":"inherit","display_name":"displaynameminimal_responses","source":"sourceminimal_responses","value":true},"notify":{"action":"inherit","display_name":"displayname_notify","source":"source_notify","value":true},"query_acl":{"action":"override","display_name":"displaynamequery_acl","source":"sourcequery_acl","value":[{"access":"allow","acl":"aclvalue_query_acl","address":"89.160.20.128","element":"elementvaluequery_acl","tsig_key":{"algorithm":"hmac_sha256","comment":"commentquery_acl","key":"keyquery_acl","name":"namequery_acl","protocol_name":"protocolname_query_acl","secret":"secretquery_acl"}}]},"recursion_acl":{"action":"override","display_name":"displaynamerecursion_acl","source":"sourcerecursion_acl","value":[{"access":"deny","acl":"aclrecursion_acl","address":"89.160.20.128","element":"elementrecursion_acl","tsig_key":{"algorithm":"hmac_sha384","comment":"commentrecursion_acl","key":"keyrecursion_acl","name":"namerecursion_acl","protocol_name":"protocolnamerecursion_acl","secret":"secretrecursion_acl"}}]},"recursion_enabled":{"action":"inherit","display_name":"displaynamerecursion_enabled","source":"sourcerecursion_enabled","value":true},"synthesize_address_records_from_https":{"action":"inherit","display_name":"displaynamesynthesize_address_records_from_https","source":"sourcesynthesize_address_records_from_https","value":true},"transfer_acl":{"action":"inherit","display_name":"displaynametransfer_acl","source":"sourcetransfer_acl","value":[{"access":"allow","acl":"acltransfer_acl","address":"216.160.83.56","element":"elementtransfer_acl","tsig_key":{"algorithm":"hmac_sha224","comment":"commenttransfer_acl","key":"keytransfer_acl","name":"nametransfer_acl","protocol_name":"protocolnametransfer_acl","secret":"secrettransfer_acl"}}]},"update_acl":{"action":"override","display_name":"displaynameupdate_acl","source":"sourceupdate_acl","value":[{"access":"allow","acl":"aclupdate_acl","address":"216.160.83.56","element":"elementupdate_acl","tsig_key":{"algorithm":"hmac_sha384","comment":"commentupdate_acl","key":"keyupdate_acl","name":"nameupdate_acl","protocol_name":"protocolnameupdate_acl","secret":"secretupdate_acl"}}]},"use_forwarders_for_subzones":{"action":"override","display_name":"displaynameuse_forwarders_for_subzones","source":"sourceuse_forwarders_for_subzones","value":false},"zone_authority":{"default_ttl":{"action":"override","display_name":"displaynamezone_authority","source":"sourcezone_authority","value":50},"expire":{"action":"inherit","display_name":"displaynameexpire","source":"sourceexpire","value":70},"mname_block":{"action":"inherit","display_name":"displaynamemname_block","source":"sourcemname_block","value":{"mname":"mnamevaluemname_block","protocol_mname":"protocolmnamemname_block","use_default_mname":true}},"negative_ttl":{"action":"inherit","display_name":"displaynamenegative_ttl","source":"sourcenegative_ttl","value":90},"protocol_rname":{"action":"inherit","display_name":"displaynameprotocol_rname","source":"sourceprotocol_rname","value":"valueprotocol_rname"},"refresh":{"action":"inherit","display_name":"displayname_refresh","source":"source_refresh","value":40},"retry":{"action":"inherit","display_name":"displayname_retry","source":"source_retry","value":570},"rname":{"action":"inherit","display_name":"displayname_rname","source":"source_rname","value":"value_rname"}}},"ip_spaces":["testipspaces"],"lame_ttl":350,"match_clients_acl":[{"access":"deny","acl":"aclmatch_clients_acl","address":"81.2.69.192","element":"elementmatch_clients_acl","tsig_key":{"algorithm":"hmac_sha512","comment":"commentmatch_clients_acl","key":"keymatch_clients_acl","name":"namematch_clients_acl","protocol_name":"protocolnamematch_clients_acl","secret":"secretmatch_clients_acl"}}],"match_destinations_acl":[{"access":"allow","acl":"aclmatch_destinations_acl","address":"81.2.69.192","element":"elementmatch_destinations_acl","tsig_key":{"algorithm":"hmac_sha384","comment":"commentmatch_destinations_acl","key":"keymatch_destinations_acl","name":"namematch_destinations_acl","protocol_name":"protocolnamematch_destinations_acl","secret":"secretmatch_destinations_acl"}}],"match_recursive_only":true,"max_cache_ttl":90,"max_negative_ttl":500,"max_udp_size":890,"minimal_responses":true,"name":"string","notify":true,"query_acl":[{"access":"accessquery_acl","acl":"aclquery_acl","address":"81.2.69.192","element":"elementquery_acl","tsig_key":{"algorithm":"hmac_sha224","comment":"commentquery_acl","key":"keyquery_acl","name":"namequery_acl","protocol_name":"protocolnamequery_acl","secret":"secretquery_acl"}}],"recursion_acl":[{"access":"allow","acl":"aclrecursion_acl","address":"81.2.69.192","element":"elementrecursion_acl","tsig_key":{"algorithm":"hmac_sha1","comment":"commentrecursion_acl","key":"keyrecursion_acl","name":"namerecursion_acl","protocol_name":"protocolnamerecursion_acl","secret":"secretrecursion_acl"}}],"recursion_enabled":true,"synthesize_address_records_from_https":false,"tags":{"message":"Hello"},"transfer_acl":[{"access":"allow","acl":"acltransfer_acl","address":"216.160.83.56","element":"elementtransfer_acl","tsig_key":{"algorithm":"hmac_sha224","comment":"commenttransfer_acl","key":"keytransfer_acl","name":"nametransfer_acl","protocol_name":"protocolnametransfer_acl","secret":"secrettransfer_acl"}}],"update_acl":[{"access":"allow","acl":"aclupdate_acl","address":"216.160.83.56","element":"elementupdate_acl","tsig_key":{"algorithm":"hmac_sha1","comment":"commentupdate_acl","key":"keyupdate_acl","name":"nameupdate_acl","protocol_name":"protocolnameupdate_acl","secret":"secretupdate_acl"}}],"updated_at":"2022-07-15T06:55:25.978Z","use_forwarders_for_subzones":true,"zone_authority":{"default_ttl":20,"expire":10,"mname":"mnamezone_authority","negative_ttl":30,"protocol_mname":"protocolmnamezone_authority","protocol_rname":"protocolrnamezone_authority","refresh":50,"retry":100,"rname":"string","use_default_mname":true}}]} + - path: /api/ddi/v1/dns/record + methods: ['GET'] + responses: + - status_code: 200 + body: | + {"results":[{"absolute_name_spec":"DNS Data Absolute Name","absolute_zone_name":"DNS Data Absolute Zone Name","comment":"DNS Data Comment","created_at":"2022-07-20T09:59:59.184Z","delegation":"DNS Data Delegation","disabled":true,"dns_absolute_name_spec":"DNS Absolute Name","dns_absolute_zone_name":"DNS Absolute Zone Name","dns_name_in_zone":"DNS Name in Zone","dns_rdata":"DNS RData","id":"ghr123ghf","inheritance_sources":{"ttl":{"action":"DNS Data Action","display_name":"DNS Display Name","source":"DNS Data Source","value":10}},"name_in_zone":"DNS Data Name in zone","options":{"create_ptr":false,"check_rmz":true,"address":"67.43.156.0"},"rdata":{"address":"81.2.69.192","flags":"DNS Data Flags","tag":"issue","value":"DNS Data Value","cname":"DNS Data Canonical Name","target":"DNS Data Target","dhcid":"122zbczba12","exchange":"DNS Data Exchange","preference":12345363467,"order":123124,"regexp":"none","replacement":"DNS Data Replacement","services":"DNS Data Test Services","dname":"DNS Data dname","expire":23131,"mname":"DNS Data mname","negative_ttl":213342,"refresh":10800,"retry":3600,"rname":"DNS Data rname","serial":12314114,"port":80,"priority":44,"weight":0,"text":"DNS Data text field","type":"32BIT","length_kind":8},"source":["STATIC"],"tags":{"message":"Hello"},"ttl":0,"type":"DNS Data Type","updated_at":"2022-07-20T09:59:59.184Z","view":"DNS Data View","view_name":"DNS Data View Name","zone":"DNS Data Zone"}]} diff --git a/packages/bloxone_ddi/changelog.yml b/packages/bloxone_ddi/changelog.yml new file mode 100644 index 0000000000..ccba43f365 --- /dev/null +++ b/packages/bloxone_ddi/changelog.yml @@ -0,0 +1,6 @@ +# newer versions go on top +- version: '0.1.0' + changes: + - description: Initial Release. + type: enhancement + link: https://github.com/elastic/integrations/pull/1 diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-common-config.yml b/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-common-config.yml new file mode 100644 index 0000000000..be41bb0d47 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-common-config.yml @@ -0,0 +1,4 @@ +fields: + tags: + - preserve_original_event + - preserve_duplicate_custom_fields diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log b/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log new file mode 100644 index 0000000000..a32f1500e6 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log @@ -0,0 +1,2 @@ +{"address":"81.2.69.192","client_id":"string","ends":"2022-07-14T11:51:15.417Z","fingerprint":"string","fingerprint_processed":"string","ha_group":"string","hardware":"string","host":"string","hostname":"string","iaid":0,"last_updated":"2022-07-14T11:51:15.417Z","options":{"message":"Hello"},"preferred_lifetime":"2022-07-14T11:51:15.417Z","protocol":"ip6","space":"string","starts":"2022-07-14T11:51:15.417Z","state":"string","type":"string"} +{"address":"81.2.69.192","client_id":"abc3212caabc","ends":"2022-07-14T11:51:15.417Z","fingerprint":"ab3213cbabab/abc23bca","fingerprint_processed":"12abca32bca32abcd","ha_group":"abc321cdcbda321","hardware":"00:00:5E:00:53:00","host":"admin","hostname":"dummy.com","iaid":0,"last_updated":"2022-07-14T11:51:15.417Z","options":{"message":"Hello"},"preferred_lifetime":"2022-07-14T11:51:15.417Z","protocol":"ip4","space":"string","starts":"2022-07-14T11:51:15.417Z","state":"used","type":"DHCPv4: DHCPv4 lease"} diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log-expected.json b/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log-expected.json new file mode 100644 index 0000000000..61d064bc41 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log-expected.json @@ -0,0 +1,141 @@ +{ + "expected": [ + { + "@timestamp": "2022-07-14T11:51:15.417Z", + "bloxone_ddi": { + "dhcp_lease": { + "address": "81.2.69.192", + "client_id": "string", + "ends": "2022-07-14T11:51:15.417Z", + "fingerprint": { + "processed": "string", + "value": "string" + }, + "ha_group": "string", + "hardware": "STRING", + "host": "string", + "hostname": "string", + "iaid": 0, + "last_updated": "2022-07-14T11:51:15.417Z", + "options": { + "message": "Hello" + }, + "preferred_lifetime": "2022-07-14T11:51:15.417Z", + "protocol": "ipv6", + "space": "string", + "starts": "2022-07-14T11:51:15.417Z", + "state": "string", + "type": "string" + } + }, + "client": { + "user": { + "id": "string" + } + }, + "ecs": { + "version": "8.4.0" + }, + "event": { + "category": [ + "network" + ], + "end": "2022-07-14T11:51:15.417Z", + "kind": "event", + "original": "{\"address\":\"81.2.69.192\",\"client_id\":\"string\",\"ends\":\"2022-07-14T11:51:15.417Z\",\"fingerprint\":\"string\",\"fingerprint_processed\":\"string\",\"ha_group\":\"string\",\"hardware\":\"string\",\"host\":\"string\",\"hostname\":\"string\",\"iaid\":0,\"last_updated\":\"2022-07-14T11:51:15.417Z\",\"options\":{\"message\":\"Hello\"},\"preferred_lifetime\":\"2022-07-14T11:51:15.417Z\",\"protocol\":\"ip6\",\"space\":\"string\",\"starts\":\"2022-07-14T11:51:15.417Z\",\"state\":\"string\",\"type\":\"string\"}", + "start": "2022-07-14T11:51:15.417Z", + "type": [ + "protocol" + ] + }, + "host": { + "hostname": "string", + "name": "string" + }, + "network": { + "type": "ipv6" + }, + "related": { + "hosts": [ + "string" + ], + "ip": [ + "81.2.69.192" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ] + }, + { + "@timestamp": "2022-07-14T11:51:15.417Z", + "bloxone_ddi": { + "dhcp_lease": { + "address": "81.2.69.192", + "client_id": "abc3212caabc", + "ends": "2022-07-14T11:51:15.417Z", + "fingerprint": { + "processed": "12abca32bca32abcd", + "value": "ab3213cbabab/abc23bca" + }, + "ha_group": "abc321cdcbda321", + "hardware": "00-00-5E-00-53-00", + "host": "admin", + "hostname": "dummy.com", + "iaid": 0, + "last_updated": "2022-07-14T11:51:15.417Z", + "options": { + "message": "Hello" + }, + "preferred_lifetime": "2022-07-14T11:51:15.417Z", + "protocol": "ipv4", + "space": "string", + "starts": "2022-07-14T11:51:15.417Z", + "state": "used", + "type": "DHCPv4: DHCPv4 lease" + } + }, + "client": { + "user": { + "id": "abc3212caabc" + } + }, + "ecs": { + "version": "8.4.0" + }, + "event": { + "category": [ + "network" + ], + "end": "2022-07-14T11:51:15.417Z", + "kind": "event", + "original": "{\"address\":\"81.2.69.192\",\"client_id\":\"abc3212caabc\",\"ends\":\"2022-07-14T11:51:15.417Z\",\"fingerprint\":\"ab3213cbabab/abc23bca\",\"fingerprint_processed\":\"12abca32bca32abcd\",\"ha_group\":\"abc321cdcbda321\",\"hardware\":\"00:00:5E:00:53:00\",\"host\":\"admin\",\"hostname\":\"dummy.com\",\"iaid\":0,\"last_updated\":\"2022-07-14T11:51:15.417Z\",\"options\":{\"message\":\"Hello\"},\"preferred_lifetime\":\"2022-07-14T11:51:15.417Z\",\"protocol\":\"ip4\",\"space\":\"string\",\"starts\":\"2022-07-14T11:51:15.417Z\",\"state\":\"used\",\"type\":\"DHCPv4: DHCPv4 lease\"}", + "start": "2022-07-14T11:51:15.417Z", + "type": [ + "protocol" + ] + }, + "host": { + "hostname": "dummy.com", + "name": "admin" + }, + "network": { + "type": "ipv4" + }, + "related": { + "hosts": [ + "admin", + "dummy.com" + ], + "ip": [ + "81.2.69.192" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ] + } + ] +} \ No newline at end of file diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/system/test-default-config.yml b/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/system/test-default-config.yml new file mode 100644 index 0000000000..5188dac65d --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/system/test-default-config.yml @@ -0,0 +1,9 @@ +input: httpjson +service: bloxone-ddi +vars: + url: http://{{Hostname}}:{{Port}} + api_key: xxxx +data_stream: + vars: + preserve_original_event: true + preserve_duplicate_custom_fields: true diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/agent/stream/httpjson.yml.hbs b/packages/bloxone_ddi/data_stream/dhcp_lease/agent/stream/httpjson.yml.hbs new file mode 100644 index 0000000000..aefcd7c934 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dhcp_lease/agent/stream/httpjson.yml.hbs @@ -0,0 +1,54 @@ +config_version: 2 +interval: {{interval}} +{{#if proxy_url }} +request.proxy_url: {{proxy_url}} +{{/if}} +{{#if ssl}} +request.ssl: {{ssl}} +{{/if}} +request.method: GET +request.url: {{url}}/api/ddi/v1/dhcp/lease +request.transforms: + - set: + target: header.Authorization + value: 'Token {{api_key}}' + - set: + target: url.params._offset + value: 0 + - set: + target: url.params._limit + value: 100 + - set: + target: url.params._order_by + value: 'last_updated asc' + - set: + target: url.params._filter + value: 'last_updated>="[[(formatDate (parseDate .cursor.last_updated_at) "2006-01-02T15:04:05.999Z")]]"' + default: 'last_updated>="[[(formatDate (now (parseDuration "-{{initial_interval}}")) "2006-01-02T15:04:05.999Z")]]"' +response.pagination: + - set: + target: url.params._offset + value: '[[if (eq (len .last_response.body.results) 100)]][[add (toInt (.last_response.url.params.Get "_offset")) 100]][[else]][[.last_response.terminate_pagination]][[end]]' + fail_on_template_error: true +cursor: + last_updated_at: + value: '[[.last_event.last_updated]]' +response.split: + target: body.results +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/bloxone_ddi/data_stream/dhcp_lease/elasticsearch/ingest_pipeline/default.yml b/packages/bloxone_ddi/data_stream/dhcp_lease/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 0000000000..9b1065ed4f --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dhcp_lease/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,244 @@ +--- +description: Pipeline for parsing DHCP lease logs. +processors: + - set: + field: ecs.version + value: '8.4.0' + - set: + field: event.kind + value: event + - set: + field: event.category + value: [network] + - set: + field: event.type + value: [protocol] + - rename: + field: message + target_field: event.original + ignore_missing: true + - json: + field: event.original + target_field: json + - fingerprint: + fields: + - json.starts + - json.last_updated + - json.ends + target_field: _id + ignore_missing: true + - convert: + field: json.address + target_field: bloxone_ddi.dhcp_lease.address + if: ctx.json?.address != '' + type: ip + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - append: + field: related.ip + value: '{{{bloxone_ddi.dhcp_lease.address}}}' + allow_duplicates: false + ignore_failure: true + - rename: + field: json.client_id + target_field: bloxone_ddi.dhcp_lease.client_id + ignore_missing: true + - set: + field: client.user.id + copy_from: bloxone_ddi.dhcp_lease.client_id + ignore_failure: true + - date: + field: json.ends + target_field: bloxone_ddi.dhcp_lease.ends + if: ctx.json?.ends != null && ctx.json.ends != '' + formats: + - ISO8601 + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - set: + field: event.end + copy_from: bloxone_ddi.dhcp_lease.ends + ignore_failure: true + - rename: + field: json.fingerprint + target_field: bloxone_ddi.dhcp_lease.fingerprint.value + ignore_missing: true + - rename: + field: json.fingerprint_processed + target_field: bloxone_ddi.dhcp_lease.fingerprint.processed + ignore_missing: true + - rename: + field: json.ha_group + target_field: bloxone_ddi.dhcp_lease.ha_group + ignore_missing: true + - gsub: + field: json.hardware + pattern: '[-:.]' + replacement: '-' + ignore_missing: true + - uppercase: + field: json.hardware + ignore_missing: true + - rename: + field: json.hardware + target_field: bloxone_ddi.dhcp_lease.hardware + ignore_missing: true + - rename: + field: json.host + target_field: bloxone_ddi.dhcp_lease.host + ignore_missing: true + - set: + field: host.name + copy_from: bloxone_ddi.dhcp_lease.host + ignore_failure: true + - append: + field: related.hosts + value: '{{{host.name}}}' + if: ctx.host?.name != null + allow_duplicates: false + ignore_failure: true + - rename: + field: json.hostname + target_field: bloxone_ddi.dhcp_lease.hostname + ignore_missing: true + - set: + field: host.hostname + copy_from: bloxone_ddi.dhcp_lease.hostname + ignore_failure: true + - append: + field: related.hosts + value: '{{{host.hostname}}}' + if: ctx.host?.hostname != null + allow_duplicates: false + ignore_failure: true + - convert: + field: json.iaid + target_field: bloxone_ddi.dhcp_lease.iaid + if: ctx.json?.iaid != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - date: + field: json.last_updated + target_field: bloxone_ddi.dhcp_lease.last_updated + if: ctx.json?.last_updated != null && ctx.json.last_updated != '' + formats: + - ISO8601 + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - set: + field: '@timestamp' + copy_from: bloxone_ddi.dhcp_lease.last_updated + ignore_failure: true + - rename: + field: json.options + target_field: bloxone_ddi.dhcp_lease.options + ignore_missing: true + - date: + field: json.preferred_lifetime + target_field: bloxone_ddi.dhcp_lease.preferred_lifetime + if: ctx.json?.preferred_lifetime != null && ctx.json.preferred_lifetime != '' + formats: + - ISO8601 + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - set: + field: json.protocol + value: ipv4 + if: ctx.json?.protocol == 'ip4' + ignore_failure: true + - set: + field: json.protocol + value: ipv6 + if: ctx.json?.protocol == 'ip6' + ignore_failure: true + - rename: + field: json.protocol + target_field: bloxone_ddi.dhcp_lease.protocol + ignore_missing: true + - set: + field: network.type + copy_from: bloxone_ddi.dhcp_lease.protocol + ignore_failure: true + - lowercase: + field: network.type + ignore_failure: true + - rename: + field: json.space + target_field: bloxone_ddi.dhcp_lease.space + ignore_missing: true + - date: + field: json.starts + target_field: bloxone_ddi.dhcp_lease.starts + if: ctx.json?.starts != null && ctx.json.starts != '' + formats: + - ISO8601 + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - set: + field: event.start + copy_from: bloxone_ddi.dhcp_lease.starts + ignore_failure: true + - rename: + field: json.state + target_field: bloxone_ddi.dhcp_lease.state + ignore_missing: true + - rename: + field: json.type + target_field: bloxone_ddi.dhcp_lease.type + ignore_missing: true + - remove: + field: json + ignore_missing: true + - remove: + field: + - bloxone_ddi.dhcp_lease.last_updated + - bloxone_ddi.dhcp_lease.client_id + - bloxone_ddi.dhcp_lease.ends + - bloxone_ddi.dhcp_lease.starts + - bloxone_ddi.dhcp_lease.hostname + - bloxone_ddi.dhcp_lease.host + - bloxone_ddi.dhcp_lease.protocol + if: ctx.tags == null || !ctx.tags.contains('preserve_duplicate_custom_fields') + ignore_failure: true + ignore_missing: true + - remove: + field: event.original + if: ctx.tags == null || !(ctx.tags.contains('preserve_original_event')) + ignore_failure: true + 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); +on_failure: +- append: + field: error.message + value: '{{ _ingest.on_failure_message }}' diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/fields/agent.yml b/packages/bloxone_ddi/data_stream/dhcp_lease/fields/agent.yml new file mode 100644 index 0000000000..6e1bac042b --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dhcp_lease/fields/agent.yml @@ -0,0 +1,186 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: '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.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + +- name: input.type + type: keyword + description: Input type +- name: log.offset + type: long + description: Log offset diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/fields/base-fields.yml b/packages/bloxone_ddi/data_stream/dhcp_lease/fields/base-fields.yml new file mode 100644 index 0000000000..b70b26f124 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dhcp_lease/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: '@timestamp' + type: date + description: Event timestamp. +- name: event.module + type: constant_keyword + description: Event module. + value: bloxone_ddi +- name: event.dataset + type: constant_keyword + description: Event dataset. + value: bloxone_ddi.dhcp_lease diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/fields/ecs.yml b/packages/bloxone_ddi/data_stream/dhcp_lease/fields/ecs.yml new file mode 100644 index 0000000000..9e89db6b83 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dhcp_lease/fields/ecs.yml @@ -0,0 +1,30 @@ +- external: ecs + name: client.user.id +- external: ecs + name: ecs.version +- external: ecs + name: event.category +- external: ecs + name: event.created +- external: ecs + name: event.end +- external: ecs + name: event.kind +- external: ecs + name: event.original +- external: ecs + name: event.start +- external: ecs + name: event.type +- external: ecs + name: host.hostname +- external: ecs + name: host.name +- external: ecs + name: network.type +- external: ecs + name: related.hosts +- external: ecs + name: related.ip +- external: ecs + name: tags diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/fields/fields.yml b/packages/bloxone_ddi/data_stream/dhcp_lease/fields/fields.yml new file mode 100644 index 0000000000..dd23d238e6 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dhcp_lease/fields/fields.yml @@ -0,0 +1,60 @@ +- name: bloxone_ddi.dhcp_lease + type: group + fields: + - name: address + type: ip + description: The IP address of the DHCP lease in the format "a.b.c.d". This address will be marked as leased in IPAM while the lease exists. + - name: client_id + type: keyword + description: The client ID of the DHCP lease. It might be empty. + - name: ends + type: date + description: The time when the DHCP lease will expire. + - name: fingerprint + type: group + fields: + - name: processed + type: keyword + description: Indicates if the DHCP lease has been fingerprinted. + - name: value + type: keyword + description: The DHCP fingerprint of the lease. + - name: ha_group + type: keyword + description: The resource identifier. + - name: hardware + type: keyword + description: The hardware address of the DHCP lease. This specifies the MAC address of the network interface on which the lease will be used. It consists of six groups of two hex digits in lower-case separated by colons. For example, "aa:bb:cc:dd:ee:ff". + - name: host + type: keyword + description: The resource identifier. + - name: hostname + type: keyword + description: The client hostname of the DHCP lease. This specifies the host name that the DHCP client sends to the DHCP server using DHCP option 12. It is a fully qualified domain name, consisting of a series of labels separated by dots. For example, "www.infoblox.com". It might be empty. + - name: iaid + type: long + description: Identity Association Identifier (IAID) of the lease. Applicable only for DHCPv6. + - name: last_updated + type: date + description: The time when the DHCP lease was last updated. + - name: options + type: flattened + description: The DHCP options of the lease in JSON format. + - name: preferred_lifetime + type: date + description: The preferred time when the DHCP lease should expire. Applicable only for DHCPv6. + - name: protocol + type: keyword + description: Lease protocol type. + - name: space + type: keyword + description: The resource identifier. + - name: starts + type: date + description: The time when the DHCP lease was issued. + - name: state + type: keyword + description: The state of the DHCP lease. + - name: type + type: keyword + description: Lease type. diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/manifest.yml b/packages/bloxone_ddi/data_stream/dhcp_lease/manifest.yml new file mode 100644 index 0000000000..ad96b8dc37 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dhcp_lease/manifest.yml @@ -0,0 +1,58 @@ +title: Collect DHCP Lease logs from BloxOne DDI +type: logs +streams: + - input: httpjson + title: DHCP Lease logs + description: Collect DHCP Lease logs from BloxOne DDI. + template_path: httpjson.yml.hbs + vars: + - name: initial_interval + type: text + title: Initial Interval + description: 'How far back to pull the DHCP Lease events from BloxOne DDI. NOTE: Supported units for this parameter are h/m/s.' + multi: false + required: true + show_user: true + default: 24h + - name: interval + type: text + title: Interval + description: 'Duration between requests to the BloxOne DDI API. NOTE: Supported units for this parameter are h/m/s.' + multi: false + required: true + show_user: true + default: 1m + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - bloxone_ddi-dhcp_lease + - 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: true + title: Preserve duplicate custom fields + description: Preserve custom fields for all ECS mappings. + 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/bloxone_ddi/data_stream/dhcp_lease/sample_event.json b/packages/bloxone_ddi/data_stream/dhcp_lease/sample_event.json new file mode 100644 index 0000000000..063cdcdcc0 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dhcp_lease/sample_event.json @@ -0,0 +1,95 @@ +{ + "@timestamp": "2022-07-11T11:51:15.417Z", + "agent": { + "ephemeral_id": "94ecc777-655d-433b-8b9a-03e70d1939e9", + "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.2.0" + }, + "bloxone_ddi": { + "dhcp_lease": { + "address": "81.2.69.192", + "client_id": "abc3212abc", + "ends": "2022-07-11T11:51:15.417Z", + "fingerprint": { + "processed": "12abca32bca32abcd", + "value": "ab3213cbabab/abc23bca" + }, + "ha_group": "abc321cdcbda321", + "hardware": "00-00-5E-00-53-00", + "host": "admin", + "hostname": "Host1", + "iaid": 0, + "last_updated": "2022-07-11T11:51:15.417Z", + "options": { + "message": "Hello" + }, + "preferred_lifetime": "2022-07-11T11:51:15.417Z", + "protocol": "ipv4", + "space": "DHCP lease Space", + "starts": "2022-07-14T11:51:15.417Z", + "state": "used", + "type": "DHCP lease Type" + } + }, + "client": { + "user": { + "id": "abc3212abc" + } + }, + "data_stream": { + "dataset": "bloxone_ddi.dhcp_lease", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.4.0" + }, + "elastic_agent": { + "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "verified", + "category": [ + "network" + ], + "created": "2022-08-31T07:06:44.259Z", + "dataset": "bloxone_ddi.dhcp_lease", + "end": "2022-07-11T11:51:15.417Z", + "ingested": "2022-08-31T07:06:47Z", + "kind": "event", + "original": "{\"address\":\"81.2.69.192\",\"client_id\":\"abc3212abc\",\"ends\":\"2022-07-11T11:51:15.417Z\",\"fingerprint\":\"ab3213cbabab/abc23bca\",\"fingerprint_processed\":\"12abca32bca32abcd\",\"ha_group\":\"abc321cdcbda321\",\"hardware\":\"00:00:5E:00:53:00\",\"host\":\"admin\",\"hostname\":\"Host1\",\"iaid\":0,\"last_updated\":\"2022-07-11T11:51:15.417Z\",\"options\":{\"message\":\"Hello\"},\"preferred_lifetime\":\"2022-07-11T11:51:15.417Z\",\"protocol\":\"ip4\",\"space\":\"DHCP lease Space\",\"starts\":\"2022-07-14T11:51:15.417Z\",\"state\":\"used\",\"type\":\"DHCP lease Type\"}", + "start": "2022-07-14T11:51:15.417Z", + "type": [ + "protocol" + ] + }, + "host": { + "hostname": "Host1", + "name": "admin" + }, + "input": { + "type": "httpjson" + }, + "network": { + "type": "ipv4" + }, + "related": { + "hosts": [ + "admin", + "Host1" + ], + "ip": [ + "81.2.69.192" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields", + "forwarded", + "bloxone_ddi-dhcp_lease" + ] +} \ No newline at end of file diff --git a/packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-common-config.yml b/packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-common-config.yml new file mode 100644 index 0000000000..be41bb0d47 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-common-config.yml @@ -0,0 +1,4 @@ +fields: + tags: + - preserve_original_event + - preserve_duplicate_custom_fields diff --git a/packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log b/packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log new file mode 100644 index 0000000000..2ccba65845 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log @@ -0,0 +1,2 @@ +{"add_edns_option_in_outgoing_query":true,"comment":"string","created_at":"2022-07-15T06:55:25.978Z","custom_root_ns":[{"address":"81.2.69.192","fqdn":"string","protocol_fqdn":"string"}],"custom_root_ns_enabled":true,"disabled":true,"dnssec_enable_validation":true,"dnssec_enabled":true,"dnssec_root_keys":[{"algorithm":2,"protocol_zone":"string","public_key":"string","sep":true,"zone":"string"}],"dnssec_trust_anchors":[{"algorithm":0,"protocol_zone":"string","public_key":"string","sep":true,"zone":"string"}],"dnssec_validate_expiry":true,"ecs_enabled":true,"ecs_forwarding":true,"ecs_prefix_v4":0,"ecs_prefix_v6":0,"ecs_zones":[{"access":"string","fqdn":"string","protocol_fqdn":"string"}],"edns_udp_size":0,"forwarders":[{"address":"81.2.69.192","fqdn":"string","protocol_fqdn":"string"}],"forwarders_only":true,"gss_tsig_enabled":true,"id":"string","inheritance_sources":{"add_edns_option_in_outgoing_query":{"action":"string","display_name":"string","source":"string","value":true},"custom_root_ns_block":{"action":"string","display_name":"string","source":"string","value":{"custom_root_ns":[{"address":"67.43.156.0","fqdn":"string","protocol_fqdn":"string"}],"custom_root_ns_enabled":true}},"dnssec_validation_block":{"action":"string","display_name":"string","source":"string","value":{"dnssec_enable_validation":true,"dnssec_enabled":true,"dnssec_trust_anchors":[{"algorithm":2,"protocol_zone":"string","public_key":"string","sep":false,"zone":"string"}],"dnssec_validate_expiry":true}},"ecs_block":{"action":"string","display_name":"string","source":"string","value":{"ecs_enabled":false,"ecs_forwarding":true,"ecs_prefix_v4":4,"ecs_prefix_v6":10,"ecs_zones":[{"access":"allow","fqdn":"Test Domain","protocol_fqdn":"string"}]}},"edns_udp_size":{"action":"inherit","display_name":"Demo","source":"string","value":10},"forwarders_block":{"action":"string","display_name":"string","source":"string","value":{"forwarders":[{"address":"89.160.20.128","fqdn":"string","protocol_fqdn":"string"}],"forwarders_only":true}},"gss_tsig_enabled":{"action":"string","display_name":"string","source":"string","value":true},"lame_ttl":{"action":"string","display_name":"string","source":"string","value":0},"match_recursive_only":{"action":"string","display_name":"string","source":"string","value":false},"max_cache_ttl":{"action":"string","display_name":"string","source":"string","value":0},"max_negative_ttl":{"action":"string","display_name":"string","source":"string","value":12},"max_udp_size":{"action":"string","display_name":"string","source":"string","value":0},"minimal_responses":{"action":"string","display_name":"string","source":"string","value":true},"notify":{"action":"string","display_name":"string","source":"string","value":true},"query_acl":{"action":"deny","display_name":"string","source":"string","value":[{"access":"allow","acl":"string","address":"89.160.20.128","element":"any","tsig_key":{"algorithm":"hmac_sha256","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}]},"recursion_acl":{"action":"string","display_name":"string","source":"string","value":[{"access":"deny","acl":"string","address":"89.160.20.128","element":"tsig_key","tsig_key":{"algorithm":"hmac_sha384","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}]},"recursion_enabled":{"action":"string","display_name":"string","source":"string","value":true},"synthesize_address_records_from_https":{"action":"inherit","display_name":"string","source":"string","value":true},"transfer_acl":{"action":"inherit","display_name":"string","source":"string","value":[{"access":"allow","acl":"string","address":"216.160.83.56","element":"string","tsig_key":{"algorithm":"hmac_sha224","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}]},"update_acl":{"action":"string","display_name":"string","source":"string","value":[{"access":"allow","acl":"string","address":"216.160.83.56","element":"acl","tsig_key":{"algorithm":"hmac_sha384","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}]},"use_forwarders_for_subzones":{"action":"override","display_name":"string","source":"string","value":false},"zone_authority":{"default_ttl":{"action":"string","display_name":"string","source":"string","value":0},"expire":{"action":"string","display_name":"string","source":"string","value":0},"mname_block":{"action":"string","display_name":"string","source":"string","value":{"mname":"string","protocol_mname":"dummy server","use_default_mname":true}},"negative_ttl":{"action":"string","display_name":"string","source":"string","value":0},"protocol_rname":{"action":"string","display_name":"string","source":"string","value":"string"},"refresh":{"action":"string","display_name":"string","source":"string","value":0},"retry":{"action":"string","display_name":"string","source":"string","value":0},"rname":{"action":"string","display_name":"string","source":"string","value":"string"}}},"ip_spaces":["string"],"lame_ttl":0,"match_clients_acl":[{"access":"deny","acl":"string","address":"81.2.69.192","element":"any","tsig_key":{"algorithm":"hmac_sha512","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}],"match_destinations_acl":[{"access":"allow","acl":"Demo","address":"81.2.69.192","element":"string","tsig_key":{"algorithm":"hmac_sha384","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}],"match_recursive_only":true,"max_cache_ttl":0,"max_negative_ttl":0,"max_udp_size":0,"minimal_responses":true,"name":"string","notify":true,"query_acl":[{"access":"string","acl":"string","address":"81.2.69.192","element":"acl","tsig_key":{"algorithm":"hmac_sha224","comment":"Demo","key":"string","name":"string","protocol_name":"string","secret":"string"}}],"recursion_acl":[{"access":"allow","acl":"ACL","address":"81.2.69.192","element":"any","tsig_key":{"algorithm":"hmac_sha1","comment":"dummy","key":"Demo","name":"string","protocol_name":"string","secret":"string"}}],"recursion_enabled":true,"synthesize_address_records_from_https":false,"tags":{},"transfer_acl":[{"access":"allow","acl":"value","address":"216.160.83.56","element":"any","tsig_key":{"algorithm":"hmac_sha224","comment":"string","key":"dummy","name":"string","protocol_name":"string","secret":"string"}}],"update_acl":[{"access":"allow","acl":"name","address":"216.160.83.56","element":"acl","tsig_key":{"algorithm":"hmac_sha1","comment":"string","key":"Test","name":"string","protocol_name":"string","secret":"string"}}],"updated_at":"2022-07-15T06:55:25.978Z","use_forwarders_for_subzones":true,"zone_authority":{"default_ttl":0,"expire":0,"mname":"string","negative_ttl":0,"protocol_mname":"string","protocol_rname":"string","refresh":0,"retry":0,"rname":"string","use_default_mname":true}} +{"add_edns_option_in_outgoing_query":false,"comment":"","created_at":"2022-08-16T09:24:24.231424Z","custom_root_ns":[],"custom_root_ns_enabled":false,"disabled":false,"dnssec_enable_validation":true,"dnssec_enabled":true,"dnssec_root_keys":[{"algorithm":2,"protocol_zone":".","public_key":"abc12dc34/12abcd3242cdaaacd+/abd12cdacd4221cdacbdbdbdbd/abcAC23CBD22323abcddcba=/abcddcbdcda13411bdbddb=","sep":true,"zone":"."}],"dnssec_trust_anchors":[],"dnssec_validate_expiry":true,"ecs_enabled":false,"ecs_forwarding":false,"ecs_prefix_v4":24,"ecs_prefix_v6":56,"ecs_zones":[],"edns_udp_size":1232,"forwarders":[],"forwarders_only":false,"gss_tsig_enabled":false,"id":"dns/view/abcd-12acbd-1ab2-12abcd-1abcd33","inheritance_sources":null,"ip_spaces":["ipam/ip_space/1abcd323-12abcd-12abcd-12ab-123badcd"],"lame_ttl":600,"match_clients_acl":[{"access":"allow","acl":null,"address":"81.2.69.192","element":"any","tsig_key":null}],"match_destinations_acl":[{"access":"allow","acl":null,"address":"81.2.69.192","element":"any","tsig_key":null}],"match_recursive_only":false,"max_cache_ttl":604800,"max_negative_ttl":10800,"max_udp_size":1232,"minimal_responses":false,"name":"Demo","notify":false,"query_acl":[],"recursion_acl":[],"recursion_enabled":true,"synthesize_address_records_from_https":false,"tags":null,"transfer_acl":[],"update_acl":[],"updated_at":"2022-08-16T09:24:24.231424Z","use_forwarders_for_subzones":true,"zone_authority":{"default_ttl":28800,"expire":2419200,"mname":"ns.b1ddi","negative_ttl":900,"protocol_mname":"ns.b1ddi","protocol_rname":"hostmaster","refresh":10800,"retry":3600,"rname":"hostmaster","use_default_mname":true}} diff --git a/packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log-expected.json b/packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log-expected.json new file mode 100644 index 0000000000..1aec3e99d8 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log-expected.json @@ -0,0 +1,764 @@ +{ + "expected": [ + { + "@timestamp": "2022-07-15T06:55:25.978Z", + "bloxone_ddi": { + "dns_config": { + "add_edns": { + "option_in": { + "outgoing_query": true + } + }, + "comment": "string", + "created_at": "2022-07-15T06:55:25.978Z", + "custom_root_ns": [ + { + "address": "81.2.69.192", + "fqdn": "string", + "protocol": { + "fqdn": "string" + } + } + ], + "custom_root_ns_enabled": true, + "disabled": true, + "dnssec": { + "enable_validation": true, + "enabled": true, + "root_keys": [ + { + "algorithm": 2, + "protocol": { + "zone": "string" + }, + "public": "string", + "sep": true, + "zone": "string" + } + ], + "trust_anchors": [ + { + "algorithm": 0, + "protocol": { + "zone": "string" + }, + "public_key": "string", + "sep": true, + "zone": "string" + } + ], + "validate_expiry": true + }, + "ecs": { + "enabled": true, + "forwarding": true, + "prefix_v4": 0, + "prefix_v6": 0, + "zones": [ + { + "access": "string", + "fqdn": "string", + "protocol": { + "fqdn": "string" + } + } + ] + }, + "edns": { + "udp": { + "size": 0 + } + }, + "forwarders": [ + { + "address": "81.2.69.192", + "fqdn": "string", + "protocol": { + "fqdn": "string" + } + } + ], + "forwarders_only": true, + "gss_tsig_enabled": true, + "id": "string", + "inheritance": { + "sources": { + "add_edns": { + "option_in": { + "outgoing_query": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": true + } + } + }, + "custom_root_ns": { + "block": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": [ + { + "address": "67.43.156.0", + "fqdn": "string", + "protocol": { + "fqdn": "string" + } + } + ], + "value_enabled": true + } + }, + "dnssec": { + "validation": { + "block": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": { + "enable": true, + "enabled": true, + "trust_anchors": [ + { + "algorithm": 2, + "protocol": { + "zone": "string" + }, + "public_key": "string", + "sep": false, + "zone": "string" + } + ], + "validate_expiry": true + } + } + } + }, + "ecs": { + "block": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": { + "enabled": false, + "forwarding": true, + "prefix_v4": 4, + "prefix_v6": 10, + "zones": [ + { + "access": "allow", + "fqdn": "Test Domain", + "protocol": { + "fqdn": "string" + } + } + ] + } + } + }, + "edns": { + "udp": { + "size": { + "action": "inherit", + "display": { + "name": "Demo" + }, + "source": "string", + "value": 10 + } + } + }, + "forwarders": { + "block": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": [ + { + "address": "89.160.20.128", + "fqdn": "string", + "protocol": { + "fqdn": "string" + } + } + ], + "value_only": true + } + }, + "gss_tsig_enabled": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": true + }, + "lame_ttl": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": 0 + }, + "match_recursive_only": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": false + }, + "max_cache_ttl": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": 0 + }, + "max_negative_ttl": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": 12 + }, + "max_udp_size": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": 0 + }, + "minimal_responses": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": true + }, + "notify": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": true + }, + "query_acl": { + "action": "deny", + "display": { + "name": "string" + }, + "source": "string", + "value": [ + { + "access": "allow", + "acl": "string", + "address": "89.160.20.128", + "element": "any", + "tsig_key": { + "algorithm": "hmac_sha256", + "comment": "string", + "name": "string", + "protocol": { + "name": "string" + }, + "secret": "string", + "value": "string" + } + } + ] + }, + "recursion_acl": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": [ + { + "access": "deny", + "acl": "string", + "address": "89.160.20.128", + "element": "tsig_key", + "tsig_key": { + "algorithm": "hmac_sha384", + "comment": "string", + "name": "string", + "protocol": { + "name": "string" + }, + "secret": "string", + "value": "string" + } + } + ] + }, + "recursion_enabled": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": true + }, + "synthesize": { + "address_records_from_https": { + "action": "inherit", + "display": { + "name": "string" + }, + "name": "string", + "value": true + } + }, + "transfer_acl": { + "action": "inherit", + "display": { + "name": "string" + }, + "source": "string", + "value": [ + { + "access": "allow", + "acl": "string", + "address": "216.160.83.56", + "element": "string", + "tsig_key": { + "algorithm": "hmac_sha224", + "comment": "string", + "name": "string", + "protocol": { + "name": "string" + }, + "secret": "string", + "value": "string" + } + } + ] + }, + "update_acl": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": [ + { + "access": "allow", + "acl": "string", + "address": "216.160.83.56", + "element": "acl", + "tsig_key": { + "algorithm": "hmac_sha384", + "comment": "string", + "name": "string", + "protocol": { + "name": "string" + }, + "secret": "string", + "value": "string" + } + } + ] + }, + "use_forwarders_for_subzones": { + "action": "override", + "display": { + "name": "string" + }, + "source": "string", + "value": false + }, + "zone_authority": { + "default_ttl": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": 0 + }, + "expire": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": 0 + }, + "mname_block": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": { + "isdefault": true, + "protocol": { + "mname": "dummy server" + } + } + }, + "mname_block_value": "string", + "negative_ttl": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": 0 + }, + "protocol_rname": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": "string" + }, + "refresh": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": 0 + }, + "retry": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": 0 + }, + "rname": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": "string" + } + } + } + }, + "ip_spaces": [ + "string" + ], + "lame_ttl": 0, + "match_clients_acl": [ + { + "access": "deny", + "address": "81.2.69.192", + "element": "any", + "tsig_key": { + "algorithm": "hmac_sha512", + "comment": "string", + "name": "string", + "protocol": { + "name": "string" + }, + "secret": "string", + "value": "string" + }, + "value": "string" + } + ], + "match_destinations_acl": [ + { + "access": "allow", + "address": "81.2.69.192", + "element": "string", + "tsig_key": { + "algorithm": "hmac_sha384", + "comment": "string", + "name": "string", + "protocol": { + "name": "string" + }, + "secret": "string", + "value": "string" + }, + "value": "Demo" + } + ], + "match_recursive_only": true, + "max_cache_ttl": 0, + "max_negative_ttl": 0, + "max_udp_size": 0, + "minimal_responses": true, + "name": "string", + "notify": true, + "query_acl": [ + { + "access": "string", + "address": "81.2.69.192", + "element": "acl", + "tsig_key": { + "algorithm": "hmac_sha224", + "comment": "Demo", + "name": "string", + "protocol": { + "name": "string" + }, + "secret": "string", + "value": "string" + }, + "value": "string" + } + ], + "recursion_acl": [ + { + "access": "allow", + "address": "81.2.69.192", + "element": "any", + "tsig_key": { + "algorithm": "hmac_sha1", + "comment": "dummy", + "name": "string", + "protocol": { + "name": "string" + }, + "secret": "string", + "value": "Demo" + }, + "value": "ACL" + } + ], + "recursion_enabled": true, + "synthesize": { + "address_records_from_https": false + }, + "transfer_acl": [ + { + "access": "allow", + "address": "216.160.83.56", + "element": "any", + "tsig_key": { + "algorithm": "hmac_sha224", + "comment": "string", + "name": "string", + "protocol": { + "name": "string" + }, + "secret": "string", + "value": "dummy" + }, + "value": "value" + } + ], + "update_acl": [ + { + "access": "allow", + "address": "216.160.83.56", + "element": "acl", + "tsig_key": { + "algorithm": "hmac_sha1", + "comment": "string", + "name": "string", + "protocol": { + "name": "string" + }, + "secret": "string", + "value": "Test" + }, + "value": "name" + } + ], + "updated_at": "2022-07-15T06:55:25.978Z", + "use_forwarders_for_subzones": true, + "zone_authority": { + "default_ttl": 0, + "expire": 0, + "mname": "string", + "negative_ttl": 0, + "protocol": { + "mname": "string", + "rname": "string" + }, + "refresh": 0, + "retry": 0, + "rname": "string", + "use_default_mname": true + } + } + }, + "dns": { + "answers": { + "ttl": 0 + } + }, + "ecs": { + "version": "8.4.0" + }, + "event": { + "category": [ + "network" + ], + "created": "2022-07-15T06:55:25.978Z", + "id": "string", + "kind": "event", + "original": "{\"add_edns_option_in_outgoing_query\":true,\"comment\":\"string\",\"created_at\":\"2022-07-15T06:55:25.978Z\",\"custom_root_ns\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"string\",\"protocol_fqdn\":\"string\"}],\"custom_root_ns_enabled\":true,\"disabled\":true,\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_root_keys\":[{\"algorithm\":2,\"protocol_zone\":\"string\",\"public_key\":\"string\",\"sep\":true,\"zone\":\"string\"}],\"dnssec_trust_anchors\":[{\"algorithm\":0,\"protocol_zone\":\"string\",\"public_key\":\"string\",\"sep\":true,\"zone\":\"string\"}],\"dnssec_validate_expiry\":true,\"ecs_enabled\":true,\"ecs_forwarding\":true,\"ecs_prefix_v4\":0,\"ecs_prefix_v6\":0,\"ecs_zones\":[{\"access\":\"string\",\"fqdn\":\"string\",\"protocol_fqdn\":\"string\"}],\"edns_udp_size\":0,\"forwarders\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"string\",\"protocol_fqdn\":\"string\"}],\"forwarders_only\":true,\"gss_tsig_enabled\":true,\"id\":\"string\",\"inheritance_sources\":{\"add_edns_option_in_outgoing_query\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"custom_root_ns_block\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":{\"custom_root_ns\":[{\"address\":\"67.43.156.0\",\"fqdn\":\"string\",\"protocol_fqdn\":\"string\"}],\"custom_root_ns_enabled\":true}},\"dnssec_validation_block\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":{\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_trust_anchors\":[{\"algorithm\":2,\"protocol_zone\":\"string\",\"public_key\":\"string\",\"sep\":false,\"zone\":\"string\"}],\"dnssec_validate_expiry\":true}},\"ecs_block\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":10,\"ecs_zones\":[{\"access\":\"allow\",\"fqdn\":\"Test Domain\",\"protocol_fqdn\":\"string\"}]}},\"edns_udp_size\":{\"action\":\"inherit\",\"display_name\":\"Demo\",\"source\":\"string\",\"value\":10},\"forwarders_block\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":{\"forwarders\":[{\"address\":\"89.160.20.128\",\"fqdn\":\"string\",\"protocol_fqdn\":\"string\"}],\"forwarders_only\":true}},\"gss_tsig_enabled\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"lame_ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"match_recursive_only\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":false},\"max_cache_ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"max_negative_ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":12},\"max_udp_size\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"minimal_responses\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"notify\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"query_acl\":{\"action\":\"deny\",\"display_name\":\"string\",\"source\":\"string\",\"value\":[{\"access\":\"allow\",\"acl\":\"string\",\"address\":\"89.160.20.128\",\"element\":\"any\",\"tsig_key\":{\"algorithm\":\"hmac_sha256\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}]},\"recursion_acl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":[{\"access\":\"deny\",\"acl\":\"string\",\"address\":\"89.160.20.128\",\"element\":\"tsig_key\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}]},\"recursion_enabled\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"synthesize_address_records_from_https\":{\"action\":\"inherit\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"transfer_acl\":{\"action\":\"inherit\",\"display_name\":\"string\",\"source\":\"string\",\"value\":[{\"access\":\"allow\",\"acl\":\"string\",\"address\":\"216.160.83.56\",\"element\":\"string\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}]},\"update_acl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":[{\"access\":\"allow\",\"acl\":\"string\",\"address\":\"216.160.83.56\",\"element\":\"acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}]},\"use_forwarders_for_subzones\":{\"action\":\"override\",\"display_name\":\"string\",\"source\":\"string\",\"value\":false},\"zone_authority\":{\"default_ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"expire\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"mname_block\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":{\"mname\":\"string\",\"protocol_mname\":\"dummy server\",\"use_default_mname\":true}},\"negative_ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"protocol_rname\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":\"string\"},\"refresh\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"retry\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"rname\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":\"string\"}}},\"ip_spaces\":[\"string\"],\"lame_ttl\":0,\"match_clients_acl\":[{\"access\":\"deny\",\"acl\":\"string\",\"address\":\"81.2.69.192\",\"element\":\"any\",\"tsig_key\":{\"algorithm\":\"hmac_sha512\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"match_destinations_acl\":[{\"access\":\"allow\",\"acl\":\"Demo\",\"address\":\"81.2.69.192\",\"element\":\"string\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"match_recursive_only\":true,\"max_cache_ttl\":0,\"max_negative_ttl\":0,\"max_udp_size\":0,\"minimal_responses\":true,\"name\":\"string\",\"notify\":true,\"query_acl\":[{\"access\":\"string\",\"acl\":\"string\",\"address\":\"81.2.69.192\",\"element\":\"acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"Demo\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"recursion_acl\":[{\"access\":\"allow\",\"acl\":\"ACL\",\"address\":\"81.2.69.192\",\"element\":\"any\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"dummy\",\"key\":\"Demo\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"recursion_enabled\":true,\"synthesize_address_records_from_https\":false,\"tags\":{},\"transfer_acl\":[{\"access\":\"allow\",\"acl\":\"value\",\"address\":\"216.160.83.56\",\"element\":\"any\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"string\",\"key\":\"dummy\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"update_acl\":[{\"access\":\"allow\",\"acl\":\"name\",\"address\":\"216.160.83.56\",\"element\":\"acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"string\",\"key\":\"Test\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"updated_at\":\"2022-07-15T06:55:25.978Z\",\"use_forwarders_for_subzones\":true,\"zone_authority\":{\"default_ttl\":0,\"expire\":0,\"mname\":\"string\",\"negative_ttl\":0,\"protocol_mname\":\"string\",\"protocol_rname\":\"string\",\"refresh\":0,\"retry\":0,\"rname\":\"string\",\"use_default_mname\":true}}", + "type": [ + "protocol" + ] + }, + "related": { + "hash": [ + "hmac_sha256", + "hmac_sha384", + "hmac_sha224", + "hmac_sha512", + "hmac_sha1" + ], + "ip": [ + "81.2.69.192", + "67.43.156.0", + "89.160.20.128", + "216.160.83.56" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ] + }, + { + "@timestamp": "2022-08-16T09:24:24.231Z", + "bloxone_ddi": { + "dns_config": { + "add_edns": { + "option_in": { + "outgoing_query": false + } + }, + "created_at": "2022-08-16T09:24:24.231Z", + "custom_root_ns_enabled": false, + "disabled": false, + "dnssec": { + "enable_validation": true, + "enabled": true, + "root_keys": [ + { + "algorithm": 2, + "protocol": { + "zone": "." + }, + "public": "abc12dc34/12abcd3242cdaaacd+/abd12cdacd4221cdacbdbdbdbd/abcAC23CBD22323abcddcba=/abcddcbdcda13411bdbddb=", + "sep": true, + "zone": "." + } + ], + "validate_expiry": true + }, + "ecs": { + "enabled": false, + "forwarding": false, + "prefix_v4": 24, + "prefix_v6": 56 + }, + "edns": { + "udp": { + "size": 1232 + } + }, + "forwarders_only": false, + "gss_tsig_enabled": false, + "id": "dns/view/abcd-12acbd-1ab2-12abcd-1abcd33", + "ip_spaces": [ + "ipam/ip_space/1abcd323-12abcd-12abcd-12ab-123badcd" + ], + "lame_ttl": 600, + "match_clients_acl": [ + { + "access": "allow", + "address": "81.2.69.192", + "element": "any" + } + ], + "match_destinations_acl": [ + { + "access": "allow", + "address": "81.2.69.192", + "element": "any" + } + ], + "match_recursive_only": false, + "max_cache_ttl": 604800, + "max_negative_ttl": 10800, + "max_udp_size": 1232, + "minimal_responses": false, + "name": "Demo", + "notify": false, + "recursion_enabled": true, + "synthesize": { + "address_records_from_https": false + }, + "updated_at": "2022-08-16T09:24:24.231Z", + "use_forwarders_for_subzones": true, + "zone_authority": { + "default_ttl": 28800, + "expire": 2419200, + "mname": "ns.b1ddi", + "negative_ttl": 900, + "protocol": { + "mname": "ns.b1ddi", + "rname": "hostmaster" + }, + "refresh": 10800, + "retry": 3600, + "rname": "hostmaster", + "use_default_mname": true + } + } + }, + "dns": { + "answers": { + "ttl": 600 + } + }, + "ecs": { + "version": "8.4.0" + }, + "event": { + "category": [ + "network" + ], + "created": "2022-08-16T09:24:24.231Z", + "id": "dns/view/abcd-12acbd-1ab2-12abcd-1abcd33", + "kind": "event", + "original": "{\"add_edns_option_in_outgoing_query\":false,\"comment\":\"\",\"created_at\":\"2022-08-16T09:24:24.231424Z\",\"custom_root_ns\":[],\"custom_root_ns_enabled\":false,\"disabled\":false,\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_root_keys\":[{\"algorithm\":2,\"protocol_zone\":\".\",\"public_key\":\"abc12dc34/12abcd3242cdaaacd+/abd12cdacd4221cdacbdbdbdbd/abcAC23CBD22323abcddcba=/abcddcbdcda13411bdbddb=\",\"sep\":true,\"zone\":\".\"}],\"dnssec_trust_anchors\":[],\"dnssec_validate_expiry\":true,\"ecs_enabled\":false,\"ecs_forwarding\":false,\"ecs_prefix_v4\":24,\"ecs_prefix_v6\":56,\"ecs_zones\":[],\"edns_udp_size\":1232,\"forwarders\":[],\"forwarders_only\":false,\"gss_tsig_enabled\":false,\"id\":\"dns/view/abcd-12acbd-1ab2-12abcd-1abcd33\",\"inheritance_sources\":null,\"ip_spaces\":[\"ipam/ip_space/1abcd323-12abcd-12abcd-12ab-123badcd\"],\"lame_ttl\":600,\"match_clients_acl\":[{\"access\":\"allow\",\"acl\":null,\"address\":\"81.2.69.192\",\"element\":\"any\",\"tsig_key\":null}],\"match_destinations_acl\":[{\"access\":\"allow\",\"acl\":null,\"address\":\"81.2.69.192\",\"element\":\"any\",\"tsig_key\":null}],\"match_recursive_only\":false,\"max_cache_ttl\":604800,\"max_negative_ttl\":10800,\"max_udp_size\":1232,\"minimal_responses\":false,\"name\":\"Demo\",\"notify\":false,\"query_acl\":[],\"recursion_acl\":[],\"recursion_enabled\":true,\"synthesize_address_records_from_https\":false,\"tags\":null,\"transfer_acl\":[],\"update_acl\":[],\"updated_at\":\"2022-08-16T09:24:24.231424Z\",\"use_forwarders_for_subzones\":true,\"zone_authority\":{\"default_ttl\":28800,\"expire\":2419200,\"mname\":\"ns.b1ddi\",\"negative_ttl\":900,\"protocol_mname\":\"ns.b1ddi\",\"protocol_rname\":\"hostmaster\",\"refresh\":10800,\"retry\":3600,\"rname\":\"hostmaster\",\"use_default_mname\":true}}", + "type": [ + "protocol" + ] + }, + "related": { + "ip": [ + "81.2.69.192" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ] + } + ] +} \ No newline at end of file diff --git a/packages/bloxone_ddi/data_stream/dns_config/_dev/test/system/test-default-config.yml b/packages/bloxone_ddi/data_stream/dns_config/_dev/test/system/test-default-config.yml new file mode 100644 index 0000000000..5188dac65d --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_config/_dev/test/system/test-default-config.yml @@ -0,0 +1,9 @@ +input: httpjson +service: bloxone-ddi +vars: + url: http://{{Hostname}}:{{Port}} + api_key: xxxx +data_stream: + vars: + preserve_original_event: true + preserve_duplicate_custom_fields: true diff --git a/packages/bloxone_ddi/data_stream/dns_config/agent/stream/httpjson.yml.hbs b/packages/bloxone_ddi/data_stream/dns_config/agent/stream/httpjson.yml.hbs new file mode 100644 index 0000000000..a0e6e01a69 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_config/agent/stream/httpjson.yml.hbs @@ -0,0 +1,54 @@ +config_version: 2 +interval: {{interval}} +{{#if proxy_url }} +request.proxy_url: {{proxy_url}} +{{/if}} +{{#if ssl}} +request.ssl: {{ssl}} +{{/if}} +request.method: GET +request.url: {{url}}/api/ddi/v1/dns/view +request.transforms: + - set: + target: header.Authorization + value: 'Token {{api_key}}' + - set: + target: url.params._offset + value: 0 + - set: + target: url.params._limit + value: 100 + - set: + target: url.params._order_by + value: 'updated_at asc' + - set: + target: url.params._filter + value: 'updated_at>="[[(formatDate (parseDate .cursor.last_updated_at) "2006-01-02T15:04:05.999Z")]]"' + default: 'updated_at>="[[(formatDate (now (parseDuration "-{{initial_interval}}")) "2006-01-02T15:04:05.999Z")]]"' +response.pagination: + - set: + target: url.params._offset + value: '[[if (eq (len .last_response.body.results) 100)]][[add (toInt (.last_response.url.params.Get "_offset")) 100]][[else]][[.last_response.terminate_pagination]][[end]]' + fail_on_template_error: true +cursor: + last_updated_at: + value: '[[.last_event.updated_at]]' +response.split: + target: body.results +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/bloxone_ddi/data_stream/dns_config/elasticsearch/ingest_pipeline/default.yml b/packages/bloxone_ddi/data_stream/dns_config/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 0000000000..a4d767240d --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_config/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,2093 @@ +--- +description: Pipeline for parsing DNS config logs. +processors: + - set: + field: ecs.version + value: '8.4.0' + - set: + field: event.kind + value: event + - set: + field: event.category + value: [network] + - set: + field: event.type + value: [protocol] + - rename: + field: message + target_field: event.original + ignore_missing: true + - json: + field: event.original + target_field: json + - fingerprint: + fields: + - json.created_at + - json.updated_at + - json.id + target_field: _id + ignore_missing: true + - convert: + field: json.add_edns_option_in_outgoing_query + target_field: bloxone_ddi.dns_config.add_edns.option_in.outgoing_query + if: ctx.json?.add_edns_option_in_outgoing_query != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.comment + target_field: bloxone_ddi.dns_config.comment + ignore_missing: true + - date: + field: json.created_at + target_field: bloxone_ddi.dns_config.created_at + if: ctx.json?.created_at != null && ctx.json.created_at != '' + formats: + - ISO8601 + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - set: + field: event.created + copy_from: bloxone_ddi.dns_config.created_at + ignore_failure: true + - foreach: + field: json.custom_root_ns + if: ctx.json?.custom_root_ns instanceof List + processor: + convert: + field: _ingest._value.address + type: ip + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.address + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.custom_root_ns + if: ctx.json?.custom_root_ns instanceof List + processor: + append: + field: related.ip + value: '{{{_ingest._value.address}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.custom_root_ns + if: ctx.json?.custom_root_ns instanceof List + processor: + rename: + field: _ingest._value.protocol_fqdn + target_field: _ingest._value.protocol.fqdn + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.custom_root_ns + target_field: bloxone_ddi.dns_config.custom_root_ns + ignore_missing: true + - convert: + field: json.custom_root_ns_enabled + target_field: bloxone_ddi.dns_config.custom_root_ns_enabled + if: ctx.json?.custom_root_ns_enabled != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.disabled + target_field: bloxone_ddi.dns_config.disabled + if: ctx.json?.disabled != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.dnssec_enable_validation + target_field: bloxone_ddi.dns_config.dnssec.enable_validation + if: ctx.json?.dnssec_enable_validation != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.dnssec_enabled + target_field: bloxone_ddi.dns_config.dnssec.enabled + if: ctx.json?.dnssec_enabled != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - foreach: + field: json.dnssec_root_keys + if: ctx.json?.dnssec_root_keys instanceof List + processor: + convert: + field: _ingest._value.algorithm + type: long + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.algorithm + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.dnssec_root_keys + if: ctx.json?.dnssec_root_keys instanceof List + processor: + rename: + field: _ingest._value.protocol_zone + target_field: _ingest._value.protocol.zone + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.dnssec_root_keys + if: ctx.json?.dnssec_root_keys instanceof List + processor: + rename: + field: _ingest._value.public_key + target_field: _ingest._value.public + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.dnssec_root_keys + if: ctx.json?.dnssec_root_keys instanceof List + processor: + convert: + field: _ingest._value.sep + type: boolean + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.sep + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - rename: + field: json.dnssec_root_keys + target_field: bloxone_ddi.dns_config.dnssec.root_keys + ignore_missing: true + - foreach: + field: json.dnssec_trust_anchors + if: ctx.json?.dnssec_trust_anchors instanceof List + processor: + convert: + field: _ingest._value.algorithm + type: long + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.algorithm + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.dnssec_trust_anchors + if: ctx.json?.dnssec_trust_anchors instanceof List + processor: + rename: + field: _ingest._value.protocol_zone + target_field: _ingest._value.protocol.zone + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.dnssec_trust_anchors + if: ctx.json?.dnssec_trust_anchors instanceof List + processor: + convert: + field: _ingest._value.sep + type: boolean + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.sep + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - rename: + field: json.dnssec_trust_anchors + target_field: bloxone_ddi.dns_config.dnssec.trust_anchors + ignore_missing: true + - convert: + field: json.dnssec_validate_expiry + target_field: bloxone_ddi.dns_config.dnssec.validate_expiry + if: ctx.json?.dnssec_validate_expiry != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.ecs_enabled + target_field: bloxone_ddi.dns_config.ecs.enabled + if: ctx.json?.ecs_enabled != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.ecs_forwarding + target_field: bloxone_ddi.dns_config.ecs.forwarding + if: ctx.json?.ecs_forwarding != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.ecs_prefix_v4 + target_field: bloxone_ddi.dns_config.ecs.prefix_v4 + if: ctx.json?.ecs_prefix_v4 != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.ecs_prefix_v6 + target_field: bloxone_ddi.dns_config.ecs.prefix_v6 + if: ctx.json?.ecs_prefix_v6 != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - foreach: + field: json.ecs_zones + if: ctx.json?.ecs_zones instanceof List + processor: + rename: + field: _ingest._value.protocol_fqdn + target_field: _ingest._value.protocol.fqdn + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.ecs_zones + target_field: bloxone_ddi.dns_config.ecs.zones + ignore_missing: true + - convert: + field: json.edns_udp_size + target_field: bloxone_ddi.dns_config.edns.udp.size + if: ctx.json?.edns_udp_size != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - foreach: + field: json.forwarders + if: ctx.json?.forwarders instanceof List + processor: + convert: + field: _ingest._value.address + type: ip + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.address + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.forwarders + if: ctx.json?.forwarders instanceof List + processor: + append: + field: related.ip + value: '{{{_ingest._value.address}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.forwarders + if: ctx.json?.forwarders instanceof List + processor: + rename: + field: _ingest._value.protocol_fqdn + target_field: _ingest._value.protocol.fqdn + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.forwarders + target_field: bloxone_ddi.dns_config.forwarders + ignore_missing: true + - convert: + field: json.forwarders_only + target_field: bloxone_ddi.dns_config.forwarders_only + if: ctx.json?.forwarders_only != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.gss_tsig_enabled + target_field: bloxone_ddi.dns_config.gss_tsig_enabled + if: ctx.json?.gss_tsig_enabled != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.id + target_field: bloxone_ddi.dns_config.id + ignore_missing: true + - set: + field: event.id + copy_from: bloxone_ddi.dns_config.id + ignore_failure: true + - rename: + field: json.inheritance_sources.add_edns_option_in_outgoing_query.action + target_field: bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.action + ignore_missing: true + - rename: + field: json.inheritance_sources.add_edns_option_in_outgoing_query.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.add_edns_option_in_outgoing_query.source + target_field: bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.source + ignore_missing: true + - convert: + field: json.inheritance_sources.add_edns_option_in_outgoing_query.value + target_field: bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.value + if: ctx.json?.inheritance_sources?.add_edns_option_in_outgoing_query?.value != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.custom_root_ns_block.action + target_field: bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.action + ignore_missing: true + - rename: + field: json.inheritance_sources.custom_root_ns_block.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.custom_root_ns_block.source + target_field: bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.source + ignore_missing: true + - foreach: + field: json.inheritance_sources.custom_root_ns_block.value.custom_root_ns + if: ctx.json?.inheritance_sources?.custom_root_ns_block?.value?.custom_root_ns instanceof List + processor: + convert: + field: _ingest._value.address + type: ip + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.address + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.custom_root_ns_block.value.custom_root_ns + if: ctx.json?.inheritance_sources?.custom_root_ns_block?.value?.custom_root_ns instanceof List + processor: + append: + field: related.ip + value: '{{{_ingest._value.address}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.custom_root_ns_block.value.custom_root_ns + if: ctx.json?.inheritance_sources?.custom_root_ns_block?.value?.custom_root_ns instanceof List + processor: + rename: + field: _ingest._value.protocol_fqdn + target_field: _ingest._value.protocol.fqdn + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.inheritance_sources.custom_root_ns_block.value.custom_root_ns + target_field: bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value + ignore_missing: true + - convert: + field: json.inheritance_sources.custom_root_ns_block.value.custom_root_ns_enabled + target_field: bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value_enabled + if: ctx.json?.inheritance_sources?.custom_root_ns_block?.value?.custom_root_ns_enabled != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.dnssec_validation_block.action + target_field: bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.action + ignore_missing: true + - rename: + field: json.inheritance_sources.dnssec_validation_block.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.dnssec_validation_block.source + target_field: bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.source + ignore_missing: true + - convert: + field: json.inheritance_sources.dnssec_validation_block.value.dnssec_enable_validation + target_field: bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.enable + if: ctx.json?.inheritance_sources?.dnssec_validation_block?.value?.dnssec_enable_validation != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.inheritance_sources.dnssec_validation_block.value.dnssec_enabled + target_field: bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.enabled + if: ctx.json?.inheritance_sources?.dnssec_validation_block?.value?.dnssec_enabled != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - foreach: + field: json.inheritance_sources.dnssec_validation_block.value.dnssec_trust_anchors + if: ctx.json?.inheritance_sources?.dnssec_validation_block?.value?.dnssec_trust_anchors instanceof List + processor: + convert: + field: _ingest._value.algorithm + type: long + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.algorithm + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.dnssec_validation_block.value.dnssec_trust_anchors + if: ctx.json?.inheritance_sources?.dnssec_validation_block?.value?.dnssec_trust_anchors instanceof List + processor: + rename: + field: _ingest._value.protocol_zone + target_field: _ingest._value.protocol.zone + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.dnssec_validation_block.value.dnssec_trust_anchors + if: ctx.json?.inheritance_sources?.dnssec_validation_block?.value?.dnssec_trust_anchors instanceof List + processor: + convert: + field: _ingest._value.sep + type: boolean + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.sep + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - rename: + field: json.inheritance_sources.dnssec_validation_block.value.dnssec_trust_anchors + target_field: bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors + ignore_missing: true + - convert: + field: json.inheritance_sources.dnssec_validation_block.value.dnssec_validate_expiry + target_field: bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.validate_expiry + if: ctx.json?.inheritance_sources?.dnssec_validation_block?.value?.dnssec_validate_expiry != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.ecs_block.action + target_field: bloxone_ddi.dns_config.inheritance.sources.ecs.block.action + ignore_missing: true + - rename: + field: json.inheritance_sources.ecs_block.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.ecs.block.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.ecs_block.source + target_field: bloxone_ddi.dns_config.inheritance.sources.ecs.block.source + ignore_missing: true + - convert: + field: json.inheritance_sources.ecs_block.value.ecs_enabled + target_field: bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.enabled + if: ctx.json?.inheritance_sources?.ecs_block?.value?.ecs_enabled != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.inheritance_sources.ecs_block.value.ecs_forwarding + target_field: bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.forwarding + if: ctx.json?.inheritance_sources?.ecs_block?.value?.ecs_forwarding != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.inheritance_sources.ecs_block.value.ecs_prefix_v4 + target_field: bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.prefix_v4 + if: ctx.json?.inheritance_sources?.ecs_block?.value?.ecs_prefix_v4 != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.inheritance_sources.ecs_block.value.ecs_prefix_v6 + target_field: bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.prefix_v6 + if: ctx.json?.inheritance_sources?.ecs_block?.value?.ecs_prefix_v6 != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - foreach: + field: json.inheritance_sources.ecs_block.value.ecs_zones + if: ctx.json?.inheritance_sources?.ecs_block?.value?.ecs_zones instanceof List + processor: + rename: + field: _ingest._value.protocol_fqdn + target_field: _ingest._value.protocol.fqdn + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.inheritance_sources.ecs_block.value.ecs_zones + target_field: bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.zones + ignore_missing: true + - rename: + field: json.inheritance_sources.edns_udp_size.action + target_field: bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.action + ignore_missing: true + - rename: + field: json.inheritance_sources.edns_udp_size.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.edns_udp_size.source + target_field: bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.source + ignore_missing: true + - convert: + field: json.inheritance_sources.edns_udp_size.value + target_field: bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.value + if: ctx.json?.inheritance_sources?.edns_udp_size?.value != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.forwarders_block.action + target_field: bloxone_ddi.dns_config.inheritance.sources.forwarders.block.action + ignore_missing: true + - rename: + field: json.inheritance_sources.forwarders_block.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.forwarders.block.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.forwarders_block.source + target_field: bloxone_ddi.dns_config.inheritance.sources.forwarders.block.source + ignore_missing: true + - foreach: + field: json.inheritance_sources.forwarders_block.value.forwarders + if: ctx.json?.inheritance_sources?.forwarders_block?.value?.forwarders instanceof List + processor: + convert: + field: _ingest._value.address + type: ip + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.address + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.forwarders_block.value.forwarders + if: ctx.json?.inheritance_sources?.forwarders_block?.value?.forwarders instanceof List + processor: + append: + field: related.ip + value: '{{{_ingest._value.address}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.forwarders_block.value.forwarders + if: ctx.json?.inheritance_sources?.forwarders_block?.value?.forwarders instanceof List + processor: + rename: + field: _ingest._value.protocol_fqdn + target_field: _ingest._value.protocol.fqdn + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.inheritance_sources.forwarders_block.value.forwarders + target_field: bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value + ignore_missing: true + - convert: + field: json.inheritance_sources.forwarders_block.value.forwarders_only + target_field: bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value_only + if: ctx.json?.inheritance_sources?.forwarders_block?.value?.forwarders_only != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.gss_tsig_enabled.action + target_field: bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.action + ignore_missing: true + - rename: + field: json.inheritance_sources.gss_tsig_enabled.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.gss_tsig_enabled.source + target_field: bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.source + ignore_missing: true + - convert: + field: json.inheritance_sources.gss_tsig_enabled.value + target_field: bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.value + if: ctx.json?.inheritance_sources?.gss_tsig_enabled?.value != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.lame_ttl.action + target_field: bloxone_ddi.dns_config.inheritance.sources.lame_ttl.action + ignore_missing: true + - rename: + field: json.inheritance_sources.lame_ttl.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.lame_ttl.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.lame_ttl.source + target_field: bloxone_ddi.dns_config.inheritance.sources.lame_ttl.source + ignore_missing: true + - convert: + field: json.inheritance_sources.lame_ttl.value + target_field: bloxone_ddi.dns_config.inheritance.sources.lame_ttl.value + if: ctx.json?.inheritance_sources?.lame_ttl?.value != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.match_recursive_only.action + target_field: bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.action + ignore_missing: true + - rename: + field: json.inheritance_sources.match_recursive_only.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.match_recursive_only.source + target_field: bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.source + ignore_missing: true + - convert: + field: json.inheritance_sources.match_recursive_only.value + target_field: bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.value + if: ctx.json?.inheritance_sources?.match_recursive_only?.value != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.max_cache_ttl.action + target_field: bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.action + ignore_missing: true + - rename: + field: json.inheritance_sources.max_cache_ttl.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.max_cache_ttl.source + target_field: bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.source + ignore_missing: true + - convert: + field: json.inheritance_sources.max_cache_ttl.value + target_field: bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.value + if: ctx.json?.inheritance_sources?.max_cache_ttl?.value != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.max_negative_ttl.action + target_field: bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.action + ignore_missing: true + - rename: + field: json.inheritance_sources.max_negative_ttl.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.max_negative_ttl.source + target_field: bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.source + ignore_missing: true + - convert: + field: json.inheritance_sources.max_negative_ttl.value + target_field: bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.value + if: ctx.json?.inheritance_sources?.max_negative_ttl?.value != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.max_udp_size.action + target_field: bloxone_ddi.dns_config.inheritance.sources.max_udp_size.action + ignore_missing: true + - rename: + field: json.inheritance_sources.max_udp_size.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.max_udp_size.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.max_udp_size.source + target_field: bloxone_ddi.dns_config.inheritance.sources.max_udp_size.source + ignore_missing: true + - convert: + field: json.inheritance_sources.max_udp_size.value + target_field: bloxone_ddi.dns_config.inheritance.sources.max_udp_size.value + if: ctx.json?.inheritance_sources?.max_udp_size?.value != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.minimal_responses.action + target_field: bloxone_ddi.dns_config.inheritance.sources.minimal_responses.action + ignore_missing: true + - rename: + field: json.inheritance_sources.minimal_responses.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.minimal_responses.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.minimal_responses.source + target_field: bloxone_ddi.dns_config.inheritance.sources.minimal_responses.source + ignore_missing: true + - convert: + field: json.inheritance_sources.minimal_responses.value + target_field: bloxone_ddi.dns_config.inheritance.sources.minimal_responses.value + if: ctx.json?.inheritance_sources?.minimal_responses?.value != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.notify.action + target_field: bloxone_ddi.dns_config.inheritance.sources.notify.action + ignore_missing: true + - rename: + field: json.inheritance_sources.notify.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.notify.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.notify.source + target_field: bloxone_ddi.dns_config.inheritance.sources.notify.source + ignore_missing: true + - convert: + field: json.inheritance_sources.notify.value + target_field: bloxone_ddi.dns_config.inheritance.sources.notify.value + if: ctx.json?.inheritance_sources?.notify?.value != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.query_acl.action + target_field: bloxone_ddi.dns_config.inheritance.sources.query_acl.action + ignore_missing: true + - rename: + field: json.inheritance_sources.query_acl.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.query_acl.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.query_acl.source + target_field: bloxone_ddi.dns_config.inheritance.sources.query_acl.source + ignore_missing: true + - foreach: + field: json.inheritance_sources.query_acl.value + if: ctx.json?.inheritance_sources?.query_acl?.value instanceof List + processor: + convert: + field: _ingest._value.address + type: ip + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.address + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.query_acl.value + if: ctx.json?.inheritance_sources?.query_acl?.value instanceof List + processor: + append: + field: related.ip + value: '{{{_ingest._value.address}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.query_acl.value + if: ctx.json?.inheritance_sources?.query_acl?.value instanceof List + processor: + append: + field: related.hash + value: '{{{_ingest._value.tsig_key.algorithm}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.query_acl.value + if: ctx.json?.inheritance_sources?.query_acl?.value instanceof List + processor: + rename: + field: _ingest._value.tsig_key.protocol_name + target_field: _ingest._value.tsig_key.protocol.name + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.query_acl.value + if: ctx.json?.inheritance_sources?.query_acl?.value instanceof List + processor: + rename: + field: _ingest._value.tsig_key.key + target_field: _ingest._value.tsig_key.value + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.inheritance_sources.query_acl.value + target_field: bloxone_ddi.dns_config.inheritance.sources.query_acl.value + ignore_missing: true + - rename: + field: json.inheritance_sources.recursion_acl.action + target_field: bloxone_ddi.dns_config.inheritance.sources.recursion_acl.action + ignore_missing: true + - rename: + field: json.inheritance_sources.recursion_acl.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.recursion_acl.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.recursion_acl.source + target_field: bloxone_ddi.dns_config.inheritance.sources.recursion_acl.source + ignore_missing: true + - foreach: + field: json.inheritance_sources.recursion_acl.value + if: ctx.json?.inheritance_sources?.recursion_acl?.value instanceof List + processor: + convert: + field: _ingest._value.address + type: ip + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.address + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.recursion_acl.value + if: ctx.json?.inheritance_sources?.recursion_acl?.value instanceof List + processor: + append: + field: related.ip + value: '{{{_ingest._value.address}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.recursion_acl.value + if: ctx.json?.inheritance_sources?.recursion_acl?.value instanceof List + processor: + append: + field: related.hash + value: '{{{_ingest._value.tsig_key.algorithm}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.recursion_acl.value + if: ctx.json?.inheritance_sources?.recursion_acl?.value instanceof List + processor: + rename: + field: _ingest._value.tsig_key.protocol_name + target_field: _ingest._value.tsig_key.protocol.name + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.recursion_acl.value + if: ctx.json?.inheritance_sources?.recursion_acl?.value instanceof List + processor: + rename: + field: _ingest._value.tsig_key.key + target_field: _ingest._value.tsig_key.value + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.inheritance_sources.recursion_acl.value + target_field: bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value + ignore_missing: true + - rename: + field: json.inheritance_sources.recursion_enabled.action + target_field: bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.action + ignore_missing: true + - rename: + field: json.inheritance_sources.recursion_enabled.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.recursion_enabled.source + target_field: bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.source + ignore_missing: true + - convert: + field: json.inheritance_sources.recursion_enabled.value + target_field: bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.value + if: ctx.json?.inheritance_sources?.recursion_enabled?.value != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.synthesize_address_records_from_https.action + target_field: bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.action + ignore_missing: true + - rename: + field: json.inheritance_sources.synthesize_address_records_from_https.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.synthesize_address_records_from_https.source + target_field: bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.name + ignore_missing: true + - convert: + field: json.inheritance_sources.synthesize_address_records_from_https.value + target_field: bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.value + if: ctx.json?.inheritance_sources?.synthesize_address_records_from_https?.value != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.transfer_acl.action + target_field: bloxone_ddi.dns_config.inheritance.sources.transfer_acl.action + ignore_missing: true + - rename: + field: json.inheritance_sources.transfer_acl.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.transfer_acl.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.transfer_acl.source + target_field: bloxone_ddi.dns_config.inheritance.sources.transfer_acl.source + ignore_missing: true + - foreach: + field: json.inheritance_sources.transfer_acl.value + if: ctx.json?.inheritance_sources?.transfer_acl?.value instanceof List + processor: + convert: + field: _ingest._value.address + type: ip + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.address + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.transfer_acl.value + if: ctx.json?.inheritance_sources?.transfer_acl?.value instanceof List + processor: + append: + field: related.ip + value: '{{{_ingest._value.address}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.transfer_acl.value + if: ctx.json?.inheritance_sources?.transfer_acl?.value instanceof List + processor: + append: + field: related.hash + value: '{{{_ingest._value.tsig_key.algorithm}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.transfer_acl.value + if: ctx.json?.inheritance_sources?.transfer_acl?.value instanceof List + processor: + rename: + field: _ingest._value.tsig_key.protocol_name + target_field: _ingest._value.tsig_key.protocol.name + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.transfer_acl.value + if: ctx.json?.inheritance_sources?.transfer_acl?.value instanceof List + processor: + rename: + field: _ingest._value.tsig_key.key + target_field: _ingest._value.tsig_key.value + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.inheritance_sources.transfer_acl.value + target_field: bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value + ignore_missing: true + - rename: + field: json.inheritance_sources.update_acl.action + target_field: bloxone_ddi.dns_config.inheritance.sources.update_acl.action + ignore_missing: true + - rename: + field: json.inheritance_sources.update_acl.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.update_acl.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.update_acl.source + target_field: bloxone_ddi.dns_config.inheritance.sources.update_acl.source + ignore_missing: true + - foreach: + field: json.inheritance_sources.update_acl.value + if: ctx.json?.inheritance_sources?.update_acl?.value instanceof List + processor: + convert: + field: _ingest._value.address + type: ip + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.address + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.update_acl.value + if: ctx.json?.inheritance_sources?.update_acl?.value instanceof List + processor: + append: + field: related.ip + value: '{{{_ingest._value.address}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.update_acl.value + if: ctx.json?.inheritance_sources?.update_acl?.value instanceof List + processor: + append: + field: related.hash + value: '{{{_ingest._value.tsig_key.algorithm}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.update_acl.value + if: ctx.json?.inheritance_sources?.update_acl?.value instanceof List + processor: + rename: + field: _ingest._value.tsig_key.protocol_name + target_field: _ingest._value.tsig_key.protocol.name + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.inheritance_sources.update_acl.value + if: ctx.json?.inheritance_sources?.update_acl?.value instanceof List + processor: + rename: + field: _ingest._value.tsig_key.key + target_field: _ingest._value.tsig_key.value + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.inheritance_sources.update_acl.value + target_field: bloxone_ddi.dns_config.inheritance.sources.update_acl.value + ignore_missing: true + - rename: + field: json.inheritance_sources.use_forwarders_for_subzones.action + target_field: bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.action + ignore_missing: true + - rename: + field: json.inheritance_sources.use_forwarders_for_subzones.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.use_forwarders_for_subzones.source + target_field: bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.source + ignore_missing: true + - convert: + field: json.inheritance_sources.use_forwarders_for_subzones.value + target_field: bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.value + if: ctx.json?.inheritance_sources?.use_forwarders_for_subzones?.value != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.zone_authority.default_ttl.action + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.action + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.default_ttl.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.default_ttl.source + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.source + ignore_missing: true + - convert: + field: json.inheritance_sources.zone_authority.default_ttl.value + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.value + if: ctx.json?.inheritance_sources?.zone_authority?.default_ttl?.value != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.zone_authority.expire.action + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.action + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.expire.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.expire.source + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.source + ignore_missing: true + - convert: + field: json.inheritance_sources.zone_authority.expire.value + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.value + if: ctx.json?.inheritance_sources?.zone_authority?.expire?.value != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.zone_authority.mname_block.action + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.action + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.mname_block.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.mname_block.source + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.source + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.mname_block.value.mname + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block_value + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.mname_block.value.protocol_mname + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.value.protocol.mname + ignore_missing: true + - convert: + field: json.inheritance_sources.zone_authority.mname_block.value.use_default_mname + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.value.isdefault + if: ctx.json?.inheritance_sources?.zone_authority?.mname_block?.value?.use_default_mname != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.zone_authority.negative_ttl.action + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.action + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.negative_ttl.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.negative_ttl.source + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.source + ignore_missing: true + - convert: + field: json.inheritance_sources.zone_authority.negative_ttl.value + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.value + if: ctx.json?.inheritance_sources?.zone_authority?.negative_ttl?.value != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.zone_authority.protocol_rname.action + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.action + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.protocol_rname.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.protocol_rname.source + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.source + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.protocol_rname.value + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.value + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.refresh.action + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.action + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.refresh.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.refresh.source + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.source + ignore_missing: true + - convert: + field: json.inheritance_sources.zone_authority.refresh.value + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.value + if: ctx.json?.inheritance_sources?.zone_authority?.refresh?.value != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.zone_authority.retry.action + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.action + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.retry.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.retry.source + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.source + ignore_missing: true + - convert: + field: json.inheritance_sources.zone_authority.retry.value + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.value + if: ctx.json?.inheritance_sources?.zone_authority?.retry?.value != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.inheritance_sources.zone_authority.rname.action + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.action + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.rname.display_name + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.rname.source + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.source + ignore_missing: true + - rename: + field: json.inheritance_sources.zone_authority.rname.value + target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.value + ignore_missing: true + - rename: + field: json.ip_spaces + target_field: bloxone_ddi.dns_config.ip_spaces + ignore_missing: true + - convert: + field: json.lame_ttl + target_field: bloxone_ddi.dns_config.lame_ttl + if: ctx.json?.lame_ttl != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - set: + field: dns.answers.ttl + copy_from: bloxone_ddi.dns_config.lame_ttl + ignore_failure: true + - foreach: + field: json.match_clients_acl + if: ctx.json?.match_clients_acl instanceof List + processor: + convert: + field: _ingest._value.address + type: ip + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.address + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.match_clients_acl + if: ctx.json?.match_clients_acl instanceof List + processor: + append: + field: related.ip + value: '{{{_ingest._value.address}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.match_clients_acl + if: ctx.json?.match_clients_acl instanceof List + processor: + rename: + field: _ingest._value.acl + target_field: _ingest._value.value + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.match_clients_acl + if: ctx.json?.match_clients_acl instanceof List + processor: + append: + field: related.hash + value: '{{{_ingest._value.tsig_key.algorithm}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.match_clients_acl + if: ctx.json?.match_clients_acl instanceof List + processor: + rename: + field: _ingest._value.tsig_key.protocol_name + target_field: _ingest._value.tsig_key.protocol.name + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.match_clients_acl + if: ctx.json?.match_clients_acl instanceof List + processor: + rename: + field: _ingest._value.tsig_key.key + target_field: _ingest._value.tsig_key.value + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.match_clients_acl + target_field: bloxone_ddi.dns_config.match_clients_acl + ignore_missing: true + - foreach: + field: json.match_destinations_acl + if: ctx.json?.match_destinations_acl instanceof List + processor: + convert: + field: _ingest._value.address + type: ip + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.address + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.match_destinations_acl + if: ctx.json?.match_destinations_acl instanceof List + processor: + append: + field: related.ip + value: '{{{_ingest._value.address}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.match_destinations_acl + if: ctx.json?.match_destinations_acl instanceof List + processor: + rename: + field: _ingest._value.acl + target_field: _ingest._value.value + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.match_destinations_acl + if: ctx.json?.match_destinations_acl instanceof List + processor: + append: + field: related.hash + value: '{{{_ingest._value.tsig_key.algorithm}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.match_destinations_acl + if: ctx.json?.match_destinations_acl instanceof List + processor: + rename: + field: _ingest._value.tsig_key.protocol_name + target_field: _ingest._value.tsig_key.protocol.name + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.match_destinations_acl + if: ctx.json?.match_destinations_acl instanceof List + processor: + rename: + field: _ingest._value.tsig_key.key + target_field: _ingest._value.tsig_key.value + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.match_destinations_acl + target_field: bloxone_ddi.dns_config.match_destinations_acl + ignore_missing: true + - convert: + field: json.match_recursive_only + target_field: bloxone_ddi.dns_config.match_recursive_only + if: ctx.json?.match_recursive_only != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.max_cache_ttl + target_field: bloxone_ddi.dns_config.max_cache_ttl + if: ctx.json?.max_cache_ttl != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.max_negative_ttl + target_field: bloxone_ddi.dns_config.max_negative_ttl + if: ctx.json?.max_negative_ttl != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.max_udp_size + target_field: bloxone_ddi.dns_config.max_udp_size + if: ctx.json?.max_udp_size != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.minimal_responses + target_field: bloxone_ddi.dns_config.minimal_responses + if: ctx.json?.minimal_responses != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.name + target_field: bloxone_ddi.dns_config.name + ignore_missing: true + - convert: + field: json.notify + target_field: bloxone_ddi.dns_config.notify + if: ctx.json?.notify != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - foreach: + field: json.query_acl + if: ctx.json?.query_acl instanceof List + processor: + convert: + field: _ingest._value.address + type: ip + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.address + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.query_acl + if: ctx.json?.query_acl instanceof List + processor: + append: + field: related.ip + value: '{{{_ingest._value.address}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.query_acl + if: ctx.json?.query_acl instanceof List + processor: + append: + field: related.hash + value: '{{{_ingest._value.tsig_key.algorithm}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.query_acl + if: ctx.json?.query_acl instanceof List + processor: + rename: + field: _ingest._value.acl + target_field: _ingest._value.value + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.query_acl + if: ctx.json?.query_acl instanceof List + processor: + rename: + field: _ingest._value.tsig_key.protocol_name + target_field: _ingest._value.tsig_key.protocol.name + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.query_acl + if: ctx.json?.query_acl instanceof List + processor: + rename: + field: _ingest._value.tsig_key.key + target_field: _ingest._value.tsig_key.value + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.query_acl + target_field: bloxone_ddi.dns_config.query_acl + ignore_missing: true + - foreach: + field: json.recursion_acl + if: ctx.json?.recursion_acl instanceof List + processor: + convert: + field: _ingest._value.address + type: ip + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.address + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.recursion_acl + if: ctx.json?.recursion_acl instanceof List + processor: + append: + field: related.ip + value: '{{{_ingest._value.address}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.recursion_acl + if: ctx.json?.recursion_acl instanceof List + processor: + append: + field: related.hash + value: '{{{_ingest._value.tsig_key.algorithm}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.recursion_acl + if: ctx.json?.recursion_acl instanceof List + processor: + rename: + field: _ingest._value.acl + target_field: _ingest._value.value + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.recursion_acl + if: ctx.json?.recursion_acl instanceof List + processor: + rename: + field: _ingest._value.tsig_key.protocol_name + target_field: _ingest._value.tsig_key.protocol.name + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.recursion_acl + if: ctx.json?.recursion_acl instanceof List + processor: + rename: + field: _ingest._value.tsig_key.key + target_field: _ingest._value.tsig_key.value + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.recursion_acl + target_field: bloxone_ddi.dns_config.recursion_acl + ignore_missing: true + - convert: + field: json.recursion_enabled + target_field: bloxone_ddi.dns_config.recursion_enabled + if: ctx.json?.recursion_enabled != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.synthesize_address_records_from_https + target_field: bloxone_ddi.dns_config.synthesize.address_records_from_https + if: ctx.json?.synthesize_address_records_from_https != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.tags + target_field: bloxone_ddi.dns_config.tags + ignore_missing: true + - foreach: + field: json.transfer_acl + if: ctx.json?.transfer_acl instanceof List + processor: + convert: + field: _ingest._value.address + type: ip + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.address + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.transfer_acl + if: ctx.json?.transfer_acl instanceof List + processor: + append: + field: related.ip + value: '{{{_ingest._value.address}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.transfer_acl + if: ctx.json?.transfer_acl instanceof List + processor: + append: + field: related.hash + value: '{{{_ingest._value.tsig_key.algorithm}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.transfer_acl + if: ctx.json?.transfer_acl instanceof List + processor: + rename: + field: _ingest._value.acl + target_field: _ingest._value.value + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.transfer_acl + if: ctx.json?.transfer_acl instanceof List + processor: + rename: + field: _ingest._value.tsig_key.protocol_name + target_field: _ingest._value.tsig_key.protocol.name + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.transfer_acl + if: ctx.json?.transfer_acl instanceof List + processor: + rename: + field: _ingest._value.tsig_key.key + target_field: _ingest._value.tsig_key.value + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.transfer_acl + target_field: bloxone_ddi.dns_config.transfer_acl + ignore_missing: true + - foreach: + field: json.update_acl + if: ctx.json?.update_acl instanceof List + processor: + convert: + field: _ingest._value.address + type: ip + ignore_missing: true + on_failure: + - remove: + field: _ingest._value.address + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + ignore_missing: true + ignore_failure: true + - foreach: + field: json.update_acl + if: ctx.json?.update_acl instanceof List + processor: + append: + field: related.ip + value: '{{{_ingest._value.address}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.update_acl + if: ctx.json?.update_acl instanceof List + processor: + append: + field: related.hash + value: '{{{_ingest._value.tsig_key.algorithm}}}' + allow_duplicates: false + ignore_failure: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.update_acl + if: ctx.json?.update_acl instanceof List + processor: + rename: + field: _ingest._value.acl + target_field: _ingest._value.value + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.update_acl + if: ctx.json?.update_acl instanceof List + processor: + rename: + field: _ingest._value.tsig_key.protocol_name + target_field: _ingest._value.tsig_key.protocol.name + ignore_missing: true + ignore_missing: true + ignore_failure: true + - foreach: + field: json.update_acl + if: ctx.json?.update_acl instanceof List + processor: + rename: + field: _ingest._value.tsig_key.key + target_field: _ingest._value.tsig_key.value + ignore_missing: true + ignore_missing: true + ignore_failure: true + - rename: + field: json.update_acl + target_field: bloxone_ddi.dns_config.update_acl + ignore_missing: true + - date: + field: json.updated_at + target_field: bloxone_ddi.dns_config.updated_at + if: ctx.json?.updated_at != null && ctx.json.updated_at != '' + formats: + - ISO8601 + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - set: + field: '@timestamp' + copy_from: bloxone_ddi.dns_config.updated_at + ignore_failure: true + - convert: + field: json.use_forwarders_for_subzones + target_field: bloxone_ddi.dns_config.use_forwarders_for_subzones + if: ctx.json?.use_forwarders_for_subzones != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.zone_authority.default_ttl + target_field: bloxone_ddi.dns_config.zone_authority.default_ttl + if: ctx.json?.zone_authority?.default_ttl != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.zone_authority.expire + target_field: bloxone_ddi.dns_config.zone_authority.expire + if: ctx.json?.zone_authority?.expire != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.zone_authority.mname + target_field: bloxone_ddi.dns_config.zone_authority.mname + ignore_missing: true + - convert: + field: json.zone_authority.negative_ttl + target_field: bloxone_ddi.dns_config.zone_authority.negative_ttl + if: ctx.json?.zone_authority?.negative_ttl != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.zone_authority.protocol_mname + target_field: bloxone_ddi.dns_config.zone_authority.protocol.mname + ignore_missing: true + - rename: + field: json.zone_authority.protocol_rname + target_field: bloxone_ddi.dns_config.zone_authority.protocol.rname + ignore_missing: true + - convert: + field: json.zone_authority.refresh + target_field: bloxone_ddi.dns_config.zone_authority.refresh + if: ctx.json?.zone_authority?.refresh != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.zone_authority.retry + target_field: bloxone_ddi.dns_config.zone_authority.retry + if: ctx.json?.zone_authority?.retry != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.zone_authority.rname + target_field: bloxone_ddi.dns_config.zone_authority.rname + ignore_missing: true + - convert: + field: json.zone_authority.use_default_mname + target_field: bloxone_ddi.dns_config.zone_authority.use_default_mname + if: ctx.json?.zone_authority?.use_default_mname != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - remove: + field: json + ignore_missing: true + - remove: + field: + - bloxone_ddi.dns_config.updated_at + - bloxone_ddi.dns_config.lame_ttl + - bloxone_ddi.dns_config.created_at + - bloxone_ddi.dns_config.id + if: ctx.tags == null || !ctx.tags.contains('preserve_duplicate_custom_fields') + ignore_failure: true + ignore_missing: true + - remove: + field: event.original + if: ctx.tags == null || !(ctx.tags.contains('preserve_original_event')) + ignore_failure: true + 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); +on_failure: +- append: + field: error.message + value: '{{ _ingest.on_failure_message }}' diff --git a/packages/bloxone_ddi/data_stream/dns_config/fields/agent.yml b/packages/bloxone_ddi/data_stream/dns_config/fields/agent.yml new file mode 100644 index 0000000000..6e1bac042b --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_config/fields/agent.yml @@ -0,0 +1,186 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: '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.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + +- name: input.type + type: keyword + description: Input type +- name: log.offset + type: long + description: Log offset diff --git a/packages/bloxone_ddi/data_stream/dns_config/fields/base-fields.yml b/packages/bloxone_ddi/data_stream/dns_config/fields/base-fields.yml new file mode 100644 index 0000000000..a86228d009 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_config/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: '@timestamp' + type: date + description: Event timestamp. +- name: event.module + type: constant_keyword + description: Event module. + value: bloxone_ddi +- name: event.dataset + type: constant_keyword + description: Event dataset. + value: bloxone_ddi.dns_config diff --git a/packages/bloxone_ddi/data_stream/dns_config/fields/ecs.yml b/packages/bloxone_ddi/data_stream/dns_config/fields/ecs.yml new file mode 100644 index 0000000000..3d366d5690 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_config/fields/ecs.yml @@ -0,0 +1,22 @@ +- external: ecs + name: dns.answers.ttl +- external: ecs + name: ecs.version +- external: ecs + name: event.category +- external: ecs + name: event.created +- external: ecs + name: event.id +- external: ecs + name: event.kind +- external: ecs + name: event.original +- external: ecs + name: event.type +- external: ecs + name: related.hash +- external: ecs + name: related.ip +- external: ecs + name: tags diff --git a/packages/bloxone_ddi/data_stream/dns_config/fields/fields.yml b/packages/bloxone_ddi/data_stream/dns_config/fields/fields.yml new file mode 100644 index 0000000000..5ca93dfd05 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_config/fields/fields.yml @@ -0,0 +1,1275 @@ +- name: bloxone_ddi.dns_config + type: group + fields: + - name: add_edns + type: group + fields: + - name: option_in + type: group + fields: + - name: outgoing_query + type: boolean + description: add_edns_option_in_outgoing_query adds client IP, MAC address and view name into outgoing recursive query. + - name: comment + type: keyword + description: Optional. Comment for view. + - name: created_at + type: date + description: The timestamp when the object has been created. + - name: custom_root_ns_enabled + type: boolean + description: Optional. true to use custom root nameservers instead of the default ones. + - name: custom_root_ns + type: group + fields: + - name: address + type: ip + description: List of custom root nameservers. The order does not matter.IPv4 address. + - name: fqdn + type: keyword + description: List of custom root nameservers. The order does not matter.FQDN. + - name: protocol + type: group + fields: + - name: fqdn + type: keyword + description: List of custom root nameservers. The order does not matter.FQDN in punycode. + - name: disabled + type: boolean + description: Optional. true to disable object. A disabled object is effectively non-existent when generating configuration. + - name: dnssec + type: group + fields: + - name: enable_validation + type: boolean + description: Optional. true to perform DNSSEC validation. + - name: enabled + type: boolean + description: Optional. Master toggle for all DNSSEC processing. + - name: root_keys + type: group + fields: + - name: algorithm + type: long + description: Key algorithm. Algorithm values are as per standards. + - name: protocol + type: group + fields: + - name: zone + type: keyword + description: Zone FQDN in punycode. + - name: public + type: keyword + description: DNSSEC key data. Non-empty, valid base64 string. + - name: sep + type: boolean + description: Optional. Secure Entry Point flag. + - name: zone + type: keyword + description: Zone FQDN. + - name: trust_anchors + type: group + fields: + - name: algorithm + type: long + description: Key algorithm. Algorithm values are as per standards. + - name: protocol + type: group + fields: + - name: zone + type: keyword + description: Zone FQDN in punycode. + - name: public_key + type: keyword + description: DNSSEC key data. Non-empty, valid base64 string. + - name: sep + type: boolean + description: Optional. Secure Entry Point flag. + - name: zone + type: keyword + description: Zone FQDN. + - name: validate_expiry + type: boolean + description: Optional. true to reject expired DNSSEC keys. + - name: ecs + type: group + fields: + - name: enabled + type: boolean + description: Optional. true to enable EDNS client subnet for recursive queries. + - name: forwarding + type: boolean + description: Optional. true to enable ECS options in outbound queries. This functionality has additional overhead so it is disabled by default. + - name: prefix_v4 + type: long + description: Optional. Maximum scope length for v4 ECS. + - name: prefix_v6 + type: long + description: Optional. Maximum scope length for v6 ECS. + - name: zones + type: group + fields: + - name: access + type: keyword + description: Access control for zone. + - name: fqdn + type: keyword + description: Zone FQDN. + - name: protocol + type: group + fields: + - name: fqdn + type: keyword + description: Zone FQDN in punycode. + - name: edns + type: group + fields: + - name: udp + type: group + fields: + - name: size + type: long + description: Optional. edns_udp_size represents the edns UDP size. + - name: forwarders_only + type: boolean + description: Optional. true to only forward. + - name: forwarders + type: group + fields: + - name: address + type: ip + description: Server IP address. + - name: fqdn + type: keyword + description: Server FQDN. + - name: protocol + type: group + fields: + - name: fqdn + type: keyword + description: Server FQDN in punycode. + - name: gss_tsig_enabled + type: boolean + description: gss_tsig_enabled enables/disables GSS-TSIG signed dynamic updates. + - name: id + type: keyword + description: The resource identifier. + - name: inheritance + type: group + fields: + - name: sources + type: group + fields: + - name: add_edns + type: group + fields: + - name: option_in + type: group + fields: + - name: outgoing_query + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: boolean + description: The inherited value. + - name: custom_root_ns + type: group + fields: + - name: block + type: group + fields: + - name: action + type: keyword + description: Defaults to inherit. + - name: display + type: group + fields: + - name: name + type: keyword + description: Human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: group + fields: + - name: address + type: ip + description: IPv4 address. + - name: fqdn + type: keyword + description: Optional. Field config for custom_root_ns_enabled field. + - name: protocol + type: group + fields: + - name: fqdn + type: keyword + description: FQDN. + - name: value_enabled + type: boolean + description: FQDN in punycode. + - name: dnssec + type: group + fields: + - name: validation + type: group + fields: + - name: block + type: group + fields: + - name: action + type: keyword + description: Defaults to inherit. + - name: display + type: group + fields: + - name: name + type: keyword + description: Human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: group + fields: + - name: enable + type: boolean + description: Optional. Field config for dnssec_enable_validation field. + - name: enabled + type: boolean + description: Optional. Field config for dnssec_enabled field. + - name: trust_anchors + type: group + fields: + - name: algorithm + type: long + description: Key algorithm. Algorithm values are as per standards. + - name: protocol + type: group + fields: + - name: zone + type: keyword + description: Zone FQDN in punycode. + - name: public_key + type: keyword + description: DNSSEC key data. Non-empty, valid base64 string. + - name: sep + type: boolean + description: Optional. Secure Entry Point flag. + - name: zone + type: keyword + description: Zone FQDN. + - name: validate_expiry + type: boolean + description: Optional. Field config for dnssec_validate_expiry field. + - name: ecs + type: group + fields: + - name: block + type: group + fields: + - name: action + type: keyword + description: Defaults to inherit. + - name: display + type: group + fields: + - name: name + type: keyword + description: Human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: group + fields: + - name: enabled + type: boolean + description: Optional. Field config for ecs_enabled field. + - name: forwarding + type: boolean + description: Optional. Field config for ecs_forwarding field. + - name: prefix_v4 + type: long + description: Optional. Field config for ecs_prefix_v4 field. + - name: prefix_v6 + type: long + description: Optional. Field config for ecs_prefix_v6 field. + - name: zones + type: group + fields: + - name: access + type: keyword + description: Access control for zone. + - name: fqdn + type: keyword + description: Zone FQDN. + - name: protocol + type: group + fields: + - name: fqdn + type: keyword + description: Zone FQDN in punycode. + - name: edns + type: group + fields: + - name: udp + type: group + fields: + - name: size + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: long + description: The inherited value. + - name: forwarders + type: group + fields: + - name: block + type: group + fields: + - name: action + type: keyword + description: Defaults to inherit. + - name: display + type: group + fields: + - name: name + type: keyword + description: Human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value_only + type: boolean + description: Optional. Field config for forwarders_only field. + - name: value + type: group + fields: + - name: address + type: ip + description: Server IP address. + - name: fqdn + type: keyword + description: Server FQDN. + - name: protocol + type: group + fields: + - name: fqdn + type: keyword + description: Server FQDN in punycode. + - name: gss_tsig_enabled + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: boolean + description: The inherited value. + - name: lame_ttl + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: long + description: The inherited value. + - name: match_recursive_only + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: boolean + description: The inherited value. + - name: max_cache_ttl + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: long + description: The inherited value. + - name: max_negative_ttl + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: long + description: The inherited value. + - name: max_udp_size + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: long + description: The inherited value. + - name: minimal_responses + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: boolean + description: The inherited value. + - name: notify + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: boolean + description: The inherited value. + - name: query_acl + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: group + fields: + - name: access + type: keyword + description: Access permission for element. + - name: acl + type: keyword + description: The resource identifier. + - name: address + type: ip + description: Optional. Data for ip element. + - name: element + type: keyword + description: Type of element. + - name: tsig_key + type: group + fields: + - name: algorithm + type: keyword + description: TSIG key algorithm. + - name: comment + type: keyword + description: Comment for TSIG key. + - name: name + type: keyword + description: TSIG key name, FQDN. + - name: protocol + type: group + fields: + - name: name + type: keyword + description: TSIG key name in punycode. + - name: secret + type: keyword + description: TSIG key secret, base64 string. + - name: value + type: keyword + description: The resource identifier. + - name: recursion_acl + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: group + fields: + - name: access + type: keyword + description: Access permission for element. + - name: acl + type: keyword + description: The resource identifier. + - name: address + type: ip + description: Optional. Data for ip element. + - name: element + type: keyword + description: Type of element. + - name: tsig_key + type: group + fields: + - name: algorithm + type: keyword + description: TSIG key algorithm. + - name: comment + type: keyword + description: Comment for TSIG key. + - name: name + type: keyword + description: TSIG key name, FQDN. + - name: protocol + type: group + fields: + - name: name + type: keyword + description: TSIG key name in punycode. + - name: secret + type: keyword + description: TSIG key secret, base64 string. + - name: value + type: keyword + description: The resource identifier. + - name: recursion_enabled + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: boolean + description: The inherited value. + - name: synthesize + type: group + fields: + - name: address_records_from_https + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: name + type: keyword + description: The resource identifier. + - name: value + type: boolean + description: The inherited value. + - name: transfer_acl + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: group + fields: + - name: access + type: keyword + description: Access permission for element. + - name: acl + type: keyword + description: The resource identifier. + - name: address + type: ip + description: Optional. Data for ip element. + - name: element + type: keyword + description: Type of element. + - name: tsig_key + type: group + fields: + - name: algorithm + type: keyword + description: TSIG key algorithm. + - name: comment + type: keyword + description: Comment for TSIG key. + - name: name + type: keyword + description: TSIG key name, FQDN. + - name: protocol + type: group + fields: + - name: name + type: keyword + description: TSIG key name in punycode. + - name: secret + type: keyword + description: TSIG key secret, base64 string. + - name: value + type: keyword + description: The resource identifier. + - name: update_acl + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: group + fields: + - name: access + type: keyword + description: Access permission for element. + - name: acl + type: keyword + description: The resource identifier. + - name: address + type: ip + description: Optional. Data for ip element. + - name: element + type: keyword + description: Type of element. + - name: tsig_key + type: group + fields: + - name: algorithm + type: keyword + description: TSIG key algorithm. + - name: comment + type: keyword + description: Comment for TSIG key. + - name: name + type: keyword + description: TSIG key name, FQDN. + - name: protocol + type: group + fields: + - name: name + type: keyword + description: TSIG key name in punycode. + - name: secret + type: keyword + description: TSIG key secret, base64 string. + - name: value + type: keyword + description: The resource identifier. + - name: use_forwarders_for_subzones + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: boolean + description: The inherited value. + - name: zone_authority + type: group + fields: + - name: default_ttl + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: long + description: The inherited value. + - name: expire + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: long + description: The inherited value. + - name: mname_block_value + type: keyword + description: Defaults to empty. + - name: mname_block + type: group + fields: + - name: action + type: keyword + description: Defaults to inherit. + - name: display + type: group + fields: + - name: name + type: keyword + description: Human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: group + fields: + - name: isdefault + type: boolean + description: Optional. Use default value for master name server. Defaults to true. + - name: protocol + type: group + fields: + - name: mname + type: keyword + description: Optional. Master name server in punycode. Defaults to empty. + - name: negative_ttl + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: long + description: The inherited value. + - name: protocol_rname + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: keyword + description: The inherited value. + - name: refresh + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: long + description: The inherited value. + - name: retry + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: long + description: The inherited value. + - name: rname + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: keyword + description: The inherited value. + - name: ip_spaces + type: keyword + description: The resource identifier. + - name: lame_ttl + type: long + description: Optional. Unused in the current on-prem DNS server implementation. + - name: match_clients_acl + type: group + fields: + - name: access + type: keyword + description: Access permission for element. + - name: address + type: ip + description: Optional. Data for ip element. + - name: element + type: keyword + description: Type of element. + - name: tsig_key + type: group + fields: + - name: algorithm + type: keyword + description: TSIG key algorithm. + - name: comment + type: keyword + description: Comment for TSIG key. + - name: name + type: keyword + description: TSIG key name, FQDN. + - name: protocol + type: group + fields: + - name: name + type: keyword + description: TSIG key name in punycode. + - name: secret + type: keyword + description: TSIG key secret, base64 string. + - name: value + type: keyword + description: The resource identifier. + - name: value + type: keyword + description: The resource identifier. + - name: match_destinations_acl + type: group + fields: + - name: access + type: keyword + description: Access permission for element. + - name: address + type: ip + description: Optional. Data for ip element. + - name: element + type: keyword + description: Type of element. + - name: tsig_key + type: group + fields: + - name: algorithm + type: keyword + description: TSIG key algorithm. + - name: comment + type: keyword + description: Comment for TSIG key. + - name: name + type: keyword + description: The resource identifier. + - name: protocol + type: group + fields: + - name: name + type: keyword + description: TSIG key name, FQDN. + - name: secret + type: keyword + description: TSIG key name in punycode. + - name: value + type: keyword + description: TSIG key secret, base64 string. + - name: value + type: keyword + description: The resource identifier. + - name: match_recursive_only + type: boolean + description: Optional. If true only recursive queries from matching clients access the view. + - name: max_cache_ttl + type: long + description: Optional. Seconds to cache positive responses. + - name: max_negative_ttl + type: long + description: Optional. Seconds to cache negative responses. + - name: max_udp_size + type: long + description: Optional. max_udp_size represents maximum UDP payload size. + - name: minimal_responses + type: boolean + description: Optional. When enabled, the DNS server will only add records to the authority and additional data sections when they are required. + - name: name + type: keyword + description: Name of view. + - name: notify + type: boolean + description: notify all external secondary DNS servers. + - name: query_acl + type: group + fields: + - name: access + type: keyword + description: Access permission for element. + - name: address + type: ip + description: Optional. Data for ip element. + - name: element + type: keyword + description: Type of element. + - name: tsig_key + type: group + fields: + - name: algorithm + type: keyword + description: TSIG key algorithm. + - name: comment + type: keyword + description: Comment for TSIG key. + - name: name + type: keyword + description: TSIG key name, FQDN. + - name: protocol + type: group + fields: + - name: name + type: keyword + description: TSIG key name in punycode. + - name: secret + type: keyword + description: TSIG key secret, base64 string. + - name: value + type: keyword + description: The resource identifier. + - name: value + type: keyword + description: The resource identifier. + - name: recursion_acl + type: group + fields: + - name: access + type: keyword + description: Access permission for element. + - name: address + type: ip + description: Optional. Data for ip element. + - name: element + type: keyword + description: Type of element. + - name: tsig_key + type: group + fields: + - name: algorithm + type: keyword + description: TSIG key algorithm. + - name: comment + type: keyword + description: Comment for TSIG key. + - name: name + type: keyword + description: The resource identifier. + - name: protocol + type: group + fields: + - name: name + type: keyword + description: TSIG key name, FQDN. + - name: secret + type: keyword + description: TSIG key name in punycode. + - name: value + type: keyword + description: TSIG key secret, base64 string. + - name: value + type: keyword + description: The resource identifier. + - name: recursion_enabled + type: boolean + description: Optional. true to allow recursive DNS queries. + - name: synthesize + type: group + fields: + - name: address_records_from_https + type: boolean + description: synthesize_address_records_from_https enables/disables creation of A/AAAA records from HTTPS RR. + - name: tags + type: flattened + description: Tagging specifics. + - name: transfer_acl + type: group + fields: + - name: access + type: keyword + description: Access permission for element. + - name: address + type: ip + description: Optional. Data for ip element. + - name: element + type: keyword + description: Type of element. + - name: tsig_key + type: group + fields: + - name: algorithm + type: keyword + description: TSIG key algorithm. + - name: comment + type: keyword + description: Comment for TSIG key. + - name: name + type: keyword + description: TSIG key name, FQDN. + - name: protocol + type: group + fields: + - name: name + type: keyword + description: TSIG key name in punycode. + - name: secret + type: keyword + description: TSIG key secret, base64 string. + - name: value + type: keyword + description: The resource identifier. + - name: value + type: keyword + description: The resource identifier. + - name: update_acl + type: group + fields: + - name: access + type: keyword + description: Access permission for element. + - name: address + type: ip + description: Optional. Data for ip element. + - name: element + type: keyword + description: Type of element. + - name: tsig_key + type: group + fields: + - name: algorithm + type: keyword + description: TSIG key algorithm. + - name: comment + type: keyword + description: Comment for TSIG key. + - name: name + type: keyword + description: TSIG key name, FQDN. + - name: protocol + type: group + fields: + - name: name + type: keyword + description: TSIG key name in punycode. + - name: secret + type: keyword + description: TSIG key secret, base64 string. + - name: value + type: keyword + description: The resource identifier. + - name: value + type: keyword + description: The resource identifier. + - name: updated_at + type: date + description: The timestamp when the object has been updated. Equals to created_at if not updated after creation. + - name: use_forwarders_for_subzones + type: boolean + description: Optional. Use default forwarders to resolve queries for subzones. + - name: zone_authority + type: group + fields: + - name: default_ttl + type: long + description: Optional. ZoneAuthority default ttl for resource records in zone (value in seconds). + - name: expire + type: long + description: Optional. ZoneAuthority expire time in seconds. Defaults to 2419200. + - name: mname + type: keyword + description: Optional. ZoneAuthority master name server (partially qualified domain name) Defaults to empty. + - name: negative_ttl + type: long + description: Optional. ZoneAuthority negative caching (minimum) ttl in seconds. + - name: protocol + type: group + fields: + - name: mname + type: keyword + description: Optional. ZoneAuthority master name server in punycode. Defaults to empty. + - name: rname + type: keyword + description: Optional. A domain name which specifies the mailbox of the person responsible for this zone. Defaults to empty. + - name: refresh + type: long + description: Optional. ZoneAuthority refresh. Defaults to 10800. + - name: retry + type: long + description: Optional. ZoneAuthority retry. Defaults to 3600. + - name: rname + type: keyword + description: Optional. ZoneAuthority rname. Defaults to empty. + - name: use_default_mname + type: boolean + description: Optional. Use default value for master name server. Defaults to true. diff --git a/packages/bloxone_ddi/data_stream/dns_config/manifest.yml b/packages/bloxone_ddi/data_stream/dns_config/manifest.yml new file mode 100644 index 0000000000..a9be470535 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_config/manifest.yml @@ -0,0 +1,58 @@ +title: Collect DNS Config logs from BloxOne DDI +type: logs +streams: + - input: httpjson + title: DNS Config logs + description: Collect DNS Config logs from BloxOne DDI. + template_path: httpjson.yml.hbs + vars: + - name: initial_interval + type: text + title: Initial Interval + description: 'How far back to pull the DHCP Lease events from BloxOne DDI. NOTE: Supported units for this parameter are h/m/s.' + multi: false + required: true + show_user: true + default: 24h + - name: interval + type: text + title: Interval + description: 'Duration between requests to the BloxOne DDI API. NOTE: Supported units for this parameter are h/m/s.' + multi: false + required: true + show_user: true + default: 1m + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - bloxone_ddi-dns_config + - 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: true + title: Preserve duplicate custom fields + description: Preserve custom fields for all ECS mappings. + 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/bloxone_ddi/data_stream/dns_config/sample_event.json b/packages/bloxone_ddi/data_stream/dns_config/sample_event.json new file mode 100644 index 0000000000..5fae4c87e4 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_config/sample_event.json @@ -0,0 +1,669 @@ +{ + "@timestamp": "2022-07-15T06:55:25.978Z", + "agent": { + "ephemeral_id": "3e3b210f-9e4a-4d82-840b-7a17afa48536", + "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.2.0" + }, + "bloxone_ddi": { + "dns_config": { + "add_edns": { + "option_in": { + "outgoing_query": true + } + }, + "comment": "DNS Config Comment", + "created_at": "2022-07-15T06:55:25.978Z", + "custom_root_ns": [ + { + "address": "81.2.69.192", + "fqdn": "custom fqdn", + "protocol": { + "fqdn": "custom protocol fqdn" + } + } + ], + "custom_root_ns_enabled": true, + "disabled": true, + "dnssec": { + "enable_validation": true, + "enabled": true, + "root_keys": [ + { + "algorithm": 30, + "protocol": { + "zone": "Dnssec root protocol zone" + }, + "public": "Dnssec root Public Key", + "sep": true, + "zone": "Dnssec root Zone" + } + ], + "trust_anchors": [ + { + "algorithm": 10, + "protocol": { + "zone": "Dnssec trust protocol zone" + }, + "public_key": "Dnssec trust Public Key", + "sep": true, + "zone": "Dnssec trust zone" + } + ], + "validate_expiry": true + }, + "ecs": { + "enabled": true, + "forwarding": true, + "prefix_v4": 22, + "prefix_v6": 33, + "zones": [ + { + "access": "ecs zones access", + "fqdn": "ecs zones fqdn", + "protocol": { + "fqdn": "ecs zones protocol fqdn" + } + } + ] + }, + "edns": { + "udp": { + "size": 568 + } + }, + "forwarders": [ + { + "address": "81.2.69.192", + "fqdn": "forwarders fqdn", + "protocol": { + "fqdn": "forwarders protocol fqdn" + } + } + ], + "forwarders_only": true, + "gss_tsig_enabled": true, + "id": "adv12rgfh", + "inheritance": { + "sources": { + "add_edns": { + "option_in": { + "outgoing_query": { + "action": "inherit", + "display": { + "name": "displaynameadd_edns_option_in_outgoing_query" + }, + "source": "sourceadd_edns_option_in_outgoing_query", + "value": true + } + } + }, + "custom_root_ns": { + "block": { + "action": "override", + "display": { + "name": "displaynamecustom_root_ns_block" + }, + "source": "sourcecustom_root_ns_block", + "value": [ + { + "address": "67.43.156.0", + "fqdn": "fqdn_custom_root_ns", + "protocol": { + "fqdn": "protocolfqdn_custom_root_ns" + } + } + ], + "value_enabled": true + } + }, + "dnssec": { + "validation": { + "block": { + "action": "inherit", + "display": { + "name": "displaynamednssec_validation_block" + }, + "source": "sourcednssec_validation_block", + "value": { + "enable": true, + "enabled": true, + "trust_anchors": [ + { + "algorithm": 8, + "protocol": { + "zone": "protocolzonednssec_trust_anchors" + }, + "public_key": "publickeydnssec_trust_anchors", + "sep": false, + "zone": "is3zone" + } + ], + "validate_expiry": true + } + } + } + }, + "ecs": { + "block": { + "action": "inherit", + "display": { + "name": "displaynameecs_block" + }, + "source": "sourceecs_block", + "value": { + "enabled": false, + "forwarding": true, + "prefix_v4": 4, + "prefix_v6": 10, + "zones": [ + { + "access": "inherit", + "fqdn": "fqdnecs_block", + "protocol": { + "fqdn": "protocol_fqdnecs_block" + } + } + ] + } + } + }, + "edns": { + "udp": { + "size": { + "action": "inherit", + "display": { + "name": "displaynameedns_udp_size" + }, + "source": "sourceedns_udp_size", + "value": 55 + } + } + }, + "forwarders": { + "block": { + "action": "inherit", + "display": { + "name": "displaynameforwarders_block" + }, + "source": "sourceforwarders_block", + "value": [ + { + "address": "89.160.20.128", + "fqdn": "forwarders_fqdn", + "protocol": { + "fqdn": "forwarders_protocolfqdn" + } + } + ], + "value_only": true + } + }, + "gss_tsig_enabled": { + "action": "inherit", + "display": { + "name": "displaynamegss_tsig_enabled" + }, + "source": "sourcegss_tsig_enabled", + "value": true + }, + "lame_ttl": { + "action": "inherit", + "display": { + "name": "displaynamelame_ttl" + }, + "source": "sourcelame_ttl", + "value": 45 + }, + "match_recursive_only": { + "action": "inherit", + "display": { + "name": "displaynamematch_recursive_only" + }, + "source": "sourcematch_recursive_only", + "value": false + }, + "max_cache_ttl": { + "action": "inherit", + "display": { + "name": "displaynamemax_cache_ttl" + }, + "source": "sourcemax_cache_ttl", + "value": 13 + }, + "max_negative_ttl": { + "action": "inherit", + "display": { + "name": "displaynamemax_negative_ttl" + }, + "source": "sourcemax_negative_ttl", + "value": 12 + }, + "max_udp_size": { + "action": "inherit", + "display": { + "name": "displaynamemax_udp_size" + }, + "source": "sourcemax_udp_size", + "value": 11 + }, + "minimal_responses": { + "action": "inherit", + "display": { + "name": "displaynameminimal_responses" + }, + "source": "sourceminimal_responses", + "value": true + }, + "notify": { + "action": "inherit", + "display": { + "name": "displayname_notify" + }, + "source": "source_notify", + "value": true + }, + "query_acl": { + "action": "override", + "display": { + "name": "displaynamequery_acl" + }, + "source": "sourcequery_acl", + "value": [ + { + "access": "allow", + "acl": "aclvalue_query_acl", + "address": "89.160.20.128", + "element": "elementvaluequery_acl", + "tsig_key": { + "algorithm": "hmac_sha256", + "comment": "commentquery_acl", + "name": "namequery_acl", + "protocol": { + "name": "protocolname_query_acl" + }, + "secret": "secretquery_acl", + "value": "keyquery_acl" + } + } + ] + }, + "recursion_acl": { + "action": "override", + "display": { + "name": "displaynamerecursion_acl" + }, + "source": "sourcerecursion_acl", + "value": [ + { + "access": "deny", + "acl": "aclrecursion_acl", + "address": "89.160.20.128", + "element": "elementrecursion_acl", + "tsig_key": { + "algorithm": "hmac_sha384", + "comment": "commentrecursion_acl", + "name": "namerecursion_acl", + "protocol": { + "name": "protocolnamerecursion_acl" + }, + "secret": "secretrecursion_acl", + "value": "keyrecursion_acl" + } + } + ] + }, + "recursion_enabled": { + "action": "inherit", + "display": { + "name": "displaynamerecursion_enabled" + }, + "source": "sourcerecursion_enabled", + "value": true + }, + "synthesize": { + "address_records_from_https": { + "action": "inherit", + "display": { + "name": "displaynamesynthesize_address_records_from_https" + }, + "name": "sourcesynthesize_address_records_from_https", + "value": true + } + }, + "transfer_acl": { + "action": "inherit", + "display": { + "name": "displaynametransfer_acl" + }, + "source": "sourcetransfer_acl", + "value": [ + { + "access": "allow", + "acl": "acltransfer_acl", + "address": "216.160.83.56", + "element": "elementtransfer_acl", + "tsig_key": { + "algorithm": "hmac_sha224", + "comment": "commenttransfer_acl", + "name": "nametransfer_acl", + "protocol": { + "name": "protocolnametransfer_acl" + }, + "secret": "secrettransfer_acl", + "value": "keytransfer_acl" + } + } + ] + }, + "update_acl": { + "action": "override", + "display": { + "name": "displaynameupdate_acl" + }, + "source": "sourceupdate_acl", + "value": [ + { + "access": "allow", + "acl": "aclupdate_acl", + "address": "216.160.83.56", + "element": "elementupdate_acl", + "tsig_key": { + "algorithm": "hmac_sha384", + "comment": "commentupdate_acl", + "name": "nameupdate_acl", + "protocol": { + "name": "protocolnameupdate_acl" + }, + "secret": "secretupdate_acl", + "value": "keyupdate_acl" + } + } + ] + }, + "use_forwarders_for_subzones": { + "action": "override", + "display": { + "name": "displaynameuse_forwarders_for_subzones" + }, + "source": "sourceuse_forwarders_for_subzones", + "value": false + }, + "zone_authority": { + "default_ttl": { + "action": "override", + "display": { + "name": "displaynamezone_authority" + }, + "source": "sourcezone_authority", + "value": 50 + }, + "expire": { + "action": "inherit", + "display": { + "name": "displaynameexpire" + }, + "source": "sourceexpire", + "value": 70 + }, + "mname_block": { + "action": "inherit", + "display": { + "name": "displaynamemname_block" + }, + "source": "sourcemname_block", + "value": { + "isdefault": true, + "protocol": { + "mname": "protocolmnamemname_block" + } + } + }, + "mname_block_value": "mnamevaluemname_block", + "negative_ttl": { + "action": "inherit", + "display": { + "name": "displaynamenegative_ttl" + }, + "source": "sourcenegative_ttl", + "value": 90 + }, + "protocol_rname": { + "action": "inherit", + "display": { + "name": "displaynameprotocol_rname" + }, + "source": "sourceprotocol_rname", + "value": "valueprotocol_rname" + }, + "refresh": { + "action": "inherit", + "display": { + "name": "displayname_refresh" + }, + "source": "source_refresh", + "value": 40 + }, + "retry": { + "action": "inherit", + "display": { + "name": "displayname_retry" + }, + "source": "source_retry", + "value": 570 + }, + "rname": { + "action": "inherit", + "display": { + "name": "displayname_rname" + }, + "source": "source_rname", + "value": "value_rname" + } + } + } + }, + "ip_spaces": [ + "testipspaces" + ], + "lame_ttl": 350, + "match_clients_acl": [ + { + "access": "deny", + "address": "81.2.69.192", + "element": "elementmatch_clients_acl", + "tsig_key": { + "algorithm": "hmac_sha512", + "comment": "commentmatch_clients_acl", + "name": "namematch_clients_acl", + "protocol": { + "name": "protocolnamematch_clients_acl" + }, + "secret": "secretmatch_clients_acl", + "value": "keymatch_clients_acl" + }, + "value": "aclmatch_clients_acl" + } + ], + "match_destinations_acl": [ + { + "access": "allow", + "address": "81.2.69.192", + "element": "elementmatch_destinations_acl", + "tsig_key": { + "algorithm": "hmac_sha384", + "comment": "commentmatch_destinations_acl", + "name": "namematch_destinations_acl", + "protocol": { + "name": "protocolnamematch_destinations_acl" + }, + "secret": "secretmatch_destinations_acl", + "value": "keymatch_destinations_acl" + }, + "value": "aclmatch_destinations_acl" + } + ], + "match_recursive_only": true, + "max_cache_ttl": 90, + "max_negative_ttl": 500, + "max_udp_size": 890, + "minimal_responses": true, + "name": "string", + "notify": true, + "query_acl": [ + { + "access": "accessquery_acl", + "address": "81.2.69.192", + "element": "elementquery_acl", + "tsig_key": { + "algorithm": "hmac_sha224", + "comment": "commentquery_acl", + "name": "namequery_acl", + "protocol": { + "name": "protocolnamequery_acl" + }, + "secret": "secretquery_acl", + "value": "keyquery_acl" + }, + "value": "aclquery_acl" + } + ], + "recursion_acl": [ + { + "access": "allow", + "address": "81.2.69.192", + "element": "elementrecursion_acl", + "tsig_key": { + "algorithm": "hmac_sha1", + "comment": "commentrecursion_acl", + "name": "namerecursion_acl", + "protocol": { + "name": "protocolnamerecursion_acl" + }, + "secret": "secretrecursion_acl", + "value": "keyrecursion_acl" + }, + "value": "aclrecursion_acl" + } + ], + "recursion_enabled": true, + "synthesize": { + "address_records_from_https": false + }, + "tags": { + "message": "Hello" + }, + "transfer_acl": [ + { + "access": "allow", + "address": "216.160.83.56", + "element": "elementtransfer_acl", + "tsig_key": { + "algorithm": "hmac_sha224", + "comment": "commenttransfer_acl", + "name": "nametransfer_acl", + "protocol": { + "name": "protocolnametransfer_acl" + }, + "secret": "secrettransfer_acl", + "value": "keytransfer_acl" + }, + "value": "acltransfer_acl" + } + ], + "update_acl": [ + { + "access": "allow", + "address": "216.160.83.56", + "element": "elementupdate_acl", + "tsig_key": { + "algorithm": "hmac_sha1", + "comment": "commentupdate_acl", + "name": "nameupdate_acl", + "protocol": { + "name": "protocolnameupdate_acl" + }, + "secret": "secretupdate_acl", + "value": "keyupdate_acl" + }, + "value": "aclupdate_acl" + } + ], + "updated_at": "2022-07-15T06:55:25.978Z", + "use_forwarders_for_subzones": true, + "zone_authority": { + "default_ttl": 20, + "expire": 10, + "mname": "mnamezone_authority", + "negative_ttl": 30, + "protocol": { + "mname": "protocolmnamezone_authority", + "rname": "protocolrnamezone_authority" + }, + "refresh": 50, + "retry": 100, + "rname": "string", + "use_default_mname": true + } + } + }, + "data_stream": { + "dataset": "bloxone_ddi.dns_config", + "namespace": "ep", + "type": "logs" + }, + "dns": { + "answers": { + "ttl": 350 + } + }, + "ecs": { + "version": "8.4.0" + }, + "elastic_agent": { + "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "verified", + "category": [ + "network" + ], + "created": "2022-07-15T06:55:25.978Z", + "dataset": "bloxone_ddi.dns_config", + "id": "adv12rgfh", + "ingested": "2022-08-31T07:07:32Z", + "kind": "event", + "original": "{\"add_edns_option_in_outgoing_query\":true,\"comment\":\"DNS Config Comment\",\"created_at\":\"2022-07-15T06:55:25.978Z\",\"custom_root_ns\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"custom fqdn\",\"protocol_fqdn\":\"custom protocol fqdn\"}],\"custom_root_ns_enabled\":true,\"disabled\":true,\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_root_keys\":[{\"algorithm\":30,\"protocol_zone\":\"Dnssec root protocol zone\",\"public_key\":\"Dnssec root Public Key\",\"sep\":true,\"zone\":\"Dnssec root Zone\"}],\"dnssec_trust_anchors\":[{\"algorithm\":10,\"protocol_zone\":\"Dnssec trust protocol zone\",\"public_key\":\"Dnssec trust Public Key\",\"sep\":true,\"zone\":\"Dnssec trust zone\"}],\"dnssec_validate_expiry\":true,\"ecs_enabled\":true,\"ecs_forwarding\":true,\"ecs_prefix_v4\":22,\"ecs_prefix_v6\":33,\"ecs_zones\":[{\"access\":\"ecs zones access\",\"fqdn\":\"ecs zones fqdn\",\"protocol_fqdn\":\"ecs zones protocol fqdn\"}],\"edns_udp_size\":568,\"forwarders\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"forwarders fqdn\",\"protocol_fqdn\":\"forwarders protocol fqdn\"}],\"forwarders_only\":true,\"gss_tsig_enabled\":true,\"id\":\"adv12rgfh\",\"inheritance_sources\":{\"add_edns_option_in_outgoing_query\":{\"action\":\"inherit\",\"display_name\":\"displaynameadd_edns_option_in_outgoing_query\",\"source\":\"sourceadd_edns_option_in_outgoing_query\",\"value\":true},\"custom_root_ns_block\":{\"action\":\"override\",\"display_name\":\"displaynamecustom_root_ns_block\",\"source\":\"sourcecustom_root_ns_block\",\"value\":{\"custom_root_ns\":[{\"address\":\"67.43.156.0\",\"fqdn\":\"fqdn_custom_root_ns\",\"protocol_fqdn\":\"protocolfqdn_custom_root_ns\"}],\"custom_root_ns_enabled\":true}},\"dnssec_validation_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamednssec_validation_block\",\"source\":\"sourcednssec_validation_block\",\"value\":{\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_trust_anchors\":[{\"algorithm\":8,\"protocol_zone\":\"protocolzonednssec_trust_anchors\",\"public_key\":\"publickeydnssec_trust_anchors\",\"sep\":false,\"zone\":\"is3zone\"}],\"dnssec_validate_expiry\":true}},\"ecs_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameecs_block\",\"source\":\"sourceecs_block\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":10,\"ecs_zones\":[{\"access\":\"inherit\",\"fqdn\":\"fqdnecs_block\",\"protocol_fqdn\":\"protocol_fqdnecs_block\"}]}},\"ecs_zones\":{\"action\":\"override\",\"display_name\":\"displaynameecs_zones\",\"source\":\"sourceecs_zones\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":12,\"ecs_zones\":[{\"access\":\"access_ecs_zones\",\"fqdn\":\"fqdn_ecs_zones\",\"protocol_fqdn\":\"protocolfqdn_ecs_zones\"}]}},\"edns_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynameedns_udp_size\",\"source\":\"sourceedns_udp_size\",\"value\":55},\"forwarders_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameforwarders_block\",\"source\":\"sourceforwarders_block\",\"value\":{\"forwarders\":[{\"address\":\"89.160.20.128\",\"fqdn\":\"forwarders_fqdn\",\"protocol_fqdn\":\"forwarders_protocolfqdn\"}],\"forwarders_only\":true}},\"gss_tsig_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamegss_tsig_enabled\",\"source\":\"sourcegss_tsig_enabled\",\"value\":true},\"lame_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamelame_ttl\",\"source\":\"sourcelame_ttl\",\"value\":45},\"match_recursive_only\":{\"action\":\"inherit\",\"display_name\":\"displaynamematch_recursive_only\",\"source\":\"sourcematch_recursive_only\",\"value\":false},\"max_cache_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_cache_ttl\",\"source\":\"sourcemax_cache_ttl\",\"value\":13},\"max_negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_negative_ttl\",\"source\":\"sourcemax_negative_ttl\",\"value\":12},\"max_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_udp_size\",\"source\":\"sourcemax_udp_size\",\"value\":11},\"minimal_responses\":{\"action\":\"inherit\",\"display_name\":\"displaynameminimal_responses\",\"source\":\"sourceminimal_responses\",\"value\":true},\"notify\":{\"action\":\"inherit\",\"display_name\":\"displayname_notify\",\"source\":\"source_notify\",\"value\":true},\"query_acl\":{\"action\":\"override\",\"display_name\":\"displaynamequery_acl\",\"source\":\"sourcequery_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclvalue_query_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementvaluequery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha256\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolname_query_acl\",\"secret\":\"secretquery_acl\"}}]},\"recursion_acl\":{\"action\":\"override\",\"display_name\":\"displaynamerecursion_acl\",\"source\":\"sourcerecursion_acl\",\"value\":[{\"access\":\"deny\",\"acl\":\"aclrecursion_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}]},\"recursion_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamerecursion_enabled\",\"source\":\"sourcerecursion_enabled\",\"value\":true},\"synthesize_address_records_from_https\":{\"action\":\"inherit\",\"display_name\":\"displaynamesynthesize_address_records_from_https\",\"source\":\"sourcesynthesize_address_records_from_https\",\"value\":true},\"transfer_acl\":{\"action\":\"inherit\",\"display_name\":\"displaynametransfer_acl\",\"source\":\"sourcetransfer_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}]},\"update_acl\":{\"action\":\"override\",\"display_name\":\"displaynameupdate_acl\",\"source\":\"sourceupdate_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}]},\"use_forwarders_for_subzones\":{\"action\":\"override\",\"display_name\":\"displaynameuse_forwarders_for_subzones\",\"source\":\"sourceuse_forwarders_for_subzones\",\"value\":false},\"zone_authority\":{\"default_ttl\":{\"action\":\"override\",\"display_name\":\"displaynamezone_authority\",\"source\":\"sourcezone_authority\",\"value\":50},\"expire\":{\"action\":\"inherit\",\"display_name\":\"displaynameexpire\",\"source\":\"sourceexpire\",\"value\":70},\"mname_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamemname_block\",\"source\":\"sourcemname_block\",\"value\":{\"mname\":\"mnamevaluemname_block\",\"protocol_mname\":\"protocolmnamemname_block\",\"use_default_mname\":true}},\"negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamenegative_ttl\",\"source\":\"sourcenegative_ttl\",\"value\":90},\"protocol_rname\":{\"action\":\"inherit\",\"display_name\":\"displaynameprotocol_rname\",\"source\":\"sourceprotocol_rname\",\"value\":\"valueprotocol_rname\"},\"refresh\":{\"action\":\"inherit\",\"display_name\":\"displayname_refresh\",\"source\":\"source_refresh\",\"value\":40},\"retry\":{\"action\":\"inherit\",\"display_name\":\"displayname_retry\",\"source\":\"source_retry\",\"value\":570},\"rname\":{\"action\":\"inherit\",\"display_name\":\"displayname_rname\",\"source\":\"source_rname\",\"value\":\"value_rname\"}}},\"ip_spaces\":[\"testipspaces\"],\"lame_ttl\":350,\"match_clients_acl\":[{\"access\":\"deny\",\"acl\":\"aclmatch_clients_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_clients_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha512\",\"comment\":\"commentmatch_clients_acl\",\"key\":\"keymatch_clients_acl\",\"name\":\"namematch_clients_acl\",\"protocol_name\":\"protocolnamematch_clients_acl\",\"secret\":\"secretmatch_clients_acl\"}}],\"match_destinations_acl\":[{\"access\":\"allow\",\"acl\":\"aclmatch_destinations_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_destinations_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentmatch_destinations_acl\",\"key\":\"keymatch_destinations_acl\",\"name\":\"namematch_destinations_acl\",\"protocol_name\":\"protocolnamematch_destinations_acl\",\"secret\":\"secretmatch_destinations_acl\"}}],\"match_recursive_only\":true,\"max_cache_ttl\":90,\"max_negative_ttl\":500,\"max_udp_size\":890,\"minimal_responses\":true,\"name\":\"string\",\"notify\":true,\"query_acl\":[{\"access\":\"accessquery_acl\",\"acl\":\"aclquery_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementquery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolnamequery_acl\",\"secret\":\"secretquery_acl\"}}],\"recursion_acl\":[{\"access\":\"allow\",\"acl\":\"aclrecursion_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}],\"recursion_enabled\":true,\"synthesize_address_records_from_https\":false,\"tags\":{\"message\":\"Hello\"},\"transfer_acl\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}],\"update_acl\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}],\"updated_at\":\"2022-07-15T06:55:25.978Z\",\"use_forwarders_for_subzones\":true,\"zone_authority\":{\"default_ttl\":20,\"expire\":10,\"mname\":\"mnamezone_authority\",\"negative_ttl\":30,\"protocol_mname\":\"protocolmnamezone_authority\",\"protocol_rname\":\"protocolrnamezone_authority\",\"refresh\":50,\"retry\":100,\"rname\":\"string\",\"use_default_mname\":true}}", + "type": [ + "protocol" + ] + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "hmac_sha256", + "hmac_sha384", + "hmac_sha224", + "hmac_sha512", + "hmac_sha1" + ], + "ip": [ + "81.2.69.192", + "67.43.156.0", + "89.160.20.128", + "216.160.83.56" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields", + "forwarded", + "bloxone_ddi-dns_config" + ] +} \ No newline at end of file diff --git a/packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-common-config.yml b/packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-common-config.yml new file mode 100644 index 0000000000..be41bb0d47 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-common-config.yml @@ -0,0 +1,4 @@ +fields: + tags: + - preserve_original_event + - preserve_duplicate_custom_fields diff --git a/packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log b/packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log new file mode 100644 index 0000000000..bef36d69d3 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log @@ -0,0 +1,2 @@ +{"absolute_name_spec":"string","absolute_zone_name":"string","comment":"string","created_at":"2022-07-20T09:59:59.184Z","delegation":"string","disabled":true,"dns_absolute_name_spec":"string","dns_absolute_zone_name":"string","dns_name_in_zone":"string","dns_rdata":"string","id":"string","inheritance_sources":{"ttl":{"action":"string","display_name":"string","source":"string","value":0}},"name_in_zone":"string","options":{},"rdata":{"address":"81.2.69.192","flags":"falg_value","tag":"issue","value":"value","cname":"canonical name","target":".","dhcid":"122zbczba12","exchange":"domain name","preference":12345363467,"order":123124,"regexp":"^sqq:","replacement":"","services":"","dname":"domain name","expire":23131,"mname":"Dummy","negative_ttl":213342,"refresh":10800,"retry":3600,"rname":"demo","serial":12314114,"port":80,"priority":44,"weight":0,"text":"text field","type":"32BIT","length_kind":8},"source":["string"],"tags":{},"ttl":0,"type":"string","updated_at":"2022-07-20T09:59:59.184Z","view":"string","view_name":"string","zone":"string"} +{"absolute_name_spec":"demo_spec","absolute_zone_name":"www.example.com","comment":"string","created_at":"2022-07-14T11:50:28.838Z","delegation":"abc123abcd323","disabled":true,"dns_absolute_name_spec":"Test name","dns_absolute_zone_name":"Dummy Zone","dns_name_in_zone":"Test zone","dns_rdata":"DNS rdata","id":"12abcddcba32ab","inheritance_sources":{"ttl":{"action":"inherit","display_name":"Dummy Display","source":"12abc321ab","value":0}},"name_in_zone":"demo","options":{"address":"81.2.69.144"},"rdata":{"address":"81.2.69.142","value":"wefewf"},"source":["STATIC"],"tags":{},"ttl":0,"type":"AAAA","updated_at":"2022-07-14T11:50:28.838Z","view":"12abcd32bcd12","view_name":"string","zone":"123bcdacd32"} diff --git a/packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log-expected.json b/packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log-expected.json new file mode 100644 index 0000000000..c6a163a500 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log-expected.json @@ -0,0 +1,201 @@ +{ + "expected": [ + { + "@timestamp": "2022-07-20T09:59:59.184Z", + "bloxone_ddi": { + "dns_data": { + "absolute": { + "name": { + "spec": "string" + }, + "zone": { + "name": "string" + } + }, + "absolute_name": { + "spec": "string" + }, + "absolute_zone": { + "name": "string" + }, + "comment": "string", + "created_at": "2022-07-20T09:59:59.184Z", + "delegation": "string", + "disabled": true, + "id": "string", + "inheritance": { + "sources": { + "ttl": { + "action": "string", + "display": { + "name": "string" + }, + "source": "string", + "value": 0 + } + } + }, + "name_in": { + "zone": "string" + }, + "name_in_zone": "string", + "rdata": { + "address": "81.2.69.192", + "cname": "canonical name", + "dhcid": "122zbczba12", + "dname": "domain name", + "exchange": "domain name", + "expire": 23131, + "flags": "falg_value", + "length_kind": 8, + "mname": "Dummy", + "negative_ttl": 213342, + "order": 123124, + "port": 80, + "preference": 12345363467, + "priority": 44, + "refresh": 10800, + "regexp": "^sqq:", + "retry": 3600, + "rname": "demo", + "serial": 12314114, + "tag": "issue", + "target": ".", + "text": "text field", + "type": "32BIT", + "value": "value", + "weight": 0 + }, + "rdata_value": "string", + "source": [ + "string" + ], + "ttl": 0, + "type": "string", + "updated_at": "2022-07-20T09:59:59.184Z", + "view": "string", + "view_name": "string", + "zone": "string" + } + }, + "dns": { + "answers": { + "ttl": 0 + } + }, + "ecs": { + "version": "8.4.0" + }, + "event": { + "category": [ + "network" + ], + "created": "2022-07-20T09:59:59.184Z", + "id": "string", + "kind": "event", + "original": "{\"absolute_name_spec\":\"string\",\"absolute_zone_name\":\"string\",\"comment\":\"string\",\"created_at\":\"2022-07-20T09:59:59.184Z\",\"delegation\":\"string\",\"disabled\":true,\"dns_absolute_name_spec\":\"string\",\"dns_absolute_zone_name\":\"string\",\"dns_name_in_zone\":\"string\",\"dns_rdata\":\"string\",\"id\":\"string\",\"inheritance_sources\":{\"ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0}},\"name_in_zone\":\"string\",\"options\":{},\"rdata\":{\"address\":\"81.2.69.192\",\"flags\":\"falg_value\",\"tag\":\"issue\",\"value\":\"value\",\"cname\":\"canonical name\",\"target\":\".\",\"dhcid\":\"122zbczba12\",\"exchange\":\"domain name\",\"preference\":12345363467,\"order\":123124,\"regexp\":\"^sqq:\",\"replacement\":\"\",\"services\":\"\",\"dname\":\"domain name\",\"expire\":23131,\"mname\":\"Dummy\",\"negative_ttl\":213342,\"refresh\":10800,\"retry\":3600,\"rname\":\"demo\",\"serial\":12314114,\"port\":80,\"priority\":44,\"weight\":0,\"text\":\"text field\",\"type\":\"32BIT\",\"length_kind\":8},\"source\":[\"string\"],\"tags\":{},\"ttl\":0,\"type\":\"string\",\"updated_at\":\"2022-07-20T09:59:59.184Z\",\"view\":\"string\",\"view_name\":\"string\",\"zone\":\"string\"}", + "type": [ + "protocol" + ] + }, + "related": { + "ip": [ + "81.2.69.192" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ] + }, + { + "@timestamp": "2022-07-14T11:50:28.838Z", + "bloxone_ddi": { + "dns_data": { + "absolute": { + "name": { + "spec": "Test name" + }, + "zone": { + "name": "Dummy Zone" + } + }, + "absolute_name": { + "spec": "demo_spec" + }, + "absolute_zone": { + "name": "www.example.com" + }, + "comment": "string", + "created_at": "2022-07-14T11:50:28.838Z", + "delegation": "abc123abcd323", + "disabled": true, + "id": "12abcddcba32ab", + "inheritance": { + "sources": { + "ttl": { + "action": "inherit", + "display": { + "name": "Dummy Display" + }, + "source": "12abc321ab", + "value": 0 + } + } + }, + "name_in": { + "zone": "Test zone" + }, + "name_in_zone": "demo", + "options": { + "address": "81.2.69.144" + }, + "rdata": { + "address": "81.2.69.142", + "value": "wefewf" + }, + "rdata_value": "DNS rdata", + "source": [ + "STATIC" + ], + "ttl": 0, + "type": "AAAA", + "updated_at": "2022-07-14T11:50:28.838Z", + "view": "12abcd32bcd12", + "view_name": "string", + "zone": "123bcdacd32" + } + }, + "dns": { + "answers": { + "ttl": 0 + } + }, + "ecs": { + "version": "8.4.0" + }, + "event": { + "category": [ + "network" + ], + "created": "2022-07-14T11:50:28.838Z", + "id": "12abcddcba32ab", + "kind": "event", + "original": "{\"absolute_name_spec\":\"demo_spec\",\"absolute_zone_name\":\"www.example.com\",\"comment\":\"string\",\"created_at\":\"2022-07-14T11:50:28.838Z\",\"delegation\":\"abc123abcd323\",\"disabled\":true,\"dns_absolute_name_spec\":\"Test name\",\"dns_absolute_zone_name\":\"Dummy Zone\",\"dns_name_in_zone\":\"Test zone\",\"dns_rdata\":\"DNS rdata\",\"id\":\"12abcddcba32ab\",\"inheritance_sources\":{\"ttl\":{\"action\":\"inherit\",\"display_name\":\"Dummy Display\",\"source\":\"12abc321ab\",\"value\":0}},\"name_in_zone\":\"demo\",\"options\":{\"address\":\"81.2.69.144\"},\"rdata\":{\"address\":\"81.2.69.142\",\"value\":\"wefewf\"},\"source\":[\"STATIC\"],\"tags\":{},\"ttl\":0,\"type\":\"AAAA\",\"updated_at\":\"2022-07-14T11:50:28.838Z\",\"view\":\"12abcd32bcd12\",\"view_name\":\"string\",\"zone\":\"123bcdacd32\"}", + "type": [ + "protocol" + ] + }, + "related": { + "ip": [ + "81.2.69.144", + "81.2.69.142" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ] + } + ] +} \ No newline at end of file diff --git a/packages/bloxone_ddi/data_stream/dns_data/_dev/test/system/test-default-config.yml b/packages/bloxone_ddi/data_stream/dns_data/_dev/test/system/test-default-config.yml new file mode 100644 index 0000000000..5188dac65d --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_data/_dev/test/system/test-default-config.yml @@ -0,0 +1,9 @@ +input: httpjson +service: bloxone-ddi +vars: + url: http://{{Hostname}}:{{Port}} + api_key: xxxx +data_stream: + vars: + preserve_original_event: true + preserve_duplicate_custom_fields: true diff --git a/packages/bloxone_ddi/data_stream/dns_data/agent/stream/httpjson.yml.hbs b/packages/bloxone_ddi/data_stream/dns_data/agent/stream/httpjson.yml.hbs new file mode 100644 index 0000000000..1e7a1351da --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_data/agent/stream/httpjson.yml.hbs @@ -0,0 +1,54 @@ +config_version: 2 +interval: {{interval}} +{{#if proxy_url }} +request.proxy_url: {{proxy_url}} +{{/if}} +{{#if ssl}} +request.ssl: {{ssl}} +{{/if}} +request.method: GET +request.url: {{url}}/api/ddi/v1/dns/record +request.transforms: + - set: + target: header.Authorization + value: 'Token {{api_key}}' + - set: + target: url.params._offset + value: 0 + - set: + target: url.params._limit + value: 100 + - set: + target: url.params._order_by + value: 'updated_at asc' + - set: + target: url.params._filter + value: 'updated_at>="[[(formatDate (parseDate .cursor.last_updated_at) "2006-01-02T15:04:05.999Z")]]"' + default: 'updated_at>="[[(formatDate (now (parseDuration "-{{initial_interval}}")) "2006-01-02T15:04:05.999Z")]]"' +response.pagination: + - set: + target: url.params._offset + value: '[[if (eq (len .last_response.body.results) 100)]][[add (toInt (.last_response.url.params.Get "_offset")) 100]][[else]][[.last_response.terminate_pagination]][[end]]' + fail_on_template_error: true +cursor: + last_updated_at: + value: '[[.last_event.updated_at]]' +response.split: + target: body.results +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/bloxone_ddi/data_stream/dns_data/elasticsearch/ingest_pipeline/default.yml b/packages/bloxone_ddi/data_stream/dns_data/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 0000000000..58245dbf51 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_data/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,433 @@ +--- +description: Pipeline for parsing DNS data logs. +processors: + - set: + field: ecs.version + value: '8.4.0' + - set: + field: event.kind + value: event + - set: + field: event.category + value: [network] + - set: + field: event.type + value: [protocol] + - rename: + field: message + target_field: event.original + ignore_missing: true + - json: + field: event.original + target_field: json + - fingerprint: + fields: + - json.created_at + - json.updated_at + - json.id + target_field: _id + ignore_missing: true + - rename: + field: json.absolute_name_spec + target_field: bloxone_ddi.dns_data.absolute_name.spec + ignore_missing: true + - rename: + field: json.absolute_zone_name + target_field: bloxone_ddi.dns_data.absolute_zone.name + ignore_missing: true + - rename: + field: json.comment + target_field: bloxone_ddi.dns_data.comment + ignore_missing: true + - date: + field: json.created_at + target_field: bloxone_ddi.dns_data.created_at + if: ctx.json?.created_at != null && ctx.json.created_at != '' + formats: + - ISO8601 + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - set: + field: event.created + copy_from: bloxone_ddi.dns_data.created_at + ignore_failure: true + - rename: + field: json.delegation + target_field: bloxone_ddi.dns_data.delegation + ignore_missing: true + - convert: + field: json.disabled + target_field: bloxone_ddi.dns_data.disabled + if: ctx.json?.disabled != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.dns_absolute_name_spec + target_field: bloxone_ddi.dns_data.absolute.name.spec + ignore_missing: true + - rename: + field: json.dns_absolute_zone_name + target_field: bloxone_ddi.dns_data.absolute.zone.name + ignore_missing: true + - rename: + field: json.dns_name_in_zone + target_field: bloxone_ddi.dns_data.name_in.zone + ignore_missing: true + - rename: + field: json.dns_rdata + target_field: bloxone_ddi.dns_data.rdata_value + ignore_missing: true + - rename: + field: json.id + target_field: bloxone_ddi.dns_data.id + ignore_missing: true + - set: + field: event.id + copy_from: bloxone_ddi.dns_data.id + ignore_failure: true + - rename: + field: json.inheritance_sources.ttl.action + target_field: bloxone_ddi.dns_data.inheritance.sources.ttl.action + ignore_missing: true + - rename: + field: json.inheritance_sources.ttl.display_name + target_field: bloxone_ddi.dns_data.inheritance.sources.ttl.display.name + ignore_missing: true + - rename: + field: json.inheritance_sources.ttl.source + target_field: bloxone_ddi.dns_data.inheritance.sources.ttl.source + ignore_missing: true + - convert: + field: json.inheritance_sources.ttl.value + target_field: bloxone_ddi.dns_data.inheritance.sources.ttl.value + if: ctx.json?.inheritance_sources?.ttl.value != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.name_in_zone + target_field: bloxone_ddi.dns_data.name_in_zone + ignore_missing: true + - convert: + field: json.options.create_ptr + target_field: bloxone_ddi.dns_data.options.create_ptr + if: ctx.json?.options?.create_ptr != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.options.check_rmz + target_field: bloxone_ddi.dns_data.options.check_rmz + if: ctx.json?.options?.check_rmz != '' + type: boolean + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.options.address + target_field: bloxone_ddi.dns_data.options.address + if: ctx.json?.options?.address != '' + type: ip + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - append: + field: related.ip + value: '{{{bloxone_ddi.dns_data.options.address}}}' + allow_duplicates: false + ignore_failure: true + - rename: + field: json.provider_metadata + target_field: bloxone_ddi.dns_data.provider_metadata + ignore_missing: true + - convert: + field: json.rdata.address + target_field: bloxone_ddi.dns_data.rdata.address + if: ctx.json?.rdata?.address != '' + type: ip + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - append: + field: related.ip + value: '{{{bloxone_ddi.dns_data.rdata.address}}}' + allow_duplicates: false + ignore_failure: true + - rename: + field: json.rdata.flags + target_field: bloxone_ddi.dns_data.rdata.flags + ignore_missing: true + - rename: + field: json.rdata.tag + target_field: bloxone_ddi.dns_data.rdata.tag + ignore_missing: true + - rename: + field: json.rdata.value + target_field: bloxone_ddi.dns_data.rdata.value + ignore_missing: true + - rename: + field: json.rdata.cname + target_field: bloxone_ddi.dns_data.rdata.cname + ignore_missing: true + - rename: + field: json.rdata.target + target_field: bloxone_ddi.dns_data.rdata.target + ignore_missing: true + - rename: + field: json.rdata.dhcid + target_field: bloxone_ddi.dns_data.rdata.dhcid + ignore_missing: true + - rename: + field: json.rdata.exchange + target_field: bloxone_ddi.dns_data.rdata.exchange + ignore_missing: true + - convert: + field: json.rdata.preference + target_field: bloxone_ddi.dns_data.rdata.preference + if: ctx.json?.rdata?.preference != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.rdata.order + target_field: bloxone_ddi.dns_data.rdata.order + if: ctx.json?.rdata?.order != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.rdata.regexp + target_field: bloxone_ddi.dns_data.rdata.regexp + ignore_missing: true + - rename: + field: json.rdata.replacement + target_field: bloxone_ddi.dns_data.rdata.replacement + ignore_missing: true + - rename: + field: json.rdata.services + target_field: bloxone_ddi.dns_data.rdata.services + ignore_missing: true + - rename: + field: json.rdata.dname + target_field: bloxone_ddi.dns_data.rdata.dname + ignore_missing: true + - convert: + field: json.rdata.expire + target_field: bloxone_ddi.dns_data.rdata.expire + if: ctx.json?.rdata?.expire != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.rdata.mname + target_field: bloxone_ddi.dns_data.rdata.mname + ignore_missing: true + - convert: + field: json.rdata.negative_ttl + target_field: bloxone_ddi.dns_data.rdata.negative_ttl + if: ctx.json?.rdata?.negative_ttl != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.rdata.refresh + target_field: bloxone_ddi.dns_data.rdata.refresh + if: ctx.json?.rdata?.refresh != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.rdata.retry + target_field: bloxone_ddi.dns_data.rdata.retry + if: ctx.json?.rdata?.retry != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.rdata.rname + target_field: bloxone_ddi.dns_data.rdata.rname + ignore_missing: true + - convert: + field: json.rdata.serial + target_field: bloxone_ddi.dns_data.rdata.serial + if: ctx.json?.rdata?.serial != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.rdata.port + target_field: bloxone_ddi.dns_data.rdata.port + if: ctx.json?.rdata?.port != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.rdata.priority + target_field: bloxone_ddi.dns_data.rdata.priority + if: ctx.json?.rdata?.priority != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - convert: + field: json.rdata.weight + target_field: bloxone_ddi.dns_data.rdata.weight + if: ctx.json?.rdata?.weight != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.rdata.text + target_field: bloxone_ddi.dns_data.rdata.text + ignore_missing: true + - rename: + field: json.rdata.type + target_field: bloxone_ddi.dns_data.rdata.type + ignore_missing: true + - convert: + field: json.rdata.length_kind + target_field: bloxone_ddi.dns_data.rdata.length_kind + if: ctx.json?.rdata?.length_kind != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - rename: + field: json.tags + target_field: bloxone_ddi.dns_data.tags + ignore_missing: true + - rename: + field: json.source + target_field: bloxone_ddi.dns_data.source + ignore_missing: true + - convert: + field: json.ttl + target_field: bloxone_ddi.dns_data.ttl + if: ctx.json?.ttl != '' + type: long + ignore_missing: true + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - set: + field: dns.answers.ttl + copy_from: bloxone_ddi.dns_data.ttl + ignore_failure: true + - rename: + field: json.type + target_field: bloxone_ddi.dns_data.type + ignore_missing: true + - date: + field: json.updated_at + target_field: bloxone_ddi.dns_data.updated_at + if: ctx.json?.updated_at != null && ctx.json.updated_at != '' + formats: + - ISO8601 + on_failure: + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' + - set: + field: '@timestamp' + copy_from: bloxone_ddi.dns_data.updated_at + ignore_failure: true + - rename: + field: json.view + target_field: bloxone_ddi.dns_data.view + ignore_missing: true + - rename: + field: json.view_name + target_field: bloxone_ddi.dns_data.view_name + ignore_missing: true + - rename: + field: json.zone + target_field: bloxone_ddi.dns_data.zone + ignore_missing: true + - remove: + field: json + ignore_missing: true + - remove: + field: + - bloxone_ddi.dns_data.updated_at + - bloxone_ddi.dns_data.lame_ttl + - bloxone_ddi.dns_data.created_at + - bloxone_ddi.dns_data.id + if: ctx.tags == null || !ctx.tags.contains('preserve_duplicate_custom_fields') + ignore_failure: true + ignore_missing: true + - remove: + field: event.original + if: ctx.tags == null || !(ctx.tags.contains('preserve_original_event')) + ignore_failure: true + 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); +on_failure: +- append: + field: error.message + value: '{{ _ingest.on_failure_message }}' diff --git a/packages/bloxone_ddi/data_stream/dns_data/fields/agent.yml b/packages/bloxone_ddi/data_stream/dns_data/fields/agent.yml new file mode 100644 index 0000000000..6e1bac042b --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_data/fields/agent.yml @@ -0,0 +1,186 @@ +- name: cloud + title: Cloud + group: 2 + description: Fields related to the cloud or infrastructure the events are coming from. + footnote: 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.' + type: group + fields: + - name: account.id + level: extended + type: keyword + ignore_above: 1024 + description: '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.' + example: 666777888999 + - name: availability_zone + level: extended + type: keyword + ignore_above: 1024 + description: Availability zone in which this host is running. + example: us-east-1c + - name: instance.id + level: extended + type: keyword + ignore_above: 1024 + description: Instance ID of the host machine. + example: i-1234567890abcdef0 + - name: instance.name + level: extended + type: keyword + ignore_above: 1024 + description: Instance name of the host machine. + - name: machine.type + level: extended + type: keyword + ignore_above: 1024 + description: Machine type of the host machine. + example: t2.medium + - name: provider + level: extended + type: keyword + ignore_above: 1024 + description: Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. + example: aws + - name: region + level: extended + type: keyword + ignore_above: 1024 + description: Region in which this host is running. + example: us-east-1 + - name: project.id + type: keyword + description: Name of the project in Google Cloud. + - name: image.id + type: keyword + description: Image ID for the cloud instance. +- name: container + title: Container + group: 2 + description: 'Container fields are used for meta information about the specific container that is the source of information. These fields help correlate data based containers from any runtime.' + type: group + fields: + - name: id + level: core + type: keyword + ignore_above: 1024 + description: Unique container id. + - name: image.name + level: extended + type: keyword + ignore_above: 1024 + description: Name of the image the container was built on. + - name: labels + level: extended + type: object + object_type: keyword + description: Image labels. + - name: name + level: extended + type: keyword + ignore_above: 1024 + description: Container name. +- name: host + title: Host + group: 2 + description: 'A host is defined as a general computing instance. ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.' + type: group + fields: + - name: architecture + level: core + type: keyword + ignore_above: 1024 + description: Operating system architecture. + example: x86_64 + - name: domain + level: extended + type: keyword + ignore_above: 1024 + description: 'Name of the domain of which the host is a member. For example, on Windows this could be the host''s Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host''s LDAP provider.' + example: CONTOSO + default_field: false + - name: hostname + level: core + type: keyword + ignore_above: 1024 + description: 'Hostname of the host. It normally contains what the `hostname` command returns on the host machine.' + - name: id + level: core + type: keyword + ignore_above: 1024 + description: 'Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`.' + - name: ip + level: core + type: ip + description: Host ip addresses. + - name: mac + level: core + type: keyword + ignore_above: 1024 + description: Host mac addresses. + - name: name + level: core + type: keyword + ignore_above: 1024 + description: 'Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.' + - name: os.family + level: extended + type: keyword + ignore_above: 1024 + description: OS family (such as redhat, debian, freebsd, windows). + example: debian + - name: os.kernel + level: extended + type: keyword + ignore_above: 1024 + description: Operating system kernel version as a raw string. + example: 4.4.0-112-generic + - name: os.name + level: extended + type: keyword + ignore_above: 1024 + multi_fields: + - name: text + type: text + norms: false + default_field: false + description: Operating system name, without the version. + example: Mac OS X + - name: os.platform + level: extended + type: keyword + ignore_above: 1024 + description: Operating system platform (such centos, ubuntu, windows). + example: darwin + - name: os.version + level: extended + type: keyword + ignore_above: 1024 + description: Operating system version as a raw string. + example: 10.14.1 + - name: type + level: core + type: keyword + ignore_above: 1024 + description: 'Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.' + - name: containerized + type: boolean + description: > + If the host is a container. + + - name: os.build + type: keyword + example: "18D109" + description: > + OS build information. + + - name: os.codename + type: keyword + example: "stretch" + description: > + OS codename, if any. + +- name: input.type + type: keyword + description: Input type +- name: log.offset + type: long + description: Log offset diff --git a/packages/bloxone_ddi/data_stream/dns_data/fields/base-fields.yml b/packages/bloxone_ddi/data_stream/dns_data/fields/base-fields.yml new file mode 100644 index 0000000000..18c7f3a289 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_data/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: '@timestamp' + type: date + description: Event timestamp. +- name: event.module + type: constant_keyword + description: Event module. + value: bloxone_ddi +- name: event.dataset + type: constant_keyword + description: Event dataset. + value: bloxone_ddi.dns_data diff --git a/packages/bloxone_ddi/data_stream/dns_data/fields/ecs.yml b/packages/bloxone_ddi/data_stream/dns_data/fields/ecs.yml new file mode 100644 index 0000000000..04b28dc660 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_data/fields/ecs.yml @@ -0,0 +1,22 @@ +- external: ecs + name: dns.answers.ttl +- external: ecs + name: ecs.version +- external: ecs + name: event.category +- external: ecs + name: event.created +- external: ecs + name: event.id +- external: ecs + name: event.kind +- external: ecs + name: event.original +- external: ecs + name: event.type +- external: ecs + name: related.hosts +- external: ecs + name: related.ip +- external: ecs + name: tags diff --git a/packages/bloxone_ddi/data_stream/dns_data/fields/fields.yml b/packages/bloxone_ddi/data_stream/dns_data/fields/fields.yml new file mode 100644 index 0000000000..74806320c3 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_data/fields/fields.yml @@ -0,0 +1,204 @@ +- name: bloxone_ddi.dns_data + type: group + fields: + - name: absolute_name + type: group + fields: + - name: spec + type: keyword + description: Synthetic field, used to determine zone and/or name_in_zone field for records. + - name: absolute_zone + type: group + fields: + - name: name + type: keyword + description: The absolute domain name of the zone where this record belongs. + - name: absolute + type: group + fields: + - name: name + type: group + fields: + - name: spec + type: keyword + description: The DNS protocol textual representation of absolute_name_spec. + - name: zone + type: group + fields: + - name: name + type: keyword + description: The DNS protocol textual representation of the absolute domain name of the zone where this record belongs. + - name: comment + type: keyword + description: The description for the DNS resource record. May contain 0 to 1024 characters. Can include UTF-8. + - name: created_at + type: date + description: The timestamp when the object has been created. + - name: delegation + type: keyword + description: The resource identifier. + - name: disabled + type: boolean + description: Indicates if the DNS resource record is disabled. A disabled object is effectively non-existent when generating configuration. + - name: id + type: keyword + description: The resource identifier. + - name: inheritance + type: group + fields: + - name: sources + type: group + fields: + - name: ttl + type: group + fields: + - name: action + type: keyword + description: The inheritance setting for a field. + - name: display + type: group + fields: + - name: name + type: keyword + description: The human-readable display name for the object referred to by source. + - name: source + type: keyword + description: The resource identifier. + - name: value + type: long + description: The inherited value. + - name: name_in_zone + type: keyword + description: The relative owner name to the zone origin. Must be specified for creating the DNS resource record and is read only for other operations. + - name: name_in + type: group + fields: + - name: zone + type: keyword + description: The DNS protocol textual representation of the relative owner name for the DNS zone. + - name: options + type: group + fields: + - name: address + type: ip + description: For GET operation it contains the IPv4 or IPv6 address represented by the PTR record and for POST and PATCH operations it can be used to create/update a PTR record based on the IP address it represents. In this case, in addition to the address in the options field, need to specify the view field. + - name: check_rmz + type: boolean + description: A boolean flag which can be set to true for POST operation to check the existence of reverse zone for creating the corresponding PTR record. Only applicable if the create_ptr option is set to true. + - name: create_ptr + type: boolean + description: A boolean flag which can be set to true for POST operation to automatically create the corresponding PTR record. + - name: provider_metadata + type: flattened + description: external DNS provider metadata. + - name: rdata_value + type: keyword + description: The DNS protocol textual representation of the DNS resource record data. + - name: rdata + type: group + fields: + - name: address + type: ip + description: The IPv4/IPv6 address of the host. + - name: cname + type: keyword + description: A domain name which specifies the canonical or primary name for the owner. The owner name is an alias. Can be empty. + - name: dhcid + type: keyword + description: The Base64 encoded string which contains DHCP client information. + - name: dname + type: keyword + description: A domain-name which specifies a host which should be authoritative for the specified class and domain. Can be absolute or relative domain name and include UTF-8. + - name: exchange + type: keyword + description: A domain name which specifies a host willing to act as a mail exchange for the owner name. + - name: expire + type: long + description: The time interval in seconds after which zone data will expire and secondary server stops answering requests for the zone. + - name: flags + type: keyword + description: An unsigned 8-bit integer which specifies the CAA record flags. RFC 6844 defines one (highest) bit in flag octet, remaining bits are deferred for future use. This bit is referenced as Critical. When the bit is set (flag value == 128), issuers must not issue certificates in case CAA records contain unknown property tags. + - name: length_kind + type: long + description: A string indicating the size in bits of a sub-subfield that is prepended to the value and encodes the length of the value. + - name: mname + type: keyword + description: The domain name for the master server for the zone. Can be absolute or relative domain name. + - name: negative_ttl + type: long + description: The time interval in seconds for which name servers can cache negative responses for zone. + - name: order + type: long + description: A 16-bit unsigned integer specifying the order in which the NAPTR records must be processed. Low numbers are processed before high numbers, and once a NAPTR is found whose rule “matches” the target, the client must not consider any NAPTRs with a higher value for order (except as noted below for the “flags” field. The range of the value is 0 to 65535. + - name: port + type: long + description: An unsigned 16-bit integer which specifies the port on this target host of this service. The range of the value is 0 to 65535. This is often as specified in Assigned Numbers but need not be. + - name: preference + type: long + description: An unsigned 16-bit integer which specifies the preference given to this RR among others at the same owner. Lower values are preferred. The range of the value is 0 to 65535. + - name: priority + type: long + description: An unsigned 16-bit integer which specifies the priority of this target host. The range of the value is 0 to 65535. A client must attempt to contact the target host with the lowest-numbered priority it can reach. Target hosts with the same priority should be tried in an order defined by the weight field. + - name: refresh + type: long + description: The time interval in seconds that specifies how often secondary servers need to send a message to the primary server for a zone to check that their data is current, and retrieve fresh data if it is not. + - name: regexp + type: keyword + description: A string containing a substitution expression that is applied to the original string held by the client in order to construct the next domain name to lookup. + - name: replacement + type: keyword + description: The next name to query for NAPTR, SRV, or address records depending on the value of the flags field. This can be an absolute or relative domain name. Can be empty. + - name: retry + type: long + description: The time interval in seconds for which the secondary server will wait before attempting to recontact the primary server after a connection failure occurs. + - name: rname + type: keyword + description: The domain name which specifies the mailbox of the person responsible for this zone. + - name: serial + type: long + description: An unsigned 32-bit integer that specifies the serial number of the zone. Used to indicate that zone data was updated, so the secondary name server can initiate zone transfer. The range of the value is 0 to 4294967295. + - name: services + type: keyword + description: Specifies the service(s) available down this rewrite path. It may also specify the particular protocol that is used to talk with a service. A protocol must be specified if the flags field states that the NAPTR is terminal. If a protocol is specified, but the flags field does not state that the NAPTR is terminal, the next lookup must be for a NAPTR. The client may choose not to perform the next lookup if the protocol is unknown, but that behavior must not be relied upon. + - name: tag + type: keyword + description: The CAA record property tag string which indicates the type of CAA record. + - name: target + type: keyword + description: The target domain name to which the zone will be mapped. Can be empty. + - name: text + type: keyword + description: The semantics of the text depends on the domain where it is found. + - name: type + type: keyword + description: Type of TXT (Text) record. + - name: value + type: keyword + description: A string which contains the CAA record property value. + - name: weight + type: long + description: An unsigned 16-bit integer which specifies a relative weight for entries with the same priority. The range of the value is 0 to 65535. Larger weights should be given a proportionately higher probability of being selected. Domain administrators should use weight 0 when there isn’t any server selection to do, to make the RR easier to read for humans (less noisy). In the presence of records containing weights greater than 0, records with weight 0 should have a very small chance of being selected. + - name: source + type: keyword + description: The DNS resource record type-specific non-protocol source. The source is a combination of indicators, each tracking how the DNS resource record appeared in system. + - name: tags + type: flattened + description: The tags for the DNS resource record in JSON format. + - name: ttl + type: long + description: The record time to live value in seconds. The range of this value is 0 to 2147483647. Defaults to TTL value from the SOA record of the zone. + - name: type + type: keyword + description: The DNS resource record type specified in the textual mnemonic format or in the “TYPEnnn” format where “nnn” indicates the numeric type value. + - name: updated_at + type: date + description: The timestamp when the object has been updated. Equals to created_at if not updated after creation. + - name: view + type: keyword + description: The resource identifier. + - name: view_name + type: keyword + description: The display name of the DNS view that contains the parent zone of the DNS resource record. + - name: zone + type: keyword + description: The resource identifier. diff --git a/packages/bloxone_ddi/data_stream/dns_data/manifest.yml b/packages/bloxone_ddi/data_stream/dns_data/manifest.yml new file mode 100644 index 0000000000..9c46d277c9 --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_data/manifest.yml @@ -0,0 +1,58 @@ +title: Collect DNS Data logs from BloxOne DDI +type: logs +streams: + - input: httpjson + title: DNS Data logs + description: Collect DNS Data logs from BloxOne DDI. + template_path: httpjson.yml.hbs + vars: + - name: initial_interval + type: text + title: Initial Interval + description: 'How far back to pull the DHCP Lease events from BloxOne DDI. NOTE: Supported units for this parameter are h/m/s.' + multi: false + required: true + show_user: true + default: 24h + - name: interval + type: text + title: Interval + description: 'Duration between requests to the BloxOne DDI API. NOTE: Supported units for this parameter are h/m/s.' + multi: false + required: true + show_user: true + default: 1m + - name: tags + type: text + title: Tags + multi: true + required: true + show_user: false + default: + - forwarded + - bloxone_ddi-dns_data + - 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: true + title: Preserve duplicate custom fields + description: Preserve custom fields for all ECS mappings. + 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/bloxone_ddi/data_stream/dns_data/sample_event.json b/packages/bloxone_ddi/data_stream/dns_data/sample_event.json new file mode 100644 index 0000000000..c0ce04edfb --- /dev/null +++ b/packages/bloxone_ddi/data_stream/dns_data/sample_event.json @@ -0,0 +1,144 @@ +{ + "@timestamp": "2022-07-20T09:59:59.184Z", + "agent": { + "ephemeral_id": "85e827d3-e5d5-45b3-bc7e-33174299eff4", + "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.2.0" + }, + "bloxone_ddi": { + "dns_data": { + "absolute": { + "name": { + "spec": "DNS Absolute Name" + }, + "zone": { + "name": "DNS Absolute Zone Name" + } + }, + "absolute_name": { + "spec": "DNS Data Absolute Name" + }, + "absolute_zone": { + "name": "DNS Data Absolute Zone Name" + }, + "comment": "DNS Data Comment", + "created_at": "2022-07-20T09:59:59.184Z", + "delegation": "DNS Data Delegation", + "disabled": true, + "id": "ghr123ghf", + "inheritance": { + "sources": { + "ttl": { + "action": "DNS Data Action", + "display": { + "name": "DNS Display Name" + }, + "source": "DNS Data Source", + "value": 10 + } + } + }, + "name_in": { + "zone": "DNS Name in Zone" + }, + "name_in_zone": "DNS Data Name in zone", + "options": { + "address": "67.43.156.0", + "check_rmz": true, + "create_ptr": false + }, + "rdata": { + "address": "81.2.69.192", + "cname": "DNS Data Canonical Name", + "dhcid": "122zbczba12", + "dname": "DNS Data dname", + "exchange": "DNS Data Exchange", + "expire": 23131, + "flags": "DNS Data Flags", + "length_kind": 8, + "mname": "DNS Data mname", + "negative_ttl": 213342, + "order": 123124, + "port": 80, + "preference": 12345363467, + "priority": 44, + "refresh": 10800, + "regexp": "none", + "replacement": "DNS Data Replacement", + "retry": 3600, + "rname": "DNS Data rname", + "serial": 12314114, + "services": "DNS Data Test Services", + "tag": "issue", + "target": "DNS Data Target", + "text": "DNS Data text field", + "type": "32BIT", + "value": "DNS Data Value", + "weight": 0 + }, + "rdata_value": "DNS RData", + "source": [ + "STATIC" + ], + "tags": { + "message": "Hello" + }, + "ttl": 0, + "type": "DNS Data Type", + "updated_at": "2022-07-20T09:59:59.184Z", + "view": "DNS Data View", + "view_name": "DNS Data View Name", + "zone": "DNS Data Zone" + } + }, + "data_stream": { + "dataset": "bloxone_ddi.dns_data", + "namespace": "ep", + "type": "logs" + }, + "dns": { + "answers": { + "ttl": 0 + } + }, + "ecs": { + "version": "8.4.0" + }, + "elastic_agent": { + "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "verified", + "category": [ + "network" + ], + "created": "2022-07-20T09:59:59.184Z", + "dataset": "bloxone_ddi.dns_data", + "id": "ghr123ghf", + "ingested": "2022-08-31T07:08:15Z", + "kind": "event", + "original": "{\"absolute_name_spec\":\"DNS Data Absolute Name\",\"absolute_zone_name\":\"DNS Data Absolute Zone Name\",\"comment\":\"DNS Data Comment\",\"created_at\":\"2022-07-20T09:59:59.184Z\",\"delegation\":\"DNS Data Delegation\",\"disabled\":true,\"dns_absolute_name_spec\":\"DNS Absolute Name\",\"dns_absolute_zone_name\":\"DNS Absolute Zone Name\",\"dns_name_in_zone\":\"DNS Name in Zone\",\"dns_rdata\":\"DNS RData\",\"id\":\"ghr123ghf\",\"inheritance_sources\":{\"ttl\":{\"action\":\"DNS Data Action\",\"display_name\":\"DNS Display Name\",\"source\":\"DNS Data Source\",\"value\":10}},\"name_in_zone\":\"DNS Data Name in zone\",\"options\":{\"address\":\"67.43.156.0\",\"check_rmz\":true,\"create_ptr\":false},\"rdata\":{\"address\":\"81.2.69.192\",\"cname\":\"DNS Data Canonical Name\",\"dhcid\":\"122zbczba12\",\"dname\":\"DNS Data dname\",\"exchange\":\"DNS Data Exchange\",\"expire\":23131,\"flags\":\"DNS Data Flags\",\"length_kind\":8,\"mname\":\"DNS Data mname\",\"negative_ttl\":213342,\"order\":123124,\"port\":80,\"preference\":12345363467,\"priority\":44,\"refresh\":10800,\"regexp\":\"none\",\"replacement\":\"DNS Data Replacement\",\"retry\":3600,\"rname\":\"DNS Data rname\",\"serial\":12314114,\"services\":\"DNS Data Test Services\",\"tag\":\"issue\",\"target\":\"DNS Data Target\",\"text\":\"DNS Data text field\",\"type\":\"32BIT\",\"value\":\"DNS Data Value\",\"weight\":0},\"source\":[\"STATIC\"],\"tags\":{\"message\":\"Hello\"},\"ttl\":0,\"type\":\"DNS Data Type\",\"updated_at\":\"2022-07-20T09:59:59.184Z\",\"view\":\"DNS Data View\",\"view_name\":\"DNS Data View Name\",\"zone\":\"DNS Data Zone\"}", + "type": [ + "protocol" + ] + }, + "input": { + "type": "httpjson" + }, + "related": { + "ip": [ + "67.43.156.0", + "81.2.69.192" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields", + "forwarded", + "bloxone_ddi-dns_data" + ] +} \ No newline at end of file diff --git a/packages/bloxone_ddi/docs/README.md b/packages/bloxone_ddi/docs/README.md new file mode 100644 index 0000000000..2c7231e4e0 --- /dev/null +++ b/packages/bloxone_ddi/docs/README.md @@ -0,0 +1,1519 @@ +# BloxOne DDI + +## Overview + +The [BloxOne DDI](https://www.infoblox.com/products/bloxone-ddi/) integration allows you to monitor DNS, DHCP and IP address management activity. DDI is the foundation of core network services that enables all communications over an IP-based network. + +Use the BloxOne DDI integration to collects and parses data from the REST APIs and then visualize that data in Kibana. + +## Data streams + +The BloxOne DDI integration collects logs for three types of events: DHCP lease, DNS data and DNS config. + +**DHCP Lease** is a BloxOne DDI service that stores information about leases. See more details about its API [here](https://csp.infoblox.com/apidoc?url=https%3A%2F%2Fcsp.infoblox.com%2Fapidoc%2Fdocs%2FDhcpLeases). + +**DNS Config** is a BloxOne DDI service that provides cloud-based DNS configuration with on-prem host serving DNS protocol. See more details about its API [here](https://csp.infoblox.com/apidoc?url=https%3A%2F%2Fcsp.infoblox.com%2Fapidoc%2Fdocs%2FDnsConfig). + +**DNS Data** is a BloxOne DDI service providing primary authoritative zone support. DNS Data is authoritative for all DNS resource records and is acting as a primary DNS server. See more details about its API [here](https://csp.infoblox.com/apidoc?url=https%3A%2F%2Fcsp.infoblox.com%2Fapidoc%2Fdocs%2FDnsData). + +## 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. + +This module has been tested against `BloxOne DDI API (v1)`. + +## Setup + +### To collect data from BloxOne DDI APIs, the user must have API Key. To create an API key follow the below steps: + +1. Log on to the Cloud Services Portal. +2. Go to ** -> User Profile**. +3. Go to **User API Keys** page. +4. Click **Create** to create a new API key. Specify the following: + - **Name**: Specify the name of the key. + - **Expires at**: Specify the expiry. +5. Click **Save & Close**. The API Access Key Generated dialog is shown. +6. Click **Copy**. + +### Enabling the integration in Elastic + +1. In Kibana go to **Management > Integrations**. +2. In the "Search for integrations" search bar, type **BloxOne DDI**. +3. Click on **BloxOne DDI** integration from the search results. +4. Click on **Add BloxOne DDI** button to add BloxOne DDI integration. +5. Enable the Integration to collect logs via API. + +## Logs Reference + +### dhcp_lease + +This is the `dhcp_lease` dataset. + +#### Example + +An example event for `dhcp_lease` looks as following: + +```json +{ + "@timestamp": "2022-07-11T11:51:15.417Z", + "agent": { + "ephemeral_id": "94ecc777-655d-433b-8b9a-03e70d1939e9", + "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.2.0" + }, + "bloxone_ddi": { + "dhcp_lease": { + "address": "81.2.69.192", + "client_id": "abc3212abc", + "ends": "2022-07-11T11:51:15.417Z", + "fingerprint": { + "processed": "12abca32bca32abcd", + "value": "ab3213cbabab/abc23bca" + }, + "ha_group": "abc321cdcbda321", + "hardware": "00-00-5E-00-53-00", + "host": "admin", + "hostname": "Host1", + "iaid": 0, + "last_updated": "2022-07-11T11:51:15.417Z", + "options": { + "message": "Hello" + }, + "preferred_lifetime": "2022-07-11T11:51:15.417Z", + "protocol": "ipv4", + "space": "DHCP lease Space", + "starts": "2022-07-14T11:51:15.417Z", + "state": "used", + "type": "DHCP lease Type" + } + }, + "client": { + "user": { + "id": "abc3212abc" + } + }, + "data_stream": { + "dataset": "bloxone_ddi.dhcp_lease", + "namespace": "ep", + "type": "logs" + }, + "ecs": { + "version": "8.4.0" + }, + "elastic_agent": { + "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "verified", + "category": [ + "network" + ], + "created": "2022-08-31T07:06:44.259Z", + "dataset": "bloxone_ddi.dhcp_lease", + "end": "2022-07-11T11:51:15.417Z", + "ingested": "2022-08-31T07:06:47Z", + "kind": "event", + "original": "{\"address\":\"81.2.69.192\",\"client_id\":\"abc3212abc\",\"ends\":\"2022-07-11T11:51:15.417Z\",\"fingerprint\":\"ab3213cbabab/abc23bca\",\"fingerprint_processed\":\"12abca32bca32abcd\",\"ha_group\":\"abc321cdcbda321\",\"hardware\":\"00:00:5E:00:53:00\",\"host\":\"admin\",\"hostname\":\"Host1\",\"iaid\":0,\"last_updated\":\"2022-07-11T11:51:15.417Z\",\"options\":{\"message\":\"Hello\"},\"preferred_lifetime\":\"2022-07-11T11:51:15.417Z\",\"protocol\":\"ip4\",\"space\":\"DHCP lease Space\",\"starts\":\"2022-07-14T11:51:15.417Z\",\"state\":\"used\",\"type\":\"DHCP lease Type\"}", + "start": "2022-07-14T11:51:15.417Z", + "type": [ + "protocol" + ] + }, + "host": { + "hostname": "Host1", + "name": "admin" + }, + "input": { + "type": "httpjson" + }, + "network": { + "type": "ipv4" + }, + "related": { + "hosts": [ + "admin", + "Host1" + ], + "ip": [ + "81.2.69.192" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields", + "forwarded", + "bloxone_ddi-dhcp_lease" + ] +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| bloxone_ddi.dhcp_lease.address | The IP address of the DHCP lease in the format "a.b.c.d". This address will be marked as leased in IPAM while the lease exists. | ip | +| bloxone_ddi.dhcp_lease.client_id | The client ID of the DHCP lease. It might be empty. | keyword | +| bloxone_ddi.dhcp_lease.ends | The time when the DHCP lease will expire. | date | +| bloxone_ddi.dhcp_lease.fingerprint.processed | Indicates if the DHCP lease has been fingerprinted. | keyword | +| bloxone_ddi.dhcp_lease.fingerprint.value | The DHCP fingerprint of the lease. | keyword | +| bloxone_ddi.dhcp_lease.ha_group | The resource identifier. | keyword | +| bloxone_ddi.dhcp_lease.hardware | The hardware address of the DHCP lease. This specifies the MAC address of the network interface on which the lease will be used. It consists of six groups of two hex digits in lower-case separated by colons. For example, "aa:bb:cc:dd:ee:ff". | keyword | +| bloxone_ddi.dhcp_lease.host | The resource identifier. | keyword | +| bloxone_ddi.dhcp_lease.hostname | The client hostname of the DHCP lease. This specifies the host name that the DHCP client sends to the DHCP server using DHCP option 12. It is a fully qualified domain name, consisting of a series of labels separated by dots. For example, "www.infoblox.com". It might be empty. | keyword | +| bloxone_ddi.dhcp_lease.iaid | Identity Association Identifier (IAID) of the lease. Applicable only for DHCPv6. | long | +| bloxone_ddi.dhcp_lease.last_updated | The time when the DHCP lease was last updated. | date | +| bloxone_ddi.dhcp_lease.options | The DHCP options of the lease in JSON format. | flattened | +| bloxone_ddi.dhcp_lease.preferred_lifetime | The preferred time when the DHCP lease should expire. Applicable only for DHCPv6. | date | +| bloxone_ddi.dhcp_lease.protocol | Lease protocol type. | keyword | +| bloxone_ddi.dhcp_lease.space | The resource identifier. | keyword | +| bloxone_ddi.dhcp_lease.starts | The time when the DHCP lease was issued. | date | +| bloxone_ddi.dhcp_lease.state | The state of the DHCP lease. | keyword | +| bloxone_ddi.dhcp_lease.type | Lease type. | keyword | +| client.user.id | Unique identifier of the user. | 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.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | 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 | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.created | event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used. | date | +| event.dataset | Event dataset. | constant_keyword | +| event.end | event.end contains the date when the event ended or when the activity was last observed. | date | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module. | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.start | event.start contains the date when the event started or when the activity was first observed. | date | +| event.type | This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types. | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Input type | keyword | +| log.offset | Log offset | long | +| network.type | In the OSI Model this would be the Network Layer. ipv4, ipv6, ipsec, pim, etc The field value must be normalized to lowercase for querying. | keyword | +| related.hosts | All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases. | keyword | +| related.ip | All of the IPs seen on your event. | ip | +| tags | List of keywords used to tag each event. | keyword | + + +### dns_config + +This is the `dns_config` dataset. + +#### Example + +An example event for `dns_config` looks as following: + +```json +{ + "@timestamp": "2022-07-15T06:55:25.978Z", + "agent": { + "ephemeral_id": "3e3b210f-9e4a-4d82-840b-7a17afa48536", + "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.2.0" + }, + "bloxone_ddi": { + "dns_config": { + "add_edns": { + "option_in": { + "outgoing_query": true + } + }, + "comment": "DNS Config Comment", + "created_at": "2022-07-15T06:55:25.978Z", + "custom_root_ns": [ + { + "address": "81.2.69.192", + "fqdn": "custom fqdn", + "protocol": { + "fqdn": "custom protocol fqdn" + } + } + ], + "custom_root_ns_enabled": true, + "disabled": true, + "dnssec": { + "enable_validation": true, + "enabled": true, + "root_keys": [ + { + "algorithm": 30, + "protocol": { + "zone": "Dnssec root protocol zone" + }, + "public": "Dnssec root Public Key", + "sep": true, + "zone": "Dnssec root Zone" + } + ], + "trust_anchors": [ + { + "algorithm": 10, + "protocol": { + "zone": "Dnssec trust protocol zone" + }, + "public_key": "Dnssec trust Public Key", + "sep": true, + "zone": "Dnssec trust zone" + } + ], + "validate_expiry": true + }, + "ecs": { + "enabled": true, + "forwarding": true, + "prefix_v4": 22, + "prefix_v6": 33, + "zones": [ + { + "access": "ecs zones access", + "fqdn": "ecs zones fqdn", + "protocol": { + "fqdn": "ecs zones protocol fqdn" + } + } + ] + }, + "edns": { + "udp": { + "size": 568 + } + }, + "forwarders": [ + { + "address": "81.2.69.192", + "fqdn": "forwarders fqdn", + "protocol": { + "fqdn": "forwarders protocol fqdn" + } + } + ], + "forwarders_only": true, + "gss_tsig_enabled": true, + "id": "adv12rgfh", + "inheritance": { + "sources": { + "add_edns": { + "option_in": { + "outgoing_query": { + "action": "inherit", + "display": { + "name": "displaynameadd_edns_option_in_outgoing_query" + }, + "source": "sourceadd_edns_option_in_outgoing_query", + "value": true + } + } + }, + "custom_root_ns": { + "block": { + "action": "override", + "display": { + "name": "displaynamecustom_root_ns_block" + }, + "source": "sourcecustom_root_ns_block", + "value": [ + { + "address": "67.43.156.0", + "fqdn": "fqdn_custom_root_ns", + "protocol": { + "fqdn": "protocolfqdn_custom_root_ns" + } + } + ], + "value_enabled": true + } + }, + "dnssec": { + "validation": { + "block": { + "action": "inherit", + "display": { + "name": "displaynamednssec_validation_block" + }, + "source": "sourcednssec_validation_block", + "value": { + "enable": true, + "enabled": true, + "trust_anchors": [ + { + "algorithm": 8, + "protocol": { + "zone": "protocolzonednssec_trust_anchors" + }, + "public_key": "publickeydnssec_trust_anchors", + "sep": false, + "zone": "is3zone" + } + ], + "validate_expiry": true + } + } + } + }, + "ecs": { + "block": { + "action": "inherit", + "display": { + "name": "displaynameecs_block" + }, + "source": "sourceecs_block", + "value": { + "enabled": false, + "forwarding": true, + "prefix_v4": 4, + "prefix_v6": 10, + "zones": [ + { + "access": "inherit", + "fqdn": "fqdnecs_block", + "protocol": { + "fqdn": "protocol_fqdnecs_block" + } + } + ] + } + } + }, + "edns": { + "udp": { + "size": { + "action": "inherit", + "display": { + "name": "displaynameedns_udp_size" + }, + "source": "sourceedns_udp_size", + "value": 55 + } + } + }, + "forwarders": { + "block": { + "action": "inherit", + "display": { + "name": "displaynameforwarders_block" + }, + "source": "sourceforwarders_block", + "value": [ + { + "address": "89.160.20.128", + "fqdn": "forwarders_fqdn", + "protocol": { + "fqdn": "forwarders_protocolfqdn" + } + } + ], + "value_only": true + } + }, + "gss_tsig_enabled": { + "action": "inherit", + "display": { + "name": "displaynamegss_tsig_enabled" + }, + "source": "sourcegss_tsig_enabled", + "value": true + }, + "lame_ttl": { + "action": "inherit", + "display": { + "name": "displaynamelame_ttl" + }, + "source": "sourcelame_ttl", + "value": 45 + }, + "match_recursive_only": { + "action": "inherit", + "display": { + "name": "displaynamematch_recursive_only" + }, + "source": "sourcematch_recursive_only", + "value": false + }, + "max_cache_ttl": { + "action": "inherit", + "display": { + "name": "displaynamemax_cache_ttl" + }, + "source": "sourcemax_cache_ttl", + "value": 13 + }, + "max_negative_ttl": { + "action": "inherit", + "display": { + "name": "displaynamemax_negative_ttl" + }, + "source": "sourcemax_negative_ttl", + "value": 12 + }, + "max_udp_size": { + "action": "inherit", + "display": { + "name": "displaynamemax_udp_size" + }, + "source": "sourcemax_udp_size", + "value": 11 + }, + "minimal_responses": { + "action": "inherit", + "display": { + "name": "displaynameminimal_responses" + }, + "source": "sourceminimal_responses", + "value": true + }, + "notify": { + "action": "inherit", + "display": { + "name": "displayname_notify" + }, + "source": "source_notify", + "value": true + }, + "query_acl": { + "action": "override", + "display": { + "name": "displaynamequery_acl" + }, + "source": "sourcequery_acl", + "value": [ + { + "access": "allow", + "acl": "aclvalue_query_acl", + "address": "89.160.20.128", + "element": "elementvaluequery_acl", + "tsig_key": { + "algorithm": "hmac_sha256", + "comment": "commentquery_acl", + "name": "namequery_acl", + "protocol": { + "name": "protocolname_query_acl" + }, + "secret": "secretquery_acl", + "value": "keyquery_acl" + } + } + ] + }, + "recursion_acl": { + "action": "override", + "display": { + "name": "displaynamerecursion_acl" + }, + "source": "sourcerecursion_acl", + "value": [ + { + "access": "deny", + "acl": "aclrecursion_acl", + "address": "89.160.20.128", + "element": "elementrecursion_acl", + "tsig_key": { + "algorithm": "hmac_sha384", + "comment": "commentrecursion_acl", + "name": "namerecursion_acl", + "protocol": { + "name": "protocolnamerecursion_acl" + }, + "secret": "secretrecursion_acl", + "value": "keyrecursion_acl" + } + } + ] + }, + "recursion_enabled": { + "action": "inherit", + "display": { + "name": "displaynamerecursion_enabled" + }, + "source": "sourcerecursion_enabled", + "value": true + }, + "synthesize": { + "address_records_from_https": { + "action": "inherit", + "display": { + "name": "displaynamesynthesize_address_records_from_https" + }, + "name": "sourcesynthesize_address_records_from_https", + "value": true + } + }, + "transfer_acl": { + "action": "inherit", + "display": { + "name": "displaynametransfer_acl" + }, + "source": "sourcetransfer_acl", + "value": [ + { + "access": "allow", + "acl": "acltransfer_acl", + "address": "216.160.83.56", + "element": "elementtransfer_acl", + "tsig_key": { + "algorithm": "hmac_sha224", + "comment": "commenttransfer_acl", + "name": "nametransfer_acl", + "protocol": { + "name": "protocolnametransfer_acl" + }, + "secret": "secrettransfer_acl", + "value": "keytransfer_acl" + } + } + ] + }, + "update_acl": { + "action": "override", + "display": { + "name": "displaynameupdate_acl" + }, + "source": "sourceupdate_acl", + "value": [ + { + "access": "allow", + "acl": "aclupdate_acl", + "address": "216.160.83.56", + "element": "elementupdate_acl", + "tsig_key": { + "algorithm": "hmac_sha384", + "comment": "commentupdate_acl", + "name": "nameupdate_acl", + "protocol": { + "name": "protocolnameupdate_acl" + }, + "secret": "secretupdate_acl", + "value": "keyupdate_acl" + } + } + ] + }, + "use_forwarders_for_subzones": { + "action": "override", + "display": { + "name": "displaynameuse_forwarders_for_subzones" + }, + "source": "sourceuse_forwarders_for_subzones", + "value": false + }, + "zone_authority": { + "default_ttl": { + "action": "override", + "display": { + "name": "displaynamezone_authority" + }, + "source": "sourcezone_authority", + "value": 50 + }, + "expire": { + "action": "inherit", + "display": { + "name": "displaynameexpire" + }, + "source": "sourceexpire", + "value": 70 + }, + "mname_block": { + "action": "inherit", + "display": { + "name": "displaynamemname_block" + }, + "source": "sourcemname_block", + "value": { + "isdefault": true, + "protocol": { + "mname": "protocolmnamemname_block" + } + } + }, + "mname_block_value": "mnamevaluemname_block", + "negative_ttl": { + "action": "inherit", + "display": { + "name": "displaynamenegative_ttl" + }, + "source": "sourcenegative_ttl", + "value": 90 + }, + "protocol_rname": { + "action": "inherit", + "display": { + "name": "displaynameprotocol_rname" + }, + "source": "sourceprotocol_rname", + "value": "valueprotocol_rname" + }, + "refresh": { + "action": "inherit", + "display": { + "name": "displayname_refresh" + }, + "source": "source_refresh", + "value": 40 + }, + "retry": { + "action": "inherit", + "display": { + "name": "displayname_retry" + }, + "source": "source_retry", + "value": 570 + }, + "rname": { + "action": "inherit", + "display": { + "name": "displayname_rname" + }, + "source": "source_rname", + "value": "value_rname" + } + } + } + }, + "ip_spaces": [ + "testipspaces" + ], + "lame_ttl": 350, + "match_clients_acl": [ + { + "access": "deny", + "address": "81.2.69.192", + "element": "elementmatch_clients_acl", + "tsig_key": { + "algorithm": "hmac_sha512", + "comment": "commentmatch_clients_acl", + "name": "namematch_clients_acl", + "protocol": { + "name": "protocolnamematch_clients_acl" + }, + "secret": "secretmatch_clients_acl", + "value": "keymatch_clients_acl" + }, + "value": "aclmatch_clients_acl" + } + ], + "match_destinations_acl": [ + { + "access": "allow", + "address": "81.2.69.192", + "element": "elementmatch_destinations_acl", + "tsig_key": { + "algorithm": "hmac_sha384", + "comment": "commentmatch_destinations_acl", + "name": "namematch_destinations_acl", + "protocol": { + "name": "protocolnamematch_destinations_acl" + }, + "secret": "secretmatch_destinations_acl", + "value": "keymatch_destinations_acl" + }, + "value": "aclmatch_destinations_acl" + } + ], + "match_recursive_only": true, + "max_cache_ttl": 90, + "max_negative_ttl": 500, + "max_udp_size": 890, + "minimal_responses": true, + "name": "string", + "notify": true, + "query_acl": [ + { + "access": "accessquery_acl", + "address": "81.2.69.192", + "element": "elementquery_acl", + "tsig_key": { + "algorithm": "hmac_sha224", + "comment": "commentquery_acl", + "name": "namequery_acl", + "protocol": { + "name": "protocolnamequery_acl" + }, + "secret": "secretquery_acl", + "value": "keyquery_acl" + }, + "value": "aclquery_acl" + } + ], + "recursion_acl": [ + { + "access": "allow", + "address": "81.2.69.192", + "element": "elementrecursion_acl", + "tsig_key": { + "algorithm": "hmac_sha1", + "comment": "commentrecursion_acl", + "name": "namerecursion_acl", + "protocol": { + "name": "protocolnamerecursion_acl" + }, + "secret": "secretrecursion_acl", + "value": "keyrecursion_acl" + }, + "value": "aclrecursion_acl" + } + ], + "recursion_enabled": true, + "synthesize": { + "address_records_from_https": false + }, + "tags": { + "message": "Hello" + }, + "transfer_acl": [ + { + "access": "allow", + "address": "216.160.83.56", + "element": "elementtransfer_acl", + "tsig_key": { + "algorithm": "hmac_sha224", + "comment": "commenttransfer_acl", + "name": "nametransfer_acl", + "protocol": { + "name": "protocolnametransfer_acl" + }, + "secret": "secrettransfer_acl", + "value": "keytransfer_acl" + }, + "value": "acltransfer_acl" + } + ], + "update_acl": [ + { + "access": "allow", + "address": "216.160.83.56", + "element": "elementupdate_acl", + "tsig_key": { + "algorithm": "hmac_sha1", + "comment": "commentupdate_acl", + "name": "nameupdate_acl", + "protocol": { + "name": "protocolnameupdate_acl" + }, + "secret": "secretupdate_acl", + "value": "keyupdate_acl" + }, + "value": "aclupdate_acl" + } + ], + "updated_at": "2022-07-15T06:55:25.978Z", + "use_forwarders_for_subzones": true, + "zone_authority": { + "default_ttl": 20, + "expire": 10, + "mname": "mnamezone_authority", + "negative_ttl": 30, + "protocol": { + "mname": "protocolmnamezone_authority", + "rname": "protocolrnamezone_authority" + }, + "refresh": 50, + "retry": 100, + "rname": "string", + "use_default_mname": true + } + } + }, + "data_stream": { + "dataset": "bloxone_ddi.dns_config", + "namespace": "ep", + "type": "logs" + }, + "dns": { + "answers": { + "ttl": 350 + } + }, + "ecs": { + "version": "8.4.0" + }, + "elastic_agent": { + "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "verified", + "category": [ + "network" + ], + "created": "2022-07-15T06:55:25.978Z", + "dataset": "bloxone_ddi.dns_config", + "id": "adv12rgfh", + "ingested": "2022-08-31T07:07:32Z", + "kind": "event", + "original": "{\"add_edns_option_in_outgoing_query\":true,\"comment\":\"DNS Config Comment\",\"created_at\":\"2022-07-15T06:55:25.978Z\",\"custom_root_ns\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"custom fqdn\",\"protocol_fqdn\":\"custom protocol fqdn\"}],\"custom_root_ns_enabled\":true,\"disabled\":true,\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_root_keys\":[{\"algorithm\":30,\"protocol_zone\":\"Dnssec root protocol zone\",\"public_key\":\"Dnssec root Public Key\",\"sep\":true,\"zone\":\"Dnssec root Zone\"}],\"dnssec_trust_anchors\":[{\"algorithm\":10,\"protocol_zone\":\"Dnssec trust protocol zone\",\"public_key\":\"Dnssec trust Public Key\",\"sep\":true,\"zone\":\"Dnssec trust zone\"}],\"dnssec_validate_expiry\":true,\"ecs_enabled\":true,\"ecs_forwarding\":true,\"ecs_prefix_v4\":22,\"ecs_prefix_v6\":33,\"ecs_zones\":[{\"access\":\"ecs zones access\",\"fqdn\":\"ecs zones fqdn\",\"protocol_fqdn\":\"ecs zones protocol fqdn\"}],\"edns_udp_size\":568,\"forwarders\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"forwarders fqdn\",\"protocol_fqdn\":\"forwarders protocol fqdn\"}],\"forwarders_only\":true,\"gss_tsig_enabled\":true,\"id\":\"adv12rgfh\",\"inheritance_sources\":{\"add_edns_option_in_outgoing_query\":{\"action\":\"inherit\",\"display_name\":\"displaynameadd_edns_option_in_outgoing_query\",\"source\":\"sourceadd_edns_option_in_outgoing_query\",\"value\":true},\"custom_root_ns_block\":{\"action\":\"override\",\"display_name\":\"displaynamecustom_root_ns_block\",\"source\":\"sourcecustom_root_ns_block\",\"value\":{\"custom_root_ns\":[{\"address\":\"67.43.156.0\",\"fqdn\":\"fqdn_custom_root_ns\",\"protocol_fqdn\":\"protocolfqdn_custom_root_ns\"}],\"custom_root_ns_enabled\":true}},\"dnssec_validation_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamednssec_validation_block\",\"source\":\"sourcednssec_validation_block\",\"value\":{\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_trust_anchors\":[{\"algorithm\":8,\"protocol_zone\":\"protocolzonednssec_trust_anchors\",\"public_key\":\"publickeydnssec_trust_anchors\",\"sep\":false,\"zone\":\"is3zone\"}],\"dnssec_validate_expiry\":true}},\"ecs_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameecs_block\",\"source\":\"sourceecs_block\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":10,\"ecs_zones\":[{\"access\":\"inherit\",\"fqdn\":\"fqdnecs_block\",\"protocol_fqdn\":\"protocol_fqdnecs_block\"}]}},\"ecs_zones\":{\"action\":\"override\",\"display_name\":\"displaynameecs_zones\",\"source\":\"sourceecs_zones\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":12,\"ecs_zones\":[{\"access\":\"access_ecs_zones\",\"fqdn\":\"fqdn_ecs_zones\",\"protocol_fqdn\":\"protocolfqdn_ecs_zones\"}]}},\"edns_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynameedns_udp_size\",\"source\":\"sourceedns_udp_size\",\"value\":55},\"forwarders_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameforwarders_block\",\"source\":\"sourceforwarders_block\",\"value\":{\"forwarders\":[{\"address\":\"89.160.20.128\",\"fqdn\":\"forwarders_fqdn\",\"protocol_fqdn\":\"forwarders_protocolfqdn\"}],\"forwarders_only\":true}},\"gss_tsig_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamegss_tsig_enabled\",\"source\":\"sourcegss_tsig_enabled\",\"value\":true},\"lame_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamelame_ttl\",\"source\":\"sourcelame_ttl\",\"value\":45},\"match_recursive_only\":{\"action\":\"inherit\",\"display_name\":\"displaynamematch_recursive_only\",\"source\":\"sourcematch_recursive_only\",\"value\":false},\"max_cache_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_cache_ttl\",\"source\":\"sourcemax_cache_ttl\",\"value\":13},\"max_negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_negative_ttl\",\"source\":\"sourcemax_negative_ttl\",\"value\":12},\"max_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_udp_size\",\"source\":\"sourcemax_udp_size\",\"value\":11},\"minimal_responses\":{\"action\":\"inherit\",\"display_name\":\"displaynameminimal_responses\",\"source\":\"sourceminimal_responses\",\"value\":true},\"notify\":{\"action\":\"inherit\",\"display_name\":\"displayname_notify\",\"source\":\"source_notify\",\"value\":true},\"query_acl\":{\"action\":\"override\",\"display_name\":\"displaynamequery_acl\",\"source\":\"sourcequery_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclvalue_query_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementvaluequery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha256\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolname_query_acl\",\"secret\":\"secretquery_acl\"}}]},\"recursion_acl\":{\"action\":\"override\",\"display_name\":\"displaynamerecursion_acl\",\"source\":\"sourcerecursion_acl\",\"value\":[{\"access\":\"deny\",\"acl\":\"aclrecursion_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}]},\"recursion_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamerecursion_enabled\",\"source\":\"sourcerecursion_enabled\",\"value\":true},\"synthesize_address_records_from_https\":{\"action\":\"inherit\",\"display_name\":\"displaynamesynthesize_address_records_from_https\",\"source\":\"sourcesynthesize_address_records_from_https\",\"value\":true},\"transfer_acl\":{\"action\":\"inherit\",\"display_name\":\"displaynametransfer_acl\",\"source\":\"sourcetransfer_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}]},\"update_acl\":{\"action\":\"override\",\"display_name\":\"displaynameupdate_acl\",\"source\":\"sourceupdate_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}]},\"use_forwarders_for_subzones\":{\"action\":\"override\",\"display_name\":\"displaynameuse_forwarders_for_subzones\",\"source\":\"sourceuse_forwarders_for_subzones\",\"value\":false},\"zone_authority\":{\"default_ttl\":{\"action\":\"override\",\"display_name\":\"displaynamezone_authority\",\"source\":\"sourcezone_authority\",\"value\":50},\"expire\":{\"action\":\"inherit\",\"display_name\":\"displaynameexpire\",\"source\":\"sourceexpire\",\"value\":70},\"mname_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamemname_block\",\"source\":\"sourcemname_block\",\"value\":{\"mname\":\"mnamevaluemname_block\",\"protocol_mname\":\"protocolmnamemname_block\",\"use_default_mname\":true}},\"negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamenegative_ttl\",\"source\":\"sourcenegative_ttl\",\"value\":90},\"protocol_rname\":{\"action\":\"inherit\",\"display_name\":\"displaynameprotocol_rname\",\"source\":\"sourceprotocol_rname\",\"value\":\"valueprotocol_rname\"},\"refresh\":{\"action\":\"inherit\",\"display_name\":\"displayname_refresh\",\"source\":\"source_refresh\",\"value\":40},\"retry\":{\"action\":\"inherit\",\"display_name\":\"displayname_retry\",\"source\":\"source_retry\",\"value\":570},\"rname\":{\"action\":\"inherit\",\"display_name\":\"displayname_rname\",\"source\":\"source_rname\",\"value\":\"value_rname\"}}},\"ip_spaces\":[\"testipspaces\"],\"lame_ttl\":350,\"match_clients_acl\":[{\"access\":\"deny\",\"acl\":\"aclmatch_clients_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_clients_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha512\",\"comment\":\"commentmatch_clients_acl\",\"key\":\"keymatch_clients_acl\",\"name\":\"namematch_clients_acl\",\"protocol_name\":\"protocolnamematch_clients_acl\",\"secret\":\"secretmatch_clients_acl\"}}],\"match_destinations_acl\":[{\"access\":\"allow\",\"acl\":\"aclmatch_destinations_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_destinations_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentmatch_destinations_acl\",\"key\":\"keymatch_destinations_acl\",\"name\":\"namematch_destinations_acl\",\"protocol_name\":\"protocolnamematch_destinations_acl\",\"secret\":\"secretmatch_destinations_acl\"}}],\"match_recursive_only\":true,\"max_cache_ttl\":90,\"max_negative_ttl\":500,\"max_udp_size\":890,\"minimal_responses\":true,\"name\":\"string\",\"notify\":true,\"query_acl\":[{\"access\":\"accessquery_acl\",\"acl\":\"aclquery_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementquery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolnamequery_acl\",\"secret\":\"secretquery_acl\"}}],\"recursion_acl\":[{\"access\":\"allow\",\"acl\":\"aclrecursion_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}],\"recursion_enabled\":true,\"synthesize_address_records_from_https\":false,\"tags\":{\"message\":\"Hello\"},\"transfer_acl\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}],\"update_acl\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}],\"updated_at\":\"2022-07-15T06:55:25.978Z\",\"use_forwarders_for_subzones\":true,\"zone_authority\":{\"default_ttl\":20,\"expire\":10,\"mname\":\"mnamezone_authority\",\"negative_ttl\":30,\"protocol_mname\":\"protocolmnamezone_authority\",\"protocol_rname\":\"protocolrnamezone_authority\",\"refresh\":50,\"retry\":100,\"rname\":\"string\",\"use_default_mname\":true}}", + "type": [ + "protocol" + ] + }, + "input": { + "type": "httpjson" + }, + "related": { + "hash": [ + "hmac_sha256", + "hmac_sha384", + "hmac_sha224", + "hmac_sha512", + "hmac_sha1" + ], + "ip": [ + "81.2.69.192", + "67.43.156.0", + "89.160.20.128", + "216.160.83.56" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields", + "forwarded", + "bloxone_ddi-dns_config" + ] +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| bloxone_ddi.dns_config.add_edns.option_in.outgoing_query | add_edns_option_in_outgoing_query adds client IP, MAC address and view name into outgoing recursive query. | boolean | +| bloxone_ddi.dns_config.comment | Optional. Comment for view. | keyword | +| bloxone_ddi.dns_config.created_at | The timestamp when the object has been created. | date | +| bloxone_ddi.dns_config.custom_root_ns.address | List of custom root nameservers. The order does not matter.IPv4 address. | ip | +| bloxone_ddi.dns_config.custom_root_ns.fqdn | List of custom root nameservers. The order does not matter.FQDN. | keyword | +| bloxone_ddi.dns_config.custom_root_ns.protocol.fqdn | List of custom root nameservers. The order does not matter.FQDN in punycode. | keyword | +| bloxone_ddi.dns_config.custom_root_ns_enabled | Optional. true to use custom root nameservers instead of the default ones. | boolean | +| bloxone_ddi.dns_config.disabled | Optional. true to disable object. A disabled object is effectively non-existent when generating configuration. | boolean | +| bloxone_ddi.dns_config.dnssec.enable_validation | Optional. true to perform DNSSEC validation. | boolean | +| bloxone_ddi.dns_config.dnssec.enabled | Optional. Master toggle for all DNSSEC processing. | boolean | +| bloxone_ddi.dns_config.dnssec.root_keys.algorithm | Key algorithm. Algorithm values are as per standards. | long | +| bloxone_ddi.dns_config.dnssec.root_keys.protocol.zone | Zone FQDN in punycode. | keyword | +| bloxone_ddi.dns_config.dnssec.root_keys.public | DNSSEC key data. Non-empty, valid base64 string. | keyword | +| bloxone_ddi.dns_config.dnssec.root_keys.sep | Optional. Secure Entry Point flag. | boolean | +| bloxone_ddi.dns_config.dnssec.root_keys.zone | Zone FQDN. | keyword | +| bloxone_ddi.dns_config.dnssec.trust_anchors.algorithm | Key algorithm. Algorithm values are as per standards. | long | +| bloxone_ddi.dns_config.dnssec.trust_anchors.protocol.zone | Zone FQDN in punycode. | keyword | +| bloxone_ddi.dns_config.dnssec.trust_anchors.public_key | DNSSEC key data. Non-empty, valid base64 string. | keyword | +| bloxone_ddi.dns_config.dnssec.trust_anchors.sep | Optional. Secure Entry Point flag. | boolean | +| bloxone_ddi.dns_config.dnssec.trust_anchors.zone | Zone FQDN. | keyword | +| bloxone_ddi.dns_config.dnssec.validate_expiry | Optional. true to reject expired DNSSEC keys. | boolean | +| bloxone_ddi.dns_config.ecs.enabled | Optional. true to enable EDNS client subnet for recursive queries. | boolean | +| bloxone_ddi.dns_config.ecs.forwarding | Optional. true to enable ECS options in outbound queries. This functionality has additional overhead so it is disabled by default. | boolean | +| bloxone_ddi.dns_config.ecs.prefix_v4 | Optional. Maximum scope length for v4 ECS. | long | +| bloxone_ddi.dns_config.ecs.prefix_v6 | Optional. Maximum scope length for v6 ECS. | long | +| bloxone_ddi.dns_config.ecs.zones.access | Access control for zone. | keyword | +| bloxone_ddi.dns_config.ecs.zones.fqdn | Zone FQDN. | keyword | +| bloxone_ddi.dns_config.ecs.zones.protocol.fqdn | Zone FQDN in punycode. | keyword | +| bloxone_ddi.dns_config.edns.udp.size | Optional. edns_udp_size represents the edns UDP size. | long | +| bloxone_ddi.dns_config.forwarders.address | Server IP address. | ip | +| bloxone_ddi.dns_config.forwarders.fqdn | Server FQDN. | keyword | +| bloxone_ddi.dns_config.forwarders.protocol.fqdn | Server FQDN in punycode. | keyword | +| bloxone_ddi.dns_config.forwarders_only | Optional. true to only forward. | boolean | +| bloxone_ddi.dns_config.gss_tsig_enabled | gss_tsig_enabled enables/disables GSS-TSIG signed dynamic updates. | boolean | +| bloxone_ddi.dns_config.id | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.value | The inherited value. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.action | Defaults to inherit. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.display.name | Human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value.address | IPv4 address. | ip | +| bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value.fqdn | Optional. Field config for custom_root_ns_enabled field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value.protocol.fqdn | FQDN. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value_enabled | FQDN in punycode. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.action | Defaults to inherit. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.display.name | Human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.enable | Optional. Field config for dnssec_enable_validation field. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.enabled | Optional. Field config for dnssec_enabled field. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors.algorithm | Key algorithm. Algorithm values are as per standards. | long | +| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors.protocol.zone | Zone FQDN in punycode. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors.public_key | DNSSEC key data. Non-empty, valid base64 string. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors.sep | Optional. Secure Entry Point flag. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors.zone | Zone FQDN. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.validate_expiry | Optional. Field config for dnssec_validate_expiry field. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.ecs.block.action | Defaults to inherit. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.ecs.block.display.name | Human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.ecs.block.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.enabled | Optional. Field config for ecs_enabled field. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.forwarding | Optional. Field config for ecs_forwarding field. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.prefix_v4 | Optional. Field config for ecs_prefix_v4 field. | long | +| bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.prefix_v6 | Optional. Field config for ecs_prefix_v6 field. | long | +| bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.zones.access | Access control for zone. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.zones.fqdn | Zone FQDN. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.zones.protocol.fqdn | Zone FQDN in punycode. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.value | The inherited value. | long | +| bloxone_ddi.dns_config.inheritance.sources.forwarders.block.action | Defaults to inherit. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.forwarders.block.display.name | Human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.forwarders.block.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value.address | Server IP address. | ip | +| bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value.fqdn | Server FQDN. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value.protocol.fqdn | Server FQDN in punycode. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value_only | Optional. Field config for forwarders_only field. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.value | The inherited value. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.lame_ttl.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.lame_ttl.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.lame_ttl.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.lame_ttl.value | The inherited value. | long | +| bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.value | The inherited value. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.value | The inherited value. | long | +| bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.value | The inherited value. | long | +| bloxone_ddi.dns_config.inheritance.sources.max_udp_size.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.max_udp_size.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.max_udp_size.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.max_udp_size.value | The inherited value. | long | +| bloxone_ddi.dns_config.inheritance.sources.minimal_responses.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.minimal_responses.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.minimal_responses.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.minimal_responses.value | The inherited value. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.notify.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.notify.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.notify.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.notify.value | The inherited value. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.query_acl.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.query_acl.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.query_acl.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.access | Access permission for element. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.acl | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.address | Optional. Data for ip element. | ip | +| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.element | Type of element. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.algorithm | TSIG key algorithm. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.comment | Comment for TSIG key. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.name | TSIG key name, FQDN. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.secret | TSIG key secret, base64 string. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.value | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.access | Access permission for element. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.acl | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.address | Optional. Data for ip element. | ip | +| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.element | Type of element. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.algorithm | TSIG key algorithm. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.comment | Comment for TSIG key. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.name | TSIG key name, FQDN. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.secret | TSIG key secret, base64 string. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.value | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.value | The inherited value. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.name | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.value | The inherited value. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.access | Access permission for element. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.acl | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.address | Optional. Data for ip element. | ip | +| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.element | Type of element. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.algorithm | TSIG key algorithm. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.comment | Comment for TSIG key. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.name | TSIG key name, FQDN. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.secret | TSIG key secret, base64 string. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.value | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.update_acl.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.update_acl.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.update_acl.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.access | Access permission for element. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.acl | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.address | Optional. Data for ip element. | ip | +| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.element | Type of element. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.algorithm | TSIG key algorithm. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.comment | Comment for TSIG key. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.name | TSIG key name, FQDN. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.secret | TSIG key secret, base64 string. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.value | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.value | The inherited value. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.value | The inherited value. | long | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.value | The inherited value. | long | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.action | Defaults to inherit. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.display.name | Human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.value.isdefault | Optional. Use default value for master name server. Defaults to true. | boolean | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.value.protocol.mname | Optional. Master name server in punycode. Defaults to empty. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block_value | Defaults to empty. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.value | The inherited value. | long | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.value | The inherited value. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.value | The inherited value. | long | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.value | The inherited value. | long | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.source | The resource identifier. | keyword | +| bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.value | The inherited value. | keyword | +| bloxone_ddi.dns_config.ip_spaces | The resource identifier. | keyword | +| bloxone_ddi.dns_config.lame_ttl | Optional. Unused in the current on-prem DNS server implementation. | long | +| bloxone_ddi.dns_config.match_clients_acl.access | Access permission for element. | keyword | +| bloxone_ddi.dns_config.match_clients_acl.address | Optional. Data for ip element. | ip | +| bloxone_ddi.dns_config.match_clients_acl.element | Type of element. | keyword | +| bloxone_ddi.dns_config.match_clients_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | +| bloxone_ddi.dns_config.match_clients_acl.tsig_key.comment | Comment for TSIG key. | keyword | +| bloxone_ddi.dns_config.match_clients_acl.tsig_key.name | TSIG key name, FQDN. | keyword | +| bloxone_ddi.dns_config.match_clients_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| bloxone_ddi.dns_config.match_clients_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | +| bloxone_ddi.dns_config.match_clients_acl.tsig_key.value | The resource identifier. | keyword | +| bloxone_ddi.dns_config.match_clients_acl.value | The resource identifier. | keyword | +| bloxone_ddi.dns_config.match_destinations_acl.access | Access permission for element. | keyword | +| bloxone_ddi.dns_config.match_destinations_acl.address | Optional. Data for ip element. | ip | +| bloxone_ddi.dns_config.match_destinations_acl.element | Type of element. | keyword | +| bloxone_ddi.dns_config.match_destinations_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | +| bloxone_ddi.dns_config.match_destinations_acl.tsig_key.comment | Comment for TSIG key. | keyword | +| bloxone_ddi.dns_config.match_destinations_acl.tsig_key.name | The resource identifier. | keyword | +| bloxone_ddi.dns_config.match_destinations_acl.tsig_key.protocol.name | TSIG key name, FQDN. | keyword | +| bloxone_ddi.dns_config.match_destinations_acl.tsig_key.secret | TSIG key name in punycode. | keyword | +| bloxone_ddi.dns_config.match_destinations_acl.tsig_key.value | TSIG key secret, base64 string. | keyword | +| bloxone_ddi.dns_config.match_destinations_acl.value | The resource identifier. | keyword | +| bloxone_ddi.dns_config.match_recursive_only | Optional. If true only recursive queries from matching clients access the view. | boolean | +| bloxone_ddi.dns_config.max_cache_ttl | Optional. Seconds to cache positive responses. | long | +| bloxone_ddi.dns_config.max_negative_ttl | Optional. Seconds to cache negative responses. | long | +| bloxone_ddi.dns_config.max_udp_size | Optional. max_udp_size represents maximum UDP payload size. | long | +| bloxone_ddi.dns_config.minimal_responses | Optional. When enabled, the DNS server will only add records to the authority and additional data sections when they are required. | boolean | +| bloxone_ddi.dns_config.name | Name of view. | keyword | +| bloxone_ddi.dns_config.notify | notify all external secondary DNS servers. | boolean | +| bloxone_ddi.dns_config.query_acl.access | Access permission for element. | keyword | +| bloxone_ddi.dns_config.query_acl.address | Optional. Data for ip element. | ip | +| bloxone_ddi.dns_config.query_acl.element | Type of element. | keyword | +| bloxone_ddi.dns_config.query_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | +| bloxone_ddi.dns_config.query_acl.tsig_key.comment | Comment for TSIG key. | keyword | +| bloxone_ddi.dns_config.query_acl.tsig_key.name | TSIG key name, FQDN. | keyword | +| bloxone_ddi.dns_config.query_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| bloxone_ddi.dns_config.query_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | +| bloxone_ddi.dns_config.query_acl.tsig_key.value | The resource identifier. | keyword | +| bloxone_ddi.dns_config.query_acl.value | The resource identifier. | keyword | +| bloxone_ddi.dns_config.recursion_acl.access | Access permission for element. | keyword | +| bloxone_ddi.dns_config.recursion_acl.address | Optional. Data for ip element. | ip | +| bloxone_ddi.dns_config.recursion_acl.element | Type of element. | keyword | +| bloxone_ddi.dns_config.recursion_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | +| bloxone_ddi.dns_config.recursion_acl.tsig_key.comment | Comment for TSIG key. | keyword | +| bloxone_ddi.dns_config.recursion_acl.tsig_key.name | The resource identifier. | keyword | +| bloxone_ddi.dns_config.recursion_acl.tsig_key.protocol.name | TSIG key name, FQDN. | keyword | +| bloxone_ddi.dns_config.recursion_acl.tsig_key.secret | TSIG key name in punycode. | keyword | +| bloxone_ddi.dns_config.recursion_acl.tsig_key.value | TSIG key secret, base64 string. | keyword | +| bloxone_ddi.dns_config.recursion_acl.value | The resource identifier. | keyword | +| bloxone_ddi.dns_config.recursion_enabled | Optional. true to allow recursive DNS queries. | boolean | +| bloxone_ddi.dns_config.synthesize.address_records_from_https | synthesize_address_records_from_https enables/disables creation of A/AAAA records from HTTPS RR. | boolean | +| bloxone_ddi.dns_config.tags | Tagging specifics. | flattened | +| bloxone_ddi.dns_config.transfer_acl.access | Access permission for element. | keyword | +| bloxone_ddi.dns_config.transfer_acl.address | Optional. Data for ip element. | ip | +| bloxone_ddi.dns_config.transfer_acl.element | Type of element. | keyword | +| bloxone_ddi.dns_config.transfer_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | +| bloxone_ddi.dns_config.transfer_acl.tsig_key.comment | Comment for TSIG key. | keyword | +| bloxone_ddi.dns_config.transfer_acl.tsig_key.name | TSIG key name, FQDN. | keyword | +| bloxone_ddi.dns_config.transfer_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| bloxone_ddi.dns_config.transfer_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | +| bloxone_ddi.dns_config.transfer_acl.tsig_key.value | The resource identifier. | keyword | +| bloxone_ddi.dns_config.transfer_acl.value | The resource identifier. | keyword | +| bloxone_ddi.dns_config.update_acl.access | Access permission for element. | keyword | +| bloxone_ddi.dns_config.update_acl.address | Optional. Data for ip element. | ip | +| bloxone_ddi.dns_config.update_acl.element | Type of element. | keyword | +| bloxone_ddi.dns_config.update_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | +| bloxone_ddi.dns_config.update_acl.tsig_key.comment | Comment for TSIG key. | keyword | +| bloxone_ddi.dns_config.update_acl.tsig_key.name | TSIG key name, FQDN. | keyword | +| bloxone_ddi.dns_config.update_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| bloxone_ddi.dns_config.update_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | +| bloxone_ddi.dns_config.update_acl.tsig_key.value | The resource identifier. | keyword | +| bloxone_ddi.dns_config.update_acl.value | The resource identifier. | keyword | +| bloxone_ddi.dns_config.updated_at | The timestamp when the object has been updated. Equals to created_at if not updated after creation. | date | +| bloxone_ddi.dns_config.use_forwarders_for_subzones | Optional. Use default forwarders to resolve queries for subzones. | boolean | +| bloxone_ddi.dns_config.zone_authority.default_ttl | Optional. ZoneAuthority default ttl for resource records in zone (value in seconds). | long | +| bloxone_ddi.dns_config.zone_authority.expire | Optional. ZoneAuthority expire time in seconds. Defaults to 2419200. | long | +| bloxone_ddi.dns_config.zone_authority.mname | Optional. ZoneAuthority master name server (partially qualified domain name) Defaults to empty. | keyword | +| bloxone_ddi.dns_config.zone_authority.negative_ttl | Optional. ZoneAuthority negative caching (minimum) ttl in seconds. | long | +| bloxone_ddi.dns_config.zone_authority.protocol.mname | Optional. ZoneAuthority master name server in punycode. Defaults to empty. | keyword | +| bloxone_ddi.dns_config.zone_authority.protocol.rname | Optional. A domain name which specifies the mailbox of the person responsible for this zone. Defaults to empty. | keyword | +| bloxone_ddi.dns_config.zone_authority.refresh | Optional. ZoneAuthority refresh. Defaults to 10800. | long | +| bloxone_ddi.dns_config.zone_authority.retry | Optional. ZoneAuthority retry. Defaults to 3600. | long | +| bloxone_ddi.dns_config.zone_authority.rname | Optional. ZoneAuthority rname. Defaults to empty. | keyword | +| bloxone_ddi.dns_config.zone_authority.use_default_mname | Optional. Use default value for master name server. Defaults to true. | boolean | +| 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.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | 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 | +| dns.answers.ttl | The time interval in seconds that this resource record may be cached before it should be discarded. Zero values mean that the data should not be cached. | long | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.created | event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used. | date | +| event.dataset | Event dataset. | constant_keyword | +| event.id | Unique ID to describe the event. | keyword | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module. | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.type | This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types. | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Input type | keyword | +| log.offset | Log offset | long | +| related.hash | All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). | keyword | +| related.ip | All of the IPs seen on your event. | ip | +| tags | List of keywords used to tag each event. | keyword | + + +### dns_data + +This is the `dns_data` dataset. + +#### Example + +An example event for `dns_data` looks as following: + +```json +{ + "@timestamp": "2022-07-20T09:59:59.184Z", + "agent": { + "ephemeral_id": "85e827d3-e5d5-45b3-bc7e-33174299eff4", + "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "name": "docker-fleet-agent", + "type": "filebeat", + "version": "8.2.0" + }, + "bloxone_ddi": { + "dns_data": { + "absolute": { + "name": { + "spec": "DNS Absolute Name" + }, + "zone": { + "name": "DNS Absolute Zone Name" + } + }, + "absolute_name": { + "spec": "DNS Data Absolute Name" + }, + "absolute_zone": { + "name": "DNS Data Absolute Zone Name" + }, + "comment": "DNS Data Comment", + "created_at": "2022-07-20T09:59:59.184Z", + "delegation": "DNS Data Delegation", + "disabled": true, + "id": "ghr123ghf", + "inheritance": { + "sources": { + "ttl": { + "action": "DNS Data Action", + "display": { + "name": "DNS Display Name" + }, + "source": "DNS Data Source", + "value": 10 + } + } + }, + "name_in": { + "zone": "DNS Name in Zone" + }, + "name_in_zone": "DNS Data Name in zone", + "options": { + "address": "67.43.156.0", + "check_rmz": true, + "create_ptr": false + }, + "rdata": { + "address": "81.2.69.192", + "cname": "DNS Data Canonical Name", + "dhcid": "122zbczba12", + "dname": "DNS Data dname", + "exchange": "DNS Data Exchange", + "expire": 23131, + "flags": "DNS Data Flags", + "length_kind": 8, + "mname": "DNS Data mname", + "negative_ttl": 213342, + "order": 123124, + "port": 80, + "preference": 12345363467, + "priority": 44, + "refresh": 10800, + "regexp": "none", + "replacement": "DNS Data Replacement", + "retry": 3600, + "rname": "DNS Data rname", + "serial": 12314114, + "services": "DNS Data Test Services", + "tag": "issue", + "target": "DNS Data Target", + "text": "DNS Data text field", + "type": "32BIT", + "value": "DNS Data Value", + "weight": 0 + }, + "rdata_value": "DNS RData", + "source": [ + "STATIC" + ], + "tags": { + "message": "Hello" + }, + "ttl": 0, + "type": "DNS Data Type", + "updated_at": "2022-07-20T09:59:59.184Z", + "view": "DNS Data View", + "view_name": "DNS Data View Name", + "zone": "DNS Data Zone" + } + }, + "data_stream": { + "dataset": "bloxone_ddi.dns_data", + "namespace": "ep", + "type": "logs" + }, + "dns": { + "answers": { + "ttl": 0 + } + }, + "ecs": { + "version": "8.4.0" + }, + "elastic_agent": { + "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "snapshot": false, + "version": "8.2.0" + }, + "event": { + "agent_id_status": "verified", + "category": [ + "network" + ], + "created": "2022-07-20T09:59:59.184Z", + "dataset": "bloxone_ddi.dns_data", + "id": "ghr123ghf", + "ingested": "2022-08-31T07:08:15Z", + "kind": "event", + "original": "{\"absolute_name_spec\":\"DNS Data Absolute Name\",\"absolute_zone_name\":\"DNS Data Absolute Zone Name\",\"comment\":\"DNS Data Comment\",\"created_at\":\"2022-07-20T09:59:59.184Z\",\"delegation\":\"DNS Data Delegation\",\"disabled\":true,\"dns_absolute_name_spec\":\"DNS Absolute Name\",\"dns_absolute_zone_name\":\"DNS Absolute Zone Name\",\"dns_name_in_zone\":\"DNS Name in Zone\",\"dns_rdata\":\"DNS RData\",\"id\":\"ghr123ghf\",\"inheritance_sources\":{\"ttl\":{\"action\":\"DNS Data Action\",\"display_name\":\"DNS Display Name\",\"source\":\"DNS Data Source\",\"value\":10}},\"name_in_zone\":\"DNS Data Name in zone\",\"options\":{\"address\":\"67.43.156.0\",\"check_rmz\":true,\"create_ptr\":false},\"rdata\":{\"address\":\"81.2.69.192\",\"cname\":\"DNS Data Canonical Name\",\"dhcid\":\"122zbczba12\",\"dname\":\"DNS Data dname\",\"exchange\":\"DNS Data Exchange\",\"expire\":23131,\"flags\":\"DNS Data Flags\",\"length_kind\":8,\"mname\":\"DNS Data mname\",\"negative_ttl\":213342,\"order\":123124,\"port\":80,\"preference\":12345363467,\"priority\":44,\"refresh\":10800,\"regexp\":\"none\",\"replacement\":\"DNS Data Replacement\",\"retry\":3600,\"rname\":\"DNS Data rname\",\"serial\":12314114,\"services\":\"DNS Data Test Services\",\"tag\":\"issue\",\"target\":\"DNS Data Target\",\"text\":\"DNS Data text field\",\"type\":\"32BIT\",\"value\":\"DNS Data Value\",\"weight\":0},\"source\":[\"STATIC\"],\"tags\":{\"message\":\"Hello\"},\"ttl\":0,\"type\":\"DNS Data Type\",\"updated_at\":\"2022-07-20T09:59:59.184Z\",\"view\":\"DNS Data View\",\"view_name\":\"DNS Data View Name\",\"zone\":\"DNS Data Zone\"}", + "type": [ + "protocol" + ] + }, + "input": { + "type": "httpjson" + }, + "related": { + "ip": [ + "67.43.156.0", + "81.2.69.192" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields", + "forwarded", + "bloxone_ddi-dns_data" + ] +} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| bloxone_ddi.dns_data.absolute.name.spec | The DNS protocol textual representation of absolute_name_spec. | keyword | +| bloxone_ddi.dns_data.absolute.zone.name | The DNS protocol textual representation of the absolute domain name of the zone where this record belongs. | keyword | +| bloxone_ddi.dns_data.absolute_name.spec | Synthetic field, used to determine zone and/or name_in_zone field for records. | keyword | +| bloxone_ddi.dns_data.absolute_zone.name | The absolute domain name of the zone where this record belongs. | keyword | +| bloxone_ddi.dns_data.comment | The description for the DNS resource record. May contain 0 to 1024 characters. Can include UTF-8. | keyword | +| bloxone_ddi.dns_data.created_at | The timestamp when the object has been created. | date | +| bloxone_ddi.dns_data.delegation | The resource identifier. | keyword | +| bloxone_ddi.dns_data.disabled | Indicates if the DNS resource record is disabled. A disabled object is effectively non-existent when generating configuration. | boolean | +| bloxone_ddi.dns_data.id | The resource identifier. | keyword | +| bloxone_ddi.dns_data.inheritance.sources.ttl.action | The inheritance setting for a field. | keyword | +| bloxone_ddi.dns_data.inheritance.sources.ttl.display.name | The human-readable display name for the object referred to by source. | keyword | +| bloxone_ddi.dns_data.inheritance.sources.ttl.source | The resource identifier. | keyword | +| bloxone_ddi.dns_data.inheritance.sources.ttl.value | The inherited value. | long | +| bloxone_ddi.dns_data.name_in.zone | The DNS protocol textual representation of the relative owner name for the DNS zone. | keyword | +| bloxone_ddi.dns_data.name_in_zone | The relative owner name to the zone origin. Must be specified for creating the DNS resource record and is read only for other operations. | keyword | +| bloxone_ddi.dns_data.options.address | For GET operation it contains the IPv4 or IPv6 address represented by the PTR record and for POST and PATCH operations it can be used to create/update a PTR record based on the IP address it represents. In this case, in addition to the address in the options field, need to specify the view field. | ip | +| bloxone_ddi.dns_data.options.check_rmz | A boolean flag which can be set to true for POST operation to check the existence of reverse zone for creating the corresponding PTR record. Only applicable if the create_ptr option is set to true. | boolean | +| bloxone_ddi.dns_data.options.create_ptr | A boolean flag which can be set to true for POST operation to automatically create the corresponding PTR record. | boolean | +| bloxone_ddi.dns_data.provider_metadata | external DNS provider metadata. | flattened | +| bloxone_ddi.dns_data.rdata.address | The IPv4/IPv6 address of the host. | ip | +| bloxone_ddi.dns_data.rdata.cname | A domain name which specifies the canonical or primary name for the owner. The owner name is an alias. Can be empty. | keyword | +| bloxone_ddi.dns_data.rdata.dhcid | The Base64 encoded string which contains DHCP client information. | keyword | +| bloxone_ddi.dns_data.rdata.dname | A domain-name which specifies a host which should be authoritative for the specified class and domain. Can be absolute or relative domain name and include UTF-8. | keyword | +| bloxone_ddi.dns_data.rdata.exchange | A domain name which specifies a host willing to act as a mail exchange for the owner name. | keyword | +| bloxone_ddi.dns_data.rdata.expire | The time interval in seconds after which zone data will expire and secondary server stops answering requests for the zone. | long | +| bloxone_ddi.dns_data.rdata.flags | An unsigned 8-bit integer which specifies the CAA record flags. RFC 6844 defines one (highest) bit in flag octet, remaining bits are deferred for future use. This bit is referenced as Critical. When the bit is set (flag value == 128), issuers must not issue certificates in case CAA records contain unknown property tags. | keyword | +| bloxone_ddi.dns_data.rdata.length_kind | A string indicating the size in bits of a sub-subfield that is prepended to the value and encodes the length of the value. | long | +| bloxone_ddi.dns_data.rdata.mname | The domain name for the master server for the zone. Can be absolute or relative domain name. | keyword | +| bloxone_ddi.dns_data.rdata.negative_ttl | The time interval in seconds for which name servers can cache negative responses for zone. | long | +| bloxone_ddi.dns_data.rdata.order | A 16-bit unsigned integer specifying the order in which the NAPTR records must be processed. Low numbers are processed before high numbers, and once a NAPTR is found whose rule “matches” the target, the client must not consider any NAPTRs with a higher value for order (except as noted below for the “flags” field. The range of the value is 0 to 65535. | long | +| bloxone_ddi.dns_data.rdata.port | An unsigned 16-bit integer which specifies the port on this target host of this service. The range of the value is 0 to 65535. This is often as specified in Assigned Numbers but need not be. | long | +| bloxone_ddi.dns_data.rdata.preference | An unsigned 16-bit integer which specifies the preference given to this RR among others at the same owner. Lower values are preferred. The range of the value is 0 to 65535. | long | +| bloxone_ddi.dns_data.rdata.priority | An unsigned 16-bit integer which specifies the priority of this target host. The range of the value is 0 to 65535. A client must attempt to contact the target host with the lowest-numbered priority it can reach. Target hosts with the same priority should be tried in an order defined by the weight field. | long | +| bloxone_ddi.dns_data.rdata.refresh | The time interval in seconds that specifies how often secondary servers need to send a message to the primary server for a zone to check that their data is current, and retrieve fresh data if it is not. | long | +| bloxone_ddi.dns_data.rdata.regexp | A string containing a substitution expression that is applied to the original string held by the client in order to construct the next domain name to lookup. | keyword | +| bloxone_ddi.dns_data.rdata.replacement | The next name to query for NAPTR, SRV, or address records depending on the value of the flags field. This can be an absolute or relative domain name. Can be empty. | keyword | +| bloxone_ddi.dns_data.rdata.retry | The time interval in seconds for which the secondary server will wait before attempting to recontact the primary server after a connection failure occurs. | long | +| bloxone_ddi.dns_data.rdata.rname | The domain name which specifies the mailbox of the person responsible for this zone. | keyword | +| bloxone_ddi.dns_data.rdata.serial | An unsigned 32-bit integer that specifies the serial number of the zone. Used to indicate that zone data was updated, so the secondary name server can initiate zone transfer. The range of the value is 0 to 4294967295. | long | +| bloxone_ddi.dns_data.rdata.services | Specifies the service(s) available down this rewrite path. It may also specify the particular protocol that is used to talk with a service. A protocol must be specified if the flags field states that the NAPTR is terminal. If a protocol is specified, but the flags field does not state that the NAPTR is terminal, the next lookup must be for a NAPTR. The client may choose not to perform the next lookup if the protocol is unknown, but that behavior must not be relied upon. | keyword | +| bloxone_ddi.dns_data.rdata.tag | The CAA record property tag string which indicates the type of CAA record. | keyword | +| bloxone_ddi.dns_data.rdata.target | The target domain name to which the zone will be mapped. Can be empty. | keyword | +| bloxone_ddi.dns_data.rdata.text | The semantics of the text depends on the domain where it is found. | keyword | +| bloxone_ddi.dns_data.rdata.type | Type of TXT (Text) record. | keyword | +| bloxone_ddi.dns_data.rdata.value | A string which contains the CAA record property value. | keyword | +| bloxone_ddi.dns_data.rdata.weight | An unsigned 16-bit integer which specifies a relative weight for entries with the same priority. The range of the value is 0 to 65535. Larger weights should be given a proportionately higher probability of being selected. Domain administrators should use weight 0 when there isn’t any server selection to do, to make the RR easier to read for humans (less noisy). In the presence of records containing weights greater than 0, records with weight 0 should have a very small chance of being selected. | long | +| bloxone_ddi.dns_data.rdata_value | The DNS protocol textual representation of the DNS resource record data. | keyword | +| bloxone_ddi.dns_data.source | The DNS resource record type-specific non-protocol source. The source is a combination of indicators, each tracking how the DNS resource record appeared in system. | keyword | +| bloxone_ddi.dns_data.tags | The tags for the DNS resource record in JSON format. | flattened | +| bloxone_ddi.dns_data.ttl | The record time to live value in seconds. The range of this value is 0 to 2147483647. Defaults to TTL value from the SOA record of the zone. | long | +| bloxone_ddi.dns_data.type | The DNS resource record type specified in the textual mnemonic format or in the “TYPEnnn” format where “nnn” indicates the numeric type value. | keyword | +| bloxone_ddi.dns_data.updated_at | The timestamp when the object has been updated. Equals to created_at if not updated after creation. | date | +| bloxone_ddi.dns_data.view | The resource identifier. | keyword | +| bloxone_ddi.dns_data.view_name | The display name of the DNS view that contains the parent zone of the DNS resource record. | keyword | +| bloxone_ddi.dns_data.zone | The resource identifier. | 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.availability_zone | Availability zone in which this host is running. | keyword | +| cloud.image.id | Image ID for the cloud instance. | keyword | +| cloud.instance.id | Instance ID of the host machine. | keyword | +| cloud.instance.name | Instance name of the host machine. | keyword | +| cloud.machine.type | Machine type of the host machine. | keyword | +| cloud.project.id | Name of the project in Google Cloud. | keyword | +| cloud.provider | Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. | keyword | +| cloud.region | Region in which this host is running. | keyword | +| container.id | Unique container id. | keyword | +| container.image.name | Name of the image the container was built on. | keyword | +| container.labels | Image labels. | object | +| container.name | Container name. | 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 | +| dns.answers.ttl | The time interval in seconds that this resource record may be cached before it should be discarded. Zero values mean that the data should not be cached. | long | +| ecs.version | ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. | keyword | +| event.category | This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories. | keyword | +| event.created | event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used. | date | +| event.dataset | Event dataset. | constant_keyword | +| event.id | Unique ID to describe the event. | keyword | +| event.kind | This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not. | keyword | +| event.module | Event module. | constant_keyword | +| event.original | Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. | keyword | +| event.type | This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types. | keyword | +| host.architecture | Operating system architecture. | keyword | +| host.containerized | If the host is a container. | boolean | +| host.domain | Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. | keyword | +| host.hostname | Hostname of the host. It normally contains what the `hostname` command returns on the host machine. | keyword | +| host.id | Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`. | keyword | +| host.ip | Host ip addresses. | ip | +| host.mac | Host mac addresses. | keyword | +| host.name | Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. | keyword | +| host.os.build | OS build information. | keyword | +| host.os.codename | OS codename, if any. | keyword | +| host.os.family | OS family (such as redhat, debian, freebsd, windows). | keyword | +| host.os.kernel | Operating system kernel version as a raw string. | keyword | +| host.os.name | Operating system name, without the version. | keyword | +| host.os.name.text | Multi-field of `host.os.name`. | text | +| host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | +| host.os.version | Operating system version as a raw string. | keyword | +| host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| input.type | Input type | keyword | +| log.offset | Log offset | long | +| related.hosts | All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases. | keyword | +| related.ip | All of the IPs seen on your event. | ip | +| tags | List of keywords used to tag each event. | keyword | + diff --git a/packages/bloxone_ddi/img/bloxone-ddi-logo.svg b/packages/bloxone_ddi/img/bloxone-ddi-logo.svg new file mode 100644 index 0000000000..57b4d23b16 --- /dev/null +++ b/packages/bloxone_ddi/img/bloxone-ddi-logo.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/bloxone_ddi/img/bloxone-ddi-screenshot.png b/packages/bloxone_ddi/img/bloxone-ddi-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..eda4aabcaf76afa75ca1ff64e244b6f94d9bc311 GIT binary patch literal 96683 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:@:. Please ensure your username and password are in URL encoded format. + - name: ssl + type: yaml + title: SSL Configuration + description: i.e. certificate_authorities, supported_protocols, verification_mode etc. + 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----- +owner: + github: elastic/security-external-integrations From 1127c98f26e9df2a02437217524eabfcd681f64e Mon Sep 17 00:00:00 2001 From: vinit-elastic Date: Thu, 1 Sep 2022 17:19:09 +0530 Subject: [PATCH 2/6] Update the changelog file --- packages/bloxone_ddi/changelog.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bloxone_ddi/changelog.yml b/packages/bloxone_ddi/changelog.yml index ccba43f365..e12c1ac6cd 100644 --- a/packages/bloxone_ddi/changelog.yml +++ b/packages/bloxone_ddi/changelog.yml @@ -3,4 +3,4 @@ changes: - description: Initial Release. type: enhancement - link: https://github.com/elastic/integrations/pull/1 + link: https://github.com/elastic/integrations/pull/4118 From f80a7580f8b70046bf6652193310824edf3a0cdd Mon Sep 17 00:00:00 2001 From: vinit-elastic Date: Wed, 7 Sep 2022 16:17:46 +0530 Subject: [PATCH 3/6] Changes as per review comments --- .../elasticsearch/ingest_pipeline/default.yml | 2 +- .../data_stream/dhcp_lease/sample_event.json | 10 +++--- .../data_stream/dns_config/fields/fields.yml | 7 ++-- .../data_stream/dns_config/sample_event.json | 8 ++--- .../elasticsearch/ingest_pipeline/default.yml | 2 +- .../data_stream/dns_data/fields/fields.yml | 2 +- .../data_stream/dns_data/sample_event.json | 8 ++--- packages/bloxone_ddi/docs/README.md | 34 +++++++++---------- 8 files changed, 37 insertions(+), 36 deletions(-) diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/elasticsearch/ingest_pipeline/default.yml b/packages/bloxone_ddi/data_stream/dhcp_lease/elasticsearch/ingest_pipeline/default.yml index 9b1065ed4f..6c5cc62298 100644 --- a/packages/bloxone_ddi/data_stream/dhcp_lease/elasticsearch/ingest_pipeline/default.yml +++ b/packages/bloxone_ddi/data_stream/dhcp_lease/elasticsearch/ingest_pipeline/default.yml @@ -78,7 +78,7 @@ processors: ignore_missing: true - gsub: field: json.hardware - pattern: '[-:.]' + pattern: '[:.]' replacement: '-' ignore_missing: true - uppercase: diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/sample_event.json b/packages/bloxone_ddi/data_stream/dhcp_lease/sample_event.json index 063cdcdcc0..f3da5dec4f 100644 --- a/packages/bloxone_ddi/data_stream/dhcp_lease/sample_event.json +++ b/packages/bloxone_ddi/data_stream/dhcp_lease/sample_event.json @@ -1,8 +1,8 @@ { "@timestamp": "2022-07-11T11:51:15.417Z", "agent": { - "ephemeral_id": "94ecc777-655d-433b-8b9a-03e70d1939e9", - "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "ephemeral_id": "fad9cbfb-ec00-4ac5-a82a-5b27693128dd", + "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.2.0" @@ -47,7 +47,7 @@ "version": "8.4.0" }, "elastic_agent": { - "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", "snapshot": false, "version": "8.2.0" }, @@ -56,10 +56,10 @@ "category": [ "network" ], - "created": "2022-08-31T07:06:44.259Z", + "created": "2022-09-06T08:40:04.396Z", "dataset": "bloxone_ddi.dhcp_lease", "end": "2022-07-11T11:51:15.417Z", - "ingested": "2022-08-31T07:06:47Z", + "ingested": "2022-09-06T08:40:05Z", "kind": "event", "original": "{\"address\":\"81.2.69.192\",\"client_id\":\"abc3212abc\",\"ends\":\"2022-07-11T11:51:15.417Z\",\"fingerprint\":\"ab3213cbabab/abc23bca\",\"fingerprint_processed\":\"12abca32bca32abcd\",\"ha_group\":\"abc321cdcbda321\",\"hardware\":\"00:00:5E:00:53:00\",\"host\":\"admin\",\"hostname\":\"Host1\",\"iaid\":0,\"last_updated\":\"2022-07-11T11:51:15.417Z\",\"options\":{\"message\":\"Hello\"},\"preferred_lifetime\":\"2022-07-11T11:51:15.417Z\",\"protocol\":\"ip4\",\"space\":\"DHCP lease Space\",\"starts\":\"2022-07-14T11:51:15.417Z\",\"state\":\"used\",\"type\":\"DHCP lease Type\"}", "start": "2022-07-14T11:51:15.417Z", diff --git a/packages/bloxone_ddi/data_stream/dns_config/fields/fields.yml b/packages/bloxone_ddi/data_stream/dns_config/fields/fields.yml index 5ca93dfd05..996c0688d4 100644 --- a/packages/bloxone_ddi/data_stream/dns_config/fields/fields.yml +++ b/packages/bloxone_ddi/data_stream/dns_config/fields/fields.yml @@ -21,19 +21,20 @@ description: Optional. true to use custom root nameservers instead of the default ones. - name: custom_root_ns type: group + description: List of custom root nameservers. The order does not matter. fields: - name: address type: ip - description: List of custom root nameservers. The order does not matter.IPv4 address. + description: IPv4 address. - name: fqdn type: keyword - description: List of custom root nameservers. The order does not matter.FQDN. + description: FQDN. - name: protocol type: group fields: - name: fqdn type: keyword - description: List of custom root nameservers. The order does not matter.FQDN in punycode. + description: FQDN in punycode. - name: disabled type: boolean description: Optional. true to disable object. A disabled object is effectively non-existent when generating configuration. diff --git a/packages/bloxone_ddi/data_stream/dns_config/sample_event.json b/packages/bloxone_ddi/data_stream/dns_config/sample_event.json index 5fae4c87e4..045e6b12db 100644 --- a/packages/bloxone_ddi/data_stream/dns_config/sample_event.json +++ b/packages/bloxone_ddi/data_stream/dns_config/sample_event.json @@ -1,8 +1,8 @@ { "@timestamp": "2022-07-15T06:55:25.978Z", "agent": { - "ephemeral_id": "3e3b210f-9e4a-4d82-840b-7a17afa48536", - "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "ephemeral_id": "3a899061-08e0-4d29-910a-3be5d29b5205", + "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.2.0" @@ -623,7 +623,7 @@ "version": "8.4.0" }, "elastic_agent": { - "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", "snapshot": false, "version": "8.2.0" }, @@ -635,7 +635,7 @@ "created": "2022-07-15T06:55:25.978Z", "dataset": "bloxone_ddi.dns_config", "id": "adv12rgfh", - "ingested": "2022-08-31T07:07:32Z", + "ingested": "2022-09-06T08:40:46Z", "kind": "event", "original": "{\"add_edns_option_in_outgoing_query\":true,\"comment\":\"DNS Config Comment\",\"created_at\":\"2022-07-15T06:55:25.978Z\",\"custom_root_ns\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"custom fqdn\",\"protocol_fqdn\":\"custom protocol fqdn\"}],\"custom_root_ns_enabled\":true,\"disabled\":true,\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_root_keys\":[{\"algorithm\":30,\"protocol_zone\":\"Dnssec root protocol zone\",\"public_key\":\"Dnssec root Public Key\",\"sep\":true,\"zone\":\"Dnssec root Zone\"}],\"dnssec_trust_anchors\":[{\"algorithm\":10,\"protocol_zone\":\"Dnssec trust protocol zone\",\"public_key\":\"Dnssec trust Public Key\",\"sep\":true,\"zone\":\"Dnssec trust zone\"}],\"dnssec_validate_expiry\":true,\"ecs_enabled\":true,\"ecs_forwarding\":true,\"ecs_prefix_v4\":22,\"ecs_prefix_v6\":33,\"ecs_zones\":[{\"access\":\"ecs zones access\",\"fqdn\":\"ecs zones fqdn\",\"protocol_fqdn\":\"ecs zones protocol fqdn\"}],\"edns_udp_size\":568,\"forwarders\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"forwarders fqdn\",\"protocol_fqdn\":\"forwarders protocol fqdn\"}],\"forwarders_only\":true,\"gss_tsig_enabled\":true,\"id\":\"adv12rgfh\",\"inheritance_sources\":{\"add_edns_option_in_outgoing_query\":{\"action\":\"inherit\",\"display_name\":\"displaynameadd_edns_option_in_outgoing_query\",\"source\":\"sourceadd_edns_option_in_outgoing_query\",\"value\":true},\"custom_root_ns_block\":{\"action\":\"override\",\"display_name\":\"displaynamecustom_root_ns_block\",\"source\":\"sourcecustom_root_ns_block\",\"value\":{\"custom_root_ns\":[{\"address\":\"67.43.156.0\",\"fqdn\":\"fqdn_custom_root_ns\",\"protocol_fqdn\":\"protocolfqdn_custom_root_ns\"}],\"custom_root_ns_enabled\":true}},\"dnssec_validation_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamednssec_validation_block\",\"source\":\"sourcednssec_validation_block\",\"value\":{\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_trust_anchors\":[{\"algorithm\":8,\"protocol_zone\":\"protocolzonednssec_trust_anchors\",\"public_key\":\"publickeydnssec_trust_anchors\",\"sep\":false,\"zone\":\"is3zone\"}],\"dnssec_validate_expiry\":true}},\"ecs_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameecs_block\",\"source\":\"sourceecs_block\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":10,\"ecs_zones\":[{\"access\":\"inherit\",\"fqdn\":\"fqdnecs_block\",\"protocol_fqdn\":\"protocol_fqdnecs_block\"}]}},\"ecs_zones\":{\"action\":\"override\",\"display_name\":\"displaynameecs_zones\",\"source\":\"sourceecs_zones\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":12,\"ecs_zones\":[{\"access\":\"access_ecs_zones\",\"fqdn\":\"fqdn_ecs_zones\",\"protocol_fqdn\":\"protocolfqdn_ecs_zones\"}]}},\"edns_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynameedns_udp_size\",\"source\":\"sourceedns_udp_size\",\"value\":55},\"forwarders_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameforwarders_block\",\"source\":\"sourceforwarders_block\",\"value\":{\"forwarders\":[{\"address\":\"89.160.20.128\",\"fqdn\":\"forwarders_fqdn\",\"protocol_fqdn\":\"forwarders_protocolfqdn\"}],\"forwarders_only\":true}},\"gss_tsig_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamegss_tsig_enabled\",\"source\":\"sourcegss_tsig_enabled\",\"value\":true},\"lame_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamelame_ttl\",\"source\":\"sourcelame_ttl\",\"value\":45},\"match_recursive_only\":{\"action\":\"inherit\",\"display_name\":\"displaynamematch_recursive_only\",\"source\":\"sourcematch_recursive_only\",\"value\":false},\"max_cache_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_cache_ttl\",\"source\":\"sourcemax_cache_ttl\",\"value\":13},\"max_negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_negative_ttl\",\"source\":\"sourcemax_negative_ttl\",\"value\":12},\"max_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_udp_size\",\"source\":\"sourcemax_udp_size\",\"value\":11},\"minimal_responses\":{\"action\":\"inherit\",\"display_name\":\"displaynameminimal_responses\",\"source\":\"sourceminimal_responses\",\"value\":true},\"notify\":{\"action\":\"inherit\",\"display_name\":\"displayname_notify\",\"source\":\"source_notify\",\"value\":true},\"query_acl\":{\"action\":\"override\",\"display_name\":\"displaynamequery_acl\",\"source\":\"sourcequery_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclvalue_query_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementvaluequery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha256\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolname_query_acl\",\"secret\":\"secretquery_acl\"}}]},\"recursion_acl\":{\"action\":\"override\",\"display_name\":\"displaynamerecursion_acl\",\"source\":\"sourcerecursion_acl\",\"value\":[{\"access\":\"deny\",\"acl\":\"aclrecursion_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}]},\"recursion_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamerecursion_enabled\",\"source\":\"sourcerecursion_enabled\",\"value\":true},\"synthesize_address_records_from_https\":{\"action\":\"inherit\",\"display_name\":\"displaynamesynthesize_address_records_from_https\",\"source\":\"sourcesynthesize_address_records_from_https\",\"value\":true},\"transfer_acl\":{\"action\":\"inherit\",\"display_name\":\"displaynametransfer_acl\",\"source\":\"sourcetransfer_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}]},\"update_acl\":{\"action\":\"override\",\"display_name\":\"displaynameupdate_acl\",\"source\":\"sourceupdate_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}]},\"use_forwarders_for_subzones\":{\"action\":\"override\",\"display_name\":\"displaynameuse_forwarders_for_subzones\",\"source\":\"sourceuse_forwarders_for_subzones\",\"value\":false},\"zone_authority\":{\"default_ttl\":{\"action\":\"override\",\"display_name\":\"displaynamezone_authority\",\"source\":\"sourcezone_authority\",\"value\":50},\"expire\":{\"action\":\"inherit\",\"display_name\":\"displaynameexpire\",\"source\":\"sourceexpire\",\"value\":70},\"mname_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamemname_block\",\"source\":\"sourcemname_block\",\"value\":{\"mname\":\"mnamevaluemname_block\",\"protocol_mname\":\"protocolmnamemname_block\",\"use_default_mname\":true}},\"negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamenegative_ttl\",\"source\":\"sourcenegative_ttl\",\"value\":90},\"protocol_rname\":{\"action\":\"inherit\",\"display_name\":\"displaynameprotocol_rname\",\"source\":\"sourceprotocol_rname\",\"value\":\"valueprotocol_rname\"},\"refresh\":{\"action\":\"inherit\",\"display_name\":\"displayname_refresh\",\"source\":\"source_refresh\",\"value\":40},\"retry\":{\"action\":\"inherit\",\"display_name\":\"displayname_retry\",\"source\":\"source_retry\",\"value\":570},\"rname\":{\"action\":\"inherit\",\"display_name\":\"displayname_rname\",\"source\":\"source_rname\",\"value\":\"value_rname\"}}},\"ip_spaces\":[\"testipspaces\"],\"lame_ttl\":350,\"match_clients_acl\":[{\"access\":\"deny\",\"acl\":\"aclmatch_clients_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_clients_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha512\",\"comment\":\"commentmatch_clients_acl\",\"key\":\"keymatch_clients_acl\",\"name\":\"namematch_clients_acl\",\"protocol_name\":\"protocolnamematch_clients_acl\",\"secret\":\"secretmatch_clients_acl\"}}],\"match_destinations_acl\":[{\"access\":\"allow\",\"acl\":\"aclmatch_destinations_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_destinations_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentmatch_destinations_acl\",\"key\":\"keymatch_destinations_acl\",\"name\":\"namematch_destinations_acl\",\"protocol_name\":\"protocolnamematch_destinations_acl\",\"secret\":\"secretmatch_destinations_acl\"}}],\"match_recursive_only\":true,\"max_cache_ttl\":90,\"max_negative_ttl\":500,\"max_udp_size\":890,\"minimal_responses\":true,\"name\":\"string\",\"notify\":true,\"query_acl\":[{\"access\":\"accessquery_acl\",\"acl\":\"aclquery_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementquery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolnamequery_acl\",\"secret\":\"secretquery_acl\"}}],\"recursion_acl\":[{\"access\":\"allow\",\"acl\":\"aclrecursion_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}],\"recursion_enabled\":true,\"synthesize_address_records_from_https\":false,\"tags\":{\"message\":\"Hello\"},\"transfer_acl\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}],\"update_acl\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}],\"updated_at\":\"2022-07-15T06:55:25.978Z\",\"use_forwarders_for_subzones\":true,\"zone_authority\":{\"default_ttl\":20,\"expire\":10,\"mname\":\"mnamezone_authority\",\"negative_ttl\":30,\"protocol_mname\":\"protocolmnamezone_authority\",\"protocol_rname\":\"protocolrnamezone_authority\",\"refresh\":50,\"retry\":100,\"rname\":\"string\",\"use_default_mname\":true}}", "type": [ diff --git a/packages/bloxone_ddi/data_stream/dns_data/elasticsearch/ingest_pipeline/default.yml b/packages/bloxone_ddi/data_stream/dns_data/elasticsearch/ingest_pipeline/default.yml index 58245dbf51..249277c132 100644 --- a/packages/bloxone_ddi/data_stream/dns_data/elasticsearch/ingest_pipeline/default.yml +++ b/packages/bloxone_ddi/data_stream/dns_data/elasticsearch/ingest_pipeline/default.yml @@ -106,7 +106,7 @@ processors: - convert: field: json.inheritance_sources.ttl.value target_field: bloxone_ddi.dns_data.inheritance.sources.ttl.value - if: ctx.json?.inheritance_sources?.ttl.value != '' + if: ctx.json?.inheritance_sources?.ttl?.value != '' type: long ignore_missing: true on_failure: diff --git a/packages/bloxone_ddi/data_stream/dns_data/fields/fields.yml b/packages/bloxone_ddi/data_stream/dns_data/fields/fields.yml index 74806320c3..81fa63bc34 100644 --- a/packages/bloxone_ddi/data_stream/dns_data/fields/fields.yml +++ b/packages/bloxone_ddi/data_stream/dns_data/fields/fields.yml @@ -99,7 +99,7 @@ fields: - name: address type: ip - description: The IPv4/IPv6 address of the host. + description: The IPv4/IPv6 address of the host. - name: cname type: keyword description: A domain name which specifies the canonical or primary name for the owner. The owner name is an alias. Can be empty. diff --git a/packages/bloxone_ddi/data_stream/dns_data/sample_event.json b/packages/bloxone_ddi/data_stream/dns_data/sample_event.json index c0ce04edfb..a8a3afb3db 100644 --- a/packages/bloxone_ddi/data_stream/dns_data/sample_event.json +++ b/packages/bloxone_ddi/data_stream/dns_data/sample_event.json @@ -1,8 +1,8 @@ { "@timestamp": "2022-07-20T09:59:59.184Z", "agent": { - "ephemeral_id": "85e827d3-e5d5-45b3-bc7e-33174299eff4", - "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "ephemeral_id": "da7708aa-c88f-46d1-a30c-e60c7f97d1ed", + "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.2.0" @@ -107,7 +107,7 @@ "version": "8.4.0" }, "elastic_agent": { - "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", "snapshot": false, "version": "8.2.0" }, @@ -119,7 +119,7 @@ "created": "2022-07-20T09:59:59.184Z", "dataset": "bloxone_ddi.dns_data", "id": "ghr123ghf", - "ingested": "2022-08-31T07:08:15Z", + "ingested": "2022-09-06T08:41:27Z", "kind": "event", "original": "{\"absolute_name_spec\":\"DNS Data Absolute Name\",\"absolute_zone_name\":\"DNS Data Absolute Zone Name\",\"comment\":\"DNS Data Comment\",\"created_at\":\"2022-07-20T09:59:59.184Z\",\"delegation\":\"DNS Data Delegation\",\"disabled\":true,\"dns_absolute_name_spec\":\"DNS Absolute Name\",\"dns_absolute_zone_name\":\"DNS Absolute Zone Name\",\"dns_name_in_zone\":\"DNS Name in Zone\",\"dns_rdata\":\"DNS RData\",\"id\":\"ghr123ghf\",\"inheritance_sources\":{\"ttl\":{\"action\":\"DNS Data Action\",\"display_name\":\"DNS Display Name\",\"source\":\"DNS Data Source\",\"value\":10}},\"name_in_zone\":\"DNS Data Name in zone\",\"options\":{\"address\":\"67.43.156.0\",\"check_rmz\":true,\"create_ptr\":false},\"rdata\":{\"address\":\"81.2.69.192\",\"cname\":\"DNS Data Canonical Name\",\"dhcid\":\"122zbczba12\",\"dname\":\"DNS Data dname\",\"exchange\":\"DNS Data Exchange\",\"expire\":23131,\"flags\":\"DNS Data Flags\",\"length_kind\":8,\"mname\":\"DNS Data mname\",\"negative_ttl\":213342,\"order\":123124,\"port\":80,\"preference\":12345363467,\"priority\":44,\"refresh\":10800,\"regexp\":\"none\",\"replacement\":\"DNS Data Replacement\",\"retry\":3600,\"rname\":\"DNS Data rname\",\"serial\":12314114,\"services\":\"DNS Data Test Services\",\"tag\":\"issue\",\"target\":\"DNS Data Target\",\"text\":\"DNS Data text field\",\"type\":\"32BIT\",\"value\":\"DNS Data Value\",\"weight\":0},\"source\":[\"STATIC\"],\"tags\":{\"message\":\"Hello\"},\"ttl\":0,\"type\":\"DNS Data Type\",\"updated_at\":\"2022-07-20T09:59:59.184Z\",\"view\":\"DNS Data View\",\"view_name\":\"DNS Data View Name\",\"zone\":\"DNS Data Zone\"}", "type": [ diff --git a/packages/bloxone_ddi/docs/README.md b/packages/bloxone_ddi/docs/README.md index 2c7231e4e0..6759d6211b 100644 --- a/packages/bloxone_ddi/docs/README.md +++ b/packages/bloxone_ddi/docs/README.md @@ -57,8 +57,8 @@ An example event for `dhcp_lease` looks as following: { "@timestamp": "2022-07-11T11:51:15.417Z", "agent": { - "ephemeral_id": "94ecc777-655d-433b-8b9a-03e70d1939e9", - "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "ephemeral_id": "fad9cbfb-ec00-4ac5-a82a-5b27693128dd", + "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.2.0" @@ -103,7 +103,7 @@ An example event for `dhcp_lease` looks as following: "version": "8.4.0" }, "elastic_agent": { - "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", "snapshot": false, "version": "8.2.0" }, @@ -112,10 +112,10 @@ An example event for `dhcp_lease` looks as following: "category": [ "network" ], - "created": "2022-08-31T07:06:44.259Z", + "created": "2022-09-06T08:40:04.396Z", "dataset": "bloxone_ddi.dhcp_lease", "end": "2022-07-11T11:51:15.417Z", - "ingested": "2022-08-31T07:06:47Z", + "ingested": "2022-09-06T08:40:05Z", "kind": "event", "original": "{\"address\":\"81.2.69.192\",\"client_id\":\"abc3212abc\",\"ends\":\"2022-07-11T11:51:15.417Z\",\"fingerprint\":\"ab3213cbabab/abc23bca\",\"fingerprint_processed\":\"12abca32bca32abcd\",\"ha_group\":\"abc321cdcbda321\",\"hardware\":\"00:00:5E:00:53:00\",\"host\":\"admin\",\"hostname\":\"Host1\",\"iaid\":0,\"last_updated\":\"2022-07-11T11:51:15.417Z\",\"options\":{\"message\":\"Hello\"},\"preferred_lifetime\":\"2022-07-11T11:51:15.417Z\",\"protocol\":\"ip4\",\"space\":\"DHCP lease Space\",\"starts\":\"2022-07-14T11:51:15.417Z\",\"state\":\"used\",\"type\":\"DHCP lease Type\"}", "start": "2022-07-14T11:51:15.417Z", @@ -238,8 +238,8 @@ An example event for `dns_config` looks as following: { "@timestamp": "2022-07-15T06:55:25.978Z", "agent": { - "ephemeral_id": "3e3b210f-9e4a-4d82-840b-7a17afa48536", - "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "ephemeral_id": "3a899061-08e0-4d29-910a-3be5d29b5205", + "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.2.0" @@ -860,7 +860,7 @@ An example event for `dns_config` looks as following: "version": "8.4.0" }, "elastic_agent": { - "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", "snapshot": false, "version": "8.2.0" }, @@ -872,7 +872,7 @@ An example event for `dns_config` looks as following: "created": "2022-07-15T06:55:25.978Z", "dataset": "bloxone_ddi.dns_config", "id": "adv12rgfh", - "ingested": "2022-08-31T07:07:32Z", + "ingested": "2022-09-06T08:40:46Z", "kind": "event", "original": "{\"add_edns_option_in_outgoing_query\":true,\"comment\":\"DNS Config Comment\",\"created_at\":\"2022-07-15T06:55:25.978Z\",\"custom_root_ns\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"custom fqdn\",\"protocol_fqdn\":\"custom protocol fqdn\"}],\"custom_root_ns_enabled\":true,\"disabled\":true,\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_root_keys\":[{\"algorithm\":30,\"protocol_zone\":\"Dnssec root protocol zone\",\"public_key\":\"Dnssec root Public Key\",\"sep\":true,\"zone\":\"Dnssec root Zone\"}],\"dnssec_trust_anchors\":[{\"algorithm\":10,\"protocol_zone\":\"Dnssec trust protocol zone\",\"public_key\":\"Dnssec trust Public Key\",\"sep\":true,\"zone\":\"Dnssec trust zone\"}],\"dnssec_validate_expiry\":true,\"ecs_enabled\":true,\"ecs_forwarding\":true,\"ecs_prefix_v4\":22,\"ecs_prefix_v6\":33,\"ecs_zones\":[{\"access\":\"ecs zones access\",\"fqdn\":\"ecs zones fqdn\",\"protocol_fqdn\":\"ecs zones protocol fqdn\"}],\"edns_udp_size\":568,\"forwarders\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"forwarders fqdn\",\"protocol_fqdn\":\"forwarders protocol fqdn\"}],\"forwarders_only\":true,\"gss_tsig_enabled\":true,\"id\":\"adv12rgfh\",\"inheritance_sources\":{\"add_edns_option_in_outgoing_query\":{\"action\":\"inherit\",\"display_name\":\"displaynameadd_edns_option_in_outgoing_query\",\"source\":\"sourceadd_edns_option_in_outgoing_query\",\"value\":true},\"custom_root_ns_block\":{\"action\":\"override\",\"display_name\":\"displaynamecustom_root_ns_block\",\"source\":\"sourcecustom_root_ns_block\",\"value\":{\"custom_root_ns\":[{\"address\":\"67.43.156.0\",\"fqdn\":\"fqdn_custom_root_ns\",\"protocol_fqdn\":\"protocolfqdn_custom_root_ns\"}],\"custom_root_ns_enabled\":true}},\"dnssec_validation_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamednssec_validation_block\",\"source\":\"sourcednssec_validation_block\",\"value\":{\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_trust_anchors\":[{\"algorithm\":8,\"protocol_zone\":\"protocolzonednssec_trust_anchors\",\"public_key\":\"publickeydnssec_trust_anchors\",\"sep\":false,\"zone\":\"is3zone\"}],\"dnssec_validate_expiry\":true}},\"ecs_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameecs_block\",\"source\":\"sourceecs_block\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":10,\"ecs_zones\":[{\"access\":\"inherit\",\"fqdn\":\"fqdnecs_block\",\"protocol_fqdn\":\"protocol_fqdnecs_block\"}]}},\"ecs_zones\":{\"action\":\"override\",\"display_name\":\"displaynameecs_zones\",\"source\":\"sourceecs_zones\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":12,\"ecs_zones\":[{\"access\":\"access_ecs_zones\",\"fqdn\":\"fqdn_ecs_zones\",\"protocol_fqdn\":\"protocolfqdn_ecs_zones\"}]}},\"edns_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynameedns_udp_size\",\"source\":\"sourceedns_udp_size\",\"value\":55},\"forwarders_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameforwarders_block\",\"source\":\"sourceforwarders_block\",\"value\":{\"forwarders\":[{\"address\":\"89.160.20.128\",\"fqdn\":\"forwarders_fqdn\",\"protocol_fqdn\":\"forwarders_protocolfqdn\"}],\"forwarders_only\":true}},\"gss_tsig_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamegss_tsig_enabled\",\"source\":\"sourcegss_tsig_enabled\",\"value\":true},\"lame_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamelame_ttl\",\"source\":\"sourcelame_ttl\",\"value\":45},\"match_recursive_only\":{\"action\":\"inherit\",\"display_name\":\"displaynamematch_recursive_only\",\"source\":\"sourcematch_recursive_only\",\"value\":false},\"max_cache_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_cache_ttl\",\"source\":\"sourcemax_cache_ttl\",\"value\":13},\"max_negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_negative_ttl\",\"source\":\"sourcemax_negative_ttl\",\"value\":12},\"max_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_udp_size\",\"source\":\"sourcemax_udp_size\",\"value\":11},\"minimal_responses\":{\"action\":\"inherit\",\"display_name\":\"displaynameminimal_responses\",\"source\":\"sourceminimal_responses\",\"value\":true},\"notify\":{\"action\":\"inherit\",\"display_name\":\"displayname_notify\",\"source\":\"source_notify\",\"value\":true},\"query_acl\":{\"action\":\"override\",\"display_name\":\"displaynamequery_acl\",\"source\":\"sourcequery_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclvalue_query_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementvaluequery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha256\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolname_query_acl\",\"secret\":\"secretquery_acl\"}}]},\"recursion_acl\":{\"action\":\"override\",\"display_name\":\"displaynamerecursion_acl\",\"source\":\"sourcerecursion_acl\",\"value\":[{\"access\":\"deny\",\"acl\":\"aclrecursion_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}]},\"recursion_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamerecursion_enabled\",\"source\":\"sourcerecursion_enabled\",\"value\":true},\"synthesize_address_records_from_https\":{\"action\":\"inherit\",\"display_name\":\"displaynamesynthesize_address_records_from_https\",\"source\":\"sourcesynthesize_address_records_from_https\",\"value\":true},\"transfer_acl\":{\"action\":\"inherit\",\"display_name\":\"displaynametransfer_acl\",\"source\":\"sourcetransfer_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}]},\"update_acl\":{\"action\":\"override\",\"display_name\":\"displaynameupdate_acl\",\"source\":\"sourceupdate_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}]},\"use_forwarders_for_subzones\":{\"action\":\"override\",\"display_name\":\"displaynameuse_forwarders_for_subzones\",\"source\":\"sourceuse_forwarders_for_subzones\",\"value\":false},\"zone_authority\":{\"default_ttl\":{\"action\":\"override\",\"display_name\":\"displaynamezone_authority\",\"source\":\"sourcezone_authority\",\"value\":50},\"expire\":{\"action\":\"inherit\",\"display_name\":\"displaynameexpire\",\"source\":\"sourceexpire\",\"value\":70},\"mname_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamemname_block\",\"source\":\"sourcemname_block\",\"value\":{\"mname\":\"mnamevaluemname_block\",\"protocol_mname\":\"protocolmnamemname_block\",\"use_default_mname\":true}},\"negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamenegative_ttl\",\"source\":\"sourcenegative_ttl\",\"value\":90},\"protocol_rname\":{\"action\":\"inherit\",\"display_name\":\"displaynameprotocol_rname\",\"source\":\"sourceprotocol_rname\",\"value\":\"valueprotocol_rname\"},\"refresh\":{\"action\":\"inherit\",\"display_name\":\"displayname_refresh\",\"source\":\"source_refresh\",\"value\":40},\"retry\":{\"action\":\"inherit\",\"display_name\":\"displayname_retry\",\"source\":\"source_retry\",\"value\":570},\"rname\":{\"action\":\"inherit\",\"display_name\":\"displayname_rname\",\"source\":\"source_rname\",\"value\":\"value_rname\"}}},\"ip_spaces\":[\"testipspaces\"],\"lame_ttl\":350,\"match_clients_acl\":[{\"access\":\"deny\",\"acl\":\"aclmatch_clients_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_clients_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha512\",\"comment\":\"commentmatch_clients_acl\",\"key\":\"keymatch_clients_acl\",\"name\":\"namematch_clients_acl\",\"protocol_name\":\"protocolnamematch_clients_acl\",\"secret\":\"secretmatch_clients_acl\"}}],\"match_destinations_acl\":[{\"access\":\"allow\",\"acl\":\"aclmatch_destinations_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_destinations_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentmatch_destinations_acl\",\"key\":\"keymatch_destinations_acl\",\"name\":\"namematch_destinations_acl\",\"protocol_name\":\"protocolnamematch_destinations_acl\",\"secret\":\"secretmatch_destinations_acl\"}}],\"match_recursive_only\":true,\"max_cache_ttl\":90,\"max_negative_ttl\":500,\"max_udp_size\":890,\"minimal_responses\":true,\"name\":\"string\",\"notify\":true,\"query_acl\":[{\"access\":\"accessquery_acl\",\"acl\":\"aclquery_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementquery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolnamequery_acl\",\"secret\":\"secretquery_acl\"}}],\"recursion_acl\":[{\"access\":\"allow\",\"acl\":\"aclrecursion_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}],\"recursion_enabled\":true,\"synthesize_address_records_from_https\":false,\"tags\":{\"message\":\"Hello\"},\"transfer_acl\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}],\"update_acl\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}],\"updated_at\":\"2022-07-15T06:55:25.978Z\",\"use_forwarders_for_subzones\":true,\"zone_authority\":{\"default_ttl\":20,\"expire\":10,\"mname\":\"mnamezone_authority\",\"negative_ttl\":30,\"protocol_mname\":\"protocolmnamezone_authority\",\"protocol_rname\":\"protocolrnamezone_authority\",\"refresh\":50,\"retry\":100,\"rname\":\"string\",\"use_default_mname\":true}}", "type": [ @@ -914,9 +914,9 @@ An example event for `dns_config` looks as following: | bloxone_ddi.dns_config.add_edns.option_in.outgoing_query | add_edns_option_in_outgoing_query adds client IP, MAC address and view name into outgoing recursive query. | boolean | | bloxone_ddi.dns_config.comment | Optional. Comment for view. | keyword | | bloxone_ddi.dns_config.created_at | The timestamp when the object has been created. | date | -| bloxone_ddi.dns_config.custom_root_ns.address | List of custom root nameservers. The order does not matter.IPv4 address. | ip | -| bloxone_ddi.dns_config.custom_root_ns.fqdn | List of custom root nameservers. The order does not matter.FQDN. | keyword | -| bloxone_ddi.dns_config.custom_root_ns.protocol.fqdn | List of custom root nameservers. The order does not matter.FQDN in punycode. | keyword | +| bloxone_ddi.dns_config.custom_root_ns.address | IPv4 address. | ip | +| bloxone_ddi.dns_config.custom_root_ns.fqdn | FQDN. | keyword | +| bloxone_ddi.dns_config.custom_root_ns.protocol.fqdn | FQDN in punycode. | keyword | | bloxone_ddi.dns_config.custom_root_ns_enabled | Optional. true to use custom root nameservers instead of the default ones. | boolean | | bloxone_ddi.dns_config.disabled | Optional. true to disable object. A disabled object is effectively non-existent when generating configuration. | boolean | | bloxone_ddi.dns_config.dnssec.enable_validation | Optional. true to perform DNSSEC validation. | boolean | @@ -1265,8 +1265,8 @@ An example event for `dns_data` looks as following: { "@timestamp": "2022-07-20T09:59:59.184Z", "agent": { - "ephemeral_id": "85e827d3-e5d5-45b3-bc7e-33174299eff4", - "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "ephemeral_id": "da7708aa-c88f-46d1-a30c-e60c7f97d1ed", + "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.2.0" @@ -1371,7 +1371,7 @@ An example event for `dns_data` looks as following: "version": "8.4.0" }, "elastic_agent": { - "id": "ef2f771a-acee-4da5-82ef-c41f3ab10973", + "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", "snapshot": false, "version": "8.2.0" }, @@ -1383,7 +1383,7 @@ An example event for `dns_data` looks as following: "created": "2022-07-20T09:59:59.184Z", "dataset": "bloxone_ddi.dns_data", "id": "ghr123ghf", - "ingested": "2022-08-31T07:08:15Z", + "ingested": "2022-09-06T08:41:27Z", "kind": "event", "original": "{\"absolute_name_spec\":\"DNS Data Absolute Name\",\"absolute_zone_name\":\"DNS Data Absolute Zone Name\",\"comment\":\"DNS Data Comment\",\"created_at\":\"2022-07-20T09:59:59.184Z\",\"delegation\":\"DNS Data Delegation\",\"disabled\":true,\"dns_absolute_name_spec\":\"DNS Absolute Name\",\"dns_absolute_zone_name\":\"DNS Absolute Zone Name\",\"dns_name_in_zone\":\"DNS Name in Zone\",\"dns_rdata\":\"DNS RData\",\"id\":\"ghr123ghf\",\"inheritance_sources\":{\"ttl\":{\"action\":\"DNS Data Action\",\"display_name\":\"DNS Display Name\",\"source\":\"DNS Data Source\",\"value\":10}},\"name_in_zone\":\"DNS Data Name in zone\",\"options\":{\"address\":\"67.43.156.0\",\"check_rmz\":true,\"create_ptr\":false},\"rdata\":{\"address\":\"81.2.69.192\",\"cname\":\"DNS Data Canonical Name\",\"dhcid\":\"122zbczba12\",\"dname\":\"DNS Data dname\",\"exchange\":\"DNS Data Exchange\",\"expire\":23131,\"flags\":\"DNS Data Flags\",\"length_kind\":8,\"mname\":\"DNS Data mname\",\"negative_ttl\":213342,\"order\":123124,\"port\":80,\"preference\":12345363467,\"priority\":44,\"refresh\":10800,\"regexp\":\"none\",\"replacement\":\"DNS Data Replacement\",\"retry\":3600,\"rname\":\"DNS Data rname\",\"serial\":12314114,\"services\":\"DNS Data Test Services\",\"tag\":\"issue\",\"target\":\"DNS Data Target\",\"text\":\"DNS Data text field\",\"type\":\"32BIT\",\"value\":\"DNS Data Value\",\"weight\":0},\"source\":[\"STATIC\"],\"tags\":{\"message\":\"Hello\"},\"ttl\":0,\"type\":\"DNS Data Type\",\"updated_at\":\"2022-07-20T09:59:59.184Z\",\"view\":\"DNS Data View\",\"view_name\":\"DNS Data View Name\",\"zone\":\"DNS Data Zone\"}", "type": [ @@ -1432,7 +1432,7 @@ An example event for `dns_data` looks as following: | bloxone_ddi.dns_data.options.check_rmz | A boolean flag which can be set to true for POST operation to check the existence of reverse zone for creating the corresponding PTR record. Only applicable if the create_ptr option is set to true. | boolean | | bloxone_ddi.dns_data.options.create_ptr | A boolean flag which can be set to true for POST operation to automatically create the corresponding PTR record. | boolean | | bloxone_ddi.dns_data.provider_metadata | external DNS provider metadata. | flattened | -| bloxone_ddi.dns_data.rdata.address | The IPv4/IPv6 address of the host. | ip | +| bloxone_ddi.dns_data.rdata.address | The IPv4/IPv6 address of the host. | ip | | bloxone_ddi.dns_data.rdata.cname | A domain name which specifies the canonical or primary name for the owner. The owner name is an alias. Can be empty. | keyword | | bloxone_ddi.dns_data.rdata.dhcid | The Base64 encoded string which contains DHCP client information. | keyword | | bloxone_ddi.dns_data.rdata.dname | A domain-name which specifies a host which should be authoritative for the specified class and domain. Can be absolute or relative domain name and include UTF-8. | keyword | From 0c1790184da6903266080eb41040ba16b4ca180f Mon Sep 17 00:00:00 2001 From: vinit-elastic Date: Wed, 21 Sep 2022 20:26:21 +0530 Subject: [PATCH 4/6] Update package name --- packages/bloxone_ddi/_dev/build/build.yml | 3 - .../bloxone_ddi/_dev/build/docs/README.md | 76 -- .../pipeline/test-pipeline-dns-config.log | 2 - .../test/pipeline/test-pipeline-dns-data.log | 2 - .../img/bloxone-ddi-screenshot.png | Bin 96683 -> 0 bytes .../infoblox_bloxone_ddi/_dev/build/build.yml | 3 + .../_dev/build/docs/README.md | 76 ++ .../_dev/deploy/docker/docker-compose.yml | 6 +- .../_dev/deploy/docker/files/config.yml | 0 .../changelog.yml | 2 +- .../_dev/test/pipeline/test-common-config.yml | 0 .../pipeline/test-pipeline-dhcp-lease.log | 2 +- ...test-pipeline-dhcp-lease.log-expected.json | 100 +- .../_dev/test/system/test-default-config.yml | 2 +- .../dhcp_lease/agent/stream/httpjson.yml.hbs | 0 .../elasticsearch/ingest_pipeline/default.yml | 74 +- .../data_stream/dhcp_lease/fields/agent.yml | 0 .../dhcp_lease}/fields/base-fields.yml | 4 +- .../data_stream/dhcp_lease/fields/ecs.yml | 0 .../data_stream/dhcp_lease/fields/fields.yml | 2 +- .../data_stream/dhcp_lease/manifest.yml | 10 +- .../data_stream/dhcp_lease/sample_event.json | 73 +- .../_dev/test/pipeline/test-common-config.yml | 0 .../pipeline/test-pipeline-dns-config.log | 2 + ...test-pipeline-dns-config.log-expected.json | 100 +- .../_dev/test/system/test-default-config.yml | 2 +- .../dns_config/agent/stream/httpjson.yml.hbs | 0 .../elasticsearch/ingest_pipeline/default.yml | 380 +++---- .../data_stream/dns_config/fields/agent.yml | 0 .../dns_config}/fields/base-fields.yml | 4 +- .../data_stream/dns_config/fields/ecs.yml | 0 .../data_stream/dns_config/fields/fields.yml | 2 +- .../data_stream/dns_config/manifest.yml | 10 +- .../data_stream/dns_config/sample_event.json | 77 +- .../_dev/test/pipeline/test-common-config.yml | 0 .../test/pipeline/test-pipeline-dns-data.log | 2 + .../test-pipeline-dns-data.log-expected.json | 86 +- .../_dev/test/system/test-default-config.yml | 2 +- .../dns_data/agent/stream/httpjson.yml.hbs | 0 .../elasticsearch/ingest_pipeline/default.yml | 138 +-- .../data_stream/dns_data/fields/agent.yml | 0 .../dns_data}/fields/base-fields.yml | 4 +- .../data_stream/dns_data/fields/ecs.yml | 0 .../data_stream/dns_data/fields/fields.yml | 2 +- .../data_stream/dns_data/manifest.yml | 10 +- .../data_stream/dns_data/sample_event.json | 77 +- .../docs/README.md | 981 +++++++++--------- .../img/infoblox-bloxone-ddi-logo.svg} | 0 .../img/infoblox-bloxone-ddi-screenshot.png | Bin 0 -> 132086 bytes ...85daef90-0ce7-11ed-8a96-d11b53f3d359.json} | 32 +- ...b8497140-0cdd-11ed-8a96-d11b53f3d359.json} | 70 +- ...d3f8a270-0ce3-11ed-8a96-d11b53f3d359.json} | 145 ++- ...86860980-34f0-11ed-a2eb-7fc0c8a128fe.json} | 12 +- .../manifest.yml | 26 +- 54 files changed, 1298 insertions(+), 1303 deletions(-) delete mode 100644 packages/bloxone_ddi/_dev/build/build.yml delete mode 100644 packages/bloxone_ddi/_dev/build/docs/README.md delete mode 100644 packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log delete mode 100644 packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log delete mode 100644 packages/bloxone_ddi/img/bloxone-ddi-screenshot.png create mode 100644 packages/infoblox_bloxone_ddi/_dev/build/build.yml create mode 100644 packages/infoblox_bloxone_ddi/_dev/build/docs/README.md rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/_dev/deploy/docker/docker-compose.yml (64%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/_dev/deploy/docker/files/config.yml (100%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/changelog.yml (65%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dhcp_lease/_dev/test/pipeline/test-common-config.yml (100%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log (66%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log-expected.json (89%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dhcp_lease/_dev/test/system/test-default-config.yml (85%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dhcp_lease/agent/stream/httpjson.yml.hbs (100%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dhcp_lease/elasticsearch/ingest_pipeline/default.yml (71%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dhcp_lease/fields/agent.yml (100%) rename packages/{bloxone_ddi/data_stream/dns_config => infoblox_bloxone_ddi/data_stream/dhcp_lease}/fields/base-fields.yml (87%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dhcp_lease/fields/ecs.yml (100%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dhcp_lease/fields/fields.yml (98%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dhcp_lease/manifest.yml (78%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dhcp_lease/sample_event.json (82%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_config/_dev/test/pipeline/test-common-config.yml (100%) create mode 100644 packages/infoblox_bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log-expected.json (83%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_config/_dev/test/system/test-default-config.yml (85%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_config/agent/stream/httpjson.yml.hbs (100%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_config/elasticsearch/ingest_pipeline/default.yml (78%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_config/fields/agent.yml (100%) rename packages/{bloxone_ddi/data_stream/dns_data => infoblox_bloxone_ddi/data_stream/dns_config}/fields/base-fields.yml (87%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_config/fields/ecs.yml (100%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_config/fields/fields.yml (99%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_config/manifest.yml (78%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_config/sample_event.json (98%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_data/_dev/test/pipeline/test-common-config.yml (100%) create mode 100644 packages/infoblox_bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log-expected.json (83%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_data/_dev/test/system/test-default-config.yml (85%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_data/agent/stream/httpjson.yml.hbs (100%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_data/elasticsearch/ingest_pipeline/default.yml (69%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_data/fields/agent.yml (100%) rename packages/{bloxone_ddi/data_stream/dhcp_lease => infoblox_bloxone_ddi/data_stream/dns_data}/fields/base-fields.yml (87%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_data/fields/ecs.yml (100%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_data/fields/fields.yml (99%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_data/manifest.yml (79%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/data_stream/dns_data/sample_event.json (91%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/docs/README.md (57%) rename packages/{bloxone_ddi/img/bloxone-ddi-logo.svg => infoblox_bloxone_ddi/img/infoblox-bloxone-ddi-logo.svg} (100%) create mode 100644 packages/infoblox_bloxone_ddi/img/infoblox-bloxone-ddi-screenshot.png rename packages/{bloxone_ddi/kibana/dashboard/bloxone_ddi-85daef90-0ce7-11ed-8a96-d11b53f3d359.json => infoblox_bloxone_ddi/kibana/dashboard/infoblox_bloxone_ddi-85daef90-0ce7-11ed-8a96-d11b53f3d359.json} (97%) rename packages/{bloxone_ddi/kibana/dashboard/bloxone_ddi-b8497140-0cdd-11ed-8a96-d11b53f3d359.json => infoblox_bloxone_ddi/kibana/dashboard/infoblox_bloxone_ddi-b8497140-0cdd-11ed-8a96-d11b53f3d359.json} (97%) rename packages/{bloxone_ddi/kibana/dashboard/bloxone_ddi-d3f8a270-0ce3-11ed-8a96-d11b53f3d359.json => infoblox_bloxone_ddi/kibana/dashboard/infoblox_bloxone_ddi-d3f8a270-0ce3-11ed-8a96-d11b53f3d359.json} (95%) rename packages/{bloxone_ddi/kibana/search/bloxone_ddi-d74c6fc0-26aa-11ed-918d-234d18ceca0c.json => infoblox_bloxone_ddi/kibana/search/infoblox_bloxone_ddi-86860980-34f0-11ed-a2eb-7fc0c8a128fe.json} (61%) rename packages/{bloxone_ddi => infoblox_bloxone_ddi}/manifest.yml (82%) diff --git a/packages/bloxone_ddi/_dev/build/build.yml b/packages/bloxone_ddi/_dev/build/build.yml deleted file mode 100644 index 2254d90483..0000000000 --- a/packages/bloxone_ddi/_dev/build/build.yml +++ /dev/null @@ -1,3 +0,0 @@ -dependencies: - ecs: - reference: git@v8.4.0-rc1 diff --git a/packages/bloxone_ddi/_dev/build/docs/README.md b/packages/bloxone_ddi/_dev/build/docs/README.md deleted file mode 100644 index 4a6128d33b..0000000000 --- a/packages/bloxone_ddi/_dev/build/docs/README.md +++ /dev/null @@ -1,76 +0,0 @@ -# BloxOne DDI - -## Overview - -The [BloxOne DDI](https://www.infoblox.com/products/bloxone-ddi/) integration allows you to monitor DNS, DHCP and IP address management activity. DDI is the foundation of core network services that enables all communications over an IP-based network. - -Use the BloxOne DDI integration to collects and parses data from the REST APIs and then visualize that data in Kibana. - -## Data streams - -The BloxOne DDI integration collects logs for three types of events: DHCP lease, DNS data and DNS config. - -**DHCP Lease** is a BloxOne DDI service that stores information about leases. See more details about its API [here](https://csp.infoblox.com/apidoc?url=https%3A%2F%2Fcsp.infoblox.com%2Fapidoc%2Fdocs%2FDhcpLeases). - -**DNS Config** is a BloxOne DDI service that provides cloud-based DNS configuration with on-prem host serving DNS protocol. See more details about its API [here](https://csp.infoblox.com/apidoc?url=https%3A%2F%2Fcsp.infoblox.com%2Fapidoc%2Fdocs%2FDnsConfig). - -**DNS Data** is a BloxOne DDI service providing primary authoritative zone support. DNS Data is authoritative for all DNS resource records and is acting as a primary DNS server. See more details about its API [here](https://csp.infoblox.com/apidoc?url=https%3A%2F%2Fcsp.infoblox.com%2Fapidoc%2Fdocs%2FDnsData). - -## 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. - -This module has been tested against `BloxOne DDI API (v1)`. - -## Setup - -### To collect data from BloxOne DDI APIs, the user must have API Key. To create an API key follow the below steps: - -1. Log on to the Cloud Services Portal. -2. Go to ** -> User Profile**. -3. Go to **User API Keys** page. -4. Click **Create** to create a new API key. Specify the following: - - **Name**: Specify the name of the key. - - **Expires at**: Specify the expiry. -5. Click **Save & Close**. The API Access Key Generated dialog is shown. -6. Click **Copy**. - -### Enabling the integration in Elastic - -1. In Kibana go to **Management > Integrations**. -2. In the "Search for integrations" search bar, type **BloxOne DDI**. -3. Click on **BloxOne DDI** integration from the search results. -4. Click on **Add BloxOne DDI** button to add BloxOne DDI integration. -5. Enable the Integration to collect logs via API. - -## Logs Reference - -### dhcp_lease - -This is the `dhcp_lease` dataset. - -#### Example - -{{event "dhcp_lease"}} - -{{fields "dhcp_lease"}} - -### dns_config - -This is the `dns_config` dataset. - -#### Example - -{{event "dns_config"}} - -{{fields "dns_config"}} - -### dns_data - -This is the `dns_data` dataset. - -#### Example - -{{event "dns_data"}} - -{{fields "dns_data"}} diff --git a/packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log b/packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log deleted file mode 100644 index 2ccba65845..0000000000 --- a/packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log +++ /dev/null @@ -1,2 +0,0 @@ -{"add_edns_option_in_outgoing_query":true,"comment":"string","created_at":"2022-07-15T06:55:25.978Z","custom_root_ns":[{"address":"81.2.69.192","fqdn":"string","protocol_fqdn":"string"}],"custom_root_ns_enabled":true,"disabled":true,"dnssec_enable_validation":true,"dnssec_enabled":true,"dnssec_root_keys":[{"algorithm":2,"protocol_zone":"string","public_key":"string","sep":true,"zone":"string"}],"dnssec_trust_anchors":[{"algorithm":0,"protocol_zone":"string","public_key":"string","sep":true,"zone":"string"}],"dnssec_validate_expiry":true,"ecs_enabled":true,"ecs_forwarding":true,"ecs_prefix_v4":0,"ecs_prefix_v6":0,"ecs_zones":[{"access":"string","fqdn":"string","protocol_fqdn":"string"}],"edns_udp_size":0,"forwarders":[{"address":"81.2.69.192","fqdn":"string","protocol_fqdn":"string"}],"forwarders_only":true,"gss_tsig_enabled":true,"id":"string","inheritance_sources":{"add_edns_option_in_outgoing_query":{"action":"string","display_name":"string","source":"string","value":true},"custom_root_ns_block":{"action":"string","display_name":"string","source":"string","value":{"custom_root_ns":[{"address":"67.43.156.0","fqdn":"string","protocol_fqdn":"string"}],"custom_root_ns_enabled":true}},"dnssec_validation_block":{"action":"string","display_name":"string","source":"string","value":{"dnssec_enable_validation":true,"dnssec_enabled":true,"dnssec_trust_anchors":[{"algorithm":2,"protocol_zone":"string","public_key":"string","sep":false,"zone":"string"}],"dnssec_validate_expiry":true}},"ecs_block":{"action":"string","display_name":"string","source":"string","value":{"ecs_enabled":false,"ecs_forwarding":true,"ecs_prefix_v4":4,"ecs_prefix_v6":10,"ecs_zones":[{"access":"allow","fqdn":"Test Domain","protocol_fqdn":"string"}]}},"edns_udp_size":{"action":"inherit","display_name":"Demo","source":"string","value":10},"forwarders_block":{"action":"string","display_name":"string","source":"string","value":{"forwarders":[{"address":"89.160.20.128","fqdn":"string","protocol_fqdn":"string"}],"forwarders_only":true}},"gss_tsig_enabled":{"action":"string","display_name":"string","source":"string","value":true},"lame_ttl":{"action":"string","display_name":"string","source":"string","value":0},"match_recursive_only":{"action":"string","display_name":"string","source":"string","value":false},"max_cache_ttl":{"action":"string","display_name":"string","source":"string","value":0},"max_negative_ttl":{"action":"string","display_name":"string","source":"string","value":12},"max_udp_size":{"action":"string","display_name":"string","source":"string","value":0},"minimal_responses":{"action":"string","display_name":"string","source":"string","value":true},"notify":{"action":"string","display_name":"string","source":"string","value":true},"query_acl":{"action":"deny","display_name":"string","source":"string","value":[{"access":"allow","acl":"string","address":"89.160.20.128","element":"any","tsig_key":{"algorithm":"hmac_sha256","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}]},"recursion_acl":{"action":"string","display_name":"string","source":"string","value":[{"access":"deny","acl":"string","address":"89.160.20.128","element":"tsig_key","tsig_key":{"algorithm":"hmac_sha384","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}]},"recursion_enabled":{"action":"string","display_name":"string","source":"string","value":true},"synthesize_address_records_from_https":{"action":"inherit","display_name":"string","source":"string","value":true},"transfer_acl":{"action":"inherit","display_name":"string","source":"string","value":[{"access":"allow","acl":"string","address":"216.160.83.56","element":"string","tsig_key":{"algorithm":"hmac_sha224","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}]},"update_acl":{"action":"string","display_name":"string","source":"string","value":[{"access":"allow","acl":"string","address":"216.160.83.56","element":"acl","tsig_key":{"algorithm":"hmac_sha384","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}]},"use_forwarders_for_subzones":{"action":"override","display_name":"string","source":"string","value":false},"zone_authority":{"default_ttl":{"action":"string","display_name":"string","source":"string","value":0},"expire":{"action":"string","display_name":"string","source":"string","value":0},"mname_block":{"action":"string","display_name":"string","source":"string","value":{"mname":"string","protocol_mname":"dummy server","use_default_mname":true}},"negative_ttl":{"action":"string","display_name":"string","source":"string","value":0},"protocol_rname":{"action":"string","display_name":"string","source":"string","value":"string"},"refresh":{"action":"string","display_name":"string","source":"string","value":0},"retry":{"action":"string","display_name":"string","source":"string","value":0},"rname":{"action":"string","display_name":"string","source":"string","value":"string"}}},"ip_spaces":["string"],"lame_ttl":0,"match_clients_acl":[{"access":"deny","acl":"string","address":"81.2.69.192","element":"any","tsig_key":{"algorithm":"hmac_sha512","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}],"match_destinations_acl":[{"access":"allow","acl":"Demo","address":"81.2.69.192","element":"string","tsig_key":{"algorithm":"hmac_sha384","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}],"match_recursive_only":true,"max_cache_ttl":0,"max_negative_ttl":0,"max_udp_size":0,"minimal_responses":true,"name":"string","notify":true,"query_acl":[{"access":"string","acl":"string","address":"81.2.69.192","element":"acl","tsig_key":{"algorithm":"hmac_sha224","comment":"Demo","key":"string","name":"string","protocol_name":"string","secret":"string"}}],"recursion_acl":[{"access":"allow","acl":"ACL","address":"81.2.69.192","element":"any","tsig_key":{"algorithm":"hmac_sha1","comment":"dummy","key":"Demo","name":"string","protocol_name":"string","secret":"string"}}],"recursion_enabled":true,"synthesize_address_records_from_https":false,"tags":{},"transfer_acl":[{"access":"allow","acl":"value","address":"216.160.83.56","element":"any","tsig_key":{"algorithm":"hmac_sha224","comment":"string","key":"dummy","name":"string","protocol_name":"string","secret":"string"}}],"update_acl":[{"access":"allow","acl":"name","address":"216.160.83.56","element":"acl","tsig_key":{"algorithm":"hmac_sha1","comment":"string","key":"Test","name":"string","protocol_name":"string","secret":"string"}}],"updated_at":"2022-07-15T06:55:25.978Z","use_forwarders_for_subzones":true,"zone_authority":{"default_ttl":0,"expire":0,"mname":"string","negative_ttl":0,"protocol_mname":"string","protocol_rname":"string","refresh":0,"retry":0,"rname":"string","use_default_mname":true}} -{"add_edns_option_in_outgoing_query":false,"comment":"","created_at":"2022-08-16T09:24:24.231424Z","custom_root_ns":[],"custom_root_ns_enabled":false,"disabled":false,"dnssec_enable_validation":true,"dnssec_enabled":true,"dnssec_root_keys":[{"algorithm":2,"protocol_zone":".","public_key":"abc12dc34/12abcd3242cdaaacd+/abd12cdacd4221cdacbdbdbdbd/abcAC23CBD22323abcddcba=/abcddcbdcda13411bdbddb=","sep":true,"zone":"."}],"dnssec_trust_anchors":[],"dnssec_validate_expiry":true,"ecs_enabled":false,"ecs_forwarding":false,"ecs_prefix_v4":24,"ecs_prefix_v6":56,"ecs_zones":[],"edns_udp_size":1232,"forwarders":[],"forwarders_only":false,"gss_tsig_enabled":false,"id":"dns/view/abcd-12acbd-1ab2-12abcd-1abcd33","inheritance_sources":null,"ip_spaces":["ipam/ip_space/1abcd323-12abcd-12abcd-12ab-123badcd"],"lame_ttl":600,"match_clients_acl":[{"access":"allow","acl":null,"address":"81.2.69.192","element":"any","tsig_key":null}],"match_destinations_acl":[{"access":"allow","acl":null,"address":"81.2.69.192","element":"any","tsig_key":null}],"match_recursive_only":false,"max_cache_ttl":604800,"max_negative_ttl":10800,"max_udp_size":1232,"minimal_responses":false,"name":"Demo","notify":false,"query_acl":[],"recursion_acl":[],"recursion_enabled":true,"synthesize_address_records_from_https":false,"tags":null,"transfer_acl":[],"update_acl":[],"updated_at":"2022-08-16T09:24:24.231424Z","use_forwarders_for_subzones":true,"zone_authority":{"default_ttl":28800,"expire":2419200,"mname":"ns.b1ddi","negative_ttl":900,"protocol_mname":"ns.b1ddi","protocol_rname":"hostmaster","refresh":10800,"retry":3600,"rname":"hostmaster","use_default_mname":true}} diff --git a/packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log b/packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log deleted file mode 100644 index bef36d69d3..0000000000 --- a/packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log +++ /dev/null @@ -1,2 +0,0 @@ -{"absolute_name_spec":"string","absolute_zone_name":"string","comment":"string","created_at":"2022-07-20T09:59:59.184Z","delegation":"string","disabled":true,"dns_absolute_name_spec":"string","dns_absolute_zone_name":"string","dns_name_in_zone":"string","dns_rdata":"string","id":"string","inheritance_sources":{"ttl":{"action":"string","display_name":"string","source":"string","value":0}},"name_in_zone":"string","options":{},"rdata":{"address":"81.2.69.192","flags":"falg_value","tag":"issue","value":"value","cname":"canonical name","target":".","dhcid":"122zbczba12","exchange":"domain name","preference":12345363467,"order":123124,"regexp":"^sqq:","replacement":"","services":"","dname":"domain name","expire":23131,"mname":"Dummy","negative_ttl":213342,"refresh":10800,"retry":3600,"rname":"demo","serial":12314114,"port":80,"priority":44,"weight":0,"text":"text field","type":"32BIT","length_kind":8},"source":["string"],"tags":{},"ttl":0,"type":"string","updated_at":"2022-07-20T09:59:59.184Z","view":"string","view_name":"string","zone":"string"} -{"absolute_name_spec":"demo_spec","absolute_zone_name":"www.example.com","comment":"string","created_at":"2022-07-14T11:50:28.838Z","delegation":"abc123abcd323","disabled":true,"dns_absolute_name_spec":"Test name","dns_absolute_zone_name":"Dummy Zone","dns_name_in_zone":"Test zone","dns_rdata":"DNS rdata","id":"12abcddcba32ab","inheritance_sources":{"ttl":{"action":"inherit","display_name":"Dummy Display","source":"12abc321ab","value":0}},"name_in_zone":"demo","options":{"address":"81.2.69.144"},"rdata":{"address":"81.2.69.142","value":"wefewf"},"source":["STATIC"],"tags":{},"ttl":0,"type":"AAAA","updated_at":"2022-07-14T11:50:28.838Z","view":"12abcd32bcd12","view_name":"string","zone":"123bcdacd32"} diff --git a/packages/bloxone_ddi/img/bloxone-ddi-screenshot.png b/packages/bloxone_ddi/img/bloxone-ddi-screenshot.png deleted file mode 100644 index eda4aabcaf76afa75ca1ff64e244b6f94d9bc311..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96683 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 -> User Profile**. +3. Go to **User API Keys** page. +4. Click **Create** to create a new API key. Specify the following: + - **Name**: Specify the name of the key. + - **Expires at**: Specify the expiry. +5. Click **Save & Close**. The API Access Key Generated dialog is shown. +6. Click **Copy**. + +### Enabling the integration in Elastic + +1. In Kibana go to **Management > Integrations**. +2. In the "Search for integrations" search bar, type **Infoblox BloxOne DDI**. +3. Click on **Infoblox BloxOne DDI** integration from the search results. +4. Click on **Add Infoblox BloxOne DDI** button to add Infoblox BloxOne DDI integration. +5. Enable the Integration to collect logs via API. + +## Logs Reference + +### dhcp_lease + +This is the `dhcp_lease` dataset. + +#### Example + +{{event "dhcp_lease"}} + +{{fields "dhcp_lease"}} + +### dns_config + +This is the `dns_config` dataset. + +#### Example + +{{event "dns_config"}} + +{{fields "dns_config"}} + +### dns_data + +This is the `dns_data` dataset. + +#### Example + +{{event "dns_data"}} + +{{fields "dns_data"}} diff --git a/packages/bloxone_ddi/_dev/deploy/docker/docker-compose.yml b/packages/infoblox_bloxone_ddi/_dev/deploy/docker/docker-compose.yml similarity index 64% rename from packages/bloxone_ddi/_dev/deploy/docker/docker-compose.yml rename to packages/infoblox_bloxone_ddi/_dev/deploy/docker/docker-compose.yml index 3f1c09b1ca..02f1204a0b 100644 --- a/packages/bloxone_ddi/_dev/deploy/docker/docker-compose.yml +++ b/packages/infoblox_bloxone_ddi/_dev/deploy/docker/docker-compose.yml @@ -1,8 +1,8 @@ version: '2.3' services: - bloxone-ddi: - image: docker.elastic.co/observability/stream:v0.7.0 - hostname: bloxone-ddi + infoblox-bloxone-ddi: + image: docker.elastic.co/observability/stream:v0.8.0 + hostname: infoblox-bloxone-ddi ports: - 8080 volumes: diff --git a/packages/bloxone_ddi/_dev/deploy/docker/files/config.yml b/packages/infoblox_bloxone_ddi/_dev/deploy/docker/files/config.yml similarity index 100% rename from packages/bloxone_ddi/_dev/deploy/docker/files/config.yml rename to packages/infoblox_bloxone_ddi/_dev/deploy/docker/files/config.yml diff --git a/packages/bloxone_ddi/changelog.yml b/packages/infoblox_bloxone_ddi/changelog.yml similarity index 65% rename from packages/bloxone_ddi/changelog.yml rename to packages/infoblox_bloxone_ddi/changelog.yml index e12c1ac6cd..ccba43f365 100644 --- a/packages/bloxone_ddi/changelog.yml +++ b/packages/infoblox_bloxone_ddi/changelog.yml @@ -3,4 +3,4 @@ changes: - description: Initial Release. type: enhancement - link: https://github.com/elastic/integrations/pull/4118 + link: https://github.com/elastic/integrations/pull/1 diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-common-config.yml b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-common-config.yml similarity index 100% rename from packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-common-config.yml rename to packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-common-config.yml diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log similarity index 66% rename from packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log rename to packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log index a32f1500e6..0347da75c9 100644 --- a/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log +++ b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log @@ -1,2 +1,2 @@ {"address":"81.2.69.192","client_id":"string","ends":"2022-07-14T11:51:15.417Z","fingerprint":"string","fingerprint_processed":"string","ha_group":"string","hardware":"string","host":"string","hostname":"string","iaid":0,"last_updated":"2022-07-14T11:51:15.417Z","options":{"message":"Hello"},"preferred_lifetime":"2022-07-14T11:51:15.417Z","protocol":"ip6","space":"string","starts":"2022-07-14T11:51:15.417Z","state":"string","type":"string"} -{"address":"81.2.69.192","client_id":"abc3212caabc","ends":"2022-07-14T11:51:15.417Z","fingerprint":"ab3213cbabab/abc23bca","fingerprint_processed":"12abca32bca32abcd","ha_group":"abc321cdcbda321","hardware":"00:00:5E:00:53:00","host":"admin","hostname":"dummy.com","iaid":0,"last_updated":"2022-07-14T11:51:15.417Z","options":{"message":"Hello"},"preferred_lifetime":"2022-07-14T11:51:15.417Z","protocol":"ip4","space":"string","starts":"2022-07-14T11:51:15.417Z","state":"used","type":"DHCPv4: DHCPv4 lease"} +{"address":"81.2.69.192","client_id":"abc3212caabc","ends":"2022-07-14T11:51:15.417Z","fingerprint":"ab3213cbabab/abc23bca","fingerprint_processed":"12abca32bca32abcd","ha_group":"abc321cdcbda321","hardware":"00:00:5E:00:53:00","host":"admin","hostname":"example.com","iaid":0,"last_updated":"2022-07-14T11:51:15.417Z","options":{"message":"Hello"},"preferred_lifetime":"2022-07-14T11:51:15.417Z","protocol":"ip4","space":"string","starts":"2022-07-14T11:51:15.417Z","state":"used","type":"DHCPv4: DHCPv4 lease"} diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log-expected.json b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log-expected.json similarity index 89% rename from packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log-expected.json rename to packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log-expected.json index 61d064bc41..bbdca4c5c4 100644 --- a/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log-expected.json +++ b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/_dev/test/pipeline/test-pipeline-dhcp-lease.log-expected.json @@ -2,7 +2,31 @@ "expected": [ { "@timestamp": "2022-07-14T11:51:15.417Z", - "bloxone_ddi": { + "client": { + "user": { + "id": "string" + } + }, + "ecs": { + "version": "8.4.0" + }, + "event": { + "category": [ + "network" + ], + "end": "2022-07-14T11:51:15.417Z", + "kind": "event", + "original": "{\"address\":\"81.2.69.192\",\"client_id\":\"string\",\"ends\":\"2022-07-14T11:51:15.417Z\",\"fingerprint\":\"string\",\"fingerprint_processed\":\"string\",\"ha_group\":\"string\",\"hardware\":\"string\",\"host\":\"string\",\"hostname\":\"string\",\"iaid\":0,\"last_updated\":\"2022-07-14T11:51:15.417Z\",\"options\":{\"message\":\"Hello\"},\"preferred_lifetime\":\"2022-07-14T11:51:15.417Z\",\"protocol\":\"ip6\",\"space\":\"string\",\"starts\":\"2022-07-14T11:51:15.417Z\",\"state\":\"string\",\"type\":\"string\"}", + "start": "2022-07-14T11:51:15.417Z", + "type": [ + "protocol" + ] + }, + "host": { + "hostname": "string", + "name": "string" + }, + "infoblox_bloxone_ddi": { "dhcp_lease": { "address": "81.2.69.192", "client_id": "string", @@ -28,9 +52,27 @@ "type": "string" } }, + "network": { + "type": "ipv6" + }, + "related": { + "hosts": [ + "string" + ], + "ip": [ + "81.2.69.192" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ] + }, + { + "@timestamp": "2022-07-14T11:51:15.417Z", "client": { "user": { - "id": "string" + "id": "abc3212caabc" } }, "ecs": { @@ -42,35 +84,17 @@ ], "end": "2022-07-14T11:51:15.417Z", "kind": "event", - "original": "{\"address\":\"81.2.69.192\",\"client_id\":\"string\",\"ends\":\"2022-07-14T11:51:15.417Z\",\"fingerprint\":\"string\",\"fingerprint_processed\":\"string\",\"ha_group\":\"string\",\"hardware\":\"string\",\"host\":\"string\",\"hostname\":\"string\",\"iaid\":0,\"last_updated\":\"2022-07-14T11:51:15.417Z\",\"options\":{\"message\":\"Hello\"},\"preferred_lifetime\":\"2022-07-14T11:51:15.417Z\",\"protocol\":\"ip6\",\"space\":\"string\",\"starts\":\"2022-07-14T11:51:15.417Z\",\"state\":\"string\",\"type\":\"string\"}", + "original": "{\"address\":\"81.2.69.192\",\"client_id\":\"abc3212caabc\",\"ends\":\"2022-07-14T11:51:15.417Z\",\"fingerprint\":\"ab3213cbabab/abc23bca\",\"fingerprint_processed\":\"12abca32bca32abcd\",\"ha_group\":\"abc321cdcbda321\",\"hardware\":\"00:00:5E:00:53:00\",\"host\":\"admin\",\"hostname\":\"example.com\",\"iaid\":0,\"last_updated\":\"2022-07-14T11:51:15.417Z\",\"options\":{\"message\":\"Hello\"},\"preferred_lifetime\":\"2022-07-14T11:51:15.417Z\",\"protocol\":\"ip4\",\"space\":\"string\",\"starts\":\"2022-07-14T11:51:15.417Z\",\"state\":\"used\",\"type\":\"DHCPv4: DHCPv4 lease\"}", "start": "2022-07-14T11:51:15.417Z", "type": [ "protocol" ] }, "host": { - "hostname": "string", - "name": "string" - }, - "network": { - "type": "ipv6" - }, - "related": { - "hosts": [ - "string" - ], - "ip": [ - "81.2.69.192" - ] + "hostname": "example.com", + "name": "admin" }, - "tags": [ - "preserve_original_event", - "preserve_duplicate_custom_fields" - ] - }, - { - "@timestamp": "2022-07-14T11:51:15.417Z", - "bloxone_ddi": { + "infoblox_bloxone_ddi": { "dhcp_lease": { "address": "81.2.69.192", "client_id": "abc3212caabc", @@ -82,7 +106,7 @@ "ha_group": "abc321cdcbda321", "hardware": "00-00-5E-00-53-00", "host": "admin", - "hostname": "dummy.com", + "hostname": "example.com", "iaid": 0, "last_updated": "2022-07-14T11:51:15.417Z", "options": { @@ -96,37 +120,13 @@ "type": "DHCPv4: DHCPv4 lease" } }, - "client": { - "user": { - "id": "abc3212caabc" - } - }, - "ecs": { - "version": "8.4.0" - }, - "event": { - "category": [ - "network" - ], - "end": "2022-07-14T11:51:15.417Z", - "kind": "event", - "original": "{\"address\":\"81.2.69.192\",\"client_id\":\"abc3212caabc\",\"ends\":\"2022-07-14T11:51:15.417Z\",\"fingerprint\":\"ab3213cbabab/abc23bca\",\"fingerprint_processed\":\"12abca32bca32abcd\",\"ha_group\":\"abc321cdcbda321\",\"hardware\":\"00:00:5E:00:53:00\",\"host\":\"admin\",\"hostname\":\"dummy.com\",\"iaid\":0,\"last_updated\":\"2022-07-14T11:51:15.417Z\",\"options\":{\"message\":\"Hello\"},\"preferred_lifetime\":\"2022-07-14T11:51:15.417Z\",\"protocol\":\"ip4\",\"space\":\"string\",\"starts\":\"2022-07-14T11:51:15.417Z\",\"state\":\"used\",\"type\":\"DHCPv4: DHCPv4 lease\"}", - "start": "2022-07-14T11:51:15.417Z", - "type": [ - "protocol" - ] - }, - "host": { - "hostname": "dummy.com", - "name": "admin" - }, "network": { "type": "ipv4" }, "related": { "hosts": [ "admin", - "dummy.com" + "example.com" ], "ip": [ "81.2.69.192" diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/system/test-default-config.yml b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/_dev/test/system/test-default-config.yml similarity index 85% rename from packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/system/test-default-config.yml rename to packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/_dev/test/system/test-default-config.yml index 5188dac65d..b4145719d0 100644 --- a/packages/bloxone_ddi/data_stream/dhcp_lease/_dev/test/system/test-default-config.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/_dev/test/system/test-default-config.yml @@ -1,5 +1,5 @@ input: httpjson -service: bloxone-ddi +service: infoblox-bloxone-ddi vars: url: http://{{Hostname}}:{{Port}} api_key: xxxx diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/agent/stream/httpjson.yml.hbs b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/agent/stream/httpjson.yml.hbs similarity index 100% rename from packages/bloxone_ddi/data_stream/dhcp_lease/agent/stream/httpjson.yml.hbs rename to packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/agent/stream/httpjson.yml.hbs diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/elasticsearch/ingest_pipeline/default.yml b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/elasticsearch/ingest_pipeline/default.yml similarity index 71% rename from packages/bloxone_ddi/data_stream/dhcp_lease/elasticsearch/ingest_pipeline/default.yml rename to packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/elasticsearch/ingest_pipeline/default.yml index 6c5cc62298..b0f1d73624 100644 --- a/packages/bloxone_ddi/data_stream/dhcp_lease/elasticsearch/ingest_pipeline/default.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/elasticsearch/ingest_pipeline/default.yml @@ -29,7 +29,7 @@ processors: ignore_missing: true - convert: field: json.address - target_field: bloxone_ddi.dhcp_lease.address + target_field: infoblox_bloxone_ddi.dhcp_lease.address if: ctx.json?.address != '' type: ip ignore_missing: true @@ -39,20 +39,20 @@ processors: value: '{{{_ingest.on_failure_message}}}' - append: field: related.ip - value: '{{{bloxone_ddi.dhcp_lease.address}}}' + value: '{{{infoblox_bloxone_ddi.dhcp_lease.address}}}' allow_duplicates: false ignore_failure: true - rename: field: json.client_id - target_field: bloxone_ddi.dhcp_lease.client_id + target_field: infoblox_bloxone_ddi.dhcp_lease.client_id ignore_missing: true - set: field: client.user.id - copy_from: bloxone_ddi.dhcp_lease.client_id + copy_from: infoblox_bloxone_ddi.dhcp_lease.client_id ignore_failure: true - date: field: json.ends - target_field: bloxone_ddi.dhcp_lease.ends + target_field: infoblox_bloxone_ddi.dhcp_lease.ends if: ctx.json?.ends != null && ctx.json.ends != '' formats: - ISO8601 @@ -62,19 +62,19 @@ processors: value: '{{{_ingest.on_failure_message}}}' - set: field: event.end - copy_from: bloxone_ddi.dhcp_lease.ends + copy_from: infoblox_bloxone_ddi.dhcp_lease.ends ignore_failure: true - rename: field: json.fingerprint - target_field: bloxone_ddi.dhcp_lease.fingerprint.value + target_field: infoblox_bloxone_ddi.dhcp_lease.fingerprint.value ignore_missing: true - rename: field: json.fingerprint_processed - target_field: bloxone_ddi.dhcp_lease.fingerprint.processed + target_field: infoblox_bloxone_ddi.dhcp_lease.fingerprint.processed ignore_missing: true - rename: field: json.ha_group - target_field: bloxone_ddi.dhcp_lease.ha_group + target_field: infoblox_bloxone_ddi.dhcp_lease.ha_group ignore_missing: true - gsub: field: json.hardware @@ -86,15 +86,15 @@ processors: ignore_missing: true - rename: field: json.hardware - target_field: bloxone_ddi.dhcp_lease.hardware + target_field: infoblox_bloxone_ddi.dhcp_lease.hardware ignore_missing: true - rename: field: json.host - target_field: bloxone_ddi.dhcp_lease.host + target_field: infoblox_bloxone_ddi.dhcp_lease.host ignore_missing: true - set: field: host.name - copy_from: bloxone_ddi.dhcp_lease.host + copy_from: infoblox_bloxone_ddi.dhcp_lease.host ignore_failure: true - append: field: related.hosts @@ -104,11 +104,11 @@ processors: ignore_failure: true - rename: field: json.hostname - target_field: bloxone_ddi.dhcp_lease.hostname + target_field: infoblox_bloxone_ddi.dhcp_lease.hostname ignore_missing: true - set: field: host.hostname - copy_from: bloxone_ddi.dhcp_lease.hostname + copy_from: infoblox_bloxone_ddi.dhcp_lease.hostname ignore_failure: true - append: field: related.hosts @@ -118,7 +118,7 @@ processors: ignore_failure: true - convert: field: json.iaid - target_field: bloxone_ddi.dhcp_lease.iaid + target_field: infoblox_bloxone_ddi.dhcp_lease.iaid if: ctx.json?.iaid != '' type: long ignore_missing: true @@ -128,7 +128,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - date: field: json.last_updated - target_field: bloxone_ddi.dhcp_lease.last_updated + target_field: infoblox_bloxone_ddi.dhcp_lease.last_updated if: ctx.json?.last_updated != null && ctx.json.last_updated != '' formats: - ISO8601 @@ -138,15 +138,15 @@ processors: value: '{{{_ingest.on_failure_message}}}' - set: field: '@timestamp' - copy_from: bloxone_ddi.dhcp_lease.last_updated + copy_from: infoblox_bloxone_ddi.dhcp_lease.last_updated ignore_failure: true - rename: field: json.options - target_field: bloxone_ddi.dhcp_lease.options + target_field: infoblox_bloxone_ddi.dhcp_lease.options ignore_missing: true - date: field: json.preferred_lifetime - target_field: bloxone_ddi.dhcp_lease.preferred_lifetime + target_field: infoblox_bloxone_ddi.dhcp_lease.preferred_lifetime if: ctx.json?.preferred_lifetime != null && ctx.json.preferred_lifetime != '' formats: - ISO8601 @@ -166,22 +166,22 @@ processors: ignore_failure: true - rename: field: json.protocol - target_field: bloxone_ddi.dhcp_lease.protocol + target_field: infoblox_bloxone_ddi.dhcp_lease.protocol ignore_missing: true - set: field: network.type - copy_from: bloxone_ddi.dhcp_lease.protocol + copy_from: infoblox_bloxone_ddi.dhcp_lease.protocol ignore_failure: true - lowercase: field: network.type ignore_failure: true - rename: field: json.space - target_field: bloxone_ddi.dhcp_lease.space + target_field: infoblox_bloxone_ddi.dhcp_lease.space ignore_missing: true - date: field: json.starts - target_field: bloxone_ddi.dhcp_lease.starts + target_field: infoblox_bloxone_ddi.dhcp_lease.starts if: ctx.json?.starts != null && ctx.json.starts != '' formats: - ISO8601 @@ -191,29 +191,29 @@ processors: value: '{{{_ingest.on_failure_message}}}' - set: field: event.start - copy_from: bloxone_ddi.dhcp_lease.starts + copy_from: infoblox_bloxone_ddi.dhcp_lease.starts ignore_failure: true - rename: field: json.state - target_field: bloxone_ddi.dhcp_lease.state + target_field: infoblox_bloxone_ddi.dhcp_lease.state ignore_missing: true - rename: field: json.type - target_field: bloxone_ddi.dhcp_lease.type + target_field: infoblox_bloxone_ddi.dhcp_lease.type ignore_missing: true - remove: field: json ignore_missing: true - remove: field: - - bloxone_ddi.dhcp_lease.last_updated - - bloxone_ddi.dhcp_lease.client_id - - bloxone_ddi.dhcp_lease.ends - - bloxone_ddi.dhcp_lease.starts - - bloxone_ddi.dhcp_lease.hostname - - bloxone_ddi.dhcp_lease.host - - bloxone_ddi.dhcp_lease.protocol - if: ctx.tags == null || !ctx.tags.contains('preserve_duplicate_custom_fields') + - infoblox_bloxone_ddi.dhcp_lease.last_updated + - infoblox_bloxone_ddi.dhcp_lease.client_id + - infoblox_bloxone_ddi.dhcp_lease.ends + - infoblox_bloxone_ddi.dhcp_lease.starts + - infoblox_bloxone_ddi.dhcp_lease.hostname + - infoblox_bloxone_ddi.dhcp_lease.host + - infoblox_bloxone_ddi.dhcp_lease.protocol + if: ctx.tags == null || !(ctx.tags.contains('preserve_duplicate_custom_fields')) ignore_failure: true ignore_missing: true - remove: @@ -239,6 +239,6 @@ processors: } dropEmptyFields(ctx); on_failure: -- append: - field: error.message - value: '{{ _ingest.on_failure_message }}' + - append: + field: error.message + value: '{{ _ingest.on_failure_message }}' diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/fields/agent.yml b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/fields/agent.yml similarity index 100% rename from packages/bloxone_ddi/data_stream/dhcp_lease/fields/agent.yml rename to packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/fields/agent.yml diff --git a/packages/bloxone_ddi/data_stream/dns_config/fields/base-fields.yml b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/fields/base-fields.yml similarity index 87% rename from packages/bloxone_ddi/data_stream/dns_config/fields/base-fields.yml rename to packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/fields/base-fields.yml index a86228d009..4b10727c63 100644 --- a/packages/bloxone_ddi/data_stream/dns_config/fields/base-fields.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/fields/base-fields.yml @@ -13,8 +13,8 @@ - name: event.module type: constant_keyword description: Event module. - value: bloxone_ddi + value: infoblox_bloxone_ddi - name: event.dataset type: constant_keyword description: Event dataset. - value: bloxone_ddi.dns_config + value: infoblox_bloxone_ddi.dhcp_lease diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/fields/ecs.yml b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/fields/ecs.yml similarity index 100% rename from packages/bloxone_ddi/data_stream/dhcp_lease/fields/ecs.yml rename to packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/fields/ecs.yml diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/fields/fields.yml b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/fields/fields.yml similarity index 98% rename from packages/bloxone_ddi/data_stream/dhcp_lease/fields/fields.yml rename to packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/fields/fields.yml index dd23d238e6..2aa51045d1 100644 --- a/packages/bloxone_ddi/data_stream/dhcp_lease/fields/fields.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/fields/fields.yml @@ -1,4 +1,4 @@ -- name: bloxone_ddi.dhcp_lease +- name: infoblox_bloxone_ddi.dhcp_lease type: group fields: - name: address diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/manifest.yml b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/manifest.yml similarity index 78% rename from packages/bloxone_ddi/data_stream/dhcp_lease/manifest.yml rename to packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/manifest.yml index ad96b8dc37..d7839e32eb 100644 --- a/packages/bloxone_ddi/data_stream/dhcp_lease/manifest.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/manifest.yml @@ -1,15 +1,15 @@ -title: Collect DHCP Lease logs from BloxOne DDI +title: Collect DHCP Lease logs from Infoblox BloxOne DDI type: logs streams: - input: httpjson title: DHCP Lease logs - description: Collect DHCP Lease logs from BloxOne DDI. + description: Collect DHCP Lease logs from Infoblox BloxOne DDI. template_path: httpjson.yml.hbs vars: - name: initial_interval type: text title: Initial Interval - description: 'How far back to pull the DHCP Lease events from BloxOne DDI. NOTE: Supported units for this parameter are h/m/s.' + description: How far back to pull the DHCP Lease events from Infoblox BloxOne DDI. NOTE:- Supported units for this parameter are h/m/s. multi: false required: true show_user: true @@ -17,7 +17,7 @@ streams: - name: interval type: text title: Interval - description: 'Duration between requests to the BloxOne DDI API. NOTE: Supported units for this parameter are h/m/s.' + description: Duration between requests to the Infoblox BloxOne DDI API. NOTE:- Supported units for this parameter are h/m/s. multi: false required: true show_user: true @@ -30,7 +30,7 @@ streams: show_user: false default: - forwarded - - bloxone_ddi-dhcp_lease + - infoblox_bloxone_ddi_dhcp_lease - name: preserve_original_event required: true show_user: true diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/sample_event.json b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/sample_event.json similarity index 82% rename from packages/bloxone_ddi/data_stream/dhcp_lease/sample_event.json rename to packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/sample_event.json index f3da5dec4f..a7b0ee8f71 100644 --- a/packages/bloxone_ddi/data_stream/dhcp_lease/sample_event.json +++ b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/sample_event.json @@ -1,37 +1,12 @@ { "@timestamp": "2022-07-11T11:51:15.417Z", "agent": { - "ephemeral_id": "fad9cbfb-ec00-4ac5-a82a-5b27693128dd", - "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", + "ephemeral_id": "fcbbacc1-cc56-4655-ace0-3ab9860b392b", + "hostname": "docker-fleet-agent", + "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", "name": "docker-fleet-agent", "type": "filebeat", - "version": "8.2.0" - }, - "bloxone_ddi": { - "dhcp_lease": { - "address": "81.2.69.192", - "client_id": "abc3212abc", - "ends": "2022-07-11T11:51:15.417Z", - "fingerprint": { - "processed": "12abca32bca32abcd", - "value": "ab3213cbabab/abc23bca" - }, - "ha_group": "abc321cdcbda321", - "hardware": "00-00-5E-00-53-00", - "host": "admin", - "hostname": "Host1", - "iaid": 0, - "last_updated": "2022-07-11T11:51:15.417Z", - "options": { - "message": "Hello" - }, - "preferred_lifetime": "2022-07-11T11:51:15.417Z", - "protocol": "ipv4", - "space": "DHCP lease Space", - "starts": "2022-07-14T11:51:15.417Z", - "state": "used", - "type": "DHCP lease Type" - } + "version": "7.17.0" }, "client": { "user": { @@ -39,7 +14,7 @@ } }, "data_stream": { - "dataset": "bloxone_ddi.dhcp_lease", + "dataset": "infoblox_bloxone_ddi.dhcp_lease", "namespace": "ep", "type": "logs" }, @@ -47,19 +22,19 @@ "version": "8.4.0" }, "elastic_agent": { - "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", + "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", "snapshot": false, - "version": "8.2.0" + "version": "7.17.0" }, "event": { "agent_id_status": "verified", "category": [ "network" ], - "created": "2022-09-06T08:40:04.396Z", - "dataset": "bloxone_ddi.dhcp_lease", + "created": "2022-09-21T12:22:53.498Z", + "dataset": "infoblox_bloxone_ddi.dhcp_lease", "end": "2022-07-11T11:51:15.417Z", - "ingested": "2022-09-06T08:40:05Z", + "ingested": "2022-09-21T12:22:57Z", "kind": "event", "original": "{\"address\":\"81.2.69.192\",\"client_id\":\"abc3212abc\",\"ends\":\"2022-07-11T11:51:15.417Z\",\"fingerprint\":\"ab3213cbabab/abc23bca\",\"fingerprint_processed\":\"12abca32bca32abcd\",\"ha_group\":\"abc321cdcbda321\",\"hardware\":\"00:00:5E:00:53:00\",\"host\":\"admin\",\"hostname\":\"Host1\",\"iaid\":0,\"last_updated\":\"2022-07-11T11:51:15.417Z\",\"options\":{\"message\":\"Hello\"},\"preferred_lifetime\":\"2022-07-11T11:51:15.417Z\",\"protocol\":\"ip4\",\"space\":\"DHCP lease Space\",\"starts\":\"2022-07-14T11:51:15.417Z\",\"state\":\"used\",\"type\":\"DHCP lease Type\"}", "start": "2022-07-14T11:51:15.417Z", @@ -71,6 +46,32 @@ "hostname": "Host1", "name": "admin" }, + "infoblox_bloxone_ddi": { + "dhcp_lease": { + "address": "81.2.69.192", + "client_id": "abc3212abc", + "ends": "2022-07-11T11:51:15.417Z", + "fingerprint": { + "processed": "12abca32bca32abcd", + "value": "ab3213cbabab/abc23bca" + }, + "ha_group": "abc321cdcbda321", + "hardware": "00-00-5E-00-53-00", + "host": "admin", + "hostname": "Host1", + "iaid": 0, + "last_updated": "2022-07-11T11:51:15.417Z", + "options": { + "message": "Hello" + }, + "preferred_lifetime": "2022-07-11T11:51:15.417Z", + "protocol": "ipv4", + "space": "DHCP lease Space", + "starts": "2022-07-14T11:51:15.417Z", + "state": "used", + "type": "DHCP lease Type" + } + }, "input": { "type": "httpjson" }, @@ -90,6 +91,6 @@ "preserve_original_event", "preserve_duplicate_custom_fields", "forwarded", - "bloxone_ddi-dhcp_lease" + "infoblox_bloxone_ddi_dhcp_lease" ] } \ No newline at end of file diff --git a/packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-common-config.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-common-config.yml similarity index 100% rename from packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-common-config.yml rename to packages/infoblox_bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-common-config.yml diff --git a/packages/infoblox_bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log b/packages/infoblox_bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log new file mode 100644 index 0000000000..6d6e0f594a --- /dev/null +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log @@ -0,0 +1,2 @@ +{"add_edns_option_in_outgoing_query":true,"comment":"string","created_at":"2022-07-15T06:55:25.978Z","custom_root_ns":[{"address":"81.2.69.192","fqdn":"string","protocol_fqdn":"string"}],"custom_root_ns_enabled":true,"disabled":true,"dnssec_enable_validation":true,"dnssec_enabled":true,"dnssec_root_keys":[{"algorithm":2,"protocol_zone":"string","public_key":"string","sep":true,"zone":"string"}],"dnssec_trust_anchors":[{"algorithm":0,"protocol_zone":"string","public_key":"string","sep":true,"zone":"string"}],"dnssec_validate_expiry":true,"ecs_enabled":true,"ecs_forwarding":true,"ecs_prefix_v4":0,"ecs_prefix_v6":0,"ecs_zones":[{"access":"string","fqdn":"string","protocol_fqdn":"string"}],"edns_udp_size":0,"forwarders":[{"address":"81.2.69.192","fqdn":"string","protocol_fqdn":"string"}],"forwarders_only":true,"gss_tsig_enabled":true,"id":"string","inheritance_sources":{"add_edns_option_in_outgoing_query":{"action":"string","display_name":"string","source":"string","value":true},"custom_root_ns_block":{"action":"string","display_name":"string","source":"string","value":{"custom_root_ns":[{"address":"67.43.156.0","fqdn":"string","protocol_fqdn":"string"}],"custom_root_ns_enabled":true}},"dnssec_validation_block":{"action":"string","display_name":"string","source":"string","value":{"dnssec_enable_validation":true,"dnssec_enabled":true,"dnssec_trust_anchors":[{"algorithm":2,"protocol_zone":"string","public_key":"string","sep":false,"zone":"string"}],"dnssec_validate_expiry":true}},"ecs_block":{"action":"string","display_name":"string","source":"string","value":{"ecs_enabled":false,"ecs_forwarding":true,"ecs_prefix_v4":4,"ecs_prefix_v6":10,"ecs_zones":[{"access":"allow","fqdn":"Test Domain","protocol_fqdn":"string"}]}},"edns_udp_size":{"action":"inherit","display_name":"test display","source":"string","value":10},"forwarders_block":{"action":"string","display_name":"string","source":"string","value":{"forwarders":[{"address":"89.160.20.128","fqdn":"string","protocol_fqdn":"string"}],"forwarders_only":true}},"gss_tsig_enabled":{"action":"string","display_name":"string","source":"string","value":true},"lame_ttl":{"action":"string","display_name":"string","source":"string","value":0},"match_recursive_only":{"action":"string","display_name":"string","source":"string","value":false},"max_cache_ttl":{"action":"string","display_name":"string","source":"string","value":0},"max_negative_ttl":{"action":"string","display_name":"string","source":"string","value":12},"max_udp_size":{"action":"string","display_name":"string","source":"string","value":0},"minimal_responses":{"action":"string","display_name":"string","source":"string","value":true},"notify":{"action":"string","display_name":"string","source":"string","value":true},"query_acl":{"action":"deny","display_name":"string","source":"string","value":[{"access":"allow","acl":"string","address":"89.160.20.128","element":"any","tsig_key":{"algorithm":"hmac_sha256","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}]},"recursion_acl":{"action":"string","display_name":"string","source":"string","value":[{"access":"deny","acl":"string","address":"89.160.20.128","element":"tsig_key","tsig_key":{"algorithm":"hmac_sha384","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}]},"recursion_enabled":{"action":"string","display_name":"string","source":"string","value":true},"synthesize_address_records_from_https":{"action":"inherit","display_name":"string","source":"string","value":true},"transfer_acl":{"action":"inherit","display_name":"string","source":"string","value":[{"access":"allow","acl":"string","address":"216.160.83.56","element":"string","tsig_key":{"algorithm":"hmac_sha224","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}]},"update_acl":{"action":"string","display_name":"string","source":"string","value":[{"access":"allow","acl":"string","address":"216.160.83.56","element":"acl","tsig_key":{"algorithm":"hmac_sha384","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}]},"use_forwarders_for_subzones":{"action":"override","display_name":"string","source":"string","value":false},"zone_authority":{"default_ttl":{"action":"string","display_name":"string","source":"string","value":0},"expire":{"action":"string","display_name":"string","source":"string","value":0},"mname_block":{"action":"string","display_name":"string","source":"string","value":{"mname":"string","protocol_mname":"Test server","use_default_mname":true}},"negative_ttl":{"action":"string","display_name":"string","source":"string","value":0},"protocol_rname":{"action":"string","display_name":"string","source":"string","value":"string"},"refresh":{"action":"string","display_name":"string","source":"string","value":0},"retry":{"action":"string","display_name":"string","source":"string","value":0},"rname":{"action":"string","display_name":"string","source":"string","value":"string"}}},"ip_spaces":["string"],"lame_ttl":0,"match_clients_acl":[{"access":"deny","acl":"string","address":"81.2.69.192","element":"any","tsig_key":{"algorithm":"hmac_sha512","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}],"match_destinations_acl":[{"access":"allow","acl":"test acl","address":"81.2.69.192","element":"string","tsig_key":{"algorithm":"hmac_sha384","comment":"string","key":"string","name":"string","protocol_name":"string","secret":"string"}}],"match_recursive_only":true,"max_cache_ttl":0,"max_negative_ttl":0,"max_udp_size":0,"minimal_responses":true,"name":"string","notify":true,"query_acl":[{"access":"string","acl":"string","address":"81.2.69.192","element":"acl","tsig_key":{"algorithm":"hmac_sha224","comment":"testing comment","key":"string","name":"string","protocol_name":"string","secret":"string"}}],"recursion_acl":[{"access":"allow","acl":"ACL","address":"81.2.69.192","element":"any","tsig_key":{"algorithm":"hmac_sha1","comment":"testing_comment","key":"test key","name":"string","protocol_name":"string","secret":"string"}}],"recursion_enabled":true,"synthesize_address_records_from_https":false,"tags":{},"transfer_acl":[{"access":"allow","acl":"value","address":"216.160.83.56","element":"any","tsig_key":{"algorithm":"hmac_sha224","comment":"string","key":"test","name":"string","protocol_name":"string","secret":"string"}}],"update_acl":[{"access":"allow","acl":"name","address":"216.160.83.56","element":"acl","tsig_key":{"algorithm":"hmac_sha1","comment":"string","key":"Test","name":"string","protocol_name":"string","secret":"string"}}],"updated_at":"2022-07-15T06:55:25.978Z","use_forwarders_for_subzones":true,"zone_authority":{"default_ttl":0,"expire":0,"mname":"string","negative_ttl":0,"protocol_mname":"string","protocol_rname":"string","refresh":0,"retry":0,"rname":"string","use_default_mname":true}} +{"add_edns_option_in_outgoing_query":false,"comment":"","created_at":"2022-08-16T09:24:24.231424Z","custom_root_ns":[],"custom_root_ns_enabled":false,"disabled":false,"dnssec_enable_validation":true,"dnssec_enabled":true,"dnssec_root_keys":[{"algorithm":2,"protocol_zone":".","public_key":"abc12dc34/12abcd3242cdaaacd+/abd12cdacd4221cdacbdbdbdbd/abcAC23CBD22323abcddcba=/abcddcbdcda13411bdbddb=","sep":true,"zone":"."}],"dnssec_trust_anchors":[],"dnssec_validate_expiry":true,"ecs_enabled":false,"ecs_forwarding":false,"ecs_prefix_v4":24,"ecs_prefix_v6":56,"ecs_zones":[],"edns_udp_size":1232,"forwarders":[],"forwarders_only":false,"gss_tsig_enabled":false,"id":"dns/view/abcd-12acbd-1ab2-12abcd-1abcd33","inheritance_sources":null,"ip_spaces":["ipam/ip_space/1abcd323-12abcd-12abcd-12ab-123badcd"],"lame_ttl":600,"match_clients_acl":[{"access":"allow","acl":null,"address":"81.2.69.192","element":"any","tsig_key":null}],"match_destinations_acl":[{"access":"allow","acl":null,"address":"81.2.69.192","element":"any","tsig_key":null}],"match_recursive_only":false,"max_cache_ttl":604800,"max_negative_ttl":10800,"max_udp_size":1232,"minimal_responses":false,"name":"test name","notify":false,"query_acl":[],"recursion_acl":[],"recursion_enabled":true,"synthesize_address_records_from_https":false,"tags":null,"transfer_acl":[],"update_acl":[],"updated_at":"2022-08-16T09:24:24.231424Z","use_forwarders_for_subzones":true,"zone_authority":{"default_ttl":28800,"expire":2419200,"mname":"ns.b1ddi","negative_ttl":900,"protocol_mname":"ns.b1ddi","protocol_rname":"hostmaster","refresh":10800,"retry":3600,"rname":"hostmaster","use_default_mname":true}} diff --git a/packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log-expected.json b/packages/infoblox_bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log-expected.json similarity index 83% rename from packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log-expected.json rename to packages/infoblox_bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log-expected.json index 1aec3e99d8..c495e8830f 100644 --- a/packages/bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log-expected.json +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log-expected.json @@ -2,7 +2,27 @@ "expected": [ { "@timestamp": "2022-07-15T06:55:25.978Z", - "bloxone_ddi": { + "dns": { + "answers": { + "ttl": 0 + } + }, + "ecs": { + "version": "8.4.0" + }, + "event": { + "category": [ + "network" + ], + "created": "2022-07-15T06:55:25.978Z", + "id": "string", + "kind": "event", + "original": "{\"add_edns_option_in_outgoing_query\":true,\"comment\":\"string\",\"created_at\":\"2022-07-15T06:55:25.978Z\",\"custom_root_ns\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"string\",\"protocol_fqdn\":\"string\"}],\"custom_root_ns_enabled\":true,\"disabled\":true,\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_root_keys\":[{\"algorithm\":2,\"protocol_zone\":\"string\",\"public_key\":\"string\",\"sep\":true,\"zone\":\"string\"}],\"dnssec_trust_anchors\":[{\"algorithm\":0,\"protocol_zone\":\"string\",\"public_key\":\"string\",\"sep\":true,\"zone\":\"string\"}],\"dnssec_validate_expiry\":true,\"ecs_enabled\":true,\"ecs_forwarding\":true,\"ecs_prefix_v4\":0,\"ecs_prefix_v6\":0,\"ecs_zones\":[{\"access\":\"string\",\"fqdn\":\"string\",\"protocol_fqdn\":\"string\"}],\"edns_udp_size\":0,\"forwarders\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"string\",\"protocol_fqdn\":\"string\"}],\"forwarders_only\":true,\"gss_tsig_enabled\":true,\"id\":\"string\",\"inheritance_sources\":{\"add_edns_option_in_outgoing_query\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"custom_root_ns_block\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":{\"custom_root_ns\":[{\"address\":\"67.43.156.0\",\"fqdn\":\"string\",\"protocol_fqdn\":\"string\"}],\"custom_root_ns_enabled\":true}},\"dnssec_validation_block\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":{\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_trust_anchors\":[{\"algorithm\":2,\"protocol_zone\":\"string\",\"public_key\":\"string\",\"sep\":false,\"zone\":\"string\"}],\"dnssec_validate_expiry\":true}},\"ecs_block\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":10,\"ecs_zones\":[{\"access\":\"allow\",\"fqdn\":\"Test Domain\",\"protocol_fqdn\":\"string\"}]}},\"edns_udp_size\":{\"action\":\"inherit\",\"display_name\":\"test display\",\"source\":\"string\",\"value\":10},\"forwarders_block\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":{\"forwarders\":[{\"address\":\"89.160.20.128\",\"fqdn\":\"string\",\"protocol_fqdn\":\"string\"}],\"forwarders_only\":true}},\"gss_tsig_enabled\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"lame_ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"match_recursive_only\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":false},\"max_cache_ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"max_negative_ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":12},\"max_udp_size\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"minimal_responses\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"notify\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"query_acl\":{\"action\":\"deny\",\"display_name\":\"string\",\"source\":\"string\",\"value\":[{\"access\":\"allow\",\"acl\":\"string\",\"address\":\"89.160.20.128\",\"element\":\"any\",\"tsig_key\":{\"algorithm\":\"hmac_sha256\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}]},\"recursion_acl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":[{\"access\":\"deny\",\"acl\":\"string\",\"address\":\"89.160.20.128\",\"element\":\"tsig_key\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}]},\"recursion_enabled\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"synthesize_address_records_from_https\":{\"action\":\"inherit\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"transfer_acl\":{\"action\":\"inherit\",\"display_name\":\"string\",\"source\":\"string\",\"value\":[{\"access\":\"allow\",\"acl\":\"string\",\"address\":\"216.160.83.56\",\"element\":\"string\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}]},\"update_acl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":[{\"access\":\"allow\",\"acl\":\"string\",\"address\":\"216.160.83.56\",\"element\":\"acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}]},\"use_forwarders_for_subzones\":{\"action\":\"override\",\"display_name\":\"string\",\"source\":\"string\",\"value\":false},\"zone_authority\":{\"default_ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"expire\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"mname_block\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":{\"mname\":\"string\",\"protocol_mname\":\"Test server\",\"use_default_mname\":true}},\"negative_ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"protocol_rname\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":\"string\"},\"refresh\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"retry\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"rname\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":\"string\"}}},\"ip_spaces\":[\"string\"],\"lame_ttl\":0,\"match_clients_acl\":[{\"access\":\"deny\",\"acl\":\"string\",\"address\":\"81.2.69.192\",\"element\":\"any\",\"tsig_key\":{\"algorithm\":\"hmac_sha512\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"match_destinations_acl\":[{\"access\":\"allow\",\"acl\":\"test acl\",\"address\":\"81.2.69.192\",\"element\":\"string\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"match_recursive_only\":true,\"max_cache_ttl\":0,\"max_negative_ttl\":0,\"max_udp_size\":0,\"minimal_responses\":true,\"name\":\"string\",\"notify\":true,\"query_acl\":[{\"access\":\"string\",\"acl\":\"string\",\"address\":\"81.2.69.192\",\"element\":\"acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"testing comment\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"recursion_acl\":[{\"access\":\"allow\",\"acl\":\"ACL\",\"address\":\"81.2.69.192\",\"element\":\"any\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"testing_comment\",\"key\":\"test key\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"recursion_enabled\":true,\"synthesize_address_records_from_https\":false,\"tags\":{},\"transfer_acl\":[{\"access\":\"allow\",\"acl\":\"value\",\"address\":\"216.160.83.56\",\"element\":\"any\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"string\",\"key\":\"test\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"update_acl\":[{\"access\":\"allow\",\"acl\":\"name\",\"address\":\"216.160.83.56\",\"element\":\"acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"string\",\"key\":\"Test\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"updated_at\":\"2022-07-15T06:55:25.978Z\",\"use_forwarders_for_subzones\":true,\"zone_authority\":{\"default_ttl\":0,\"expire\":0,\"mname\":\"string\",\"negative_ttl\":0,\"protocol_mname\":\"string\",\"protocol_rname\":\"string\",\"refresh\":0,\"retry\":0,\"rname\":\"string\",\"use_default_mname\":true}}", + "type": [ + "protocol" + ] + }, + "infoblox_bloxone_ddi": { "dns_config": { "add_edns": { "option_in": { @@ -170,7 +190,7 @@ "size": { "action": "inherit", "display": { - "name": "Demo" + "name": "test display" }, "source": "string", "value": 10 @@ -412,7 +432,7 @@ "value": { "isdefault": true, "protocol": { - "mname": "dummy server" + "mname": "Test server" } } }, @@ -497,7 +517,7 @@ "secret": "string", "value": "string" }, - "value": "Demo" + "value": "test acl" } ], "match_recursive_only": true, @@ -514,7 +534,7 @@ "element": "acl", "tsig_key": { "algorithm": "hmac_sha224", - "comment": "Demo", + "comment": "testing comment", "name": "string", "protocol": { "name": "string" @@ -532,13 +552,13 @@ "element": "any", "tsig_key": { "algorithm": "hmac_sha1", - "comment": "dummy", + "comment": "testing_comment", "name": "string", "protocol": { "name": "string" }, "secret": "string", - "value": "Demo" + "value": "test key" }, "value": "ACL" } @@ -560,7 +580,7 @@ "name": "string" }, "secret": "string", - "value": "dummy" + "value": "test" }, "value": "value" } @@ -601,26 +621,6 @@ } } }, - "dns": { - "answers": { - "ttl": 0 - } - }, - "ecs": { - "version": "8.4.0" - }, - "event": { - "category": [ - "network" - ], - "created": "2022-07-15T06:55:25.978Z", - "id": "string", - "kind": "event", - "original": "{\"add_edns_option_in_outgoing_query\":true,\"comment\":\"string\",\"created_at\":\"2022-07-15T06:55:25.978Z\",\"custom_root_ns\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"string\",\"protocol_fqdn\":\"string\"}],\"custom_root_ns_enabled\":true,\"disabled\":true,\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_root_keys\":[{\"algorithm\":2,\"protocol_zone\":\"string\",\"public_key\":\"string\",\"sep\":true,\"zone\":\"string\"}],\"dnssec_trust_anchors\":[{\"algorithm\":0,\"protocol_zone\":\"string\",\"public_key\":\"string\",\"sep\":true,\"zone\":\"string\"}],\"dnssec_validate_expiry\":true,\"ecs_enabled\":true,\"ecs_forwarding\":true,\"ecs_prefix_v4\":0,\"ecs_prefix_v6\":0,\"ecs_zones\":[{\"access\":\"string\",\"fqdn\":\"string\",\"protocol_fqdn\":\"string\"}],\"edns_udp_size\":0,\"forwarders\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"string\",\"protocol_fqdn\":\"string\"}],\"forwarders_only\":true,\"gss_tsig_enabled\":true,\"id\":\"string\",\"inheritance_sources\":{\"add_edns_option_in_outgoing_query\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"custom_root_ns_block\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":{\"custom_root_ns\":[{\"address\":\"67.43.156.0\",\"fqdn\":\"string\",\"protocol_fqdn\":\"string\"}],\"custom_root_ns_enabled\":true}},\"dnssec_validation_block\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":{\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_trust_anchors\":[{\"algorithm\":2,\"protocol_zone\":\"string\",\"public_key\":\"string\",\"sep\":false,\"zone\":\"string\"}],\"dnssec_validate_expiry\":true}},\"ecs_block\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":10,\"ecs_zones\":[{\"access\":\"allow\",\"fqdn\":\"Test Domain\",\"protocol_fqdn\":\"string\"}]}},\"edns_udp_size\":{\"action\":\"inherit\",\"display_name\":\"Demo\",\"source\":\"string\",\"value\":10},\"forwarders_block\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":{\"forwarders\":[{\"address\":\"89.160.20.128\",\"fqdn\":\"string\",\"protocol_fqdn\":\"string\"}],\"forwarders_only\":true}},\"gss_tsig_enabled\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"lame_ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"match_recursive_only\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":false},\"max_cache_ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"max_negative_ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":12},\"max_udp_size\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"minimal_responses\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"notify\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"query_acl\":{\"action\":\"deny\",\"display_name\":\"string\",\"source\":\"string\",\"value\":[{\"access\":\"allow\",\"acl\":\"string\",\"address\":\"89.160.20.128\",\"element\":\"any\",\"tsig_key\":{\"algorithm\":\"hmac_sha256\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}]},\"recursion_acl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":[{\"access\":\"deny\",\"acl\":\"string\",\"address\":\"89.160.20.128\",\"element\":\"tsig_key\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}]},\"recursion_enabled\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"synthesize_address_records_from_https\":{\"action\":\"inherit\",\"display_name\":\"string\",\"source\":\"string\",\"value\":true},\"transfer_acl\":{\"action\":\"inherit\",\"display_name\":\"string\",\"source\":\"string\",\"value\":[{\"access\":\"allow\",\"acl\":\"string\",\"address\":\"216.160.83.56\",\"element\":\"string\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}]},\"update_acl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":[{\"access\":\"allow\",\"acl\":\"string\",\"address\":\"216.160.83.56\",\"element\":\"acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}]},\"use_forwarders_for_subzones\":{\"action\":\"override\",\"display_name\":\"string\",\"source\":\"string\",\"value\":false},\"zone_authority\":{\"default_ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"expire\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"mname_block\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":{\"mname\":\"string\",\"protocol_mname\":\"dummy server\",\"use_default_mname\":true}},\"negative_ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"protocol_rname\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":\"string\"},\"refresh\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"retry\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0},\"rname\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":\"string\"}}},\"ip_spaces\":[\"string\"],\"lame_ttl\":0,\"match_clients_acl\":[{\"access\":\"deny\",\"acl\":\"string\",\"address\":\"81.2.69.192\",\"element\":\"any\",\"tsig_key\":{\"algorithm\":\"hmac_sha512\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"match_destinations_acl\":[{\"access\":\"allow\",\"acl\":\"Demo\",\"address\":\"81.2.69.192\",\"element\":\"string\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"string\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"match_recursive_only\":true,\"max_cache_ttl\":0,\"max_negative_ttl\":0,\"max_udp_size\":0,\"minimal_responses\":true,\"name\":\"string\",\"notify\":true,\"query_acl\":[{\"access\":\"string\",\"acl\":\"string\",\"address\":\"81.2.69.192\",\"element\":\"acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"Demo\",\"key\":\"string\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"recursion_acl\":[{\"access\":\"allow\",\"acl\":\"ACL\",\"address\":\"81.2.69.192\",\"element\":\"any\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"dummy\",\"key\":\"Demo\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"recursion_enabled\":true,\"synthesize_address_records_from_https\":false,\"tags\":{},\"transfer_acl\":[{\"access\":\"allow\",\"acl\":\"value\",\"address\":\"216.160.83.56\",\"element\":\"any\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"string\",\"key\":\"dummy\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"update_acl\":[{\"access\":\"allow\",\"acl\":\"name\",\"address\":\"216.160.83.56\",\"element\":\"acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"string\",\"key\":\"Test\",\"name\":\"string\",\"protocol_name\":\"string\",\"secret\":\"string\"}}],\"updated_at\":\"2022-07-15T06:55:25.978Z\",\"use_forwarders_for_subzones\":true,\"zone_authority\":{\"default_ttl\":0,\"expire\":0,\"mname\":\"string\",\"negative_ttl\":0,\"protocol_mname\":\"string\",\"protocol_rname\":\"string\",\"refresh\":0,\"retry\":0,\"rname\":\"string\",\"use_default_mname\":true}}", - "type": [ - "protocol" - ] - }, "related": { "hash": [ "hmac_sha256", @@ -643,7 +643,27 @@ }, { "@timestamp": "2022-08-16T09:24:24.231Z", - "bloxone_ddi": { + "dns": { + "answers": { + "ttl": 600 + } + }, + "ecs": { + "version": "8.4.0" + }, + "event": { + "category": [ + "network" + ], + "created": "2022-08-16T09:24:24.231Z", + "id": "dns/view/abcd-12acbd-1ab2-12abcd-1abcd33", + "kind": "event", + "original": "{\"add_edns_option_in_outgoing_query\":false,\"comment\":\"\",\"created_at\":\"2022-08-16T09:24:24.231424Z\",\"custom_root_ns\":[],\"custom_root_ns_enabled\":false,\"disabled\":false,\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_root_keys\":[{\"algorithm\":2,\"protocol_zone\":\".\",\"public_key\":\"abc12dc34/12abcd3242cdaaacd+/abd12cdacd4221cdacbdbdbdbd/abcAC23CBD22323abcddcba=/abcddcbdcda13411bdbddb=\",\"sep\":true,\"zone\":\".\"}],\"dnssec_trust_anchors\":[],\"dnssec_validate_expiry\":true,\"ecs_enabled\":false,\"ecs_forwarding\":false,\"ecs_prefix_v4\":24,\"ecs_prefix_v6\":56,\"ecs_zones\":[],\"edns_udp_size\":1232,\"forwarders\":[],\"forwarders_only\":false,\"gss_tsig_enabled\":false,\"id\":\"dns/view/abcd-12acbd-1ab2-12abcd-1abcd33\",\"inheritance_sources\":null,\"ip_spaces\":[\"ipam/ip_space/1abcd323-12abcd-12abcd-12ab-123badcd\"],\"lame_ttl\":600,\"match_clients_acl\":[{\"access\":\"allow\",\"acl\":null,\"address\":\"81.2.69.192\",\"element\":\"any\",\"tsig_key\":null}],\"match_destinations_acl\":[{\"access\":\"allow\",\"acl\":null,\"address\":\"81.2.69.192\",\"element\":\"any\",\"tsig_key\":null}],\"match_recursive_only\":false,\"max_cache_ttl\":604800,\"max_negative_ttl\":10800,\"max_udp_size\":1232,\"minimal_responses\":false,\"name\":\"test name\",\"notify\":false,\"query_acl\":[],\"recursion_acl\":[],\"recursion_enabled\":true,\"synthesize_address_records_from_https\":false,\"tags\":null,\"transfer_acl\":[],\"update_acl\":[],\"updated_at\":\"2022-08-16T09:24:24.231424Z\",\"use_forwarders_for_subzones\":true,\"zone_authority\":{\"default_ttl\":28800,\"expire\":2419200,\"mname\":\"ns.b1ddi\",\"negative_ttl\":900,\"protocol_mname\":\"ns.b1ddi\",\"protocol_rname\":\"hostmaster\",\"refresh\":10800,\"retry\":3600,\"rname\":\"hostmaster\",\"use_default_mname\":true}}", + "type": [ + "protocol" + ] + }, + "infoblox_bloxone_ddi": { "dns_config": { "add_edns": { "option_in": { @@ -706,7 +726,7 @@ "max_negative_ttl": 10800, "max_udp_size": 1232, "minimal_responses": false, - "name": "Demo", + "name": "test name", "notify": false, "recursion_enabled": true, "synthesize": { @@ -730,26 +750,6 @@ } } }, - "dns": { - "answers": { - "ttl": 600 - } - }, - "ecs": { - "version": "8.4.0" - }, - "event": { - "category": [ - "network" - ], - "created": "2022-08-16T09:24:24.231Z", - "id": "dns/view/abcd-12acbd-1ab2-12abcd-1abcd33", - "kind": "event", - "original": "{\"add_edns_option_in_outgoing_query\":false,\"comment\":\"\",\"created_at\":\"2022-08-16T09:24:24.231424Z\",\"custom_root_ns\":[],\"custom_root_ns_enabled\":false,\"disabled\":false,\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_root_keys\":[{\"algorithm\":2,\"protocol_zone\":\".\",\"public_key\":\"abc12dc34/12abcd3242cdaaacd+/abd12cdacd4221cdacbdbdbdbd/abcAC23CBD22323abcddcba=/abcddcbdcda13411bdbddb=\",\"sep\":true,\"zone\":\".\"}],\"dnssec_trust_anchors\":[],\"dnssec_validate_expiry\":true,\"ecs_enabled\":false,\"ecs_forwarding\":false,\"ecs_prefix_v4\":24,\"ecs_prefix_v6\":56,\"ecs_zones\":[],\"edns_udp_size\":1232,\"forwarders\":[],\"forwarders_only\":false,\"gss_tsig_enabled\":false,\"id\":\"dns/view/abcd-12acbd-1ab2-12abcd-1abcd33\",\"inheritance_sources\":null,\"ip_spaces\":[\"ipam/ip_space/1abcd323-12abcd-12abcd-12ab-123badcd\"],\"lame_ttl\":600,\"match_clients_acl\":[{\"access\":\"allow\",\"acl\":null,\"address\":\"81.2.69.192\",\"element\":\"any\",\"tsig_key\":null}],\"match_destinations_acl\":[{\"access\":\"allow\",\"acl\":null,\"address\":\"81.2.69.192\",\"element\":\"any\",\"tsig_key\":null}],\"match_recursive_only\":false,\"max_cache_ttl\":604800,\"max_negative_ttl\":10800,\"max_udp_size\":1232,\"minimal_responses\":false,\"name\":\"Demo\",\"notify\":false,\"query_acl\":[],\"recursion_acl\":[],\"recursion_enabled\":true,\"synthesize_address_records_from_https\":false,\"tags\":null,\"transfer_acl\":[],\"update_acl\":[],\"updated_at\":\"2022-08-16T09:24:24.231424Z\",\"use_forwarders_for_subzones\":true,\"zone_authority\":{\"default_ttl\":28800,\"expire\":2419200,\"mname\":\"ns.b1ddi\",\"negative_ttl\":900,\"protocol_mname\":\"ns.b1ddi\",\"protocol_rname\":\"hostmaster\",\"refresh\":10800,\"retry\":3600,\"rname\":\"hostmaster\",\"use_default_mname\":true}}", - "type": [ - "protocol" - ] - }, "related": { "ip": [ "81.2.69.192" diff --git a/packages/bloxone_ddi/data_stream/dns_config/_dev/test/system/test-default-config.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_config/_dev/test/system/test-default-config.yml similarity index 85% rename from packages/bloxone_ddi/data_stream/dns_config/_dev/test/system/test-default-config.yml rename to packages/infoblox_bloxone_ddi/data_stream/dns_config/_dev/test/system/test-default-config.yml index 5188dac65d..b4145719d0 100644 --- a/packages/bloxone_ddi/data_stream/dns_config/_dev/test/system/test-default-config.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_config/_dev/test/system/test-default-config.yml @@ -1,5 +1,5 @@ input: httpjson -service: bloxone-ddi +service: infoblox-bloxone-ddi vars: url: http://{{Hostname}}:{{Port}} api_key: xxxx diff --git a/packages/bloxone_ddi/data_stream/dns_config/agent/stream/httpjson.yml.hbs b/packages/infoblox_bloxone_ddi/data_stream/dns_config/agent/stream/httpjson.yml.hbs similarity index 100% rename from packages/bloxone_ddi/data_stream/dns_config/agent/stream/httpjson.yml.hbs rename to packages/infoblox_bloxone_ddi/data_stream/dns_config/agent/stream/httpjson.yml.hbs diff --git a/packages/bloxone_ddi/data_stream/dns_config/elasticsearch/ingest_pipeline/default.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_config/elasticsearch/ingest_pipeline/default.yml similarity index 78% rename from packages/bloxone_ddi/data_stream/dns_config/elasticsearch/ingest_pipeline/default.yml rename to packages/infoblox_bloxone_ddi/data_stream/dns_config/elasticsearch/ingest_pipeline/default.yml index a4d767240d..0fe39506db 100644 --- a/packages/bloxone_ddi/data_stream/dns_config/elasticsearch/ingest_pipeline/default.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_config/elasticsearch/ingest_pipeline/default.yml @@ -29,7 +29,7 @@ processors: ignore_missing: true - convert: field: json.add_edns_option_in_outgoing_query - target_field: bloxone_ddi.dns_config.add_edns.option_in.outgoing_query + target_field: infoblox_bloxone_ddi.dns_config.add_edns.option_in.outgoing_query if: ctx.json?.add_edns_option_in_outgoing_query != '' type: boolean ignore_missing: true @@ -39,11 +39,11 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.comment - target_field: bloxone_ddi.dns_config.comment + target_field: infoblox_bloxone_ddi.dns_config.comment ignore_missing: true - date: field: json.created_at - target_field: bloxone_ddi.dns_config.created_at + target_field: infoblox_bloxone_ddi.dns_config.created_at if: ctx.json?.created_at != null && ctx.json.created_at != '' formats: - ISO8601 @@ -53,7 +53,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - set: field: event.created - copy_from: bloxone_ddi.dns_config.created_at + copy_from: infoblox_bloxone_ddi.dns_config.created_at ignore_failure: true - foreach: field: json.custom_root_ns @@ -94,11 +94,11 @@ processors: ignore_failure: true - rename: field: json.custom_root_ns - target_field: bloxone_ddi.dns_config.custom_root_ns + target_field: infoblox_bloxone_ddi.dns_config.custom_root_ns ignore_missing: true - convert: field: json.custom_root_ns_enabled - target_field: bloxone_ddi.dns_config.custom_root_ns_enabled + target_field: infoblox_bloxone_ddi.dns_config.custom_root_ns_enabled if: ctx.json?.custom_root_ns_enabled != '' type: boolean ignore_missing: true @@ -108,7 +108,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.disabled - target_field: bloxone_ddi.dns_config.disabled + target_field: infoblox_bloxone_ddi.dns_config.disabled if: ctx.json?.disabled != '' type: boolean ignore_missing: true @@ -118,7 +118,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.dnssec_enable_validation - target_field: bloxone_ddi.dns_config.dnssec.enable_validation + target_field: infoblox_bloxone_ddi.dns_config.dnssec.enable_validation if: ctx.json?.dnssec_enable_validation != '' type: boolean ignore_missing: true @@ -128,7 +128,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.dnssec_enabled - target_field: bloxone_ddi.dns_config.dnssec.enabled + target_field: infoblox_bloxone_ddi.dns_config.dnssec.enabled if: ctx.json?.dnssec_enabled != '' type: boolean ignore_missing: true @@ -190,7 +190,7 @@ processors: ignore_failure: true - rename: field: json.dnssec_root_keys - target_field: bloxone_ddi.dns_config.dnssec.root_keys + target_field: infoblox_bloxone_ddi.dns_config.dnssec.root_keys ignore_missing: true - foreach: field: json.dnssec_trust_anchors @@ -236,11 +236,11 @@ processors: ignore_failure: true - rename: field: json.dnssec_trust_anchors - target_field: bloxone_ddi.dns_config.dnssec.trust_anchors + target_field: infoblox_bloxone_ddi.dns_config.dnssec.trust_anchors ignore_missing: true - convert: field: json.dnssec_validate_expiry - target_field: bloxone_ddi.dns_config.dnssec.validate_expiry + target_field: infoblox_bloxone_ddi.dns_config.dnssec.validate_expiry if: ctx.json?.dnssec_validate_expiry != '' type: boolean ignore_missing: true @@ -250,7 +250,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.ecs_enabled - target_field: bloxone_ddi.dns_config.ecs.enabled + target_field: infoblox_bloxone_ddi.dns_config.ecs.enabled if: ctx.json?.ecs_enabled != '' type: boolean ignore_missing: true @@ -260,7 +260,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.ecs_forwarding - target_field: bloxone_ddi.dns_config.ecs.forwarding + target_field: infoblox_bloxone_ddi.dns_config.ecs.forwarding if: ctx.json?.ecs_forwarding != '' type: boolean ignore_missing: true @@ -270,7 +270,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.ecs_prefix_v4 - target_field: bloxone_ddi.dns_config.ecs.prefix_v4 + target_field: infoblox_bloxone_ddi.dns_config.ecs.prefix_v4 if: ctx.json?.ecs_prefix_v4 != '' type: long ignore_missing: true @@ -280,7 +280,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.ecs_prefix_v6 - target_field: bloxone_ddi.dns_config.ecs.prefix_v6 + target_field: infoblox_bloxone_ddi.dns_config.ecs.prefix_v6 if: ctx.json?.ecs_prefix_v6 != '' type: long ignore_missing: true @@ -300,11 +300,11 @@ processors: ignore_failure: true - rename: field: json.ecs_zones - target_field: bloxone_ddi.dns_config.ecs.zones + target_field: infoblox_bloxone_ddi.dns_config.ecs.zones ignore_missing: true - convert: field: json.edns_udp_size - target_field: bloxone_ddi.dns_config.edns.udp.size + target_field: infoblox_bloxone_ddi.dns_config.edns.udp.size if: ctx.json?.edns_udp_size != '' type: long ignore_missing: true @@ -351,11 +351,11 @@ processors: ignore_failure: true - rename: field: json.forwarders - target_field: bloxone_ddi.dns_config.forwarders + target_field: infoblox_bloxone_ddi.dns_config.forwarders ignore_missing: true - convert: field: json.forwarders_only - target_field: bloxone_ddi.dns_config.forwarders_only + target_field: infoblox_bloxone_ddi.dns_config.forwarders_only if: ctx.json?.forwarders_only != '' type: boolean ignore_missing: true @@ -365,7 +365,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.gss_tsig_enabled - target_field: bloxone_ddi.dns_config.gss_tsig_enabled + target_field: infoblox_bloxone_ddi.dns_config.gss_tsig_enabled if: ctx.json?.gss_tsig_enabled != '' type: boolean ignore_missing: true @@ -375,27 +375,27 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.id - target_field: bloxone_ddi.dns_config.id + target_field: infoblox_bloxone_ddi.dns_config.id ignore_missing: true - set: field: event.id - copy_from: bloxone_ddi.dns_config.id + copy_from: infoblox_bloxone_ddi.dns_config.id ignore_failure: true - rename: field: json.inheritance_sources.add_edns_option_in_outgoing_query.action - target_field: bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.action ignore_missing: true - rename: field: json.inheritance_sources.add_edns_option_in_outgoing_query.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.display.name ignore_missing: true - rename: field: json.inheritance_sources.add_edns_option_in_outgoing_query.source - target_field: bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.source ignore_missing: true - convert: field: json.inheritance_sources.add_edns_option_in_outgoing_query.value - target_field: bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.value if: ctx.json?.inheritance_sources?.add_edns_option_in_outgoing_query?.value != '' type: boolean ignore_missing: true @@ -405,15 +405,15 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.custom_root_ns_block.action - target_field: bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.action ignore_missing: true - rename: field: json.inheritance_sources.custom_root_ns_block.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.display.name ignore_missing: true - rename: field: json.inheritance_sources.custom_root_ns_block.source - target_field: bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.source ignore_missing: true - foreach: field: json.inheritance_sources.custom_root_ns_block.value.custom_root_ns @@ -454,11 +454,11 @@ processors: ignore_failure: true - rename: field: json.inheritance_sources.custom_root_ns_block.value.custom_root_ns - target_field: bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value ignore_missing: true - convert: field: json.inheritance_sources.custom_root_ns_block.value.custom_root_ns_enabled - target_field: bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value_enabled + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value_enabled if: ctx.json?.inheritance_sources?.custom_root_ns_block?.value?.custom_root_ns_enabled != '' type: boolean ignore_missing: true @@ -468,19 +468,19 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.dnssec_validation_block.action - target_field: bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.action ignore_missing: true - rename: field: json.inheritance_sources.dnssec_validation_block.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.display.name ignore_missing: true - rename: field: json.inheritance_sources.dnssec_validation_block.source - target_field: bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.source ignore_missing: true - convert: field: json.inheritance_sources.dnssec_validation_block.value.dnssec_enable_validation - target_field: bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.enable + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.enable if: ctx.json?.inheritance_sources?.dnssec_validation_block?.value?.dnssec_enable_validation != '' type: boolean ignore_missing: true @@ -490,7 +490,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.inheritance_sources.dnssec_validation_block.value.dnssec_enabled - target_field: bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.enabled + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.enabled if: ctx.json?.inheritance_sources?.dnssec_validation_block?.value?.dnssec_enabled != '' type: boolean ignore_missing: true @@ -542,11 +542,11 @@ processors: ignore_failure: true - rename: field: json.inheritance_sources.dnssec_validation_block.value.dnssec_trust_anchors - target_field: bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors ignore_missing: true - convert: field: json.inheritance_sources.dnssec_validation_block.value.dnssec_validate_expiry - target_field: bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.validate_expiry + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.validate_expiry if: ctx.json?.inheritance_sources?.dnssec_validation_block?.value?.dnssec_validate_expiry != '' type: boolean ignore_missing: true @@ -556,19 +556,19 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.ecs_block.action - target_field: bloxone_ddi.dns_config.inheritance.sources.ecs.block.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.action ignore_missing: true - rename: field: json.inheritance_sources.ecs_block.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.ecs.block.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.display.name ignore_missing: true - rename: field: json.inheritance_sources.ecs_block.source - target_field: bloxone_ddi.dns_config.inheritance.sources.ecs.block.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.source ignore_missing: true - convert: field: json.inheritance_sources.ecs_block.value.ecs_enabled - target_field: bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.enabled + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.enabled if: ctx.json?.inheritance_sources?.ecs_block?.value?.ecs_enabled != '' type: boolean ignore_missing: true @@ -578,7 +578,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.inheritance_sources.ecs_block.value.ecs_forwarding - target_field: bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.forwarding + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.forwarding if: ctx.json?.inheritance_sources?.ecs_block?.value?.ecs_forwarding != '' type: boolean ignore_missing: true @@ -588,7 +588,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.inheritance_sources.ecs_block.value.ecs_prefix_v4 - target_field: bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.prefix_v4 + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.prefix_v4 if: ctx.json?.inheritance_sources?.ecs_block?.value?.ecs_prefix_v4 != '' type: long ignore_missing: true @@ -598,7 +598,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.inheritance_sources.ecs_block.value.ecs_prefix_v6 - target_field: bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.prefix_v6 + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.prefix_v6 if: ctx.json?.inheritance_sources?.ecs_block?.value?.ecs_prefix_v6 != '' type: long ignore_missing: true @@ -618,23 +618,23 @@ processors: ignore_failure: true - rename: field: json.inheritance_sources.ecs_block.value.ecs_zones - target_field: bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.zones + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.zones ignore_missing: true - rename: field: json.inheritance_sources.edns_udp_size.action - target_field: bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.action ignore_missing: true - rename: field: json.inheritance_sources.edns_udp_size.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.display.name ignore_missing: true - rename: field: json.inheritance_sources.edns_udp_size.source - target_field: bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.source ignore_missing: true - convert: field: json.inheritance_sources.edns_udp_size.value - target_field: bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.value if: ctx.json?.inheritance_sources?.edns_udp_size?.value != '' type: long ignore_missing: true @@ -644,15 +644,15 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.forwarders_block.action - target_field: bloxone_ddi.dns_config.inheritance.sources.forwarders.block.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.forwarders.block.action ignore_missing: true - rename: field: json.inheritance_sources.forwarders_block.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.forwarders.block.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.forwarders.block.display.name ignore_missing: true - rename: field: json.inheritance_sources.forwarders_block.source - target_field: bloxone_ddi.dns_config.inheritance.sources.forwarders.block.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.forwarders.block.source ignore_missing: true - foreach: field: json.inheritance_sources.forwarders_block.value.forwarders @@ -693,11 +693,11 @@ processors: ignore_failure: true - rename: field: json.inheritance_sources.forwarders_block.value.forwarders - target_field: bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value ignore_missing: true - convert: field: json.inheritance_sources.forwarders_block.value.forwarders_only - target_field: bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value_only + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value_only if: ctx.json?.inheritance_sources?.forwarders_block?.value?.forwarders_only != '' type: boolean ignore_missing: true @@ -707,19 +707,19 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.gss_tsig_enabled.action - target_field: bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.action ignore_missing: true - rename: field: json.inheritance_sources.gss_tsig_enabled.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.display.name ignore_missing: true - rename: field: json.inheritance_sources.gss_tsig_enabled.source - target_field: bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.source ignore_missing: true - convert: field: json.inheritance_sources.gss_tsig_enabled.value - target_field: bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.value if: ctx.json?.inheritance_sources?.gss_tsig_enabled?.value != '' type: boolean ignore_missing: true @@ -729,19 +729,19 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.lame_ttl.action - target_field: bloxone_ddi.dns_config.inheritance.sources.lame_ttl.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.lame_ttl.action ignore_missing: true - rename: field: json.inheritance_sources.lame_ttl.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.lame_ttl.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.lame_ttl.display.name ignore_missing: true - rename: field: json.inheritance_sources.lame_ttl.source - target_field: bloxone_ddi.dns_config.inheritance.sources.lame_ttl.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.lame_ttl.source ignore_missing: true - convert: field: json.inheritance_sources.lame_ttl.value - target_field: bloxone_ddi.dns_config.inheritance.sources.lame_ttl.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.lame_ttl.value if: ctx.json?.inheritance_sources?.lame_ttl?.value != '' type: long ignore_missing: true @@ -751,19 +751,19 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.match_recursive_only.action - target_field: bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.action ignore_missing: true - rename: field: json.inheritance_sources.match_recursive_only.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.display.name ignore_missing: true - rename: field: json.inheritance_sources.match_recursive_only.source - target_field: bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.source ignore_missing: true - convert: field: json.inheritance_sources.match_recursive_only.value - target_field: bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.value if: ctx.json?.inheritance_sources?.match_recursive_only?.value != '' type: boolean ignore_missing: true @@ -773,19 +773,19 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.max_cache_ttl.action - target_field: bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.action ignore_missing: true - rename: field: json.inheritance_sources.max_cache_ttl.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.display.name ignore_missing: true - rename: field: json.inheritance_sources.max_cache_ttl.source - target_field: bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.source ignore_missing: true - convert: field: json.inheritance_sources.max_cache_ttl.value - target_field: bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.value if: ctx.json?.inheritance_sources?.max_cache_ttl?.value != '' type: long ignore_missing: true @@ -795,19 +795,19 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.max_negative_ttl.action - target_field: bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.action ignore_missing: true - rename: field: json.inheritance_sources.max_negative_ttl.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.display.name ignore_missing: true - rename: field: json.inheritance_sources.max_negative_ttl.source - target_field: bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.source ignore_missing: true - convert: field: json.inheritance_sources.max_negative_ttl.value - target_field: bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.value if: ctx.json?.inheritance_sources?.max_negative_ttl?.value != '' type: long ignore_missing: true @@ -817,19 +817,19 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.max_udp_size.action - target_field: bloxone_ddi.dns_config.inheritance.sources.max_udp_size.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.max_udp_size.action ignore_missing: true - rename: field: json.inheritance_sources.max_udp_size.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.max_udp_size.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.max_udp_size.display.name ignore_missing: true - rename: field: json.inheritance_sources.max_udp_size.source - target_field: bloxone_ddi.dns_config.inheritance.sources.max_udp_size.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.max_udp_size.source ignore_missing: true - convert: field: json.inheritance_sources.max_udp_size.value - target_field: bloxone_ddi.dns_config.inheritance.sources.max_udp_size.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.max_udp_size.value if: ctx.json?.inheritance_sources?.max_udp_size?.value != '' type: long ignore_missing: true @@ -839,19 +839,19 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.minimal_responses.action - target_field: bloxone_ddi.dns_config.inheritance.sources.minimal_responses.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.minimal_responses.action ignore_missing: true - rename: field: json.inheritance_sources.minimal_responses.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.minimal_responses.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.minimal_responses.display.name ignore_missing: true - rename: field: json.inheritance_sources.minimal_responses.source - target_field: bloxone_ddi.dns_config.inheritance.sources.minimal_responses.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.minimal_responses.source ignore_missing: true - convert: field: json.inheritance_sources.minimal_responses.value - target_field: bloxone_ddi.dns_config.inheritance.sources.minimal_responses.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.minimal_responses.value if: ctx.json?.inheritance_sources?.minimal_responses?.value != '' type: boolean ignore_missing: true @@ -861,19 +861,19 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.notify.action - target_field: bloxone_ddi.dns_config.inheritance.sources.notify.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.notify.action ignore_missing: true - rename: field: json.inheritance_sources.notify.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.notify.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.notify.display.name ignore_missing: true - rename: field: json.inheritance_sources.notify.source - target_field: bloxone_ddi.dns_config.inheritance.sources.notify.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.notify.source ignore_missing: true - convert: field: json.inheritance_sources.notify.value - target_field: bloxone_ddi.dns_config.inheritance.sources.notify.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.notify.value if: ctx.json?.inheritance_sources?.notify?.value != '' type: boolean ignore_missing: true @@ -883,15 +883,15 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.query_acl.action - target_field: bloxone_ddi.dns_config.inheritance.sources.query_acl.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.action ignore_missing: true - rename: field: json.inheritance_sources.query_acl.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.query_acl.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.display.name ignore_missing: true - rename: field: json.inheritance_sources.query_acl.source - target_field: bloxone_ddi.dns_config.inheritance.sources.query_acl.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.source ignore_missing: true - foreach: field: json.inheritance_sources.query_acl.value @@ -953,19 +953,19 @@ processors: ignore_failure: true - rename: field: json.inheritance_sources.query_acl.value - target_field: bloxone_ddi.dns_config.inheritance.sources.query_acl.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value ignore_missing: true - rename: field: json.inheritance_sources.recursion_acl.action - target_field: bloxone_ddi.dns_config.inheritance.sources.recursion_acl.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.action ignore_missing: true - rename: field: json.inheritance_sources.recursion_acl.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.recursion_acl.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.display.name ignore_missing: true - rename: field: json.inheritance_sources.recursion_acl.source - target_field: bloxone_ddi.dns_config.inheritance.sources.recursion_acl.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.source ignore_missing: true - foreach: field: json.inheritance_sources.recursion_acl.value @@ -1027,23 +1027,23 @@ processors: ignore_failure: true - rename: field: json.inheritance_sources.recursion_acl.value - target_field: bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value ignore_missing: true - rename: field: json.inheritance_sources.recursion_enabled.action - target_field: bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.action ignore_missing: true - rename: field: json.inheritance_sources.recursion_enabled.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.display.name ignore_missing: true - rename: field: json.inheritance_sources.recursion_enabled.source - target_field: bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.source ignore_missing: true - convert: field: json.inheritance_sources.recursion_enabled.value - target_field: bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.value if: ctx.json?.inheritance_sources?.recursion_enabled?.value != '' type: boolean ignore_missing: true @@ -1053,19 +1053,19 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.synthesize_address_records_from_https.action - target_field: bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.action ignore_missing: true - rename: field: json.inheritance_sources.synthesize_address_records_from_https.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.display.name ignore_missing: true - rename: field: json.inheritance_sources.synthesize_address_records_from_https.source - target_field: bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.name ignore_missing: true - convert: field: json.inheritance_sources.synthesize_address_records_from_https.value - target_field: bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.value if: ctx.json?.inheritance_sources?.synthesize_address_records_from_https?.value != '' type: boolean ignore_missing: true @@ -1075,15 +1075,15 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.transfer_acl.action - target_field: bloxone_ddi.dns_config.inheritance.sources.transfer_acl.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.action ignore_missing: true - rename: field: json.inheritance_sources.transfer_acl.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.transfer_acl.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.display.name ignore_missing: true - rename: field: json.inheritance_sources.transfer_acl.source - target_field: bloxone_ddi.dns_config.inheritance.sources.transfer_acl.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.source ignore_missing: true - foreach: field: json.inheritance_sources.transfer_acl.value @@ -1145,19 +1145,19 @@ processors: ignore_failure: true - rename: field: json.inheritance_sources.transfer_acl.value - target_field: bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value ignore_missing: true - rename: field: json.inheritance_sources.update_acl.action - target_field: bloxone_ddi.dns_config.inheritance.sources.update_acl.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.action ignore_missing: true - rename: field: json.inheritance_sources.update_acl.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.update_acl.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.display.name ignore_missing: true - rename: field: json.inheritance_sources.update_acl.source - target_field: bloxone_ddi.dns_config.inheritance.sources.update_acl.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.source ignore_missing: true - foreach: field: json.inheritance_sources.update_acl.value @@ -1219,23 +1219,23 @@ processors: ignore_failure: true - rename: field: json.inheritance_sources.update_acl.value - target_field: bloxone_ddi.dns_config.inheritance.sources.update_acl.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value ignore_missing: true - rename: field: json.inheritance_sources.use_forwarders_for_subzones.action - target_field: bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.action ignore_missing: true - rename: field: json.inheritance_sources.use_forwarders_for_subzones.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.display.name ignore_missing: true - rename: field: json.inheritance_sources.use_forwarders_for_subzones.source - target_field: bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.source ignore_missing: true - convert: field: json.inheritance_sources.use_forwarders_for_subzones.value - target_field: bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.value if: ctx.json?.inheritance_sources?.use_forwarders_for_subzones?.value != '' type: boolean ignore_missing: true @@ -1245,19 +1245,19 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.zone_authority.default_ttl.action - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.action ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.default_ttl.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.display.name ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.default_ttl.source - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.source ignore_missing: true - convert: field: json.inheritance_sources.zone_authority.default_ttl.value - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.value if: ctx.json?.inheritance_sources?.zone_authority?.default_ttl?.value != '' type: long ignore_missing: true @@ -1267,19 +1267,19 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.zone_authority.expire.action - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.action ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.expire.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.display.name ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.expire.source - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.source ignore_missing: true - convert: field: json.inheritance_sources.zone_authority.expire.value - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.value if: ctx.json?.inheritance_sources?.zone_authority?.expire?.value != '' type: long ignore_missing: true @@ -1289,27 +1289,27 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.zone_authority.mname_block.action - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.action ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.mname_block.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.display.name ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.mname_block.source - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.source ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.mname_block.value.mname - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block_value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block_value ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.mname_block.value.protocol_mname - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.value.protocol.mname + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.value.protocol.mname ignore_missing: true - convert: field: json.inheritance_sources.zone_authority.mname_block.value.use_default_mname - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.value.isdefault + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.value.isdefault if: ctx.json?.inheritance_sources?.zone_authority?.mname_block?.value?.use_default_mname != '' type: boolean ignore_missing: true @@ -1319,19 +1319,19 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.zone_authority.negative_ttl.action - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.action ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.negative_ttl.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.display.name ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.negative_ttl.source - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.source ignore_missing: true - convert: field: json.inheritance_sources.zone_authority.negative_ttl.value - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.value if: ctx.json?.inheritance_sources?.zone_authority?.negative_ttl?.value != '' type: long ignore_missing: true @@ -1341,35 +1341,35 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.zone_authority.protocol_rname.action - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.action ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.protocol_rname.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.display.name ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.protocol_rname.source - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.source ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.protocol_rname.value - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.value ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.refresh.action - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.action ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.refresh.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.display.name ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.refresh.source - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.source ignore_missing: true - convert: field: json.inheritance_sources.zone_authority.refresh.value - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.value if: ctx.json?.inheritance_sources?.zone_authority?.refresh?.value != '' type: long ignore_missing: true @@ -1379,19 +1379,19 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.zone_authority.retry.action - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.action ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.retry.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.display.name ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.retry.source - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.source ignore_missing: true - convert: field: json.inheritance_sources.zone_authority.retry.value - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.value if: ctx.json?.inheritance_sources?.zone_authority?.retry?.value != '' type: long ignore_missing: true @@ -1401,27 +1401,27 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.inheritance_sources.zone_authority.rname.action - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.action + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.action ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.rname.display_name - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.display.name + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.display.name ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.rname.source - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.source + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.source ignore_missing: true - rename: field: json.inheritance_sources.zone_authority.rname.value - target_field: bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.value + target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.value ignore_missing: true - rename: field: json.ip_spaces - target_field: bloxone_ddi.dns_config.ip_spaces + target_field: infoblox_bloxone_ddi.dns_config.ip_spaces ignore_missing: true - convert: field: json.lame_ttl - target_field: bloxone_ddi.dns_config.lame_ttl + target_field: infoblox_bloxone_ddi.dns_config.lame_ttl if: ctx.json?.lame_ttl != '' type: long ignore_missing: true @@ -1431,7 +1431,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - set: field: dns.answers.ttl - copy_from: bloxone_ddi.dns_config.lame_ttl + copy_from: infoblox_bloxone_ddi.dns_config.lame_ttl ignore_failure: true - foreach: field: json.match_clients_acl @@ -1503,7 +1503,7 @@ processors: ignore_failure: true - rename: field: json.match_clients_acl - target_field: bloxone_ddi.dns_config.match_clients_acl + target_field: infoblox_bloxone_ddi.dns_config.match_clients_acl ignore_missing: true - foreach: field: json.match_destinations_acl @@ -1575,11 +1575,11 @@ processors: ignore_failure: true - rename: field: json.match_destinations_acl - target_field: bloxone_ddi.dns_config.match_destinations_acl + target_field: infoblox_bloxone_ddi.dns_config.match_destinations_acl ignore_missing: true - convert: field: json.match_recursive_only - target_field: bloxone_ddi.dns_config.match_recursive_only + target_field: infoblox_bloxone_ddi.dns_config.match_recursive_only if: ctx.json?.match_recursive_only != '' type: boolean ignore_missing: true @@ -1589,7 +1589,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.max_cache_ttl - target_field: bloxone_ddi.dns_config.max_cache_ttl + target_field: infoblox_bloxone_ddi.dns_config.max_cache_ttl if: ctx.json?.max_cache_ttl != '' type: long ignore_missing: true @@ -1599,7 +1599,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.max_negative_ttl - target_field: bloxone_ddi.dns_config.max_negative_ttl + target_field: infoblox_bloxone_ddi.dns_config.max_negative_ttl if: ctx.json?.max_negative_ttl != '' type: long ignore_missing: true @@ -1609,7 +1609,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.max_udp_size - target_field: bloxone_ddi.dns_config.max_udp_size + target_field: infoblox_bloxone_ddi.dns_config.max_udp_size if: ctx.json?.max_udp_size != '' type: long ignore_missing: true @@ -1619,7 +1619,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.minimal_responses - target_field: bloxone_ddi.dns_config.minimal_responses + target_field: infoblox_bloxone_ddi.dns_config.minimal_responses if: ctx.json?.minimal_responses != '' type: boolean ignore_missing: true @@ -1629,11 +1629,11 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.name - target_field: bloxone_ddi.dns_config.name + target_field: infoblox_bloxone_ddi.dns_config.name ignore_missing: true - convert: field: json.notify - target_field: bloxone_ddi.dns_config.notify + target_field: infoblox_bloxone_ddi.dns_config.notify if: ctx.json?.notify != '' type: boolean ignore_missing: true @@ -1711,7 +1711,7 @@ processors: ignore_failure: true - rename: field: json.query_acl - target_field: bloxone_ddi.dns_config.query_acl + target_field: infoblox_bloxone_ddi.dns_config.query_acl ignore_missing: true - foreach: field: json.recursion_acl @@ -1783,11 +1783,11 @@ processors: ignore_failure: true - rename: field: json.recursion_acl - target_field: bloxone_ddi.dns_config.recursion_acl + target_field: infoblox_bloxone_ddi.dns_config.recursion_acl ignore_missing: true - convert: field: json.recursion_enabled - target_field: bloxone_ddi.dns_config.recursion_enabled + target_field: infoblox_bloxone_ddi.dns_config.recursion_enabled if: ctx.json?.recursion_enabled != '' type: boolean ignore_missing: true @@ -1797,7 +1797,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.synthesize_address_records_from_https - target_field: bloxone_ddi.dns_config.synthesize.address_records_from_https + target_field: infoblox_bloxone_ddi.dns_config.synthesize.address_records_from_https if: ctx.json?.synthesize_address_records_from_https != '' type: boolean ignore_missing: true @@ -1807,7 +1807,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.tags - target_field: bloxone_ddi.dns_config.tags + target_field: infoblox_bloxone_ddi.dns_config.tags ignore_missing: true - foreach: field: json.transfer_acl @@ -1879,7 +1879,7 @@ processors: ignore_failure: true - rename: field: json.transfer_acl - target_field: bloxone_ddi.dns_config.transfer_acl + target_field: infoblox_bloxone_ddi.dns_config.transfer_acl ignore_missing: true - foreach: field: json.update_acl @@ -1951,11 +1951,11 @@ processors: ignore_failure: true - rename: field: json.update_acl - target_field: bloxone_ddi.dns_config.update_acl + target_field: infoblox_bloxone_ddi.dns_config.update_acl ignore_missing: true - date: field: json.updated_at - target_field: bloxone_ddi.dns_config.updated_at + target_field: infoblox_bloxone_ddi.dns_config.updated_at if: ctx.json?.updated_at != null && ctx.json.updated_at != '' formats: - ISO8601 @@ -1965,11 +1965,11 @@ processors: value: '{{{_ingest.on_failure_message}}}' - set: field: '@timestamp' - copy_from: bloxone_ddi.dns_config.updated_at + copy_from: infoblox_bloxone_ddi.dns_config.updated_at ignore_failure: true - convert: field: json.use_forwarders_for_subzones - target_field: bloxone_ddi.dns_config.use_forwarders_for_subzones + target_field: infoblox_bloxone_ddi.dns_config.use_forwarders_for_subzones if: ctx.json?.use_forwarders_for_subzones != '' type: boolean ignore_missing: true @@ -1979,7 +1979,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.zone_authority.default_ttl - target_field: bloxone_ddi.dns_config.zone_authority.default_ttl + target_field: infoblox_bloxone_ddi.dns_config.zone_authority.default_ttl if: ctx.json?.zone_authority?.default_ttl != '' type: long ignore_missing: true @@ -1989,7 +1989,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.zone_authority.expire - target_field: bloxone_ddi.dns_config.zone_authority.expire + target_field: infoblox_bloxone_ddi.dns_config.zone_authority.expire if: ctx.json?.zone_authority?.expire != '' type: long ignore_missing: true @@ -1999,11 +1999,11 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.zone_authority.mname - target_field: bloxone_ddi.dns_config.zone_authority.mname + target_field: infoblox_bloxone_ddi.dns_config.zone_authority.mname ignore_missing: true - convert: field: json.zone_authority.negative_ttl - target_field: bloxone_ddi.dns_config.zone_authority.negative_ttl + target_field: infoblox_bloxone_ddi.dns_config.zone_authority.negative_ttl if: ctx.json?.zone_authority?.negative_ttl != '' type: long ignore_missing: true @@ -2013,15 +2013,15 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.zone_authority.protocol_mname - target_field: bloxone_ddi.dns_config.zone_authority.protocol.mname + target_field: infoblox_bloxone_ddi.dns_config.zone_authority.protocol.mname ignore_missing: true - rename: field: json.zone_authority.protocol_rname - target_field: bloxone_ddi.dns_config.zone_authority.protocol.rname + target_field: infoblox_bloxone_ddi.dns_config.zone_authority.protocol.rname ignore_missing: true - convert: field: json.zone_authority.refresh - target_field: bloxone_ddi.dns_config.zone_authority.refresh + target_field: infoblox_bloxone_ddi.dns_config.zone_authority.refresh if: ctx.json?.zone_authority?.refresh != '' type: long ignore_missing: true @@ -2031,7 +2031,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.zone_authority.retry - target_field: bloxone_ddi.dns_config.zone_authority.retry + target_field: infoblox_bloxone_ddi.dns_config.zone_authority.retry if: ctx.json?.zone_authority?.retry != '' type: long ignore_missing: true @@ -2041,11 +2041,11 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.zone_authority.rname - target_field: bloxone_ddi.dns_config.zone_authority.rname + target_field: infoblox_bloxone_ddi.dns_config.zone_authority.rname ignore_missing: true - convert: field: json.zone_authority.use_default_mname - target_field: bloxone_ddi.dns_config.zone_authority.use_default_mname + target_field: infoblox_bloxone_ddi.dns_config.zone_authority.use_default_mname if: ctx.json?.zone_authority?.use_default_mname != '' type: boolean ignore_missing: true @@ -2058,11 +2058,11 @@ processors: ignore_missing: true - remove: field: - - bloxone_ddi.dns_config.updated_at - - bloxone_ddi.dns_config.lame_ttl - - bloxone_ddi.dns_config.created_at - - bloxone_ddi.dns_config.id - if: ctx.tags == null || !ctx.tags.contains('preserve_duplicate_custom_fields') + - infoblox_bloxone_ddi.dns_config.updated_at + - infoblox_bloxone_ddi.dns_config.lame_ttl + - infoblox_bloxone_ddi.dns_config.created_at + - infoblox_bloxone_ddi.dns_config.id + if: ctx.tags == null || !(ctx.tags.contains('preserve_duplicate_custom_fields')) ignore_failure: true ignore_missing: true - remove: @@ -2088,6 +2088,6 @@ processors: } dropEmptyFields(ctx); on_failure: -- append: - field: error.message - value: '{{ _ingest.on_failure_message }}' + - append: + field: error.message + value: '{{ _ingest.on_failure_message }}' diff --git a/packages/bloxone_ddi/data_stream/dns_config/fields/agent.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_config/fields/agent.yml similarity index 100% rename from packages/bloxone_ddi/data_stream/dns_config/fields/agent.yml rename to packages/infoblox_bloxone_ddi/data_stream/dns_config/fields/agent.yml diff --git a/packages/bloxone_ddi/data_stream/dns_data/fields/base-fields.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_config/fields/base-fields.yml similarity index 87% rename from packages/bloxone_ddi/data_stream/dns_data/fields/base-fields.yml rename to packages/infoblox_bloxone_ddi/data_stream/dns_config/fields/base-fields.yml index 18c7f3a289..f98584bba2 100644 --- a/packages/bloxone_ddi/data_stream/dns_data/fields/base-fields.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_config/fields/base-fields.yml @@ -13,8 +13,8 @@ - name: event.module type: constant_keyword description: Event module. - value: bloxone_ddi + value: infoblox_bloxone_ddi - name: event.dataset type: constant_keyword description: Event dataset. - value: bloxone_ddi.dns_data + value: infoblox_bloxone_ddi.dns_config diff --git a/packages/bloxone_ddi/data_stream/dns_config/fields/ecs.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_config/fields/ecs.yml similarity index 100% rename from packages/bloxone_ddi/data_stream/dns_config/fields/ecs.yml rename to packages/infoblox_bloxone_ddi/data_stream/dns_config/fields/ecs.yml diff --git a/packages/bloxone_ddi/data_stream/dns_config/fields/fields.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_config/fields/fields.yml similarity index 99% rename from packages/bloxone_ddi/data_stream/dns_config/fields/fields.yml rename to packages/infoblox_bloxone_ddi/data_stream/dns_config/fields/fields.yml index 996c0688d4..b218df25a2 100644 --- a/packages/bloxone_ddi/data_stream/dns_config/fields/fields.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_config/fields/fields.yml @@ -1,4 +1,4 @@ -- name: bloxone_ddi.dns_config +- name: infoblox_bloxone_ddi.dns_config type: group fields: - name: add_edns diff --git a/packages/bloxone_ddi/data_stream/dns_config/manifest.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_config/manifest.yml similarity index 78% rename from packages/bloxone_ddi/data_stream/dns_config/manifest.yml rename to packages/infoblox_bloxone_ddi/data_stream/dns_config/manifest.yml index a9be470535..5a880b746a 100644 --- a/packages/bloxone_ddi/data_stream/dns_config/manifest.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_config/manifest.yml @@ -1,15 +1,15 @@ -title: Collect DNS Config logs from BloxOne DDI +title: Collect DNS Config logs from Infoblox BloxOne DDI type: logs streams: - input: httpjson title: DNS Config logs - description: Collect DNS Config logs from BloxOne DDI. + description: Collect DNS Config logs from Infoblox BloxOne DDI. template_path: httpjson.yml.hbs vars: - name: initial_interval type: text title: Initial Interval - description: 'How far back to pull the DHCP Lease events from BloxOne DDI. NOTE: Supported units for this parameter are h/m/s.' + description: How far back to pull the DHCP Lease events from Infoblox BloxOne DDI. NOTE:- Supported units for this parameter are h/m/s. multi: false required: true show_user: true @@ -17,7 +17,7 @@ streams: - name: interval type: text title: Interval - description: 'Duration between requests to the BloxOne DDI API. NOTE: Supported units for this parameter are h/m/s.' + description: Duration between requests to the Infoblox BloxOne DDI API. NOTE:- Supported units for this parameter are h/m/s. multi: false required: true show_user: true @@ -30,7 +30,7 @@ streams: show_user: false default: - forwarded - - bloxone_ddi-dns_config + - infoblox_bloxone_ddi_dns_config - name: preserve_original_event required: true show_user: true diff --git a/packages/bloxone_ddi/data_stream/dns_config/sample_event.json b/packages/infoblox_bloxone_ddi/data_stream/dns_config/sample_event.json similarity index 98% rename from packages/bloxone_ddi/data_stream/dns_config/sample_event.json rename to packages/infoblox_bloxone_ddi/data_stream/dns_config/sample_event.json index 045e6b12db..2485886989 100644 --- a/packages/bloxone_ddi/data_stream/dns_config/sample_event.json +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_config/sample_event.json @@ -1,13 +1,47 @@ { "@timestamp": "2022-07-15T06:55:25.978Z", "agent": { - "ephemeral_id": "3a899061-08e0-4d29-910a-3be5d29b5205", - "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", + "ephemeral_id": "81dd62b7-0768-4bb1-aaf4-9957a83f141e", + "hostname": "docker-fleet-agent", + "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", "name": "docker-fleet-agent", "type": "filebeat", - "version": "8.2.0" + "version": "7.17.0" }, - "bloxone_ddi": { + "data_stream": { + "dataset": "infoblox_bloxone_ddi.dns_config", + "namespace": "ep", + "type": "logs" + }, + "dns": { + "answers": { + "ttl": 350 + } + }, + "ecs": { + "version": "8.4.0" + }, + "elastic_agent": { + "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", + "snapshot": false, + "version": "7.17.0" + }, + "event": { + "agent_id_status": "verified", + "category": [ + "network" + ], + "created": "2022-07-15T06:55:25.978Z", + "dataset": "infoblox_bloxone_ddi.dns_config", + "id": "adv12rgfh", + "ingested": "2022-09-21T12:23:36Z", + "kind": "event", + "original": "{\"add_edns_option_in_outgoing_query\":true,\"comment\":\"DNS Config Comment\",\"created_at\":\"2022-07-15T06:55:25.978Z\",\"custom_root_ns\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"custom fqdn\",\"protocol_fqdn\":\"custom protocol fqdn\"}],\"custom_root_ns_enabled\":true,\"disabled\":true,\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_root_keys\":[{\"algorithm\":30,\"protocol_zone\":\"Dnssec root protocol zone\",\"public_key\":\"Dnssec root Public Key\",\"sep\":true,\"zone\":\"Dnssec root Zone\"}],\"dnssec_trust_anchors\":[{\"algorithm\":10,\"protocol_zone\":\"Dnssec trust protocol zone\",\"public_key\":\"Dnssec trust Public Key\",\"sep\":true,\"zone\":\"Dnssec trust zone\"}],\"dnssec_validate_expiry\":true,\"ecs_enabled\":true,\"ecs_forwarding\":true,\"ecs_prefix_v4\":22,\"ecs_prefix_v6\":33,\"ecs_zones\":[{\"access\":\"ecs zones access\",\"fqdn\":\"ecs zones fqdn\",\"protocol_fqdn\":\"ecs zones protocol fqdn\"}],\"edns_udp_size\":568,\"forwarders\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"forwarders fqdn\",\"protocol_fqdn\":\"forwarders protocol fqdn\"}],\"forwarders_only\":true,\"gss_tsig_enabled\":true,\"id\":\"adv12rgfh\",\"inheritance_sources\":{\"add_edns_option_in_outgoing_query\":{\"action\":\"inherit\",\"display_name\":\"displaynameadd_edns_option_in_outgoing_query\",\"source\":\"sourceadd_edns_option_in_outgoing_query\",\"value\":true},\"custom_root_ns_block\":{\"action\":\"override\",\"display_name\":\"displaynamecustom_root_ns_block\",\"source\":\"sourcecustom_root_ns_block\",\"value\":{\"custom_root_ns\":[{\"address\":\"67.43.156.0\",\"fqdn\":\"fqdn_custom_root_ns\",\"protocol_fqdn\":\"protocolfqdn_custom_root_ns\"}],\"custom_root_ns_enabled\":true}},\"dnssec_validation_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamednssec_validation_block\",\"source\":\"sourcednssec_validation_block\",\"value\":{\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_trust_anchors\":[{\"algorithm\":8,\"protocol_zone\":\"protocolzonednssec_trust_anchors\",\"public_key\":\"publickeydnssec_trust_anchors\",\"sep\":false,\"zone\":\"is3zone\"}],\"dnssec_validate_expiry\":true}},\"ecs_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameecs_block\",\"source\":\"sourceecs_block\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":10,\"ecs_zones\":[{\"access\":\"inherit\",\"fqdn\":\"fqdnecs_block\",\"protocol_fqdn\":\"protocol_fqdnecs_block\"}]}},\"ecs_zones\":{\"action\":\"override\",\"display_name\":\"displaynameecs_zones\",\"source\":\"sourceecs_zones\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":12,\"ecs_zones\":[{\"access\":\"access_ecs_zones\",\"fqdn\":\"fqdn_ecs_zones\",\"protocol_fqdn\":\"protocolfqdn_ecs_zones\"}]}},\"edns_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynameedns_udp_size\",\"source\":\"sourceedns_udp_size\",\"value\":55},\"forwarders_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameforwarders_block\",\"source\":\"sourceforwarders_block\",\"value\":{\"forwarders\":[{\"address\":\"89.160.20.128\",\"fqdn\":\"forwarders_fqdn\",\"protocol_fqdn\":\"forwarders_protocolfqdn\"}],\"forwarders_only\":true}},\"gss_tsig_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamegss_tsig_enabled\",\"source\":\"sourcegss_tsig_enabled\",\"value\":true},\"lame_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamelame_ttl\",\"source\":\"sourcelame_ttl\",\"value\":45},\"match_recursive_only\":{\"action\":\"inherit\",\"display_name\":\"displaynamematch_recursive_only\",\"source\":\"sourcematch_recursive_only\",\"value\":false},\"max_cache_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_cache_ttl\",\"source\":\"sourcemax_cache_ttl\",\"value\":13},\"max_negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_negative_ttl\",\"source\":\"sourcemax_negative_ttl\",\"value\":12},\"max_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_udp_size\",\"source\":\"sourcemax_udp_size\",\"value\":11},\"minimal_responses\":{\"action\":\"inherit\",\"display_name\":\"displaynameminimal_responses\",\"source\":\"sourceminimal_responses\",\"value\":true},\"notify\":{\"action\":\"inherit\",\"display_name\":\"displayname_notify\",\"source\":\"source_notify\",\"value\":true},\"query_acl\":{\"action\":\"override\",\"display_name\":\"displaynamequery_acl\",\"source\":\"sourcequery_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclvalue_query_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementvaluequery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha256\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolname_query_acl\",\"secret\":\"secretquery_acl\"}}]},\"recursion_acl\":{\"action\":\"override\",\"display_name\":\"displaynamerecursion_acl\",\"source\":\"sourcerecursion_acl\",\"value\":[{\"access\":\"deny\",\"acl\":\"aclrecursion_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}]},\"recursion_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamerecursion_enabled\",\"source\":\"sourcerecursion_enabled\",\"value\":true},\"synthesize_address_records_from_https\":{\"action\":\"inherit\",\"display_name\":\"displaynamesynthesize_address_records_from_https\",\"source\":\"sourcesynthesize_address_records_from_https\",\"value\":true},\"transfer_acl\":{\"action\":\"inherit\",\"display_name\":\"displaynametransfer_acl\",\"source\":\"sourcetransfer_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}]},\"update_acl\":{\"action\":\"override\",\"display_name\":\"displaynameupdate_acl\",\"source\":\"sourceupdate_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}]},\"use_forwarders_for_subzones\":{\"action\":\"override\",\"display_name\":\"displaynameuse_forwarders_for_subzones\",\"source\":\"sourceuse_forwarders_for_subzones\",\"value\":false},\"zone_authority\":{\"default_ttl\":{\"action\":\"override\",\"display_name\":\"displaynamezone_authority\",\"source\":\"sourcezone_authority\",\"value\":50},\"expire\":{\"action\":\"inherit\",\"display_name\":\"displaynameexpire\",\"source\":\"sourceexpire\",\"value\":70},\"mname_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamemname_block\",\"source\":\"sourcemname_block\",\"value\":{\"mname\":\"mnamevaluemname_block\",\"protocol_mname\":\"protocolmnamemname_block\",\"use_default_mname\":true}},\"negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamenegative_ttl\",\"source\":\"sourcenegative_ttl\",\"value\":90},\"protocol_rname\":{\"action\":\"inherit\",\"display_name\":\"displaynameprotocol_rname\",\"source\":\"sourceprotocol_rname\",\"value\":\"valueprotocol_rname\"},\"refresh\":{\"action\":\"inherit\",\"display_name\":\"displayname_refresh\",\"source\":\"source_refresh\",\"value\":40},\"retry\":{\"action\":\"inherit\",\"display_name\":\"displayname_retry\",\"source\":\"source_retry\",\"value\":570},\"rname\":{\"action\":\"inherit\",\"display_name\":\"displayname_rname\",\"source\":\"source_rname\",\"value\":\"value_rname\"}}},\"ip_spaces\":[\"testipspaces\"],\"lame_ttl\":350,\"match_clients_acl\":[{\"access\":\"deny\",\"acl\":\"aclmatch_clients_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_clients_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha512\",\"comment\":\"commentmatch_clients_acl\",\"key\":\"keymatch_clients_acl\",\"name\":\"namematch_clients_acl\",\"protocol_name\":\"protocolnamematch_clients_acl\",\"secret\":\"secretmatch_clients_acl\"}}],\"match_destinations_acl\":[{\"access\":\"allow\",\"acl\":\"aclmatch_destinations_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_destinations_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentmatch_destinations_acl\",\"key\":\"keymatch_destinations_acl\",\"name\":\"namematch_destinations_acl\",\"protocol_name\":\"protocolnamematch_destinations_acl\",\"secret\":\"secretmatch_destinations_acl\"}}],\"match_recursive_only\":true,\"max_cache_ttl\":90,\"max_negative_ttl\":500,\"max_udp_size\":890,\"minimal_responses\":true,\"name\":\"string\",\"notify\":true,\"query_acl\":[{\"access\":\"accessquery_acl\",\"acl\":\"aclquery_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementquery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolnamequery_acl\",\"secret\":\"secretquery_acl\"}}],\"recursion_acl\":[{\"access\":\"allow\",\"acl\":\"aclrecursion_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}],\"recursion_enabled\":true,\"synthesize_address_records_from_https\":false,\"tags\":{\"message\":\"Hello\"},\"transfer_acl\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}],\"update_acl\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}],\"updated_at\":\"2022-07-15T06:55:25.978Z\",\"use_forwarders_for_subzones\":true,\"zone_authority\":{\"default_ttl\":20,\"expire\":10,\"mname\":\"mnamezone_authority\",\"negative_ttl\":30,\"protocol_mname\":\"protocolmnamezone_authority\",\"protocol_rname\":\"protocolrnamezone_authority\",\"refresh\":50,\"retry\":100,\"rname\":\"string\",\"use_default_mname\":true}}", + "type": [ + "protocol" + ] + }, + "infoblox_bloxone_ddi": { "dns_config": { "add_edns": { "option_in": { @@ -609,39 +643,6 @@ } } }, - "data_stream": { - "dataset": "bloxone_ddi.dns_config", - "namespace": "ep", - "type": "logs" - }, - "dns": { - "answers": { - "ttl": 350 - } - }, - "ecs": { - "version": "8.4.0" - }, - "elastic_agent": { - "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", - "snapshot": false, - "version": "8.2.0" - }, - "event": { - "agent_id_status": "verified", - "category": [ - "network" - ], - "created": "2022-07-15T06:55:25.978Z", - "dataset": "bloxone_ddi.dns_config", - "id": "adv12rgfh", - "ingested": "2022-09-06T08:40:46Z", - "kind": "event", - "original": "{\"add_edns_option_in_outgoing_query\":true,\"comment\":\"DNS Config Comment\",\"created_at\":\"2022-07-15T06:55:25.978Z\",\"custom_root_ns\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"custom fqdn\",\"protocol_fqdn\":\"custom protocol fqdn\"}],\"custom_root_ns_enabled\":true,\"disabled\":true,\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_root_keys\":[{\"algorithm\":30,\"protocol_zone\":\"Dnssec root protocol zone\",\"public_key\":\"Dnssec root Public Key\",\"sep\":true,\"zone\":\"Dnssec root Zone\"}],\"dnssec_trust_anchors\":[{\"algorithm\":10,\"protocol_zone\":\"Dnssec trust protocol zone\",\"public_key\":\"Dnssec trust Public Key\",\"sep\":true,\"zone\":\"Dnssec trust zone\"}],\"dnssec_validate_expiry\":true,\"ecs_enabled\":true,\"ecs_forwarding\":true,\"ecs_prefix_v4\":22,\"ecs_prefix_v6\":33,\"ecs_zones\":[{\"access\":\"ecs zones access\",\"fqdn\":\"ecs zones fqdn\",\"protocol_fqdn\":\"ecs zones protocol fqdn\"}],\"edns_udp_size\":568,\"forwarders\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"forwarders fqdn\",\"protocol_fqdn\":\"forwarders protocol fqdn\"}],\"forwarders_only\":true,\"gss_tsig_enabled\":true,\"id\":\"adv12rgfh\",\"inheritance_sources\":{\"add_edns_option_in_outgoing_query\":{\"action\":\"inherit\",\"display_name\":\"displaynameadd_edns_option_in_outgoing_query\",\"source\":\"sourceadd_edns_option_in_outgoing_query\",\"value\":true},\"custom_root_ns_block\":{\"action\":\"override\",\"display_name\":\"displaynamecustom_root_ns_block\",\"source\":\"sourcecustom_root_ns_block\",\"value\":{\"custom_root_ns\":[{\"address\":\"67.43.156.0\",\"fqdn\":\"fqdn_custom_root_ns\",\"protocol_fqdn\":\"protocolfqdn_custom_root_ns\"}],\"custom_root_ns_enabled\":true}},\"dnssec_validation_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamednssec_validation_block\",\"source\":\"sourcednssec_validation_block\",\"value\":{\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_trust_anchors\":[{\"algorithm\":8,\"protocol_zone\":\"protocolzonednssec_trust_anchors\",\"public_key\":\"publickeydnssec_trust_anchors\",\"sep\":false,\"zone\":\"is3zone\"}],\"dnssec_validate_expiry\":true}},\"ecs_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameecs_block\",\"source\":\"sourceecs_block\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":10,\"ecs_zones\":[{\"access\":\"inherit\",\"fqdn\":\"fqdnecs_block\",\"protocol_fqdn\":\"protocol_fqdnecs_block\"}]}},\"ecs_zones\":{\"action\":\"override\",\"display_name\":\"displaynameecs_zones\",\"source\":\"sourceecs_zones\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":12,\"ecs_zones\":[{\"access\":\"access_ecs_zones\",\"fqdn\":\"fqdn_ecs_zones\",\"protocol_fqdn\":\"protocolfqdn_ecs_zones\"}]}},\"edns_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynameedns_udp_size\",\"source\":\"sourceedns_udp_size\",\"value\":55},\"forwarders_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameforwarders_block\",\"source\":\"sourceforwarders_block\",\"value\":{\"forwarders\":[{\"address\":\"89.160.20.128\",\"fqdn\":\"forwarders_fqdn\",\"protocol_fqdn\":\"forwarders_protocolfqdn\"}],\"forwarders_only\":true}},\"gss_tsig_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamegss_tsig_enabled\",\"source\":\"sourcegss_tsig_enabled\",\"value\":true},\"lame_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamelame_ttl\",\"source\":\"sourcelame_ttl\",\"value\":45},\"match_recursive_only\":{\"action\":\"inherit\",\"display_name\":\"displaynamematch_recursive_only\",\"source\":\"sourcematch_recursive_only\",\"value\":false},\"max_cache_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_cache_ttl\",\"source\":\"sourcemax_cache_ttl\",\"value\":13},\"max_negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_negative_ttl\",\"source\":\"sourcemax_negative_ttl\",\"value\":12},\"max_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_udp_size\",\"source\":\"sourcemax_udp_size\",\"value\":11},\"minimal_responses\":{\"action\":\"inherit\",\"display_name\":\"displaynameminimal_responses\",\"source\":\"sourceminimal_responses\",\"value\":true},\"notify\":{\"action\":\"inherit\",\"display_name\":\"displayname_notify\",\"source\":\"source_notify\",\"value\":true},\"query_acl\":{\"action\":\"override\",\"display_name\":\"displaynamequery_acl\",\"source\":\"sourcequery_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclvalue_query_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementvaluequery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha256\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolname_query_acl\",\"secret\":\"secretquery_acl\"}}]},\"recursion_acl\":{\"action\":\"override\",\"display_name\":\"displaynamerecursion_acl\",\"source\":\"sourcerecursion_acl\",\"value\":[{\"access\":\"deny\",\"acl\":\"aclrecursion_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}]},\"recursion_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamerecursion_enabled\",\"source\":\"sourcerecursion_enabled\",\"value\":true},\"synthesize_address_records_from_https\":{\"action\":\"inherit\",\"display_name\":\"displaynamesynthesize_address_records_from_https\",\"source\":\"sourcesynthesize_address_records_from_https\",\"value\":true},\"transfer_acl\":{\"action\":\"inherit\",\"display_name\":\"displaynametransfer_acl\",\"source\":\"sourcetransfer_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}]},\"update_acl\":{\"action\":\"override\",\"display_name\":\"displaynameupdate_acl\",\"source\":\"sourceupdate_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}]},\"use_forwarders_for_subzones\":{\"action\":\"override\",\"display_name\":\"displaynameuse_forwarders_for_subzones\",\"source\":\"sourceuse_forwarders_for_subzones\",\"value\":false},\"zone_authority\":{\"default_ttl\":{\"action\":\"override\",\"display_name\":\"displaynamezone_authority\",\"source\":\"sourcezone_authority\",\"value\":50},\"expire\":{\"action\":\"inherit\",\"display_name\":\"displaynameexpire\",\"source\":\"sourceexpire\",\"value\":70},\"mname_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamemname_block\",\"source\":\"sourcemname_block\",\"value\":{\"mname\":\"mnamevaluemname_block\",\"protocol_mname\":\"protocolmnamemname_block\",\"use_default_mname\":true}},\"negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamenegative_ttl\",\"source\":\"sourcenegative_ttl\",\"value\":90},\"protocol_rname\":{\"action\":\"inherit\",\"display_name\":\"displaynameprotocol_rname\",\"source\":\"sourceprotocol_rname\",\"value\":\"valueprotocol_rname\"},\"refresh\":{\"action\":\"inherit\",\"display_name\":\"displayname_refresh\",\"source\":\"source_refresh\",\"value\":40},\"retry\":{\"action\":\"inherit\",\"display_name\":\"displayname_retry\",\"source\":\"source_retry\",\"value\":570},\"rname\":{\"action\":\"inherit\",\"display_name\":\"displayname_rname\",\"source\":\"source_rname\",\"value\":\"value_rname\"}}},\"ip_spaces\":[\"testipspaces\"],\"lame_ttl\":350,\"match_clients_acl\":[{\"access\":\"deny\",\"acl\":\"aclmatch_clients_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_clients_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha512\",\"comment\":\"commentmatch_clients_acl\",\"key\":\"keymatch_clients_acl\",\"name\":\"namematch_clients_acl\",\"protocol_name\":\"protocolnamematch_clients_acl\",\"secret\":\"secretmatch_clients_acl\"}}],\"match_destinations_acl\":[{\"access\":\"allow\",\"acl\":\"aclmatch_destinations_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_destinations_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentmatch_destinations_acl\",\"key\":\"keymatch_destinations_acl\",\"name\":\"namematch_destinations_acl\",\"protocol_name\":\"protocolnamematch_destinations_acl\",\"secret\":\"secretmatch_destinations_acl\"}}],\"match_recursive_only\":true,\"max_cache_ttl\":90,\"max_negative_ttl\":500,\"max_udp_size\":890,\"minimal_responses\":true,\"name\":\"string\",\"notify\":true,\"query_acl\":[{\"access\":\"accessquery_acl\",\"acl\":\"aclquery_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementquery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolnamequery_acl\",\"secret\":\"secretquery_acl\"}}],\"recursion_acl\":[{\"access\":\"allow\",\"acl\":\"aclrecursion_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}],\"recursion_enabled\":true,\"synthesize_address_records_from_https\":false,\"tags\":{\"message\":\"Hello\"},\"transfer_acl\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}],\"update_acl\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}],\"updated_at\":\"2022-07-15T06:55:25.978Z\",\"use_forwarders_for_subzones\":true,\"zone_authority\":{\"default_ttl\":20,\"expire\":10,\"mname\":\"mnamezone_authority\",\"negative_ttl\":30,\"protocol_mname\":\"protocolmnamezone_authority\",\"protocol_rname\":\"protocolrnamezone_authority\",\"refresh\":50,\"retry\":100,\"rname\":\"string\",\"use_default_mname\":true}}", - "type": [ - "protocol" - ] - }, "input": { "type": "httpjson" }, @@ -664,6 +665,6 @@ "preserve_original_event", "preserve_duplicate_custom_fields", "forwarded", - "bloxone_ddi-dns_config" + "infoblox_bloxone_ddi_dns_config" ] } \ No newline at end of file diff --git a/packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-common-config.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-common-config.yml similarity index 100% rename from packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-common-config.yml rename to packages/infoblox_bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-common-config.yml diff --git a/packages/infoblox_bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log b/packages/infoblox_bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log new file mode 100644 index 0000000000..68727fc56e --- /dev/null +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log @@ -0,0 +1,2 @@ +{"absolute_name_spec":"string","absolute_zone_name":"string","comment":"string","created_at":"2022-07-20T09:59:59.184Z","delegation":"string","disabled":true,"dns_absolute_name_spec":"string","dns_absolute_zone_name":"string","dns_name_in_zone":"string","dns_rdata":"string","id":"string","inheritance_sources":{"ttl":{"action":"string","display_name":"string","source":"string","value":0}},"name_in_zone":"string","options":{},"rdata":{"address":"81.2.69.192","flags":"falg_value","tag":"issue","value":"value","cname":"canonical name","target":".","dhcid":"122zbczba12","exchange":"domain name","preference":12345363467,"order":123124,"regexp":"^sqq:","replacement":"","services":"","dname":"domain name","expire":23131,"mname":"test mname","negative_ttl":213342,"refresh":10800,"retry":3600,"rname":"test","serial":12314114,"port":80,"priority":44,"weight":0,"text":"text field","type":"32BIT","length_kind":8},"source":["string"],"tags":{},"ttl":0,"type":"string","updated_at":"2022-07-20T09:59:59.184Z","view":"string","view_name":"string","zone":"string"} +{"absolute_name_spec":"test_spec","absolute_zone_name":"www.example.com","comment":"string","created_at":"2022-07-14T11:50:28.838Z","delegation":"abc123abcd323","disabled":true,"dns_absolute_name_spec":"Test name","dns_absolute_zone_name":"test Zone","dns_name_in_zone":"Test zone","dns_rdata":"DNS rdata","id":"12abcddcba32ab","inheritance_sources":{"ttl":{"action":"inherit","display_name":"test Display","source":"12abc321ab","value":0}},"name_in_zone":"test zone","options":{"address":"81.2.69.144"},"rdata":{"address":"81.2.69.142","value":"wefewf"},"source":["STATIC"],"tags":{},"ttl":0,"type":"AAAA","updated_at":"2022-07-14T11:50:28.838Z","view":"12abcd32bcd12","view_name":"string","zone":"123bcdacd32"} diff --git a/packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log-expected.json b/packages/infoblox_bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log-expected.json similarity index 83% rename from packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log-expected.json rename to packages/infoblox_bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log-expected.json index c6a163a500..044d3ead4f 100644 --- a/packages/bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log-expected.json +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_data/_dev/test/pipeline/test-pipeline-dns-data.log-expected.json @@ -2,7 +2,27 @@ "expected": [ { "@timestamp": "2022-07-20T09:59:59.184Z", - "bloxone_ddi": { + "dns": { + "answers": { + "ttl": 0 + } + }, + "ecs": { + "version": "8.4.0" + }, + "event": { + "category": [ + "network" + ], + "created": "2022-07-20T09:59:59.184Z", + "id": "string", + "kind": "event", + "original": "{\"absolute_name_spec\":\"string\",\"absolute_zone_name\":\"string\",\"comment\":\"string\",\"created_at\":\"2022-07-20T09:59:59.184Z\",\"delegation\":\"string\",\"disabled\":true,\"dns_absolute_name_spec\":\"string\",\"dns_absolute_zone_name\":\"string\",\"dns_name_in_zone\":\"string\",\"dns_rdata\":\"string\",\"id\":\"string\",\"inheritance_sources\":{\"ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0}},\"name_in_zone\":\"string\",\"options\":{},\"rdata\":{\"address\":\"81.2.69.192\",\"flags\":\"falg_value\",\"tag\":\"issue\",\"value\":\"value\",\"cname\":\"canonical name\",\"target\":\".\",\"dhcid\":\"122zbczba12\",\"exchange\":\"domain name\",\"preference\":12345363467,\"order\":123124,\"regexp\":\"^sqq:\",\"replacement\":\"\",\"services\":\"\",\"dname\":\"domain name\",\"expire\":23131,\"mname\":\"test mname\",\"negative_ttl\":213342,\"refresh\":10800,\"retry\":3600,\"rname\":\"test\",\"serial\":12314114,\"port\":80,\"priority\":44,\"weight\":0,\"text\":\"text field\",\"type\":\"32BIT\",\"length_kind\":8},\"source\":[\"string\"],\"tags\":{},\"ttl\":0,\"type\":\"string\",\"updated_at\":\"2022-07-20T09:59:59.184Z\",\"view\":\"string\",\"view_name\":\"string\",\"zone\":\"string\"}", + "type": [ + "protocol" + ] + }, + "infoblox_bloxone_ddi": { "dns_data": { "absolute": { "name": { @@ -48,7 +68,7 @@ "expire": 23131, "flags": "falg_value", "length_kind": 8, - "mname": "Dummy", + "mname": "test mname", "negative_ttl": 213342, "order": 123124, "port": 80, @@ -57,7 +77,7 @@ "refresh": 10800, "regexp": "^sqq:", "retry": 3600, - "rname": "demo", + "rname": "test", "serial": 12314114, "tag": "issue", "target": ".", @@ -78,6 +98,18 @@ "zone": "string" } }, + "related": { + "ip": [ + "81.2.69.192" + ] + }, + "tags": [ + "preserve_original_event", + "preserve_duplicate_custom_fields" + ] + }, + { + "@timestamp": "2022-07-14T11:50:28.838Z", "dns": { "answers": { "ttl": 0 @@ -90,38 +122,26 @@ "category": [ "network" ], - "created": "2022-07-20T09:59:59.184Z", - "id": "string", + "created": "2022-07-14T11:50:28.838Z", + "id": "12abcddcba32ab", "kind": "event", - "original": "{\"absolute_name_spec\":\"string\",\"absolute_zone_name\":\"string\",\"comment\":\"string\",\"created_at\":\"2022-07-20T09:59:59.184Z\",\"delegation\":\"string\",\"disabled\":true,\"dns_absolute_name_spec\":\"string\",\"dns_absolute_zone_name\":\"string\",\"dns_name_in_zone\":\"string\",\"dns_rdata\":\"string\",\"id\":\"string\",\"inheritance_sources\":{\"ttl\":{\"action\":\"string\",\"display_name\":\"string\",\"source\":\"string\",\"value\":0}},\"name_in_zone\":\"string\",\"options\":{},\"rdata\":{\"address\":\"81.2.69.192\",\"flags\":\"falg_value\",\"tag\":\"issue\",\"value\":\"value\",\"cname\":\"canonical name\",\"target\":\".\",\"dhcid\":\"122zbczba12\",\"exchange\":\"domain name\",\"preference\":12345363467,\"order\":123124,\"regexp\":\"^sqq:\",\"replacement\":\"\",\"services\":\"\",\"dname\":\"domain name\",\"expire\":23131,\"mname\":\"Dummy\",\"negative_ttl\":213342,\"refresh\":10800,\"retry\":3600,\"rname\":\"demo\",\"serial\":12314114,\"port\":80,\"priority\":44,\"weight\":0,\"text\":\"text field\",\"type\":\"32BIT\",\"length_kind\":8},\"source\":[\"string\"],\"tags\":{},\"ttl\":0,\"type\":\"string\",\"updated_at\":\"2022-07-20T09:59:59.184Z\",\"view\":\"string\",\"view_name\":\"string\",\"zone\":\"string\"}", + "original": "{\"absolute_name_spec\":\"test_spec\",\"absolute_zone_name\":\"www.example.com\",\"comment\":\"string\",\"created_at\":\"2022-07-14T11:50:28.838Z\",\"delegation\":\"abc123abcd323\",\"disabled\":true,\"dns_absolute_name_spec\":\"Test name\",\"dns_absolute_zone_name\":\"test Zone\",\"dns_name_in_zone\":\"Test zone\",\"dns_rdata\":\"DNS rdata\",\"id\":\"12abcddcba32ab\",\"inheritance_sources\":{\"ttl\":{\"action\":\"inherit\",\"display_name\":\"test Display\",\"source\":\"12abc321ab\",\"value\":0}},\"name_in_zone\":\"test zone\",\"options\":{\"address\":\"81.2.69.144\"},\"rdata\":{\"address\":\"81.2.69.142\",\"value\":\"wefewf\"},\"source\":[\"STATIC\"],\"tags\":{},\"ttl\":0,\"type\":\"AAAA\",\"updated_at\":\"2022-07-14T11:50:28.838Z\",\"view\":\"12abcd32bcd12\",\"view_name\":\"string\",\"zone\":\"123bcdacd32\"}", "type": [ "protocol" ] }, - "related": { - "ip": [ - "81.2.69.192" - ] - }, - "tags": [ - "preserve_original_event", - "preserve_duplicate_custom_fields" - ] - }, - { - "@timestamp": "2022-07-14T11:50:28.838Z", - "bloxone_ddi": { + "infoblox_bloxone_ddi": { "dns_data": { "absolute": { "name": { "spec": "Test name" }, "zone": { - "name": "Dummy Zone" + "name": "test Zone" } }, "absolute_name": { - "spec": "demo_spec" + "spec": "test_spec" }, "absolute_zone": { "name": "www.example.com" @@ -136,7 +156,7 @@ "ttl": { "action": "inherit", "display": { - "name": "Dummy Display" + "name": "test Display" }, "source": "12abc321ab", "value": 0 @@ -146,7 +166,7 @@ "name_in": { "zone": "Test zone" }, - "name_in_zone": "demo", + "name_in_zone": "test zone", "options": { "address": "81.2.69.144" }, @@ -166,26 +186,6 @@ "zone": "123bcdacd32" } }, - "dns": { - "answers": { - "ttl": 0 - } - }, - "ecs": { - "version": "8.4.0" - }, - "event": { - "category": [ - "network" - ], - "created": "2022-07-14T11:50:28.838Z", - "id": "12abcddcba32ab", - "kind": "event", - "original": "{\"absolute_name_spec\":\"demo_spec\",\"absolute_zone_name\":\"www.example.com\",\"comment\":\"string\",\"created_at\":\"2022-07-14T11:50:28.838Z\",\"delegation\":\"abc123abcd323\",\"disabled\":true,\"dns_absolute_name_spec\":\"Test name\",\"dns_absolute_zone_name\":\"Dummy Zone\",\"dns_name_in_zone\":\"Test zone\",\"dns_rdata\":\"DNS rdata\",\"id\":\"12abcddcba32ab\",\"inheritance_sources\":{\"ttl\":{\"action\":\"inherit\",\"display_name\":\"Dummy Display\",\"source\":\"12abc321ab\",\"value\":0}},\"name_in_zone\":\"demo\",\"options\":{\"address\":\"81.2.69.144\"},\"rdata\":{\"address\":\"81.2.69.142\",\"value\":\"wefewf\"},\"source\":[\"STATIC\"],\"tags\":{},\"ttl\":0,\"type\":\"AAAA\",\"updated_at\":\"2022-07-14T11:50:28.838Z\",\"view\":\"12abcd32bcd12\",\"view_name\":\"string\",\"zone\":\"123bcdacd32\"}", - "type": [ - "protocol" - ] - }, "related": { "ip": [ "81.2.69.144", diff --git a/packages/bloxone_ddi/data_stream/dns_data/_dev/test/system/test-default-config.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_data/_dev/test/system/test-default-config.yml similarity index 85% rename from packages/bloxone_ddi/data_stream/dns_data/_dev/test/system/test-default-config.yml rename to packages/infoblox_bloxone_ddi/data_stream/dns_data/_dev/test/system/test-default-config.yml index 5188dac65d..b4145719d0 100644 --- a/packages/bloxone_ddi/data_stream/dns_data/_dev/test/system/test-default-config.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_data/_dev/test/system/test-default-config.yml @@ -1,5 +1,5 @@ input: httpjson -service: bloxone-ddi +service: infoblox-bloxone-ddi vars: url: http://{{Hostname}}:{{Port}} api_key: xxxx diff --git a/packages/bloxone_ddi/data_stream/dns_data/agent/stream/httpjson.yml.hbs b/packages/infoblox_bloxone_ddi/data_stream/dns_data/agent/stream/httpjson.yml.hbs similarity index 100% rename from packages/bloxone_ddi/data_stream/dns_data/agent/stream/httpjson.yml.hbs rename to packages/infoblox_bloxone_ddi/data_stream/dns_data/agent/stream/httpjson.yml.hbs diff --git a/packages/bloxone_ddi/data_stream/dns_data/elasticsearch/ingest_pipeline/default.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_data/elasticsearch/ingest_pipeline/default.yml similarity index 69% rename from packages/bloxone_ddi/data_stream/dns_data/elasticsearch/ingest_pipeline/default.yml rename to packages/infoblox_bloxone_ddi/data_stream/dns_data/elasticsearch/ingest_pipeline/default.yml index 249277c132..63d1e8b369 100644 --- a/packages/bloxone_ddi/data_stream/dns_data/elasticsearch/ingest_pipeline/default.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_data/elasticsearch/ingest_pipeline/default.yml @@ -29,19 +29,19 @@ processors: ignore_missing: true - rename: field: json.absolute_name_spec - target_field: bloxone_ddi.dns_data.absolute_name.spec + target_field: infoblox_bloxone_ddi.dns_data.absolute_name.spec ignore_missing: true - rename: field: json.absolute_zone_name - target_field: bloxone_ddi.dns_data.absolute_zone.name + target_field: infoblox_bloxone_ddi.dns_data.absolute_zone.name ignore_missing: true - rename: field: json.comment - target_field: bloxone_ddi.dns_data.comment + target_field: infoblox_bloxone_ddi.dns_data.comment ignore_missing: true - date: field: json.created_at - target_field: bloxone_ddi.dns_data.created_at + target_field: infoblox_bloxone_ddi.dns_data.created_at if: ctx.json?.created_at != null && ctx.json.created_at != '' formats: - ISO8601 @@ -51,15 +51,15 @@ processors: value: '{{{_ingest.on_failure_message}}}' - set: field: event.created - copy_from: bloxone_ddi.dns_data.created_at + copy_from: infoblox_bloxone_ddi.dns_data.created_at ignore_failure: true - rename: field: json.delegation - target_field: bloxone_ddi.dns_data.delegation + target_field: infoblox_bloxone_ddi.dns_data.delegation ignore_missing: true - convert: field: json.disabled - target_field: bloxone_ddi.dns_data.disabled + target_field: infoblox_bloxone_ddi.dns_data.disabled if: ctx.json?.disabled != '' type: boolean ignore_missing: true @@ -69,43 +69,43 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.dns_absolute_name_spec - target_field: bloxone_ddi.dns_data.absolute.name.spec + target_field: infoblox_bloxone_ddi.dns_data.absolute.name.spec ignore_missing: true - rename: field: json.dns_absolute_zone_name - target_field: bloxone_ddi.dns_data.absolute.zone.name + target_field: infoblox_bloxone_ddi.dns_data.absolute.zone.name ignore_missing: true - rename: field: json.dns_name_in_zone - target_field: bloxone_ddi.dns_data.name_in.zone + target_field: infoblox_bloxone_ddi.dns_data.name_in.zone ignore_missing: true - rename: field: json.dns_rdata - target_field: bloxone_ddi.dns_data.rdata_value + target_field: infoblox_bloxone_ddi.dns_data.rdata_value ignore_missing: true - rename: field: json.id - target_field: bloxone_ddi.dns_data.id + target_field: infoblox_bloxone_ddi.dns_data.id ignore_missing: true - set: field: event.id - copy_from: bloxone_ddi.dns_data.id + copy_from: infoblox_bloxone_ddi.dns_data.id ignore_failure: true - rename: field: json.inheritance_sources.ttl.action - target_field: bloxone_ddi.dns_data.inheritance.sources.ttl.action + target_field: infoblox_bloxone_ddi.dns_data.inheritance.sources.ttl.action ignore_missing: true - rename: field: json.inheritance_sources.ttl.display_name - target_field: bloxone_ddi.dns_data.inheritance.sources.ttl.display.name + target_field: infoblox_bloxone_ddi.dns_data.inheritance.sources.ttl.display.name ignore_missing: true - rename: field: json.inheritance_sources.ttl.source - target_field: bloxone_ddi.dns_data.inheritance.sources.ttl.source + target_field: infoblox_bloxone_ddi.dns_data.inheritance.sources.ttl.source ignore_missing: true - convert: field: json.inheritance_sources.ttl.value - target_field: bloxone_ddi.dns_data.inheritance.sources.ttl.value + target_field: infoblox_bloxone_ddi.dns_data.inheritance.sources.ttl.value if: ctx.json?.inheritance_sources?.ttl?.value != '' type: long ignore_missing: true @@ -115,11 +115,11 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.name_in_zone - target_field: bloxone_ddi.dns_data.name_in_zone + target_field: infoblox_bloxone_ddi.dns_data.name_in_zone ignore_missing: true - convert: field: json.options.create_ptr - target_field: bloxone_ddi.dns_data.options.create_ptr + target_field: infoblox_bloxone_ddi.dns_data.options.create_ptr if: ctx.json?.options?.create_ptr != '' type: boolean ignore_missing: true @@ -129,7 +129,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.options.check_rmz - target_field: bloxone_ddi.dns_data.options.check_rmz + target_field: infoblox_bloxone_ddi.dns_data.options.check_rmz if: ctx.json?.options?.check_rmz != '' type: boolean ignore_missing: true @@ -139,7 +139,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.options.address - target_field: bloxone_ddi.dns_data.options.address + target_field: infoblox_bloxone_ddi.dns_data.options.address if: ctx.json?.options?.address != '' type: ip ignore_missing: true @@ -149,16 +149,16 @@ processors: value: '{{{_ingest.on_failure_message}}}' - append: field: related.ip - value: '{{{bloxone_ddi.dns_data.options.address}}}' + value: '{{{infoblox_bloxone_ddi.dns_data.options.address}}}' allow_duplicates: false ignore_failure: true - rename: field: json.provider_metadata - target_field: bloxone_ddi.dns_data.provider_metadata + target_field: infoblox_bloxone_ddi.dns_data.provider_metadata ignore_missing: true - convert: field: json.rdata.address - target_field: bloxone_ddi.dns_data.rdata.address + target_field: infoblox_bloxone_ddi.dns_data.rdata.address if: ctx.json?.rdata?.address != '' type: ip ignore_missing: true @@ -168,40 +168,40 @@ processors: value: '{{{_ingest.on_failure_message}}}' - append: field: related.ip - value: '{{{bloxone_ddi.dns_data.rdata.address}}}' + value: '{{{infoblox_bloxone_ddi.dns_data.rdata.address}}}' allow_duplicates: false ignore_failure: true - rename: field: json.rdata.flags - target_field: bloxone_ddi.dns_data.rdata.flags + target_field: infoblox_bloxone_ddi.dns_data.rdata.flags ignore_missing: true - rename: field: json.rdata.tag - target_field: bloxone_ddi.dns_data.rdata.tag + target_field: infoblox_bloxone_ddi.dns_data.rdata.tag ignore_missing: true - rename: field: json.rdata.value - target_field: bloxone_ddi.dns_data.rdata.value + target_field: infoblox_bloxone_ddi.dns_data.rdata.value ignore_missing: true - rename: field: json.rdata.cname - target_field: bloxone_ddi.dns_data.rdata.cname + target_field: infoblox_bloxone_ddi.dns_data.rdata.cname ignore_missing: true - rename: field: json.rdata.target - target_field: bloxone_ddi.dns_data.rdata.target + target_field: infoblox_bloxone_ddi.dns_data.rdata.target ignore_missing: true - rename: field: json.rdata.dhcid - target_field: bloxone_ddi.dns_data.rdata.dhcid + target_field: infoblox_bloxone_ddi.dns_data.rdata.dhcid ignore_missing: true - rename: field: json.rdata.exchange - target_field: bloxone_ddi.dns_data.rdata.exchange + target_field: infoblox_bloxone_ddi.dns_data.rdata.exchange ignore_missing: true - convert: field: json.rdata.preference - target_field: bloxone_ddi.dns_data.rdata.preference + target_field: infoblox_bloxone_ddi.dns_data.rdata.preference if: ctx.json?.rdata?.preference != '' type: long ignore_missing: true @@ -211,7 +211,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.rdata.order - target_field: bloxone_ddi.dns_data.rdata.order + target_field: infoblox_bloxone_ddi.dns_data.rdata.order if: ctx.json?.rdata?.order != '' type: long ignore_missing: true @@ -221,23 +221,23 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.rdata.regexp - target_field: bloxone_ddi.dns_data.rdata.regexp + target_field: infoblox_bloxone_ddi.dns_data.rdata.regexp ignore_missing: true - rename: field: json.rdata.replacement - target_field: bloxone_ddi.dns_data.rdata.replacement + target_field: infoblox_bloxone_ddi.dns_data.rdata.replacement ignore_missing: true - rename: field: json.rdata.services - target_field: bloxone_ddi.dns_data.rdata.services + target_field: infoblox_bloxone_ddi.dns_data.rdata.services ignore_missing: true - rename: field: json.rdata.dname - target_field: bloxone_ddi.dns_data.rdata.dname + target_field: infoblox_bloxone_ddi.dns_data.rdata.dname ignore_missing: true - convert: field: json.rdata.expire - target_field: bloxone_ddi.dns_data.rdata.expire + target_field: infoblox_bloxone_ddi.dns_data.rdata.expire if: ctx.json?.rdata?.expire != '' type: long ignore_missing: true @@ -247,11 +247,11 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.rdata.mname - target_field: bloxone_ddi.dns_data.rdata.mname + target_field: infoblox_bloxone_ddi.dns_data.rdata.mname ignore_missing: true - convert: field: json.rdata.negative_ttl - target_field: bloxone_ddi.dns_data.rdata.negative_ttl + target_field: infoblox_bloxone_ddi.dns_data.rdata.negative_ttl if: ctx.json?.rdata?.negative_ttl != '' type: long ignore_missing: true @@ -261,7 +261,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.rdata.refresh - target_field: bloxone_ddi.dns_data.rdata.refresh + target_field: infoblox_bloxone_ddi.dns_data.rdata.refresh if: ctx.json?.rdata?.refresh != '' type: long ignore_missing: true @@ -271,7 +271,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.rdata.retry - target_field: bloxone_ddi.dns_data.rdata.retry + target_field: infoblox_bloxone_ddi.dns_data.rdata.retry if: ctx.json?.rdata?.retry != '' type: long ignore_missing: true @@ -281,11 +281,11 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.rdata.rname - target_field: bloxone_ddi.dns_data.rdata.rname + target_field: infoblox_bloxone_ddi.dns_data.rdata.rname ignore_missing: true - convert: field: json.rdata.serial - target_field: bloxone_ddi.dns_data.rdata.serial + target_field: infoblox_bloxone_ddi.dns_data.rdata.serial if: ctx.json?.rdata?.serial != '' type: long ignore_missing: true @@ -295,7 +295,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.rdata.port - target_field: bloxone_ddi.dns_data.rdata.port + target_field: infoblox_bloxone_ddi.dns_data.rdata.port if: ctx.json?.rdata?.port != '' type: long ignore_missing: true @@ -305,7 +305,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.rdata.priority - target_field: bloxone_ddi.dns_data.rdata.priority + target_field: infoblox_bloxone_ddi.dns_data.rdata.priority if: ctx.json?.rdata?.priority != '' type: long ignore_missing: true @@ -315,7 +315,7 @@ processors: value: '{{{_ingest.on_failure_message}}}' - convert: field: json.rdata.weight - target_field: bloxone_ddi.dns_data.rdata.weight + target_field: infoblox_bloxone_ddi.dns_data.rdata.weight if: ctx.json?.rdata?.weight != '' type: long ignore_missing: true @@ -325,15 +325,15 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.rdata.text - target_field: bloxone_ddi.dns_data.rdata.text + target_field: infoblox_bloxone_ddi.dns_data.rdata.text ignore_missing: true - rename: field: json.rdata.type - target_field: bloxone_ddi.dns_data.rdata.type + target_field: infoblox_bloxone_ddi.dns_data.rdata.type ignore_missing: true - convert: field: json.rdata.length_kind - target_field: bloxone_ddi.dns_data.rdata.length_kind + target_field: infoblox_bloxone_ddi.dns_data.rdata.length_kind if: ctx.json?.rdata?.length_kind != '' type: long ignore_missing: true @@ -343,15 +343,15 @@ processors: value: '{{{_ingest.on_failure_message}}}' - rename: field: json.tags - target_field: bloxone_ddi.dns_data.tags + target_field: infoblox_bloxone_ddi.dns_data.tags ignore_missing: true - rename: field: json.source - target_field: bloxone_ddi.dns_data.source + target_field: infoblox_bloxone_ddi.dns_data.source ignore_missing: true - convert: field: json.ttl - target_field: bloxone_ddi.dns_data.ttl + target_field: infoblox_bloxone_ddi.dns_data.ttl if: ctx.json?.ttl != '' type: long ignore_missing: true @@ -361,15 +361,15 @@ processors: value: '{{{_ingest.on_failure_message}}}' - set: field: dns.answers.ttl - copy_from: bloxone_ddi.dns_data.ttl + copy_from: infoblox_bloxone_ddi.dns_data.ttl ignore_failure: true - rename: field: json.type - target_field: bloxone_ddi.dns_data.type + target_field: infoblox_bloxone_ddi.dns_data.type ignore_missing: true - date: field: json.updated_at - target_field: bloxone_ddi.dns_data.updated_at + target_field: infoblox_bloxone_ddi.dns_data.updated_at if: ctx.json?.updated_at != null && ctx.json.updated_at != '' formats: - ISO8601 @@ -379,30 +379,30 @@ processors: value: '{{{_ingest.on_failure_message}}}' - set: field: '@timestamp' - copy_from: bloxone_ddi.dns_data.updated_at + copy_from: infoblox_bloxone_ddi.dns_data.updated_at ignore_failure: true - rename: field: json.view - target_field: bloxone_ddi.dns_data.view + target_field: infoblox_bloxone_ddi.dns_data.view ignore_missing: true - rename: field: json.view_name - target_field: bloxone_ddi.dns_data.view_name + target_field: infoblox_bloxone_ddi.dns_data.view_name ignore_missing: true - rename: field: json.zone - target_field: bloxone_ddi.dns_data.zone + target_field: infoblox_bloxone_ddi.dns_data.zone ignore_missing: true - remove: field: json ignore_missing: true - remove: field: - - bloxone_ddi.dns_data.updated_at - - bloxone_ddi.dns_data.lame_ttl - - bloxone_ddi.dns_data.created_at - - bloxone_ddi.dns_data.id - if: ctx.tags == null || !ctx.tags.contains('preserve_duplicate_custom_fields') + - infoblox_bloxone_ddi.dns_data.updated_at + - infoblox_bloxone_ddi.dns_data.lame_ttl + - infoblox_bloxone_ddi.dns_data.created_at + - infoblox_bloxone_ddi.dns_data.id + if: ctx.tags == null || !(ctx.tags.contains('preserve_duplicate_custom_fields')) ignore_failure: true ignore_missing: true - remove: @@ -428,6 +428,6 @@ processors: } dropEmptyFields(ctx); on_failure: -- append: - field: error.message - value: '{{ _ingest.on_failure_message }}' + - append: + field: error.message + value: '{{ _ingest.on_failure_message }}' diff --git a/packages/bloxone_ddi/data_stream/dns_data/fields/agent.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_data/fields/agent.yml similarity index 100% rename from packages/bloxone_ddi/data_stream/dns_data/fields/agent.yml rename to packages/infoblox_bloxone_ddi/data_stream/dns_data/fields/agent.yml diff --git a/packages/bloxone_ddi/data_stream/dhcp_lease/fields/base-fields.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_data/fields/base-fields.yml similarity index 87% rename from packages/bloxone_ddi/data_stream/dhcp_lease/fields/base-fields.yml rename to packages/infoblox_bloxone_ddi/data_stream/dns_data/fields/base-fields.yml index b70b26f124..e0810a683a 100644 --- a/packages/bloxone_ddi/data_stream/dhcp_lease/fields/base-fields.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_data/fields/base-fields.yml @@ -13,8 +13,8 @@ - name: event.module type: constant_keyword description: Event module. - value: bloxone_ddi + value: infoblox_bloxone_ddi - name: event.dataset type: constant_keyword description: Event dataset. - value: bloxone_ddi.dhcp_lease + value: infoblox_bloxone_ddi.dns_data diff --git a/packages/bloxone_ddi/data_stream/dns_data/fields/ecs.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_data/fields/ecs.yml similarity index 100% rename from packages/bloxone_ddi/data_stream/dns_data/fields/ecs.yml rename to packages/infoblox_bloxone_ddi/data_stream/dns_data/fields/ecs.yml diff --git a/packages/bloxone_ddi/data_stream/dns_data/fields/fields.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_data/fields/fields.yml similarity index 99% rename from packages/bloxone_ddi/data_stream/dns_data/fields/fields.yml rename to packages/infoblox_bloxone_ddi/data_stream/dns_data/fields/fields.yml index 81fa63bc34..357c431732 100644 --- a/packages/bloxone_ddi/data_stream/dns_data/fields/fields.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_data/fields/fields.yml @@ -1,4 +1,4 @@ -- name: bloxone_ddi.dns_data +- name: infoblox_bloxone_ddi.dns_data type: group fields: - name: absolute_name diff --git a/packages/bloxone_ddi/data_stream/dns_data/manifest.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_data/manifest.yml similarity index 79% rename from packages/bloxone_ddi/data_stream/dns_data/manifest.yml rename to packages/infoblox_bloxone_ddi/data_stream/dns_data/manifest.yml index 9c46d277c9..8252efc183 100644 --- a/packages/bloxone_ddi/data_stream/dns_data/manifest.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_data/manifest.yml @@ -1,15 +1,15 @@ -title: Collect DNS Data logs from BloxOne DDI +title: Collect DNS Data logs from Infoblox BloxOne DDI type: logs streams: - input: httpjson title: DNS Data logs - description: Collect DNS Data logs from BloxOne DDI. + description: Collect DNS Data logs from Infoblox BloxOne DDI. template_path: httpjson.yml.hbs vars: - name: initial_interval type: text title: Initial Interval - description: 'How far back to pull the DHCP Lease events from BloxOne DDI. NOTE: Supported units for this parameter are h/m/s.' + description: How far back to pull the DHCP Lease events from Infoblox BloxOne DDI. NOTE:- Supported units for this parameter are h/m/s. multi: false required: true show_user: true @@ -17,7 +17,7 @@ streams: - name: interval type: text title: Interval - description: 'Duration between requests to the BloxOne DDI API. NOTE: Supported units for this parameter are h/m/s.' + description: Duration between requests to the BloxOne DDI API. NOTE:- Supported units for this parameter are h/m/s. multi: false required: true show_user: true @@ -30,7 +30,7 @@ streams: show_user: false default: - forwarded - - bloxone_ddi-dns_data + - bloxone_ddi_dns_data - name: preserve_original_event required: true show_user: true diff --git a/packages/bloxone_ddi/data_stream/dns_data/sample_event.json b/packages/infoblox_bloxone_ddi/data_stream/dns_data/sample_event.json similarity index 91% rename from packages/bloxone_ddi/data_stream/dns_data/sample_event.json rename to packages/infoblox_bloxone_ddi/data_stream/dns_data/sample_event.json index a8a3afb3db..4174a29a74 100644 --- a/packages/bloxone_ddi/data_stream/dns_data/sample_event.json +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_data/sample_event.json @@ -1,13 +1,47 @@ { "@timestamp": "2022-07-20T09:59:59.184Z", "agent": { - "ephemeral_id": "da7708aa-c88f-46d1-a30c-e60c7f97d1ed", - "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", + "ephemeral_id": "4abbe17d-42d0-49cb-aca5-f10c2364ddc4", + "hostname": "docker-fleet-agent", + "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", "name": "docker-fleet-agent", "type": "filebeat", - "version": "8.2.0" + "version": "7.17.0" }, - "bloxone_ddi": { + "data_stream": { + "dataset": "infoblox_bloxone_ddi.dns_data", + "namespace": "ep", + "type": "logs" + }, + "dns": { + "answers": { + "ttl": 0 + } + }, + "ecs": { + "version": "8.4.0" + }, + "elastic_agent": { + "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", + "snapshot": false, + "version": "7.17.0" + }, + "event": { + "agent_id_status": "verified", + "category": [ + "network" + ], + "created": "2022-07-20T09:59:59.184Z", + "dataset": "infoblox_bloxone_ddi.dns_data", + "id": "ghr123ghf", + "ingested": "2022-09-21T12:24:14Z", + "kind": "event", + "original": "{\"absolute_name_spec\":\"DNS Data Absolute Name\",\"absolute_zone_name\":\"DNS Data Absolute Zone Name\",\"comment\":\"DNS Data Comment\",\"created_at\":\"2022-07-20T09:59:59.184Z\",\"delegation\":\"DNS Data Delegation\",\"disabled\":true,\"dns_absolute_name_spec\":\"DNS Absolute Name\",\"dns_absolute_zone_name\":\"DNS Absolute Zone Name\",\"dns_name_in_zone\":\"DNS Name in Zone\",\"dns_rdata\":\"DNS RData\",\"id\":\"ghr123ghf\",\"inheritance_sources\":{\"ttl\":{\"action\":\"DNS Data Action\",\"display_name\":\"DNS Display Name\",\"source\":\"DNS Data Source\",\"value\":10}},\"name_in_zone\":\"DNS Data Name in zone\",\"options\":{\"address\":\"67.43.156.0\",\"check_rmz\":true,\"create_ptr\":false},\"rdata\":{\"address\":\"81.2.69.192\",\"cname\":\"DNS Data Canonical Name\",\"dhcid\":\"122zbczba12\",\"dname\":\"DNS Data dname\",\"exchange\":\"DNS Data Exchange\",\"expire\":23131,\"flags\":\"DNS Data Flags\",\"length_kind\":8,\"mname\":\"DNS Data mname\",\"negative_ttl\":213342,\"order\":123124,\"port\":80,\"preference\":12345363467,\"priority\":44,\"refresh\":10800,\"regexp\":\"none\",\"replacement\":\"DNS Data Replacement\",\"retry\":3600,\"rname\":\"DNS Data rname\",\"serial\":12314114,\"services\":\"DNS Data Test Services\",\"tag\":\"issue\",\"target\":\"DNS Data Target\",\"text\":\"DNS Data text field\",\"type\":\"32BIT\",\"value\":\"DNS Data Value\",\"weight\":0},\"source\":[\"STATIC\"],\"tags\":{\"message\":\"Hello\"},\"ttl\":0,\"type\":\"DNS Data Type\",\"updated_at\":\"2022-07-20T09:59:59.184Z\",\"view\":\"DNS Data View\",\"view_name\":\"DNS Data View Name\",\"zone\":\"DNS Data Zone\"}", + "type": [ + "protocol" + ] + }, + "infoblox_bloxone_ddi": { "dns_data": { "absolute": { "name": { @@ -93,39 +127,6 @@ "zone": "DNS Data Zone" } }, - "data_stream": { - "dataset": "bloxone_ddi.dns_data", - "namespace": "ep", - "type": "logs" - }, - "dns": { - "answers": { - "ttl": 0 - } - }, - "ecs": { - "version": "8.4.0" - }, - "elastic_agent": { - "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", - "snapshot": false, - "version": "8.2.0" - }, - "event": { - "agent_id_status": "verified", - "category": [ - "network" - ], - "created": "2022-07-20T09:59:59.184Z", - "dataset": "bloxone_ddi.dns_data", - "id": "ghr123ghf", - "ingested": "2022-09-06T08:41:27Z", - "kind": "event", - "original": "{\"absolute_name_spec\":\"DNS Data Absolute Name\",\"absolute_zone_name\":\"DNS Data Absolute Zone Name\",\"comment\":\"DNS Data Comment\",\"created_at\":\"2022-07-20T09:59:59.184Z\",\"delegation\":\"DNS Data Delegation\",\"disabled\":true,\"dns_absolute_name_spec\":\"DNS Absolute Name\",\"dns_absolute_zone_name\":\"DNS Absolute Zone Name\",\"dns_name_in_zone\":\"DNS Name in Zone\",\"dns_rdata\":\"DNS RData\",\"id\":\"ghr123ghf\",\"inheritance_sources\":{\"ttl\":{\"action\":\"DNS Data Action\",\"display_name\":\"DNS Display Name\",\"source\":\"DNS Data Source\",\"value\":10}},\"name_in_zone\":\"DNS Data Name in zone\",\"options\":{\"address\":\"67.43.156.0\",\"check_rmz\":true,\"create_ptr\":false},\"rdata\":{\"address\":\"81.2.69.192\",\"cname\":\"DNS Data Canonical Name\",\"dhcid\":\"122zbczba12\",\"dname\":\"DNS Data dname\",\"exchange\":\"DNS Data Exchange\",\"expire\":23131,\"flags\":\"DNS Data Flags\",\"length_kind\":8,\"mname\":\"DNS Data mname\",\"negative_ttl\":213342,\"order\":123124,\"port\":80,\"preference\":12345363467,\"priority\":44,\"refresh\":10800,\"regexp\":\"none\",\"replacement\":\"DNS Data Replacement\",\"retry\":3600,\"rname\":\"DNS Data rname\",\"serial\":12314114,\"services\":\"DNS Data Test Services\",\"tag\":\"issue\",\"target\":\"DNS Data Target\",\"text\":\"DNS Data text field\",\"type\":\"32BIT\",\"value\":\"DNS Data Value\",\"weight\":0},\"source\":[\"STATIC\"],\"tags\":{\"message\":\"Hello\"},\"ttl\":0,\"type\":\"DNS Data Type\",\"updated_at\":\"2022-07-20T09:59:59.184Z\",\"view\":\"DNS Data View\",\"view_name\":\"DNS Data View Name\",\"zone\":\"DNS Data Zone\"}", - "type": [ - "protocol" - ] - }, "input": { "type": "httpjson" }, @@ -139,6 +140,6 @@ "preserve_original_event", "preserve_duplicate_custom_fields", "forwarded", - "bloxone_ddi-dns_data" + "bloxone_ddi_dns_data" ] } \ No newline at end of file diff --git a/packages/bloxone_ddi/docs/README.md b/packages/infoblox_bloxone_ddi/docs/README.md similarity index 57% rename from packages/bloxone_ddi/docs/README.md rename to packages/infoblox_bloxone_ddi/docs/README.md index 6759d6211b..8f65ab5ae5 100644 --- a/packages/bloxone_ddi/docs/README.md +++ b/packages/infoblox_bloxone_ddi/docs/README.md @@ -1,30 +1,30 @@ -# BloxOne DDI +# Infoblox BloxOne DDI ## Overview -The [BloxOne DDI](https://www.infoblox.com/products/bloxone-ddi/) integration allows you to monitor DNS, DHCP and IP address management activity. DDI is the foundation of core network services that enables all communications over an IP-based network. +The [Infoblox BloxOne DDI](https://www.infoblox.com/products/bloxone-ddi/) integration allows you to monitor DNS, DHCP and IP address management activity. DDI is the foundation of core network services that enables all communications over an IP-based network. -Use the BloxOne DDI integration to collects and parses data from the REST APIs and then visualize that data in Kibana. +Use the Infoblox BloxOne DDI integration to collects and parses data from the REST APIs and then visualize that data in Kibana. ## Data streams -The BloxOne DDI integration collects logs for three types of events: DHCP lease, DNS data and DNS config. +The Infoblox BloxOne DDI integration collects logs for three types of events: DHCP lease, DNS data and DNS config. -**DHCP Lease** is a BloxOne DDI service that stores information about leases. See more details about its API [here](https://csp.infoblox.com/apidoc?url=https%3A%2F%2Fcsp.infoblox.com%2Fapidoc%2Fdocs%2FDhcpLeases). +**DHCP Lease** is a Infoblox BloxOne DDI service that stores information about leases. See more details about its API [here](https://csp.infoblox.com/apidoc?url=https%3A%2F%2Fcsp.infoblox.com%2Fapidoc%2Fdocs%2FDhcpLeases). -**DNS Config** is a BloxOne DDI service that provides cloud-based DNS configuration with on-prem host serving DNS protocol. See more details about its API [here](https://csp.infoblox.com/apidoc?url=https%3A%2F%2Fcsp.infoblox.com%2Fapidoc%2Fdocs%2FDnsConfig). +**DNS Config** is a Infoblox BloxOne DDI service that provides cloud-based DNS configuration with on-prem host serving DNS protocol. See more details about its API [here](https://csp.infoblox.com/apidoc?url=https%3A%2F%2Fcsp.infoblox.com%2Fapidoc%2Fdocs%2FDnsConfig). -**DNS Data** is a BloxOne DDI service providing primary authoritative zone support. DNS Data is authoritative for all DNS resource records and is acting as a primary DNS server. See more details about its API [here](https://csp.infoblox.com/apidoc?url=https%3A%2F%2Fcsp.infoblox.com%2Fapidoc%2Fdocs%2FDnsData). +**DNS Data** is a Infoblox BloxOne DDI service providing primary authoritative zone support. DNS Data is authoritative for all DNS resource records and is acting as a primary DNS server. See more details about its API [here](https://csp.infoblox.com/apidoc?url=https%3A%2F%2Fcsp.infoblox.com%2Fapidoc%2Fdocs%2FDnsData). ## 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. -This module has been tested against `BloxOne DDI API (v1)`. +This module has been tested against `Infoblox BloxOne DDI API (v1)`. ## Setup -### To collect data from BloxOne DDI APIs, the user must have API Key. To create an API key follow the below steps: +### To collect data from Infoblox BloxOne DDI APIs, the user must have API Key. To create an API key follow the below steps: 1. Log on to the Cloud Services Portal. 2. Go to ** -> User Profile**. @@ -38,9 +38,9 @@ This module has been tested against `BloxOne DDI API (v1)`. ### Enabling the integration in Elastic 1. In Kibana go to **Management > Integrations**. -2. In the "Search for integrations" search bar, type **BloxOne DDI**. -3. Click on **BloxOne DDI** integration from the search results. -4. Click on **Add BloxOne DDI** button to add BloxOne DDI integration. +2. In the "Search for integrations" search bar, type **Infoblox BloxOne DDI**. +3. Click on **Infoblox BloxOne DDI** integration from the search results. +4. Click on **Add Infoblox BloxOne DDI** button to add Infoblox BloxOne DDI integration. 5. Enable the Integration to collect logs via API. ## Logs Reference @@ -57,37 +57,12 @@ An example event for `dhcp_lease` looks as following: { "@timestamp": "2022-07-11T11:51:15.417Z", "agent": { - "ephemeral_id": "fad9cbfb-ec00-4ac5-a82a-5b27693128dd", - "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", + "ephemeral_id": "fcbbacc1-cc56-4655-ace0-3ab9860b392b", + "hostname": "docker-fleet-agent", + "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", "name": "docker-fleet-agent", "type": "filebeat", - "version": "8.2.0" - }, - "bloxone_ddi": { - "dhcp_lease": { - "address": "81.2.69.192", - "client_id": "abc3212abc", - "ends": "2022-07-11T11:51:15.417Z", - "fingerprint": { - "processed": "12abca32bca32abcd", - "value": "ab3213cbabab/abc23bca" - }, - "ha_group": "abc321cdcbda321", - "hardware": "00-00-5E-00-53-00", - "host": "admin", - "hostname": "Host1", - "iaid": 0, - "last_updated": "2022-07-11T11:51:15.417Z", - "options": { - "message": "Hello" - }, - "preferred_lifetime": "2022-07-11T11:51:15.417Z", - "protocol": "ipv4", - "space": "DHCP lease Space", - "starts": "2022-07-14T11:51:15.417Z", - "state": "used", - "type": "DHCP lease Type" - } + "version": "7.17.0" }, "client": { "user": { @@ -95,7 +70,7 @@ An example event for `dhcp_lease` looks as following: } }, "data_stream": { - "dataset": "bloxone_ddi.dhcp_lease", + "dataset": "infoblox_bloxone_ddi.dhcp_lease", "namespace": "ep", "type": "logs" }, @@ -103,19 +78,19 @@ An example event for `dhcp_lease` looks as following: "version": "8.4.0" }, "elastic_agent": { - "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", + "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", "snapshot": false, - "version": "8.2.0" + "version": "7.17.0" }, "event": { "agent_id_status": "verified", "category": [ "network" ], - "created": "2022-09-06T08:40:04.396Z", - "dataset": "bloxone_ddi.dhcp_lease", + "created": "2022-09-21T12:22:53.498Z", + "dataset": "infoblox_bloxone_ddi.dhcp_lease", "end": "2022-07-11T11:51:15.417Z", - "ingested": "2022-09-06T08:40:05Z", + "ingested": "2022-09-21T12:22:57Z", "kind": "event", "original": "{\"address\":\"81.2.69.192\",\"client_id\":\"abc3212abc\",\"ends\":\"2022-07-11T11:51:15.417Z\",\"fingerprint\":\"ab3213cbabab/abc23bca\",\"fingerprint_processed\":\"12abca32bca32abcd\",\"ha_group\":\"abc321cdcbda321\",\"hardware\":\"00:00:5E:00:53:00\",\"host\":\"admin\",\"hostname\":\"Host1\",\"iaid\":0,\"last_updated\":\"2022-07-11T11:51:15.417Z\",\"options\":{\"message\":\"Hello\"},\"preferred_lifetime\":\"2022-07-11T11:51:15.417Z\",\"protocol\":\"ip4\",\"space\":\"DHCP lease Space\",\"starts\":\"2022-07-14T11:51:15.417Z\",\"state\":\"used\",\"type\":\"DHCP lease Type\"}", "start": "2022-07-14T11:51:15.417Z", @@ -127,6 +102,32 @@ An example event for `dhcp_lease` looks as following: "hostname": "Host1", "name": "admin" }, + "infoblox_bloxone_ddi": { + "dhcp_lease": { + "address": "81.2.69.192", + "client_id": "abc3212abc", + "ends": "2022-07-11T11:51:15.417Z", + "fingerprint": { + "processed": "12abca32bca32abcd", + "value": "ab3213cbabab/abc23bca" + }, + "ha_group": "abc321cdcbda321", + "hardware": "00-00-5E-00-53-00", + "host": "admin", + "hostname": "Host1", + "iaid": 0, + "last_updated": "2022-07-11T11:51:15.417Z", + "options": { + "message": "Hello" + }, + "preferred_lifetime": "2022-07-11T11:51:15.417Z", + "protocol": "ipv4", + "space": "DHCP lease Space", + "starts": "2022-07-14T11:51:15.417Z", + "state": "used", + "type": "DHCP lease Type" + } + }, "input": { "type": "httpjson" }, @@ -146,7 +147,7 @@ An example event for `dhcp_lease` looks as following: "preserve_original_event", "preserve_duplicate_custom_fields", "forwarded", - "bloxone_ddi-dhcp_lease" + "infoblox_bloxone_ddi_dhcp_lease" ] } ``` @@ -156,24 +157,6 @@ An example event for `dhcp_lease` looks as following: | Field | Description | Type | |---|---|---| | @timestamp | Event timestamp. | date | -| bloxone_ddi.dhcp_lease.address | The IP address of the DHCP lease in the format "a.b.c.d". This address will be marked as leased in IPAM while the lease exists. | ip | -| bloxone_ddi.dhcp_lease.client_id | The client ID of the DHCP lease. It might be empty. | keyword | -| bloxone_ddi.dhcp_lease.ends | The time when the DHCP lease will expire. | date | -| bloxone_ddi.dhcp_lease.fingerprint.processed | Indicates if the DHCP lease has been fingerprinted. | keyword | -| bloxone_ddi.dhcp_lease.fingerprint.value | The DHCP fingerprint of the lease. | keyword | -| bloxone_ddi.dhcp_lease.ha_group | The resource identifier. | keyword | -| bloxone_ddi.dhcp_lease.hardware | The hardware address of the DHCP lease. This specifies the MAC address of the network interface on which the lease will be used. It consists of six groups of two hex digits in lower-case separated by colons. For example, "aa:bb:cc:dd:ee:ff". | keyword | -| bloxone_ddi.dhcp_lease.host | The resource identifier. | keyword | -| bloxone_ddi.dhcp_lease.hostname | The client hostname of the DHCP lease. This specifies the host name that the DHCP client sends to the DHCP server using DHCP option 12. It is a fully qualified domain name, consisting of a series of labels separated by dots. For example, "www.infoblox.com". It might be empty. | keyword | -| bloxone_ddi.dhcp_lease.iaid | Identity Association Identifier (IAID) of the lease. Applicable only for DHCPv6. | long | -| bloxone_ddi.dhcp_lease.last_updated | The time when the DHCP lease was last updated. | date | -| bloxone_ddi.dhcp_lease.options | The DHCP options of the lease in JSON format. | flattened | -| bloxone_ddi.dhcp_lease.preferred_lifetime | The preferred time when the DHCP lease should expire. Applicable only for DHCPv6. | date | -| bloxone_ddi.dhcp_lease.protocol | Lease protocol type. | keyword | -| bloxone_ddi.dhcp_lease.space | The resource identifier. | keyword | -| bloxone_ddi.dhcp_lease.starts | The time when the DHCP lease was issued. | date | -| bloxone_ddi.dhcp_lease.state | The state of the DHCP lease. | keyword | -| bloxone_ddi.dhcp_lease.type | Lease type. | keyword | | client.user.id | Unique identifier of the user. | 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.availability_zone | Availability zone in which this host is running. | keyword | @@ -218,6 +201,24 @@ An example event for `dhcp_lease` looks as following: | host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | | host.os.version | Operating system version as a raw string. | keyword | | host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| infoblox_bloxone_ddi.dhcp_lease.address | The IP address of the DHCP lease in the format "a.b.c.d". This address will be marked as leased in IPAM while the lease exists. | ip | +| infoblox_bloxone_ddi.dhcp_lease.client_id | The client ID of the DHCP lease. It might be empty. | keyword | +| infoblox_bloxone_ddi.dhcp_lease.ends | The time when the DHCP lease will expire. | date | +| infoblox_bloxone_ddi.dhcp_lease.fingerprint.processed | Indicates if the DHCP lease has been fingerprinted. | keyword | +| infoblox_bloxone_ddi.dhcp_lease.fingerprint.value | The DHCP fingerprint of the lease. | keyword | +| infoblox_bloxone_ddi.dhcp_lease.ha_group | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dhcp_lease.hardware | The hardware address of the DHCP lease. This specifies the MAC address of the network interface on which the lease will be used. It consists of six groups of two hex digits in lower-case separated by colons. For example, "aa:bb:cc:dd:ee:ff". | keyword | +| infoblox_bloxone_ddi.dhcp_lease.host | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dhcp_lease.hostname | The client hostname of the DHCP lease. This specifies the host name that the DHCP client sends to the DHCP server using DHCP option 12. It is a fully qualified domain name, consisting of a series of labels separated by dots. For example, "www.infoblox.com". It might be empty. | keyword | +| infoblox_bloxone_ddi.dhcp_lease.iaid | Identity Association Identifier (IAID) of the lease. Applicable only for DHCPv6. | long | +| infoblox_bloxone_ddi.dhcp_lease.last_updated | The time when the DHCP lease was last updated. | date | +| infoblox_bloxone_ddi.dhcp_lease.options | The DHCP options of the lease in JSON format. | flattened | +| infoblox_bloxone_ddi.dhcp_lease.preferred_lifetime | The preferred time when the DHCP lease should expire. Applicable only for DHCPv6. | date | +| infoblox_bloxone_ddi.dhcp_lease.protocol | Lease protocol type. | keyword | +| infoblox_bloxone_ddi.dhcp_lease.space | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dhcp_lease.starts | The time when the DHCP lease was issued. | date | +| infoblox_bloxone_ddi.dhcp_lease.state | The state of the DHCP lease. | keyword | +| infoblox_bloxone_ddi.dhcp_lease.type | Lease type. | keyword | | input.type | Input type | keyword | | log.offset | Log offset | long | | network.type | In the OSI Model this would be the Network Layer. ipv4, ipv6, ipsec, pim, etc The field value must be normalized to lowercase for querying. | keyword | @@ -238,13 +239,47 @@ An example event for `dns_config` looks as following: { "@timestamp": "2022-07-15T06:55:25.978Z", "agent": { - "ephemeral_id": "3a899061-08e0-4d29-910a-3be5d29b5205", - "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", + "ephemeral_id": "81dd62b7-0768-4bb1-aaf4-9957a83f141e", + "hostname": "docker-fleet-agent", + "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", "name": "docker-fleet-agent", "type": "filebeat", - "version": "8.2.0" + "version": "7.17.0" + }, + "data_stream": { + "dataset": "infoblox_bloxone_ddi.dns_config", + "namespace": "ep", + "type": "logs" + }, + "dns": { + "answers": { + "ttl": 350 + } + }, + "ecs": { + "version": "8.4.0" + }, + "elastic_agent": { + "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", + "snapshot": false, + "version": "7.17.0" + }, + "event": { + "agent_id_status": "verified", + "category": [ + "network" + ], + "created": "2022-07-15T06:55:25.978Z", + "dataset": "infoblox_bloxone_ddi.dns_config", + "id": "adv12rgfh", + "ingested": "2022-09-21T12:23:36Z", + "kind": "event", + "original": "{\"add_edns_option_in_outgoing_query\":true,\"comment\":\"DNS Config Comment\",\"created_at\":\"2022-07-15T06:55:25.978Z\",\"custom_root_ns\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"custom fqdn\",\"protocol_fqdn\":\"custom protocol fqdn\"}],\"custom_root_ns_enabled\":true,\"disabled\":true,\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_root_keys\":[{\"algorithm\":30,\"protocol_zone\":\"Dnssec root protocol zone\",\"public_key\":\"Dnssec root Public Key\",\"sep\":true,\"zone\":\"Dnssec root Zone\"}],\"dnssec_trust_anchors\":[{\"algorithm\":10,\"protocol_zone\":\"Dnssec trust protocol zone\",\"public_key\":\"Dnssec trust Public Key\",\"sep\":true,\"zone\":\"Dnssec trust zone\"}],\"dnssec_validate_expiry\":true,\"ecs_enabled\":true,\"ecs_forwarding\":true,\"ecs_prefix_v4\":22,\"ecs_prefix_v6\":33,\"ecs_zones\":[{\"access\":\"ecs zones access\",\"fqdn\":\"ecs zones fqdn\",\"protocol_fqdn\":\"ecs zones protocol fqdn\"}],\"edns_udp_size\":568,\"forwarders\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"forwarders fqdn\",\"protocol_fqdn\":\"forwarders protocol fqdn\"}],\"forwarders_only\":true,\"gss_tsig_enabled\":true,\"id\":\"adv12rgfh\",\"inheritance_sources\":{\"add_edns_option_in_outgoing_query\":{\"action\":\"inherit\",\"display_name\":\"displaynameadd_edns_option_in_outgoing_query\",\"source\":\"sourceadd_edns_option_in_outgoing_query\",\"value\":true},\"custom_root_ns_block\":{\"action\":\"override\",\"display_name\":\"displaynamecustom_root_ns_block\",\"source\":\"sourcecustom_root_ns_block\",\"value\":{\"custom_root_ns\":[{\"address\":\"67.43.156.0\",\"fqdn\":\"fqdn_custom_root_ns\",\"protocol_fqdn\":\"protocolfqdn_custom_root_ns\"}],\"custom_root_ns_enabled\":true}},\"dnssec_validation_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamednssec_validation_block\",\"source\":\"sourcednssec_validation_block\",\"value\":{\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_trust_anchors\":[{\"algorithm\":8,\"protocol_zone\":\"protocolzonednssec_trust_anchors\",\"public_key\":\"publickeydnssec_trust_anchors\",\"sep\":false,\"zone\":\"is3zone\"}],\"dnssec_validate_expiry\":true}},\"ecs_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameecs_block\",\"source\":\"sourceecs_block\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":10,\"ecs_zones\":[{\"access\":\"inherit\",\"fqdn\":\"fqdnecs_block\",\"protocol_fqdn\":\"protocol_fqdnecs_block\"}]}},\"ecs_zones\":{\"action\":\"override\",\"display_name\":\"displaynameecs_zones\",\"source\":\"sourceecs_zones\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":12,\"ecs_zones\":[{\"access\":\"access_ecs_zones\",\"fqdn\":\"fqdn_ecs_zones\",\"protocol_fqdn\":\"protocolfqdn_ecs_zones\"}]}},\"edns_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynameedns_udp_size\",\"source\":\"sourceedns_udp_size\",\"value\":55},\"forwarders_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameforwarders_block\",\"source\":\"sourceforwarders_block\",\"value\":{\"forwarders\":[{\"address\":\"89.160.20.128\",\"fqdn\":\"forwarders_fqdn\",\"protocol_fqdn\":\"forwarders_protocolfqdn\"}],\"forwarders_only\":true}},\"gss_tsig_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamegss_tsig_enabled\",\"source\":\"sourcegss_tsig_enabled\",\"value\":true},\"lame_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamelame_ttl\",\"source\":\"sourcelame_ttl\",\"value\":45},\"match_recursive_only\":{\"action\":\"inherit\",\"display_name\":\"displaynamematch_recursive_only\",\"source\":\"sourcematch_recursive_only\",\"value\":false},\"max_cache_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_cache_ttl\",\"source\":\"sourcemax_cache_ttl\",\"value\":13},\"max_negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_negative_ttl\",\"source\":\"sourcemax_negative_ttl\",\"value\":12},\"max_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_udp_size\",\"source\":\"sourcemax_udp_size\",\"value\":11},\"minimal_responses\":{\"action\":\"inherit\",\"display_name\":\"displaynameminimal_responses\",\"source\":\"sourceminimal_responses\",\"value\":true},\"notify\":{\"action\":\"inherit\",\"display_name\":\"displayname_notify\",\"source\":\"source_notify\",\"value\":true},\"query_acl\":{\"action\":\"override\",\"display_name\":\"displaynamequery_acl\",\"source\":\"sourcequery_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclvalue_query_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementvaluequery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha256\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolname_query_acl\",\"secret\":\"secretquery_acl\"}}]},\"recursion_acl\":{\"action\":\"override\",\"display_name\":\"displaynamerecursion_acl\",\"source\":\"sourcerecursion_acl\",\"value\":[{\"access\":\"deny\",\"acl\":\"aclrecursion_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}]},\"recursion_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamerecursion_enabled\",\"source\":\"sourcerecursion_enabled\",\"value\":true},\"synthesize_address_records_from_https\":{\"action\":\"inherit\",\"display_name\":\"displaynamesynthesize_address_records_from_https\",\"source\":\"sourcesynthesize_address_records_from_https\",\"value\":true},\"transfer_acl\":{\"action\":\"inherit\",\"display_name\":\"displaynametransfer_acl\",\"source\":\"sourcetransfer_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}]},\"update_acl\":{\"action\":\"override\",\"display_name\":\"displaynameupdate_acl\",\"source\":\"sourceupdate_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}]},\"use_forwarders_for_subzones\":{\"action\":\"override\",\"display_name\":\"displaynameuse_forwarders_for_subzones\",\"source\":\"sourceuse_forwarders_for_subzones\",\"value\":false},\"zone_authority\":{\"default_ttl\":{\"action\":\"override\",\"display_name\":\"displaynamezone_authority\",\"source\":\"sourcezone_authority\",\"value\":50},\"expire\":{\"action\":\"inherit\",\"display_name\":\"displaynameexpire\",\"source\":\"sourceexpire\",\"value\":70},\"mname_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamemname_block\",\"source\":\"sourcemname_block\",\"value\":{\"mname\":\"mnamevaluemname_block\",\"protocol_mname\":\"protocolmnamemname_block\",\"use_default_mname\":true}},\"negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamenegative_ttl\",\"source\":\"sourcenegative_ttl\",\"value\":90},\"protocol_rname\":{\"action\":\"inherit\",\"display_name\":\"displaynameprotocol_rname\",\"source\":\"sourceprotocol_rname\",\"value\":\"valueprotocol_rname\"},\"refresh\":{\"action\":\"inherit\",\"display_name\":\"displayname_refresh\",\"source\":\"source_refresh\",\"value\":40},\"retry\":{\"action\":\"inherit\",\"display_name\":\"displayname_retry\",\"source\":\"source_retry\",\"value\":570},\"rname\":{\"action\":\"inherit\",\"display_name\":\"displayname_rname\",\"source\":\"source_rname\",\"value\":\"value_rname\"}}},\"ip_spaces\":[\"testipspaces\"],\"lame_ttl\":350,\"match_clients_acl\":[{\"access\":\"deny\",\"acl\":\"aclmatch_clients_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_clients_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha512\",\"comment\":\"commentmatch_clients_acl\",\"key\":\"keymatch_clients_acl\",\"name\":\"namematch_clients_acl\",\"protocol_name\":\"protocolnamematch_clients_acl\",\"secret\":\"secretmatch_clients_acl\"}}],\"match_destinations_acl\":[{\"access\":\"allow\",\"acl\":\"aclmatch_destinations_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_destinations_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentmatch_destinations_acl\",\"key\":\"keymatch_destinations_acl\",\"name\":\"namematch_destinations_acl\",\"protocol_name\":\"protocolnamematch_destinations_acl\",\"secret\":\"secretmatch_destinations_acl\"}}],\"match_recursive_only\":true,\"max_cache_ttl\":90,\"max_negative_ttl\":500,\"max_udp_size\":890,\"minimal_responses\":true,\"name\":\"string\",\"notify\":true,\"query_acl\":[{\"access\":\"accessquery_acl\",\"acl\":\"aclquery_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementquery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolnamequery_acl\",\"secret\":\"secretquery_acl\"}}],\"recursion_acl\":[{\"access\":\"allow\",\"acl\":\"aclrecursion_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}],\"recursion_enabled\":true,\"synthesize_address_records_from_https\":false,\"tags\":{\"message\":\"Hello\"},\"transfer_acl\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}],\"update_acl\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}],\"updated_at\":\"2022-07-15T06:55:25.978Z\",\"use_forwarders_for_subzones\":true,\"zone_authority\":{\"default_ttl\":20,\"expire\":10,\"mname\":\"mnamezone_authority\",\"negative_ttl\":30,\"protocol_mname\":\"protocolmnamezone_authority\",\"protocol_rname\":\"protocolrnamezone_authority\",\"refresh\":50,\"retry\":100,\"rname\":\"string\",\"use_default_mname\":true}}", + "type": [ + "protocol" + ] }, - "bloxone_ddi": { + "infoblox_bloxone_ddi": { "dns_config": { "add_edns": { "option_in": { @@ -846,39 +881,6 @@ An example event for `dns_config` looks as following: } } }, - "data_stream": { - "dataset": "bloxone_ddi.dns_config", - "namespace": "ep", - "type": "logs" - }, - "dns": { - "answers": { - "ttl": 350 - } - }, - "ecs": { - "version": "8.4.0" - }, - "elastic_agent": { - "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", - "snapshot": false, - "version": "8.2.0" - }, - "event": { - "agent_id_status": "verified", - "category": [ - "network" - ], - "created": "2022-07-15T06:55:25.978Z", - "dataset": "bloxone_ddi.dns_config", - "id": "adv12rgfh", - "ingested": "2022-09-06T08:40:46Z", - "kind": "event", - "original": "{\"add_edns_option_in_outgoing_query\":true,\"comment\":\"DNS Config Comment\",\"created_at\":\"2022-07-15T06:55:25.978Z\",\"custom_root_ns\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"custom fqdn\",\"protocol_fqdn\":\"custom protocol fqdn\"}],\"custom_root_ns_enabled\":true,\"disabled\":true,\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_root_keys\":[{\"algorithm\":30,\"protocol_zone\":\"Dnssec root protocol zone\",\"public_key\":\"Dnssec root Public Key\",\"sep\":true,\"zone\":\"Dnssec root Zone\"}],\"dnssec_trust_anchors\":[{\"algorithm\":10,\"protocol_zone\":\"Dnssec trust protocol zone\",\"public_key\":\"Dnssec trust Public Key\",\"sep\":true,\"zone\":\"Dnssec trust zone\"}],\"dnssec_validate_expiry\":true,\"ecs_enabled\":true,\"ecs_forwarding\":true,\"ecs_prefix_v4\":22,\"ecs_prefix_v6\":33,\"ecs_zones\":[{\"access\":\"ecs zones access\",\"fqdn\":\"ecs zones fqdn\",\"protocol_fqdn\":\"ecs zones protocol fqdn\"}],\"edns_udp_size\":568,\"forwarders\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"forwarders fqdn\",\"protocol_fqdn\":\"forwarders protocol fqdn\"}],\"forwarders_only\":true,\"gss_tsig_enabled\":true,\"id\":\"adv12rgfh\",\"inheritance_sources\":{\"add_edns_option_in_outgoing_query\":{\"action\":\"inherit\",\"display_name\":\"displaynameadd_edns_option_in_outgoing_query\",\"source\":\"sourceadd_edns_option_in_outgoing_query\",\"value\":true},\"custom_root_ns_block\":{\"action\":\"override\",\"display_name\":\"displaynamecustom_root_ns_block\",\"source\":\"sourcecustom_root_ns_block\",\"value\":{\"custom_root_ns\":[{\"address\":\"67.43.156.0\",\"fqdn\":\"fqdn_custom_root_ns\",\"protocol_fqdn\":\"protocolfqdn_custom_root_ns\"}],\"custom_root_ns_enabled\":true}},\"dnssec_validation_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamednssec_validation_block\",\"source\":\"sourcednssec_validation_block\",\"value\":{\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_trust_anchors\":[{\"algorithm\":8,\"protocol_zone\":\"protocolzonednssec_trust_anchors\",\"public_key\":\"publickeydnssec_trust_anchors\",\"sep\":false,\"zone\":\"is3zone\"}],\"dnssec_validate_expiry\":true}},\"ecs_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameecs_block\",\"source\":\"sourceecs_block\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":10,\"ecs_zones\":[{\"access\":\"inherit\",\"fqdn\":\"fqdnecs_block\",\"protocol_fqdn\":\"protocol_fqdnecs_block\"}]}},\"ecs_zones\":{\"action\":\"override\",\"display_name\":\"displaynameecs_zones\",\"source\":\"sourceecs_zones\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":12,\"ecs_zones\":[{\"access\":\"access_ecs_zones\",\"fqdn\":\"fqdn_ecs_zones\",\"protocol_fqdn\":\"protocolfqdn_ecs_zones\"}]}},\"edns_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynameedns_udp_size\",\"source\":\"sourceedns_udp_size\",\"value\":55},\"forwarders_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameforwarders_block\",\"source\":\"sourceforwarders_block\",\"value\":{\"forwarders\":[{\"address\":\"89.160.20.128\",\"fqdn\":\"forwarders_fqdn\",\"protocol_fqdn\":\"forwarders_protocolfqdn\"}],\"forwarders_only\":true}},\"gss_tsig_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamegss_tsig_enabled\",\"source\":\"sourcegss_tsig_enabled\",\"value\":true},\"lame_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamelame_ttl\",\"source\":\"sourcelame_ttl\",\"value\":45},\"match_recursive_only\":{\"action\":\"inherit\",\"display_name\":\"displaynamematch_recursive_only\",\"source\":\"sourcematch_recursive_only\",\"value\":false},\"max_cache_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_cache_ttl\",\"source\":\"sourcemax_cache_ttl\",\"value\":13},\"max_negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_negative_ttl\",\"source\":\"sourcemax_negative_ttl\",\"value\":12},\"max_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_udp_size\",\"source\":\"sourcemax_udp_size\",\"value\":11},\"minimal_responses\":{\"action\":\"inherit\",\"display_name\":\"displaynameminimal_responses\",\"source\":\"sourceminimal_responses\",\"value\":true},\"notify\":{\"action\":\"inherit\",\"display_name\":\"displayname_notify\",\"source\":\"source_notify\",\"value\":true},\"query_acl\":{\"action\":\"override\",\"display_name\":\"displaynamequery_acl\",\"source\":\"sourcequery_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclvalue_query_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementvaluequery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha256\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolname_query_acl\",\"secret\":\"secretquery_acl\"}}]},\"recursion_acl\":{\"action\":\"override\",\"display_name\":\"displaynamerecursion_acl\",\"source\":\"sourcerecursion_acl\",\"value\":[{\"access\":\"deny\",\"acl\":\"aclrecursion_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}]},\"recursion_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamerecursion_enabled\",\"source\":\"sourcerecursion_enabled\",\"value\":true},\"synthesize_address_records_from_https\":{\"action\":\"inherit\",\"display_name\":\"displaynamesynthesize_address_records_from_https\",\"source\":\"sourcesynthesize_address_records_from_https\",\"value\":true},\"transfer_acl\":{\"action\":\"inherit\",\"display_name\":\"displaynametransfer_acl\",\"source\":\"sourcetransfer_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}]},\"update_acl\":{\"action\":\"override\",\"display_name\":\"displaynameupdate_acl\",\"source\":\"sourceupdate_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}]},\"use_forwarders_for_subzones\":{\"action\":\"override\",\"display_name\":\"displaynameuse_forwarders_for_subzones\",\"source\":\"sourceuse_forwarders_for_subzones\",\"value\":false},\"zone_authority\":{\"default_ttl\":{\"action\":\"override\",\"display_name\":\"displaynamezone_authority\",\"source\":\"sourcezone_authority\",\"value\":50},\"expire\":{\"action\":\"inherit\",\"display_name\":\"displaynameexpire\",\"source\":\"sourceexpire\",\"value\":70},\"mname_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamemname_block\",\"source\":\"sourcemname_block\",\"value\":{\"mname\":\"mnamevaluemname_block\",\"protocol_mname\":\"protocolmnamemname_block\",\"use_default_mname\":true}},\"negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamenegative_ttl\",\"source\":\"sourcenegative_ttl\",\"value\":90},\"protocol_rname\":{\"action\":\"inherit\",\"display_name\":\"displaynameprotocol_rname\",\"source\":\"sourceprotocol_rname\",\"value\":\"valueprotocol_rname\"},\"refresh\":{\"action\":\"inherit\",\"display_name\":\"displayname_refresh\",\"source\":\"source_refresh\",\"value\":40},\"retry\":{\"action\":\"inherit\",\"display_name\":\"displayname_retry\",\"source\":\"source_retry\",\"value\":570},\"rname\":{\"action\":\"inherit\",\"display_name\":\"displayname_rname\",\"source\":\"source_rname\",\"value\":\"value_rname\"}}},\"ip_spaces\":[\"testipspaces\"],\"lame_ttl\":350,\"match_clients_acl\":[{\"access\":\"deny\",\"acl\":\"aclmatch_clients_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_clients_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha512\",\"comment\":\"commentmatch_clients_acl\",\"key\":\"keymatch_clients_acl\",\"name\":\"namematch_clients_acl\",\"protocol_name\":\"protocolnamematch_clients_acl\",\"secret\":\"secretmatch_clients_acl\"}}],\"match_destinations_acl\":[{\"access\":\"allow\",\"acl\":\"aclmatch_destinations_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_destinations_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentmatch_destinations_acl\",\"key\":\"keymatch_destinations_acl\",\"name\":\"namematch_destinations_acl\",\"protocol_name\":\"protocolnamematch_destinations_acl\",\"secret\":\"secretmatch_destinations_acl\"}}],\"match_recursive_only\":true,\"max_cache_ttl\":90,\"max_negative_ttl\":500,\"max_udp_size\":890,\"minimal_responses\":true,\"name\":\"string\",\"notify\":true,\"query_acl\":[{\"access\":\"accessquery_acl\",\"acl\":\"aclquery_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementquery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolnamequery_acl\",\"secret\":\"secretquery_acl\"}}],\"recursion_acl\":[{\"access\":\"allow\",\"acl\":\"aclrecursion_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}],\"recursion_enabled\":true,\"synthesize_address_records_from_https\":false,\"tags\":{\"message\":\"Hello\"},\"transfer_acl\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}],\"update_acl\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}],\"updated_at\":\"2022-07-15T06:55:25.978Z\",\"use_forwarders_for_subzones\":true,\"zone_authority\":{\"default_ttl\":20,\"expire\":10,\"mname\":\"mnamezone_authority\",\"negative_ttl\":30,\"protocol_mname\":\"protocolmnamezone_authority\",\"protocol_rname\":\"protocolrnamezone_authority\",\"refresh\":50,\"retry\":100,\"rname\":\"string\",\"use_default_mname\":true}}", - "type": [ - "protocol" - ] - }, "input": { "type": "httpjson" }, @@ -901,7 +903,7 @@ An example event for `dns_config` looks as following: "preserve_original_event", "preserve_duplicate_custom_fields", "forwarded", - "bloxone_ddi-dns_config" + "infoblox_bloxone_ddi_dns_config" ] } ``` @@ -911,298 +913,6 @@ An example event for `dns_config` looks as following: | Field | Description | Type | |---|---|---| | @timestamp | Event timestamp. | date | -| bloxone_ddi.dns_config.add_edns.option_in.outgoing_query | add_edns_option_in_outgoing_query adds client IP, MAC address and view name into outgoing recursive query. | boolean | -| bloxone_ddi.dns_config.comment | Optional. Comment for view. | keyword | -| bloxone_ddi.dns_config.created_at | The timestamp when the object has been created. | date | -| bloxone_ddi.dns_config.custom_root_ns.address | IPv4 address. | ip | -| bloxone_ddi.dns_config.custom_root_ns.fqdn | FQDN. | keyword | -| bloxone_ddi.dns_config.custom_root_ns.protocol.fqdn | FQDN in punycode. | keyword | -| bloxone_ddi.dns_config.custom_root_ns_enabled | Optional. true to use custom root nameservers instead of the default ones. | boolean | -| bloxone_ddi.dns_config.disabled | Optional. true to disable object. A disabled object is effectively non-existent when generating configuration. | boolean | -| bloxone_ddi.dns_config.dnssec.enable_validation | Optional. true to perform DNSSEC validation. | boolean | -| bloxone_ddi.dns_config.dnssec.enabled | Optional. Master toggle for all DNSSEC processing. | boolean | -| bloxone_ddi.dns_config.dnssec.root_keys.algorithm | Key algorithm. Algorithm values are as per standards. | long | -| bloxone_ddi.dns_config.dnssec.root_keys.protocol.zone | Zone FQDN in punycode. | keyword | -| bloxone_ddi.dns_config.dnssec.root_keys.public | DNSSEC key data. Non-empty, valid base64 string. | keyword | -| bloxone_ddi.dns_config.dnssec.root_keys.sep | Optional. Secure Entry Point flag. | boolean | -| bloxone_ddi.dns_config.dnssec.root_keys.zone | Zone FQDN. | keyword | -| bloxone_ddi.dns_config.dnssec.trust_anchors.algorithm | Key algorithm. Algorithm values are as per standards. | long | -| bloxone_ddi.dns_config.dnssec.trust_anchors.protocol.zone | Zone FQDN in punycode. | keyword | -| bloxone_ddi.dns_config.dnssec.trust_anchors.public_key | DNSSEC key data. Non-empty, valid base64 string. | keyword | -| bloxone_ddi.dns_config.dnssec.trust_anchors.sep | Optional. Secure Entry Point flag. | boolean | -| bloxone_ddi.dns_config.dnssec.trust_anchors.zone | Zone FQDN. | keyword | -| bloxone_ddi.dns_config.dnssec.validate_expiry | Optional. true to reject expired DNSSEC keys. | boolean | -| bloxone_ddi.dns_config.ecs.enabled | Optional. true to enable EDNS client subnet for recursive queries. | boolean | -| bloxone_ddi.dns_config.ecs.forwarding | Optional. true to enable ECS options in outbound queries. This functionality has additional overhead so it is disabled by default. | boolean | -| bloxone_ddi.dns_config.ecs.prefix_v4 | Optional. Maximum scope length for v4 ECS. | long | -| bloxone_ddi.dns_config.ecs.prefix_v6 | Optional. Maximum scope length for v6 ECS. | long | -| bloxone_ddi.dns_config.ecs.zones.access | Access control for zone. | keyword | -| bloxone_ddi.dns_config.ecs.zones.fqdn | Zone FQDN. | keyword | -| bloxone_ddi.dns_config.ecs.zones.protocol.fqdn | Zone FQDN in punycode. | keyword | -| bloxone_ddi.dns_config.edns.udp.size | Optional. edns_udp_size represents the edns UDP size. | long | -| bloxone_ddi.dns_config.forwarders.address | Server IP address. | ip | -| bloxone_ddi.dns_config.forwarders.fqdn | Server FQDN. | keyword | -| bloxone_ddi.dns_config.forwarders.protocol.fqdn | Server FQDN in punycode. | keyword | -| bloxone_ddi.dns_config.forwarders_only | Optional. true to only forward. | boolean | -| bloxone_ddi.dns_config.gss_tsig_enabled | gss_tsig_enabled enables/disables GSS-TSIG signed dynamic updates. | boolean | -| bloxone_ddi.dns_config.id | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.value | The inherited value. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.action | Defaults to inherit. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.display.name | Human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value.address | IPv4 address. | ip | -| bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value.fqdn | Optional. Field config for custom_root_ns_enabled field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value.protocol.fqdn | FQDN. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value_enabled | FQDN in punycode. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.action | Defaults to inherit. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.display.name | Human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.enable | Optional. Field config for dnssec_enable_validation field. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.enabled | Optional. Field config for dnssec_enabled field. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors.algorithm | Key algorithm. Algorithm values are as per standards. | long | -| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors.protocol.zone | Zone FQDN in punycode. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors.public_key | DNSSEC key data. Non-empty, valid base64 string. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors.sep | Optional. Secure Entry Point flag. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors.zone | Zone FQDN. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.validate_expiry | Optional. Field config for dnssec_validate_expiry field. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.ecs.block.action | Defaults to inherit. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.ecs.block.display.name | Human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.ecs.block.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.enabled | Optional. Field config for ecs_enabled field. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.forwarding | Optional. Field config for ecs_forwarding field. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.prefix_v4 | Optional. Field config for ecs_prefix_v4 field. | long | -| bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.prefix_v6 | Optional. Field config for ecs_prefix_v6 field. | long | -| bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.zones.access | Access control for zone. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.zones.fqdn | Zone FQDN. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.zones.protocol.fqdn | Zone FQDN in punycode. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.value | The inherited value. | long | -| bloxone_ddi.dns_config.inheritance.sources.forwarders.block.action | Defaults to inherit. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.forwarders.block.display.name | Human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.forwarders.block.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value.address | Server IP address. | ip | -| bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value.fqdn | Server FQDN. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value.protocol.fqdn | Server FQDN in punycode. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value_only | Optional. Field config for forwarders_only field. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.value | The inherited value. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.lame_ttl.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.lame_ttl.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.lame_ttl.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.lame_ttl.value | The inherited value. | long | -| bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.value | The inherited value. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.value | The inherited value. | long | -| bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.value | The inherited value. | long | -| bloxone_ddi.dns_config.inheritance.sources.max_udp_size.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.max_udp_size.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.max_udp_size.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.max_udp_size.value | The inherited value. | long | -| bloxone_ddi.dns_config.inheritance.sources.minimal_responses.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.minimal_responses.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.minimal_responses.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.minimal_responses.value | The inherited value. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.notify.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.notify.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.notify.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.notify.value | The inherited value. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.query_acl.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.query_acl.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.query_acl.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.access | Access permission for element. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.acl | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.address | Optional. Data for ip element. | ip | -| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.element | Type of element. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.algorithm | TSIG key algorithm. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.comment | Comment for TSIG key. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.name | TSIG key name, FQDN. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.protocol.name | TSIG key name in punycode. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.secret | TSIG key secret, base64 string. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.value | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.access | Access permission for element. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.acl | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.address | Optional. Data for ip element. | ip | -| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.element | Type of element. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.algorithm | TSIG key algorithm. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.comment | Comment for TSIG key. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.name | TSIG key name, FQDN. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.protocol.name | TSIG key name in punycode. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.secret | TSIG key secret, base64 string. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.value | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.value | The inherited value. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.name | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.value | The inherited value. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.access | Access permission for element. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.acl | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.address | Optional. Data for ip element. | ip | -| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.element | Type of element. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.algorithm | TSIG key algorithm. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.comment | Comment for TSIG key. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.name | TSIG key name, FQDN. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.protocol.name | TSIG key name in punycode. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.secret | TSIG key secret, base64 string. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.value | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.update_acl.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.update_acl.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.update_acl.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.access | Access permission for element. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.acl | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.address | Optional. Data for ip element. | ip | -| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.element | Type of element. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.algorithm | TSIG key algorithm. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.comment | Comment for TSIG key. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.name | TSIG key name, FQDN. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.protocol.name | TSIG key name in punycode. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.secret | TSIG key secret, base64 string. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.value | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.value | The inherited value. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.value | The inherited value. | long | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.value | The inherited value. | long | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.action | Defaults to inherit. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.display.name | Human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.value.isdefault | Optional. Use default value for master name server. Defaults to true. | boolean | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.value.protocol.mname | Optional. Master name server in punycode. Defaults to empty. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block_value | Defaults to empty. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.value | The inherited value. | long | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.value | The inherited value. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.value | The inherited value. | long | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.value | The inherited value. | long | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.source | The resource identifier. | keyword | -| bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.value | The inherited value. | keyword | -| bloxone_ddi.dns_config.ip_spaces | The resource identifier. | keyword | -| bloxone_ddi.dns_config.lame_ttl | Optional. Unused in the current on-prem DNS server implementation. | long | -| bloxone_ddi.dns_config.match_clients_acl.access | Access permission for element. | keyword | -| bloxone_ddi.dns_config.match_clients_acl.address | Optional. Data for ip element. | ip | -| bloxone_ddi.dns_config.match_clients_acl.element | Type of element. | keyword | -| bloxone_ddi.dns_config.match_clients_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | -| bloxone_ddi.dns_config.match_clients_acl.tsig_key.comment | Comment for TSIG key. | keyword | -| bloxone_ddi.dns_config.match_clients_acl.tsig_key.name | TSIG key name, FQDN. | keyword | -| bloxone_ddi.dns_config.match_clients_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | -| bloxone_ddi.dns_config.match_clients_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | -| bloxone_ddi.dns_config.match_clients_acl.tsig_key.value | The resource identifier. | keyword | -| bloxone_ddi.dns_config.match_clients_acl.value | The resource identifier. | keyword | -| bloxone_ddi.dns_config.match_destinations_acl.access | Access permission for element. | keyword | -| bloxone_ddi.dns_config.match_destinations_acl.address | Optional. Data for ip element. | ip | -| bloxone_ddi.dns_config.match_destinations_acl.element | Type of element. | keyword | -| bloxone_ddi.dns_config.match_destinations_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | -| bloxone_ddi.dns_config.match_destinations_acl.tsig_key.comment | Comment for TSIG key. | keyword | -| bloxone_ddi.dns_config.match_destinations_acl.tsig_key.name | The resource identifier. | keyword | -| bloxone_ddi.dns_config.match_destinations_acl.tsig_key.protocol.name | TSIG key name, FQDN. | keyword | -| bloxone_ddi.dns_config.match_destinations_acl.tsig_key.secret | TSIG key name in punycode. | keyword | -| bloxone_ddi.dns_config.match_destinations_acl.tsig_key.value | TSIG key secret, base64 string. | keyword | -| bloxone_ddi.dns_config.match_destinations_acl.value | The resource identifier. | keyword | -| bloxone_ddi.dns_config.match_recursive_only | Optional. If true only recursive queries from matching clients access the view. | boolean | -| bloxone_ddi.dns_config.max_cache_ttl | Optional. Seconds to cache positive responses. | long | -| bloxone_ddi.dns_config.max_negative_ttl | Optional. Seconds to cache negative responses. | long | -| bloxone_ddi.dns_config.max_udp_size | Optional. max_udp_size represents maximum UDP payload size. | long | -| bloxone_ddi.dns_config.minimal_responses | Optional. When enabled, the DNS server will only add records to the authority and additional data sections when they are required. | boolean | -| bloxone_ddi.dns_config.name | Name of view. | keyword | -| bloxone_ddi.dns_config.notify | notify all external secondary DNS servers. | boolean | -| bloxone_ddi.dns_config.query_acl.access | Access permission for element. | keyword | -| bloxone_ddi.dns_config.query_acl.address | Optional. Data for ip element. | ip | -| bloxone_ddi.dns_config.query_acl.element | Type of element. | keyword | -| bloxone_ddi.dns_config.query_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | -| bloxone_ddi.dns_config.query_acl.tsig_key.comment | Comment for TSIG key. | keyword | -| bloxone_ddi.dns_config.query_acl.tsig_key.name | TSIG key name, FQDN. | keyword | -| bloxone_ddi.dns_config.query_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | -| bloxone_ddi.dns_config.query_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | -| bloxone_ddi.dns_config.query_acl.tsig_key.value | The resource identifier. | keyword | -| bloxone_ddi.dns_config.query_acl.value | The resource identifier. | keyword | -| bloxone_ddi.dns_config.recursion_acl.access | Access permission for element. | keyword | -| bloxone_ddi.dns_config.recursion_acl.address | Optional. Data for ip element. | ip | -| bloxone_ddi.dns_config.recursion_acl.element | Type of element. | keyword | -| bloxone_ddi.dns_config.recursion_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | -| bloxone_ddi.dns_config.recursion_acl.tsig_key.comment | Comment for TSIG key. | keyword | -| bloxone_ddi.dns_config.recursion_acl.tsig_key.name | The resource identifier. | keyword | -| bloxone_ddi.dns_config.recursion_acl.tsig_key.protocol.name | TSIG key name, FQDN. | keyword | -| bloxone_ddi.dns_config.recursion_acl.tsig_key.secret | TSIG key name in punycode. | keyword | -| bloxone_ddi.dns_config.recursion_acl.tsig_key.value | TSIG key secret, base64 string. | keyword | -| bloxone_ddi.dns_config.recursion_acl.value | The resource identifier. | keyword | -| bloxone_ddi.dns_config.recursion_enabled | Optional. true to allow recursive DNS queries. | boolean | -| bloxone_ddi.dns_config.synthesize.address_records_from_https | synthesize_address_records_from_https enables/disables creation of A/AAAA records from HTTPS RR. | boolean | -| bloxone_ddi.dns_config.tags | Tagging specifics. | flattened | -| bloxone_ddi.dns_config.transfer_acl.access | Access permission for element. | keyword | -| bloxone_ddi.dns_config.transfer_acl.address | Optional. Data for ip element. | ip | -| bloxone_ddi.dns_config.transfer_acl.element | Type of element. | keyword | -| bloxone_ddi.dns_config.transfer_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | -| bloxone_ddi.dns_config.transfer_acl.tsig_key.comment | Comment for TSIG key. | keyword | -| bloxone_ddi.dns_config.transfer_acl.tsig_key.name | TSIG key name, FQDN. | keyword | -| bloxone_ddi.dns_config.transfer_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | -| bloxone_ddi.dns_config.transfer_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | -| bloxone_ddi.dns_config.transfer_acl.tsig_key.value | The resource identifier. | keyword | -| bloxone_ddi.dns_config.transfer_acl.value | The resource identifier. | keyword | -| bloxone_ddi.dns_config.update_acl.access | Access permission for element. | keyword | -| bloxone_ddi.dns_config.update_acl.address | Optional. Data for ip element. | ip | -| bloxone_ddi.dns_config.update_acl.element | Type of element. | keyword | -| bloxone_ddi.dns_config.update_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | -| bloxone_ddi.dns_config.update_acl.tsig_key.comment | Comment for TSIG key. | keyword | -| bloxone_ddi.dns_config.update_acl.tsig_key.name | TSIG key name, FQDN. | keyword | -| bloxone_ddi.dns_config.update_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | -| bloxone_ddi.dns_config.update_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | -| bloxone_ddi.dns_config.update_acl.tsig_key.value | The resource identifier. | keyword | -| bloxone_ddi.dns_config.update_acl.value | The resource identifier. | keyword | -| bloxone_ddi.dns_config.updated_at | The timestamp when the object has been updated. Equals to created_at if not updated after creation. | date | -| bloxone_ddi.dns_config.use_forwarders_for_subzones | Optional. Use default forwarders to resolve queries for subzones. | boolean | -| bloxone_ddi.dns_config.zone_authority.default_ttl | Optional. ZoneAuthority default ttl for resource records in zone (value in seconds). | long | -| bloxone_ddi.dns_config.zone_authority.expire | Optional. ZoneAuthority expire time in seconds. Defaults to 2419200. | long | -| bloxone_ddi.dns_config.zone_authority.mname | Optional. ZoneAuthority master name server (partially qualified domain name) Defaults to empty. | keyword | -| bloxone_ddi.dns_config.zone_authority.negative_ttl | Optional. ZoneAuthority negative caching (minimum) ttl in seconds. | long | -| bloxone_ddi.dns_config.zone_authority.protocol.mname | Optional. ZoneAuthority master name server in punycode. Defaults to empty. | keyword | -| bloxone_ddi.dns_config.zone_authority.protocol.rname | Optional. A domain name which specifies the mailbox of the person responsible for this zone. Defaults to empty. | keyword | -| bloxone_ddi.dns_config.zone_authority.refresh | Optional. ZoneAuthority refresh. Defaults to 10800. | long | -| bloxone_ddi.dns_config.zone_authority.retry | Optional. ZoneAuthority retry. Defaults to 3600. | long | -| bloxone_ddi.dns_config.zone_authority.rname | Optional. ZoneAuthority rname. Defaults to empty. | keyword | -| bloxone_ddi.dns_config.zone_authority.use_default_mname | Optional. Use default value for master name server. Defaults to true. | boolean | | 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.availability_zone | Availability zone in which this host is running. | keyword | | cloud.image.id | Image ID for the cloud instance. | keyword | @@ -1246,6 +956,298 @@ An example event for `dns_config` looks as following: | host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | | host.os.version | Operating system version as a raw string. | keyword | | host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| infoblox_bloxone_ddi.dns_config.add_edns.option_in.outgoing_query | add_edns_option_in_outgoing_query adds client IP, MAC address and view name into outgoing recursive query. | boolean | +| infoblox_bloxone_ddi.dns_config.comment | Optional. Comment for view. | keyword | +| infoblox_bloxone_ddi.dns_config.created_at | The timestamp when the object has been created. | date | +| infoblox_bloxone_ddi.dns_config.custom_root_ns.address | IPv4 address. | ip | +| infoblox_bloxone_ddi.dns_config.custom_root_ns.fqdn | FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.custom_root_ns.protocol.fqdn | FQDN in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.custom_root_ns_enabled | Optional. true to use custom root nameservers instead of the default ones. | boolean | +| infoblox_bloxone_ddi.dns_config.disabled | Optional. true to disable object. A disabled object is effectively non-existent when generating configuration. | boolean | +| infoblox_bloxone_ddi.dns_config.dnssec.enable_validation | Optional. true to perform DNSSEC validation. | boolean | +| infoblox_bloxone_ddi.dns_config.dnssec.enabled | Optional. Master toggle for all DNSSEC processing. | boolean | +| infoblox_bloxone_ddi.dns_config.dnssec.root_keys.algorithm | Key algorithm. Algorithm values are as per standards. | long | +| infoblox_bloxone_ddi.dns_config.dnssec.root_keys.protocol.zone | Zone FQDN in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.dnssec.root_keys.public | DNSSEC key data. Non-empty, valid base64 string. | keyword | +| infoblox_bloxone_ddi.dns_config.dnssec.root_keys.sep | Optional. Secure Entry Point flag. | boolean | +| infoblox_bloxone_ddi.dns_config.dnssec.root_keys.zone | Zone FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.dnssec.trust_anchors.algorithm | Key algorithm. Algorithm values are as per standards. | long | +| infoblox_bloxone_ddi.dns_config.dnssec.trust_anchors.protocol.zone | Zone FQDN in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.dnssec.trust_anchors.public_key | DNSSEC key data. Non-empty, valid base64 string. | keyword | +| infoblox_bloxone_ddi.dns_config.dnssec.trust_anchors.sep | Optional. Secure Entry Point flag. | boolean | +| infoblox_bloxone_ddi.dns_config.dnssec.trust_anchors.zone | Zone FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.dnssec.validate_expiry | Optional. true to reject expired DNSSEC keys. | boolean | +| infoblox_bloxone_ddi.dns_config.ecs.enabled | Optional. true to enable EDNS client subnet for recursive queries. | boolean | +| infoblox_bloxone_ddi.dns_config.ecs.forwarding | Optional. true to enable ECS options in outbound queries. This functionality has additional overhead so it is disabled by default. | boolean | +| infoblox_bloxone_ddi.dns_config.ecs.prefix_v4 | Optional. Maximum scope length for v4 ECS. | long | +| infoblox_bloxone_ddi.dns_config.ecs.prefix_v6 | Optional. Maximum scope length for v6 ECS. | long | +| infoblox_bloxone_ddi.dns_config.ecs.zones.access | Access control for zone. | keyword | +| infoblox_bloxone_ddi.dns_config.ecs.zones.fqdn | Zone FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.ecs.zones.protocol.fqdn | Zone FQDN in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.edns.udp.size | Optional. edns_udp_size represents the edns UDP size. | long | +| infoblox_bloxone_ddi.dns_config.forwarders.address | Server IP address. | ip | +| infoblox_bloxone_ddi.dns_config.forwarders.fqdn | Server FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.forwarders.protocol.fqdn | Server FQDN in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.forwarders_only | Optional. true to only forward. | boolean | +| infoblox_bloxone_ddi.dns_config.gss_tsig_enabled | gss_tsig_enabled enables/disables GSS-TSIG signed dynamic updates. | boolean | +| infoblox_bloxone_ddi.dns_config.id | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.add_edns.option_in.outgoing_query.value | The inherited value. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.action | Defaults to inherit. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.display.name | Human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value.address | IPv4 address. | ip | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value.fqdn | Optional. Field config for custom_root_ns_enabled field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value.protocol.fqdn | FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.custom_root_ns.block.value_enabled | FQDN in punycode. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.action | Defaults to inherit. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.display.name | Human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.enable | Optional. Field config for dnssec_enable_validation field. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.enabled | Optional. Field config for dnssec_enabled field. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors.algorithm | Key algorithm. Algorithm values are as per standards. | long | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors.protocol.zone | Zone FQDN in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors.public_key | DNSSEC key data. Non-empty, valid base64 string. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors.sep | Optional. Secure Entry Point flag. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.trust_anchors.zone | Zone FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.dnssec.validation.block.value.validate_expiry | Optional. Field config for dnssec_validate_expiry field. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.action | Defaults to inherit. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.display.name | Human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.enabled | Optional. Field config for ecs_enabled field. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.forwarding | Optional. Field config for ecs_forwarding field. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.prefix_v4 | Optional. Field config for ecs_prefix_v4 field. | long | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.prefix_v6 | Optional. Field config for ecs_prefix_v6 field. | long | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.zones.access | Access control for zone. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.zones.fqdn | Zone FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.ecs.block.value.zones.protocol.fqdn | Zone FQDN in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.edns.udp.size.value | The inherited value. | long | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.forwarders.block.action | Defaults to inherit. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.forwarders.block.display.name | Human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.forwarders.block.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value.address | Server IP address. | ip | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value.fqdn | Server FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value.protocol.fqdn | Server FQDN in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.forwarders.block.value_only | Optional. Field config for forwarders_only field. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.gss_tsig_enabled.value | The inherited value. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.lame_ttl.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.lame_ttl.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.lame_ttl.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.lame_ttl.value | The inherited value. | long | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.match_recursive_only.value | The inherited value. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.max_cache_ttl.value | The inherited value. | long | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.max_negative_ttl.value | The inherited value. | long | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.max_udp_size.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.max_udp_size.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.max_udp_size.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.max_udp_size.value | The inherited value. | long | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.minimal_responses.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.minimal_responses.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.minimal_responses.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.minimal_responses.value | The inherited value. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.notify.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.notify.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.notify.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.notify.value | The inherited value. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.access | Access permission for element. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.acl | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.address | Optional. Data for ip element. | ip | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.element | Type of element. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.algorithm | TSIG key algorithm. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.name | TSIG key name, FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.secret | TSIG key secret, base64 string. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.value | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.access | Access permission for element. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.acl | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.address | Optional. Data for ip element. | ip | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.element | Type of element. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.algorithm | TSIG key algorithm. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.name | TSIG key name, FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.secret | TSIG key secret, base64 string. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.value | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.value | The inherited value. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.name | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.synthesize.address_records_from_https.value | The inherited value. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.access | Access permission for element. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.acl | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.address | Optional. Data for ip element. | ip | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.element | Type of element. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.algorithm | TSIG key algorithm. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.name | TSIG key name, FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.secret | TSIG key secret, base64 string. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.value | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.access | Access permission for element. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.acl | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.address | Optional. Data for ip element. | ip | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.element | Type of element. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.algorithm | TSIG key algorithm. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.name | TSIG key name, FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.secret | TSIG key secret, base64 string. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.value | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.value | The inherited value. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.default_ttl.value | The inherited value. | long | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.expire.value | The inherited value. | long | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.action | Defaults to inherit. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.display.name | Human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.value.isdefault | Optional. Use default value for master name server. Defaults to true. | boolean | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block.value.protocol.mname | Optional. Master name server in punycode. Defaults to empty. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.mname_block_value | Defaults to empty. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.negative_ttl.value | The inherited value. | long | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.protocol_rname.value | The inherited value. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.refresh.value | The inherited value. | long | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.retry.value | The inherited value. | long | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.zone_authority.rname.value | The inherited value. | keyword | +| infoblox_bloxone_ddi.dns_config.ip_spaces | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.lame_ttl | Optional. Unused in the current on-prem DNS server implementation. | long | +| infoblox_bloxone_ddi.dns_config.match_clients_acl.access | Access permission for element. | keyword | +| infoblox_bloxone_ddi.dns_config.match_clients_acl.address | Optional. Data for ip element. | ip | +| infoblox_bloxone_ddi.dns_config.match_clients_acl.element | Type of element. | keyword | +| infoblox_bloxone_ddi.dns_config.match_clients_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | +| infoblox_bloxone_ddi.dns_config.match_clients_acl.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.match_clients_acl.tsig_key.name | TSIG key name, FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.match_clients_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.match_clients_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | +| infoblox_bloxone_ddi.dns_config.match_clients_acl.tsig_key.value | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.match_clients_acl.value | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.match_destinations_acl.access | Access permission for element. | keyword | +| infoblox_bloxone_ddi.dns_config.match_destinations_acl.address | Optional. Data for ip element. | ip | +| infoblox_bloxone_ddi.dns_config.match_destinations_acl.element | Type of element. | keyword | +| infoblox_bloxone_ddi.dns_config.match_destinations_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | +| infoblox_bloxone_ddi.dns_config.match_destinations_acl.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.match_destinations_acl.tsig_key.name | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.match_destinations_acl.tsig_key.protocol.name | TSIG key name, FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.match_destinations_acl.tsig_key.secret | TSIG key name in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.match_destinations_acl.tsig_key.value | TSIG key secret, base64 string. | keyword | +| infoblox_bloxone_ddi.dns_config.match_destinations_acl.value | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.match_recursive_only | Optional. If true only recursive queries from matching clients access the view. | boolean | +| infoblox_bloxone_ddi.dns_config.max_cache_ttl | Optional. Seconds to cache positive responses. | long | +| infoblox_bloxone_ddi.dns_config.max_negative_ttl | Optional. Seconds to cache negative responses. | long | +| infoblox_bloxone_ddi.dns_config.max_udp_size | Optional. max_udp_size represents maximum UDP payload size. | long | +| infoblox_bloxone_ddi.dns_config.minimal_responses | Optional. When enabled, the DNS server will only add records to the authority and additional data sections when they are required. | boolean | +| infoblox_bloxone_ddi.dns_config.name | Name of view. | keyword | +| infoblox_bloxone_ddi.dns_config.notify | notify all external secondary DNS servers. | boolean | +| infoblox_bloxone_ddi.dns_config.query_acl.access | Access permission for element. | keyword | +| infoblox_bloxone_ddi.dns_config.query_acl.address | Optional. Data for ip element. | ip | +| infoblox_bloxone_ddi.dns_config.query_acl.element | Type of element. | keyword | +| infoblox_bloxone_ddi.dns_config.query_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | +| infoblox_bloxone_ddi.dns_config.query_acl.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.query_acl.tsig_key.name | TSIG key name, FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.query_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.query_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | +| infoblox_bloxone_ddi.dns_config.query_acl.tsig_key.value | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.query_acl.value | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.recursion_acl.access | Access permission for element. | keyword | +| infoblox_bloxone_ddi.dns_config.recursion_acl.address | Optional. Data for ip element. | ip | +| infoblox_bloxone_ddi.dns_config.recursion_acl.element | Type of element. | keyword | +| infoblox_bloxone_ddi.dns_config.recursion_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | +| infoblox_bloxone_ddi.dns_config.recursion_acl.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.recursion_acl.tsig_key.name | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.recursion_acl.tsig_key.protocol.name | TSIG key name, FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.recursion_acl.tsig_key.secret | TSIG key name in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.recursion_acl.tsig_key.value | TSIG key secret, base64 string. | keyword | +| infoblox_bloxone_ddi.dns_config.recursion_acl.value | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.recursion_enabled | Optional. true to allow recursive DNS queries. | boolean | +| infoblox_bloxone_ddi.dns_config.synthesize.address_records_from_https | synthesize_address_records_from_https enables/disables creation of A/AAAA records from HTTPS RR. | boolean | +| infoblox_bloxone_ddi.dns_config.tags | Tagging specifics. | flattened | +| infoblox_bloxone_ddi.dns_config.transfer_acl.access | Access permission for element. | keyword | +| infoblox_bloxone_ddi.dns_config.transfer_acl.address | Optional. Data for ip element. | ip | +| infoblox_bloxone_ddi.dns_config.transfer_acl.element | Type of element. | keyword | +| infoblox_bloxone_ddi.dns_config.transfer_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | +| infoblox_bloxone_ddi.dns_config.transfer_acl.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.transfer_acl.tsig_key.name | TSIG key name, FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.transfer_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.transfer_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | +| infoblox_bloxone_ddi.dns_config.transfer_acl.tsig_key.value | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.transfer_acl.value | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.update_acl.access | Access permission for element. | keyword | +| infoblox_bloxone_ddi.dns_config.update_acl.address | Optional. Data for ip element. | ip | +| infoblox_bloxone_ddi.dns_config.update_acl.element | Type of element. | keyword | +| infoblox_bloxone_ddi.dns_config.update_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | +| infoblox_bloxone_ddi.dns_config.update_acl.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.update_acl.tsig_key.name | TSIG key name, FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.update_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.update_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | +| infoblox_bloxone_ddi.dns_config.update_acl.tsig_key.value | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.update_acl.value | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.updated_at | The timestamp when the object has been updated. Equals to created_at if not updated after creation. | date | +| infoblox_bloxone_ddi.dns_config.use_forwarders_for_subzones | Optional. Use default forwarders to resolve queries for subzones. | boolean | +| infoblox_bloxone_ddi.dns_config.zone_authority.default_ttl | Optional. ZoneAuthority default ttl for resource records in zone (value in seconds). | long | +| infoblox_bloxone_ddi.dns_config.zone_authority.expire | Optional. ZoneAuthority expire time in seconds. Defaults to 2419200. | long | +| infoblox_bloxone_ddi.dns_config.zone_authority.mname | Optional. ZoneAuthority master name server (partially qualified domain name) Defaults to empty. | keyword | +| infoblox_bloxone_ddi.dns_config.zone_authority.negative_ttl | Optional. ZoneAuthority negative caching (minimum) ttl in seconds. | long | +| infoblox_bloxone_ddi.dns_config.zone_authority.protocol.mname | Optional. ZoneAuthority master name server in punycode. Defaults to empty. | keyword | +| infoblox_bloxone_ddi.dns_config.zone_authority.protocol.rname | Optional. A domain name which specifies the mailbox of the person responsible for this zone. Defaults to empty. | keyword | +| infoblox_bloxone_ddi.dns_config.zone_authority.refresh | Optional. ZoneAuthority refresh. Defaults to 10800. | long | +| infoblox_bloxone_ddi.dns_config.zone_authority.retry | Optional. ZoneAuthority retry. Defaults to 3600. | long | +| infoblox_bloxone_ddi.dns_config.zone_authority.rname | Optional. ZoneAuthority rname. Defaults to empty. | keyword | +| infoblox_bloxone_ddi.dns_config.zone_authority.use_default_mname | Optional. Use default value for master name server. Defaults to true. | boolean | | input.type | Input type | keyword | | log.offset | Log offset | long | | related.hash | All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). | keyword | @@ -1265,13 +1267,47 @@ An example event for `dns_data` looks as following: { "@timestamp": "2022-07-20T09:59:59.184Z", "agent": { - "ephemeral_id": "da7708aa-c88f-46d1-a30c-e60c7f97d1ed", - "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", + "ephemeral_id": "4abbe17d-42d0-49cb-aca5-f10c2364ddc4", + "hostname": "docker-fleet-agent", + "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", "name": "docker-fleet-agent", "type": "filebeat", - "version": "8.2.0" + "version": "7.17.0" + }, + "data_stream": { + "dataset": "infoblox_bloxone_ddi.dns_data", + "namespace": "ep", + "type": "logs" + }, + "dns": { + "answers": { + "ttl": 0 + } + }, + "ecs": { + "version": "8.4.0" }, - "bloxone_ddi": { + "elastic_agent": { + "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", + "snapshot": false, + "version": "7.17.0" + }, + "event": { + "agent_id_status": "verified", + "category": [ + "network" + ], + "created": "2022-07-20T09:59:59.184Z", + "dataset": "infoblox_bloxone_ddi.dns_data", + "id": "ghr123ghf", + "ingested": "2022-09-21T12:24:14Z", + "kind": "event", + "original": "{\"absolute_name_spec\":\"DNS Data Absolute Name\",\"absolute_zone_name\":\"DNS Data Absolute Zone Name\",\"comment\":\"DNS Data Comment\",\"created_at\":\"2022-07-20T09:59:59.184Z\",\"delegation\":\"DNS Data Delegation\",\"disabled\":true,\"dns_absolute_name_spec\":\"DNS Absolute Name\",\"dns_absolute_zone_name\":\"DNS Absolute Zone Name\",\"dns_name_in_zone\":\"DNS Name in Zone\",\"dns_rdata\":\"DNS RData\",\"id\":\"ghr123ghf\",\"inheritance_sources\":{\"ttl\":{\"action\":\"DNS Data Action\",\"display_name\":\"DNS Display Name\",\"source\":\"DNS Data Source\",\"value\":10}},\"name_in_zone\":\"DNS Data Name in zone\",\"options\":{\"address\":\"67.43.156.0\",\"check_rmz\":true,\"create_ptr\":false},\"rdata\":{\"address\":\"81.2.69.192\",\"cname\":\"DNS Data Canonical Name\",\"dhcid\":\"122zbczba12\",\"dname\":\"DNS Data dname\",\"exchange\":\"DNS Data Exchange\",\"expire\":23131,\"flags\":\"DNS Data Flags\",\"length_kind\":8,\"mname\":\"DNS Data mname\",\"negative_ttl\":213342,\"order\":123124,\"port\":80,\"preference\":12345363467,\"priority\":44,\"refresh\":10800,\"regexp\":\"none\",\"replacement\":\"DNS Data Replacement\",\"retry\":3600,\"rname\":\"DNS Data rname\",\"serial\":12314114,\"services\":\"DNS Data Test Services\",\"tag\":\"issue\",\"target\":\"DNS Data Target\",\"text\":\"DNS Data text field\",\"type\":\"32BIT\",\"value\":\"DNS Data Value\",\"weight\":0},\"source\":[\"STATIC\"],\"tags\":{\"message\":\"Hello\"},\"ttl\":0,\"type\":\"DNS Data Type\",\"updated_at\":\"2022-07-20T09:59:59.184Z\",\"view\":\"DNS Data View\",\"view_name\":\"DNS Data View Name\",\"zone\":\"DNS Data Zone\"}", + "type": [ + "protocol" + ] + }, + "infoblox_bloxone_ddi": { "dns_data": { "absolute": { "name": { @@ -1357,39 +1393,6 @@ An example event for `dns_data` looks as following: "zone": "DNS Data Zone" } }, - "data_stream": { - "dataset": "bloxone_ddi.dns_data", - "namespace": "ep", - "type": "logs" - }, - "dns": { - "answers": { - "ttl": 0 - } - }, - "ecs": { - "version": "8.4.0" - }, - "elastic_agent": { - "id": "75cb88a9-4fd0-4f26-afa0-fd5c8dbc97d8", - "snapshot": false, - "version": "8.2.0" - }, - "event": { - "agent_id_status": "verified", - "category": [ - "network" - ], - "created": "2022-07-20T09:59:59.184Z", - "dataset": "bloxone_ddi.dns_data", - "id": "ghr123ghf", - "ingested": "2022-09-06T08:41:27Z", - "kind": "event", - "original": "{\"absolute_name_spec\":\"DNS Data Absolute Name\",\"absolute_zone_name\":\"DNS Data Absolute Zone Name\",\"comment\":\"DNS Data Comment\",\"created_at\":\"2022-07-20T09:59:59.184Z\",\"delegation\":\"DNS Data Delegation\",\"disabled\":true,\"dns_absolute_name_spec\":\"DNS Absolute Name\",\"dns_absolute_zone_name\":\"DNS Absolute Zone Name\",\"dns_name_in_zone\":\"DNS Name in Zone\",\"dns_rdata\":\"DNS RData\",\"id\":\"ghr123ghf\",\"inheritance_sources\":{\"ttl\":{\"action\":\"DNS Data Action\",\"display_name\":\"DNS Display Name\",\"source\":\"DNS Data Source\",\"value\":10}},\"name_in_zone\":\"DNS Data Name in zone\",\"options\":{\"address\":\"67.43.156.0\",\"check_rmz\":true,\"create_ptr\":false},\"rdata\":{\"address\":\"81.2.69.192\",\"cname\":\"DNS Data Canonical Name\",\"dhcid\":\"122zbczba12\",\"dname\":\"DNS Data dname\",\"exchange\":\"DNS Data Exchange\",\"expire\":23131,\"flags\":\"DNS Data Flags\",\"length_kind\":8,\"mname\":\"DNS Data mname\",\"negative_ttl\":213342,\"order\":123124,\"port\":80,\"preference\":12345363467,\"priority\":44,\"refresh\":10800,\"regexp\":\"none\",\"replacement\":\"DNS Data Replacement\",\"retry\":3600,\"rname\":\"DNS Data rname\",\"serial\":12314114,\"services\":\"DNS Data Test Services\",\"tag\":\"issue\",\"target\":\"DNS Data Target\",\"text\":\"DNS Data text field\",\"type\":\"32BIT\",\"value\":\"DNS Data Value\",\"weight\":0},\"source\":[\"STATIC\"],\"tags\":{\"message\":\"Hello\"},\"ttl\":0,\"type\":\"DNS Data Type\",\"updated_at\":\"2022-07-20T09:59:59.184Z\",\"view\":\"DNS Data View\",\"view_name\":\"DNS Data View Name\",\"zone\":\"DNS Data Zone\"}", - "type": [ - "protocol" - ] - }, "input": { "type": "httpjson" }, @@ -1403,7 +1406,7 @@ An example event for `dns_data` looks as following: "preserve_original_event", "preserve_duplicate_custom_fields", "forwarded", - "bloxone_ddi-dns_data" + "bloxone_ddi_dns_data" ] } ``` @@ -1413,61 +1416,6 @@ An example event for `dns_data` looks as following: | Field | Description | Type | |---|---|---| | @timestamp | Event timestamp. | date | -| bloxone_ddi.dns_data.absolute.name.spec | The DNS protocol textual representation of absolute_name_spec. | keyword | -| bloxone_ddi.dns_data.absolute.zone.name | The DNS protocol textual representation of the absolute domain name of the zone where this record belongs. | keyword | -| bloxone_ddi.dns_data.absolute_name.spec | Synthetic field, used to determine zone and/or name_in_zone field for records. | keyword | -| bloxone_ddi.dns_data.absolute_zone.name | The absolute domain name of the zone where this record belongs. | keyword | -| bloxone_ddi.dns_data.comment | The description for the DNS resource record. May contain 0 to 1024 characters. Can include UTF-8. | keyword | -| bloxone_ddi.dns_data.created_at | The timestamp when the object has been created. | date | -| bloxone_ddi.dns_data.delegation | The resource identifier. | keyword | -| bloxone_ddi.dns_data.disabled | Indicates if the DNS resource record is disabled. A disabled object is effectively non-existent when generating configuration. | boolean | -| bloxone_ddi.dns_data.id | The resource identifier. | keyword | -| bloxone_ddi.dns_data.inheritance.sources.ttl.action | The inheritance setting for a field. | keyword | -| bloxone_ddi.dns_data.inheritance.sources.ttl.display.name | The human-readable display name for the object referred to by source. | keyword | -| bloxone_ddi.dns_data.inheritance.sources.ttl.source | The resource identifier. | keyword | -| bloxone_ddi.dns_data.inheritance.sources.ttl.value | The inherited value. | long | -| bloxone_ddi.dns_data.name_in.zone | The DNS protocol textual representation of the relative owner name for the DNS zone. | keyword | -| bloxone_ddi.dns_data.name_in_zone | The relative owner name to the zone origin. Must be specified for creating the DNS resource record and is read only for other operations. | keyword | -| bloxone_ddi.dns_data.options.address | For GET operation it contains the IPv4 or IPv6 address represented by the PTR record and for POST and PATCH operations it can be used to create/update a PTR record based on the IP address it represents. In this case, in addition to the address in the options field, need to specify the view field. | ip | -| bloxone_ddi.dns_data.options.check_rmz | A boolean flag which can be set to true for POST operation to check the existence of reverse zone for creating the corresponding PTR record. Only applicable if the create_ptr option is set to true. | boolean | -| bloxone_ddi.dns_data.options.create_ptr | A boolean flag which can be set to true for POST operation to automatically create the corresponding PTR record. | boolean | -| bloxone_ddi.dns_data.provider_metadata | external DNS provider metadata. | flattened | -| bloxone_ddi.dns_data.rdata.address | The IPv4/IPv6 address of the host. | ip | -| bloxone_ddi.dns_data.rdata.cname | A domain name which specifies the canonical or primary name for the owner. The owner name is an alias. Can be empty. | keyword | -| bloxone_ddi.dns_data.rdata.dhcid | The Base64 encoded string which contains DHCP client information. | keyword | -| bloxone_ddi.dns_data.rdata.dname | A domain-name which specifies a host which should be authoritative for the specified class and domain. Can be absolute or relative domain name and include UTF-8. | keyword | -| bloxone_ddi.dns_data.rdata.exchange | A domain name which specifies a host willing to act as a mail exchange for the owner name. | keyword | -| bloxone_ddi.dns_data.rdata.expire | The time interval in seconds after which zone data will expire and secondary server stops answering requests for the zone. | long | -| bloxone_ddi.dns_data.rdata.flags | An unsigned 8-bit integer which specifies the CAA record flags. RFC 6844 defines one (highest) bit in flag octet, remaining bits are deferred for future use. This bit is referenced as Critical. When the bit is set (flag value == 128), issuers must not issue certificates in case CAA records contain unknown property tags. | keyword | -| bloxone_ddi.dns_data.rdata.length_kind | A string indicating the size in bits of a sub-subfield that is prepended to the value and encodes the length of the value. | long | -| bloxone_ddi.dns_data.rdata.mname | The domain name for the master server for the zone. Can be absolute or relative domain name. | keyword | -| bloxone_ddi.dns_data.rdata.negative_ttl | The time interval in seconds for which name servers can cache negative responses for zone. | long | -| bloxone_ddi.dns_data.rdata.order | A 16-bit unsigned integer specifying the order in which the NAPTR records must be processed. Low numbers are processed before high numbers, and once a NAPTR is found whose rule “matches” the target, the client must not consider any NAPTRs with a higher value for order (except as noted below for the “flags” field. The range of the value is 0 to 65535. | long | -| bloxone_ddi.dns_data.rdata.port | An unsigned 16-bit integer which specifies the port on this target host of this service. The range of the value is 0 to 65535. This is often as specified in Assigned Numbers but need not be. | long | -| bloxone_ddi.dns_data.rdata.preference | An unsigned 16-bit integer which specifies the preference given to this RR among others at the same owner. Lower values are preferred. The range of the value is 0 to 65535. | long | -| bloxone_ddi.dns_data.rdata.priority | An unsigned 16-bit integer which specifies the priority of this target host. The range of the value is 0 to 65535. A client must attempt to contact the target host with the lowest-numbered priority it can reach. Target hosts with the same priority should be tried in an order defined by the weight field. | long | -| bloxone_ddi.dns_data.rdata.refresh | The time interval in seconds that specifies how often secondary servers need to send a message to the primary server for a zone to check that their data is current, and retrieve fresh data if it is not. | long | -| bloxone_ddi.dns_data.rdata.regexp | A string containing a substitution expression that is applied to the original string held by the client in order to construct the next domain name to lookup. | keyword | -| bloxone_ddi.dns_data.rdata.replacement | The next name to query for NAPTR, SRV, or address records depending on the value of the flags field. This can be an absolute or relative domain name. Can be empty. | keyword | -| bloxone_ddi.dns_data.rdata.retry | The time interval in seconds for which the secondary server will wait before attempting to recontact the primary server after a connection failure occurs. | long | -| bloxone_ddi.dns_data.rdata.rname | The domain name which specifies the mailbox of the person responsible for this zone. | keyword | -| bloxone_ddi.dns_data.rdata.serial | An unsigned 32-bit integer that specifies the serial number of the zone. Used to indicate that zone data was updated, so the secondary name server can initiate zone transfer. The range of the value is 0 to 4294967295. | long | -| bloxone_ddi.dns_data.rdata.services | Specifies the service(s) available down this rewrite path. It may also specify the particular protocol that is used to talk with a service. A protocol must be specified if the flags field states that the NAPTR is terminal. If a protocol is specified, but the flags field does not state that the NAPTR is terminal, the next lookup must be for a NAPTR. The client may choose not to perform the next lookup if the protocol is unknown, but that behavior must not be relied upon. | keyword | -| bloxone_ddi.dns_data.rdata.tag | The CAA record property tag string which indicates the type of CAA record. | keyword | -| bloxone_ddi.dns_data.rdata.target | The target domain name to which the zone will be mapped. Can be empty. | keyword | -| bloxone_ddi.dns_data.rdata.text | The semantics of the text depends on the domain where it is found. | keyword | -| bloxone_ddi.dns_data.rdata.type | Type of TXT (Text) record. | keyword | -| bloxone_ddi.dns_data.rdata.value | A string which contains the CAA record property value. | keyword | -| bloxone_ddi.dns_data.rdata.weight | An unsigned 16-bit integer which specifies a relative weight for entries with the same priority. The range of the value is 0 to 65535. Larger weights should be given a proportionately higher probability of being selected. Domain administrators should use weight 0 when there isn’t any server selection to do, to make the RR easier to read for humans (less noisy). In the presence of records containing weights greater than 0, records with weight 0 should have a very small chance of being selected. | long | -| bloxone_ddi.dns_data.rdata_value | The DNS protocol textual representation of the DNS resource record data. | keyword | -| bloxone_ddi.dns_data.source | The DNS resource record type-specific non-protocol source. The source is a combination of indicators, each tracking how the DNS resource record appeared in system. | keyword | -| bloxone_ddi.dns_data.tags | The tags for the DNS resource record in JSON format. | flattened | -| bloxone_ddi.dns_data.ttl | The record time to live value in seconds. The range of this value is 0 to 2147483647. Defaults to TTL value from the SOA record of the zone. | long | -| bloxone_ddi.dns_data.type | The DNS resource record type specified in the textual mnemonic format or in the “TYPEnnn” format where “nnn” indicates the numeric type value. | keyword | -| bloxone_ddi.dns_data.updated_at | The timestamp when the object has been updated. Equals to created_at if not updated after creation. | date | -| bloxone_ddi.dns_data.view | The resource identifier. | keyword | -| bloxone_ddi.dns_data.view_name | The display name of the DNS view that contains the parent zone of the DNS resource record. | keyword | -| bloxone_ddi.dns_data.zone | The resource identifier. | 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.availability_zone | Availability zone in which this host is running. | keyword | | cloud.image.id | Image ID for the cloud instance. | keyword | @@ -1511,6 +1459,61 @@ An example event for `dns_data` looks as following: | host.os.platform | Operating system platform (such centos, ubuntu, windows). | keyword | | host.os.version | Operating system version as a raw string. | keyword | | host.type | Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. | keyword | +| infoblox_bloxone_ddi.dns_data.absolute.name.spec | The DNS protocol textual representation of absolute_name_spec. | keyword | +| infoblox_bloxone_ddi.dns_data.absolute.zone.name | The DNS protocol textual representation of the absolute domain name of the zone where this record belongs. | keyword | +| infoblox_bloxone_ddi.dns_data.absolute_name.spec | Synthetic field, used to determine zone and/or name_in_zone field for records. | keyword | +| infoblox_bloxone_ddi.dns_data.absolute_zone.name | The absolute domain name of the zone where this record belongs. | keyword | +| infoblox_bloxone_ddi.dns_data.comment | The description for the DNS resource record. May contain 0 to 1024 characters. Can include UTF-8. | keyword | +| infoblox_bloxone_ddi.dns_data.created_at | The timestamp when the object has been created. | date | +| infoblox_bloxone_ddi.dns_data.delegation | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_data.disabled | Indicates if the DNS resource record is disabled. A disabled object is effectively non-existent when generating configuration. | boolean | +| infoblox_bloxone_ddi.dns_data.id | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_data.inheritance.sources.ttl.action | The inheritance setting for a field. | keyword | +| infoblox_bloxone_ddi.dns_data.inheritance.sources.ttl.display.name | The human-readable display name for the object referred to by source. | keyword | +| infoblox_bloxone_ddi.dns_data.inheritance.sources.ttl.source | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_data.inheritance.sources.ttl.value | The inherited value. | long | +| infoblox_bloxone_ddi.dns_data.name_in.zone | The DNS protocol textual representation of the relative owner name for the DNS zone. | keyword | +| infoblox_bloxone_ddi.dns_data.name_in_zone | The relative owner name to the zone origin. Must be specified for creating the DNS resource record and is read only for other operations. | keyword | +| infoblox_bloxone_ddi.dns_data.options.address | For GET operation it contains the IPv4 or IPv6 address represented by the PTR record and for POST and PATCH operations it can be used to create/update a PTR record based on the IP address it represents. In this case, in addition to the address in the options field, need to specify the view field. | ip | +| infoblox_bloxone_ddi.dns_data.options.check_rmz | A boolean flag which can be set to true for POST operation to check the existence of reverse zone for creating the corresponding PTR record. Only applicable if the create_ptr option is set to true. | boolean | +| infoblox_bloxone_ddi.dns_data.options.create_ptr | A boolean flag which can be set to true for POST operation to automatically create the corresponding PTR record. | boolean | +| infoblox_bloxone_ddi.dns_data.provider_metadata | external DNS provider metadata. | flattened | +| infoblox_bloxone_ddi.dns_data.rdata.address | The IPv4/IPv6 address of the host. | ip | +| infoblox_bloxone_ddi.dns_data.rdata.cname | A domain name which specifies the canonical or primary name for the owner. The owner name is an alias. Can be empty. | keyword | +| infoblox_bloxone_ddi.dns_data.rdata.dhcid | The Base64 encoded string which contains DHCP client information. | keyword | +| infoblox_bloxone_ddi.dns_data.rdata.dname | A domain-name which specifies a host which should be authoritative for the specified class and domain. Can be absolute or relative domain name and include UTF-8. | keyword | +| infoblox_bloxone_ddi.dns_data.rdata.exchange | A domain name which specifies a host willing to act as a mail exchange for the owner name. | keyword | +| infoblox_bloxone_ddi.dns_data.rdata.expire | The time interval in seconds after which zone data will expire and secondary server stops answering requests for the zone. | long | +| infoblox_bloxone_ddi.dns_data.rdata.flags | An unsigned 8-bit integer which specifies the CAA record flags. RFC 6844 defines one (highest) bit in flag octet, remaining bits are deferred for future use. This bit is referenced as Critical. When the bit is set (flag value == 128), issuers must not issue certificates in case CAA records contain unknown property tags. | keyword | +| infoblox_bloxone_ddi.dns_data.rdata.length_kind | A string indicating the size in bits of a sub-subfield that is prepended to the value and encodes the length of the value. | long | +| infoblox_bloxone_ddi.dns_data.rdata.mname | The domain name for the master server for the zone. Can be absolute or relative domain name. | keyword | +| infoblox_bloxone_ddi.dns_data.rdata.negative_ttl | The time interval in seconds for which name servers can cache negative responses for zone. | long | +| infoblox_bloxone_ddi.dns_data.rdata.order | A 16-bit unsigned integer specifying the order in which the NAPTR records must be processed. Low numbers are processed before high numbers, and once a NAPTR is found whose rule “matches” the target, the client must not consider any NAPTRs with a higher value for order (except as noted below for the “flags” field. The range of the value is 0 to 65535. | long | +| infoblox_bloxone_ddi.dns_data.rdata.port | An unsigned 16-bit integer which specifies the port on this target host of this service. The range of the value is 0 to 65535. This is often as specified in Assigned Numbers but need not be. | long | +| infoblox_bloxone_ddi.dns_data.rdata.preference | An unsigned 16-bit integer which specifies the preference given to this RR among others at the same owner. Lower values are preferred. The range of the value is 0 to 65535. | long | +| infoblox_bloxone_ddi.dns_data.rdata.priority | An unsigned 16-bit integer which specifies the priority of this target host. The range of the value is 0 to 65535. A client must attempt to contact the target host with the lowest-numbered priority it can reach. Target hosts with the same priority should be tried in an order defined by the weight field. | long | +| infoblox_bloxone_ddi.dns_data.rdata.refresh | The time interval in seconds that specifies how often secondary servers need to send a message to the primary server for a zone to check that their data is current, and retrieve fresh data if it is not. | long | +| infoblox_bloxone_ddi.dns_data.rdata.regexp | A string containing a substitution expression that is applied to the original string held by the client in order to construct the next domain name to lookup. | keyword | +| infoblox_bloxone_ddi.dns_data.rdata.replacement | The next name to query for NAPTR, SRV, or address records depending on the value of the flags field. This can be an absolute or relative domain name. Can be empty. | keyword | +| infoblox_bloxone_ddi.dns_data.rdata.retry | The time interval in seconds for which the secondary server will wait before attempting to recontact the primary server after a connection failure occurs. | long | +| infoblox_bloxone_ddi.dns_data.rdata.rname | The domain name which specifies the mailbox of the person responsible for this zone. | keyword | +| infoblox_bloxone_ddi.dns_data.rdata.serial | An unsigned 32-bit integer that specifies the serial number of the zone. Used to indicate that zone data was updated, so the secondary name server can initiate zone transfer. The range of the value is 0 to 4294967295. | long | +| infoblox_bloxone_ddi.dns_data.rdata.services | Specifies the service(s) available down this rewrite path. It may also specify the particular protocol that is used to talk with a service. A protocol must be specified if the flags field states that the NAPTR is terminal. If a protocol is specified, but the flags field does not state that the NAPTR is terminal, the next lookup must be for a NAPTR. The client may choose not to perform the next lookup if the protocol is unknown, but that behavior must not be relied upon. | keyword | +| infoblox_bloxone_ddi.dns_data.rdata.tag | The CAA record property tag string which indicates the type of CAA record. | keyword | +| infoblox_bloxone_ddi.dns_data.rdata.target | The target domain name to which the zone will be mapped. Can be empty. | keyword | +| infoblox_bloxone_ddi.dns_data.rdata.text | The semantics of the text depends on the domain where it is found. | keyword | +| infoblox_bloxone_ddi.dns_data.rdata.type | Type of TXT (Text) record. | keyword | +| infoblox_bloxone_ddi.dns_data.rdata.value | A string which contains the CAA record property value. | keyword | +| infoblox_bloxone_ddi.dns_data.rdata.weight | An unsigned 16-bit integer which specifies a relative weight for entries with the same priority. The range of the value is 0 to 65535. Larger weights should be given a proportionately higher probability of being selected. Domain administrators should use weight 0 when there isn’t any server selection to do, to make the RR easier to read for humans (less noisy). In the presence of records containing weights greater than 0, records with weight 0 should have a very small chance of being selected. | long | +| infoblox_bloxone_ddi.dns_data.rdata_value | The DNS protocol textual representation of the DNS resource record data. | keyword | +| infoblox_bloxone_ddi.dns_data.source | The DNS resource record type-specific non-protocol source. The source is a combination of indicators, each tracking how the DNS resource record appeared in system. | keyword | +| infoblox_bloxone_ddi.dns_data.tags | The tags for the DNS resource record in JSON format. | flattened | +| infoblox_bloxone_ddi.dns_data.ttl | The record time to live value in seconds. The range of this value is 0 to 2147483647. Defaults to TTL value from the SOA record of the zone. | long | +| infoblox_bloxone_ddi.dns_data.type | The DNS resource record type specified in the textual mnemonic format or in the “TYPEnnn” format where “nnn” indicates the numeric type value. | keyword | +| infoblox_bloxone_ddi.dns_data.updated_at | The timestamp when the object has been updated. Equals to created_at if not updated after creation. | date | +| infoblox_bloxone_ddi.dns_data.view | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_data.view_name | The display name of the DNS view that contains the parent zone of the DNS resource record. | keyword | +| infoblox_bloxone_ddi.dns_data.zone | The resource identifier. | keyword | | input.type | Input type | keyword | | log.offset | Log offset | long | | related.hosts | All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases. | keyword | diff --git a/packages/bloxone_ddi/img/bloxone-ddi-logo.svg b/packages/infoblox_bloxone_ddi/img/infoblox-bloxone-ddi-logo.svg similarity index 100% rename from packages/bloxone_ddi/img/bloxone-ddi-logo.svg rename to packages/infoblox_bloxone_ddi/img/infoblox-bloxone-ddi-logo.svg diff --git a/packages/infoblox_bloxone_ddi/img/infoblox-bloxone-ddi-screenshot.png b/packages/infoblox_bloxone_ddi/img/infoblox-bloxone-ddi-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..4a1e34f0878aa8b173c513c1b1c79a65ecee9940 GIT binary patch literal 132086 zcmbTec|6qHA3v^yTdun0B819CWxJIngd`N%vJA#nvYU}*>|;`)2$ikKo^{NObugBp zLdZJIV9X%dW{i<-FlPLwd++D-xxdHv``6dwG3IgJXM4S0=XK6`o!9eu=7oisk-#yr zV_aNZ0(WlTy2r)E2j=49HvNT{^Tegf8Or%O6m-w%CKqzx%rYlb~ykBh51g@6A( z4<~)}(QW%6F0NC-KR<`a9#UakTnEK>Zs}QvIj@lTqJ(TFyMMqUZl2vde(#87JMZ(e z!Yc_6Toj(i)+Y+Nh-VlWbPCDa{w8$mB*e*y=N6B`<3d+%gF^;S(uTN~V?%R;7G>47 zV{Sayf$shq>M`(s`Ca7T^`L=gAjU78-v9ZtaR10M|4)L8>xR&|NBsXw+PrL6{9nrY z^5KU6r7SvsnL7O6lz(+%@yTu|WI66v*e_$I@o|?8o;0YW|N7r%M*p*e((3x{VISCblRSL zqQo;(?}^E**YG+8wyUwAplHc}=>s82;f1&ckcs8DUaX_;V{GZ$x2HP^3067JG%JJv z;RM@%y1AjZabUc~v~Ys>+xOA=%c^6D7sXS9$%QigfI>g_e!n}v zC-h0ti&z+bm2hH)t|%{WLPUc%;{PMcc?FE)$ojv-UUF|bfLP0@j&|wn&t{fSH*9?LfX*;%kTj_I7W2|-{Fry| zKyepsV7yuHC8d)m>&`$=&v4CjX7k{B@7J%^hK3~{KYb!GRcV4{&!?sw37=8WuFlSj zSKfFuhh~fwPM6M+*}wfGV1A7?A#{pO)#cxuQ1%TD!XhcKHD~s?w$*Itl&#Oqc7-o^ zo73s8r_=^B#2NDI)cWD29FhOasKdge*t=(-+q;>XOZnWvJF~4eSZ62Q;=O9!J^^uc zZ`R(H4*`vM@Su>Dmerp%ko5eyby(QUX@GjRn*VU7%fJ|8`k)N9Kldw*=q;t|PN-s? z6csK1^WZ(Ie47|bST*`vMP4OzQ0lSOvI1u*A)lj>1Gd|R(;aZ0vj1WNGrHT|NiUN5L36zDOFPw1&D-wMQ#zZ9%}Dnr8bv#wa4;9 zUh1Nw#JY`qP!YR&Uv1!cFO$F;U29GLDWrX^EjRD`XabZsJ~Vz^DQLN7dg~)U zstm~BhV=HxT_|`~QUKsgGTWn6S@glDh zYw8DfsXuWW7o!-WkZkE>H@ecK0f)@NGRyDKE{r9=7|QytFqV`!#5`E}hNjbNTE`S0 ziT^surdERYKwH8BP-rf?#63ektT_M}hdj+FeuJyAmQ(AMl2=8El=88M^|yS4lFaS= zR#qDps1qj4GHB{#1Ut1efwAr!9L9$je^oe3-gAWA^Mv@~z6@3~g^o|Hz5{hij+jQ! zA>LigktBeLmF{buY?_>{R702?rGb%$OaW`(VXBx6<)mWA_CU+glw5BoW3*c7yn4!1 zowu7vONF;BtKKkv^P1gaUS!A%JtB!V8ZGCuFF#1_6v?&jhH5Usr0!aUY!6_YcL#-D zWc?XX!|VL#4b;m>vy>FE0#k8y&f0A5nEE+=zNSN@X$!XhBYqSEG2slMUJqyaAKj-# z&Nj)7QimiX0#?Eh4y|40ir7|S1MaH1E(JZ`E3Y(GniriRqN0={1#>7{mKq!#%0`XB zm32#*bny~;+d)D5^>xBlKs~5Alg%Xa_4X?5qz&g%;NjEDKZfV_&;7mRtQ_52bu#CV zldSA)U_2rL)X!LZ4515GOrKM&YU(bl5_z_dne==OSe9wMd|5-g+f*>^bq*XttVv6^ zii)dQ0NAp7w?_!RqZ7o^4SyXw<>O0BI(#Ail_CpBTOW@OW@9m;8NrxDyj!ikhSo-> zJPilA5UXfd()`AB!_sPb-`4kck-nYU@t7c=G3;?0l-g0uZtJv(W9E9LuXnd%SaNKx zoa&tbJ))(^=4j%d7b%A%2=*um`SGT$`H?ID+fJ!RI?CcIYP4)|7L(G-l&g>_* z9O!RBXY@_qw~pp)df1QHs!IX+s5<*P!$}Qtrw5=BalBz90l~I=K89%Wu1C{xES;Os zdX;`cos{hG?)|b;`(bf+J)&^Ge1k_055I1fjy{3(2#yrJGMYocE7VT3geOYEzS%nk z_t-?NFE4KG^Upb&I=j^y(%TmG1e&SQB*@?|faV$%+n_*9!+WhbQmM&7ID%s*@!$zH zZ1r4MvqSnPy7;osL!@)7?FrrWMqpmSL1<bXngzd%x&O(qK?(%Bo3)utG)H5fFwtx4&agSfV$UN3q&IeoRwjE3n8=077o^Y-WF?2cyLXNXK<2JMx-Xe=K4c}sWiq?29Q3W1u$J|@?PE!wXjj}V&a>vAh=f@?9>0u zsh&z<+C?|vd7h67u8q^5Hk|q=6RIZDb0qg{ljv+?0eTi((0S($Je9luD)7~6om3ne{Qu!i)p|Nh_iU;+LejK}~ zIg}kw+u(>8pcq9nD_hFeZ)lFZzc3Y90e`?=AYkRYn{Q|{ zdLGn!TN_=C%US8CpEhL$6t^7&74g4kH$Er=UoVHlPwvwWg%4!$`yhqO>+|Jc#j@*ggA zaTMrg#-G3~m9h~L5J45U1y3a}H3+5K2Uk+>EXt_l6*!Z>MOAOSZo9GBH{r7U^{UzM zbG}vlj0vxg!MEOf-1#1$5lxc%zM1y=+9TE`?z{}rv0OUk`q#1J^)sYa##Bk!(uLNI z)kq4CX#q&xC=o{v$4fsJ`Mo1{?P3c4lKF|{R@wMRT9;#coV_9SnXZfbS#Xz1GnYoN_RPDC`wX+|3f zq2g_FCLwkA-CVWUj&1kiw^s@>yI$g7$20JyS9L;}_>2a>2`MtWc~EgMOCy&i5np4s z7LKw-Y<5e*_S}xuK&n0795~cZ@+gJINo0SmR1n!z7j|Xsq}qdB96S$2_@0`0`0yd- zY-p{A>C__&qFQA6;Qe^vawo9fcrkg~$f&z<2Fpyd zqo2BW4zSERFb$v|CJRLa9oF@w3iNE}DrawE4aA+)J;Q7G+iiH^ z=QO^}327EsX}hzTk3eF>Kt*a-BV*2?YHQY9(COeCv02`8^dx3}DFd?wgEcy&clo&D zlaq%q%*f>|oqp8-y*IKjtl6{xt;ErP51>5WZF(?ANo(0voPJv%#MlhpXx=T$z^v+; z@V9h_>KkXAqSKa3s$~nMvg>O`&<%fh27}7XVZ_SZ6d0-$YghcaUo^a9Az$F)#44+u zx=KY%uP&W4iQdX?mp_+TX^#6^3{=@#M^3WGPi6)5A3_TIuW5hs_%Ug%9pS*)17W1! zC5201ZB4fpC8zAXQ#J#bqzuO6P=%0rbcyFY2Bg*E^yGmwKUt1Ge$9-LH)V*R3PpA1 zjlHRd(1-{D(Ii*LTDje>84CJG(}EV@;pzO#ujT0 zr@p~WNwvS=s|ya#!YAPhBGrdaz`(&G{cMs0-1hD>Ss1HXc3{^j+v;i>4WR8m{UO;w z^%oU`9~-@BeyAf#r50jVY`LCoCLKs388qvU-yQJfq7F(1t$f2)b((zzD zJN_0{y-zwORCg%Je<(j@dwINL{>56dNo|SgW?twtp)N(o#?S9%gycxkIG0zMT4a5Q z-Yx!T6U+y=gmTrUaGY>)$%k@Z!hll#c%{7+Aoc3_OVrqxl{#~yOnjkx&=?#DpsN4g zayq@vR8&+HEKb2AisW*m%%CZnA3=ZsF}2MMT=`Q1PlhT3?w@d^MBYuKvmBtTmn5dX zxgc5+LL**~kujKH{ zigZ#hcBiJwWUGE(6Q&GZ7>E@`>J}F3U~1rzgGlewQsus_n|tIcn~bdW4MTxzWz}Ng zbDW*h=V0N758*7Hhw@}Ye5$tmd`q}J0#~FpibKD2R5a`LAExKUt6Al|{YB))^~H8W zhrBmV4{)E-=RZTKRDu?!`9{UqLo&53obqEQ6j|c^3Pg2p&1#w~7ye#1vnY(6aP{>F z?^0z_*R~-}`9VO#B8&%uO_wt=bHumT9`h_Hy83pr7upoJK;LX-z`g$GYCg~mKYQG9HLTK56jqQ9=3VNr5MZLRP=L(Z)AGf>QuGHtpd#*CT)`!>O! zHr>XylfYNMAirleBg2;ajA6=P9}hGzFOuw>PgvYXa-s$h!xS}g=e0G1I(X-;xN;lP zemhFFQ+y9O;&kq+bl({GWkRpN94Rgc&8L(lJf*e!eGW30M7X4;Wa!qF9IASvuOguN zYR#2Uy=5OC$d6HurRA;it3Lc7K`VPe|Vq^nS-yE)wHnExvtc>&1_iyXV zl*6z@>)iW6|4HbnR+y| zt_$$mevjJ7GDf#A4`s(Ktu}+lo-^rz9V-cC)A_mE6LM995u4X;m*xf*78Vw5^{Y=W zPb_v_B50v#+F05o4^na4qN7SHj`CbO!guzgOYp&S*rN6|*M3zx37L}(SRBYvaczGG z-gD|WTzgd~8+bO%WJvgLFE(~MfH~5{{N1Z9)bsPLIO?nw5#tJ^m$m`+X|)jYPN$NE zC;iJ*R_>gSIj{XtwPjQqQ{k%*pyc5KWnuyzJbG0ZgPeXF%ke;etK=V`qffBEm`MG} z7BL9RK4tS!dobb1=}=po=CD|ZqpxC9Z9KcBxio7uc|_nqaW@B5Q2AocWO~Q6x*>Ww z%Yx1LI^ug2$OV~*Q_0y{9}H)HW2XSh3~tt4DnOdPQ228isrS+rbdi-FRZtUzZjKUu zf5OK?-uN|H;}r#D6mT;oo2LPLXR0FA#qn(e!apkWLl>FN(jp4!0j+i<8VF|^^2Ggr zi21%oThjKi-42(V<-j)YDquo5r=BNg6EklsW0fRA$`~S|bUABf+g9d;dGv6WVmW23 zx;pZp(&;TPgJeXSR2!`@-8HYfd%*Dx_aTU6+Q_}o+~`*yTVUc1>7-FA!Gz##;#0!^ zC3+v{f(-FXeRhpTgHGa(;Z@cr6}|T&?B7I$`W2?VJj3|@aYkCJVo=94J?r)SVNB=p zR7IOGa_U2|Z>p0O??xtypyt0PG1lAsCs4r9EvC|ytGs3f7vRs@!QB-34gGlT36E}> zetbxU3pUrG-lsshZNGQS%<=WxGI|?-T_o6aDtdic!QJCw8U1xUwX$~4w?C^MX}dH~ z0l*@CI=h=n5)|{jHtIuL98&wcvV769Fh$Uq3*4#y%f~~5Z_pQ&l+3V-_LPNyPXYjr zQ|OXr54=KPUSS0p6#Cx0CX04e986H^K1_~3Gt#emmDQ(=Z3>r@lcUl?$%M9??EpQ} z$oTr320t5S2yHYR3r)|;TJSNF>nLPR(j}1m(;^SREyAii!%Y zOU*zc-xcAuq4yEMhI@t)B@Qb7l*2zPUt5Ajx7FvfC_3N%lo%<>{^r{`&$E!J#B>T; z7znB_p|L(G0@Z@Ldj|UVwy4cw3+MwN+G{pPT)w_FP0CSAT1g3gV=W{9A57%ZN1top zbr%NUq;MV7ZK!Q>&q9jz$V46RiBZ7u?o6jNt51?2W$C)lI3aC|RCZSJ7WkKsqJkTd zT7?GAuQbM;0&nA5cC`b#$Oa=RQ_V=-Ow!=tT8631YsRW`Er4|z@HBWV<8HBgx5)<)eQ-^0X#1cc}WXNDe3)wH+qLFS040&^W#~itBzT z(MFFr@;QvDIi_`-+AuGrF3xT)AC-8unkBotcZ&rw3k4}a7Ih&*U zoeMb;7Q02=t2iDTqWaO%P5C6%oTxcp7iwdCi8l!!oCC9qWPI)(>!wk&Om*0^-kOYM zQOz2wAWn=r2L2%W8(R^wB_9;L=a#or>w-_Sn?qaGVlH0)#0L)B>azVsT=^j+8)=nD)B+zU$jInH+lfr?dEtD z%{gt!5=E>^qYG2buH#i3qSiY2zPIY4t7h6T57)*bsE7kf9nLI(UL{a3-B-O(NP~6= zy5y}aKygF&k%mim<>f^KO@L4|LU(R zfoEFi*8B0TOxwtXb%&0+4K95%L4_<%-jA1{^cR)t8tn2AWWthR9LS`8dwXy;o-y+D zgzoA#5k5C<0nbn*?UI@a=k`8p4X&JthK>-!>z`$-c^AeeMi1wZH#6}0(a?Gju`4Ir zGdG}u&6rgog%em9Ci!H-Mwh)sIN+!N`BdFcyp)4ZdMlh&^PTW$WqpcZwViV^k78%? zlWm`=&PT2U>3WY=rh^;9Z`N^km5@Uk@cZG8-4S9NV`3s{b&Pj9SAvSoqVC_1k$wEM zavO{t5ZK&*Keo3wh^W~+5tJzh|Mc8{^M`--`hxnmR3Qh9PJc15s;ckHE>G4UWRgNy z;{&TW@IIZ6ytAmdJh4iu`&5b=ic$P#qyC}9+q+V@roRu}N8V`uswFG4JXM)-s%4H* z)}V`Ma-|}}Bg^5m_iyakZ`+ekk0YvAw$O{_c9p1>xrch=N2g_*=1;8PKdUB6^y0_J zk^5gW;dQFg-8`!ZY-sk8dZf#?{Axrv&OWtwuFW}HWJlNi>v_ONgvi+IiFutJB~GA} z41}u{+eQrGpH$m+TpqWVueaT;g3cXLMGBTSw6RI1sf_{I&U-8Bx&TYa18E^C!D2|y zvhk0BWy*QKW}CT+KeQvIs0^E_mZrQtsFt!Ho-f*Eev-_v#-hG09HdXPqui?nFZMD6 zpQA%g9jmT8O+V~KFHuz1s>am@CJ3}=sOUyEAYaHEUF~_tX8I=rr`M}w-)O17=!b)R z>opO!55nznZNgDCCH^OLTN)??dDc;xNOK=B*eqrSKDJbMqnf8g;koA_2mUkL)nY_R z_~op3?+Q5BD%0ym8>!7NpX32QTW17#^RyZKp^M$!T*{)L^awj!hy$<`}Tl_kruC>AA41%1rCn{H)3H$d#> z2>^*Uv>Y@$@5=rbT$@ksTcppC0X}pc?a+PYh>b#)<73>o$_ZFjS-j^T7}pOxSLnJ; z2&7g^EWe*{uFI#L3)+#}kt`9t}AMp~3PZ7BI@!*2FW3XZdYi_PhL*Zu=bvSs4i`Eqy2FHN)*e zKq5I5HaUZC0Q-Fa>!Q=a*DH!6Q$Vvc0Vl#orUxRFoCcX%Im2B1FuhqCssv=Soy3-6 zVZjRZwt?X*3FFq`oG`=W<<}8E^5WqkerXP)sCt|pkblJa@~VlVi^w&pCzEPOgb1G$ zlDFP%la(hPOdxL5djw@=jV0pVk%*L}roPRUVrZRt?Gf$G=zO6uEimu1>X<4nYF;Q4!@wRcyB0a#p4IYqK!>a1YT^e! z{e{R{vIfH$M1^)@9)y2a(a?TB(g@nR8P#xOM~ zvuU;$EZKC;_D(=HqrpaAw(w@UIJ{R$V9Hhmgx#}-m5BJcMS0f0NW!f4W;dLXoC5sizej8i%46@c-b!a9Ll@GXBR9IdvajGMxG6 zp!Tz+iqkRw6N#(r!4dF(RLFVxgp-Z`QN;gQ(QbS{k3GK1;Qp^bTopIQE5>{qJUu;q zBf&_t|8y?l-HhD-^7Gf9#m3G}=|(|Eh>nsvQY98`cZ~QbPDAdAaLj zxf}mi^>MGruTydH@$w2Xsw5t;saI9TzqmeJE1Dhch@&Q^edCh9j-2|p)TE*t90q|l z&cKVG&*$jBct-6=tFw=?b6?lz{KpIb+1pBV#|(mh3Zo;X_bc(??O!8jEhN9Pdi%G`b%meJ6nEw{A z`EVELGox1bC$P~Kcn@~JxcINv-S#Wyan{EjWAMf6GxcLL?&~v6@33OiGyXEH8v*mf z`9pOdSsk-O(N+&;)YR1p^gen@!b^)=x58pXfA+*xrDbcK!MkG;1ij zxAtewV@k<&_sIv`4YB-9v$OXTk`vaCHL`F2%;KteZu6}FYwvn5oS67~@WsKu6jo6? z(p$Hy-!@c||AdFURCfDV)6cSxeL8weZOv3;x$E`PJpYn=%<_)AL*lUTFH@7xU1#vJ zbbe`}r@4uyIuOO<~=T*V_6VF~d%l>SXt3q5J#mnCqYnl7E zMm;;zy*J1KzLt*ECoHx5W@gEhQRIBrp~$+GUu8-?cDOGa-+ums86%PU`h8`~)l26( zwBVd(s-)3i6A1lKO=&uUKLdogYZAUqPn_;6yUR0B>OkK8-7Eb#r&w8_Z3%}3^hKT^ z%-jj^(hK#JInV@{sO@oUopYN%-0vc~|IW!C@7?p>z<4`8q$$Zn6*l0g=(u=djy~6I zIf?4ii&;f8(!Qr4@inRS4?7(Do$L5=A6-m`BFg;uH*c;*Q38ufDz}X|^EUru<&>Dh zr>tIu!Brp8F_x!q`mQ+Jxn$oa34u!^K3T-+Ma&w(R5)^32>h;u!?c4QowZ)NCF8J` z?|=s9O-lqk0f$F}Z=Vg0an^w4^R~3LODQ>bQFyYnJ!9S&?<25gc{&lvW|5oHGT|(` zGfk07=@B}S>;8vN0goAg$-fuS!uvil*?B@jcQVr)Ki{2`j~kFElhZZdG!lbF-eeR( z%rn{sL#!v5n6eKH-bkv79evgHzQ!xvhs5M-MhsJa65o7g%c%S>gZ3Ee6B=8CWqq{y z0L_RdxC{zd2-2sbeMBTnzuA1BGT$uGwuYKB*zDZ5q1)q&@)5ZV9hOgP z%@^I1edF}``UjJ(V!_YU51@>Vh0s?@%8#@s?b(+HsmDjW_49`JTllPw`OigDw04|Z zn^g`{6k)Is+|~;$wRsrI`kkYzl`_|J>S+R*a*u$1_Fpj)7yX5$cL_%^ozZ#1JEl1W zvC1cGr@^$bHvLG6s8w24&4~Fi%N740#ycd(z;{Cj+L0qqv+};BR9J{U6lt6XvC^-Z zd8(lj)&T~+`sr5eips#(M-{pUw6V2JRb}OM-yGWk_Eh~mYCQwBUaGOv7!*7mX|myi zU!YUFG&eL*3I}BO=%4gb3+V63-NNMo;_vg&1fw5HKYdMP|GRIF> zpoF0)>WN=|T{XU=dl#1mX;qC_rHciH_`>|2ODo~ts)Ka*NEapcpY_^ow~=iyOM8oc z#4hh!gT)cE>-<|E&+C>S&WKtPdN!C-DZ~ELxGDl!a<|U{E2o2VapUz;h6Shd=Pu60 zQ%^%b+<$85TaZ^*`$o6TveZRK4;VpS&baJhC!$zK9e!>f&ciSc=*U_15B^$)8w)01 z$O)NB$~w8n`0hXVY&f&rsQ00O2Ik;+4wa*i3wcB9zDudS`1InzvFKfDhal-uz8@6= zVAwjTdvwc~Hai$esO$M^2`e1Pz@oBwNml^~KJ(Gacjikin?0EQ8a`F*Jy=~v<<~2- zh1HmirlxeJIHm-SoJYM1+$l0L@t+DZD;`rLf#y+H`T%UTWSAWQGC0(%Z#JacWx>Un zgzeKtUZQx+n(KYF&8v0tDXo}I+q_R^xZO{(l>XPGG?n{xI*#Cr{F|d~eC4dGF{Rf4 zQBlpj!5evT*B`j%qe)NrAZxGeohb?e%geg<6kT`Cl^#Aw7Grnx2_%Bi^|Wp}sla>} zi7S<6Qe7h})~AT7pI|qe)^PBRyt?`DSXW?XZi8=vI=J_hKDT*BM4$JxJGQ0N9uT#n zt4PTmZL#z}lK1^9Fwc^`C-tFE?ns`s!0VdZsIUz*q{f?9TSNZ0_5os7lh{b}vr
    $H{g-BS^U*7OSs)$qnj+3`JaBMb%=B-kns5tN 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 Date: Wed, 21 Sep 2022 20:36:02 +0530 Subject: [PATCH 5/6] update CODEOWNERS file --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f6e638ea47..7c0752d891 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -26,7 +26,6 @@ /packages/azure @elastic/obs-cloud-monitoring /packages/azure_metrics @elastic/obs-cloud-monitoring /packages/barracuda @elastic/security-external-integrations -/packages/bloxone_ddi @elastic/security-external-integrations /packages/bluecoat @elastic/security-external-integrations /packages/carbon_black_cloud @elastic/security-external-integrations /packages/carbonblack_edr @elastic/security-external-integrations @@ -85,6 +84,7 @@ /packages/iis @elastic/obs-service-integrations /packages/imperva @elastic/security-external-integrations /packages/infoblox @elastic/security-external-integrations +/packages/infoblox_bloxone_ddi @elastic/security-external-integrations /packages/infoblox_nios @elastic/security-external-integrations /packages/iptables @elastic/security-external-integrations /packages/jamf_compliance_reporter @elastic/security-external-integrations From e49c4a31184c7d04549381312529dca022c3c43e Mon Sep 17 00:00:00 2001 From: vinit-elastic Date: Thu, 22 Sep 2022 17:05:54 +0530 Subject: [PATCH 6/6] Update the field mapping for tsig_key field --- packages/infoblox_bloxone_ddi/changelog.yml | 2 +- .../data_stream/dhcp_lease/manifest.yml | 3 +- .../data_stream/dhcp_lease/sample_event.json | 10 +- ...test-pipeline-dns-config.log-expected.json | 40 +++---- .../elasticsearch/ingest_pipeline/default.yml | 106 +----------------- .../data_stream/dns_config/fields/fields.yml | 68 +++++------ .../data_stream/dns_config/manifest.yml | 3 +- .../data_stream/dns_config/sample_event.json | 48 ++++---- .../data_stream/dns_data/manifest.yml | 3 +- .../data_stream/dns_data/sample_event.json | 8 +- packages/infoblox_bloxone_ddi/docs/README.md | 98 ++++++++-------- 11 files changed, 143 insertions(+), 246 deletions(-) diff --git a/packages/infoblox_bloxone_ddi/changelog.yml b/packages/infoblox_bloxone_ddi/changelog.yml index ccba43f365..e12c1ac6cd 100644 --- a/packages/infoblox_bloxone_ddi/changelog.yml +++ b/packages/infoblox_bloxone_ddi/changelog.yml @@ -3,4 +3,4 @@ changes: - description: Initial Release. type: enhancement - link: https://github.com/elastic/integrations/pull/1 + link: https://github.com/elastic/integrations/pull/4118 diff --git a/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/manifest.yml b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/manifest.yml index d7839e32eb..1b94fb56d2 100644 --- a/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/manifest.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/manifest.yml @@ -53,6 +53,5 @@ streams: multi: false required: false show_user: false - description: > + 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/infoblox_bloxone_ddi/data_stream/dhcp_lease/sample_event.json b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/sample_event.json index a7b0ee8f71..9af8ef3ada 100644 --- a/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/sample_event.json +++ b/packages/infoblox_bloxone_ddi/data_stream/dhcp_lease/sample_event.json @@ -1,9 +1,9 @@ { "@timestamp": "2022-07-11T11:51:15.417Z", "agent": { - "ephemeral_id": "fcbbacc1-cc56-4655-ace0-3ab9860b392b", + "ephemeral_id": "a4b27e2a-c005-43ce-9542-7548dcc7b414", "hostname": "docker-fleet-agent", - "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", + "id": "40a09f39-a5b9-4b21-8605-6f6e9cd36138", "name": "docker-fleet-agent", "type": "filebeat", "version": "7.17.0" @@ -22,7 +22,7 @@ "version": "8.4.0" }, "elastic_agent": { - "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", + "id": "40a09f39-a5b9-4b21-8605-6f6e9cd36138", "snapshot": false, "version": "7.17.0" }, @@ -31,10 +31,10 @@ "category": [ "network" ], - "created": "2022-09-21T12:22:53.498Z", + "created": "2022-09-22T08:27:40.118Z", "dataset": "infoblox_bloxone_ddi.dhcp_lease", "end": "2022-07-11T11:51:15.417Z", - "ingested": "2022-09-21T12:22:57Z", + "ingested": "2022-09-22T08:27:43Z", "kind": "event", "original": "{\"address\":\"81.2.69.192\",\"client_id\":\"abc3212abc\",\"ends\":\"2022-07-11T11:51:15.417Z\",\"fingerprint\":\"ab3213cbabab/abc23bca\",\"fingerprint_processed\":\"12abca32bca32abcd\",\"ha_group\":\"abc321cdcbda321\",\"hardware\":\"00:00:5E:00:53:00\",\"host\":\"admin\",\"hostname\":\"Host1\",\"iaid\":0,\"last_updated\":\"2022-07-11T11:51:15.417Z\",\"options\":{\"message\":\"Hello\"},\"preferred_lifetime\":\"2022-07-11T11:51:15.417Z\",\"protocol\":\"ip4\",\"space\":\"DHCP lease Space\",\"starts\":\"2022-07-14T11:51:15.417Z\",\"state\":\"used\",\"type\":\"DHCP lease Type\"}", "start": "2022-07-14T11:51:15.417Z", diff --git a/packages/infoblox_bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log-expected.json b/packages/infoblox_bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log-expected.json index c495e8830f..89ec403825 100644 --- a/packages/infoblox_bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log-expected.json +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_config/_dev/test/pipeline/test-pipeline-dns-config.log-expected.json @@ -295,12 +295,12 @@ "tsig_key": { "algorithm": "hmac_sha256", "comment": "string", + "key": "string", "name": "string", "protocol": { "name": "string" }, - "secret": "string", - "value": "string" + "secret": "string" } } ] @@ -320,12 +320,12 @@ "tsig_key": { "algorithm": "hmac_sha384", "comment": "string", + "key": "string", "name": "string", "protocol": { "name": "string" }, - "secret": "string", - "value": "string" + "secret": "string" } } ] @@ -363,12 +363,12 @@ "tsig_key": { "algorithm": "hmac_sha224", "comment": "string", + "key": "string", "name": "string", "protocol": { "name": "string" }, - "secret": "string", - "value": "string" + "secret": "string" } } ] @@ -388,12 +388,12 @@ "tsig_key": { "algorithm": "hmac_sha384", "comment": "string", + "key": "string", "name": "string", "protocol": { "name": "string" }, - "secret": "string", - "value": "string" + "secret": "string" } } ] @@ -492,12 +492,12 @@ "tsig_key": { "algorithm": "hmac_sha512", "comment": "string", + "key": "string", "name": "string", "protocol": { "name": "string" }, - "secret": "string", - "value": "string" + "secret": "string" }, "value": "string" } @@ -510,12 +510,12 @@ "tsig_key": { "algorithm": "hmac_sha384", "comment": "string", + "key": "string", "name": "string", "protocol": { "name": "string" }, - "secret": "string", - "value": "string" + "secret": "string" }, "value": "test acl" } @@ -535,12 +535,12 @@ "tsig_key": { "algorithm": "hmac_sha224", "comment": "testing comment", + "key": "string", "name": "string", "protocol": { "name": "string" }, - "secret": "string", - "value": "string" + "secret": "string" }, "value": "string" } @@ -553,12 +553,12 @@ "tsig_key": { "algorithm": "hmac_sha1", "comment": "testing_comment", + "key": "test key", "name": "string", "protocol": { "name": "string" }, - "secret": "string", - "value": "test key" + "secret": "string" }, "value": "ACL" } @@ -575,12 +575,12 @@ "tsig_key": { "algorithm": "hmac_sha224", "comment": "string", + "key": "test", "name": "string", "protocol": { "name": "string" }, - "secret": "string", - "value": "test" + "secret": "string" }, "value": "value" } @@ -593,12 +593,12 @@ "tsig_key": { "algorithm": "hmac_sha1", "comment": "string", + "key": "Test", "name": "string", "protocol": { "name": "string" }, - "secret": "string", - "value": "Test" + "secret": "string" }, "value": "name" } diff --git a/packages/infoblox_bloxone_ddi/data_stream/dns_config/elasticsearch/ingest_pipeline/default.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_config/elasticsearch/ingest_pipeline/default.yml index 0fe39506db..0e61d025ff 100644 --- a/packages/infoblox_bloxone_ddi/data_stream/dns_config/elasticsearch/ingest_pipeline/default.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_config/elasticsearch/ingest_pipeline/default.yml @@ -941,16 +941,6 @@ processors: ignore_missing: true ignore_missing: true ignore_failure: true - - foreach: - field: json.inheritance_sources.query_acl.value - if: ctx.json?.inheritance_sources?.query_acl?.value instanceof List - processor: - rename: - field: _ingest._value.tsig_key.key - target_field: _ingest._value.tsig_key.value - ignore_missing: true - ignore_missing: true - ignore_failure: true - rename: field: json.inheritance_sources.query_acl.value target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value @@ -1015,16 +1005,6 @@ processors: ignore_missing: true ignore_missing: true ignore_failure: true - - foreach: - field: json.inheritance_sources.recursion_acl.value - if: ctx.json?.inheritance_sources?.recursion_acl?.value instanceof List - processor: - rename: - field: _ingest._value.tsig_key.key - target_field: _ingest._value.tsig_key.value - ignore_missing: true - ignore_missing: true - ignore_failure: true - rename: field: json.inheritance_sources.recursion_acl.value target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value @@ -1133,16 +1113,6 @@ processors: ignore_missing: true ignore_missing: true ignore_failure: true - - foreach: - field: json.inheritance_sources.transfer_acl.value - if: ctx.json?.inheritance_sources?.transfer_acl?.value instanceof List - processor: - rename: - field: _ingest._value.tsig_key.key - target_field: _ingest._value.tsig_key.value - ignore_missing: true - ignore_missing: true - ignore_failure: true - rename: field: json.inheritance_sources.transfer_acl.value target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value @@ -1207,16 +1177,6 @@ processors: ignore_missing: true ignore_missing: true ignore_failure: true - - foreach: - field: json.inheritance_sources.update_acl.value - if: ctx.json?.inheritance_sources?.update_acl?.value instanceof List - processor: - rename: - field: _ingest._value.tsig_key.key - target_field: _ingest._value.tsig_key.value - ignore_missing: true - ignore_missing: true - ignore_failure: true - rename: field: json.inheritance_sources.update_acl.value target_field: infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value @@ -1491,16 +1451,6 @@ processors: ignore_missing: true ignore_missing: true ignore_failure: true - - foreach: - field: json.match_clients_acl - if: ctx.json?.match_clients_acl instanceof List - processor: - rename: - field: _ingest._value.tsig_key.key - target_field: _ingest._value.tsig_key.value - ignore_missing: true - ignore_missing: true - ignore_failure: true - rename: field: json.match_clients_acl target_field: infoblox_bloxone_ddi.dns_config.match_clients_acl @@ -1563,16 +1513,6 @@ processors: ignore_missing: true ignore_missing: true ignore_failure: true - - foreach: - field: json.match_destinations_acl - if: ctx.json?.match_destinations_acl instanceof List - processor: - rename: - field: _ingest._value.tsig_key.key - target_field: _ingest._value.tsig_key.value - ignore_missing: true - ignore_missing: true - ignore_failure: true - rename: field: json.match_destinations_acl target_field: infoblox_bloxone_ddi.dns_config.match_destinations_acl @@ -1699,16 +1639,6 @@ processors: ignore_missing: true ignore_missing: true ignore_failure: true - - foreach: - field: json.query_acl - if: ctx.json?.query_acl instanceof List - processor: - rename: - field: _ingest._value.tsig_key.key - target_field: _ingest._value.tsig_key.value - ignore_missing: true - ignore_missing: true - ignore_failure: true - rename: field: json.query_acl target_field: infoblox_bloxone_ddi.dns_config.query_acl @@ -1771,16 +1701,6 @@ processors: ignore_missing: true ignore_missing: true ignore_failure: true - - foreach: - field: json.recursion_acl - if: ctx.json?.recursion_acl instanceof List - processor: - rename: - field: _ingest._value.tsig_key.key - target_field: _ingest._value.tsig_key.value - ignore_missing: true - ignore_missing: true - ignore_failure: true - rename: field: json.recursion_acl target_field: infoblox_bloxone_ddi.dns_config.recursion_acl @@ -1867,16 +1787,6 @@ processors: ignore_missing: true ignore_missing: true ignore_failure: true - - foreach: - field: json.transfer_acl - if: ctx.json?.transfer_acl instanceof List - processor: - rename: - field: _ingest._value.tsig_key.key - target_field: _ingest._value.tsig_key.value - ignore_missing: true - ignore_missing: true - ignore_failure: true - rename: field: json.transfer_acl target_field: infoblox_bloxone_ddi.dns_config.transfer_acl @@ -1939,16 +1849,6 @@ processors: ignore_missing: true ignore_missing: true ignore_failure: true - - foreach: - field: json.update_acl - if: ctx.json?.update_acl instanceof List - processor: - rename: - field: _ingest._value.tsig_key.key - target_field: _ingest._value.tsig_key.value - ignore_missing: true - ignore_missing: true - ignore_failure: true - rename: field: json.update_acl target_field: infoblox_bloxone_ddi.dns_config.update_acl @@ -1960,9 +1860,9 @@ processors: formats: - ISO8601 on_failure: - - append: - field: error.message - value: '{{{_ingest.on_failure_message}}}' + - append: + field: error.message + value: '{{{_ingest.on_failure_message}}}' - set: field: '@timestamp' copy_from: infoblox_bloxone_ddi.dns_config.updated_at diff --git a/packages/infoblox_bloxone_ddi/data_stream/dns_config/fields/fields.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_config/fields/fields.yml index b218df25a2..423cf2bcc0 100644 --- a/packages/infoblox_bloxone_ddi/data_stream/dns_config/fields/fields.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_config/fields/fields.yml @@ -566,6 +566,9 @@ - name: comment type: keyword description: Comment for TSIG key. + - name: key + type: keyword + description: The resource identifier. - name: name type: keyword description: TSIG key name, FQDN. @@ -578,9 +581,6 @@ - name: secret type: keyword description: TSIG key secret, base64 string. - - name: value - type: keyword - description: The resource identifier. - name: recursion_acl type: group fields: @@ -620,6 +620,9 @@ - name: comment type: keyword description: Comment for TSIG key. + - name: key + type: keyword + description: The resource identifier. - name: name type: keyword description: TSIG key name, FQDN. @@ -632,9 +635,6 @@ - name: secret type: keyword description: TSIG key secret, base64 string. - - name: value - type: keyword - description: The resource identifier. - name: recursion_enabled type: group fields: @@ -713,6 +713,9 @@ - name: comment type: keyword description: Comment for TSIG key. + - name: key + type: keyword + description: The resource identifier. - name: name type: keyword description: TSIG key name, FQDN. @@ -725,9 +728,6 @@ - name: secret type: keyword description: TSIG key secret, base64 string. - - name: value - type: keyword - description: The resource identifier. - name: update_acl type: group fields: @@ -767,6 +767,9 @@ - name: comment type: keyword description: Comment for TSIG key. + - name: key + type: keyword + description: The resource identifier. - name: name type: keyword description: TSIG key name, FQDN. @@ -779,9 +782,6 @@ - name: secret type: keyword description: TSIG key secret, base64 string. - - name: value - type: keyword - description: The resource identifier. - name: use_forwarders_for_subzones type: group fields: @@ -986,6 +986,9 @@ - name: comment type: keyword description: Comment for TSIG key. + - name: key + type: keyword + description: The resource identifier. - name: name type: keyword description: TSIG key name, FQDN. @@ -998,9 +1001,6 @@ - name: secret type: keyword description: TSIG key secret, base64 string. - - name: value - type: keyword - description: The resource identifier. - name: value type: keyword description: The resource identifier. @@ -1025,19 +1025,19 @@ - name: comment type: keyword description: Comment for TSIG key. - - name: name + - name: key type: keyword description: The resource identifier. + - name: name + type: keyword + description: TSIG key name, FQDN. - name: protocol type: group fields: - name: name type: keyword - description: TSIG key name, FQDN. + description: TSIG key name in punycode. - name: secret - type: keyword - description: TSIG key name in punycode. - - name: value type: keyword description: TSIG key secret, base64 string. - name: value @@ -1085,6 +1085,9 @@ - name: comment type: keyword description: Comment for TSIG key. + - name: key + type: keyword + description: The resource identifier. - name: name type: keyword description: TSIG key name, FQDN. @@ -1097,9 +1100,6 @@ - name: secret type: keyword description: TSIG key secret, base64 string. - - name: value - type: keyword - description: The resource identifier. - name: value type: keyword description: The resource identifier. @@ -1124,19 +1124,19 @@ - name: comment type: keyword description: Comment for TSIG key. - - name: name + - name: key type: keyword description: The resource identifier. + - name: name + type: keyword + description: TSIG key name, FQDN. - name: protocol type: group fields: - name: name type: keyword - description: TSIG key name, FQDN. + description: TSIG key name in punycode. - name: secret - type: keyword - description: TSIG key name in punycode. - - name: value type: keyword description: TSIG key secret, base64 string. - name: value @@ -1175,6 +1175,9 @@ - name: comment type: keyword description: Comment for TSIG key. + - name: key + type: keyword + description: The resource identifier. - name: name type: keyword description: TSIG key name, FQDN. @@ -1187,9 +1190,6 @@ - name: secret type: keyword description: TSIG key secret, base64 string. - - name: value - type: keyword - description: The resource identifier. - name: value type: keyword description: The resource identifier. @@ -1214,6 +1214,9 @@ - name: comment type: keyword description: Comment for TSIG key. + - name: key + type: keyword + description: The resource identifier. - name: name type: keyword description: TSIG key name, FQDN. @@ -1226,9 +1229,6 @@ - name: secret type: keyword description: TSIG key secret, base64 string. - - name: value - type: keyword - description: The resource identifier. - name: value type: keyword description: The resource identifier. diff --git a/packages/infoblox_bloxone_ddi/data_stream/dns_config/manifest.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_config/manifest.yml index 5a880b746a..b83c320597 100644 --- a/packages/infoblox_bloxone_ddi/data_stream/dns_config/manifest.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_config/manifest.yml @@ -53,6 +53,5 @@ streams: multi: false required: false show_user: false - description: > + 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/infoblox_bloxone_ddi/data_stream/dns_config/sample_event.json b/packages/infoblox_bloxone_ddi/data_stream/dns_config/sample_event.json index 2485886989..c2849e4b32 100644 --- a/packages/infoblox_bloxone_ddi/data_stream/dns_config/sample_event.json +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_config/sample_event.json @@ -1,9 +1,9 @@ { "@timestamp": "2022-07-15T06:55:25.978Z", "agent": { - "ephemeral_id": "81dd62b7-0768-4bb1-aaf4-9957a83f141e", + "ephemeral_id": "72747b3e-5f2e-4261-a994-aff0ac9b5be1", "hostname": "docker-fleet-agent", - "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", + "id": "40a09f39-a5b9-4b21-8605-6f6e9cd36138", "name": "docker-fleet-agent", "type": "filebeat", "version": "7.17.0" @@ -22,7 +22,7 @@ "version": "8.4.0" }, "elastic_agent": { - "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", + "id": "40a09f39-a5b9-4b21-8605-6f6e9cd36138", "snapshot": false, "version": "7.17.0" }, @@ -34,7 +34,7 @@ "created": "2022-07-15T06:55:25.978Z", "dataset": "infoblox_bloxone_ddi.dns_config", "id": "adv12rgfh", - "ingested": "2022-09-21T12:23:36Z", + "ingested": "2022-09-22T08:28:25Z", "kind": "event", "original": "{\"add_edns_option_in_outgoing_query\":true,\"comment\":\"DNS Config Comment\",\"created_at\":\"2022-07-15T06:55:25.978Z\",\"custom_root_ns\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"custom fqdn\",\"protocol_fqdn\":\"custom protocol fqdn\"}],\"custom_root_ns_enabled\":true,\"disabled\":true,\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_root_keys\":[{\"algorithm\":30,\"protocol_zone\":\"Dnssec root protocol zone\",\"public_key\":\"Dnssec root Public Key\",\"sep\":true,\"zone\":\"Dnssec root Zone\"}],\"dnssec_trust_anchors\":[{\"algorithm\":10,\"protocol_zone\":\"Dnssec trust protocol zone\",\"public_key\":\"Dnssec trust Public Key\",\"sep\":true,\"zone\":\"Dnssec trust zone\"}],\"dnssec_validate_expiry\":true,\"ecs_enabled\":true,\"ecs_forwarding\":true,\"ecs_prefix_v4\":22,\"ecs_prefix_v6\":33,\"ecs_zones\":[{\"access\":\"ecs zones access\",\"fqdn\":\"ecs zones fqdn\",\"protocol_fqdn\":\"ecs zones protocol fqdn\"}],\"edns_udp_size\":568,\"forwarders\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"forwarders fqdn\",\"protocol_fqdn\":\"forwarders protocol fqdn\"}],\"forwarders_only\":true,\"gss_tsig_enabled\":true,\"id\":\"adv12rgfh\",\"inheritance_sources\":{\"add_edns_option_in_outgoing_query\":{\"action\":\"inherit\",\"display_name\":\"displaynameadd_edns_option_in_outgoing_query\",\"source\":\"sourceadd_edns_option_in_outgoing_query\",\"value\":true},\"custom_root_ns_block\":{\"action\":\"override\",\"display_name\":\"displaynamecustom_root_ns_block\",\"source\":\"sourcecustom_root_ns_block\",\"value\":{\"custom_root_ns\":[{\"address\":\"67.43.156.0\",\"fqdn\":\"fqdn_custom_root_ns\",\"protocol_fqdn\":\"protocolfqdn_custom_root_ns\"}],\"custom_root_ns_enabled\":true}},\"dnssec_validation_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamednssec_validation_block\",\"source\":\"sourcednssec_validation_block\",\"value\":{\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_trust_anchors\":[{\"algorithm\":8,\"protocol_zone\":\"protocolzonednssec_trust_anchors\",\"public_key\":\"publickeydnssec_trust_anchors\",\"sep\":false,\"zone\":\"is3zone\"}],\"dnssec_validate_expiry\":true}},\"ecs_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameecs_block\",\"source\":\"sourceecs_block\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":10,\"ecs_zones\":[{\"access\":\"inherit\",\"fqdn\":\"fqdnecs_block\",\"protocol_fqdn\":\"protocol_fqdnecs_block\"}]}},\"ecs_zones\":{\"action\":\"override\",\"display_name\":\"displaynameecs_zones\",\"source\":\"sourceecs_zones\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":12,\"ecs_zones\":[{\"access\":\"access_ecs_zones\",\"fqdn\":\"fqdn_ecs_zones\",\"protocol_fqdn\":\"protocolfqdn_ecs_zones\"}]}},\"edns_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynameedns_udp_size\",\"source\":\"sourceedns_udp_size\",\"value\":55},\"forwarders_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameforwarders_block\",\"source\":\"sourceforwarders_block\",\"value\":{\"forwarders\":[{\"address\":\"89.160.20.128\",\"fqdn\":\"forwarders_fqdn\",\"protocol_fqdn\":\"forwarders_protocolfqdn\"}],\"forwarders_only\":true}},\"gss_tsig_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamegss_tsig_enabled\",\"source\":\"sourcegss_tsig_enabled\",\"value\":true},\"lame_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamelame_ttl\",\"source\":\"sourcelame_ttl\",\"value\":45},\"match_recursive_only\":{\"action\":\"inherit\",\"display_name\":\"displaynamematch_recursive_only\",\"source\":\"sourcematch_recursive_only\",\"value\":false},\"max_cache_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_cache_ttl\",\"source\":\"sourcemax_cache_ttl\",\"value\":13},\"max_negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_negative_ttl\",\"source\":\"sourcemax_negative_ttl\",\"value\":12},\"max_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_udp_size\",\"source\":\"sourcemax_udp_size\",\"value\":11},\"minimal_responses\":{\"action\":\"inherit\",\"display_name\":\"displaynameminimal_responses\",\"source\":\"sourceminimal_responses\",\"value\":true},\"notify\":{\"action\":\"inherit\",\"display_name\":\"displayname_notify\",\"source\":\"source_notify\",\"value\":true},\"query_acl\":{\"action\":\"override\",\"display_name\":\"displaynamequery_acl\",\"source\":\"sourcequery_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclvalue_query_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementvaluequery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha256\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolname_query_acl\",\"secret\":\"secretquery_acl\"}}]},\"recursion_acl\":{\"action\":\"override\",\"display_name\":\"displaynamerecursion_acl\",\"source\":\"sourcerecursion_acl\",\"value\":[{\"access\":\"deny\",\"acl\":\"aclrecursion_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}]},\"recursion_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamerecursion_enabled\",\"source\":\"sourcerecursion_enabled\",\"value\":true},\"synthesize_address_records_from_https\":{\"action\":\"inherit\",\"display_name\":\"displaynamesynthesize_address_records_from_https\",\"source\":\"sourcesynthesize_address_records_from_https\",\"value\":true},\"transfer_acl\":{\"action\":\"inherit\",\"display_name\":\"displaynametransfer_acl\",\"source\":\"sourcetransfer_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}]},\"update_acl\":{\"action\":\"override\",\"display_name\":\"displaynameupdate_acl\",\"source\":\"sourceupdate_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}]},\"use_forwarders_for_subzones\":{\"action\":\"override\",\"display_name\":\"displaynameuse_forwarders_for_subzones\",\"source\":\"sourceuse_forwarders_for_subzones\",\"value\":false},\"zone_authority\":{\"default_ttl\":{\"action\":\"override\",\"display_name\":\"displaynamezone_authority\",\"source\":\"sourcezone_authority\",\"value\":50},\"expire\":{\"action\":\"inherit\",\"display_name\":\"displaynameexpire\",\"source\":\"sourceexpire\",\"value\":70},\"mname_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamemname_block\",\"source\":\"sourcemname_block\",\"value\":{\"mname\":\"mnamevaluemname_block\",\"protocol_mname\":\"protocolmnamemname_block\",\"use_default_mname\":true}},\"negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamenegative_ttl\",\"source\":\"sourcenegative_ttl\",\"value\":90},\"protocol_rname\":{\"action\":\"inherit\",\"display_name\":\"displaynameprotocol_rname\",\"source\":\"sourceprotocol_rname\",\"value\":\"valueprotocol_rname\"},\"refresh\":{\"action\":\"inherit\",\"display_name\":\"displayname_refresh\",\"source\":\"source_refresh\",\"value\":40},\"retry\":{\"action\":\"inherit\",\"display_name\":\"displayname_retry\",\"source\":\"source_retry\",\"value\":570},\"rname\":{\"action\":\"inherit\",\"display_name\":\"displayname_rname\",\"source\":\"source_rname\",\"value\":\"value_rname\"}}},\"ip_spaces\":[\"testipspaces\"],\"lame_ttl\":350,\"match_clients_acl\":[{\"access\":\"deny\",\"acl\":\"aclmatch_clients_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_clients_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha512\",\"comment\":\"commentmatch_clients_acl\",\"key\":\"keymatch_clients_acl\",\"name\":\"namematch_clients_acl\",\"protocol_name\":\"protocolnamematch_clients_acl\",\"secret\":\"secretmatch_clients_acl\"}}],\"match_destinations_acl\":[{\"access\":\"allow\",\"acl\":\"aclmatch_destinations_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_destinations_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentmatch_destinations_acl\",\"key\":\"keymatch_destinations_acl\",\"name\":\"namematch_destinations_acl\",\"protocol_name\":\"protocolnamematch_destinations_acl\",\"secret\":\"secretmatch_destinations_acl\"}}],\"match_recursive_only\":true,\"max_cache_ttl\":90,\"max_negative_ttl\":500,\"max_udp_size\":890,\"minimal_responses\":true,\"name\":\"string\",\"notify\":true,\"query_acl\":[{\"access\":\"accessquery_acl\",\"acl\":\"aclquery_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementquery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolnamequery_acl\",\"secret\":\"secretquery_acl\"}}],\"recursion_acl\":[{\"access\":\"allow\",\"acl\":\"aclrecursion_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}],\"recursion_enabled\":true,\"synthesize_address_records_from_https\":false,\"tags\":{\"message\":\"Hello\"},\"transfer_acl\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}],\"update_acl\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}],\"updated_at\":\"2022-07-15T06:55:25.978Z\",\"use_forwarders_for_subzones\":true,\"zone_authority\":{\"default_ttl\":20,\"expire\":10,\"mname\":\"mnamezone_authority\",\"negative_ttl\":30,\"protocol_mname\":\"protocolmnamezone_authority\",\"protocol_rname\":\"protocolrnamezone_authority\",\"refresh\":50,\"retry\":100,\"rname\":\"string\",\"use_default_mname\":true}}", "type": [ @@ -314,12 +314,12 @@ "tsig_key": { "algorithm": "hmac_sha256", "comment": "commentquery_acl", + "key": "keyquery_acl", "name": "namequery_acl", "protocol": { "name": "protocolname_query_acl" }, - "secret": "secretquery_acl", - "value": "keyquery_acl" + "secret": "secretquery_acl" } } ] @@ -339,12 +339,12 @@ "tsig_key": { "algorithm": "hmac_sha384", "comment": "commentrecursion_acl", + "key": "keyrecursion_acl", "name": "namerecursion_acl", "protocol": { "name": "protocolnamerecursion_acl" }, - "secret": "secretrecursion_acl", - "value": "keyrecursion_acl" + "secret": "secretrecursion_acl" } } ] @@ -382,12 +382,12 @@ "tsig_key": { "algorithm": "hmac_sha224", "comment": "commenttransfer_acl", + "key": "keytransfer_acl", "name": "nametransfer_acl", "protocol": { "name": "protocolnametransfer_acl" }, - "secret": "secrettransfer_acl", - "value": "keytransfer_acl" + "secret": "secrettransfer_acl" } } ] @@ -407,12 +407,12 @@ "tsig_key": { "algorithm": "hmac_sha384", "comment": "commentupdate_acl", + "key": "keyupdate_acl", "name": "nameupdate_acl", "protocol": { "name": "protocolnameupdate_acl" }, - "secret": "secretupdate_acl", - "value": "keyupdate_acl" + "secret": "secretupdate_acl" } } ] @@ -511,12 +511,12 @@ "tsig_key": { "algorithm": "hmac_sha512", "comment": "commentmatch_clients_acl", + "key": "keymatch_clients_acl", "name": "namematch_clients_acl", "protocol": { "name": "protocolnamematch_clients_acl" }, - "secret": "secretmatch_clients_acl", - "value": "keymatch_clients_acl" + "secret": "secretmatch_clients_acl" }, "value": "aclmatch_clients_acl" } @@ -529,12 +529,12 @@ "tsig_key": { "algorithm": "hmac_sha384", "comment": "commentmatch_destinations_acl", + "key": "keymatch_destinations_acl", "name": "namematch_destinations_acl", "protocol": { "name": "protocolnamematch_destinations_acl" }, - "secret": "secretmatch_destinations_acl", - "value": "keymatch_destinations_acl" + "secret": "secretmatch_destinations_acl" }, "value": "aclmatch_destinations_acl" } @@ -554,12 +554,12 @@ "tsig_key": { "algorithm": "hmac_sha224", "comment": "commentquery_acl", + "key": "keyquery_acl", "name": "namequery_acl", "protocol": { "name": "protocolnamequery_acl" }, - "secret": "secretquery_acl", - "value": "keyquery_acl" + "secret": "secretquery_acl" }, "value": "aclquery_acl" } @@ -572,12 +572,12 @@ "tsig_key": { "algorithm": "hmac_sha1", "comment": "commentrecursion_acl", + "key": "keyrecursion_acl", "name": "namerecursion_acl", "protocol": { "name": "protocolnamerecursion_acl" }, - "secret": "secretrecursion_acl", - "value": "keyrecursion_acl" + "secret": "secretrecursion_acl" }, "value": "aclrecursion_acl" } @@ -597,12 +597,12 @@ "tsig_key": { "algorithm": "hmac_sha224", "comment": "commenttransfer_acl", + "key": "keytransfer_acl", "name": "nametransfer_acl", "protocol": { "name": "protocolnametransfer_acl" }, - "secret": "secrettransfer_acl", - "value": "keytransfer_acl" + "secret": "secrettransfer_acl" }, "value": "acltransfer_acl" } @@ -615,12 +615,12 @@ "tsig_key": { "algorithm": "hmac_sha1", "comment": "commentupdate_acl", + "key": "keyupdate_acl", "name": "nameupdate_acl", "protocol": { "name": "protocolnameupdate_acl" }, - "secret": "secretupdate_acl", - "value": "keyupdate_acl" + "secret": "secretupdate_acl" }, "value": "aclupdate_acl" } diff --git a/packages/infoblox_bloxone_ddi/data_stream/dns_data/manifest.yml b/packages/infoblox_bloxone_ddi/data_stream/dns_data/manifest.yml index 8252efc183..49b5d9f6a1 100644 --- a/packages/infoblox_bloxone_ddi/data_stream/dns_data/manifest.yml +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_data/manifest.yml @@ -53,6 +53,5 @@ streams: multi: false required: false show_user: false - description: > + 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/infoblox_bloxone_ddi/data_stream/dns_data/sample_event.json b/packages/infoblox_bloxone_ddi/data_stream/dns_data/sample_event.json index 4174a29a74..9c800807b8 100644 --- a/packages/infoblox_bloxone_ddi/data_stream/dns_data/sample_event.json +++ b/packages/infoblox_bloxone_ddi/data_stream/dns_data/sample_event.json @@ -1,9 +1,9 @@ { "@timestamp": "2022-07-20T09:59:59.184Z", "agent": { - "ephemeral_id": "4abbe17d-42d0-49cb-aca5-f10c2364ddc4", + "ephemeral_id": "eb4c7711-a048-4458-a48c-5d2045f2d6b1", "hostname": "docker-fleet-agent", - "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", + "id": "40a09f39-a5b9-4b21-8605-6f6e9cd36138", "name": "docker-fleet-agent", "type": "filebeat", "version": "7.17.0" @@ -22,7 +22,7 @@ "version": "8.4.0" }, "elastic_agent": { - "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", + "id": "40a09f39-a5b9-4b21-8605-6f6e9cd36138", "snapshot": false, "version": "7.17.0" }, @@ -34,7 +34,7 @@ "created": "2022-07-20T09:59:59.184Z", "dataset": "infoblox_bloxone_ddi.dns_data", "id": "ghr123ghf", - "ingested": "2022-09-21T12:24:14Z", + "ingested": "2022-09-22T08:29:03Z", "kind": "event", "original": "{\"absolute_name_spec\":\"DNS Data Absolute Name\",\"absolute_zone_name\":\"DNS Data Absolute Zone Name\",\"comment\":\"DNS Data Comment\",\"created_at\":\"2022-07-20T09:59:59.184Z\",\"delegation\":\"DNS Data Delegation\",\"disabled\":true,\"dns_absolute_name_spec\":\"DNS Absolute Name\",\"dns_absolute_zone_name\":\"DNS Absolute Zone Name\",\"dns_name_in_zone\":\"DNS Name in Zone\",\"dns_rdata\":\"DNS RData\",\"id\":\"ghr123ghf\",\"inheritance_sources\":{\"ttl\":{\"action\":\"DNS Data Action\",\"display_name\":\"DNS Display Name\",\"source\":\"DNS Data Source\",\"value\":10}},\"name_in_zone\":\"DNS Data Name in zone\",\"options\":{\"address\":\"67.43.156.0\",\"check_rmz\":true,\"create_ptr\":false},\"rdata\":{\"address\":\"81.2.69.192\",\"cname\":\"DNS Data Canonical Name\",\"dhcid\":\"122zbczba12\",\"dname\":\"DNS Data dname\",\"exchange\":\"DNS Data Exchange\",\"expire\":23131,\"flags\":\"DNS Data Flags\",\"length_kind\":8,\"mname\":\"DNS Data mname\",\"negative_ttl\":213342,\"order\":123124,\"port\":80,\"preference\":12345363467,\"priority\":44,\"refresh\":10800,\"regexp\":\"none\",\"replacement\":\"DNS Data Replacement\",\"retry\":3600,\"rname\":\"DNS Data rname\",\"serial\":12314114,\"services\":\"DNS Data Test Services\",\"tag\":\"issue\",\"target\":\"DNS Data Target\",\"text\":\"DNS Data text field\",\"type\":\"32BIT\",\"value\":\"DNS Data Value\",\"weight\":0},\"source\":[\"STATIC\"],\"tags\":{\"message\":\"Hello\"},\"ttl\":0,\"type\":\"DNS Data Type\",\"updated_at\":\"2022-07-20T09:59:59.184Z\",\"view\":\"DNS Data View\",\"view_name\":\"DNS Data View Name\",\"zone\":\"DNS Data Zone\"}", "type": [ diff --git a/packages/infoblox_bloxone_ddi/docs/README.md b/packages/infoblox_bloxone_ddi/docs/README.md index 8f65ab5ae5..ae21bac5ce 100644 --- a/packages/infoblox_bloxone_ddi/docs/README.md +++ b/packages/infoblox_bloxone_ddi/docs/README.md @@ -57,9 +57,9 @@ An example event for `dhcp_lease` looks as following: { "@timestamp": "2022-07-11T11:51:15.417Z", "agent": { - "ephemeral_id": "fcbbacc1-cc56-4655-ace0-3ab9860b392b", + "ephemeral_id": "a4b27e2a-c005-43ce-9542-7548dcc7b414", "hostname": "docker-fleet-agent", - "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", + "id": "40a09f39-a5b9-4b21-8605-6f6e9cd36138", "name": "docker-fleet-agent", "type": "filebeat", "version": "7.17.0" @@ -78,7 +78,7 @@ An example event for `dhcp_lease` looks as following: "version": "8.4.0" }, "elastic_agent": { - "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", + "id": "40a09f39-a5b9-4b21-8605-6f6e9cd36138", "snapshot": false, "version": "7.17.0" }, @@ -87,10 +87,10 @@ An example event for `dhcp_lease` looks as following: "category": [ "network" ], - "created": "2022-09-21T12:22:53.498Z", + "created": "2022-09-22T08:27:40.118Z", "dataset": "infoblox_bloxone_ddi.dhcp_lease", "end": "2022-07-11T11:51:15.417Z", - "ingested": "2022-09-21T12:22:57Z", + "ingested": "2022-09-22T08:27:43Z", "kind": "event", "original": "{\"address\":\"81.2.69.192\",\"client_id\":\"abc3212abc\",\"ends\":\"2022-07-11T11:51:15.417Z\",\"fingerprint\":\"ab3213cbabab/abc23bca\",\"fingerprint_processed\":\"12abca32bca32abcd\",\"ha_group\":\"abc321cdcbda321\",\"hardware\":\"00:00:5E:00:53:00\",\"host\":\"admin\",\"hostname\":\"Host1\",\"iaid\":0,\"last_updated\":\"2022-07-11T11:51:15.417Z\",\"options\":{\"message\":\"Hello\"},\"preferred_lifetime\":\"2022-07-11T11:51:15.417Z\",\"protocol\":\"ip4\",\"space\":\"DHCP lease Space\",\"starts\":\"2022-07-14T11:51:15.417Z\",\"state\":\"used\",\"type\":\"DHCP lease Type\"}", "start": "2022-07-14T11:51:15.417Z", @@ -239,9 +239,9 @@ An example event for `dns_config` looks as following: { "@timestamp": "2022-07-15T06:55:25.978Z", "agent": { - "ephemeral_id": "81dd62b7-0768-4bb1-aaf4-9957a83f141e", + "ephemeral_id": "72747b3e-5f2e-4261-a994-aff0ac9b5be1", "hostname": "docker-fleet-agent", - "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", + "id": "40a09f39-a5b9-4b21-8605-6f6e9cd36138", "name": "docker-fleet-agent", "type": "filebeat", "version": "7.17.0" @@ -260,7 +260,7 @@ An example event for `dns_config` looks as following: "version": "8.4.0" }, "elastic_agent": { - "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", + "id": "40a09f39-a5b9-4b21-8605-6f6e9cd36138", "snapshot": false, "version": "7.17.0" }, @@ -272,7 +272,7 @@ An example event for `dns_config` looks as following: "created": "2022-07-15T06:55:25.978Z", "dataset": "infoblox_bloxone_ddi.dns_config", "id": "adv12rgfh", - "ingested": "2022-09-21T12:23:36Z", + "ingested": "2022-09-22T08:28:25Z", "kind": "event", "original": "{\"add_edns_option_in_outgoing_query\":true,\"comment\":\"DNS Config Comment\",\"created_at\":\"2022-07-15T06:55:25.978Z\",\"custom_root_ns\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"custom fqdn\",\"protocol_fqdn\":\"custom protocol fqdn\"}],\"custom_root_ns_enabled\":true,\"disabled\":true,\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_root_keys\":[{\"algorithm\":30,\"protocol_zone\":\"Dnssec root protocol zone\",\"public_key\":\"Dnssec root Public Key\",\"sep\":true,\"zone\":\"Dnssec root Zone\"}],\"dnssec_trust_anchors\":[{\"algorithm\":10,\"protocol_zone\":\"Dnssec trust protocol zone\",\"public_key\":\"Dnssec trust Public Key\",\"sep\":true,\"zone\":\"Dnssec trust zone\"}],\"dnssec_validate_expiry\":true,\"ecs_enabled\":true,\"ecs_forwarding\":true,\"ecs_prefix_v4\":22,\"ecs_prefix_v6\":33,\"ecs_zones\":[{\"access\":\"ecs zones access\",\"fqdn\":\"ecs zones fqdn\",\"protocol_fqdn\":\"ecs zones protocol fqdn\"}],\"edns_udp_size\":568,\"forwarders\":[{\"address\":\"81.2.69.192\",\"fqdn\":\"forwarders fqdn\",\"protocol_fqdn\":\"forwarders protocol fqdn\"}],\"forwarders_only\":true,\"gss_tsig_enabled\":true,\"id\":\"adv12rgfh\",\"inheritance_sources\":{\"add_edns_option_in_outgoing_query\":{\"action\":\"inherit\",\"display_name\":\"displaynameadd_edns_option_in_outgoing_query\",\"source\":\"sourceadd_edns_option_in_outgoing_query\",\"value\":true},\"custom_root_ns_block\":{\"action\":\"override\",\"display_name\":\"displaynamecustom_root_ns_block\",\"source\":\"sourcecustom_root_ns_block\",\"value\":{\"custom_root_ns\":[{\"address\":\"67.43.156.0\",\"fqdn\":\"fqdn_custom_root_ns\",\"protocol_fqdn\":\"protocolfqdn_custom_root_ns\"}],\"custom_root_ns_enabled\":true}},\"dnssec_validation_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamednssec_validation_block\",\"source\":\"sourcednssec_validation_block\",\"value\":{\"dnssec_enable_validation\":true,\"dnssec_enabled\":true,\"dnssec_trust_anchors\":[{\"algorithm\":8,\"protocol_zone\":\"protocolzonednssec_trust_anchors\",\"public_key\":\"publickeydnssec_trust_anchors\",\"sep\":false,\"zone\":\"is3zone\"}],\"dnssec_validate_expiry\":true}},\"ecs_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameecs_block\",\"source\":\"sourceecs_block\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":10,\"ecs_zones\":[{\"access\":\"inherit\",\"fqdn\":\"fqdnecs_block\",\"protocol_fqdn\":\"protocol_fqdnecs_block\"}]}},\"ecs_zones\":{\"action\":\"override\",\"display_name\":\"displaynameecs_zones\",\"source\":\"sourceecs_zones\",\"value\":{\"ecs_enabled\":false,\"ecs_forwarding\":true,\"ecs_prefix_v4\":4,\"ecs_prefix_v6\":12,\"ecs_zones\":[{\"access\":\"access_ecs_zones\",\"fqdn\":\"fqdn_ecs_zones\",\"protocol_fqdn\":\"protocolfqdn_ecs_zones\"}]}},\"edns_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynameedns_udp_size\",\"source\":\"sourceedns_udp_size\",\"value\":55},\"forwarders_block\":{\"action\":\"inherit\",\"display_name\":\"displaynameforwarders_block\",\"source\":\"sourceforwarders_block\",\"value\":{\"forwarders\":[{\"address\":\"89.160.20.128\",\"fqdn\":\"forwarders_fqdn\",\"protocol_fqdn\":\"forwarders_protocolfqdn\"}],\"forwarders_only\":true}},\"gss_tsig_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamegss_tsig_enabled\",\"source\":\"sourcegss_tsig_enabled\",\"value\":true},\"lame_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamelame_ttl\",\"source\":\"sourcelame_ttl\",\"value\":45},\"match_recursive_only\":{\"action\":\"inherit\",\"display_name\":\"displaynamematch_recursive_only\",\"source\":\"sourcematch_recursive_only\",\"value\":false},\"max_cache_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_cache_ttl\",\"source\":\"sourcemax_cache_ttl\",\"value\":13},\"max_negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_negative_ttl\",\"source\":\"sourcemax_negative_ttl\",\"value\":12},\"max_udp_size\":{\"action\":\"inherit\",\"display_name\":\"displaynamemax_udp_size\",\"source\":\"sourcemax_udp_size\",\"value\":11},\"minimal_responses\":{\"action\":\"inherit\",\"display_name\":\"displaynameminimal_responses\",\"source\":\"sourceminimal_responses\",\"value\":true},\"notify\":{\"action\":\"inherit\",\"display_name\":\"displayname_notify\",\"source\":\"source_notify\",\"value\":true},\"query_acl\":{\"action\":\"override\",\"display_name\":\"displaynamequery_acl\",\"source\":\"sourcequery_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclvalue_query_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementvaluequery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha256\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolname_query_acl\",\"secret\":\"secretquery_acl\"}}]},\"recursion_acl\":{\"action\":\"override\",\"display_name\":\"displaynamerecursion_acl\",\"source\":\"sourcerecursion_acl\",\"value\":[{\"access\":\"deny\",\"acl\":\"aclrecursion_acl\",\"address\":\"89.160.20.128\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}]},\"recursion_enabled\":{\"action\":\"inherit\",\"display_name\":\"displaynamerecursion_enabled\",\"source\":\"sourcerecursion_enabled\",\"value\":true},\"synthesize_address_records_from_https\":{\"action\":\"inherit\",\"display_name\":\"displaynamesynthesize_address_records_from_https\",\"source\":\"sourcesynthesize_address_records_from_https\",\"value\":true},\"transfer_acl\":{\"action\":\"inherit\",\"display_name\":\"displaynametransfer_acl\",\"source\":\"sourcetransfer_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}]},\"update_acl\":{\"action\":\"override\",\"display_name\":\"displaynameupdate_acl\",\"source\":\"sourceupdate_acl\",\"value\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}]},\"use_forwarders_for_subzones\":{\"action\":\"override\",\"display_name\":\"displaynameuse_forwarders_for_subzones\",\"source\":\"sourceuse_forwarders_for_subzones\",\"value\":false},\"zone_authority\":{\"default_ttl\":{\"action\":\"override\",\"display_name\":\"displaynamezone_authority\",\"source\":\"sourcezone_authority\",\"value\":50},\"expire\":{\"action\":\"inherit\",\"display_name\":\"displaynameexpire\",\"source\":\"sourceexpire\",\"value\":70},\"mname_block\":{\"action\":\"inherit\",\"display_name\":\"displaynamemname_block\",\"source\":\"sourcemname_block\",\"value\":{\"mname\":\"mnamevaluemname_block\",\"protocol_mname\":\"protocolmnamemname_block\",\"use_default_mname\":true}},\"negative_ttl\":{\"action\":\"inherit\",\"display_name\":\"displaynamenegative_ttl\",\"source\":\"sourcenegative_ttl\",\"value\":90},\"protocol_rname\":{\"action\":\"inherit\",\"display_name\":\"displaynameprotocol_rname\",\"source\":\"sourceprotocol_rname\",\"value\":\"valueprotocol_rname\"},\"refresh\":{\"action\":\"inherit\",\"display_name\":\"displayname_refresh\",\"source\":\"source_refresh\",\"value\":40},\"retry\":{\"action\":\"inherit\",\"display_name\":\"displayname_retry\",\"source\":\"source_retry\",\"value\":570},\"rname\":{\"action\":\"inherit\",\"display_name\":\"displayname_rname\",\"source\":\"source_rname\",\"value\":\"value_rname\"}}},\"ip_spaces\":[\"testipspaces\"],\"lame_ttl\":350,\"match_clients_acl\":[{\"access\":\"deny\",\"acl\":\"aclmatch_clients_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_clients_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha512\",\"comment\":\"commentmatch_clients_acl\",\"key\":\"keymatch_clients_acl\",\"name\":\"namematch_clients_acl\",\"protocol_name\":\"protocolnamematch_clients_acl\",\"secret\":\"secretmatch_clients_acl\"}}],\"match_destinations_acl\":[{\"access\":\"allow\",\"acl\":\"aclmatch_destinations_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementmatch_destinations_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha384\",\"comment\":\"commentmatch_destinations_acl\",\"key\":\"keymatch_destinations_acl\",\"name\":\"namematch_destinations_acl\",\"protocol_name\":\"protocolnamematch_destinations_acl\",\"secret\":\"secretmatch_destinations_acl\"}}],\"match_recursive_only\":true,\"max_cache_ttl\":90,\"max_negative_ttl\":500,\"max_udp_size\":890,\"minimal_responses\":true,\"name\":\"string\",\"notify\":true,\"query_acl\":[{\"access\":\"accessquery_acl\",\"acl\":\"aclquery_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementquery_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commentquery_acl\",\"key\":\"keyquery_acl\",\"name\":\"namequery_acl\",\"protocol_name\":\"protocolnamequery_acl\",\"secret\":\"secretquery_acl\"}}],\"recursion_acl\":[{\"access\":\"allow\",\"acl\":\"aclrecursion_acl\",\"address\":\"81.2.69.192\",\"element\":\"elementrecursion_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentrecursion_acl\",\"key\":\"keyrecursion_acl\",\"name\":\"namerecursion_acl\",\"protocol_name\":\"protocolnamerecursion_acl\",\"secret\":\"secretrecursion_acl\"}}],\"recursion_enabled\":true,\"synthesize_address_records_from_https\":false,\"tags\":{\"message\":\"Hello\"},\"transfer_acl\":[{\"access\":\"allow\",\"acl\":\"acltransfer_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementtransfer_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha224\",\"comment\":\"commenttransfer_acl\",\"key\":\"keytransfer_acl\",\"name\":\"nametransfer_acl\",\"protocol_name\":\"protocolnametransfer_acl\",\"secret\":\"secrettransfer_acl\"}}],\"update_acl\":[{\"access\":\"allow\",\"acl\":\"aclupdate_acl\",\"address\":\"216.160.83.56\",\"element\":\"elementupdate_acl\",\"tsig_key\":{\"algorithm\":\"hmac_sha1\",\"comment\":\"commentupdate_acl\",\"key\":\"keyupdate_acl\",\"name\":\"nameupdate_acl\",\"protocol_name\":\"protocolnameupdate_acl\",\"secret\":\"secretupdate_acl\"}}],\"updated_at\":\"2022-07-15T06:55:25.978Z\",\"use_forwarders_for_subzones\":true,\"zone_authority\":{\"default_ttl\":20,\"expire\":10,\"mname\":\"mnamezone_authority\",\"negative_ttl\":30,\"protocol_mname\":\"protocolmnamezone_authority\",\"protocol_rname\":\"protocolrnamezone_authority\",\"refresh\":50,\"retry\":100,\"rname\":\"string\",\"use_default_mname\":true}}", "type": [ @@ -552,12 +552,12 @@ An example event for `dns_config` looks as following: "tsig_key": { "algorithm": "hmac_sha256", "comment": "commentquery_acl", + "key": "keyquery_acl", "name": "namequery_acl", "protocol": { "name": "protocolname_query_acl" }, - "secret": "secretquery_acl", - "value": "keyquery_acl" + "secret": "secretquery_acl" } } ] @@ -577,12 +577,12 @@ An example event for `dns_config` looks as following: "tsig_key": { "algorithm": "hmac_sha384", "comment": "commentrecursion_acl", + "key": "keyrecursion_acl", "name": "namerecursion_acl", "protocol": { "name": "protocolnamerecursion_acl" }, - "secret": "secretrecursion_acl", - "value": "keyrecursion_acl" + "secret": "secretrecursion_acl" } } ] @@ -620,12 +620,12 @@ An example event for `dns_config` looks as following: "tsig_key": { "algorithm": "hmac_sha224", "comment": "commenttransfer_acl", + "key": "keytransfer_acl", "name": "nametransfer_acl", "protocol": { "name": "protocolnametransfer_acl" }, - "secret": "secrettransfer_acl", - "value": "keytransfer_acl" + "secret": "secrettransfer_acl" } } ] @@ -645,12 +645,12 @@ An example event for `dns_config` looks as following: "tsig_key": { "algorithm": "hmac_sha384", "comment": "commentupdate_acl", + "key": "keyupdate_acl", "name": "nameupdate_acl", "protocol": { "name": "protocolnameupdate_acl" }, - "secret": "secretupdate_acl", - "value": "keyupdate_acl" + "secret": "secretupdate_acl" } } ] @@ -749,12 +749,12 @@ An example event for `dns_config` looks as following: "tsig_key": { "algorithm": "hmac_sha512", "comment": "commentmatch_clients_acl", + "key": "keymatch_clients_acl", "name": "namematch_clients_acl", "protocol": { "name": "protocolnamematch_clients_acl" }, - "secret": "secretmatch_clients_acl", - "value": "keymatch_clients_acl" + "secret": "secretmatch_clients_acl" }, "value": "aclmatch_clients_acl" } @@ -767,12 +767,12 @@ An example event for `dns_config` looks as following: "tsig_key": { "algorithm": "hmac_sha384", "comment": "commentmatch_destinations_acl", + "key": "keymatch_destinations_acl", "name": "namematch_destinations_acl", "protocol": { "name": "protocolnamematch_destinations_acl" }, - "secret": "secretmatch_destinations_acl", - "value": "keymatch_destinations_acl" + "secret": "secretmatch_destinations_acl" }, "value": "aclmatch_destinations_acl" } @@ -792,12 +792,12 @@ An example event for `dns_config` looks as following: "tsig_key": { "algorithm": "hmac_sha224", "comment": "commentquery_acl", + "key": "keyquery_acl", "name": "namequery_acl", "protocol": { "name": "protocolnamequery_acl" }, - "secret": "secretquery_acl", - "value": "keyquery_acl" + "secret": "secretquery_acl" }, "value": "aclquery_acl" } @@ -810,12 +810,12 @@ An example event for `dns_config` looks as following: "tsig_key": { "algorithm": "hmac_sha1", "comment": "commentrecursion_acl", + "key": "keyrecursion_acl", "name": "namerecursion_acl", "protocol": { "name": "protocolnamerecursion_acl" }, - "secret": "secretrecursion_acl", - "value": "keyrecursion_acl" + "secret": "secretrecursion_acl" }, "value": "aclrecursion_acl" } @@ -835,12 +835,12 @@ An example event for `dns_config` looks as following: "tsig_key": { "algorithm": "hmac_sha224", "comment": "commenttransfer_acl", + "key": "keytransfer_acl", "name": "nametransfer_acl", "protocol": { "name": "protocolnametransfer_acl" }, - "secret": "secrettransfer_acl", - "value": "keytransfer_acl" + "secret": "secrettransfer_acl" }, "value": "acltransfer_acl" } @@ -853,12 +853,12 @@ An example event for `dns_config` looks as following: "tsig_key": { "algorithm": "hmac_sha1", "comment": "commentupdate_acl", + "key": "keyupdate_acl", "name": "nameupdate_acl", "protocol": { "name": "protocolnameupdate_acl" }, - "secret": "secretupdate_acl", - "value": "keyupdate_acl" + "secret": "secretupdate_acl" }, "value": "aclupdate_acl" } @@ -1075,10 +1075,10 @@ An example event for `dns_config` looks as following: | infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.element | Type of element. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.algorithm | TSIG key algorithm. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.key | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.name | TSIG key name, FQDN. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.protocol.name | TSIG key name in punycode. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.secret | TSIG key secret, base64 string. | keyword | -| infoblox_bloxone_ddi.dns_config.inheritance.sources.query_acl.value.tsig_key.value | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.action | The inheritance setting for a field. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.display.name | The human-readable display name for the object referred to by source. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.source | The resource identifier. | keyword | @@ -1088,10 +1088,10 @@ An example event for `dns_config` looks as following: | infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.element | Type of element. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.algorithm | TSIG key algorithm. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.key | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.name | TSIG key name, FQDN. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.protocol.name | TSIG key name in punycode. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.secret | TSIG key secret, base64 string. | keyword | -| infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_acl.value.tsig_key.value | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.action | The inheritance setting for a field. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.display.name | The human-readable display name for the object referred to by source. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.recursion_enabled.source | The resource identifier. | keyword | @@ -1109,10 +1109,10 @@ An example event for `dns_config` looks as following: | infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.element | Type of element. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.algorithm | TSIG key algorithm. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.key | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.name | TSIG key name, FQDN. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.protocol.name | TSIG key name in punycode. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.secret | TSIG key secret, base64 string. | keyword | -| infoblox_bloxone_ddi.dns_config.inheritance.sources.transfer_acl.value.tsig_key.value | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.action | The inheritance setting for a field. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.display.name | The human-readable display name for the object referred to by source. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.source | The resource identifier. | keyword | @@ -1122,10 +1122,10 @@ An example event for `dns_config` looks as following: | infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.element | Type of element. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.algorithm | TSIG key algorithm. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.key | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.name | TSIG key name, FQDN. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.protocol.name | TSIG key name in punycode. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.secret | TSIG key secret, base64 string. | keyword | -| infoblox_bloxone_ddi.dns_config.inheritance.sources.update_acl.value.tsig_key.value | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.action | The inheritance setting for a field. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.display.name | The human-readable display name for the object referred to by source. | keyword | | infoblox_bloxone_ddi.dns_config.inheritance.sources.use_forwarders_for_subzones.source | The resource identifier. | keyword | @@ -1171,20 +1171,20 @@ An example event for `dns_config` looks as following: | infoblox_bloxone_ddi.dns_config.match_clients_acl.element | Type of element. | keyword | | infoblox_bloxone_ddi.dns_config.match_clients_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | | infoblox_bloxone_ddi.dns_config.match_clients_acl.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.match_clients_acl.tsig_key.key | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.match_clients_acl.tsig_key.name | TSIG key name, FQDN. | keyword | | infoblox_bloxone_ddi.dns_config.match_clients_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | | infoblox_bloxone_ddi.dns_config.match_clients_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | -| infoblox_bloxone_ddi.dns_config.match_clients_acl.tsig_key.value | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.match_clients_acl.value | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.match_destinations_acl.access | Access permission for element. | keyword | | infoblox_bloxone_ddi.dns_config.match_destinations_acl.address | Optional. Data for ip element. | ip | | infoblox_bloxone_ddi.dns_config.match_destinations_acl.element | Type of element. | keyword | | infoblox_bloxone_ddi.dns_config.match_destinations_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | | infoblox_bloxone_ddi.dns_config.match_destinations_acl.tsig_key.comment | Comment for TSIG key. | keyword | -| infoblox_bloxone_ddi.dns_config.match_destinations_acl.tsig_key.name | The resource identifier. | keyword | -| infoblox_bloxone_ddi.dns_config.match_destinations_acl.tsig_key.protocol.name | TSIG key name, FQDN. | keyword | -| infoblox_bloxone_ddi.dns_config.match_destinations_acl.tsig_key.secret | TSIG key name in punycode. | keyword | -| infoblox_bloxone_ddi.dns_config.match_destinations_acl.tsig_key.value | TSIG key secret, base64 string. | keyword | +| infoblox_bloxone_ddi.dns_config.match_destinations_acl.tsig_key.key | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.match_destinations_acl.tsig_key.name | TSIG key name, FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.match_destinations_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.match_destinations_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | | infoblox_bloxone_ddi.dns_config.match_destinations_acl.value | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.match_recursive_only | Optional. If true only recursive queries from matching clients access the view. | boolean | | infoblox_bloxone_ddi.dns_config.max_cache_ttl | Optional. Seconds to cache positive responses. | long | @@ -1198,20 +1198,20 @@ An example event for `dns_config` looks as following: | infoblox_bloxone_ddi.dns_config.query_acl.element | Type of element. | keyword | | infoblox_bloxone_ddi.dns_config.query_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | | infoblox_bloxone_ddi.dns_config.query_acl.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.query_acl.tsig_key.key | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.query_acl.tsig_key.name | TSIG key name, FQDN. | keyword | | infoblox_bloxone_ddi.dns_config.query_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | | infoblox_bloxone_ddi.dns_config.query_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | -| infoblox_bloxone_ddi.dns_config.query_acl.tsig_key.value | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.query_acl.value | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.recursion_acl.access | Access permission for element. | keyword | | infoblox_bloxone_ddi.dns_config.recursion_acl.address | Optional. Data for ip element. | ip | | infoblox_bloxone_ddi.dns_config.recursion_acl.element | Type of element. | keyword | | infoblox_bloxone_ddi.dns_config.recursion_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | | infoblox_bloxone_ddi.dns_config.recursion_acl.tsig_key.comment | Comment for TSIG key. | keyword | -| infoblox_bloxone_ddi.dns_config.recursion_acl.tsig_key.name | The resource identifier. | keyword | -| infoblox_bloxone_ddi.dns_config.recursion_acl.tsig_key.protocol.name | TSIG key name, FQDN. | keyword | -| infoblox_bloxone_ddi.dns_config.recursion_acl.tsig_key.secret | TSIG key name in punycode. | keyword | -| infoblox_bloxone_ddi.dns_config.recursion_acl.tsig_key.value | TSIG key secret, base64 string. | keyword | +| infoblox_bloxone_ddi.dns_config.recursion_acl.tsig_key.key | The resource identifier. | keyword | +| infoblox_bloxone_ddi.dns_config.recursion_acl.tsig_key.name | TSIG key name, FQDN. | keyword | +| infoblox_bloxone_ddi.dns_config.recursion_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | +| infoblox_bloxone_ddi.dns_config.recursion_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | | infoblox_bloxone_ddi.dns_config.recursion_acl.value | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.recursion_enabled | Optional. true to allow recursive DNS queries. | boolean | | infoblox_bloxone_ddi.dns_config.synthesize.address_records_from_https | synthesize_address_records_from_https enables/disables creation of A/AAAA records from HTTPS RR. | boolean | @@ -1221,20 +1221,20 @@ An example event for `dns_config` looks as following: | infoblox_bloxone_ddi.dns_config.transfer_acl.element | Type of element. | keyword | | infoblox_bloxone_ddi.dns_config.transfer_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | | infoblox_bloxone_ddi.dns_config.transfer_acl.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.transfer_acl.tsig_key.key | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.transfer_acl.tsig_key.name | TSIG key name, FQDN. | keyword | | infoblox_bloxone_ddi.dns_config.transfer_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | | infoblox_bloxone_ddi.dns_config.transfer_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | -| infoblox_bloxone_ddi.dns_config.transfer_acl.tsig_key.value | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.transfer_acl.value | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.update_acl.access | Access permission for element. | keyword | | infoblox_bloxone_ddi.dns_config.update_acl.address | Optional. Data for ip element. | ip | | infoblox_bloxone_ddi.dns_config.update_acl.element | Type of element. | keyword | | infoblox_bloxone_ddi.dns_config.update_acl.tsig_key.algorithm | TSIG key algorithm. | keyword | | infoblox_bloxone_ddi.dns_config.update_acl.tsig_key.comment | Comment for TSIG key. | keyword | +| infoblox_bloxone_ddi.dns_config.update_acl.tsig_key.key | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.update_acl.tsig_key.name | TSIG key name, FQDN. | keyword | | infoblox_bloxone_ddi.dns_config.update_acl.tsig_key.protocol.name | TSIG key name in punycode. | keyword | | infoblox_bloxone_ddi.dns_config.update_acl.tsig_key.secret | TSIG key secret, base64 string. | keyword | -| infoblox_bloxone_ddi.dns_config.update_acl.tsig_key.value | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.update_acl.value | The resource identifier. | keyword | | infoblox_bloxone_ddi.dns_config.updated_at | The timestamp when the object has been updated. Equals to created_at if not updated after creation. | date | | infoblox_bloxone_ddi.dns_config.use_forwarders_for_subzones | Optional. Use default forwarders to resolve queries for subzones. | boolean | @@ -1267,9 +1267,9 @@ An example event for `dns_data` looks as following: { "@timestamp": "2022-07-20T09:59:59.184Z", "agent": { - "ephemeral_id": "4abbe17d-42d0-49cb-aca5-f10c2364ddc4", + "ephemeral_id": "eb4c7711-a048-4458-a48c-5d2045f2d6b1", "hostname": "docker-fleet-agent", - "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", + "id": "40a09f39-a5b9-4b21-8605-6f6e9cd36138", "name": "docker-fleet-agent", "type": "filebeat", "version": "7.17.0" @@ -1288,7 +1288,7 @@ An example event for `dns_data` looks as following: "version": "8.4.0" }, "elastic_agent": { - "id": "d4dc2c5b-8e71-48d1-978a-a2493b68c52d", + "id": "40a09f39-a5b9-4b21-8605-6f6e9cd36138", "snapshot": false, "version": "7.17.0" }, @@ -1300,7 +1300,7 @@ An example event for `dns_data` looks as following: "created": "2022-07-20T09:59:59.184Z", "dataset": "infoblox_bloxone_ddi.dns_data", "id": "ghr123ghf", - "ingested": "2022-09-21T12:24:14Z", + "ingested": "2022-09-22T08:29:03Z", "kind": "event", "original": "{\"absolute_name_spec\":\"DNS Data Absolute Name\",\"absolute_zone_name\":\"DNS Data Absolute Zone Name\",\"comment\":\"DNS Data Comment\",\"created_at\":\"2022-07-20T09:59:59.184Z\",\"delegation\":\"DNS Data Delegation\",\"disabled\":true,\"dns_absolute_name_spec\":\"DNS Absolute Name\",\"dns_absolute_zone_name\":\"DNS Absolute Zone Name\",\"dns_name_in_zone\":\"DNS Name in Zone\",\"dns_rdata\":\"DNS RData\",\"id\":\"ghr123ghf\",\"inheritance_sources\":{\"ttl\":{\"action\":\"DNS Data Action\",\"display_name\":\"DNS Display Name\",\"source\":\"DNS Data Source\",\"value\":10}},\"name_in_zone\":\"DNS Data Name in zone\",\"options\":{\"address\":\"67.43.156.0\",\"check_rmz\":true,\"create_ptr\":false},\"rdata\":{\"address\":\"81.2.69.192\",\"cname\":\"DNS Data Canonical Name\",\"dhcid\":\"122zbczba12\",\"dname\":\"DNS Data dname\",\"exchange\":\"DNS Data Exchange\",\"expire\":23131,\"flags\":\"DNS Data Flags\",\"length_kind\":8,\"mname\":\"DNS Data mname\",\"negative_ttl\":213342,\"order\":123124,\"port\":80,\"preference\":12345363467,\"priority\":44,\"refresh\":10800,\"regexp\":\"none\",\"replacement\":\"DNS Data Replacement\",\"retry\":3600,\"rname\":\"DNS Data rname\",\"serial\":12314114,\"services\":\"DNS Data Test Services\",\"tag\":\"issue\",\"target\":\"DNS Data Target\",\"text\":\"DNS Data text field\",\"type\":\"32BIT\",\"value\":\"DNS Data Value\",\"weight\":0},\"source\":[\"STATIC\"],\"tags\":{\"message\":\"Hello\"},\"ttl\":0,\"type\":\"DNS Data Type\",\"updated_at\":\"2022-07-20T09:59:59.184Z\",\"view\":\"DNS Data View\",\"view_name\":\"DNS Data View Name\",\"zone\":\"DNS Data Zone\"}", "type": [