<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Tidjani Belmansour, Ph.D.</title>
    <description>The latest articles on Forem by Tidjani Belmansour, Ph.D. (@tidjani).</description>
    <link>https://forem.com/tidjani</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F17309%2Ffb108f96-574c-4a5b-8320-0603b5d9b037.png</url>
      <title>Forem: Tidjani Belmansour, Ph.D.</title>
      <link>https://forem.com/tidjani</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tidjani"/>
    <language>en</language>
    <item>
      <title>Managing your Azure environment using natural language with Azure Copilot</title>
      <dc:creator>Tidjani Belmansour, Ph.D.</dc:creator>
      <pubDate>Wed, 17 Dec 2025 02:52:27 +0000</pubDate>
      <link>https://forem.com/tidjani/managing-your-azure-environment-using-natural-language-with-azure-copilot-1f5o</link>
      <guid>https://forem.com/tidjani/managing-your-azure-environment-using-natural-language-with-azure-copilot-1f5o</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;“Hey, are you awake? The cheese order app is down.”&lt;br&gt;&lt;br&gt;
&lt;em&gt;— Message received at 03:07 from Leo, Azure admin at the legendary Couic-Couic Cheese Factory.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you’ve ever jumped between &lt;strong&gt;Application Insights, Log Analytics, and Azure Monitor&lt;/strong&gt; like a caffeine-fueled ninja in the middle of the night, you know the drill: logs, metrics, correlations, hypotheses, and that little anxiety slider creeping up by the minute. &lt;strong&gt;Manual troubleshooting&lt;/strong&gt; is the &lt;strong&gt;#1 time thief&lt;/strong&gt; in cloud operations. And when it’s not an incident, it’s a &lt;strong&gt;month-end report&lt;/strong&gt; asking why your Azure bill went up &lt;strong&gt;15%&lt;/strong&gt; (“Did someone leave a &lt;em&gt;Dev-XL-I’ll-Test-But-Forget&lt;/em&gt; VM running?”).&lt;/p&gt;

&lt;p&gt;Welcome to the reality of cloud teams. Good news: &lt;strong&gt;Azure Copilot&lt;/strong&gt; is here to bring simplicity, speed, and a little smile back into the game.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Exactly Is Azure Copilot?
&lt;/h2&gt;

&lt;p&gt;Azure Copilot is &lt;strong&gt;the AI assistant built into Azure&lt;/strong&gt; that lets you &lt;strong&gt;manage your environment in natural language&lt;/strong&gt;. You describe what you want to do, and it helps you &lt;strong&gt;design&lt;/strong&gt;, &lt;strong&gt;implement&lt;/strong&gt;, &lt;strong&gt;operate&lt;/strong&gt;, &lt;strong&gt;optimize&lt;/strong&gt;, and &lt;strong&gt;troubleshoot&lt;/strong&gt; your resources—right inside the &lt;strong&gt;Azure Portal&lt;/strong&gt;, the &lt;strong&gt;mobile app&lt;/strong&gt;, or via &lt;strong&gt;CLI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Leo sums it up perfectly:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“It’s like having a teammate who knows my Azure subscription, speaks my language, and never forgets where that &lt;em&gt;Network Security Group&lt;/em&gt; named &lt;code&gt;NSG-final-v3-definitive&lt;/code&gt; is hiding.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why Copilot and Not Just Any Chatbot?
&lt;/h2&gt;

&lt;p&gt;Sure, you could ask any AI “Why is my app crashing?” But the game-changer here is &lt;strong&gt;context&lt;/strong&gt;. Azure Copilot &lt;strong&gt;sees your environment&lt;/strong&gt; (within your permissions because with great power comes great responsibility), understands your &lt;strong&gt;resources&lt;/strong&gt;, their &lt;strong&gt;state&lt;/strong&gt;, and &lt;strong&gt;configuration&lt;/strong&gt;, and cross-references this with best practices and documentation. The result? &lt;strong&gt;Actionable answers&lt;/strong&gt;, specific to &lt;strong&gt;your tenant&lt;/strong&gt; and &lt;strong&gt;your workloads&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Five Superpowers of Azure Copilot (Tested and Approved by Leo)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1) Design
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;“For a high-availability ordering site with 1-hour disaster recovery, what should I use?”&lt;/em&gt;
Copilot suggests an &lt;strong&gt;architecture&lt;/strong&gt; (availability zones, replication, Front Door/Traffic Manager, etc.), explains &lt;strong&gt;service choices&lt;/strong&gt;, and their impact on &lt;strong&gt;SLA/HA/DR&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2) Implement
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;“Generate a **Bicep&lt;/em&gt;* script for App Service + Key Vault + alert.”*
Copilot can &lt;strong&gt;create scaffolding&lt;/strong&gt;, &lt;strong&gt;fill parameters&lt;/strong&gt;, and &lt;strong&gt;apply best practices&lt;/strong&gt;. Same for &lt;strong&gt;Terraform&lt;/strong&gt; if that's where your preference is.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3) Operate
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;“List all **VMs&lt;/em&gt;* with &lt;strong&gt;RDP&lt;/strong&gt; open, &lt;strong&gt;web apps&lt;/strong&gt; with expired SSL certificates, &lt;strong&gt;blobs&lt;/strong&gt; that are publicly accessible, and resources outside Canada.”*
Copilot gives you &lt;strong&gt;targeted inventories&lt;/strong&gt;, detects &lt;strong&gt;performance anomalies&lt;/strong&gt;, and saves hours of portal spelunking.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4) Optimize
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;“My bill went up 15% last month. Why?”&lt;/em&gt;
Copilot &lt;strong&gt;analyzes cost drivers&lt;/strong&gt;, &lt;strong&gt;forecasts next 3 months&lt;/strong&gt;, &lt;strong&gt;suggests better SKUs&lt;/strong&gt;, and flags forgotten environments. It also helps harden &lt;strong&gt;compliance posture&lt;/strong&gt; via &lt;strong&gt;Policy&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5) Troubleshoot
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;“I’ve got this weird error on my App Service—what does it mean and how do I fix it?”&lt;/em&gt;
Copilot &lt;strong&gt;explains the error&lt;/strong&gt; and &lt;strong&gt;guides resolution&lt;/strong&gt; (config, dependencies, quotas, diagnostics). Goodbye to “why the heck won’t my script work??” moments.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Is It Free?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Yes, current features are free.&lt;/strong&gt; Microsoft says future capabilities &lt;em&gt;might&lt;/em&gt; come with a cost—but nothing concrete yet. For now, enjoy!&lt;/p&gt;




&lt;h2&gt;
  
  
  Security: Let’s Talk About It
&lt;/h2&gt;

&lt;p&gt;Adopting an AI assistant raises legit questions: &lt;strong&gt;access rights&lt;/strong&gt;, &lt;strong&gt;data isolation&lt;/strong&gt;, &lt;strong&gt;traceability&lt;/strong&gt;, &lt;strong&gt;compliance&lt;/strong&gt;. Azure Copilot runs &lt;strong&gt;within Azure’s security model&lt;/strong&gt;, respects &lt;strong&gt;RBAC&lt;/strong&gt;, and only shows what you’re authorized to see. This is often the biggest adoption hurdle—so involve your &lt;strong&gt;security team early&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In a future article, I will cover more about security mechanisms but for now, remember that &lt;strong&gt;Azure Copilot can only perform actions that you are allowed to perform and see data that you are allowed to see.&lt;/strong&gt; &lt;/p&gt;




