Repository files navigation

NOTE:

Please do not use this for production, instead use a VPN/firewall/route tables and route your traffic through to resources apropriately. This is a cheap workaround for when I did not have the resources for a VPN and while my deployment was going through a non-sensitive development phase.


AzureNetworkSecurityDynamicIP

A family of Azure Function App, Azure Logic App, and Azure Automation Runbook to utilise Network Security Group Rules where you do not have a fixed/static IP (i.e. where you have a dynamic IP).

Requirements:

  1. AzureRM.Network and AzureRM.Profile module in Azure Automation
    • In the Azure portal, open your Automation account.
    • Select Modules under Shared Resources to open the list of modules.
    • Click Browse gallery from the top of the page.
    • Search 'AzureRM.Network AzureRM.Profile'
    • Select each module and import it into your Azure Automation account.
  2. Existing Network Security Group rule
  3. Public DNS records

Info:

  1. IPLookup.ps1 - template code for an Azure Function App which will query public DNS records for your FQDN
  2. UpdateNetworkSecurityGroupRule.ps1 - template code for Azure Automation Account runbook which will utilise the public DNS data to update existing Network Security Group rule.
  3. RunbookIntervalLogicApp - Azure Automation Account schedules are limited to running at most 1 hour intervals. To work around this, we use an Azure Logic App to schedule runbook jobs at intervals of our choosing. I recommend no less than 5 minute intervals since runbook jobs take on average 1 minute to complete.

Setup:

  1. Create a Resource Group to contain your automation
  2. Create an Azure Function App within the Resource Group
  3. Add a new Function with your Function App, adapt the code in IPLookup.ps1 template
  4. Generate a Function Url for your function
  5. Create an Azure Automation Account within the Resource Group
  6. Create a Runbook within the Automation Account, adapt the code in UpdateNetworkSecurityGroupRule.ps1 template
    • Add your Network Security Group name in line 26
    • Add your Resource Group name in line 28
    • Add your Network Security Rule name in line 30
    • Add your Function Url in line 32, appending '&name=Lon' to the end
    • Add your Priority in line 35
  7. Create an Azure Logic App within the Resource Group
  8. Import (and modify for your environment) the Logic App template using RunbookIntervalLogicApp

ToDo:

  1. Create NSG rule if it does not exist
  2. Remove 'security by obscurity' approach in protecting Logic App
  3. Tidy variables in Azure Automation Runbook script
  4. Make Azure Automation Runbook script fully dynamic
  5. Improve reliability of Azure Automation Runbook script

About

An Azure Function App and Azure Automation Runbook to utilise a dynamic IP in Network Security Group Rules

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

NOTE:

Please do not use this for production, instead use a VPN/firewall/route tables and route your traffic through to resources apropriately. This is a cheap workaround for when I did not have the resources for a VPN and while my deployment was going through a non-sensitive development phase.


AzureNetworkSecurityDynamicIP

A family of Azure Function App, Azure Logic App, and Azure Automation Runbook to utilise Network Security Group Rules where you do not have a fixed/static IP (i.e. where you have a dynamic IP).

Requirements:

  1. AzureRM.Network and AzureRM.Profile module in Azure Automation
    • In the Azure portal, open your Automation account.
    • Select Modules under Shared Resources to open the list of modules.
    • Click Browse gallery from the top of the page.
    • Search 'AzureRM.Network AzureRM.Profile'
    • Select each module and import it into your Azure Automation account.
  2. Existing Network Security Group rule
  3. Public DNS records

Info:

  1. IPLookup.ps1 - template code for an Azure Function App which will query public DNS records for your FQDN
  2. UpdateNetworkSecurityGroupRule.ps1 - template code for Azure Automation Account runbook which will utilise the public DNS data to update existing Network Security Group rule.
  3. RunbookIntervalLogicApp - Azure Automation Account schedules are limited to running at most 1 hour intervals. To work around this, we use an Azure Logic App to schedule runbook jobs at intervals of our choosing. I recommend no less than 5 minute intervals since runbook jobs take on average 1 minute to complete.

