1"use strict";(self.webpackChunkmia_platform_docs=self.webpackChunkmia_platform_docs||[]).push([["12787"],{50800(e,n,r){r.r(n),r.d(n,{metadata:()=>s,default:()=>h,frontMatter:()=>i,contentTitle:()=>c,toc:()=>l,assets:()=>d});var s=JSON.parse('{"id":"runtime-components/plugins/integration-connector-agent/processors/cloud_vendor_aggregator","title":"Cloud Vendor Aggregator","description":"The Cloud Vendor Aggregator processor is designed to aggregate events from","source":"@site/versioned_docs/version-15.2.0/runtime-components/plugins/integration-connector-agent/processors/40_cloud_vendor_aggregator.md","sourceDirName":"runtime-components/plugins/integration-connector-agent/processors","slug":"/runtime-components/plugins/integration-connector-agent/processors/cloud_vendor_aggregator","permalink":"/docs/15.2.0/runtime-components/plugins/integration-connector-agent/processors/cloud_vendor_aggregator","draft":false,"unlisted":false,"tags":[],"version":"15.2.0","sidebarPosition":40,"frontMatter":{"id":"cloud_vendor_aggregator","title":"Cloud Vendor Aggregator","sidebar_label":"Cloud vendor aggregator"},"sidebar":"marketplace","previous":{"title":"Rpc plugin","permalink":"/docs/15.2.0/runtime-components/plugins/integration-connector-agent/processors/rpc_plugin"},"next":{"title":"Overview","permalink":"/docs/15.2.0/runtime-components/plugins/integration-connector-agent/sinks/overview"}}'),t=r(474848),o=r(28453);let i={id:"cloud_vendor_aggregator",title:"Cloud Vendor Aggregator",sidebar_label:"Cloud vendor aggregator"},c,d={},l=[{value:"Processor Overview",id:"processor-overview",level:2},{value:"Supported vendor Resources",id:"supported-vendor-resources",level:3},{value:"Google Cloud Platform (GCP)",id:"google-cloud-platform-gcp",level:4},{value:"AWS",id:"aws",level:4},{value:"Azure",id:"azure",level:4},{value:"Configuration",id:"configuration",level:2},{value:"Authentication Options",id:"authentication-options",level:3},{value:"Google Cloud Platform (GCP)",id:"google-cloud-platform-gcp-1",level:4},{value:"AWS",id:"aws-1",level:4},{value:"Microsoft Azure",id:"microsoft-azure",level:4},{value:"Example",id:"example",level:3},{value:"Google Cloud Platform (GCP)",id:"google-cloud-platform-gcp-2",level:4},{value:"AWS",id:"aws-2",level:3},{value:"Microsoft Azure",id:"microsoft-azure-1",level:3}];function a(e){let n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"The Cloud Vendor Aggregator processor is designed to aggregate events from\nvarious cloud vendors into a standardized asset shape.\nThis processor is particularly useful for organizations that need to manage and analyze assets across multiple cloud environments."}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsx)(n.p,{children:"This processor is tightly coupled with the Cloud vendor-specific sources."}),(0,t.jsx)(n.p,{children:"It's usage is recommended only if you are using the following sources:"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/15.2.0/runtime-components/plugins/integration-connector-agent/sources/gcp_pubsub_asset_inventory",children:"Google Cloud Asset Inventory API Pub/Sub"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/15.2.0/runtime-components/plugins/integration-connector-agent/sources/aws_cloudtrail_sqs",children:"AWS CloudTrail SQS"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/15.2.0/runtime-components/plugins/integration-connector-agent/sources/azure_activity_log_event_hub",children:"Microsoft Azure Monitor Activity Log Event Hub"})}),"\n"]}),(0,t.jsxs)(n.p,{children:["In such cases, the processor ",(0,t.jsx)(n.strong,{children:"MUST"})," be used as the very first processor in the pipeline\nto ensure that the events are aggregated correctly before being sent to the next pipeline processors and the sink."]})]}),"\n",(0,t.jsx)(n.h2,{id:"processor-overview",children:"Processor Overview"}),"\n",(0,t.jsx)(n.p,{children:"The Processor is designed to produce a standardized asset shape that has the following structure:"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Field Name"}),(0,t.jsx)(n.th,{style:{textAlign:"center"},children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"name"})}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.em,{children:"string"})}),(0,t.jsx)(n.td,{children:"The name of the asset, typically derived from the cloud vendor-specific asset name."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"type"})}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.em,{children:"string"})}),(0,t.jsx)(n.td,{children:"The type of the asset, derived from the cloud vendor-specific asset type."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"provider"})}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.em,{children:"string"})}),(0,t.jsxs)(n.td,{children:["The name of the cloud vendor, such as ",(0,t.jsx)(n.code,{children:"gcp"}),", ",(0,t.jsx)(n.code,{children:"aws"}),", or ",(0,t.jsx)(n.code,{children:"azure"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"location"})}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.em,{children:"string"})}),(0,t.jsx)(n.td,{children:"The location of the asset, such as a region or zone."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tags"})}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.em,{children:"object"})}),(0,t.jsx)(n.td,{children:"A map of tags associated with the asset, where keys are tag names and values are tag values."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"relationships"})}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.em,{children:"array"})}
1),(0,t.jsx)(n.td,{children:"An array of strings representing relationships to other assets (e.g. the organization/project the resource is coming from)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"timestamp"})}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.em,{children:"string"})}),(0,t.jsx)(n.td,{children:"The timestamp of the generated asset, the string follows the ISO format"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"rawData"})}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.em,{children:"string"})}),(0,t.jsx)(n.td,{children:"The event raw data from the cloud vendor, containing all the fields that were present in the original event. Note: this value is a base64 representation of the original binary data"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"supported-vendor-resources",children:"Supported vendor Resources"}),"\n",(0,t.jsx)(n.p,{children:"Each vendor has currently a limited set of supported resources."}),"\n",(0,t.jsx)(n.h4,{id:"google-cloud-platform-gcp",children:"Google Cloud Platform (GCP)"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Bucket storage (",(0,t.jsx)(n.code,{children:"storage.googleapis.com/Bucket"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Cloud Run function (",(0,t.jsx)(n.code,{children:"run.googleapis.com/Service"}),")"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"aws",children:"AWS"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["S3 bucket (",(0,t.jsx)(n.code,{children:"aws.s3"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Lambda function (",(0,t.jsx)(n.code,{children:"aws.lambda"}),")"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"azure",children:"Azure"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Storage Account (",(0,t.jsx)(n.code,{children:"Microsoft.Storage/storageAccounts"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["App Function and App Service (",(0,t.jsx)(n.code,{children:"Microsoft.Web/sites"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Virtual Machine (",(0,t.jsx)(n.code,{children:"Microsoft.Compute/virtualMachines"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Disk (",(0,t.jsx)(n.code,{children:"Microsoft.Compute/disks"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Virtual Network (",(0,t.jsx)(n.code,{children:"Microsoft.Network/virtualNetworks"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Network Interface (",(0,t.jsx)(n.code,{children:"Microsoft.Network/networkInterfaces"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Network Security Group (",(0,t.jsx)(n.code,{children:"Microsoft.Network/networkSecurityGroups"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Public IP Address (",(0,t.jsx)(n.code,{children:"Microsoft.Network/publicIPAddresses"}),")"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(n.p,{children:"When configuring the Cloud Vendor Aggregator processor,\nyou need to provide the following parameters in your configuration file:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"type"})," (",(0,t.jsx)(n.em,{children:"string"}),"): The type of the processor, which should be set to ",(0,t.jsx)(n.code,{children:"cloud-vendor-aggregator"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"cloudVendorName"}),"\xa0(",(0,t.jsx)(n.em,{children:"string"}),"): The name of the cloud vendor for which the events are being aggregated.\nThis can be one of the following values:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"gcp"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"aws"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"azure"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"authOptions"})," (",(0,t.jsx)(n.em,{children:"object"}),", optional): Authentication options for the cloud vendor; the fields are vendor-specific,\ncheck out the below table for details."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"cloudVendorName"})," parameter is mandatory and must be set to the name of the cloud vendor based\non the source type you are using."]})}),"\n",(0,t.jsx)(n.h3,{id:"authentication-options",children:"Authentication Options"}),"\n",(0,t.jsx)(n.h4,{id:"google-cloud-platform-gcp-1",children:"Google Cloud Platform (GCP)"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Field Name"}),(0,t.jsx)(n.th,{style:{textAlign:"center"},children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"credentialsJson"})}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.a,{href:"/docs/15.2.0/runtime-components/plugins/integration-connector-agent/install#secretsource",children:(0,t.jsx)(n.em,{children:"SecretSource"})})}),(0,t.jsxs)(n.td,{children:["The content of the ",(0,t.jsx)(n.code,{children:"credentials.json"})," provided by GCP, specified as a secret source."]})]})})]}),"\n",(0,t.jsx)(n.h4,{id:"aws-1",children:"AWS"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Field Name"}),(0,t.jsx)(n.th,{style:{textAlign:"center"},children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"accessKeyId"})}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.em,{children:"string"})}),(0,t.jsx)(n.td,{children:"Access Key ID from AWS."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"secretAccessKey"})}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.a,{href:"/docs/15.2.0/runtime-components/plugins/integration-connector-agent/install#secretsource",children:(0,t.jsx)(n.em,{children:"SecretSource"})})}
1),(0,t.jsx)(n.td,{children:"Secret Access Key from AWS, specified as a secret source."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sessionToken"})}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.a,{href:"/docs/15.2.0/runtime-components/plugins/integration-connector-agent/install#secretsource",children:(0,t.jsx)(n.em,{children:"SecretSource"})})}),(0,t.jsx)(n.td,{children:"Session Token from AWS, specified as a secret source."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"region"})}),(0,t.jsxs)(n.td,{style:{textAlign:"center"},children:[(0,t.jsx)(n.em,{children:"string"})," (optional)"]}),(0,t.jsx)(n.td,{children:"The AWS region where the assets are located."})]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"microsoft-azure",children:"Microsoft Azure"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Field Name"}),(0,t.jsx)(n.th,{style:{textAlign:"center"},children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tenantId"})}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.em,{children:"string"})}),(0,t.jsx)(n.td,{children:"The Azure tenant ID."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"clientId"})}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.a,{href:"/docs/15.2.0/runtime-components/plugins/integration-connector-agent/install#secretsource",children:(0,t.jsx)(n.em,{children:"SecretSource"})})}),(0,t.jsx)(n.td,{children:"The Azure client ID, specified as a secret source."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"clientSecret"})}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:(0,t.jsx)(n.a,{href:"/docs/15.2.0/runtime-components/plugins/integration-connector-agent/install#secretsource",children:(0,t.jsx)(n.em,{children:"SecretSource"})})}),(0,t.jsx)(n.td,{children:"The Azure client secret, specified as a secret source."})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.h4,{id:"google-cloud-platform-gcp-2",children:"Google Cloud Platform (GCP)"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "type": "cloud-vendor-aggregator",\n "cloudVendorName": "gcp",\n "authOptions": {\n "credentialsJson": {\n "fromEnv": "GCP_CREDENTIALS_JSON"\n }\n }\n}\n'})}),"\n",(0,t.jsx)(n.h3,{id:"aws-2",children:"AWS"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "type": "cloud-vendor-aggregator",\n "cloudVendorName": "aws",\n "authOptions": {\n "accessKeyId": "your-access-key",\n "secretAccessKey": {\n "fromEnv": "AWS_SECRET_ACCESS_KEY"\n },\n "sessionToken": {\n "fromEnv": "AWS_SESSION_TOKEN"\n }\n }\n}\n'})}),"\n",(0,t.jsx)(n.h3,{id:"microsoft-azure-1",children:"Microsoft Azure"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "type": "cloud-vendor-aggregator",\n "cloudVendorName": "azure",\n "authOptions": {\n "tenantId": "your-tenant-id",\n "clientId": {\n "fromEnv": "AZURE_CLIENT_ID"\n },\n "clientSecret": {\n "fromEnv": "AZURE_CLIENT_SECRET"\n }\n }\n}\n'})})]})}function h(e={}){let{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453(e,n,r){r.d(n,{R:()=>i,x:()=>c});var s=r(296540);let t={},o=s.createContext(t);function i(e){let n=s.useContext(o);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.