&lt;h2&gt;
  
  
  How Do You Access It?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Azure Portal&lt;/strong&gt;: Azure Copilot panels appear in supported contexts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Azure Mobile App&lt;/strong&gt;: Handy for quick checks on the go.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI&lt;/strong&gt;: For terminal lovers, Azure Copilot accelerates workflows and suggests commands. This happens through AI Shell (&lt;em&gt;more on that in an upcoming post&lt;/em&gt;).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Will Copilot Steal My Job?
&lt;/h2&gt;

&lt;p&gt;Leo wonders the same (and so do we). &lt;strong&gt;No.&lt;/strong&gt; Copilot doesn’t replace understanding &lt;strong&gt;business priorities&lt;/strong&gt; (or politics…). It &lt;strong&gt;amplifies your impact&lt;/strong&gt; by removing technical friction, so you can focus on &lt;strong&gt;what matters&lt;/strong&gt;: service quality, security, compliance, speed-to-market, and collaboration.&lt;/p&gt;

&lt;p&gt;Think of it as an &lt;strong&gt;assistant&lt;/strong&gt;: it does &lt;strong&gt;real work&lt;/strong&gt;, but &lt;strong&gt;you stay in control&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Couic-Couic Cheese Factory Use Cases (Almost Real)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Incident at 03:07&lt;/strong&gt;: Ordering app is slow.&lt;br&gt;&lt;br&gt;
Copilot spots &lt;strong&gt;CPU spike&lt;/strong&gt; on App Service, correlates with a &lt;strong&gt;function looping over a public blob&lt;/strong&gt; full of HD cheese glamour shots.&lt;br&gt;&lt;br&gt;
👉 Fix: &lt;strong&gt;Throttle + cache + CDN&lt;/strong&gt;, lock blob, update &lt;strong&gt;Policy&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
🕒 Time saved: &lt;strong&gt;90 min&lt;/strong&gt;. Stress avoided: &lt;strong&gt;immeasurable&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Month-end +15% bill&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
Copilot isolates cost increase to &lt;strong&gt;dev/test&lt;/strong&gt; (&lt;em&gt;oversized SKU&lt;/em&gt;, permissive autoscale), suggests &lt;strong&gt;right-sizing&lt;/strong&gt; and &lt;strong&gt;shutdown schedule&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
👉 Fix: Autoscale tuning, cost center tags, budget alerts.&lt;br&gt;&lt;br&gt;
💰 Savings: Significant. Finance loves Leo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Canada-only audit&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
Copilot lists resources outside CA, expired certs, and generates a &lt;strong&gt;remediation plan&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
👉 Fix: Migration, cert renewal, stronger Policy.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What You Can Do Today
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ask concrete questions&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Show me &lt;strong&gt;web apps with expired SSL&lt;/strong&gt;.”
&lt;/li&gt;
&lt;li&gt;“Which &lt;strong&gt;VMs&lt;/strong&gt; have &lt;strong&gt;RDP&lt;/strong&gt; exposed?”
&lt;/li&gt;
&lt;li&gt;“Generate &lt;strong&gt;Bicep&lt;/strong&gt; for &lt;strong&gt;Key Vault + App Service + CPU alert&lt;/strong&gt;.”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Request explanations + fixes&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“I have &lt;strong&gt;error X&lt;/strong&gt; on my &lt;strong&gt;Function App&lt;/strong&gt;—why and how to fix?”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Optimize governance and costs&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Why did my &lt;strong&gt;bill&lt;/strong&gt; increase and how to reduce it?”
&lt;/li&gt;
&lt;li&gt;“Forecast my &lt;strong&gt;costs&lt;/strong&gt; for the next 3 months.”
&lt;/li&gt;
&lt;li&gt;“Help me harden &lt;strong&gt;Policy compliance&lt;/strong&gt;.”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use it in the right context&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Portal for &lt;strong&gt;visibility&lt;/strong&gt; and &lt;strong&gt;actions&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Mobile for &lt;strong&gt;quick checks&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;CLI for &lt;strong&gt;scripted workflows&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  In Short
&lt;/h2&gt;

&lt;p&gt;With Azure Copilot, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Get precise insights&lt;/strong&gt; into &lt;strong&gt;your environment&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discover and learn&lt;/strong&gt; new Azure features without having 12 tabs open.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Perform complex or tedious tasks&lt;/strong&gt; simply by describing them in natural language.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Azure Copilot doesn’t replace human expertise—it &lt;strong&gt;unlocks it&lt;/strong&gt;. And it gives Leo (and you) &lt;strong&gt;more peaceful nights&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Your Turn
&lt;/h2&gt;

&lt;p&gt;Have you tried Azure Copilot yet?&lt;br&gt;&lt;br&gt;
What was your first “aha moment”?&lt;br&gt;&lt;br&gt;
Share it—and let’s turn your use cases into &lt;strong&gt;reusable Copilot prompts playbooks&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎁 Prompt Cheat Sheet
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Design
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;“Suggest an architecture for a high-availability web app with DR in 1 hour.”&lt;/li&gt;
&lt;li&gt;“What Azure services should I use for SLA 99.99%?”&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Implement
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;“Generate a Bicep script for App Service + Key Vault + alert.”&lt;/li&gt;
&lt;li&gt;“Create Terraform for a VM with NSG and diagnostics enabled.”&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Operate
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;“List VMs with RDP open.”&lt;/li&gt;
&lt;li&gt;“Show web apps with expired SSL certificates.”&lt;/li&gt;
&lt;li&gt;“Find blobs that are publicly accessible.”&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Optimize
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;“Why did my Azure bill increase by 15% last month?”&lt;/li&gt;
&lt;li&gt;“Forecast my costs for the next 3 months.”&lt;/li&gt;
&lt;li&gt;“Suggest a better SKU for VM xyz.”&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Troubleshoot
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;“Explain this error on my Function App and how to fix it.”&lt;/li&gt;
&lt;li&gt;“Why is my App Service slow and what can I do?”&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>azure</category>
      <category>ai</category>
      <category>azurecopilot</category>
    </item>
    <item>
      <title>Do you really need a landing zone?</title>
      <dc:creator>Tidjani Belmansour, Ph.D.</dc:creator>
      <pubDate>Wed, 03 Sep 2025 15:34:31 +0000</pubDate>
      <link>https://forem.com/tidjani/do-you-really-need-a-landing-zone-1p5</link>
      <guid>https://forem.com/tidjani/do-you-really-need-a-landing-zone-1p5</guid>
      <description>&lt;p&gt;If you've ever worked on a cloud computing project, chances are you've heard of a "landing zone."&lt;/p&gt;

&lt;p&gt;But what is it, and do you really need one? That's what we are going to explore in this article.&lt;/p&gt;

&lt;h2&gt;
  
  
  A landing zone… what is that??
&lt;/h2&gt;

&lt;p&gt;A landing zone is a concept you'll hear mostly in the context of cloud computing projects. It's a reference architecture designed to provide a secure, compliant, governed, and controlled environment for your workloads.&lt;/p&gt;

