<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://blog.lukesteward.co.uk</id>
    <title>Luke Steward's Blog</title>
    <updated>2025-09-27T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://blog.lukesteward.co.uk"/>
    <subtitle>Technical insights, cybersecurity tips, and helpful guides to make your digital life better</subtitle>
    <icon>https://blog.lukesteward.co.uk/img/favicon.svg</icon>
    <rights>Copyright © 2026 Luke Steward.</rights>
    <entry>
        <title type="html"><![CDATA[Cisco Umbrella to Huntress HEC Log Shipping]]></title>
        <id>https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping</id>
        <link href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping"/>
        <updated>2025-09-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This project provides two versions of a PowerShell script to ship logs from Cisco Umbrella Portal to Huntress using the]]></summary>
        <content type="html"><![CDATA[<p>This project provides two versions of a PowerShell script to ship logs from Cisco Umbrella Portal to Huntress using the
HEC (HTTP Event Collector) format.</p>
<p>⚠️ <strong>PowerShell 7+ Required</strong>: This project requires PowerShell 7 or later. It will not work with Windows PowerShell 5.1.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="features">Features<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#features" class="hash-link" aria-label="Direct link to Features" title="Direct link to Features" translate="no">​</a></h2>
<ul>
<li class=""><strong>Batched Processing</strong>: 200 events per HTTP request</li>
<li class=""><strong>Comprehensive Field Mapping</strong>: All Cisco Umbrella fields mapped to Huntress ECS format</li>
<li class=""><strong>Flattened Data Structure</strong>: Complex nested objects expanded for better SIEM visibility</li>
<li class=""><strong>Multiple Log Types</strong>: DNS, Proxy, Firewall, Intrusion, and IP logs</li>
<li class=""><strong>Incremental Processing</strong>: 10-minute lookback window for efficient processing</li>
<li class=""><strong>State Management</strong>: Tracks last run time to prevent duplicates</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="scripts">Scripts<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#scripts" class="hash-link" aria-label="Direct link to Scripts" title="Direct link to Scripts" translate="no">​</a></h2>
<p>There are two scripts located in this GitHub repo, one is for standalone usage and one is for deploying to AzureFunctions</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="standalone-version-ciscoumbrellatohec-standaloneps1">Standalone Version (CiscoUmbrellaToHEC-Standalone.ps1)<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#standalone-version-ciscoumbrellatohec-standaloneps1" class="hash-link" aria-label="Direct link to Standalone Version (CiscoUmbrellaToHEC-Standalone.ps1)" title="Direct link to Standalone Version (CiscoUmbrellaToHEC-Standalone.ps1)" translate="no">​</a></h3>
<ul>
<li class=""><strong>Purpose</strong>: Run locally to test it out (Requires: PowerShell 7+)</li>
<li class=""><strong>Features</strong>:<!-- -->
<ul>
<li class="">Batched HTTP requests (200 events per request)</li>
<li class="">Progress indicators</li>
</ul>
</li>
<li class=""><strong>Usage</strong>: <code>pwsh -ExecutionPolicy Bypass -File "CiscoUmbrellaToHEC-Standalone.ps1"</code></li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="required-parameters">Required Parameters<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#required-parameters" class="hash-link" aria-label="Direct link to Required Parameters" title="Direct link to Required Parameters" translate="no">​</a></h4>
<ul>
<li class=""><code>ApiKey</code>: Cisco Umbrella API Key</li>
<li class=""><code>ApiSecret</code>: Cisco Umbrella API Secret</li>
<li class=""><code>HuntressHecToken</code>: Huntress HEC Token (<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#huntress-hec-setup" class="">Setup Guide</a>)</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="azure-functions-version">Azure Functions Version<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#azure-functions-version" class="hash-link" aria-label="Direct link to Azure Functions Version" title="Direct link to Azure Functions Version" translate="no">​</a></h3>
<ul>
<li class=""><strong>Purpose</strong>: Deploy as an Azure Function for automated execution</li>
<li class=""><strong>Features</strong>:<!-- -->
<ul>
<li class="">Same batched processing as standalone</li>
<li class="">Timer-triggered execution</li>
<li class="">Environment variable configuration</li>
<li class="">Azure Function return format</li>
</ul>
</li>
<li class=""><strong>Deployment</strong>: Use the deploy to Azure Button below or follow the steps for manual deployment</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="environment-variables">Environment Variables<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#environment-variables" class="hash-link" aria-label="Direct link to Environment Variables" title="Direct link to Environment Variables" translate="no">​</a></h4>
<ul>
<li class=""><code>UMBRELLA_API_KEY</code>: Cisco Umbrella API Key</li>
<li class=""><code>UMBRELLA_API_SECRET</code>: Cisco Umbrella API Secret</li>
<li class=""><code>HUNTRESS_HEC_TOKEN</code>: Huntress HEC Token (<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#huntress-hec-setup" class="">Setup Guide</a>)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="deployment">Deployment<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#deployment" class="hash-link" aria-label="Direct link to Deployment" title="Direct link to Deployment" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-one-click-azure-deployment">🚀 One-Click Azure Deployment<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#-one-click-azure-deployment" class="hash-link" aria-label="Direct link to 🚀 One-Click Azure Deployment" title="Direct link to 🚀 One-Click Azure Deployment" translate="no">​</a></h3>
<p><a href="https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FLukeSteward%2FCiscoUmbrella-to-Huntress-HEC%2Frefs%2Fheads%2Fmain%2Fdeployments%2Fazuredeploy.json" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://aka.ms/deploytoazurebutton" alt="Deploy to Azure" class="img_ev3q"></a></p>
<p>The deployment will prompt you for:</p>
<ul>
<li class=""><strong>Cisco Umbrella API Key</strong>: Cisco Umbrella API Key (Inside of Customer)</li>
<li class=""><strong>Cisco Umbrella API Secret</strong>: Cisco Umbrella API Secret</li>
<li class=""><strong>Huntress HEC Token</strong>: Huntress HEC Token</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-deploy-function-code">📦 Deploy Function Code<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#-deploy-function-code" class="hash-link" aria-label="Direct link to 📦 Deploy Function Code" title="Direct link to 📦 Deploy Function Code" translate="no">​</a></h3>
<p>After the infrastructure is deployed, you need to deploy the function code.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="github-deployment-recommended">GitHub Deployment (Recommended)<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#github-deployment-recommended" class="hash-link" aria-label="Direct link to GitHub Deployment (Recommended)" title="Direct link to GitHub Deployment (Recommended)" translate="no">​</a></h4>
<ol>
<li class="">Fork this repository to your GitHub account</li>
<li class="">Go to Azure Portal → Your Function App → Deployment Center</li>
<li class="">Select GitHub as source</li>
<li class="">Authorize and select your forked repository</li>
<li class="">Choose branch: main</li>
<li class="">Set application path: <code>CiscoUmbrellaToHEC</code></li>
<li class="">Save - Azure will automatically deploy your function code</li>
</ol>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="manual-deployment">Manual Deployment<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#manual-deployment" class="hash-link" aria-label="Direct link to Manual Deployment" title="Direct link to Manual Deployment" translate="no">​</a></h4>
<ol>
<li class="">Download the function code</li>
<li class="">Zip the <code>CiscoUmbrellaToHEC</code> folder</li>
<li class="">Go to Azure Portal → Your Function App → Deployment Center</li>
<li class="">Select "Zip Deploy" as source</li>
<li class="">Upload the zip file</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configuration">Configuration<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cisco-umbrella-api-setup">Cisco Umbrella API Setup<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#cisco-umbrella-api-setup" class="hash-link" aria-label="Direct link to Cisco Umbrella API Setup" title="Direct link to Cisco Umbrella API Setup" translate="no">​</a></h3>
<ol>
<li class="">Log into your Cisco Umbrella Dashboard</li>
<li class="">Navigate to <strong>Admin</strong> → <strong>API Keys</strong></li>
<li class="">Create a new API key with the following permissions:<!-- -->
<ul>
<li class=""><strong>Reporting</strong> (Read)</li>
<li class=""><strong>Investigations</strong> (Read)</li>
</ul>
</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="huntress-hec-setup">Huntress HEC Setup<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#huntress-hec-setup" class="hash-link" aria-label="Direct link to Huntress HEC Setup" title="Direct link to Huntress HEC Setup" translate="no">​</a></h3>
<ol>
<li class="">Log into your Huntress Dashboard</li>
<li class="">Navigate to <strong>SIEM</strong> → <strong>Source Management</strong> → <strong>Categories</strong></li>
<li class="">Create a new Generic HTTP Event Collector (HEC) called <strong>Cisco Umbrella</strong></li>
<li class="">Note the HEC endpoint URL (usually <code>https://hec.huntress.io/services/collector/raw</code>)</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="usage">Usage<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="standalone-script">Standalone Script<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#standalone-script" class="hash-link" aria-label="Direct link to Standalone Script" title="Direct link to Standalone Script" translate="no">​</a></h3>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># Run the standalone script</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">pwsh -ExecutionPolicy Bypass -File "CiscoUmbrellaToHEC-Standalone.ps1" `</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -ApiKey "your-api-key" `</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -ApiSecret "your-api-secret" `</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -HuntressHecToken "your-huntress-hec-token"</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="azure-function">Azure Function<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#azure-function" class="hash-link" aria-label="Direct link to Azure Function" title="Direct link to Azure Function" translate="no">​</a></h3>
<p>The Azure Function will automatically run every 10 minutes and process logs from the last 10-minute window. No manual
intervention required.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="log-types-supported">Log Types Supported<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#log-types-supported" class="hash-link" aria-label="Direct link to Log Types Supported" title="Direct link to Log Types Supported" translate="no">​</a></h2>
<ul>
<li class=""><strong>DNS Logs</strong>: Domain resolution events</li>
<li class=""><strong>Proxy Logs</strong>: Web proxy traffic</li>
<li class=""><strong>Firewall Logs</strong>: Network firewall events</li>
<li class=""><strong>Intrusion Logs</strong>: Security events and alerts</li>
<li class=""><strong>IP Logs</strong>: IP address reputation events</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="troubleshooting">Troubleshooting<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#troubleshooting" class="hash-link" aria-label="Direct link to Troubleshooting" title="Direct link to Troubleshooting" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="common-issues">Common Issues<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#common-issues" class="hash-link" aria-label="Direct link to Common Issues" title="Direct link to Common Issues" translate="no">​</a></h3>
<ol>
<li class=""><strong>PowerShell Version</strong>: Ensure you're using PowerShell 7+</li>
<li class=""><strong>API Permissions</strong>: Verify your Cisco Umbrella API key has the correct permissions</li>
<li class=""><strong>HEC Token</strong>: Confirm your Huntress HEC token is valid and active</li>
<li class=""><strong>Network Connectivity</strong>: Ensure the Azure Function can reach both Cisco Umbrella and Huntress endpoints</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="logs">Logs<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#logs" class="hash-link" aria-label="Direct link to Logs" title="Direct link to Logs" translate="no">​</a></h3>
<p>Check the Azure Function logs in the Azure Portal under <strong>Monitoring</strong> → <strong>Logs</strong> for detailed execution information.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="security-considerations">Security Considerations<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#security-considerations" class="hash-link" aria-label="Direct link to Security Considerations" title="Direct link to Security Considerations" translate="no">​</a></h2>
<ul>
<li class="">Store API keys and tokens securely using Azure Key Vault or environment variables</li>
<li class="">Use managed identities where possible</li>
<li class="">Regularly rotate API keys and tokens</li>
<li class="">Monitor for failed authentication attempts</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="contributing">Contributing<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#contributing" class="hash-link" aria-label="Direct link to Contributing" title="Direct link to Contributing" translate="no">​</a></h2>
<p>Contributions are welcome! Please feel free to submit a Pull Request.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="license">License<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#license" class="hash-link" aria-label="Direct link to License" title="Direct link to License" translate="no">​</a></h2>
<p>This project is licensed under the MIT License - see the
<a href="https://github.com/LukeSteward/CiscoUmbrella-to-Huntress-HEC/blob/main/LICENSE" target="_blank" rel="noopener noreferrer" class="">LICENSE</a> file for details.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="support">Support<a href="https://blog.lukesteward.co.uk/cisco-umbrella-to-huntress-hec-log-shipping#support" class="hash-link" aria-label="Direct link to Support" title="Direct link to Support" translate="no">​</a></h2>
<p>For issues and questions:</p>
<ul>
<li class="">Create an issue in this repository</li>
</ul>]]></content>
        <author>
            <name>Luke Steward</name>
            <uri>https://lukesteward.co.uk</uri>
        </author>
        <category label="Huntress" term="Huntress"/>
        <category label="Cisco Umbrella" term="Cisco Umbrella"/>
        <category label="SIEM" term="SIEM"/>
        <category label="Security" term="Security"/>
        <category label="Azure Functions" term="Azure Functions"/>
        <category label="PowerShell" term="PowerShell"/>
        <category label="Cisco" term="Cisco"/>
        <category label="Azure" term="Azure"/>
    </entry>
</feed>