{"id":22495,"date":"2021-12-13T16:02:36","date_gmt":"2021-12-13T16:02:36","guid":{"rendered":"https:\/\/aidanfinn.com\/?p=22495"},"modified":"2021-12-21T11:59:49","modified_gmt":"2021-12-21T11:59:49","slug":"enabling-devsecops-with-azure-firewall","status":"publish","type":"post","link":"https:\/\/aidanfinn.com\/?p=22495","title":{"rendered":"Enabling DevSecOps with Azure Firewall"},"content":{"rendered":"<p>In this post, I will share how you can implement DevSecOps with Azure Firewall, with links to a bunch of working Bicep files to deploy the infrastructure-as-code (IaC) templates.<\/p>\n<p><em>This example uses a &#8220;legacy&#8221; hub and spoke &#8211; one where the hub is VNet-based and not based on Azure Virtual WAN Hub. I&#8217;ll try to find some time to work on the code for that one.<\/em><\/p>\n<h2>The Concept<\/h2>\n<p>Hold on, because there&#8217;s a bunch of things to understand!<\/p>\n<h3>DevSecOps<\/h3>\n<p>The DevSecOps methodology is more than just IaC. It&#8217;s a combination of people, processes, and technology to enable a fail-fast agile delivery of workloads\/applications to the business. I discussed <a href=\"https:\/\/aidanfinn.com\/?p=22469\" target=\"_blank\" rel=\"noopener\">here<\/a> how DevSecOps can be used to remove the friction of IT to deliver on the promises of the Cloud.<\/p>\n<p>The Azure features that this design is based on are discussed in concept <a href=\"https:\/\/aidanfinn.com\/?p=22377\" target=\"_blank\" rel=\"noopener\">here<\/a>. The idea is that we want to enable Devs\/Ops\/Security to manage firewall rules in the workload&#8217;s Git repository (repo). This breaks the traditional model where the rules are located in a central location. The important thing is not the location of the rules, but the processes that manage the rules (change control through Git repo pull request reviews) and who (the reviewers, including the architects, firewall admins, security admins, etc).<\/p>\n<p>So what we are doing is taking the firewall rules for the workload and placing them in with the workload&#8217;s code. NSG rules are probably already there. Now, we&#8217;re putting the Azure Firewall rules for the workload in the workload repo too. This is all made possible thanks to changes that were made to Azure Firewall Policy (Azure Firewall Manager) Rules Collection Groups &#8211; I use one Rules Collection Group for each workload and all the rules that enable that workload are placed in that Rules Collection Group. No changes will make it to the trunk branch (deployment action\/pipelines look for changes here to trigger a deployment) without approval by all the necessary parties &#8211; this means that the firewall admins are still in control, but they don&#8217;t necessarily need to write the rules themselves &#8230; and the devs\/operators might even write the rules, subject to review!<\/p>\n<p><em>This<\/em> is the killer reason to choose Azure Firewall over NVAs &#8211; the ability to not only deploy the firewall resource, but to manage the entire configuration and rule sets as code, and to break that all out in a controlled way to make the enterprise more agile.<\/p>\n<h3>Other Bits<\/h3>\n<p>If you&#8217;ve read my posts on Azure routing (<a href=\"https:\/\/aidanfinn.com\/?p=21480\" target=\"_blank\" rel=\"noopener\">How to Troubleshoot Azure Routing?<\/a> and <a href=\"https:\/\/aidanfinn.com\/?p=21653\" target=\"_blank\" rel=\"noopener\">BGP with Microsoft Azure Virtual Networks &amp; Firewalls<\/a>) then you&#8217;ll understand that there&#8217;s more going on than just firewall rules. Packets won&#8217;t magically flow through your firewall just because it&#8217;s in the middle of your diagram!<\/p>\n<p>The spoke or workload will also need to deploy:<\/p>\n<ul>\n<li>A peering connection to the hub, enabling connectivity with the hub and the firewall. All traffic leaving the spoke will route through the firewall thanks to a user-defined route in the spoke subnet route table. Peering is a two-way connection. The workload will include some bicep to deploy the spoke-hub\u00a0<em>and<\/em> the hub-spoke connections.<\/li>\n<li>A route for the GatewaySubnet route table in the hub. This is required to route traffic to the spoke address prefix(es) through the Azure Firewall so on-premises&gt;spoke traffic is correctly inspected and filtered by the firewall.<\/li>\n<\/ul>\n<h2>The IaC<\/h2>\n<p>In this section, I&#8217;ll explain the code layout and placement.<\/p>\n<h3>My Code<\/h3>\n<p>You can find my public repo, containing all the Bicep code <a href=\"https:\/\/github.com\/aidanfinn\/SharedAzureFirewall\/tree\/main\/BicepDevSecOps\" target=\"_blank\" rel=\"noopener\">here<\/a>. Please feel free to download and use.<\/p>\n<h3>The Git Repo Design<\/h3>\n<p>You will have two Git repos:<\/p>\n<p><a href=\"https:\/\/aidanfinn.com\/wp-content\/uploads\/2021\/12\/Repos-And-Resources.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-22504\" src=\"https:\/\/aidanfinn.com\/wp-content\/uploads\/2021\/12\/Repos-And-Resources.png\" alt=\"\" width=\"599\" height=\"450\" srcset=\"https:\/\/aidanfinn.com\/wp-content\/uploads\/2021\/12\/Repos-And-Resources.png 1208w, https:\/\/aidanfinn.com\/wp-content\/uploads\/2021\/12\/Repos-And-Resources-300x225.png 300w, https:\/\/aidanfinn.com\/wp-content\/uploads\/2021\/12\/Repos-And-Resources-1024x769.png 1024w, https:\/\/aidanfinn.com\/wp-content\/uploads\/2021\/12\/Repos-And-Resources-768x577.png 768w, https:\/\/aidanfinn.com\/wp-content\/uploads\/2021\/12\/Repos-And-Resources-1200x901.png 1200w\" sizes=\"auto, (max-width: 599px) 85vw, 599px\" \/><\/a><\/p>\n<ol>\n<li>The first repo is for the hub. This repo will contain the <a href=\"https:\/\/github.com\/aidanfinn\/SharedAzureFirewall\/blob\/main\/BicepDevSecOps\/hub\/platform\/hub.bicep\" target=\"_blank\" rel=\"noopener\">code for the hub<\/a>, including:\n<ul>\n<li>The hub VNet.<\/li>\n<li>The Hub VNet Gateway.<\/li>\n<li>The GatewaySubnet Route Table.<\/li>\n<li>The Azure Firewall.<\/li>\n<li>The Azure Firewall Policy that manages the Azure Firewall.<\/li>\n<\/ul>\n<\/li>\n<li>The second repo is for the spoke. This skeleton example workload contains:\n<ul>\n<li><a href=\"https:\/\/github.com\/aidanfinn\/SharedAzureFirewall\/blob\/main\/BicepDevSecOps\/spoke1\/platform\/spoke1-network.bicep\" target=\"_blank\" rel=\"noopener\">The spoke VNet, the route table, an NSG, and a peering connection to the hub<\/a>.<\/li>\n<li><a href=\"https:\/\/github.com\/aidanfinn\/SharedAzureFirewall\/blob\/main\/BicepDevSecOps\/spoke1\/platform\/spoke1-hubpeering.bicep\" target=\"_blank\" rel=\"noopener\">A peering connection from the hub to the spoke<\/a> to be deployed to the hub.<\/li>\n<li><a href=\"https:\/\/github.com\/aidanfinn\/SharedAzureFirewall\/blob\/main\/BicepDevSecOps\/spoke1\/platform\/spoke1-hubrouting.bicep\" target=\"_blank\" rel=\"noopener\">A route to be added to the hub GatewaySubnet Route Table<\/a>.<\/li>\n<li><a href=\"https:\/\/github.com\/aidanfinn\/SharedAzureFirewall\/blob\/main\/BicepDevSecOps\/spoke1\/platform\/spoke1-hubfirewall.bicep\" target=\"_blank\" rel=\"noopener\">A Rules Collection Group that contains the firewall rules for the workload<\/a> that will be written to the hub Azure Firewall Policy<\/li>\n<li>The workload resources (not included in my code)<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3>Action\/Pipeline Permissions<\/h3>\n<p><em>I have written a more detailed update on this section, which can be found <a href=\"https:\/\/aidanfinn.com\/?p=22525\" target=\"_blank\" rel=\"noopener\">here<\/a>.\u00a0<\/em><\/p>\n<p>Each Git repo needs to authenticate with Azure to deploy\/modify resources. <a href=\"https:\/\/aidanfinn.com\/?p=21878\" target=\"_blank\" rel=\"noopener\">Each repo should have a service principal in Azure AD<\/a>. That service principal will be used to authenticate the deployment, executed by a GitHub action or a DevOps pipeline. You should restrict what rights the service principal will require. I haven&#8217;t worked out the exact minimum permissions, but the high-level requirements are documented below:<\/p>\n<p><a href=\"https:\/\/aidanfinn.com\/wp-content\/uploads\/2021\/12\/Service-Principal-Permissions-Expanded.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-22534\" src=\"https:\/\/aidanfinn.com\/wp-content\/uploads\/2021\/12\/Service-Principal-Permissions-Expanded.png\" alt=\"\" width=\"956\" height=\"542\" srcset=\"https:\/\/aidanfinn.com\/wp-content\/uploads\/2021\/12\/Service-Principal-Permissions-Expanded.png 956w, https:\/\/aidanfinn.com\/wp-content\/uploads\/2021\/12\/Service-Principal-Permissions-Expanded-300x170.png 300w, https:\/\/aidanfinn.com\/wp-content\/uploads\/2021\/12\/Service-Principal-Permissions-Expanded-768x435.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>Trunk Branch Protection &amp;\u00a0 Pull Request<\/h2>\n<p>Some of you might be worried now &#8211; what&#8217;s to stop a developer\/operator working on Workload A from accidentally creating rules that affect Workload X?<\/p>\n<p>This is exactly why you implement standard practices on the Git repos:<\/p>\n<ul>\n<li><strong>Protect the Trunk branch<\/strong>: This means that no one can just update the version of the code that is deployed to your firewall or hub. If you want to create an updated, you have to create a branch of the trunk, make your edits in that trunk, and submit the changes to be merged into trunk as a pull request.<\/li>\n<li><strong>Enable pull request reviews<\/strong>: Select a panel of people that will review changes that are submitted as pull requests to the trunk. In our scenario, this should include the firewall admin(s), security admin(s), network admin(s), and maybe the platform &amp; workload architects.<\/li>\n<\/ul>\n<p>Now, I can only submit a suggested set of rules (and route\/peering) changes that must be approved by the necessary people. I can still create my code without delay, but a change control and rollback process has taken control. Obviously, this means that there should be SLAs on the review\/approval process and guidance on pull request, approval, and rejection actions.<\/p>\n<h2>And There You Have It<\/h2>\n<p>Now you have the design and the Bicep code to enable DevSecOps with Azure Firewall.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this post, I will share how you can implement DevSecOps with Azure Firewall, with links to a bunch of working Bicep files to deploy the infrastructure-as-code (IaC) templates. This example uses a &#8220;legacy&#8221; hub and spoke &#8211; one where the hub is VNet-based and not based on Azure Virtual WAN Hub. I&#8217;ll try to &hellip; <a href=\"https:\/\/aidanfinn.com\/?p=22495\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Enabling DevSecOps with Azure Firewall&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":19553,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"_wpcom_ai_launchpad_first_post":false,"footnotes":""},"categories":[5],"tags":[170,306,482,480,242,484,433,483,431,325,434,485,289,281,437],"class_list":["post-22495","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure","tag-azure","tag-azure-firewall","tag-bicep","tag-devsecops","tag-firewall","tag-gatewaysubnet","tag-hub","tag-iac","tag-infrastructure-as-code","tag-route-table","tag-spoke","tag-user-defined-route","tag-virtual-network","tag-vnet","tag-vnet-peering"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"This post provides an example of how to implement DevSecOps with Azure Firewall, with the Bicep code and a Git repo and action\/pipeline design.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"AFinn\"\/>\n\t<meta name=\"google-site-verification\" content=\"TDKjbi2McB2eLIfL6KwPB3aQqv5E-mbcb2QYIcovGaI\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/aidanfinn.com\/?p=22495\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_GB\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Aidan Finn, IT Pro - A blog covering Azure, Hyper-V, Windows Server, desktop, systems management, deployment, and so on ...\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Enabling DevSecOps with Azure Firewall | Aidan Finn, IT Pro\" \/>\n\t\t<meta property=\"og:description\" content=\"This post provides an example of how to implement DevSecOps with Azure Firewall, with the Bicep code and a Git repo and action\/pipeline design.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/aidanfinn.com\/?p=22495\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2021-12-13T16:02:36+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2021-12-21T11:59:49+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@joe_elway\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Enabling DevSecOps with Azure Firewall | Aidan Finn, IT Pro\" \/>\n\t\t<meta name=\"twitter:description\" content=\"This post provides an example of how to implement DevSecOps with Azure Firewall, with the Bicep code and a Git repo and action\/pipeline design.\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@joe_elway\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?p=22495#article\",\"name\":\"Enabling DevSecOps with Azure Firewall | Aidan Finn, IT Pro\",\"headline\":\"Enabling DevSecOps with Azure Firewall\",\"author\":{\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?author=1#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/aidanfinn.com\\\/wp-content\\\/uploads\\\/2016\\\/06\\\/firewall.png\",\"width\":3200,\"height\":1786},\"datePublished\":\"2021-12-13T16:02:36+00:00\",\"dateModified\":\"2021-12-21T11:59:49+00:00\",\"inLanguage\":\"en-GB\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?p=22495#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?p=22495#webpage\"},\"articleSection\":\"Azure, Azure, Azure Firewall, Bicep, DevSecOps, Firewall, GatewaySubnet, Hub, IaC, Infrastructure-as-Code, Route Table, Spoke, User-Defined Route, Virtual Network, VNet, VNet Peering\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?p=22495#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/aidanfinn.com#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/aidanfinn.com\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?cat=5#listItem\",\"name\":\"Azure\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?cat=5#listItem\",\"position\":2,\"name\":\"Azure\",\"item\":\"https:\\\/\\\/aidanfinn.com\\\/?cat=5\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?p=22495#listItem\",\"name\":\"Enabling DevSecOps with Azure Firewall\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/aidanfinn.com#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?p=22495#listItem\",\"position\":3,\"name\":\"Enabling DevSecOps with Azure Firewall\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?cat=5#listItem\",\"name\":\"Azure\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/#person\",\"name\":\"AFinn\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?p=22495#personImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/65fde4aa9f2ab1cf1514ae320a37ec682d9398ce5791d3c2dd1e8670a71ceea0?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"AFinn\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?author=1#author\",\"url\":\"https:\\\/\\\/aidanfinn.com\\\/?author=1\",\"name\":\"AFinn\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?p=22495#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/65fde4aa9f2ab1cf1514ae320a37ec682d9398ce5791d3c2dd1e8670a71ceea0?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"AFinn\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?p=22495#webpage\",\"url\":\"https:\\\/\\\/aidanfinn.com\\\/?p=22495\",\"name\":\"Enabling DevSecOps with Azure Firewall | Aidan Finn, IT Pro\",\"description\":\"This post provides an example of how to implement DevSecOps with Azure Firewall, with the Bicep code and a Git repo and action\\\/pipeline design.\",\"inLanguage\":\"en-GB\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?p=22495#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?author=1#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?author=1#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/aidanfinn.com\\\/wp-content\\\/uploads\\\/2016\\\/06\\\/firewall.png\",\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?p=22495\\\/#mainImage\",\"width\":3200,\"height\":1786},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/?p=22495#mainImage\"},\"datePublished\":\"2021-12-13T16:02:36+00:00\",\"dateModified\":\"2021-12-21T11:59:49+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/#website\",\"url\":\"https:\\\/\\\/aidanfinn.com\\\/\",\"name\":\"Aidan Finn, IT Pro\",\"description\":\"A blog covering Azure, Hyper-V, Windows Server, desktop, systems management, deployment, and so on ...\",\"inLanguage\":\"en-GB\",\"publisher\":{\"@id\":\"https:\\\/\\\/aidanfinn.com\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Enabling DevSecOps with Azure Firewall | Aidan Finn, IT Pro","description":"This post provides an example of how to implement DevSecOps with Azure Firewall, with the Bicep code and a Git repo and action\/pipeline design.","canonical_url":"https:\/\/aidanfinn.com\/?p=22495","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"TDKjbi2McB2eLIfL6KwPB3aQqv5E-mbcb2QYIcovGaI","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/aidanfinn.com\/?p=22495#article","name":"Enabling DevSecOps with Azure Firewall | Aidan Finn, IT Pro","headline":"Enabling DevSecOps with Azure Firewall","author":{"@id":"https:\/\/aidanfinn.com\/?author=1#author"},"publisher":{"@id":"https:\/\/aidanfinn.com\/#person"},"image":{"@type":"ImageObject","url":"https:\/\/aidanfinn.com\/wp-content\/uploads\/2016\/06\/firewall.png","width":3200,"height":1786},"datePublished":"2021-12-13T16:02:36+00:00","dateModified":"2021-12-21T11:59:49+00:00","inLanguage":"en-GB","mainEntityOfPage":{"@id":"https:\/\/aidanfinn.com\/?p=22495#webpage"},"isPartOf":{"@id":"https:\/\/aidanfinn.com\/?p=22495#webpage"},"articleSection":"Azure, Azure, Azure Firewall, Bicep, DevSecOps, Firewall, GatewaySubnet, Hub, IaC, Infrastructure-as-Code, Route Table, Spoke, User-Defined Route, Virtual Network, VNet, VNet Peering"},{"@type":"BreadcrumbList","@id":"https:\/\/aidanfinn.com\/?p=22495#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/aidanfinn.com#listItem","position":1,"name":"Home","item":"https:\/\/aidanfinn.com","nextItem":{"@type":"ListItem","@id":"https:\/\/aidanfinn.com\/?cat=5#listItem","name":"Azure"}},{"@type":"ListItem","@id":"https:\/\/aidanfinn.com\/?cat=5#listItem","position":2,"name":"Azure","item":"https:\/\/aidanfinn.com\/?cat=5","nextItem":{"@type":"ListItem","@id":"https:\/\/aidanfinn.com\/?p=22495#listItem","name":"Enabling DevSecOps with Azure Firewall"},"previousItem":{"@type":"ListItem","@id":"https:\/\/aidanfinn.com#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/aidanfinn.com\/?p=22495#listItem","position":3,"name":"Enabling DevSecOps with Azure Firewall","previousItem":{"@type":"ListItem","@id":"https:\/\/aidanfinn.com\/?cat=5#listItem","name":"Azure"}}]},{"@type":"Person","@id":"https:\/\/aidanfinn.com\/#person","name":"AFinn","image":{"@type":"ImageObject","@id":"https:\/\/aidanfinn.com\/?p=22495#personImage","url":"https:\/\/secure.gravatar.com\/avatar\/65fde4aa9f2ab1cf1514ae320a37ec682d9398ce5791d3c2dd1e8670a71ceea0?s=96&d=mm&r=g","width":96,"height":96,"caption":"AFinn"}},{"@type":"Person","@id":"https:\/\/aidanfinn.com\/?author=1#author","url":"https:\/\/aidanfinn.com\/?author=1","name":"AFinn","image":{"@type":"ImageObject","@id":"https:\/\/aidanfinn.com\/?p=22495#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/65fde4aa9f2ab1cf1514ae320a37ec682d9398ce5791d3c2dd1e8670a71ceea0?s=96&d=mm&r=g","width":96,"height":96,"caption":"AFinn"}},{"@type":"WebPage","@id":"https:\/\/aidanfinn.com\/?p=22495#webpage","url":"https:\/\/aidanfinn.com\/?p=22495","name":"Enabling DevSecOps with Azure Firewall | Aidan Finn, IT Pro","description":"This post provides an example of how to implement DevSecOps with Azure Firewall, with the Bicep code and a Git repo and action\/pipeline design.","inLanguage":"en-GB","isPartOf":{"@id":"https:\/\/aidanfinn.com\/#website"},"breadcrumb":{"@id":"https:\/\/aidanfinn.com\/?p=22495#breadcrumblist"},"author":{"@id":"https:\/\/aidanfinn.com\/?author=1#author"},"creator":{"@id":"https:\/\/aidanfinn.com\/?author=1#author"},"image":{"@type":"ImageObject","url":"https:\/\/aidanfinn.com\/wp-content\/uploads\/2016\/06\/firewall.png","@id":"https:\/\/aidanfinn.com\/?p=22495\/#mainImage","width":3200,"height":1786},"primaryImageOfPage":{"@id":"https:\/\/aidanfinn.com\/?p=22495#mainImage"},"datePublished":"2021-12-13T16:02:36+00:00","dateModified":"2021-12-21T11:59:49+00:00"},{"@type":"WebSite","@id":"https:\/\/aidanfinn.com\/#website","url":"https:\/\/aidanfinn.com\/","name":"Aidan Finn, IT Pro","description":"A blog covering Azure, Hyper-V, Windows Server, desktop, systems management, deployment, and so on ...","inLanguage":"en-GB","publisher":{"@id":"https:\/\/aidanfinn.com\/#person"}}]},"og:locale":"en_GB","og:site_name":"Aidan Finn, IT Pro - A blog covering Azure, Hyper-V, Windows Server, desktop, systems management, deployment, and so on ...","og:type":"article","og:title":"Enabling DevSecOps with Azure Firewall | Aidan Finn, IT Pro","og:description":"This post provides an example of how to implement DevSecOps with Azure Firewall, with the Bicep code and a Git repo and action\/pipeline design.","og:url":"https:\/\/aidanfinn.com\/?p=22495","article:published_time":"2021-12-13T16:02:36+00:00","article:modified_time":"2021-12-21T11:59:49+00:00","twitter:card":"summary","twitter:site":"@joe_elway","twitter:title":"Enabling DevSecOps with Azure Firewall | Aidan Finn, IT Pro","twitter:description":"This post provides an example of how to implement DevSecOps with Azure Firewall, with the Bicep code and a Git repo and action\/pipeline design.","twitter:creator":"@joe_elway"},"aioseo_meta_data":{"post_id":"22495","title":null,"description":"This post provides an example of how to implement DevSecOps with Azure Firewall, with the Bicep code and a Git repo and action\/pipeline design.","keywords":[],"keyphrases":{"focus":{"keyphrase":"DevSecOps","score":78,"analysis":{"keyphraseInTitle":{"title":"Focus Keyphrase in SEO title","description":"Focus Keyphrase found in SEO title.","score":9,"maxScore":9,"error":0},"keyphraseInDescription":{"title":"Focus keyphrase in meta description","description":"Focus keyphrase found in meta description.","score":9,"maxScore":9,"error":0},"keyphraseInURL":[],"keyphraseLength":{"title":"Focus keyphrase length","description":"Good job!","score":9,"maxScore":9,"error":0,"length":1},"keyphraseInIntroduction":{"title":"Focus keyphrase in introduction","description":"Your Focus keyphrase appears in the first paragraph. Well done!","score":9,"maxScore":9,"error":0},"keyphraseInSubHeadings":{"title":"Focus Keyphrase in Subheadings","description":"Use more focus keyphrases in your H2 and H3 subheadings!","score":3,"maxScore":9,"error":1},"keyphraseInImageAlt":{"title":"Focus keyphrase in image alt attributes","description":"Focus keyphrase not found in image alt attribute(s). Add an image with your Focus keyphrase as alt text.","score":3,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":[],"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":"{\"article\":{\"articleType\":\"BlogPosting\"},\"course\":{\"name\":\"\",\"description\":\"\",\"provider\":\"\"},\"faq\":{\"pages\":[]},\"product\":{\"reviews\":[]},\"recipe\":{\"ingredients\":[],\"instructions\":[],\"keywords\":[]},\"software\":{\"reviews\":[],\"operatingSystems\":[]},\"webPage\":{\"webPageType\":\"WebPage\"}}","pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":{"locations":{"business":{"name":"","businessType":"","image":"","areaServed":"","urls":{"website":"","aboutPage":"","contactPage":""},"address":{"streetLine1":"","streetLine2":"","zipCode":"","city":"","state":"","country":"","addressFormat":"#streetLineOne\n#streetLineTwo\n#city, #state #zipCode"},"contact":{"email":"","phone":"","phoneFormatted":"","fax":"","faxFormatted":""},"ids":{"vat":"","tax":"","chamberOfCommerce":""},"payment":{"priceRange":"","currenciesAccepted":"","methods":""}}},"openingHours":{"useDefaults":true,"show":true,"alwaysOpen":false,"use24hFormat":false,"timezone":"","labels":{"closed":"","alwaysOpen":""},"days":{"monday":{"open24h":false,"closed":false,"openTime":"09:00","closeTime":"17:00"},"tuesday":{"open24h":false,"closed":false,"openTime":"09:00","closeTime":"17:00"},"wednesday":{"open24h":false,"closed":false,"openTime":"09:00","closeTime":"17:00"},"thursday":{"open24h":false,"closed":false,"openTime":"09:00","closeTime":"17:00"},"friday":{"open24h":false,"closed":false,"openTime":"09:00","closeTime":"17:00"},"saturday":{"open24h":false,"closed":false,"openTime":"09:00","closeTime":"17:00"},"sunday":{"open24h":false,"closed":false,"openTime":"09:00","closeTime":"17:00"}}}},"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-12-13 15:17:20","updated":"2025-06-04 17:33:52","seo_analyzer_scan_date":null,"focus_keyword":"DevSecOps","additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/aidanfinn.com\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/aidanfinn.com\/?cat=5\" title=\"Azure\">Azure<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tEnabling DevSecOps with Azure Firewall\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/aidanfinn.com"},{"label":"Azure","link":"https:\/\/aidanfinn.com\/?cat=5"},{"label":"Enabling DevSecOps with Azure Firewall","link":"https:\/\/aidanfinn.com\/?p=22495"}],"amp_enabled":true,"jetpack_featured_media_url":"https:\/\/aidanfinn.com\/wp-content\/uploads\/2016\/06\/firewall.png","_links":{"self":[{"href":"https:\/\/aidanfinn.com\/index.php?rest_route=\/wp\/v2\/posts\/22495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aidanfinn.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aidanfinn.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aidanfinn.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aidanfinn.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=22495"}],"version-history":[{"count":21,"href":"https:\/\/aidanfinn.com\/index.php?rest_route=\/wp\/v2\/posts\/22495\/revisions"}],"predecessor-version":[{"id":22544,"href":"https:\/\/aidanfinn.com\/index.php?rest_route=\/wp\/v2\/posts\/22495\/revisions\/22544"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aidanfinn.com\/index.php?rest_route=\/wp\/v2\/media\/19553"}],"wp:attachment":[{"href":"https:\/\/aidanfinn.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=22495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aidanfinn.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=22495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aidanfinn.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=22495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}