Setup:

  1. Create a Resource Group to contain your automation
  2. Create an Azure Function App within the Resource Group
  3. Add a new Function with your Function App, adapt the code in IPLookup.ps1 template
  4. Generate a Function Url for your function
  5. Create an Azure Automation Account within the Resource Group
  6. Create a Runbook within the Automation Account, adapt the code in UpdateNetworkSecurityGroupRule.ps1 template
    • Add your Network Security Group name in line 26
    • Add your Resource Group name in line 28
    • Add your Network Security Rule name in line 30
    • Add your Function Url in line 32, appending '&name=Lon' to the end
    • Add your Priority in line 35
  7. Create an Azure Logic App within the Resource Group
  8. Import (and modify for your environment) the Logic App template using RunbookIntervalLogicApp

ToDo:

  1. Create NSG rule if it does not exist
  2. Remove 'security by obscurity' approach in protecting Logic App
  3. Tidy variables in Azure Automation Runbook script
  4. Make Azure Automation Runbook script fully dynamic
  5. Improve reliability of Azure Automation Runbook script

About

An Azure Function App and Azure Automation Runbook to utilise a dynamic IP in Network Security Group Rules

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

NOTE:

Please do not use this for production, instead use a VPN/firewall/route tables and route your traffic through to resources apropriately. This is a cheap workaround for when I did not have the resources for a VPN and while my deployment was going through a non-sensitive development phase.


AzureNetworkSecurityDynamicIP

A family of Azure Function App, Azure Logic App, and Azure Automation Runbook to utilise Network Security Group Rules where you do not have a fixed/static IP (i.e. where you have a dynamic IP).

Requirements:

  1. AzureRM.Network and AzureRM.Profile module in Azure Automation
    • In the Azure portal, open your Automation account.
    • Select Modules under Shared Resources to open the list of modules.
    • Click Browse gallery from the top of the page.
    • Search 'AzureRM.Network AzureRM.Profile'
    • Select each module and import it into your Azure Automation account.
  2. Existing Network Security Group rule
  3. Public DNS records

Info:

  1. IPLookup.ps1 - template code for an Azure Function App which will query public DNS records for your FQDN
  2. UpdateNetworkSecurityGroupRule.ps1 - template code for Azure Automation Account runbook which will utilise the public DNS data to update existing Network Security Group rule.
  3. RunbookIntervalLogicApp - Azure Automation Account schedules are limited to running at most 1 hour intervals. To work around this, we use an Azure Logic App to schedule runbook jobs at intervals of our choosing. I recommend no less than 5 minute intervals since runbook jobs take on average 1 minute to complete.

Setup:

  1. Create a Resource Group to contain your automation
  2. Create an Azure Function App within the Resource Group
  3. Add a new Function with your Function App, adapt the code in IPLookup.ps1 template
  4. Generate a Function Url for your function
  5. Create an Azure Automation Account within the Resource Group
  6. Create a Runbook within the Automation Account, adapt the code in UpdateNetworkSecurityGroupRule.ps1 template
    • Add your Network Security Group name in line 26
    • Add your Resource Group name in line 28
    • Add your Network Security Rule name in line 30
    • Add your Function Url in line 32, appending '&name=Lon' to the end
    • Add your Priority in line 35
  7. Create an Azure Logic App within the Resource Group
  8. Import (and modify for your environment) the Logic App template using RunbookIntervalLogicApp

ToDo:

  1. Create NSG rule if it does not exist
  2. Remove 'security by obscurity' approach in protecting Logic App
  3. Tidy variables in Azure Automation Runbook script
  4. Make Azure Automation Runbook script fully dynamic
  5. Improve reliability of Azure Automation Runbook script

About

An Azure Function App and Azure Automation Runbook to utilise a dynamic IP in Network Security Group Rules

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

NOTE:

Please do not use this for production, instead use a VPN/firewall/route tables and route your traffic through to resources apropriately. This is a cheap workaround for when I did not have the resources for a VPN and while my deployment was going through a non-sensitive development phase.


AzureNetworkSecurityDynamicIP

A family of Azure Function App, Azure Logic App, and Azure Automation Runbook to utilise Network Security Group Rules where you do not have a fixed/static IP (i.e. where you have a dynamic IP).

