<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Azure on Erwin Staal</title>
    <link>https://staal-it.nl/series/azure/</link>
    <description>Recent content in Azure on Erwin Staal</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>KVK: Staal IT, 56920202 - Copyright © 2025</copyright>
    <lastBuildDate>Sun, 03 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://staal-it.nl/series/azure/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Enforcing Microsoft Defender for Cloud Across 30&#43; Subscriptions With Bicep</title>
      <link>https://staal-it.nl/posts/azure-defender-for-cloud-settings/</link>
      <pubDate>Sun, 03 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/azure-defender-for-cloud-settings/</guid>
      <description>&lt;p&gt;Security posture management is one of those things that starts manually and stays manual for too long. Someone enables Defender for Cloud on a subscription in the portal, picks a few plans, saves. Six months later a new subscription appears, nobody remembers exactly which plans were enabled on the others, and the configuration drifts. An audit comes along and suddenly you&amp;rsquo;re comparing screenshots.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Digital Sovereignty in the Microsoft Azure Cloud: Why It Matters More Than Ever</title>
      <link>https://staal-it.nl/posts/digital-sovereignty/</link>
      <pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/digital-sovereignty/</guid>
      <description>With President Trump back in the White House, the topic of digital sovereignty has returned to the center of political and business discussions in Europe. Recent events have shown how dependent we are on non-European hyperscalers like Microsoft and how quickly foreign political decisions can impact European organizations. But what exactly is digital sovereignty, why is it such a hot topic now, and how is Microsoft addressing these concerns in its Azure cloud?</description>
    </item>
    
    <item>
      <title>Installing COTS applications using Azure Gallery VM</title>
      <link>https://staal-it.nl/posts/azure-gallery-vm-app/</link>
      <pubDate>Mon, 03 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/azure-gallery-vm-app/</guid>
      <description>When having the need to install COTS applications (Custom Off-The-Shelf) on virtual machines in Azure, you have multiple options to manage that. One of the options is to use the Azure Gallery VM Applications. As the name implies, its part of Azure Compute Gallery, formally known as Azure Shared Image Gallery. Azure Gallery VM Applications is a feature that simplifies the process of managing and deploying software packages on Virtual Machines (VMs) at scale.</description>
    </item>
    
    <item>
      <title>Get all available patches for VMs on Azure</title>
      <link>https://staal-it.nl/posts/get-all-available-patches-for-vms-on-azure/</link>
      <pubDate>Fri, 20 Oct 2023 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/get-all-available-patches-for-vms-on-azure/</guid>
      <description>Managing patches across many virtual machines (VMs) in an Azure environment is critical for ensuring security and performance. In Azure, we now have a new product: Azure Update Manager. The service can help us keep our machines up-to-date. Implementing a patch schedule is an aspect of maintaining the security and stability of an IT environment. Critical and security patches are often applied to all machines as soon as possible. Updating test machines before production machines is an often-used practice for other patches.</description>
    </item>
    
    <item>
      <title>Checking left over identities in Azure</title>
      <link>https://staal-it.nl/posts/checked-all-permissions-on-a-principal/</link>
      <pubDate>Wed, 20 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/checked-all-permissions-on-a-principal/</guid>
      <description>Recently, I was working on a task where I had to delete a subscription because it was no longer needed. On that subscription, however, there were still some identities having permissions asigned. I wanted to check if those identities were still used in other subscriptions. Turns out there is no easy way to do this. So, I wrote a script to get all the principals on the subscription and check their permissions in all subscriptions in the tenant.</description>
    </item>
    
    <item>
      <title>Creating reusable modules with Bicep, Terraform or Pulumi</title>
      <link>https://staal-it.nl/posts/modularizing-iac-bicep-terraform-pulumi/</link>
      <pubDate>Sun, 12 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/modularizing-iac-bicep-terraform-pulumi/</guid>
      <description>Over the years, I’ve been working with several infrastructure as code tools. One of the things that I always find essential, no matter the tool, is to write readable and maintainable code. One way to do that is to create a proper structure for what you are building. All of the IaC tools I have used allow you to modularize your code somehow. A module is a piece of code responsible for one specific thing.</description>
    </item>
    
    <item>
      <title>Installing multiple VM extensions on an Azure VM using Terraform</title>
      <link>https://staal-it.nl/posts/azure-vm-multiple-vm-extensions-using-terraform/</link>
      <pubDate>Sat, 25 Feb 2023 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/azure-vm-multiple-vm-extensions-using-terraform/</guid>
      <description>&lt;p&gt;In a recent project, we used Azure Datafactory in a closed network and needed to access resources on-premises. That means that you cannot use the Autoresolve runtime of Datafactory. We thus used our own VM and installed the Self Hosted Integration Runtime software using a VM extension. So far, so good. We needed to install another piece of software on that VM a little later in the project. I started adding another VM extension only to find out that you can only install one VM extension per VM on Azure. We needed to find a way to install multiple dependencies on the VM using a single VM extension in a configurable and manageable way. This blog will describe how we did that using Terraform.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Custom Domain on Azure App Service using Terraform and Cloudflare</title>
      <link>https://staal-it.nl/posts/azure-terraform-cloudflare-example/</link>
      <pubDate>Mon, 09 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/azure-terraform-cloudflare-example/</guid>
      <description>&lt;p&gt;The other day, I was building some infrastructure on Azure that contained an Azure App Service. I wanted to use a custom domain so that users can use the application over a nice domain name instead of the *.azurewebsites.net. The infrastructure is built using Terraform; luckily, there is a provider for Cloudflare. Cloudflare is where the domain&amp;rsquo;s DNS is managed. This blog post will walk you through the steps to do all the configuration.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Run a script during deployment with DeploymentScripts in Bicep</title>
      <link>https://staal-it.nl/posts/run-a-script-during-deployment-with-deploymentscripts-in-bicep/</link>
      <pubDate>Wed, 04 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/run-a-script-during-deployment-with-deploymentscripts-in-bicep/</guid>
      <description>On a recent project, I was using Terraform to build some infrastructure. It contained an Azure Web App with a custom domain configured. A custom domain name on a Web App allows you to access it using a friendly URL instead of the &amp;lt;your_name&amp;gt;.azurewebsites.net. In this project, the DNS records for the domain were hosted and managed on Cloudflare. Luckily, Terraform has a provider for both Azure and Terraform, and thus I could write a single module that would create the Web App, set the domain in Cloudflare, and configure the custom domain.</description>
    </item>
    
    <item>
      <title>Passing variables between stages in Azure DevOps pipelines</title>
      <link>https://staal-it.nl/posts/azure-devops-multistage-pass-variables/</link>
      <pubDate>Thu, 03 Mar 2022 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/azure-devops-multistage-pass-variables/</guid>
      <description>&lt;p&gt;The other day I was working on an Infrastructure as Code project that involved deploying an Azure Container registry. That ACR is typically a resource that you deploy just ones in your production environment and not one per environment. You do that because you want container images to be used as immutable artifacts that are progressively deployed across all your environments.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Terraform Azure DevOps to Azure example pipeline</title>
      <link>https://staal-it.nl/posts/azure-terraform-example-pipeline/</link>
      <pubDate>Mon, 14 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/azure-terraform-example-pipeline/</guid>
      <description>&lt;p&gt;I finally had the opportunity to work with Terraform on one of my recent projects. I have been building Infrastructure as Code with ARM templates or Bicep for years. Together with two friends, I even wrote a &lt;a href=&#34;https://www.manning.com/books/azure-infrastructure-as-code&#34;&gt;book&lt;/a&gt; on that! Terraform was always on my list of tools to work with. I had played around with it a little in my spare time but never got the opportunity to put it to use in an actual project. This blog will help you get started!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Functions in ARM Templates</title>
      <link>https://staal-it.nl/posts/functions-in-arm-templates/</link>
      <pubDate>Sat, 16 Oct 2021 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/functions-in-arm-templates/</guid>
      <description>&lt;p&gt;To help build templates quicker, make them more expressive and reusable, there are many built-in functions at your disposal. And even if there isn&amp;rsquo;t a built-in function for your specific scenario, you can always write one on your own. The use of functions introduces pieces of logic into your templates, which can be used from expressions.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Automatically renew the image used in an Azure DevOps private agent</title>
      <link>https://staal-it.nl/posts/automatically-renew-private-agent-images/</link>
      <pubDate>Sun, 25 Jul 2021 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/automatically-renew-private-agent-images/</guid>
      <description>&lt;p&gt;In a previous post, I wrote about creating your own hosted Build and Release agents in Azure DevOps. That process could be improved by regenerating the VM image, for example, every month. By doing that, you stay up-to-date with both the latest versions of all the tools installed as well as with security patches. This post will describe how to do that using an Azure DevOps pipeline which will be triggered monthly.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Configure Azure Security Center using Bicep</title>
      <link>https://staal-it.nl/posts/configure-azure-security-center-using-bicep/</link>
      <pubDate>Fri, 25 Jun 2021 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/configure-azure-security-center-using-bicep/</guid>
      <description>&lt;p&gt;At a few of my recent clients, I&amp;rsquo;m working on moving their infrastructure to code using Bicep. Part of that is always the configuration of Azure Security Center. Things to configure are, for example, the services for which you want to enable Azure Defender or the email notifications. This blog will describe how to do just that.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>ARM template: getting deeply nested resource properties</title>
      <link>https://staal-it.nl/posts/arm-template-reference-not-allowed-in-reference/</link>
      <pubDate>Mon, 15 Mar 2021 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/arm-template-reference-not-allowed-in-reference/</guid>
      <description>&lt;p&gt;The other day I was deploying a private endpoint connected to a KeyVault using an ARM Template. By using a Private Endpoint one can assign a private IP address from your own Virtual Network to an Azure PaaS service like KeyVault, SQL, storage accounts, and others. To resolve the private IP using the service FQDN from within the VNET, I also needed to set an ‘A’-record in the private DNS zone.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Entity Framework Core and Migrations</title>
      <link>https://staal-it.nl/posts/db-per-tenant-catalog-database-ef-core-migrations/</link>
      <pubDate>Thu, 17 Dec 2020 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/db-per-tenant-catalog-database-ef-core-migrations/</guid>
      <description>Entity Framework could be a logical choice when building a .NET Core API that needs to talk to a database. In this blog, I&amp;rsquo;ll show you how to get started with EF and Migrations. We will create the models, the DbContext, and the migrations needed to upgrade your database when introducing changes. We will also see how we can deploy those changes in your Azure DevOps pipeline on each release.</description>
    </item>
    
    <item>
      <title>Database per tenant infrastructure</title>
      <link>https://staal-it.nl/posts/db-per-tenant-catalog-database-infrastructure/</link>
      <pubDate>Wed, 25 Nov 2020 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/db-per-tenant-catalog-database-infrastructure/</guid>
      <description>In the first post in this series, we&amp;rsquo;re going to talk about the infrastructure. We need some database server to host each tenant&amp;rsquo;s database and the shared database that contains information on all the tenants (like which database belongs to whom). We also need infrastructure to host the API on and off course, need something for configuration and secret management.
