<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/">

<channel>
	<title>Azure &#8211; Numino Labs</title>
	<atom:link href="https://numinolabs.com/tag/azure/feed/" rel="self" type="application/rss+xml" />
	<link>https://numinolabs.com</link>
	<description>People &#124; Technology &#124; Solutions</description>
	<lastBuildDate>Thu, 30 Jan 2025 09:25:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.2</generator>

<image>
	<url>https://numinolabs.com/wp-content/uploads/2024/09/cropped-icon-32x32.png</url>
	<title>Azure &#8211; Numino Labs</title>
	<link>https://numinolabs.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Securing DevOps Pipelines in Azure: From Code to Cloud</title>
		<link>https://numinolabs.com/product-security/securing-devops-pipelines-in-azure-from-code-to-cloud/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=securing-devops-pipelines-in-azure-from-code-to-cloud</link>
					<comments>https://numinolabs.com/product-security/securing-devops-pipelines-in-azure-from-code-to-cloud/#respond</comments>
		
		<dc:creator><![CDATA[Yogesh Morankar]]></dc:creator>
		<pubDate>Mon, 27 Jan 2025 10:58:12 +0000</pubDate>
				<category><![CDATA[Product Security]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[BestPractices]]></category>
		<category><![CDATA[DevOps]]></category>
		<guid isPermaLink="false">https://numinolabs.com/design/blended-mode-of-deploying-websites-on-aws-copy/</guid>

					<description><![CDATA[Introduction Recent studies show that 62% of organizations have experienced DevOps pipeline breaches due to inadequate security measures. Securing DevOps pipelines is essential to... <br><a href="https://numinolabs.com/product-security/securing-devops-pipelines-in-azure-from-code-to-cloud/" class="mil-link mil-mt-30"><span>Read more</span><i class="fas fa-arrow-right"></i></a>]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">Introduction</h3>



<p>Recent studies show that 62% of organizations have experienced DevOps pipeline breaches due to inadequate security measures.</p>



<p>Securing DevOps pipelines is essential to protect your software delivery process from threats and vulnerabilities. Pipelines act as the backbone of continuous integration and delivery (CI/CD), handling sensitive information like source code, credentials, and access tokens. Without robust security measures, these pipelines become attractive targets for attackers seeking to inject malicious code, steal intellectual property, or disrupt services.</p>



<p>By embedding security into every stage—from code commits to cloud deployment—you mitigate risks like data breaches, unauthorized access, and compliance violations. A secure pipeline ensures your software is not only delivered quickly but also remains reliable, confidential, and trustworthy for end users.</p>



<h3 class="wp-block-heading"><strong>Understanding consequences of unsecured DevOps</strong></h3>



<p>Unsecured DevOps pipelines pose significant risks that can compromise the integrity, confidentiality, and availability of your systems. Some key risks include Data Leaks, Unauthorized Access to Pipeline and Artifacts, Supply Chain Attacks etc.<br></p>



<h4 class="wp-block-heading"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color">Data Leaks</mark></h4>



<ul class="wp-block-list">
<li><strong>Sensitive Information Exposure</strong>: Pipelines often handle credentials, API keys, and private configurations. Without proper encryption or restricted access, these can be leaked, leading to unauthorized access.</li>



<li><strong>Source Code Theft</strong>: Exposed repositories can allow attackers to access proprietary code, intellectual property, or customer data.</li>



<li>E.g. If you are using Default agent machines provided by different DevOps tools like GitHub, Azure then they are more likely to result in Data leaks and other issues. Because these agents are globally distributed and shared across multiple customers/applications, using these agents is Highest Risk.</li>
</ul>



<h4 class="wp-block-heading"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color">Unauthorized Access</mark></h4>



<ul class="wp-block-list">
<li><strong>Compromised Build Systems</strong>: Attackers may exploit weak authentication or unpatched vulnerabilities to gain access to CI/CD systems.</li>



<li><strong>Privilege Escalation</strong>: Misconfigured roles or permissions may allow unauthorized users to execute actions beyond their intended scope.</li>
</ul>



<p>E.g. Most of the time we do not treat our self hosted agents as our data storage which results in weak access mechanisms and open surface for cyber attacks. While Designing the DevOps pipelines we should make sure that we consider the Pipelines as part of our application, i.e. its resources should be accessible within the same restricted area as your application and not outside.<br></p>



<h4 class="wp-block-heading"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color">Supply Chain Attacks</mark></h4>



<ul class="wp-block-list">
<li><strong>Injection of Malicious Code</strong>: Attackers can compromise build artifacts, inject malicious dependencies, or tamper with code during deployment.</li>



<li><strong>Downstream Impact</strong>: Infected pipelines can deploy compromised applications to production, affecting users and linked systems.</li>
</ul>



<p>By addressing these risks through robust security practices, such as securing credentials, implementing least privilege, and using trusted tools, you can ensure that your DevOps pipelines remain resilient and trustworthy.<br></p>



<h3 class="wp-block-heading">What should we do ?</h3>



<h4 class="wp-block-heading"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color">Setup Self Hosted Agent</mark></h4>



<p>To avoid these issues with Default Agent Machines, you can use self hosted agents. Most of the DevOps services provide the configuration to add Self Hosted Runners/Agents to the Pipelines.&nbsp;</p>



<p>E.g. Setup a Self Hosted Agent in your environment and use these self hosted agents instead of Public Agents. Here are some references that you can use;</p>



<ul class="wp-block-list">
<li>Github : <a href="https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners">https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners</a></li>



<li>Azure DevOps: <a href="https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/agents?view=azure-devops&amp;tabs=yaml%2Cbrowser#self-hosted-agents">https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/agents?view=azure-devops&amp;tabs=yaml%2Cbrowser#self-hosted-agents</a></li>
</ul>



<p>This will help you to run the build &amp; deployment activities from the secure VM’s in your environment instead of Public Agents. This way your data/application/secrets never leave your environment and keep safe on these self hosted agents.</p>



<h4 class="wp-block-heading"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color">Setup Private Virtual Networks for your Self Hosted Agents</mark></h4>



<p>Let me Help you with the Example here;</p>


<div class="wp-block-image lightbox-trigger">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="588" height="307" src="https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-16-39-04.png" alt="" class="wp-image-7634" srcset="https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-16-39-04.png 588w, https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-16-39-04-300x157.png 300w, https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-16-39-04-200x104.png 200w, https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-16-39-04-400x209.png 400w" sizes="(max-width: 588px) 100vw, 588px" /></figure></div>


<p class="has-text-align-center">Figure 2.1 Sample Private Virtual Network For Application with DevOps Agents</p>



<p>In the diagram <a href="https://docs.google.com/document/d/15_naOW9Oo-VyhPKNj2hNuKyVG8I9aGhKvGlKYcLFii4/edit?tab=t.0#heading=h.ad9gkus3oo24">figure 2.1</a> above you can see that self hosted agents are deployed in the same Vnet as other resources to avoid any communication over the Public internet. Basically</p>



<p>There are options where you can choose to set up a separate Private Vnet for self hosted agents and peer the network with your application network for access based on the Organizational size and policies. Where only limited traffic is allowed between the peered network.&nbsp;</p>



<p>Again, the purpose here is to keep self hosted agents inside the private networks and use these agents in your pipelines instead of global agents.</p>



<h4 class="wp-block-heading"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color">Setup Jumpbox to access private networks</mark></h4>



<p>When we set up the private networks, there are ways to access these networks like through jumpbox (refer<a href="https://docs.google.com/document/d/15_naOW9Oo-VyhPKNj2hNuKyVG8I9aGhKvGlKYcLFii4/edit?tab=t.0#heading=h.ddqwq3qrw8i2"> figure 2.2</a>). Jumpbox is the machine through which you can expose an endpoint to connect to these networks for troubleshooting purposes. In cloud there are also services like in Azure we have Bastion Host service for the same purpose.&nbsp;</p>


<div class="wp-block-image lightbox-trigger">
<figure class="aligncenter size-full"><img decoding="async" width="583" height="329" src="https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-16-42-36.png" alt="" class="wp-image-7635" srcset="https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-16-42-36.png 583w, https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-16-42-36-300x169.png 300w, https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-16-42-36-200x113.png 200w, https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-16-42-36-400x226.png 400w" sizes="(max-width: 583px) 100vw, 583px" /></figure></div>


<h4 class="wp-block-heading"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color">Setup Network Firewall Rules or Network Security Groups</mark></h4>



<p>You can connect to this machine with your user identities with limited access and then you have access to the resources inside the network. We can configure the Firewalls and Network Security groups for securing these jumpbox and hardoning of the network.</p>


<div class="wp-block-image lightbox-trigger">
<figure class="aligncenter size-full"><img decoding="async" width="949" height="389" src="https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-17-01-26.png" alt="" class="wp-image-7637" srcset="https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-17-01-26.png 949w, https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-17-01-26-300x123.png 300w, https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-17-01-26-768x315.png 768w, https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-17-01-26-200x82.png 200w, https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-17-01-26-400x164.png 400w, https://numinolabs.com/wp-content/uploads/2025/01/Screenshot-from-2025-01-27-17-01-26-800x328.png 800w" sizes="(max-width: 949px) 100vw, 949px" /></figure></div>


<p class="has-text-align-center">Figure 2.3 Sample Network Security Rules for Self Hosted Agent</p>



<p>In the example above <a href="https://docs.google.com/document/d/15_naOW9Oo-VyhPKNj2hNuKyVG8I9aGhKvGlKYcLFii4/edit?tab=t.0#heading=h.5ynob0poyiv8">figure 2.3</a>, we have a network security group created to allow only SSH connection to the jumpbox, that too specifies inbound IP’s which are organizational IP’s. That means, you can connect to these machines only through your organizational networks and no public access is granted to these machines.&nbsp;</p>



<h4 class="wp-block-heading"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color">Setup Private Repositories or Private Container Registries to store pipeline artifacts</mark></h4>



<p>Supply chain attacks pose a significant risk to DevOps pipelines. Protecting pipeline artifacts, such as OS images and application containers, is critical to ensuring the security of your deployment process.</p>



<h4 class="wp-block-heading"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color">Steps to Set Up Private Repositories or Container Registries</mark></h4>



<ol class="wp-block-list">
<li><strong>Choose a Cloud Service:</strong><strong><br></strong>Select a private repository or registry service. Examples:
<ul class="wp-block-list">
<li>Azure Container Registry (ACR)</li>



<li>Amazon Elastic Container Registry (ECR)</li>



<li>Google Container Registry (GCR)</li>
</ul>
</li>



<li><strong>Store Artifacts Securely:</strong><strong><br></strong>Store your OS images, Docker container images, and other build artifacts in these registries.</li>



<li><strong>Enable Private Endpoints:</strong><strong><br></strong>Configure the service to use private endpoints to ensure communication occurs over your virtual network (VNet) and not the public internet.</li>



<li><strong>Integrate with CI/CD Pipeline:</strong><strong><br></strong>Update your CI/CD pipeline to authenticate and interact with the private registry.</li>
</ol>



<h4 class="wp-block-heading" id="-lightbox-trigger"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color">Setup credentials and sensitive information as Secrets</mark></h4>



<p>Setup environment variables or critical credentials as Secrets and allow access to them only through pipelines with user defined identities or system managed identities. These identities should have limited access to read the repo code or other artifacts that we access in the pipelines.</p>



<p>E.g. Nowadays most of the solutions like Github, Azure, AWS&nbsp; provide options to set up environment variables and secrets.&nbsp;</p>



<ul class="wp-block-list">
<li>Github Secrets: <a href="https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions">https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions</a></li>



<li>Azure Devops Secrets: <a href="https://learn.microsoft.com/en-us/azure/devops/pipelines/process/set-secret-variables?view=azure-devops&amp;tabs=yaml%2Cbash">https://learn.microsoft.com/en-us/azure/devops/pipelines/process/set-secret-variables?view=azure-devops&amp;tabs=yaml%2Cbash</a></li>
</ul>



<p>The major difference between environment variables and secrets is that variables are not masked and printable in pipelines while the secrets are masked and not printable in the pipelines.&nbsp;</p>



<p>Though there are ways to print secrets, which I will say are bad coding practices.</p>



<p>We hope this blog provides a clear understanding of the essential secure practices that can be adopted in your projects. Security is a shared responsibility, and we invite you to share your experiences, insights, or suggestions on this topic. Together, we can learn, innovate, and strengthen our ability to deliver a secure and trustworthy environment for our customers and stakeholders.</p>



<p><br></p>
]]></content:encoded>
					
					<wfw:commentRss>https://numinolabs.com/product-security/securing-devops-pipelines-in-azure-from-code-to-cloud/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<enclosure url="https://numinolabs.com/wp-content/uploads/2025/01/image-1.jpg" length="224972" type="image/jpeg"/><media:content url="https://numinolabs.com/wp-content/uploads/2025/01/image-1.jpg" width="2560" height="1529" medium="image" type="image/jpeg"/>	</item>
	</channel>
</rss>