Requirements:

  1. AzureRM.Network and AzureRM.Profile module in Azure Automation
    • In the Azure portal, open your Automation account.
    • Select Modules under Shared Resources to open the list of modules.
    • Click Browse gallery from the top of the page.
    • Search 'AzureRM.Network AzureRM.Profile'
    • Select each module and import it into your Azure Automation account.
  2. Existing Network Security Group rule
  3. Public DNS records

Info:

  1. IPLookup.ps1 - template code for an Azure Function App which will query public DNS records for your FQDN
  2. UpdateNetworkSecurityGroupRule.ps1 - template code for Azure Automation Account runbook which will utilise the public DNS data to update existing Network Security Group rule.
  3. RunbookIntervalLogicApp - Azure Automation Account schedules are limited to running at most 1 hour intervals. To work around this, we use an Azure Logic App to schedule runbook jobs at intervals of our choosing. I recommend no less than 5 minute intervals since runbook jobs take on average 1 minute to complete.

Setup:

  1. Create a Resource Group to contain your automation
  2. Create an Azure Function App within the Resource Group
  3. Add a new Function with your Function App, adapt the code in IPLookup.ps1 template
  4. Generate a Function Url for your function
  5. Create an Azure Automation Account within the Resource Group
  6. Create a Runbook within the Automation Account, adapt the code in UpdateNetworkSecurityGroupRule.ps1 template
    • Add your Network Security Group name in line 26
    • Add your Resource Group name in line 28
    • Add your Network Security Rule name in line 30
    • Add your Function Url in line 32, appending '&name=Lon' to the end
    • Add your Priority in line 35
  7. Create an Azure Logic App within the Resource Group
  8. Import (and modify for your environment) the Logic App template using RunbookIntervalLogicApp

ToDo:

  1. Create NSG rule if it does not exist
  2. Remove 'security by obscurity' approach in protecting Logic App
  3. Tidy variables in Azure Automation Runbook script
  4. Make Azure Automation Runbook script fully dynamic
  5. Improve reliability of Azure Automation Runbook script

About

An Azure Function App and Azure Automation Runbook to utilise a dynamic IP in Network Security Group Rules

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

NOTE:

Please do not use this for production, instead use a VPN/firewall/route tables and route your traffic through to resources apropriately. This is a cheap workaround for when I did not have the resources for a VPN and while my deployment was going through a non-sensitive development phase.


AzureNetworkSecurityDynamicIP

A family of Azure Function App, Azure Logic App, and Azure Automation Runbook to utilise Network Security Group Rules where you do not have a fixed/static IP (i.e. where you have a dynamic IP).

Requirements:

  1. AzureRM.Network and AzureRM.Profile module in Azure Automation
    • In the Azure portal, open your Automation account.
    • Select Modules under Shared Resources to open the list of modules.
    • Click Browse gallery from the top of the page.
    • Search 'AzureRM.Network AzureRM.Profile'
    • Select each module and import it into your Azure Automation account.
  2. Existing Network Security Group rule
  3. Public DNS records

Info:

  1. IPLookup.ps1 - template code for an Azure Function App which will query public DNS records for your FQDN
  2. UpdateNetworkSecurityGroupRule.ps1 - template code for Azure Automation Account runbook which will utilise the public DNS data to update existing Network Security Group rule.
  3. RunbookIntervalLogicApp - Azure Automation Account schedules are limited to running at most 1 hour intervals. To work around this, we use an Azure Logic App to schedule runbook jobs at intervals of our choosing. I recommend no less than 5 minute intervals since runbook jobs take on average 1 minute to complete.

Setup:

  1. Create a Resource Group to contain your automation
  2. Create an Azure Function App within the Resource Group
  3. Add a new Function with your Function App, adapt the code in IPLookup.ps1 template
  4. Generate a Function Url for your function
  5. Create an Azure Automation Account within the Resource Group
  6. Create a Runbook within the Automation Account, adapt the code in UpdateNetworkSecurityGroupRule.ps1 template
    • Add your Network Security Group name in line 26
    • Add your Resource Group name in line 28
    • Add your Network Security Rule name in line 30
    • Add your Function Url in line 32, appending '&name=Lon' to the end
    • Add your Priority in line 35
  7. Create an Azure Logic App within the Resource Group
  8. Import (and modify for your environment) the Logic App template using RunbookIntervalLogicApp