TL;DR: All templates and the pipeline can be found in my repository.</description>
    </item>
    
    <item>
      <title>Multi tenant app with database-per-tenant</title>
      <link>https://staal-it.nl/posts/database-per-tenant-series/</link>
      <pubDate>Sun, 15 Nov 2020 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/database-per-tenant-series/</guid>
      <description>I recently started building an architecture for a multi-tenant app to support a database per tenant (customer) scenario for one of my customers. Splitting your data in multiple databases like that has a few benefits like easy backup and restore per customer, better security by separation of data, and potential performance benefits. Especially the separation of data was a hard requirement here. I found this to be a nice challenge as it involves many moving parts to get it right.</description>
    </item>
    
    <item>
      <title>Using an Azure Virtual Machine Scale set as Azure DevOps agents</title>
      <link>https://staal-it.nl/posts/using-vm-scale-sets-as-azure-devops-agents/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/using-vm-scale-sets-as-azure-devops-agents/</guid>
      <description>Over the past few weeks, I&amp;rsquo;ve been implementing a few new networking features in Azure for a client. We did that to make our infrastructure more secure. I&amp;rsquo;ve been playing around with VNET&amp;rsquo;s, Private Links, Services Endpoints and Access Restrictions on Azure Web App, SQL databases, Storage and KeyVault. One of the issues I stumbled upon quite quickly was the fact that when you restrict access to a resource, Azure DevOps can&amp;rsquo;t reach that anymore as well.</description>
    </item>
    
    <item>
      <title>Disable Azure Security Center recommendations using ARM Templates</title>
      <link>https://staal-it.nl/posts/override-security-center-default-policies/</link>
      <pubDate>Tue, 08 Sep 2020 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/override-security-center-default-policies/</guid>
      <description>&lt;p&gt;Azure Security Center gives you a great overview of the state of your workloads security hygiene and compliance. I recently got tasked with going through the recommendations, take action, and improve our overall security and compliance status. Some of the recommendations presented to me were in the &amp;lsquo;Enable advanced threat protection&amp;rsquo;-group, like &amp;lsquo;Advanced threat protection should be enabled on Azure App Service plans&amp;rsquo;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>My first look at Azure IoT Hub</title>
      <link>https://staal-it.nl/posts/azure-iot-hub/</link>
      <pubDate>Thu, 03 Sep 2020 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/azure-iot-hub/</guid>
      <description>&lt;p&gt;I recently decided it was time for me to take a shot at passing another few Microsoft exams. While studying for one of them, I noticed that I didn&amp;rsquo;t knew too much about Azure IoT Hub. I had never come across it in my daily job. So I gave myself the following goal: have something that acts as an IoT device that sends data into Azure IoT Hub and have something read that data and does something useful with it. When talking about the data that comes out of IoT Hub we usually split that into a hot and/or cold analytics path, in this blog I&amp;rsquo;ll show you an example of both.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Generating API clients using NSwag and Azure DevOps</title>
      <link>https://staal-it.nl/posts/nswag-client-generation-in-azure-devops/</link>
      <pubDate>Mon, 10 Aug 2020 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/nswag-client-generation-in-azure-devops/</guid>
      <description>&lt;p&gt;Whenever you create an API you probably want to be able to create some documentation around that API. Swagger has been around for a long time and allows you to explore and test your API using a nice UI in the browser. It also provides you with an OpenAPI spec in json format describing your service. OpenAPI is to REST what WSDL is to an SOAP-endpoint. Wouldn&amp;rsquo;t it be cool if you could generate your clients using that spec? Well, you can!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Azure App Configuration and KeyVault</title>
      <link>https://staal-it.nl/posts/azure-app-config-and-azure-keyvault/</link>
      <pubDate>Sun, 26 Jul 2020 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/azure-app-config-and-azure-keyvault/</guid>
      <description>&lt;p&gt;Recently I started on a new project and therefor a whole new application. It&amp;rsquo;s build using .NET Core and like many apps, it needs some configuration that varies between deployments. Azure now has a service called Azure App Configuration that allows you to store and manage your configuration. Combined with Azure KeyVault to store your secrets, we get configuration management nearly for free. Let&amp;rsquo;s dive in!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Autoscaling .NET Core Azure Functions on Kubernetes</title>
      <link>https://staal-it.nl/posts/autoscaling-your-azure-function-on-kubernetes/</link>
      <pubDate>Tue, 16 Jun 2020 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/autoscaling-your-azure-function-on-kubernetes/</guid>
      <description>Everyone who worked with containers on Kubernetes probably agrees that there is a pretty steep learning curve in the beginning. Once you overcome that, you&amp;rsquo;ll find that it&amp;rsquo;s an awesome and very capable product and that it will make your life better (when used in the right context of-course). One area where Kubernetes is not so great is event-based autoscaling. That&amp;rsquo;s where KEDA comes in. KEDA stands for Kubernetes-based Event-driven Autoscaler.</description>
    </item>
    
    <item>
      <title>Securing your Azure SQL DB using Azure Private Link</title>
      <link>https://staal-it.nl/posts/securing-your-azure-db-connection-using-azure-private-link/</link>
      <pubDate>Wed, 27 May 2020 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/securing-your-azure-db-connection-using-azure-private-link/</guid>
      <description>Whenever you create a new SQL Database on the Azure Cloud, one of the first things you probably do is set the &amp;lsquo;Allow Azure services and resources to access this server&amp;rsquo;-switch to &amp;lsquo;Yes&amp;rsquo;. This allows your App Service for example to access your database. It&amp;rsquo;s not very secure however since all an attacker then needs is your connections string. And although you are probably very careful with that, it might just accidentally get public.</description>
    </item>
    
    <item>
      <title>Using an ARM template to deploy your SSL certificate stored in KeyVault on an Web App</title>
      <link>https://staal-it.nl/posts/using-an-arm-template-to-deploy-your-ssl-certificate-stored-in-keyvault-on-an-web-app/</link>
      <pubDate>Sun, 20 Oct 2019 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/using-an-arm-template-to-deploy-your-ssl-certificate-stored-in-keyvault-on-an-web-app/</guid>
      <description>&lt;p&gt;Everyone knows it&amp;rsquo;s completely normal nowadays to have your website loaded over https. Troy Hunt explains why. There are quite some examples out there on how to use Let&amp;rsquo;s Encrypt certificates on your Azure web app, see this one by Henry Been for example. For most of us that&amp;rsquo;s a perfect and free solutions. It doesn&amp;rsquo;t work for all of us however.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Reading secrets from KeyVault in your Azure Cloud Service</title>
      <link>https://staal-it.nl/posts/reading-secrets-from-keyvault-your-azure-cloud-service/</link>
      <pubDate>Fri, 18 Oct 2019 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/reading-secrets-from-keyvault-your-azure-cloud-service/</guid>
      <description>Azure Cloud Service was one of the earliest Platform as a Service offerings by Microsoft Azure. With Cloud Services you can run web applications or run background applications. Since it is a PaaS offering, you dot not need to worry about the issues that comes with IaaS, patching for example and they offer a lot of flexibility. They are not officially deprecated, though Microsoft is pushing for the use of other PaaS offerings.</description>
    </item>
    
    <item>
      <title>Reading secrets from KeyVault in your Azure Web App</title>
      <link>https://staal-it.nl/posts/reading-secrets-from-keyvault-your-azure-web-app/</link>
      <pubDate>Fri, 18 Oct 2019 00:00:00 +0000</pubDate>
      
      <guid>https://staal-it.nl/posts/reading-secrets-from-keyvault-your-azure-web-app/</guid>
      <description>Azure KeyVault is a great Azure offerring that allows you to store for example secrets or certificates. You are currently looking at the first post out of a series of posts on how to grab secrets or certificates from KeyVault in your web applications. This post wil focus on creating the KeyVault, giving access to you Azure Web App and retrieving a secret in two different ways. I will be using an ASP.</description>
    </item>
    
  </channel>
</rss>