&lt;p&gt;This allows you to establish a solid foundation of governance, compliance, security, and control that will benefit all your workloads accelerating innovation while ensuring organizational flexibility.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accelerating innovation… but how? Because you don’t have to implement security, governance, or compliance controls within your workloads. These are implemented at the landing zone level. While you may need to implement additional controls on certain workloads, your landing zone will ensure that no compromises have been made around the workload itself if you do nothing.&lt;/li&gt;
&lt;li&gt;Ensuring organizational flexibility… really?! Yes, a landing zone allows an organization to be flexible, resilient and responsive, both for major developments and when integrating new needs or complying with market standards. This flexibility is achieved through modularity (in particular the establishment of environments isolated per team and over which these teams have almost total control); the ability to deploy types of services according to need and independently of the needs of other teams or departments; the automation of deployments; and finally, the centralization of governance to ensure compliance and consistency of the cloud environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A landing zone… for what purpose??
&lt;/h2&gt;

&lt;p&gt;A landing zone helps address the following challenges in your cloud adoption:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloud governance&lt;/strong&gt;: through centralized control of resources, standardization of configurations, application of policies, compliance with regulatory requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrated security&lt;/strong&gt;: through segmentation, securing communications, identity and access management (RBAC), continuous monitoring, isolation of environments (prod, dev, test).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost optimization&lt;/strong&gt;: through cost management via clear distribution between business lines, using the appropriate services and right-sizing them, limitation of costly data transfers thanks to optimized network topology.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agility&lt;/strong&gt;: through rapid adaptation to growth, organizational changes, and technological changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To achieve this, a set of cloud services must be deployed and configured, such as one or more firewalls, VPNs, a SIEM, domain controllers, a log ingestion and analysis tool, a monitoring solution, an alerting solution, identity and access management tools, network monitoring tools, backup and DR tools, a policy implementation and enforcement solution, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  But wait a minute... a landing zone can be expensive!
&lt;/h2&gt;

&lt;p&gt;Yes, a landing zone isn't free. Depending on the adopted topology and setup, it can cost anywhere from a few dozen dollars to several thousand dollars per month!&lt;/p&gt;

&lt;p&gt;Is it expensive, though? It's all relative. Let's say your landing zone costs $4,000 per month. But thanks to it, your data and workloads are protected and backed up. In your eyes, is data theft worth saving these $4,000 (with all the bad press and the loss of customer trust and possibly market share)? Whatever your answer is, you have your answer 😉.&lt;/p&gt;

&lt;p&gt;So, we can think of landing zone costs like insurance costs: we don't like paying them, but we're glad to have that insurance in case things go wrong😊.&lt;/p&gt;

&lt;p&gt;An important thing to keep in mind regarding landing zone costs is that these costs are generally passed on to the consuming lines of business, either as an equal split (i.e., the landing zone costs are divided by the number of business units consuming it) or based on a pro rata usage (although the latter might be more difficult to assess).&lt;/p&gt;

&lt;h2&gt;
  
  
  Landing zones topologies
&lt;/h2&gt;

&lt;p&gt;In the previous section, you heard me refer to landing zone topologies. But what are they?&lt;/p&gt;

&lt;p&gt;A landing zone topology refers to how the cloud architecture and components are organized, segmented, and interconnected to meet business needs. The topology therefore defines the logical structure of the cloud environment, resource segmentation, network flows, access rules, and overall governance.&lt;/p&gt;

&lt;p&gt;Each provider offers different topologies (via their Cloud Adoption Framework). These topologies reflect the most common needs for different business sizes and complexities. On the Microsoft side, the best-known are "Hub-and-Spoke" and "Virtual WAN."&lt;/p&gt;

&lt;p&gt;As an example, here's what the Hub-and-Spoke topology may look like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F37xwg3tno25suq85uvhw.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F37xwg3tno25suq85uvhw.webp" alt="Hub-and-Spoke topology" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A landing zone, how do we set it up?
&lt;/h2&gt;

&lt;p&gt;As with any cloud workload, there are different ways to set up a landing zone.&lt;/p&gt;