ToDo:

  1. Create NSG rule if it does not exist
  2. Remove 'security by obscurity' approach in protecting Logic App
  3. Tidy variables in Azure Automation Runbook script
  4. Make Azure Automation Runbook script fully dynamic
  5. Improve reliability of Azure Automation Runbook script

About

An Azure Function App and Azure Automation Runbook to utilise a dynamic IP in Network Security Group Rules

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

NOTE:

Please do not use this for production, instead use a VPN/firewall/route tables and route your traffic through to resources apropriately. This is a cheap workaround for when I did not have the resources for a VPN and while my deployment was going through a non-sensitive development phase.


AzureNetworkSecurityDynamicIP

A family of Azure Function App, Azure Logic App, and Azure Automation Runbook to utilise Network Security Group Rules where you do not have a fixed/static IP (i.e. where you have a dynamic IP).

Requirements:

  1. AzureRM.Network and AzureRM.Profile module in Azure Automation
    • In the Azure portal, open your Automation account.
    • Select Modules under Shared Resources to open the list of modules.
    • Click Browse gallery from the top of the page.
    • Search 'AzureRM.Network AzureRM.Profile'
    • Select each module and import it into your Azure Automation account.
  2. Existing Network Security Group rule
  3. Public DNS records

Info:

  1. IPLookup.ps1 - template code for an Azure Function App which will query public DNS records for your FQDN
  2. UpdateNetworkSecurityGroupRule.ps1 - template code for Azure Automation Account runbook which will utilise the public DNS data to update existing Network Security Group rule.
  3. RunbookIntervalLogicApp - Azure Automation Account schedules are limited to running at most 1 hour intervals. To work around this, we use an Azure Logic App to schedule runbook jobs at intervals of our choosing. I recommend no less than 5 minute intervals since runbook jobs take on average 1 minute to complete.

Setup:

  1. Create a Resource Group to contain your automation
  2. Create an Azure Function App within the Resource Group
  3. Add a new Function with your Function App, adapt the code in IPLookup.ps1 template
  4. Generate a Function Url for your function
  5. Create an Azure Automation Account within the Resource Group
  6. Create a Runbook within the Automation Account, adapt the code in UpdateNetworkSecurityGroupRule.ps1 template
    • Add your Network Security Group name in line 26
    • Add your Resource Group name in line 28
    • Add your Network Security Rule name in line 30
    • Add your Function Url in line 32, appending '&name=Lon' to the end
    • Add your Priority in line 35
  7. Create an Azure Logic App within the Resource Group
  8. Import (and modify for your environment) the Logic App template using RunbookIntervalLogicApp

ToDo:

  1. Create NSG rule if it does not exist
  2. Remove 'security by obscurity' approach in protecting Logic App
  3. Tidy variables in Azure Automation Runbook script
  4. Make Azure Automation Runbook script fully dynamic
  5. Improve reliability of Azure Automation Runbook script

About

An Azure Function App and Azure Automation Runbook to utilise a dynamic IP in Network Security Group Rules

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

NOTE:

Please do not use this for production, instead use a VPN/firewall/route tables and route your traffic through to resources apropriately. This is a cheap workaround for when I did not have the resources for a VPN and while my deployment was going through a non-sensitive development phase.


AzureNetworkSecurityDynamicIP

A family of Azure Function App, Azure Logic App, and Azure Automation Runbook to utilise Network Security Group Rules where you do not have a fixed/static IP (i.e. where you have a dynamic IP).

Requirements:

  1. AzureRM.Network and AzureRM.Profile module in Azure Automation
    • In the Azure portal, open your Automation account.
    • Select Modules under Shared Resources to open the list of modules.
    • Click Browse gallery from the top of the page.
    • Search 'AzureRM.Network AzureRM.Profile'
    • Select each module and import it into your Azure Automation account.
  2. Existing Network Security Group rule
  3. Public DNS records

