packages/beyondtrust_pra/data_stream/access_session/agent/stream/input.yml.hbs (393 lines of code) (raw):
config_version: 2
interval: {{interval}}
resource.tracer:
enabled: {{enable_request_tracer}}
filename: "../../logs/cel/http-request-trace-*.ndjson"
maxbackups: 5
{{#if proxy_url}}
resource.proxy_url: {{proxy_url}}
{{/if}}
{{#if ssl}}
resource.ssl: {{ssl}}
{{/if}}
{{#if http_client_timeout}}
resource.timeout: {{http_client_timeout}}
{{/if}}
resource.url: {{url}}
auth.oauth2:
client.id: {{client_id}}
client.secret: {{client_secret}}
token_url: {{url}}/oauth2/token
state:
initial_interval: {{initial_interval}}
redact:
fields: ~
program: |
state.with(
{
"start_time": state.?cursor.last_timestamp.orValue((now - duration(state.initial_interval)).format(time_layout.RFC3339)),
"request_initiated_time": now.format(time_layout.RFC3339),
}.as(filter,
// to perform request to get sessions list
request(
"GET",
state.url.trim_right("/") + "/api/reporting?" + {
"generate_report": ["AccessSession"],
"start_time": [string(filter.start_time)],
"duration": ["0"],
}.format_query()
).do_request().as(resp, (resp.StatusCode == 200) ?
resp.Body.decode_xml("access_session_schema").as(body,
has(body.doc.session_list.error) ?
{
"events": {
"error": {
"message": string(body.doc.session_list.error),
},
},
"want_more": false,
}
: has(body.doc.session_list.session) ?
{
"events": body.doc.session_list.session.map(j,
j.session_details.event.map(e,
{
"message": e.with(
{
"session": j.drop(["rep_list", "customer_list", "session_details"]),
?"performed_by": optional.of(
e.performed_by.with(
(e.performed_by.type == "representative") ?
j.rep_list.representative.filter(reps, reps.gsnumber == e.performed_by.gsnumber).as(rep_arr, rep_arr[?0].orValue({}))
:
j.customer_list.customer.filter(reps, reps.gsnumber == e.performed_by.gsnumber).as(rep_arr, rep_arr[?0].orValue({}))
)
),
"destination": has(e.destination) ?
e.destination.with(
(e.destination.type == "representative") ?
j.rep_list.representative.filter(reps, reps.gsnumber == e.destination.gsnumber).as(rep_arr, rep_arr[?0].orValue({}))
:
j.customer_list.customer.filter(reps, reps.gsnumber == e.destination.gsnumber).as(rep_arr, rep_arr[?0].orValue({}))
)
:
j.customer_list.customer[0],
}
).encode_json(),
}
)
).flatten(),
"cursor": {
?"last_timestamp": (has(body.doc.session_list.session) && body.doc.session_list.session.size() > 0) ?
optional.of(filter.request_initiated_time)
:
state.?cursor.last_timestamp,
},
"want_more": false,
}
:
{
"events": [],
"want_more": false,
}
)
:
{
"events": {
"error": {
"code": string(resp.StatusCode),
"id": string(resp.Status),
"message": "GET " + state.url.trim_right("/") + "/api/reporting: " +
(
(size(resp.Body) != 0) ?
string(resp.Body)
:
string(resp.Status) + " (" + string(resp.StatusCode) + ")"
),
},
},
"want_more": false,
}
)
)
)
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}}
xsd:
access_session_schema: |
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="session_list">
<xs:complexType>
<xs:choice>
<xs:element name="error" type="xs:string"/>
<xs:sequence>
<xs:element name="session" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="session_type" type="xs:string" />
<xs:element name="lseq" type="xs:string" />
<xs:element name="start_time">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:dateTime">
<xs:attribute name="timestamp" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="end_time">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:dateTime">
<xs:attribute name="timestamp" type="xs:date" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="duration" type="xs:time" />
<xs:element name="jump_group">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" type="xs:string" use="required" />
<xs:attribute name="id" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="jumpoint">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="custom_attributes">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="custom_attribute">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="display_name" type="xs:string" use="required" />
<xs:attribute name="code_name" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="session_chat_view_url" type="xs:string" />
<xs:element name="session_chat_download_url" type="xs:string" />
<xs:element name="session_recording_view_url" type="xs:string" />
<xs:element name="session_recording_download_url" type="xs:string" />
<xs:element name="command_shell_recordings">
<xs:complexType>
<xs:sequence>
<xs:element name="command_shell_recording" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="download_url" type="xs:string" />
<xs:element name="view_url" type="xs:string" />
</xs:sequence>
<xs:attribute name="instance" type="xs:unsignedByte" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="file_transfer_count" type="xs:unsignedByte" />
<xs:element name="file_move_count" type="xs:unsignedByte" />
<xs:element name="file_delete_count" type="xs:unsignedByte" />
<xs:element name="primary_customer">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="gsnumber" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="primary_rep">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="gsnumber" type="xs:string" use="required" />
<xs:attribute name="id" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="customer_list">
<xs:complexType>
<xs:sequence>
<xs:element name="customer" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="username" type="xs:string" />
<xs:element name="public_ip" type="xs:string" />
<xs:element name="private_ip" type="xs:string" />
<xs:element name="hostname" type="xs:string" />
<xs:element name="os" type="xs:string" />
</xs:sequence>
<xs:attribute name="gsnumber" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="rep_list">
<xs:complexType>
<xs:sequence>
<xs:element name="representative" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="username" type="xs:string" />
<xs:element name="display_name" type="xs:string" />
<xs:element name="public_ip" type="xs:string" />
<xs:element name="private_ip" type="xs:string" />
<xs:element name="hostname" type="xs:string" />
<xs:element name="os" type="xs:string" />
<xs:element name="session_owner" type="xs:unsignedByte" />
<xs:element name="seconds_involved" type="xs:unsignedShort" />
<xs:element name="invited" type="xs:unsignedByte" />
</xs:sequence>
<xs:attribute name="gsnumber" type="xs:string" use="required" />
<xs:attribute name="id" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="session_details">
<xs:complexType>
<xs:sequence>
<xs:element name="event" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="performed_by">
<xs:complexType>
<xs:attribute name="gsnumber" type="xs:string" use="required" />
<xs:attribute name="type" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="destination">
<xs:complexType>
<xs:attribute name="gsnumber" type="xs:string" use="required" />
<xs:attribute name="type" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="body" type="xs:string" />
<xs:element name="encoded_body" type="xs:string" />
<xs:element name="filename" type="xs:string" />
<xs:element name="filesize" type="xs:unsignedByte" />
<xs:element name="files">
<xs:complexType>
<xs:sequence>
<xs:element name="file" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="filename" type="xs:string" />
<xs:element name="filesize" type="xs:unsignedShort" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="system_information">
<xs:complexType>
<xs:sequence>
<xs:element name="category" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="description">
<xs:complexType>
<xs:sequence>
<xs:element name="field" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="data">
<xs:complexType>
<xs:sequence>
<xs:element name="row" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="field" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="data">
<xs:complexType>
<xs:sequence>
<xs:element name="value" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="value" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="timestamp" type="xs:dateTime" use="required" />
<xs:attribute name="event_type" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>