&lt;p&gt;It's possible to set it up through click-click in your preferred cloud platform's portal, but this isn't the most recommended method because it's manual, prone to errors and leaves no trace (i.e., it's difficult or impossible to track who did what and in what order).&lt;/p&gt;

&lt;p&gt;Cloud providers also provide what they call "accelerators" for setting up a landing zone, either automatically or semi-automatically. These accelerators work very well as long as they align with the topologies offered by these providers (usually via their Cloud Adoption Frameworks). However, customizing these accelerators for specific needs can be complex, particularly because they require a learning curve. &lt;/p&gt;

&lt;p&gt;The final option (the one that offers the greatest degree of flexibility and customization) is to develop your code yourself. This is referred to as an "infrastructure as code" approach, in which you script your cloud infrastructure using a technology specifically designed for this purpose. Several technologies exist, and you've probably already heard the name of one of them. These include Terraform, Bicep, Pulumi, Ansible, CloudFormation, ARM Templates, and more.&lt;/p&gt;

&lt;p&gt;Finally, note that in a corporate context, the implementation of the landing zone is the responsibility of a dedicated team, generally called the "cloud platform team," which works closely with the CCoE (Cloud Center of Excellence) to define it.&lt;/p&gt;

&lt;h2&gt;
  
  
  A landing zone is a living organism!
&lt;/h2&gt;

&lt;p&gt;Rest assured, it's neither an alien nor a zombie! 😁&lt;/p&gt;

&lt;p&gt;However, a landing zone is a very living organism. We saw earlier that a landing zone can have different topologies. What we didn't mention is that it evolves to adapt to changing business needs. One of the most common examples in the Azure world (but this remains true for other cloud platforms) is evolving the landing zone to adopt AI or AVS (Azure VMWare Solution) services.&lt;/p&gt;

&lt;p&gt;Note that it's not just the landing zone topology that may need to evolve. In some cases, this evolution may involve authorizing new services (or restricting those that are no longer used), or implementing new compliance controls, resulting from changes in regulations in your industry. This is why it's recommended to use an “infrastructure as code” approach when implementing a landing zone, as it facilitates its evolution while keeping track of the changes made.&lt;/p&gt;

&lt;p&gt;Oh! And one more thing... Just as a landing zone is alive, so is the code used to implement it. Whether you use an accelerator provided by your cloud provider of choice or have developed your own code, remember to periodically (at least once a year) review and update it according to new standards and APIs, if applicable.&lt;/p&gt;

&lt;h2&gt;
  
  
  I use the cloud for personal needs. Do I still need a landing zone?
&lt;/h2&gt;

&lt;p&gt;In that case, you certainly don't need a full-fledged, complex landing zone.&lt;/p&gt;

&lt;p&gt;However, for the sound management of your cloud environment, you still need to implement minimal governance, which consists of having security policies in place, budgets set up, MFA configured and enabled, assigning only the required RBACs, and monitoring to ensure security and control of your cloud environment without the complexity of a corporate landing zone.&lt;/p&gt;

&lt;p&gt;Now onto you: do you think a landing zone is useful?&lt;/p&gt;

</description>
      <category>azure</category>
      <category>cloud</category>
      <category>governance</category>
    </item>
    <item>
      <title>Automating your Azure infrastructure with Pulumi</title>
      <dc:creator>Tidjani Belmansour, Ph.D.</dc:creator>
      <pubDate>Wed, 08 Sep 2021 14:03:21 +0000</pubDate>
      <link>https://forem.com/tidjani/automating-your-azure-infrastructure-with-pulumi-4gmo</link>
      <guid>https://forem.com/tidjani/automating-your-azure-infrastructure-with-pulumi-4gmo</guid>
      <description>&lt;p&gt;Pulumi allows developers to do infrastructure as code using their favourite programming language. &lt;/p&gt;

&lt;p&gt;If you don't know what Pulumi is or haven't gave it a try yet, then join me for a kick start:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=eH8-Z_j6lvQ" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=eH8-Z_j6lvQ&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  This session is presented to you by Azure Back To School 2021:
&lt;/h2&gt;

&lt;p&gt;The Azure Back To School event compiles an awesome list of Azure content created by wonderful people and I had the great pleasure to be part of it. &lt;/p&gt;

&lt;p&gt;See the full schedule here: &lt;a href="https://azurebacktoschool.tech" rel="noopener noreferrer"&gt;https://azurebacktoschool.tech&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's keep in touch
&lt;/h2&gt;

&lt;p&gt;You can reach me on &lt;a href="https://twitter.com/tidjani_b" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;See you soon !&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>tutorial</category>
      <category>devops</category>
      <category>azure</category>
    </item>
    <item>
      <title>Manage your data retention policies with Azure Storage Lifecycle Management</title>
      <dc:creator>Tidjani Belmansour, Ph.D.</dc:creator>
      <pubDate>Fri, 26 Mar 2021 01:07:14 +0000</pubDate>
      <link>https://forem.com/tidjani/manage-your-data-retention-policies-with-azure-storage-lifecycle-management-39nh</link>
      <guid>https://forem.com/tidjani/manage-your-data-retention-policies-with-azure-storage-lifecycle-management-39nh</guid>
      <description>&lt;h1&gt;
  
  
  This article is part of the Azure Spring Clean initiative
&lt;/h1&gt;

&lt;p&gt;I would shoot out a big thank you to &lt;a href="https://twitter.com/wedoazure" rel="noopener noreferrer"&gt;Joe Carlyle&lt;/a&gt; and to &lt;a href="https://twitter.com/tamstar1234" rel="noopener noreferrer"&gt;Thomas Thornton&lt;/a&gt; for giving me the opportunity to be once again part of this incredible journey. Thanks Joe!&lt;/p&gt;

&lt;p&gt;If you're not yet aware of the Azure Spring Clean initiative, please head to &lt;a href="https://www.azurespringclean.com" rel="noopener noreferrer"&gt;https://www.azurespringclean.com&lt;/a&gt; where you'll find out more great content presented to you by awesome people. You can also share your excitement on Twitter by using the hashtag &lt;code&gt;#azurespringclean&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Okay. Now, let's get to our topic for today!&lt;/p&gt;

&lt;h1&gt;
  
  
  Intro
&lt;/h1&gt;

&lt;p&gt;You may know it by now: data is what fuels applications and services. In order to feed our applications and services with the data they need to perform their operations, we need to store that data somewhere, may it be in a database, a directory or somewhere else. On Azure, a storage account  is often considered as an option for storing data since it provides us with a reliable, cost-effective, easy-to-use-yet-powerful storage mechanism.&lt;/p&gt;

&lt;p&gt;However, and regardless of the storage mechanism we rely on in order to store our data, it worth mentioning that such data isn't used in the same way nor at the same frequency. For that matter, the Azure Storage Account service provides us with 4 services, namely: Blob, Files, Queues and Tables which allow us to store different kind of data and work with it in different fashions. For more information on these four services, you can refer to the &lt;a href="https://docs.microsoft.com/en-us/azure/storage/" rel="noopener noreferrer"&gt;official Microsoft documentation for the Azure Storage Account service&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When it comes to storage access tier, the Azure Storage Account service provides us with 3 options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Hot&lt;/em&gt;: Optimized for storing data that is accessed frequently;&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Cool&lt;/em&gt;: Optimized for storing data that is infrequently accessed and stored for at least 30 days;&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Archive&lt;/em&gt;: Optimized for storing data that is rarely accessed and stored for at least 180 days with flexible latency requirements, on the order of hours.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Generally speaking, data in the &lt;em&gt;Hot&lt;/em&gt; access tier are more expensive to store than data in the &lt;em&gt;Cool&lt;/em&gt; access tier which, in turn, is more expensive to store than data in the &lt;em&gt;Archive&lt;/em&gt; access tier. This is also true when it comes to the Azure Storage Account service.&lt;/p&gt;

&lt;p&gt;So, you may ask, we should always use the &lt;em&gt;Archive&lt;/em&gt; access tier when it comes to storing our data, right?&lt;br&gt;
Well, it's not that simple...&lt;/p&gt;

&lt;p&gt;Although storing data in the &lt;em&gt;Archive&lt;/em&gt; access tier is the cheapest, it is the most expensive when it comes to retrieving that data. And when I say "more expensive", I'm not only referring to the monetary cost of the transaction to retrieve that data but also to the time required to retrieve it. For example, it might take up to several hours to retrieve data that is stored in the &lt;em&gt;Archive&lt;/em&gt; access tier. Thus, you definitely don't want to retrieve data from the &lt;em&gt;Archive&lt;/em&gt; access tier if the request was initiated by a user through your web application, knowing that this user is waiting in front of his/her screen to be presented with these information!&lt;/p&gt;

&lt;h1&gt;
  
  
  So, why would I care about lifecycle management at all?!
&lt;/h1&gt;

&lt;p&gt;Right now, you might have totally changed your mind and thinking that you should always rely on the &lt;em&gt;Hot&lt;/em&gt; access tier. Am I right?&lt;br&gt;
Well, once again, it's not that simple...&lt;br&gt;
It is still worth to set the appropriate the right access tier depending on the context we're in. Note that you don't necessarily have to choose only one access tier for ALL the data you store in an Azure Storage Account instance. You may (and should) fine tune the access tier for each piece of data.&lt;/p&gt;

&lt;p&gt;Another factor to take into account is that, as time is passing by, a given data might need to be set to a different access tier.&lt;br&gt;
For example, let's say that my application is collecting the sales data for a given store and processing it to, let's say, evaluates inventory provisioning for the most in-demand products. I would probably need to use the &lt;em&gt;Hot&lt;/em&gt; access tier for that data since I'm expecting to use it quite often in the upcoming days. However, the sales data of the last quarter or even last year might not need to be accessed so often. Thus, the &lt;em&gt;Cool&lt;/em&gt; access tier would probably be more appropriate. Now, when it comes to the sales data of the last 5 or 10 years, then chances are that the &lt;em&gt;Archive&lt;/em&gt; access tier will be more appropriate since you'd probably not need to access that data so often but still want to keep it for any reason, shall it be for legal reasons, for later ML processing of that data or simply... "just in case".&lt;/p&gt;

&lt;h1&gt;
  
  
  How to set up lifecycle management?
&lt;/h1&gt;

&lt;p&gt;We could definitely write some code or script for that matter (we can think of an event-driven application such as an Azure Functions, a Logic App or an Automation Runbook). However, it is interesting to note that the Azure Storage Account service provides us with a functionality that does just this. This functionality is called "Lifecycle Management".&lt;/p&gt;

&lt;p&gt;First, you need to know that the lifecycle management feature applies to Azure Storage Account instances of type &lt;code&gt;General Purpose V2&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fkbdazxkzcucm87952r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fkbdazxkzcucm87952r.png" alt="storage account GPv2" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If yours is of type &lt;code&gt;General Purpose V1&lt;/code&gt;, you can go to &lt;code&gt;Configuration&lt;/code&gt; and click &lt;code&gt;Upgrade&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp1z459lqj99aw9ln7j7l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp1z459lqj99aw9ln7j7l.png" alt="storage account GPv1" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F86nqa12ox7kj9ffp6uih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F86nqa12ox7kj9ffp6uih.png" alt="upgrade GPv1 to GPv2" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Okay, now let's set up a lifecycle management policy!&lt;/p&gt;

&lt;p&gt;Here's our use-case scenario:&lt;br&gt;
    * we may want to change the access tier of a blob from Hot to Cool if the blob hasn't been modified for the last 14 days&lt;br&gt;
    * we may want to change the access tier of a blob from Cool to Archive if the blob hasn't been modified for the last 30 days&lt;br&gt;
    * we can also define a rule to delete the blob after a given period of time if that's want we need but in this case, we won't.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;Lifecycle management&lt;/code&gt; feature can be found under &lt;code&gt;Blob service&lt;/code&gt;.&lt;br&gt;
Once we get there, we simply click on &lt;code&gt;Add a rule&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;Details&lt;/code&gt; window, we can set a name for our rule and decide the scope and type of the blobs to which the rule should apply.&lt;br&gt;
Note that we can access the &lt;code&gt;Filter set&lt;/code&gt; window only if we choose &lt;code&gt;Limit blobs with filters&lt;/code&gt; option:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nb2heb7ivlcbr5zaxwj.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nb2heb7ivlcbr5zaxwj.PNG" alt="details set window" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;Base blobs&lt;/code&gt; window is where we apply the rules we've defined in our scenario above. We can do that by creating as much &lt;em&gt;if-then&lt;/em&gt; blocks as needed.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkyjz2cy70fc288d81dox.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkyjz2cy70fc288d81dox.PNG" alt="base blobs window" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;Filter set&lt;/code&gt; window is where we indicate which blob or container these rules apply to.&lt;br&gt;
We can specify multiple entries to the "Blob prefix" in order to apply the defined rules on multiple blobs and/or containers within that storage account. &lt;/p&gt;

&lt;p&gt;There's a catch however: if you don't specify at least one value in the "Blob prefix" list, then the rules will apply to every blob in the current storage account instance! Thus, you'd want to pay a special attention to that. &lt;/p&gt;

&lt;p&gt;Our Azure Storage Account instance has three containers, namely: "images', 'reports' and 'invoices':&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpe7ra2ac74zdnvjvsgb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpe7ra2ac74zdnvjvsgb.png" alt="our containers" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We want to apply this new rule only to the blobs located in the 'invoices' container. Thus, we define the Blob prefix as follows: &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwwm8r0bcssx2ehwkewec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwwm8r0bcssx2ehwkewec.png" alt="filter set window" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We finally click the &lt;code&gt;Add&lt;/code&gt; button and our new rule is created and enabled!&lt;/p&gt;

&lt;h2&gt;
  
  
  Special notes
&lt;/h2&gt;

&lt;p&gt;It is worth mentioning that, although we will demonstrate the creation of the lifecycle management rules right from the Azure Portal, we could also create them using SDKs or CLI (e.g. Azure CLI or PowerShell).&lt;/p&gt;

&lt;p&gt;Another thing to mention is that, at the end of the day, these rules translate into a JSON format. Thus, we can grab that JSON, store it somewhere (e.g. in our source code management of choice) and reuse it on another project.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F94oda67ar4vouxmyovua.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F94oda67ar4vouxmyovua.png" alt="lifecycle management code view" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can enable or disable the rules we've created or we can delete them:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh071u4jbjqtf52cmz0y7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh071u4jbjqtf52cmz0y7.png" alt="enable disable delete rules" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the time of this writing, we can only define rules based on the last modification date of the blobs.&lt;/p&gt;

&lt;h1&gt;
  
  
  When does the rule applies?
&lt;/h1&gt;

&lt;p&gt;The rules are applied once every 24 hours. Thus, if we create a new rule or modify an existing one, it may take up to 24 hours for it to be executed.&lt;/p&gt;

&lt;p&gt;At the time of this writing, there is no way to define a schedule for when the rule should be executed nor to execute it in real time.&lt;/p&gt;

&lt;h1&gt;
  
  
  As a conclusion...
&lt;/h1&gt;

&lt;p&gt;Today, we saw that Azure Storage Lifecycle Management provides us with an easy and automated way to set the storage access tier of our data to the right value and at the right time without involving extra development nor extra services.&lt;/p&gt;

&lt;h1&gt;
  
  
  Let's keep in touch
&lt;/h1&gt;

&lt;p&gt;You can reach me on &lt;a href="https://twitter.com/tidjani_b" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;See you soon !&lt;/p&gt;

</description>
      <category>azure</category>
      <category>storage</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Disconnect from your Azure account when inactive</title>
      <dc:creator>Tidjani Belmansour, Ph.D.</dc:creator>
      <pubDate>Sun, 03 Jan 2021 23:11:58 +0000</pubDate>
      <link>https://forem.com/tidjani/disconnect-from-your-azure-account-when-inactive-4h86</link>
      <guid>https://forem.com/tidjani/disconnect-from-your-azure-account-when-inactive-4h86</guid>
      <description>&lt;p&gt;In my previous posts and talks, I've shown you various techniques to strengten the security of your Azure environment.&lt;/p&gt;

&lt;p&gt;However, there is one little thing that if we are not careful about, could compromise the security of our Azure environment. That little thing might be so obvious that it's often forgotten. That little thing is to &lt;strong&gt;disconnect from our Azure account when we're not using it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You've may noticed that when you go back to your workstation after few hours (or few days?), and navigate to the Azure portal, you're still logged in to your account. Can you imagine what would happen if someone used your workstation while you were away? If you only have &lt;code&gt;Reader&lt;/code&gt; permissions, then no big deal. But imagine if you have administrative permissions (e.g. &lt;code&gt;Contributor&lt;/code&gt; or &lt;code&gt;Owner&lt;/code&gt;)! That could be harmful.&lt;/p&gt;

&lt;p&gt;Fortunately, there's a little hidden gem in the Azure portal that lets you automatically be disconnected from your account after a given period of time of inactivity.&lt;/p&gt;

&lt;p&gt;To configure it, simply do this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwsqpnnlhd8kxy2ermdhi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwsqpnnlhd8kxy2ermdhi.png" alt="sign out when inactive" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To be honest, I'm wondering why this feature isn't enabled by default!&lt;/p&gt;

&lt;h1&gt;
  
  
  In conclusion...
&lt;/h1&gt;

&lt;p&gt;Today, we have done one more step toward a more secured Azure environment by leveraging a hidden gem in the Azure portal.&lt;/p&gt;

&lt;h1&gt;
  
  
  Let's keep in touch
&lt;/h1&gt;

&lt;p&gt;You can reach me on &lt;a href="https://twitter.com/tidjani_b" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://ca.linkedin.com/in/tidjani-belmansour-ph-d-98460912" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;See you soon !&lt;/p&gt;

</description>
      <category>azure</category>
      <category>security</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Target .NET 5 in Azure App Service</title>
      <dc:creator>Tidjani Belmansour, Ph.D.</dc:creator>
      <pubDate>Wed, 11 Nov 2020 02:40:31 +0000</pubDate>
      <link>https://forem.com/tidjani/target-net-5-in-azure-app-service-366b</link>
      <guid>https://forem.com/tidjani/target-net-5-in-azure-app-service-366b</guid>
      <description>&lt;p&gt;Today is a big day: .NET 5 has officially been released as part the &lt;a href="https://www.dotnetconf.net/" rel="noopener noreferrer"&gt;.net conf&lt;/a&gt;. Awesome!&lt;/p&gt;

&lt;p&gt;What's more awesome is that we can now deploy .NET 5 applications on Azure App Service. And what's more than "more awesome" is that we can do that for both Windows and Linux App Services. Isn't that awesome? ;)&lt;/p&gt;

&lt;h1&gt;
  
  
  Targetting .NET 5 in an App Service
&lt;/h1&gt;

&lt;p&gt;If you create a new web app and check the list of available runtimes, you'll see &lt;code&gt;.NET 5 (Early Access)&lt;/code&gt; under the &lt;code&gt;.NET&lt;/code&gt; category:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fu3jn4cqos9q1txve0vxp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fu3jn4cqos9q1txve0vxp.png" alt=".net 5 in azure app service" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Early access ?!
&lt;/h1&gt;

&lt;p&gt;Early access is a new feature of Azure App Service that will allow us to rapidly have access to the latest releases of various runtimes and SDKs without having to wait for an App Service release cycle to include that support. This is not only for .NET but also for other supported programming languages such as Python and Node.&lt;/p&gt;

&lt;p&gt;As of today (November 10, 2020), Early access has some limitations, one of which is that Application Insights is not supported for .NET 5 applications.&lt;/p&gt;

&lt;p&gt;To learn more about Early access, visit: &lt;a href="https://github.com/Azure/app-service-linux-docs/blob/master/Runtime_Support/early-access.md" rel="noopener noreferrer"&gt;https://github.com/Azure/app-service-linux-docs/blob/master/Runtime_Support/early-access.md&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What about existing web apps?
&lt;/h1&gt;

&lt;p&gt;If you're running a Linux-based App Service, go to &lt;code&gt;Configuration&lt;/code&gt; then to &lt;code&gt;General settings&lt;/code&gt; and, under &lt;code&gt;Stack settings&lt;/code&gt;, select &lt;code&gt;.NET&lt;/code&gt; and you'll be targetting .NET 5 (both &lt;code&gt;Major version&lt;/code&gt; and &lt;code&gt;Minor version&lt;/code&gt; will adjust to use .NET 5). Don't forget to hit &lt;code&gt;Save&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbvu458r1wcnrg021n0e4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbvu458r1wcnrg021n0e4.png" alt="existing linux app service: switch to .net 5" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're running a Windows-based App Service, the procedure is slightly different. Go to &lt;code&gt;Configuration&lt;/code&gt; then to &lt;code&gt;General settings&lt;/code&gt; and, under &lt;code&gt;Stack&lt;/code&gt;, select &lt;code&gt;.NET&lt;/code&gt; and under &lt;code&gt;.NET Framework version&lt;/code&gt;, select &lt;code&gt;.NET 5&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9pjqjui6bzf0cnngkpb4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9pjqjui6bzf0cnngkpb4.png" alt="existing windows app service: switch to .net 5" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's interesting to note that when switching runtimes, the &lt;code&gt;Early access&lt;/code&gt; suffix isn't mentioned...&lt;/p&gt;

&lt;h1&gt;
  
  
  In conclusion
&lt;/h1&gt;

&lt;p&gt;Starting today, we can use all the goodness provided by .NET 5 in our Azure App Services and it's as easy as selecting .NET 5 as our App Service's runtime.&lt;/p&gt;

&lt;h1&gt;
  
  
  Let's keep in touch
&lt;/h1&gt;

&lt;p&gt;You can reach me on &lt;a href="https://twitter.com/tidjani_b" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://ca.linkedin.com/in/tidjani-belmansour-ph-d-98460912" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;See you soon !&lt;/p&gt;

</description>
      <category>azure</category>
      <category>webdev</category>
      <category>dotnet</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What Linux distribution is Powering Azure App Service?</title>
      <dc:creator>Tidjani Belmansour, Ph.D.</dc:creator>
      <pubDate>Fri, 30 Oct 2020 19:14:51 +0000</pubDate>
      <link>https://forem.com/tidjani/what-linux-distribution-is-powering-azure-app-service-iei</link>
      <guid>https://forem.com/tidjani/what-linux-distribution-is-powering-azure-app-service-iei</guid>
      <description>&lt;p&gt;You probably know by now that you can have Linux-powered App services. &lt;/p&gt;

&lt;p&gt;But, have you ever wonder what Linux distribution is powering that App Service? &lt;/p&gt;

&lt;p&gt;Looking at the &lt;code&gt;Environment&lt;/code&gt; section of the Kudu console won't help:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fcgvq8np0j0dqy0b6mos5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fcgvq8np0j0dqy0b6mos5.png" alt="environment section in kudu" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Well, wonder no more! Simply open a WebSSH terminal:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmjsh4t0vd8m7ti700d7x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmjsh4t0vd8m7ti700d7x.png" alt="app service ssh" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And type this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/os-release
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you'll get the requested information:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhpjcxhe6isk1e7aap1kb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhpjcxhe6isk1e7aap1kb.png" alt="linux distro info" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Easy, right? ;)&lt;/p&gt;

&lt;h1&gt;
  
  
  In conclusion...
&lt;/h1&gt;

&lt;p&gt;Today, we have lifted the veil on some part of the magic that powers the Azure App Service for Linux offering which is what version of Linux this service is running on.&lt;/p&gt;

&lt;h1&gt;
  
  
  Let's keep in touch
&lt;/h1&gt;

&lt;p&gt;You can reach me on &lt;a href="https://twitter.com/tidjani_b" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://ca.linkedin.com/in/tidjani-belmansour-ph-d-98460912" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;See you soon !&lt;/p&gt;

</description>
      <category>azure</category>
      <category>linux</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Automate the installation of the Azure Portal Desktop app</title>
      <dc:creator>Tidjani Belmansour, Ph.D.</dc:creator>
      <pubDate>Sun, 25 Oct 2020 22:15:48 +0000</pubDate>
      <link>https://forem.com/tidjani/automate-the-installation-of-the-azure-portal-desktop-app-14f5</link>
      <guid>https://forem.com/tidjani/automate-the-installation-of-the-azure-portal-desktop-app-14f5</guid>
      <description>&lt;p&gt;The Azure Portal Desktop application is great. I love it and I use it!&lt;br&gt;
It avoids me having the open the Azure Portal in different browsers and have to deal with in-private windows and "public" windows.&lt;/p&gt;

&lt;p&gt;If you don't know what I'm talking about, you can check out my article (in French) about that desktop app here: &lt;br&gt;
&lt;a href="http://espacenuagic.com/2019/05/15/azure-portal-desktop-app/" rel="noopener noreferrer"&gt;http://espacenuagic.com/2019/05/15/azure-portal-desktop-app/&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Why would I want to automate that installation?
&lt;/h1&gt;

&lt;p&gt;If you want to automate the configuration of your dev boxes (for example, if you want to provide a common script to help all you developers to set up their development environment), then you'll certainly look for a way to automate the installation of the Azure Portal desktop application.&lt;/p&gt;
&lt;h1&gt;
  
  
  Ok... So, how do I do that?
&lt;/h1&gt;

&lt;p&gt;Simple, just use that script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s1"&gt;'https://portal.azure.com/App/Download?acceptLicense=true'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$outputLocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;USERPROFILE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'\AzurePortalInstaller.exe'&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nv"&gt;$progresspreference&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'silentlyContinue'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Invoke-WebRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-OutFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$outputLocation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$progressPreference&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'Continue'&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$outputLocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;/Q&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Basically, all that script does is to download the installation package and runs it in quiet mode. &lt;/p&gt;

&lt;h1&gt;
  
  
  As a conclusion...
&lt;/h1&gt;

&lt;p&gt;Today, we've learned that we can automate the installation of the Azure portal desktop app. This might be useful if you want to automate the configuration of your dev boxes.&lt;/p&gt;

&lt;h1&gt;
  
  
  Keep the discussion
&lt;/h1&gt;

&lt;p&gt;You can reach me on &lt;a href="https://twitter.com/tidjani_b" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://ca.linkedin.com/in/tidjani-belmansour-ph-d-98460912" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;See you soon!&lt;/p&gt;

</description>
      <category>azure</category>
      <category>powershell</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Manage Azure Service principal's credentials expiry</title>
      <dc:creator>Tidjani Belmansour, Ph.D.</dc:creator>
      <pubDate>Fri, 02 Oct 2020 16:52:32 +0000</pubDate>
      <link>https://forem.com/tidjani/manage-azure-service-principal-s-credentials-expiry-221</link>
      <guid>https://forem.com/tidjani/manage-azure-service-principal-s-credentials-expiry-221</guid>
      <description>&lt;h1&gt;
  
  
  What? How? When? Why?... What?!
&lt;/h1&gt;

&lt;p&gt;Service principals are great to give an identity to an application and set its permissions. Using a service principal, we can, as an example, restrict access for an application to other resources (such as a database) and control what it can do on that database in a more granular way.&lt;/p&gt;

&lt;p&gt;Service principals are also great when setting a service endpoint connection in Azure DevOps for example, so you can deploy/configure your Azure resources from within your pipelines using ARM.&lt;/p&gt;

&lt;p&gt;However, when you create a service principal, its credentials are by default valid for one year. This is for security reasons, so you don't forget about existing service principals that are hanging there forever and possibly creating a security breach in your infrastructure.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why should I care?
&lt;/h1&gt;

&lt;p&gt;You should! Because if you don't, your services that rely on service principals for authentication and authorization may just stop working. &lt;/p&gt;

&lt;p&gt;In the above scenario of the service endpoint connection in Azure DevOps, your pipelines executions will fail due to the lack of the required permissions.&lt;/p&gt;

&lt;h1&gt;
  
  
  How do I check for the credentials expiration date of my service principal?
&lt;/h1&gt;

&lt;p&gt;You can do that by using those two simple commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$sp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Get-AzADServicePrincipal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-DisplayName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$myServiceprincipalName&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-AzADSpCredential&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ObjectId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$sp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Id&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
 &lt;/p&gt;
&lt;h1&gt;
  
  
  How to deal with that?
&lt;/h1&gt;

&lt;p&gt;Depending on whether your service principal already exists or not, the procedure is slightly different. &lt;/p&gt;
&lt;h2&gt;
  
  
  Setting the expiration date at the creation of the service principal
&lt;/h2&gt;

&lt;p&gt;If you haven't yet created your service principal, here's how to set a custom expiration date for it during its creation. &lt;/p&gt;

&lt;p&gt;Here, we create a service principal named &lt;code&gt;totoSP&lt;/code&gt; with the role &lt;code&gt;Reader&lt;/code&gt; and we ensure the password will be valid for 150 years. Seems weird (and it is actually) but it's just for the sake of the demo ;) :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;get-date&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$start&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddYears&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;150&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;New-AzADServicePrincipal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-DisplayName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'totoSP'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Role&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Reader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-StartDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-EndDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$end&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Extend the expiration date for an existing service principal
&lt;/h2&gt;

&lt;p&gt;If your service principal already exists (whether its credentials have expired or not yet), you can set a custom expiration date using the following commands.&lt;/p&gt;

&lt;p&gt;Once again, we ensure the password will be valid for 150 years which seems weird (and it is actually) but it's just for the sake of the demo ;) :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Get the Id of the service principal&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$sp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Get-AzADServicePrincipal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-DisplayName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$myServiceprincipalName&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Set new password with extended expiration date&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;get-date&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$start&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddYears&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;150&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$credentials&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;New-AzADSpCredential&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ObjectId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$sp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-StartDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-EndDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$end&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In case you need that new password (e.g. in order to update your service endpoint connection in Azure DevOps), you can use these commands. Be careful however, you can only use them in the same PowerShell session in which you created that password:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$BSTR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;System.Runtime.InteropServices.Marshal&lt;/span&gt;&lt;span class="p"&gt;]::&lt;/span&gt;&lt;span class="n"&gt;SecureStringToBSTR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$credentials&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Secret&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$UnsecureSecret&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;System.Runtime.InteropServices.Marshal&lt;/span&gt;&lt;span class="p"&gt;]::&lt;/span&gt;&lt;span class="n"&gt;PtrToStringAuto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$BSTR&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;Write-Host&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$UnsecureSecret&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The previous script will generate a random password and use it for the new, updated credentials.&lt;br&gt;
If you want to specify your own password, you can do that instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$SecureStringPassword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ConvertTo-SecureString&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@zuR3_R0ck&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="s2"&gt;!!!!"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-AsPlainText&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;New-AzADSpCredential&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ObjectId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$sp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-StartDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-EndDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Password&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$SecureStringPassword&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  As a conclusion...
&lt;/h1&gt;

&lt;p&gt;Today, we've learned that Azure service principal's credentials have an expiration date. We also learned how to deal with that.&lt;/p&gt;

&lt;p&gt;I hope that you found it valuable. &lt;/p&gt;

&lt;h1&gt;
  
  
  Keep the discussion
&lt;/h1&gt;

&lt;p&gt;You can reach me on &lt;a href="https://twitter.com/tidjani_b" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://ca.linkedin.com/in/tidjani-belmansour-ph-d-98460912" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;See you soon!&lt;/p&gt;

</description>
      <category>azure</category>
      <category>security</category>
      <category>cloud</category>
      <category>devops</category>
    </item>
    <item>
      <title>the Azure Quebec community is now on YouTube!</title>
      <dc:creator>Tidjani Belmansour, Ph.D.</dc:creator>
      <pubDate>Wed, 26 Aug 2020 00:13:05 +0000</pubDate>
      <link>https://forem.com/tidjani/the-azure-quebec-community-is-now-on-youtube-243c</link>
      <guid>https://forem.com/tidjani/the-azure-quebec-community-is-now-on-youtube-243c</guid>
      <description>&lt;p&gt;Hey there!&lt;/p&gt;

&lt;p&gt;Some of you may already know that I am the co-organizer of the &lt;a href="https://meetup.com/azureqc" rel="noopener noreferrer"&gt;Azure Quebec Community&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But did you know that we have a YouTube channel?&lt;/p&gt;

&lt;p&gt;Since the introduction of the containment and social distancing measures, we started to run our meetings in a virtual mode. We therefore recorded the sessions and we are making them available on YouTube.&lt;/p&gt;

&lt;p&gt;To watch or re-watch these sessions, &lt;a href="https://www.youtube.com/channel/UCYLAJgoYFLYf0d4jWXuC1cA" rel="noopener noreferrer"&gt;follow this link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffbiopryy4qcb2qa324sx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffbiopryy4qcb2qa324sx.png" alt="Azure Quebec is on YouTube" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, if you want to give a presentation on anything Azure related, &lt;a href="https://twitter.com/tidjani_b" rel="noopener noreferrer"&gt;please let me know&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;See you soon !&lt;/p&gt;

</description>
      <category>azure</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Azure App Service and your app settings</title>
      <dc:creator>Tidjani Belmansour, Ph.D.</dc:creator>
      <pubDate>Mon, 20 Jul 2020 15:00:40 +0000</pubDate>
      <link>https://forem.com/tidjani/azure-app-service-and-your-app-settings-4fpg</link>
      <guid>https://forem.com/tidjani/azure-app-service-and-your-app-settings-4fpg</guid>
      <description>&lt;p&gt;When developing our .NET applications, we use to rely on web.config or &lt;code&gt;appsettings.json&lt;/code&gt; files to store our application configuration settings and/or connection strings.&lt;/p&gt;

&lt;p&gt;Once we deploy our application to Azure App Service (let's say a web app), we can "override" that configuration by adding appsettings and/or connection strings to the &lt;code&gt;Configuration&lt;/code&gt; section with the same keys and different values. Since this section has precedence over the configuration files, the values in this section will be utilized.&lt;/p&gt;

&lt;h1&gt;
  
  
  What's the problem with this approach?
&lt;/h1&gt;

&lt;p&gt;Apparently, there's no problem and if you do things correctly, there will probably never be a problem.&lt;/p&gt;

&lt;p&gt;However, if you forget to specify a given app setting in the &lt;code&gt;Configuration&lt;/code&gt; section or if you mispell its key, then it is the value stored in the configuration file (&lt;code&gt;web.config&lt;/code&gt; or &lt;code&gt;appsettings.json&lt;/code&gt;) that will be utilized instead of the one from the &lt;code&gt;Configuration&lt;/code&gt; section.&lt;/p&gt;

&lt;h1&gt;
  
  
  I want a demo!
&lt;/h1&gt;

&lt;p&gt;To illustrate that situation, let's assume that we have a web application that displays the value of an app setting. Nothing fancy here but it will suffice to illustrate the point.&lt;/p&gt;

&lt;p&gt;When running the code on the local dev box, this looks like this (as you've may expected it):&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fov8p2eqk5oyusl71f10y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fov8p2eqk5oyusl71f10y.png" alt="running locally" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes, I'm using Visual Studio for Mac which I like very much.&lt;/p&gt;

&lt;p&gt;Now, let's deploy our web application to azure. Without any surprise, the message is still read from the &lt;code&gt;appsettings.json&lt;/code&gt; file:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fz9q200ypceohmn997l6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fz9q200ypceohmn997l6w.png" alt="deployed to Azure" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Okay. Now, let's add that app setting in the Configuration section of the web app with a different value. Then, the displayed value isn't coming from the appsettings.json file anymore but rather from the &lt;code&gt;Configuration&lt;/code&gt; section of the web app instance:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkbvehmnv17yck09ru83w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkbvehmnv17yck09ru83w.png" alt="app setting in Azure" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Okay. Now comes the (not so) fun part!&lt;br&gt;
If we forget to define that app setting or if we mispell it in the &lt;code&gt;Configuration&lt;/code&gt; section of the web app instance, the value that will be shown is the one coming from the appsettings.json file (in this example, I purposingly "forgot" the H from the name of the app setting):&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffl5aact15wqpb8x3ajsw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffl5aact15wqpb8x3ajsw.png" alt="mispelled app setting" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  How can we avoid this problem?
&lt;/h1&gt;

&lt;p&gt;There might be many ways to avoid such a tricky issue. The easiest one I found is to set the "Build action" property of your &lt;code&gt;appsettings.*.json&lt;/code&gt; files to "None" and set the "Copy to Output Directory" property of these files to "Never":&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffejlcou981vgoxe33xtv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffejlcou981vgoxe33xtv.png" alt="set build action" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The screen capture above also illustrates what the &lt;code&gt;csproj&lt;/code&gt; will look like after updating these properties.&lt;/p&gt;

&lt;p&gt;Thus, if the app setting is not defined in the &lt;code&gt;Configuration&lt;/code&gt; section of the web app instance, the obtained value will be null. Your code is probably already doing such a null check. In my case, I've decided to display an error message if this situation happens:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F75o347nyhlmga9i1pkxn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F75o347nyhlmga9i1pkxn.png" alt="app setting not set" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please note that doing so still allows you to use the &lt;code&gt;appsettings.*.json&lt;/code&gt; files when running the application on your local dev box. They simply won't be published to Azure anymore.&lt;/p&gt;

&lt;p&gt;It is also important to note that if the &lt;code&gt;appsettings.*.json&lt;/code&gt; files have been previously deployed to your Azure App Service instance, a new deployment (after updating the above properties) won't remove them. You'll have to find a way to remove them. You can, for example, use "App Service Editor" to manually delete them.&lt;/p&gt;

&lt;h1&gt;
  
  
  In conclusion...
&lt;/h1&gt;

&lt;p&gt;Today, we saw that given the fact that App Configuration in Azure App Service has precedence over the &lt;code&gt;web.config&lt;/code&gt;/&lt;code&gt;appsettings.json&lt;/code&gt;, it may introduce some unwanted and unnoticed side effects. We also discussed one way to address this situation.&lt;/p&gt;

&lt;h1&gt;
  
  
  Let's keep in touch
&lt;/h1&gt;

&lt;p&gt;You can reach me on &lt;a href="https://twitter.com/tidjani_b" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://ca.linkedin.com/in/tidjani-belmansour-ph-d-98460912" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;See you soon !&lt;/p&gt;

</description>
      <category>azure</category>
      <category>cloud</category>
      <category>dotnet</category>
      <category>development</category>
    </item>
    <item>
      <title>Azure Cloud Shell: Use PowerShell in Bash</title>
      <dc:creator>Tidjani Belmansour, Ph.D.</dc:creator>
      <pubDate>Fri, 19 Jun 2020 14:50:30 +0000</pubDate>
      <link>https://forem.com/tidjani/azure-cloud-shell-use-powershell-in-bash-6p5</link>
      <guid>https://forem.com/tidjani/azure-cloud-shell-use-powershell-in-bash-6p5</guid>
      <description>&lt;p&gt;A quick one today...&lt;/p&gt;

&lt;p&gt;I quite often hear this complaint: "I hate having to switch Cloud Shell from Bash to PowerShell to use cmdlets.". Well, you don't have to!&lt;/p&gt;

&lt;p&gt;In fact, you can invoke the PowerShell Core interpreter right from within the Bash command-line in Cloud Shell. Simply type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pwsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you'll fire off the PowerShell Core interpreter.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fc9hx9w95ldx3h4x7cpku.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fc9hx9w95ldx3h4x7cpku.png" alt="start a powershell core session in bash" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you're done and you want to go back to the Bash command-line, simply type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;exit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you'll exit the PowerShell Core interpreter.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9jzgtwoex2u363u1c14h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9jzgtwoex2u363u1c14h.png" alt="exit the powershell core session and go back to bash" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Simple, isn't it? ;)&lt;/p&gt;

&lt;h1&gt;
  
  
  As a conclusion
&lt;/h1&gt;

&lt;p&gt;Working with the command line is essential when it comes to automation. Knowing that you can combine the power of Bash and PowerShell together will help you do great things.&lt;/p&gt;

&lt;h1&gt;
  
  
  Let's keep in touch
&lt;/h1&gt;

&lt;p&gt;You can reach me on &lt;a href="https://twitter.com/tidjani_b" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://ca.linkedin.com/in/tidjani-belmansour-ph-d-98460912" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;See you soon !&lt;/p&gt;

</description>
      <category>azure</category>
      <category>powershell</category>
      <category>bash</category>
      <category>cloudshell</category>
    </item>
  </channel>
</rss>