Info:

  1. IPLookup.ps1 - template code for an Azure Function App which will query public DNS records for your FQDN
  2. UpdateNetworkSecurityGroupRule.ps1 - template code for Azure Automation Account runbook which will utilise the public DNS data to update existing Network Security Group rule.
  3. RunbookIntervalLogicApp - Azure Automation Account schedules are limited to running at most 1 hour intervals. To work around this, we use an Azure Logic App to schedule runbook jobs at intervals of our choosing. I recommend no less than 5 minute intervals since runbook jobs take on average 1 minute to complete.

Setup:

  1. Create a Resource Group to contain your automation
  2. Create an Azure Function App within the Resource Group
  3. Add a new Function with your Function App, adapt the code in IPLookup.ps1 template
  4. Generate a Function Url for your function
  5. Create an Azure Automation Account within the Resource Group
  6. Create a Runbook within the Automation Account, adapt the code in UpdateNetworkSecurityGroupRule.ps1 template
    • Add your Network Security Group name in line 26
    • Add your Resource Group name in line 28
    • Add your Network Security Rule name in line 30
    • Add your Function Url in line 32, appending '&name=Lon' to the end
    • Add your Priority in line 35
  7. Create an Azure Logic App within the Resource Group
  8. Import (and modify for your environment) the Logic App template using RunbookIntervalLogicApp

ToDo:

  1. Create NSG rule if it does not exist
  2. Remove 'security by obscurity' approach in protecting Logic App
  3. Tidy variables in Azure Automation Runbook script
  4. Make Azure Automation Runbook script fully dynamic
  5. Improve reliability of Azure Automation Runbook script

About

An Azure Function App and Azure Automation Runbook to utilise a dynamic IP in Network Security Group Rules

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

NOTE:

Please do not use this for production, instead use a VPN/firewall/route tables and route your traffic through to resources apropriately. This is a cheap workaround for when I did not have the resources for a VPN and while my deployment was going through a non-sensitive development phase.


AzureNetworkSecurityDynamicIP

A family of Azure Function App, Azure Logic App, and Azure Automation Runbook to utilise Network Security Group Rules where you do not have a fixed/static IP (i.e. where you have a dynamic IP).

Requirements:

  1. AzureRM.Network and AzureRM.Profile module in Azure Automation
    • In the Azure portal, open your Automation account.
    • Select Modules under Shared Resources to open the list of modules.
    • Click Browse gallery from the top of the page.
    • Search 'AzureRM.Network AzureRM.Profile'
    • Select each module and import it into your Azure Automation account.
  2. Existing Network Security Group rule
  3. Public DNS records

Info:

  1. IPLookup.ps1 - template code for an Azure Function App which will query public DNS records for your FQDN
  2. UpdateNetworkSecurityGroupRule.ps1 - template code for Azure Automation Account runbook which will utilise the public DNS data to update existing Network Security Group rule.
  3. RunbookIntervalLogicApp - Azure Automation Account schedules are limited to running at most 1 hour intervals. To work around this, we use an Azure Logic App to schedule runbook jobs at intervals of our choosing. I recommend no less than 5 minute intervals since runbook jobs take on average 1 minute to complete.

Setup:

  1. Create a Resource Group to contain your automation
  2. Create an Azure Function App within the Resource Group
  3. Add a new Function with your Function App, adapt the code in IPLookup.ps1 template
  4. Generate a Function Url for your function
  5. Create an Azure Automation Account within the Resource Group
  6. Create a Runbook within the Automation Account, adapt the code in UpdateNetworkSecurityGroupRule.ps1 template
    • Add your Network Security Group name in line 26
    • Add your Resource Group name in line 28
    • Add your Network Security Rule name in line 30
    • Add your Function Url in line 32, appending '&name=Lon' to the end
    • Add your Priority in line 35
  7. Create an Azure Logic App within the Resource Group
  8. Import (and modify for your environment) the Logic App template using RunbookIntervalLogicApp

ToDo:

  1. Create NSG rule if it does not exist
  2. Remove 'security by obscurity' approach in protecting Logic App
  3. Tidy variables in Azure Automation Runbook script
  4. Make Azure Automation Runbook script fully dynamic
  5. Improve reliability of Azure Automation Runbook script

About

An Azure Function App and Azure Automation Runbook to utilise a dynamic IP in Network Security Group Rules

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages