<?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>DEV Community: Rahimah Sulayman</title>
    <description>The latest articles on DEV Community by Rahimah Sulayman (@rahimah_dev).</description>
    <link>https://dev.to/rahimah_dev</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3673037%2Fd084c1b1-6c80-43de-8b42-c48bd0cad2f8.png</url>
      <title>DEV Community: Rahimah Sulayman</title>
      <link>https://dev.to/rahimah_dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rahimah_dev"/>
    <language>en</language>
    <item>
      <title>S3 Has No Folders. Here's What You're Really Using.</title>
      <dc:creator>Rahimah Sulayman</dc:creator>
      <pubDate>Thu, 22 Oct 2026 10:41:57 +0000</pubDate>
      <link>https://dev.to/rahimah_dev/s3-has-no-folders-heres-what-youre-really-using-2p7h</link>
      <guid>https://dev.to/rahimah_dev/s3-has-no-folders-heres-what-youre-really-using-2p7h</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;In my &lt;a href="https://dev.to/rahimah_dev/getting-started-with-aws-s3-creating-a-bucket-uploading-an-object-and-understanding-why-the-1f2l"&gt;previous article&lt;/a&gt;, I created an S3 bucket and uploaded a single object. This time I'm organizing that bucket: creating folders, uploading multiple files at once, moving an object between folders, and finally deleting the bucket.&lt;/p&gt;

&lt;p&gt;Along the way I'll explain a fact that trips up many people: &lt;strong&gt;Amazon S3 doesn't have folders.&lt;/strong&gt; What the console shows you is something else, and once you understand it, a lot of S3 behavior starts to make sense.&lt;/p&gt;

&lt;p&gt;By the end of this article, you'll be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create folders (and nested folders) in a bucket&lt;/li&gt;
&lt;li&gt;Upload several files in one go&lt;/li&gt;
&lt;li&gt;Explain what a &lt;strong&gt;prefix&lt;/strong&gt; is and how it differs from a real folder&lt;/li&gt;
&lt;li&gt;Move an object from one folder to another, and understand what S3 does behind the scenes&lt;/li&gt;
&lt;li&gt;Empty and delete a bucket correctly&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where we're starting
&lt;/h2&gt;

&lt;p&gt;I'm using the same bucket from the first article, &lt;strong&gt;&lt;code&gt;aws-lab1-rahimah&lt;/code&gt;&lt;/strong&gt;, which currently holds one object, &lt;code&gt;datacenter.png&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Create a folder
&lt;/h2&gt;

&lt;p&gt;Inside the bucket, I clicked &lt;strong&gt;Create folder&lt;/strong&gt;. The form asks for a &lt;strong&gt;folder name&lt;/strong&gt;, so I entered &lt;code&gt;food&lt;/code&gt;. Notice the hint under the field: folder names can't contain a &lt;code&gt;/&lt;/code&gt;, because S3 uses that character itself to mark folder boundaries (more on that shortly).&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F575o889okd3gpxs5w3uu.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F575o889okd3gpxs5w3uu.png" alt="Create folder page with the name food" width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The page also has a &lt;strong&gt;Server-side encryption&lt;/strong&gt; section with two options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Don't specify an encryption key:&lt;/strong&gt; the folder uses the bucket's default encryption setting. I kept this one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specify an encryption key:&lt;/strong&gt; choose a key just for this folder object.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two warnings on that page are worth reading. The encryption settings apply only to the folder object itself, not to the files you later put inside it. And if your bucket policy requires a specific encryption key, you must specify that same key here, or folder creation will fail.&lt;/p&gt;

&lt;p&gt;After clicking &lt;strong&gt;Create folder&lt;/strong&gt;, S3 confirmed with a green banner, and the bucket now lists &lt;strong&gt;Objects (2)&lt;/strong&gt;: &lt;code&gt;datacenter.png&lt;/code&gt; and &lt;code&gt;food/&lt;/code&gt;. The &lt;strong&gt;Type&lt;/strong&gt; column shows &lt;strong&gt;Folder&lt;/strong&gt; for &lt;code&gt;food/&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe9s80t7p7oocwn3d9l94.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe9s80t7p7oocwn3d9l94.png" alt="create folder" width="799" height="342"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu6zqbdn316wqdqheqndu.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu6zqbdn316wqdqheqndu.png" alt="Successfully created folder food" width="799" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Opening &lt;code&gt;food/&lt;/code&gt; shows an empty folder: &lt;strong&gt;Objects (0)&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8pxj3052mlyooyfgbv8o.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8pxj3052mlyooyfgbv8o.png" alt="The empty food/ folder" width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  So what is a "folder" in S3?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Here's the important part. S3 uses a &lt;strong&gt;flat structure&lt;/strong&gt;. There is a bucket, and inside it there are objects. That's it. There are no real directories nested inside each other.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  What the console calls a folder is built from three ideas:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Key:&lt;/strong&gt; the full name of an object. A file I upload into &lt;code&gt;food/&lt;/code&gt; has the key &lt;code&gt;food/burger.png&lt;/code&gt;, not just &lt;code&gt;burger.png&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prefix:&lt;/strong&gt; the beginning part of a key. For &lt;code&gt;food/burger.png&lt;/code&gt;, the prefix is &lt;code&gt;food/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delimiter:&lt;/strong&gt; the character that separates the parts of a key. In S3, it's the forward slash &lt;code&gt;/&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you click &lt;strong&gt;Create folder&lt;/strong&gt;, S3 creates a tiny, empty object whose key ends in &lt;code&gt;/&lt;/code&gt; (here, &lt;code&gt;food/&lt;/code&gt;). The console then uses the &lt;code&gt;/&lt;/code&gt; delimiter to &lt;em&gt;display&lt;/em&gt; objects with the same prefix as if they lived in a folder. It's a presentation layer that makes a flat store feel familiar.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Coming from Azure?&lt;/strong&gt; It works much the same way in Blob Storage. A container holds blobs in a flat namespace, and "folders" are just &lt;code&gt;/&lt;/code&gt; characters in blob names (virtual directories). Real directories only appear when you enable the hierarchical namespace on a storage account (Data Lake Storage Gen2).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 2: Upload multiple files into the folder
&lt;/h2&gt;

&lt;p&gt;With &lt;code&gt;food/&lt;/code&gt; open, I clicked &lt;strong&gt;Upload&lt;/strong&gt;, then &lt;strong&gt;Add files&lt;/strong&gt;. In the file picker, I selected three images at once: &lt;code&gt;burger.png&lt;/code&gt;, &lt;code&gt;cake.png&lt;/code&gt; and &lt;code&gt;pizza.png&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgp68q18g6e2wxhmqsi4v.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgp68q18g6e2wxhmqsi4v.png" alt="Selecting three files in the file picker" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Upload page lists all three (3 total, 8.2 MB), and the &lt;strong&gt;Destination&lt;/strong&gt; is now &lt;code&gt;s3://aws-lab1-rahimah/food/&lt;/code&gt;. That path is the S3 URI of the folder, which is exactly the prefix the files will receive.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F97kqxg0ulmy1t7fi8ub0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F97kqxg0ulmy1t7fi8ub0.png" alt="Three files ready to upload to the food/ prefix" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I clicked &lt;strong&gt;Upload&lt;/strong&gt;, and the status page reported &lt;strong&gt;Upload succeeded&lt;/strong&gt;: 3 files, 8.2 MB, 100%, with 0 failures.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpwg06l7x4zoru8il0e29.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpwg06l7x4zoru8il0e29.png" alt="Upload succeeded for all three files" width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Back at the bucket's root, there are still only two entries, &lt;code&gt;datacenter.png&lt;/code&gt; and &lt;code&gt;food/&lt;/code&gt;. The three new files live &lt;em&gt;inside&lt;/em&gt; the folder.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsu0uk1h4ake87xrye2s8.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsu0uk1h4ake87xrye2s8.png" alt="The bucket root still shows two entries" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Opening &lt;code&gt;food/&lt;/code&gt; shows &lt;strong&gt;Objects (3)&lt;/strong&gt;: &lt;code&gt;burger.png&lt;/code&gt;, &lt;code&gt;cake.png&lt;/code&gt; and &lt;code&gt;pizza.png&lt;/code&gt;, each with the &lt;strong&gt;Standard&lt;/strong&gt; storage class and its own last-modified time.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpdccgl0nltxy8n3epwaj.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpdccgl0nltxy8n3epwaj.png" alt="Three objects inside food/" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Open a file and see the prefix in the URL
&lt;/h2&gt;

&lt;p&gt;To prove the prefix idea, I selected &lt;code&gt;burger.png&lt;/code&gt; and clicked &lt;strong&gt;Open&lt;/strong&gt;. The image loaded in a new tab, and the address bar shows the key right in the path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://aws-lab1-rahimah.s3.eu-north-1.amazonaws.com/food/burger.png?X-Amz-Algorithm=...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhzb4x1k2rotxg30dy8hm.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhzb4x1k2rotxg30dy8hm.png" alt="burger.png opened in the browser, with food/ visible in the URL" width="799" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See &lt;code&gt;food/burger.png&lt;/code&gt;? That's the full key. There's no directory lookup involved. The long &lt;code&gt;X-Amz-...&lt;/code&gt; parameters after it are the presigned URL signature I covered in the first article, which is why the file opens even though the bucket is private.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Create a nested folder
&lt;/h2&gt;

&lt;p&gt;Next, I wanted a sub-folder. Inside &lt;code&gt;food/&lt;/code&gt;, I clicked &lt;strong&gt;Create folder&lt;/strong&gt; again and named it &lt;code&gt;menu&lt;/code&gt;. S3 confirmed with &lt;strong&gt;Successfully created folder "menu"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now &lt;code&gt;food/&lt;/code&gt; contains &lt;code&gt;burger.png&lt;/code&gt;, &lt;code&gt;cake.png&lt;/code&gt;, &lt;code&gt;pizza.png&lt;/code&gt; and the new &lt;code&gt;menu/&lt;/code&gt; folder. The key of that new folder is &lt;code&gt;food/menu/&lt;/code&gt;, which is just a longer prefix. Nesting folders only means chaining more prefixes with &lt;code&gt;/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I deleted the datacenter.png and created an empty folder called menu/.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Move a file into the new folder
&lt;/h2&gt;

&lt;p&gt;I wanted &lt;code&gt;cake.png&lt;/code&gt; to live in &lt;code&gt;menu/&lt;/code&gt;. I ticked the checkbox next to &lt;code&gt;cake.png&lt;/code&gt; and opened the &lt;strong&gt;Actions&lt;/strong&gt; menu. It offers a lot of options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Download as&lt;/strong&gt; and &lt;strong&gt;Share with a presigned URL&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calculate total size&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copy&lt;/strong&gt; and &lt;strong&gt;Move&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Query with S3 Select&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Edit actions&lt;/strong&gt;: &lt;strong&gt;Rename object&lt;/strong&gt;, &lt;strong&gt;Edit storage class&lt;/strong&gt;, &lt;strong&gt;Edit server-side encryption&lt;/strong&gt;, &lt;strong&gt;Edit tags&lt;/strong&gt;, and &lt;strong&gt;Make public using ACL&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fni5jt1su6d28iv167nou.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fni5jt1su6d28iv167nou.png" alt="The Actions menu with cake.png selected" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I chose &lt;strong&gt;Move&lt;/strong&gt;. The page opens with an important note at the top: &lt;em&gt;this action creates a copy of the object with a new last-modified date, and depending on the bucket's versioning status, a delete marker will be inserted or the original object will be permanently deleted.&lt;/em&gt; Keep that sentence in mind, because it explains what move really does (more below).&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7w06f81if51ey22vkbrn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7w06f81if51ey22vkbrn.png" alt="the move page" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Destination&lt;/strong&gt; field expects an S3 path in the format &lt;code&gt;s3://bucket-name/optional-prefix/&lt;/code&gt;. You can type it, or click &lt;strong&gt;Browse S3&lt;/strong&gt; and navigate to the folder. I used Browse S3, went into &lt;code&gt;aws-lab1-rahimah&lt;/code&gt; &amp;gt; &lt;code&gt;food/&lt;/code&gt;, and selected the &lt;code&gt;menu/&lt;/code&gt; folder.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz5q1q6mtcjswyvfdcr0e.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz5q1q6mtcjswyvfdcr0e.png" alt="Browsing S3 to pick the menu/ folder" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The browser also lets you open &lt;code&gt;menu/&lt;/code&gt; to check what's inside. At this point, it says there are no objects under this path, which is expected for a brand-new folder.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbo64xfxgckfstrb2caf1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbo64xfxgckfstrb2caf1.png" alt="Inside menu/ in the destination browser" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After clicking &lt;strong&gt;Choose destination&lt;/strong&gt;, the form filled itself in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Destination:&lt;/strong&gt; &lt;code&gt;s3://aws-lab1-rahimah/food/menu/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Destination bucket name:&lt;/strong&gt; &lt;code&gt;aws-lab1-rahimah&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Destination prefix:&lt;/strong&gt; &lt;code&gt;food/menu/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Below that, &lt;strong&gt;Destination details&lt;/strong&gt; shows the settings of the target bucket: &lt;strong&gt;Bucket Versioning&lt;/strong&gt; is &lt;strong&gt;Disabled&lt;/strong&gt;, &lt;strong&gt;Default encryption&lt;/strong&gt; is &lt;strong&gt;SSE-S3&lt;/strong&gt;, and &lt;strong&gt;Object Lock&lt;/strong&gt; is &lt;strong&gt;Disabled&lt;/strong&gt;. Because versioning is off, the console shows a recommendation to enable it. The &lt;strong&gt;Specified objects&lt;/strong&gt; table confirms the one file being moved, &lt;code&gt;cake.png&lt;/code&gt; (2.7 MB).&lt;/p&gt;

&lt;p&gt;Last, &lt;strong&gt;Additional copy settings&lt;/strong&gt; offers three choices. I kept the default, &lt;strong&gt;Copy source settings&lt;/strong&gt;, which carries over the source object's storage class, tags, metadata and encryption. The other two let you skip those settings or specify new ones.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqn6z8rlt3fle6vqrb5ls.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqn6z8rlt3fle6vqrb5ls.png" alt="Move configuration before clicking Move" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I clicked &lt;strong&gt;Move&lt;/strong&gt;. The status page reported &lt;strong&gt;Successfully moved objects&lt;/strong&gt;: 1 object, 2.7 MB, with 0 failures.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd6mb1yzeaxcjmdxun6lt.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd6mb1yzeaxcjmdxun6lt.png" alt="Successfully moved objects" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Checking the results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;food/&lt;/code&gt; now shows &lt;strong&gt;Objects (3)&lt;/strong&gt;: &lt;code&gt;burger.png&lt;/code&gt;, &lt;code&gt;menu/&lt;/code&gt; and &lt;code&gt;pizza.png&lt;/code&gt;. &lt;code&gt;cake.png&lt;/code&gt; is gone from here.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdhutk5d3gnzy0fax4vqp.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdhutk5d3gnzy0fax4vqp.png" alt="food/ after the move" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;menu/&lt;/code&gt; shows &lt;strong&gt;Objects (1)&lt;/strong&gt;: &lt;code&gt;cake.png&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F29nl7i2urhly9tn2b3j2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F29nl7i2urhly9tn2b3j2.png" alt="cake.png now lives in menu/" width="800" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What "move" really does
&lt;/h3&gt;

&lt;p&gt;Look at the &lt;strong&gt;Last modified&lt;/strong&gt; time on the moved file. It changed to a newer timestamp than when I originally uploaded it. That's the giveaway: S3 has no true "move" or "rename" operation. The console does two steps for you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Copy&lt;/strong&gt; the object to the new key (&lt;code&gt;food/cake.png&lt;/code&gt; becomes &lt;code&gt;food/menu/cake.png&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delete&lt;/strong&gt; the original.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This matters for two reasons. First, because versioning was &lt;strong&gt;disabled&lt;/strong&gt; on this bucket, the original was &lt;strong&gt;permanently deleted&lt;/strong&gt;. If versioning were enabled, S3 would insert a &lt;strong&gt;delete marker&lt;/strong&gt; instead, and the old version could be recovered. Second, the same logic applies to &lt;strong&gt;Rename object&lt;/strong&gt;: it's also a copy followed by a delete, since a rename just means giving the object a new key.&lt;/p&gt;

&lt;p&gt;For anything you can't afford to lose, enable versioning before you start moving things around.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Delete the bucket
&lt;/h2&gt;

&lt;p&gt;When the lab is finished, clean up so nothing lingers in your account. On the &lt;strong&gt;General purpose buckets&lt;/strong&gt; page, I selected the radio button next to &lt;code&gt;aws-lab1-rahimah&lt;/code&gt;. The toolbar offers &lt;strong&gt;Copy ARN&lt;/strong&gt;, &lt;strong&gt;Empty&lt;/strong&gt;, &lt;strong&gt;Delete&lt;/strong&gt; and &lt;strong&gt;Create bucket&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx8g6umlvr9yr7whjvxht.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx8g6umlvr9yr7whjvxht.png" alt="The bucket list with the bucket selected" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I clicked &lt;strong&gt;Delete&lt;/strong&gt; first, and S3 stopped me with this error: &lt;strong&gt;"This bucket is not empty. Buckets must be empty before they can be deleted."&lt;/strong&gt; The page also asks you to type the bucket's name to confirm deletion, but the &lt;strong&gt;Delete bucket&lt;/strong&gt; button stays disabled until the bucket is empty.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fys0phknctgtf4sfl8zhn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fys0phknctgtf4sfl8zhn.png" alt="Delete bucket error: This bucket is not empty" width="799" height="290"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The solution is to empty the bucket first:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Empty bucket&lt;/strong&gt; (on that error banner, or &lt;strong&gt;Empty&lt;/strong&gt; on the bucket list).
Or go back to the bucket, select the objects and click &lt;strong&gt;delete&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Confirm by typing &lt;code&gt;permanently delete&lt;/code&gt; when prompted, then click &lt;strong&gt;Empty&lt;/strong&gt;. This can never be retrieved because versioning is not enabled.&lt;/li&gt;
&lt;/ol&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd4lxkynqqmciqupldgcz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd4lxkynqqmciqupldgcz.png" alt="permanently delete" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Return to &lt;strong&gt;Delete bucket&lt;/strong&gt;, type &lt;code&gt;aws-lab1-rahimah&lt;/code&gt; in the confirmation field, and click &lt;strong&gt;Delete bucket&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi58jhdxzvqn7oaurssnl.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi58jhdxzvqn7oaurssnl.png" alt="delete bucket" width="800" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Emptying removes every object, including the folder objects, and it cannot be undone. That's why S3 makes you confirm twice.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feu55mdcpgqd9on0wk433.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feu55mdcpgqd9on0wk433.png" alt="successful deletion" width="799" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;S3 has no real folders.&lt;/strong&gt; A "folder" is a &lt;strong&gt;prefix&lt;/strong&gt; that the console displays using the &lt;code&gt;/&lt;/code&gt; &lt;strong&gt;delimiter&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;An object's &lt;strong&gt;key&lt;/strong&gt; is its full name, including the prefix. &lt;code&gt;burger.png&lt;/code&gt; inside &lt;code&gt;food/&lt;/code&gt; has the key &lt;code&gt;food/burger.png&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Creating a folder just creates a small, empty object whose key ends in &lt;code&gt;/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You can &lt;strong&gt;upload several files at once&lt;/strong&gt;, and they all receive the destination folder's prefix.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Move&lt;/strong&gt; and &lt;strong&gt;Rename&lt;/strong&gt; are really &lt;strong&gt;copy + delete&lt;/strong&gt;, which is why the last-modified date changes.&lt;/li&gt;
&lt;li&gt;With &lt;strong&gt;versioning disabled&lt;/strong&gt;, a move permanently removes the original. With versioning enabled, a delete marker is added instead.&lt;/li&gt;
&lt;li&gt;A bucket must be &lt;strong&gt;emptied before it can be deleted&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In Azure terms, this is the same flat-namespace model as Blob Storage virtual directories.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Folders in S3 are a convenience, not a structure. Once you think in terms of keys and prefixes, things like moving files, setting lifecycle rules and writing IAM policies for &lt;code&gt;food/*&lt;/code&gt; all make sense, because they all work on prefixes.&lt;/p&gt;

&lt;p&gt;Next up in this series, I'll look at S3 permissions and what it takes to make an object public safely.&lt;/p&gt;

&lt;p&gt;Which S3 feature should I cover after that: versioning, lifecycle rules or static website hosting? Let me know in the comments.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>s3</category>
      <category>cloudstorage</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>Getting Started with AWS S3: Creating a Bucket, Uploading an Object, and Understanding Why the Object URL Says Access Denied</title>
      <dc:creator>Rahimah Sulayman</dc:creator>
      <pubDate>Tue, 20 Oct 2026 23:11:02 +0000</pubDate>
      <link>https://dev.to/rahimah_dev/getting-started-with-aws-s3-creating-a-bucket-uploading-an-object-and-understanding-why-the-1f2l</link>
      <guid>https://dev.to/rahimah_dev/getting-started-with-aws-s3-creating-a-bucket-uploading-an-object-and-understanding-why-the-1f2l</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I'm starting a new series on AWS, and this first article covers Amazon S3 (Simple Storage Service), one of the most widely used services on AWS. I did this lab in my own personal AWS free-tier account, and I'll explain every term as it comes up.&lt;/p&gt;

&lt;p&gt;By the end, you'll know how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create an S3 bucket with a consistent naming convention&lt;/li&gt;
&lt;li&gt;Read the bucket's ARN and properties&lt;/li&gt;
&lt;li&gt;Upload a file to the bucket&lt;/li&gt;
&lt;li&gt;Find an object's URL, and understand why opening the image works while opening the Object URL doesn't&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is Amazon S3?
&lt;/h2&gt;

&lt;p&gt;Amazon S3 is an &lt;strong&gt;object storage&lt;/strong&gt; service. Instead of organizing data in a traditional disk with a file system, S3 stores data as &lt;strong&gt;objects&lt;/strong&gt; inside &lt;strong&gt;buckets&lt;/strong&gt;. You can store and retrieve any amount of data from anywhere, and you pay only for what you use.&lt;/p&gt;

&lt;p&gt;Three terms to know first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bucket:&lt;/strong&gt; a container for your data. Every object in S3 lives inside a bucket.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Object:&lt;/strong&gt; the thing you store. It's the file itself plus its metadata (size, type, last modified date and so on).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key:&lt;/strong&gt; the object's unique name inside the bucket. For my file, the key is &lt;code&gt;datacenter.png&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 1: Open the S3 service
&lt;/h3&gt;

&lt;p&gt;In the AWS Management Console, I typed &lt;strong&gt;S3&lt;/strong&gt; into the search bar and selected &lt;strong&gt;S3 (Scalable Storage in the Cloud)&lt;/strong&gt; from the results.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa49x69z6485s27aljqgw.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa49x69z6485s27aljqgw.png" alt="Searching for S3 in the AWS console" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This opens the Amazon S3 landing page, where &lt;strong&gt;Create bucket&lt;/strong&gt; is the first thing you see.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh3tlx0ygatm4un5z5fct.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh3tlx0ygatm4un5z5fct.png" alt="Amazon S3 landing page with the Create bucket button" width="799" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Create a bucket
&lt;/h2&gt;

&lt;p&gt;I clicked &lt;strong&gt;Create bucket&lt;/strong&gt;, and the only thing I had to provide was the &lt;strong&gt;bucket name&lt;/strong&gt;. The &lt;strong&gt;region&lt;/strong&gt; was already set for me (more on that below), and I left everything else at the defaults to keep things simple.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnphsnb91a34wnybssgzw.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnphsnb91a34wnybssgzw.png" alt="Create bucket page, General configuration section" width="800" height="603"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Region
&lt;/h3&gt;

&lt;p&gt;I didn't pick the region on this page. The Create bucket page shows it as plain text, not a dropdown: &lt;strong&gt;Europe (Stockholm) &lt;code&gt;eu-north-1&lt;/code&gt;&lt;/strong&gt;. That's because S3 creates a bucket in whichever region your console is currently set to, and mine was already set to Stockholm. &lt;em&gt;I can't change it because this is a free plan&lt;/em&gt;. If you want a different region, switch it with the region selector in the top bar of the console &lt;em&gt;before&lt;/em&gt; you click Create bucket.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;region&lt;/strong&gt; is a physical geographic location where AWS runs data centers. Your bucket's data stays in the region it was created in, and the region affects latency (how close the data is to your users) and pricing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bucket type
&lt;/h3&gt;

&lt;p&gt;I kept &lt;strong&gt;General purpose&lt;/strong&gt;, which AWS recommends for most use cases. The other option, &lt;strong&gt;Directory&lt;/strong&gt;, is for low-latency workloads that use a single Availability Zone.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bucket namespace
&lt;/h3&gt;

&lt;p&gt;I kept &lt;strong&gt;Global namespace&lt;/strong&gt;. A &lt;strong&gt;namespace&lt;/strong&gt; is the set of names in which yours has to be unique. In the global namespace, a bucket name must be unique across all AWS accounts, in every region. If someone else already has &lt;code&gt;my-bucket&lt;/code&gt;, you can't use it. The console also offers an &lt;strong&gt;Account Regional namespace&lt;/strong&gt; (labelled "recommended"). Buckets created there are unique only within your own account, so no other AWS account can ever claim the same name. I stayed with the global namespace for this lab.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bucket name and the prefix naming convention
&lt;/h3&gt;

&lt;p&gt;I named my bucket &lt;strong&gt;&lt;code&gt;aws-lab1-rahimah&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;aws-lab1-&lt;/code&gt; part is a &lt;strong&gt;prefix&lt;/strong&gt; I chose as a naming convention. A consistent prefix gives you three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It keeps names unique, since adding your own name or project helps avoid clashes in the global namespace.&lt;/li&gt;
&lt;li&gt;It groups related resources together (&lt;code&gt;aws-lab1-...&lt;/code&gt;, &lt;code&gt;aws-lab2-...&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;It makes resources easy to find and to clean up later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;S3 bucket names must be 3 to 63 characters long, can contain only lowercase letters, numbers, periods and hyphens, and must begin and end with a letter or number.&lt;/p&gt;

&lt;h3&gt;
  
  
  Default encryption
&lt;/h3&gt;

&lt;p&gt;Further down the page, &lt;strong&gt;Default encryption&lt;/strong&gt; was already set to &lt;strong&gt;Server-side encryption with Amazon S3 managed keys (SSE-S3)&lt;/strong&gt;. This means S3 automatically encrypts every new object at rest, using keys that AWS manages for you. You don't have to do anything. I left it as it was and clicked &lt;strong&gt;Create bucket&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvfiizxzcmlfm9ykir2pz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvfiizxzcmlfm9ykir2pz.png" alt="create bucket" width="800" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;S3 confirmed with a green banner: &lt;strong&gt;Successfully created bucket "aws-lab1-rahimah"&lt;/strong&gt;. The Objects tab shows &lt;strong&gt;Objects (0)&lt;/strong&gt; because the bucket is empty.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmcmg2vlthx6angtr1e5d.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmcmg2vlthx6angtr1e5d.png" alt="Bucket created successfully with Objects (0)" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Look at the bucket's properties and ARN
&lt;/h2&gt;

&lt;p&gt;I opened the &lt;strong&gt;Properties&lt;/strong&gt; tab. The &lt;strong&gt;Bucket overview&lt;/strong&gt; shows three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS Region:&lt;/strong&gt; Europe (Stockholm) &lt;code&gt;eu-north-1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creation date:&lt;/strong&gt; October 20, 2026&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Resource Name (ARN):&lt;/strong&gt; &lt;code&gt;arn:aws:s3:::aws-lab1-rahimah&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F32mksngtunnnxnusyr4x.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F32mksngtunnnxnusyr4x.png" alt="Bucket overview on the Properties tab" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What is an ARN?
&lt;/h3&gt;

&lt;p&gt;An &lt;strong&gt;Amazon Resource Name (ARN)&lt;/strong&gt; is the unique identifier AWS gives every resource. It's how you point at a specific resource in IAM policies, logs and other services. The general shape is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;arn:partition:service:region:account-id:resource
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For S3 buckets, the region and account sections are empty, which is why you see three colons in a row (&lt;code&gt;:::&lt;/code&gt;). The bucket name is the final part.&lt;/p&gt;

&lt;p&gt;The Properties tab also shows two settings that were off by default:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bucket Versioning: Disabled.&lt;/strong&gt; Versioning keeps multiple versions of an object, so you can recover from accidental overwrites or deletions. With it disabled, uploading a file with the same key replaces the old one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-factor authentication (MFA) delete: Disabled.&lt;/strong&gt; This extra layer of security requires MFA before you can permanently delete object versions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 4: Upload a file to the bucket
&lt;/h2&gt;

&lt;p&gt;Back on the &lt;strong&gt;Objects&lt;/strong&gt; tab, I clicked &lt;strong&gt;Upload&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fighcpq4jy0tqupu885bj.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fighcpq4jy0tqupu885bj.png" alt="Empty bucket with the Upload button" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the Upload page, I clicked &lt;strong&gt;Add files&lt;/strong&gt; and picked an image called &lt;code&gt;datacenter.png&lt;/code&gt; from my Downloads folder. You can also drag and drop files, or use &lt;strong&gt;Add folder&lt;/strong&gt; to upload a whole folder.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw9exbsh5e5rxsozcvayr.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw9exbsh5e5rxsozcvayr.png" alt="File picker window" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The page then listed the file as &lt;strong&gt;1 total, 2.4 MB&lt;/strong&gt;, type &lt;code&gt;image/png&lt;/code&gt;, with the destination shown as &lt;code&gt;s3://aws-lab1-rahimah&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5x1gglvmnh4atpice5rw.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5x1gglvmnh4atpice5rw.png" alt="File listed under Files and folders" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Scrolling down, you'll see two collapsed sections:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Permissions:&lt;/strong&gt; where you can grant public access and access to other AWS accounts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Properties:&lt;/strong&gt; where you can set the storage class, encryption settings and tags.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I left both alone and clicked &lt;strong&gt;Upload&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxd5rn0et9q5pgdhxyr1k.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxd5rn0et9q5pgdhxyr1k.png" alt="Permissions and Properties sections with the Upload button" width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next page showed &lt;strong&gt;Upload succeeded&lt;/strong&gt;, with a summary of 1 file, 2.4 MB, 100% succeeded and 0 failed.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsg4scom3fxgadfyincd6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsg4scom3fxgadfyincd6.png" alt="Upload status page showing success" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Back in the bucket, &lt;strong&gt;Objects (1)&lt;/strong&gt; now lists &lt;code&gt;datacenter.png&lt;/code&gt;, size 2.4 MB, and storage class &lt;strong&gt;Standard&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3r2oi64m1cz6taj37rs5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3r2oi64m1cz6taj37rs5.png" alt="Bucket listing the uploaded object" width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Storage class&lt;/strong&gt; controls how your data is stored and what it costs. &lt;strong&gt;Standard&lt;/strong&gt; is the default and is meant for frequently accessed data. Other classes, such as Glacier, are cheaper for data you rarely need to retrieve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Explore the object's details
&lt;/h2&gt;

&lt;p&gt;I clicked &lt;code&gt;datacenter.png&lt;/code&gt; to open its details. The &lt;strong&gt;Object overview&lt;/strong&gt; shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; the canonical ID of the AWS account that owns the object&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Region:&lt;/strong&gt; &lt;code&gt;eu-north-1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Last modified, Size and Type&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key:&lt;/strong&gt; &lt;code&gt;datacenter.png&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;S3 URI:&lt;/strong&gt; &lt;code&gt;s3://aws-lab1-rahimah/datacenter.png&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ARN:&lt;/strong&gt; &lt;code&gt;arn:aws:s3:::aws-lab1-rahimah/datacenter.png&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Entity tag (ETag):&lt;/strong&gt; an identifier for this specific version of the object's content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Object URL:&lt;/strong&gt; &lt;code&gt;https://aws-lab1-rahimah.s3.eu-north-1.amazonaws.com/datacenter.png&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft1g1b1zaqpn7pcmmrmu7.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft1g1b1zaqpn7pcmmrmu7.png" alt="Object overview page" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two of these are easy to confuse:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;S3 URI&lt;/strong&gt; (&lt;code&gt;s3://bucket/key&lt;/code&gt;) is what AWS tools like the AWS CLI and SDKs use to refer to an object.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Object URL&lt;/strong&gt; is the HTTPS address of the object on the internet, in the form &lt;code&gt;https://bucket-name.s3.region.amazonaws.com/key&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;ARN&lt;/strong&gt; here is the bucket's ARN with the object key added on the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Open the image vs. use the Object URL
&lt;/h2&gt;

&lt;p&gt;This is the part that surprised me, and it taught me the most. There are two ways to view the uploaded image, and they behave differently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 1: Click "Open"
&lt;/h3&gt;

&lt;p&gt;Clicking the &lt;strong&gt;Open&lt;/strong&gt; button displays the image in a new browser tab. The address bar shows a very long URL that carries extra parameters such as &lt;code&gt;X-Amz-Algorithm=AWS4-HMAC-SHA256&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8hbfez8988ujai060tt1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8hbfez8988ujai060tt1.png" alt="The image displayed in the browser after clicking Open" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is a &lt;strong&gt;presigned URL&lt;/strong&gt;. When you click Open, the console uses your own credentials to generate a temporary, signed link that grants access to the object for a short time. S3 sees the signature, confirms that a permitted user created it, and serves the file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 2: Paste the Object URL
&lt;/h3&gt;

&lt;p&gt;When I copied the plain &lt;strong&gt;Object URL&lt;/strong&gt; into the browser, I got this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Error&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;Code&amp;gt;&lt;/span&gt;AccessDenied&lt;span class="nt"&gt;&amp;lt;/Code&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;Message&amp;gt;&lt;/span&gt;Access Denied&lt;span class="nt"&gt;&amp;lt;/Message&amp;gt;&lt;/span&gt;
  ...
&lt;span class="nt"&gt;&amp;lt;/Error&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb1tv21x2grgk974fz3gn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb1tv21x2grgk974fz3gn.png" alt="AccessDenied error when opening the Object URL" width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why the difference?
&lt;/h3&gt;

&lt;p&gt;The Object URL is an &lt;em&gt;unauthenticated&lt;/em&gt; request. When you paste it into a browser, there's no signature and nothing that tells S3 who you are, so S3 treats you as an anonymous visitor. S3 buckets and objects are &lt;strong&gt;private by default&lt;/strong&gt;, and only the owner can access them unless permissions are explicitly granted. So the anonymous request is refused with &lt;code&gt;AccessDenied&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The error is not a bug. It shows S3's security model working as designed: nothing is public until you deliberately make it so.&lt;/p&gt;

&lt;h3&gt;
  
  
  Making objects public
&lt;/h3&gt;

&lt;p&gt;If you need public access, for example to host images on a website, you'd have to change two things: turn off the relevant &lt;strong&gt;Block Public Access&lt;/strong&gt; settings on the bucket, and then grant read access through a bucket policy or object permissions. Only do this for data that's genuinely meant to be public. For private files, presigned URLs are a safer way to share something temporarily.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;bucket&lt;/strong&gt; is a container and an &lt;strong&gt;object&lt;/strong&gt; is a file inside it, identified by its &lt;strong&gt;key&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Bucket names must be &lt;strong&gt;globally unique&lt;/strong&gt;, so a naming prefix like &lt;code&gt;aws-lab1-&lt;/code&gt; helps keep names unique and organized.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;region&lt;/strong&gt; determines where your data physically lives.&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;ARN&lt;/strong&gt; uniquely identifies any AWS resource, and an object's ARN is its bucket's ARN plus the key.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;S3 URI&lt;/strong&gt; is for AWS tools, while the &lt;strong&gt;Object URL&lt;/strong&gt; is the HTTPS address.&lt;/li&gt;
&lt;li&gt;S3 is &lt;strong&gt;private by default&lt;/strong&gt;. Opening an object from the console works because it uses a presigned URL, while the plain Object URL returns &lt;code&gt;AccessDenied&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Clean up
&lt;/h2&gt;

&lt;p&gt;To avoid unexpected charges, delete what you created. You must empty a bucket before you can delete it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;code&gt;datacenter.png&lt;/code&gt; and click the box, make sure you tick it, so that the Delete button is not greyed out.&lt;/li&gt;
&lt;/ol&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frfpqlrhwfhhe0vb569m3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frfpqlrhwfhhe0vb569m3.png" alt="delete datacenter" width="800" height="302"&gt;&lt;/a&gt;&lt;br&gt;
Then confirm deletion.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffrmkc4u1afewtjny0kbi.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffrmkc4u1afewtjny0kbi.png" alt="confirm deletion" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go back to the bucket list, select &lt;code&gt;aws-lab1-rahimah&lt;/code&gt; and click &lt;strong&gt;Delete object&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this first lab, I created an S3 bucket, uploaded an object, and learned why access to it is blocked by default. Next in the series, I'll build on this with more S3 features and other AWS services.&lt;/p&gt;

&lt;p&gt;If you're learning AWS, let me know in the comments which service I should cover next.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>s3</category>
      <category>cloud</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Configure a project and repository structure to support secure pipelines.</title>
      <dc:creator>Rahimah Sulayman</dc:creator>
      <pubDate>Fri, 16 Oct 2026 08:37:18 +0000</pubDate>
      <link>https://dev.to/rahimah_dev/configure-a-project-and-repository-structure-to-support-secure-pipelines-6o4</link>
      <guid>https://dev.to/rahimah_dev/configure-a-project-and-repository-structure-to-support-secure-pipelines-6o4</guid>
      <description>&lt;p&gt;In this lab, you will learn how to configure a project and repository structure in Azure DevOps to support secure pipelines. This lab covers best practices for organizing projects and repositories, assigning permissions, and managing secure files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before you start
&lt;/h2&gt;

&lt;p&gt;You’ll need an Azure subscription, Azure DevOps organization, and the eShopOnWeb application to follow the labs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow the steps to validate your lab environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Validate your lab environment
&lt;/h3&gt;

&lt;p&gt;In preparation for the labs, it is crucial to have your environment correctly set up. This section will guide you through the setup process, ensuring all prerequisites are met.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The labs require &lt;strong&gt;Microsoft Edge&lt;/strong&gt; or an &lt;a href="https://learn.microsoft.com/en-us/azure/devops/server/compatibility?view=azure-devops#web-portal-supported-browsers" rel="noopener noreferrer"&gt;Azure DevOps-supported browser&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set up an Azure Subscription&lt;/strong&gt;: If you don’t already have an Azure subscription, create one by following the instructions on this page or visit &lt;a href="https://azure.microsoft.com/en-us/pricing/purchase-options/azure-account?icid=azurefreeaccount" rel="noopener noreferrer"&gt;https://azure.microsoft.com/free&lt;/a&gt; to sign up for a free.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set up an Azure DevOps organization&lt;/strong&gt;: If you don’t already have an Azure DevOps organization that you can use for the labs, create one by following the instructions on this page, or at &lt;a href="https://azure.microsoft.com/en-us/pricing/purchase-options/azure-account?icid=azurefreeaccount" rel="noopener noreferrer"&gt;Create an organization or project collection&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://gitforwindows.org/" rel="noopener noreferrer"&gt;Git for Windows download page&lt;/a&gt;. This will be installed as part of prerequisites for this lab.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt;. This will be installed as part of prerequisites for this lab.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://learn.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest" rel="noopener noreferrer"&gt;Azure CLI&lt;/a&gt;. Install the Azure CLI on the self-hosted agent machines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dotnet.microsoft.com/en-us/download/visual-studio-sdks" rel="noopener noreferrer"&gt;.NET SDK - Latest version&lt;/a&gt;. Install the .NET SDK on the self-hosted agent machines.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instructions to create an Azure DevOps Organization (you only have to do this once)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Start at step 3, if you do already have a &lt;strong&gt;personal Microsoft Account&lt;/strong&gt; setup and an active Azure Subscription linked to that account.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;1.Use a private browser session to get a new &lt;strong&gt;personal Microsoft Account (MSA)&lt;/strong&gt; at &lt;code&gt;https://account.microsoft.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;2.Using the same browser session, sign up for a free Azure subscription at &lt;code&gt;https://azure.microsoft.com/free&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;3.Open a browser and navigate to Azure portal at &lt;code&gt;https://portal.azure.com&lt;/code&gt;, then search at the top of the Azure portal screen for &lt;strong&gt;Azure DevOps&lt;/strong&gt;. In the resulting page, click &lt;strong&gt;Azure DevOps organizations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;4.Next, click on the link labelled &lt;strong&gt;My Azure DevOps Organizations&lt;/strong&gt; or navigate directly to &lt;code&gt;https://aex.dev.azure.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;5.On the &lt;strong&gt;We need a few more details&lt;/strong&gt; page, select &lt;strong&gt;Continue&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;6.In the drop-down box on the left, choose &lt;strong&gt;Default Directory&lt;/strong&gt;, instead of &lt;strong&gt;Microsoft Account&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;7.If prompted (&lt;em&gt;“We need a few more details”&lt;/em&gt;), provide your name, e-mail address, and location and click &lt;strong&gt;Continue&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;8.Back at &lt;code&gt;https://aex.dev.azure.com&lt;/code&gt; with &lt;strong&gt;Default Directory&lt;/strong&gt; selected click the blue button &lt;strong&gt;Create new organization&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;9.Accept the &lt;em&gt;Terms of Service&lt;/em&gt; by clicking &lt;strong&gt;Continue&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;10.If prompted (&lt;em&gt;“Almost done”&lt;/em&gt;), leave the name for the Azure DevOps organization at default (it needs to be a globally unique name) and pick a hosting location close to you from the list.&lt;/p&gt;

&lt;p&gt;11.Once the newly created organization opens in &lt;strong&gt;Azure DevOps&lt;/strong&gt;, select &lt;strong&gt;Organization settings&lt;/strong&gt; in the bottom left corner.&lt;/p&gt;

&lt;p&gt;12.At the &lt;strong&gt;Organization settings&lt;/strong&gt; screen select &lt;strong&gt;Billing&lt;/strong&gt; (opening this screen takes a few seconds).&lt;/p&gt;

&lt;p&gt;13.Select &lt;strong&gt;Setup billing&lt;/strong&gt; and on the right-hand side of the screen, select your &lt;strong&gt;Azure Subscription&lt;/strong&gt; and then select &lt;strong&gt;Save&lt;/strong&gt; to link the subscription with the organization.&lt;/p&gt;

&lt;p&gt;14.Once the screen shows the linked Azure Subscription ID at the top, change the number of &lt;strong&gt;Paid parallel jobs&lt;/strong&gt; for &lt;strong&gt;MS Hosted CI/CD&lt;/strong&gt; from 0 to &lt;strong&gt;1&lt;/strong&gt;. Then select &lt;strong&gt;SAVE&lt;/strong&gt; button at the bottom.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxrqnerg77rmcft0fo0y7.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxrqnerg77rmcft0fo0y7.png" alt="Paid parallel jobs" width="800" height="569"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: You may &lt;strong&gt;wait a couple of minutes before using the CI/CD capabilities&lt;/strong&gt; so that the new settings are reflected in the backend. Otherwise, you will still see the message “No hosted parallelism has been purchased or granted”.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;15.In &lt;strong&gt;Organization Settings&lt;/strong&gt;, go to section &lt;strong&gt;Pipelines&lt;/strong&gt; and click &lt;strong&gt;Settings&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;16.Toggle the switch to &lt;strong&gt;Off&lt;/strong&gt; for &lt;strong&gt;Disable creation of classic build pipelines&lt;/strong&gt; and &lt;strong&gt;Disable creation of classic release pipelines&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flx2myih6imoufyjejp8b.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flx2myih6imoufyjejp8b.png" alt="Disable creation of classic release pipelines" width="800" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The &lt;strong&gt;Disable creation of classic release pipelines&lt;/strong&gt; switch sets to &lt;strong&gt;On&lt;/strong&gt; hides classic release pipeline creation options such as the &lt;strong&gt;Release&lt;/strong&gt; menu in the &lt;strong&gt;Pipeline&lt;/strong&gt; section of DevOps projects.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;17.In &lt;strong&gt;Organization Settings&lt;/strong&gt;, go to section &lt;strong&gt;Security&lt;/strong&gt; and click &lt;strong&gt;Policies.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;18.Toggle the switch to &lt;strong&gt;On&lt;/strong&gt; for &lt;strong&gt;Allow public projects&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Filn7fmshz4b85oxqyyse.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Filn7fmshz4b85oxqyyse.png" alt="policies" width="800" height="743"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Extensions used in some labs might require a public project to allow using the free version.&lt;br&gt;
That option no longer exists.&lt;br&gt;
Instructions to create and configure the Azure DevOps project (you only have to do this once)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: make sure you completed the steps to create your Azure DevOps Organization before continuing with these steps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To follow all lab instructions, you’ll need set up a new Azure DevOps project, create a repository that’s based on the eShopOnWeb application, and create a service connection to your Azure subscription.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create the team project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First, you’ll create an &lt;strong&gt;eShopOnWeb&lt;/strong&gt; Azure DevOps project to be used by several labs.&lt;/p&gt;

&lt;p&gt;1.Open your browser and navigate to your Azure DevOps organization.&lt;/p&gt;

&lt;p&gt;2.Select the &lt;strong&gt;New Project&lt;/strong&gt; option and use the following settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;name: &lt;strong&gt;eShopOnWeb&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;visibility: &lt;strong&gt;Private&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Advanced: Version Control: &lt;strong&gt;Git&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Advanced: Work Item Process: &lt;strong&gt;Scrum&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;3.Select &lt;strong&gt;Create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv1yvueowec5e67wge2i5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv1yvueowec5e67wge2i5.png" alt="new project" width="800" height="382"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F68icwunu5m4pyozsld2v.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F68icwunu5m4pyozsld2v.png" alt="create" width="743" height="908"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Import eShopOnWeb git repository&lt;/strong&gt;&lt;br&gt;
Now, you’ll import the eShopOnWeb into your git repository.&lt;/p&gt;

&lt;p&gt;1.Open your browser and navigate to your Azure DevOps organization.&lt;/p&gt;

&lt;p&gt;2.Open the previously created &lt;strong&gt;eShopOnWeb&lt;/strong&gt; project.&lt;/p&gt;

&lt;p&gt;3.Select the &lt;strong&gt;Repos &amp;gt; Files, Import a Repository&lt;/strong&gt; and then select &lt;strong&gt;Import&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyq7a80v7h5z209x9rq27.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyq7a80v7h5z209x9rq27.png" alt="Import Repository" width="799" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.On the &lt;strong&gt;Import a Git Repository&lt;/strong&gt; window, paste the following URL &lt;code&gt;https://github.com/MicrosoftLearning/eShopOnWeb&lt;/code&gt; and select &lt;strong&gt;Import&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs6rm7g3hxyr8erpl4fco.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs6rm7g3hxyr8erpl4fco.png" alt="Import" width="578" height="921"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.The repository is organized the following way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;.ado&lt;/strong&gt; folder contains Azure DevOps YAML pipelines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;.devcontainer&lt;/strong&gt; folder container setup to develop using containers (either locally in VS Code or GitHub Codespaces).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;.azure&lt;/strong&gt; folder contains Bicep &amp;amp; ARM infrastructure as code templates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;.github&lt;/strong&gt; folder container YAML GitHub workflow definitions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;src&lt;/strong&gt; folder contains the .NET 8 website used on the lab scenarios.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;6.Leave the web browser window open.&lt;/p&gt;

&lt;p&gt;7.Go to &lt;strong&gt;Repos &amp;gt; Branches&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;8.Hover on the &lt;strong&gt;main&lt;/strong&gt; branch then click the ellipsis on the right of the column.&lt;/p&gt;

&lt;p&gt;9.Click on &lt;strong&gt;Set as default branch&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flod9tg0d91lbez4fd19k.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flod9tg0d91lbez4fd19k.png" alt="Set as default branch" width="800" height="381"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmstu3bdy7xi4xz9spwn3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmstu3bdy7xi4xz9spwn3.png" alt="main now default" width="799" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a service connection to access Azure resources&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next, you will create a service connection in Azure DevOps which will allow you to deploy and access resources in your Azure subscription.&lt;/p&gt;

&lt;p&gt;1.Start a web browser, navigate to the Azure DevOps portal with the &lt;strong&gt;eShopOnWeb&lt;/strong&gt; project open and select &lt;strong&gt;Project settings&lt;/strong&gt; in the bottom left corner of the portal.&lt;/p&gt;

&lt;p&gt;2.Select the &lt;strong&gt;Service connections&lt;/strong&gt; under Pipelines, and then select &lt;strong&gt;Create service connection&lt;/strong&gt; button.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx1xt5w4qsx786efftqe5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx1xt5w4qsx786efftqe5.png" alt="Service connections" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.On the &lt;strong&gt;New service connection&lt;/strong&gt; blade, select &lt;strong&gt;Azure Resource Manager&lt;/strong&gt; and &lt;strong&gt;Next&lt;/strong&gt; (may need to scroll down).&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgxftd1708sk5xj1i7s6c.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgxftd1708sk5xj1i7s6c.png" alt="New service connection" width="610" height="914"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;Workload Identity federation (automatic)&lt;/strong&gt; and &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: You can also use &lt;strong&gt;Workload identity federation (manual)&lt;/strong&gt; if you prefer to manually configure the service connection. Follow the steps in the &lt;a href="https://learn.microsoft.com/en-us/azure/devops/pipelines/library/connect-to-azure?view=azure-devops" rel="noopener noreferrer"&gt;Azure DevOps documentation&lt;/a&gt; to create the service connection manually.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;5.Fill in the empty fields using the information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Subscription&lt;/strong&gt;: Select your Azure subscription. Then sign in to your azure account.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff77tccaj8l1bug8qekn9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff77tccaj8l1bug8qekn9.png" alt="Subscription" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Resource group&lt;/strong&gt;: Select the resource group where you want to deploy resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service connection name&lt;/strong&gt;: Type &lt;code&gt;azure subs&lt;/code&gt;. This name will be referenced in YAML pipelines to access your Azure subscription.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;6.Make sure the &lt;strong&gt;Grant access permission to all pipelines&lt;/strong&gt; option is unchecked and select &lt;strong&gt;Save&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjge07d59rz6yvqrxc9rt.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjge07d59rz6yvqrxc9rt.png" alt="save" width="566" height="914"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The &lt;strong&gt;Grant access permission to all pipelines&lt;/strong&gt; option is not recommended for production environments. It is only used in this lab to simplify the configuration of the pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: If you see an error message indicating you don’t have the necessary permissions to create a service connection, try again, or configure the service connection manually.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You have now completed the necessary prerequisite steps to continue with the labs.&lt;/p&gt;
&lt;h2&gt;
  
  
  Instructions
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Exercise 1: Configure a secure project structure
&lt;/h3&gt;

&lt;p&gt;In this exercise, you will configure a secure project structure by creating a new project and assigning it project permissions. Separating responsibilities and resources into different projects or repositories with specific permissions supports security.&lt;/p&gt;
&lt;h3&gt;
  
  
  Task 1: Create a new team project
&lt;/h3&gt;

&lt;p&gt;1.Navigate to the Azure DevOps portal at &lt;code&gt;https://aex.dev.azure.com&lt;/code&gt; and open your organization.&lt;/p&gt;

&lt;p&gt;2.Open your &lt;strong&gt;organization settings&lt;/strong&gt; at the bottom left corner of the portal and then &lt;strong&gt;Projects&lt;/strong&gt; under the General section.&lt;/p&gt;

&lt;p&gt;3.Select the &lt;strong&gt;New Project&lt;/strong&gt; option and use the following settings:&lt;br&gt;
        - name: &lt;strong&gt;eShopSecurity&lt;/strong&gt;&lt;br&gt;
        - visibility: &lt;strong&gt;Private&lt;/strong&gt;&lt;br&gt;
        - Advanced: Version Control: &lt;strong&gt;Git&lt;/strong&gt;&lt;br&gt;
        - Advanced: Work Item Process: &lt;strong&gt;Scrum&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;Create&lt;/strong&gt; to create the new project.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqg52qo8mo6ujmmk96bbp.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqg52qo8mo6ujmmk96bbp.png" alt="eShopSecurity Project" width="761" height="914"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.You can now switch between the different projects by clicking on the Azure DevOps icon in the upper left corner of the Azure DevOps portal.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffpjulxjv9dsqrymbvtu5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffpjulxjv9dsqrymbvtu5.png" alt="both projects" width="799" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can manage permissions and settings for each project separately by going to the Project settings menu and selecting the appropriate team project. If you have multiple users or teams working on different projects, you can also assign permissions to each project separately.&lt;/p&gt;
&lt;h3&gt;
  
  
  Task 2: Create a new repository and assign project permissions
&lt;/h3&gt;

&lt;p&gt;1.Select the organization name in the upper left corner of the Azure DevOps portal and select the new &lt;strong&gt;eShopSecurity&lt;/strong&gt; project.&lt;/p&gt;

&lt;p&gt;2.Select the &lt;strong&gt;Repos&lt;/strong&gt; menu.&lt;/p&gt;

&lt;p&gt;3.Select the &lt;strong&gt;Initialize&lt;/strong&gt; button to initialize the new repository by adding the README.md file.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcw0b65javtudm3xyotcr.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcw0b65javtudm3xyotcr.png" alt="Initialize" width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Open the &lt;strong&gt;Project settings&lt;/strong&gt; menu in the lower left corner of the portal and select &lt;strong&gt;Repositories&lt;/strong&gt; under the Repos section.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp5e1pj4z37laiq17fbwi.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp5e1pj4z37laiq17fbwi.png" alt="Repositories" width="800" height="598"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Select the new &lt;strong&gt;eShopSecurity&lt;/strong&gt; repository and select the &lt;strong&gt;Security&lt;/strong&gt; tab.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Ensure that you select the Security tab in the specific repository only, and not for all repositories in the project. If you select all repositories, you may lose access to other repositories in the project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;6.Remove the Inherit permissions from parent by unchecking the &lt;strong&gt;Inheritance&lt;/strong&gt; toggle button.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbdgb12aqne9rc9yq77is.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbdgb12aqne9rc9yq77is.png" alt="Inheritance" width="799" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Select the &lt;strong&gt;Contributors&lt;/strong&gt; group and select the &lt;strong&gt;Deny&lt;/strong&gt; dropdown for all permissions except &lt;strong&gt;Manage permissions&lt;/strong&gt; and &lt;strong&gt;Read&lt;/strong&gt;. This will prevent all users from the Contributors group from accessing the repository.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fazmbo0zhvshtkdg2sc8j.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fazmbo0zhvshtkdg2sc8j.png" alt="Contributors" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: In a real world scenario, you will deny the manage permissions to the Contributors group as well. For this lab, we are allowing the Contributors group to manage permissions to allow you to complete the lab.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;8.Select your user under Users and select the &lt;strong&gt;Allow&lt;/strong&gt; button to allow all permissions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: If you don’t see your name in the &lt;strong&gt;Users&lt;/strong&gt; section, enter your name in the &lt;strong&gt;Search for users or groups&lt;/strong&gt; text box and select it in the list of results.&lt;/p&gt;
&lt;/blockquote&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flht7uvp8m30f7os2fq8x.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flht7uvp8m30f7os2fq8x.png" alt="Permissions" width="800" height="584"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9.Your changes will be saved automatically.&lt;/p&gt;

&lt;p&gt;Now only the user you assigned permissions and the administrators can access the repository. This is useful when you want to allow specific users to access the repository and run pipelines from the eShopOnWeb project.&lt;/p&gt;
&lt;h3&gt;
  
  
  Exercise 2: Configure a pipeline and template structure to support secure pipelines
&lt;/h3&gt;
&lt;h3&gt;
  
  
  Task 1: Import and run the CI pipeline
&lt;/h3&gt;

&lt;p&gt;Let’s start by importing the CI pipeline named &lt;a href="https://github.com/MicrosoftLearning/eShopOnWeb/blob/main/.ado/eshoponweb-ci.yml" rel="noopener noreferrer"&gt;eshoponweb-ci.yml&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;1.Navigate to the Azure DevOps portal at &lt;code&gt;https://aex.dev.azure.com&lt;/code&gt; and open your organization.&lt;/p&gt;

&lt;p&gt;2.Open the &lt;strong&gt;eShopOnWeb&lt;/strong&gt; project in Azure DevOps.&lt;/p&gt;

&lt;p&gt;3.Go to &lt;strong&gt;Pipelines &amp;gt; Pipelines&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;4.Select the &lt;strong&gt;Create Pipeline&lt;/strong&gt; button.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fojw3lv2behycjtcrl0s1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fojw3lv2behycjtcrl0s1.png" alt="Create Pipeline" width="799" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Select &lt;strong&gt;Azure Repos Git (Yaml)&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmh6kqgl34zhwk8lp9ft0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmh6kqgl34zhwk8lp9ft0.png" alt="Azure Repos Git" width="800" height="625"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Select the &lt;strong&gt;eShopOnWeb&lt;/strong&gt; repository.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmxg98yln6b4qyuec8s76.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmxg98yln6b4qyuec8s76.png" alt="eShopOnWeb" width="800" height="658"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Select &lt;strong&gt;Existing Azure Pipelines YAML File&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1i5bqwdnz404echc2mow.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1i5bqwdnz404echc2mow.png" alt="Existing Azure Pipelines YAML File" width="800" height="672"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.Select the &lt;strong&gt;/.ado/eshoponweb-ci.yml&lt;/strong&gt; file then click on &lt;strong&gt;Continue&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ho0zsyfcob1erc2bp82.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ho0zsyfcob1erc2bp82.png" alt="select the file" width="561" height="916"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9.Select the &lt;strong&gt;Run&lt;/strong&gt; button to run the pipeline.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1u6lu3jnevjn18qtvznd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1u6lu3jnevjn18qtvznd.png" alt="Run" width="799" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Your pipeline will take a name based on the project name. You will rename it to easier identify the pipeline.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;10.Go to &lt;strong&gt;Pipelines &amp;gt; Pipelines&lt;/strong&gt; and select the recently created pipeline. Select the ellipsis and then select &lt;strong&gt;Rename/move&lt;/strong&gt; option.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9ogt389kmlr251squ1hc.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9ogt389kmlr251squ1hc.png" alt="Rename" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11.Name it &lt;strong&gt;eshoponweb-ci&lt;/strong&gt; and select &lt;strong&gt;Save&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ktgqeytsv66v6szso4a.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ktgqeytsv66v6szso4a.png" alt="save" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Task 2: Import and run the CD pipeline
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: In this task, you will import and run the CD pipeline named &lt;a href="https://github.com/MicrosoftLearning/eShopOnWeb/blob/main/.ado/eshoponweb-cd-webapp-code.yml" rel="noopener noreferrer"&gt;eshoponweb-cd-webapp-code.yml&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;1.Go to &lt;strong&gt;Pipelines &amp;gt; Pipelines&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;2.Select &lt;strong&gt;New pipeline&lt;/strong&gt; button.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcz46zffh7la4s7pndmo6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcz46zffh7la4s7pndmo6.png" alt="New pipeline" width="799" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Select &lt;strong&gt;Azure Repos Git (Yaml)&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fewki7aqde82gbz1d8s38.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fewki7aqde82gbz1d8s38.png" alt="Azure Repos Git" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Select the &lt;strong&gt;eShopOnWeb&lt;/strong&gt; repository.&lt;/p&gt;

&lt;p&gt;5.Select &lt;strong&gt;Existing Azure Pipelines YAML File&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;6.Select the &lt;strong&gt;/.ado/eshoponweb-cd-webapp-code.yml&lt;/strong&gt; file then select &lt;strong&gt;Continue&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5gjcneubatsptri0uwjc.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5gjcneubatsptri0uwjc.png" alt="Continue" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.In the YAML pipeline definition, set the variables section to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;variables&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
 &lt;span class="na"&gt;resource-group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;YOUR-RESOURCE-GROUP-NAME'&lt;/span&gt;
 &lt;span class="na"&gt;location&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;centralus'&lt;/span&gt;
 &lt;span class="na"&gt;templateFile&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;infra/webapp.bicep'&lt;/span&gt;
 &lt;span class="na"&gt;subscriptionid&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;YOUR-SUBSCRIPTION-ID'&lt;/span&gt;
 &lt;span class="na"&gt;azureserviceconnection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;YOUR-AZURE-SERVICE-CONNECTION-NAME'&lt;/span&gt;
 &lt;span class="na"&gt;webappname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;YOUR-WEB-APP-NAME'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;8.Replace the values of the variables with the values of your environment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace &lt;strong&gt;YOUR-RESOURCE-GROUP-NAME&lt;/strong&gt; with the name of the resource group you want to use in this lab, for example, &lt;strong&gt;rg-eshoponweb-secure&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set the value of the &lt;strong&gt;location&lt;/strong&gt; variable to the name of the Azure region you want to deploy your resources, for example, &lt;strong&gt;centralus&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Replace &lt;strong&gt;YOUR-SUBSCRIPTION-ID&lt;/strong&gt; with your Azure subscription id.&lt;/li&gt;
&lt;li&gt;Replace &lt;strong&gt;YOUR-AZURE-SERVICE-CONNECTION-NAME&lt;/strong&gt; with &lt;strong&gt;azure subs&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Replace &lt;strong&gt;YOUR-WEB-APP-NAME&lt;/strong&gt; with a globally unique name of the web app to be deployed, for example, the string &lt;strong&gt;eshoponweb-lab-multi-123456&lt;/strong&gt; followed by a random six-digit number.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;9.Select &lt;strong&gt;Save and Run&lt;/strong&gt; and choose to commit directly to the main branch.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxhbqwwj9fvt3jfw16zv2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxhbqwwj9fvt3jfw16zv2.png" alt="Save and Run" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10.Select &lt;strong&gt;Save and Run&lt;/strong&gt; again.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy1849d67tv7xy3ovnigi.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy1849d67tv7xy3ovnigi.png" alt="Save and Run" width="676" height="909"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11.Open the pipeline run. If you receive the message “This pipeline needs permission to access a resource before this run can continue to Deploy to WebApp”, select &lt;strong&gt;View, Permit&lt;/strong&gt; and &lt;strong&gt;Permit&lt;/strong&gt; again. This is needed to allow the pipeline to create the Azure App Service resource.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fixde7lggka6feiy0c6rc.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fixde7lggka6feiy0c6rc.png" alt="Permission needed" width="799" height="422"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7nfuvzta70zg3fajv8jy.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7nfuvzta70zg3fajv8jy.png" alt="Permit" width="561" height="907"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;12.The deployment may take a few minutes to complete, wait for the pipeline to execute. The pipeline is triggered following the completion of the CI pipeline and it includes the following tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AzureResourceManagerTemplateDeployment&lt;/strong&gt;: Deploys the Azure App Service web app using bicep template.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AzureRmWebAppDeployment&lt;/strong&gt;: Publishes the Web site to the Azure App Service web app.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: In case the deployment fails, navigate to the pipeline run page and select &lt;strong&gt;Rerun failed jobs&lt;/strong&gt; to invoke another pipeline run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Your pipeline will take a name based on the project name. Let’s &lt;strong&gt;rename&lt;/strong&gt; it for identifying the pipeline better.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;13.Go to &lt;strong&gt;Pipelines &amp;gt; Pipelines&lt;/strong&gt; and select the recently created pipeline. Select the ellipsis and then select &lt;strong&gt;Rename/move&lt;/strong&gt; option.&lt;/p&gt;

&lt;p&gt;14.Name it &lt;strong&gt;eshoponweb-cd-webapp-code&lt;/strong&gt; and click on &lt;strong&gt;Save&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now you should have two pipelines running in your eShopOnWeb project.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe8zl36otc5yggz9pizae.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe8zl36otc5yggz9pizae.png" alt="cd pipeline" width="799" height="380"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw7dqj3beykyacsv0u1kx.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw7dqj3beykyacsv0u1kx.png" alt="failed pipeline" width="799" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After troubleshooting, the pipeline finally succeeded. &lt;br&gt;
&lt;strong&gt;NOTE: Check the Troubleshooting section below to see how I resolved the errors.&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzbatj2o5xbcqdwxly3wd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzbatj2o5xbcqdwxly3wd.png" alt="failed pipelines" width="800" height="324"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fykp0w2fl69ly5lzk94uz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fykp0w2fl69ly5lzk94uz.png" alt="succeeded pipelines" width="800" height="290"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Task 3: Move the CD pipeline variables to a YAML template
&lt;/h3&gt;

&lt;p&gt;In this task, you will create a YAML template to store the variables used in the CD pipeline. This will allow you to reuse the template in other pipelines.&lt;/p&gt;

&lt;p&gt;1.Go to &lt;strong&gt;Repos&lt;/strong&gt; and then &lt;strong&gt;Files&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;2.Expand the &lt;strong&gt;.ado&lt;/strong&gt; folder and select &lt;strong&gt;New file&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk3cn2izihy0ljsrx3hb5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk3cn2izihy0ljsrx3hb5.png" alt="new file" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Name the file &lt;strong&gt;eshoponweb-secure-variables.yml&lt;/strong&gt; and select &lt;strong&gt;Create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F32ctq71vjo5e8afdajeg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F32ctq71vjo5e8afdajeg.png" alt="create" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Add the variables section used in the CD pipeline to the new file. The file should look like the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;variables&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;resource-group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rg-eshoponweb-secure'&lt;/span&gt;
  &lt;span class="na"&gt;location&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;southcentralus'&lt;/span&gt; &lt;span class="c1"&gt;#the name of the Azure region you want to deploy your resources&lt;/span&gt;
  &lt;span class="na"&gt;templateFile&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;infra/webapp.bicep'&lt;/span&gt;
  &lt;span class="na"&gt;subscriptionid&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;YOUR-SUBSCRIPTION-ID'&lt;/span&gt;
  &lt;span class="na"&gt;azureserviceconnection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;azure&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;subs'&lt;/span&gt; &lt;span class="c1"&gt;#the name of the service connection to your Azure subscription&lt;/span&gt;
  &lt;span class="na"&gt;webappname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;eshoponweb-lab-secure-XXXXXX'&lt;/span&gt; &lt;span class="c1"&gt;#the globally unique name of the web app&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: Replace the values of the variables with the values of your environment (resource group, location, subscription ID, Azure service connection, and web app name).&lt;/p&gt;
&lt;/blockquote&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb1yu6p1y94wsddr0prki.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb1yu6p1y94wsddr0prki.png" alt="Replace the values of the variables" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Select &lt;strong&gt;Commit&lt;/strong&gt;, in the commit comment text box, enter &lt;code&gt;[skip ci]&lt;/code&gt;, and then select &lt;strong&gt;Commit&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: By adding the &lt;code&gt;[skip ci]&lt;/code&gt; comment to the commit, you will prevent automatic pipeline execution, which, at this point, runs by default following every change to the repo.&lt;/p&gt;
&lt;/blockquote&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc4ag19ym3qdjamqlgof6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc4ag19ym3qdjamqlgof6.png" alt="skip ci" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.From the list of files in the repo, open the &lt;strong&gt;eshoponweb-cd-webapp-code.yml&lt;/strong&gt; pipeline definition, and replace the variables section with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;variables&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;eshoponweb-secure-variables.yml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fypixiba3541dxhg8l51v.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fypixiba3541dxhg8l51v.png" alt="replace variables" width="799" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Select &lt;strong&gt;Commit&lt;/strong&gt;, accept the default comment, and then select &lt;strong&gt;Commit&lt;/strong&gt; to run the pipeline again.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcshm3550sl2gasbrk658.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcshm3550sl2gasbrk658.png" alt="commit" width="800" height="572"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.Verify that the pipeline run completed successfully.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flnbwysg7stxqctayyzcc.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flnbwysg7stxqctayyzcc.png" alt="succeeded pipeline" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you have a YAML template with the variables used in the CD pipeline. You can reuse this template in other pipelines in scenarios where you need to deploy the same resources. Also, your operations team can control the resource group and location where the resources are deployed and other information in your template values and you don’t need to make any changes to your pipeline definition.&lt;/p&gt;

&lt;h3&gt;
  
  
  Task 4: Move the YAML templates to a separate repository and project
&lt;/h3&gt;

&lt;p&gt;In this task, you will move the YAML templates to a separate repository and project.&lt;/p&gt;

&lt;p&gt;1.In your eShopSecurity project, go to &lt;strong&gt;Repos &amp;gt; Files.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;2.Create a new file named &lt;strong&gt;eshoponweb-secure-variables.yml&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6i5a47ejzsjf24nn7cb9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6i5a47ejzsjf24nn7cb9.png" alt="create a new file" width="799" height="380"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6121pk16h01lhsvcbqtd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6121pk16h01lhsvcbqtd.png" alt="create" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Copy the content of the file &lt;strong&gt;.ado/eshoponweb-secure-variables.yml&lt;/strong&gt; from the eShopOnWeb repository to the new file.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F72u2eoobwpd4bvuhdfly.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F72u2eoobwpd4bvuhdfly.png" alt="copy contents of the other file" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Commit the changes.&lt;/p&gt;

&lt;p&gt;5.Open the &lt;strong&gt;eshoponweb-cd-webapp-code.yml&lt;/strong&gt; pipeline definition in the eShopOnWeb repo.&lt;/p&gt;

&lt;p&gt;6.Add the following to the resources section before the variables section in the pipeline definition:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;   &lt;span class="na"&gt;repositories&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;repository&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;eShopSecurity&lt;/span&gt;
     &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;git&lt;/span&gt;
     &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;eShopSecurity/eShopSecurity&lt;/span&gt; &lt;span class="c1"&gt;#name of the project and repository&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;7.Replace the variables section with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;variables&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;eshoponweb-secure-variables.yml@eShopSecurity&lt;/span&gt; &lt;span class="c1"&gt;#name of the template and repository&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgitzxgf0mn2n2kzdlddr.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgitzxgf0mn2n2kzdlddr.png" alt="pipeline definition with the new variables and resource sections" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.Select &lt;strong&gt;Commit&lt;/strong&gt;, accept the default comment, and then select &lt;strong&gt;Commit&lt;/strong&gt; to run the pipeline again.&lt;/p&gt;

&lt;p&gt;9.Navigate to the pipeline run and verify that the pipeline is using the YAML file from the eShopSecurity repository.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2pegdefilhq03qyzv7bk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2pegdefilhq03qyzv7bk.png" alt="pipeline execution using the YAML template from the eShopSecurity repository" width="800" height="332"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa3608rurdfroo9plfjya.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa3608rurdfroo9plfjya.png" alt="repositories" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you have the YAML file in a separate repository and project. You can reuse this file in other pipelines in scenarios where you need to deploy the same resources. Also, your operations team can control the resource group, location, security and where the resources are deployed and other information by modifying values in the YAML file and you don’t need to make any changes to your pipeline definition.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT] Remember to delete the resources created in the Azure portal to avoid unnecessary charges.&lt;/p&gt;
&lt;/blockquote&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3xowwu5onrp1n35s59rz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3xowwu5onrp1n35s59rz.png" alt="azure portal" width="799" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Review
&lt;/h2&gt;

&lt;p&gt;In this lab, you learned how to configure and organize a secure project and repository structure in Azure DevOps. By managing permissions effectively, you can ensure that the right users have access to the resources they need while maintaining the security and integrity of your DevOps pipelines and processes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting: Problems I Hit and How I Fixed Them
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. “Could not find any file matching the template file pattern”
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Symptom&lt;/em&gt;: The “Deploy App Service Plan Bicep” step failed before reaching Azure.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cause&lt;/em&gt;: I set &lt;code&gt;templateFile: 'infra/webapp.bicep'&lt;/code&gt;. The task already builds the path as &lt;code&gt;$(Pipeline.Workspace)/eshoponweb-ci/Bicep/$(templateFile)&lt;/code&gt;, so it looked for &lt;code&gt;.../Bicep/infra/webapp.bicep&lt;/code&gt;, which doesn’t exist. The CI pipeline publishes the file in a Bicep folder in the artifact, not in infra.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Fix&lt;/em&gt;: Set &lt;code&gt;templateFile: 'webapp.bicep'&lt;/code&gt;, with no folder prefix.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Quota error: &lt;code&gt;SubscriptionIsOverQuotaForSku&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Symptom&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Current Limit (S1 VMs): 0&lt;br&gt;
Amount required for this deployment (S1 VMs): 1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cause&lt;/em&gt;: The Bicep template defaults to the &lt;code&gt;S1&lt;/code&gt; SKU, and my subscription had a quota of 0 for it. This can happen even on pay-as-you-go subscriptions, because new subscriptions often start with no App Service quota for some tiers.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Fix attempt&lt;/em&gt;: I changed the SKU in &lt;code&gt;infra/webapp.bicep&lt;/code&gt; to the Free tier, &lt;code&gt;F1&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. The change didn’t take effect, and F1 failed too
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Symptom&lt;/em&gt;: The next run still reported &lt;code&gt;S1 VMs&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cause&lt;/em&gt;: The CD pipeline deploys the copy of the Bicep file inside the &lt;code&gt;eshoponweb-ci&lt;/code&gt; build artifact, not the file in the repo. My edit only took effect after I re-ran eshoponweb-ci. After that, the error changed to &lt;code&gt;Current Limit (F1 VMs): 0&lt;/code&gt;, so the subscription had no Free-tier quota in that region either.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Fix&lt;/em&gt;: Quota is per region, so I created a new resource group in West Europe and updated the &lt;code&gt;resource-group&lt;/code&gt; and &lt;code&gt;location&lt;/code&gt; variables.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. 403 when checking the new resource group
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Symptom&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Checking if the following resource group exists: RG.&lt;br&gt;
Failed to check the resource group status. Error: {"statusCode":403}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cause&lt;/em&gt;: The Azure DevOps service connection signs in as a service principal whose role assignment only covered my original resource group.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Fix&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;In Azure DevOps, &lt;strong&gt;Project settings → Service connections → Manage App registration&lt;/strong&gt; gave me the service principal’s display name.&lt;br&gt;
In the Azure portal, on the new resource group: &lt;strong&gt;Access control (IAM) → Add → Add role assignment&lt;/strong&gt;.&lt;br&gt;
I picked the plain &lt;strong&gt;Contributor&lt;/strong&gt; role (not Web Plan Contributor or Website Contributor) and selected the service principal as the member. Check that the Role tab doesn’t say “None” before clicking Review + assign.&lt;br&gt;
After waiting a few minutes, the deployment succeeded.&lt;/p&gt;
&lt;h3&gt;
  
  
  5. TF401027: You need the Git 'CreateBranch' permission
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Symptom&lt;/em&gt;: Clicking Initialize on the empty &lt;code&gt;eShopSecurity&lt;/code&gt; repo failed.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cause&lt;/em&gt;: My account lacked the Create branch permission on that repository, even though I was the organization owner and in the Project Collection Administrators group. An explicit Deny or a repo-level permission issue overrides group membership.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Fix&lt;/em&gt;: I checked the repo’s Security tab for a Deny, then created a fresh repo instead, because the creator of a repo gets full rights on it. I reused the name &lt;code&gt;eShopSecurity&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  6. Pipeline run “Informational run” with a YAML error
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Symptom&lt;/em&gt;: A run appeared with an error about YAML preventing Azure Pipelines from deciding whether to run, and clicking into it showed &lt;code&gt;No plan found for identifier&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cause&lt;/em&gt;: The YAML couldn’t be parsed, so the pipeline never started. There’s no execution plan to open or rerun.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Fix&lt;/em&gt;: Don’t rerun that entry. Use &lt;strong&gt;Edit → ⋮ → Validate&lt;/strong&gt; on the pipeline to find the broken line, fix it, and start a new run.&lt;/p&gt;
&lt;h3&gt;
  
  
  7. The shared variables template
&lt;/h3&gt;

&lt;p&gt;The lab moves variables into a template in a separate repo and references it from the pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;repositories&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;repository&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;eShopSecurity&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;git&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;eShopSecurity/eShopSecurity&lt;/span&gt;

&lt;span class="na"&gt;variables&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;eshoponweb-secure-variables.yml@eShopSecurity&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Things to check&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;The alias after &lt;code&gt;@&lt;/code&gt; must match the &lt;code&gt;repository:&lt;/code&gt; name in &lt;code&gt;resources&lt;/code&gt;.&lt;br&gt;
Put a space before any &lt;code&gt;#&lt;/code&gt; comment, or YAML treats it as part of the value.&lt;br&gt;
The template file holds the variable definitions (&lt;code&gt;- name: / value:&lt;/code&gt;). It must not contain a &lt;code&gt;template:&lt;/code&gt; line pointing to itself.&lt;br&gt;
Because the pipeline no longer defines variables, the template must include every one it uses (&lt;code&gt;resource-group&lt;/code&gt;, &lt;code&gt;location&lt;/code&gt;, &lt;code&gt;templateFile&lt;/code&gt;, &lt;code&gt;subscriptionid&lt;/code&gt;, &lt;code&gt;azureserviceconnection&lt;/code&gt;, &lt;code&gt;webappname&lt;/code&gt;).&lt;br&gt;
On the first run, Azure DevOps may ask you to permit access to the other repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Errors resolved while trying to view the App in a browser
&lt;/h2&gt;

&lt;h3&gt;
  
  
  8. Git: “Authentication failed” and PATs
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Symptom&lt;/em&gt;: &lt;code&gt;git pull&lt;/code&gt; and &lt;code&gt;git push&lt;/code&gt; over HTTPS asked for a password and rejected it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cause&lt;/em&gt;: Azure Repos doesn’t accept your Microsoft account password. It needs a &lt;strong&gt;Personal Access Token&lt;/strong&gt; with &lt;strong&gt;Code → Read &amp;amp; write&lt;/strong&gt;, created for the right organization.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Fix&lt;/em&gt;: I created a new PAT (&lt;strong&gt;User settings → Personal access tokens&lt;/strong&gt;), pasted it at the prompt (nothing shows as you type, and Shift+Insert or right-click pastes in WSL), and the push worked. I revoked the unused token afterwards.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa8ik73dgmi32ab3wpeyb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa8ik73dgmi32ab3wpeyb.png" alt="successful git push" width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the push, I waited for the pipeline to run successfully.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Build warning NU1903 (known high severity vulnerability)
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Symptom&lt;/em&gt;: The CI run and &lt;code&gt;dotnet build&lt;/code&gt; both warned that &lt;code&gt;Microsoft.AspNetCore.Components.WebAssembly.Server&lt;/code&gt; 8.0.15 had a known high severity vulnerability.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Fix&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;dotnet list src/Web/Web.csproj package --outdated --highest-patch&lt;/code&gt; showed the newest 8.0.x patch (8.0.32).&lt;br&gt;
Because the repo uses central package management, I changed the version in &lt;code&gt;Directory.Packages.props&lt;/code&gt;.&lt;br&gt;
Rebuilding with &lt;code&gt;dotnet build eShopOnWeb.sln&lt;/code&gt; reported 0 warnings.&lt;/p&gt;

&lt;h3&gt;
  
  
  10. Running the app locally in WSL
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;MSB1011: more than one project or solution file&lt;/code&gt;: the repo root has both a &lt;code&gt;.sln&lt;/code&gt; and a &lt;code&gt;.dcproj&lt;/code&gt;. Name the target: &lt;code&gt;dotnet build eShopOnWeb.sln&lt;/code&gt; and &lt;code&gt;dotnet run --project src/Web&lt;/code&gt;.&lt;br&gt;
&lt;code&gt;LocalDB is not supported on this platform&lt;/code&gt;: LocalDB is Windows-only. Run with the in-memory database: &lt;code&gt;UseOnlyInMemoryDatabase=true dotnet run --project src/Web&lt;/code&gt;, then open &lt;code&gt;http://localhost:5001&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqddkce8uva6carhcxv6y.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqddkce8uva6carhcxv6y.png" alt="eShopOnWeb in a browser" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;p&gt;A quota error is per SKU and per region, so changing either can clear it.&lt;br&gt;
The CD pipeline deploys the &lt;strong&gt;CI artifact&lt;/strong&gt;, so Bicep changes only apply after CI runs again.&lt;br&gt;
A new resource group needs its own role assignment for the service connection’s service principal.&lt;br&gt;
A failed YAML parse produces an informational run, so use &lt;strong&gt;Validate&lt;/strong&gt; rather than rerunning it.&lt;br&gt;
Azure Repos over HTTPS needs a PAT, not your account password.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>azuredevops</category>
      <category>passwordsecurity</category>
      <category>identitymanagement</category>
    </item>
    <item>
      <title>Azure Container Apps Guided Project (AZ-2026), Part 5: Traffic Splitting and Revision Management</title>
      <dc:creator>Rahimah Sulayman</dc:creator>
      <pubDate>Sat, 03 Oct 2026 17:41:46 +0000</pubDate>
      <link>https://dev.to/rahimah_dev/azure-container-apps-guided-project-az-2026-part-5-traffic-splitting-and-revision-management-25dl</link>
      <guid>https://dev.to/rahimah_dev/azure-container-apps-guided-project-az-2026-part-5-traffic-splitting-and-revision-management-25dl</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Employers value engineers who can release changes safely, without putting every user at risk.&lt;/p&gt;

&lt;p&gt;The scenario: At Fabrikam Inc., the container app is deployed and the pipeline works. Now the team wants to ship a new version without sending all traffic to it at once. They need a v2 revision that receives 25 percent of requests while the existing version keeps the other 75 percent, with clear labels so each version can be tested directly.&lt;/p&gt;

&lt;p&gt;In this final Part 5, I switch the container app to multiple revision mode, create the v2 revision, label the revisions "current" and "updated", and split traffic 75/25. I then verify the setup on the Revisions and replicas page.&lt;/p&gt;

&lt;p&gt;Note: Here, I left the current version as Label-1, I didn't rename it.&lt;/p&gt;

&lt;p&gt;The following Azure resources must be available in your Resource group named RG1:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Container registry instance that contains one image.&lt;/li&gt;
&lt;li&gt;A Virtual network with subnets.&lt;/li&gt;
&lt;li&gt;A Service Bus Namespace&lt;/li&gt;
&lt;li&gt;A Managed Identity&lt;/li&gt;
&lt;li&gt;A Private endpoint&lt;/li&gt;
&lt;li&gt;A Container App&lt;/li&gt;
&lt;li&gt;A Container Apps Environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You've been asked to configure traffic splitting for your Container Apps to meet the following requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need to create a new revision of the container app that uses a suffix of v2.&lt;/li&gt;
&lt;li&gt;You must ensure that 25 percent of requests to your app are directed to the v2 revision.&lt;/li&gt;
&lt;li&gt;You must label the revisions "current" and "updated" and ensure that requests to the "updated" revision are directed to the v2 revision.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You complete the following tasks during this exercise:&lt;/p&gt;

&lt;p&gt;1.Set revision management to multiple.&lt;/p&gt;

&lt;p&gt;2.Create a new revision with a v2 suffix.&lt;/p&gt;

&lt;p&gt;3.Configure labels on the revisions.&lt;/p&gt;

&lt;p&gt;4.Configure a traffic percentage on the revisions.&lt;/p&gt;

&lt;p&gt;5.Verify the configuration.&lt;/p&gt;

&lt;p&gt;Note: I used port 4050 in place of 5000 because my port 5000 was occupied.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set revision management to multiple
&lt;/h2&gt;

&lt;p&gt;1.In the Azure portal, open your container app resource.&lt;/p&gt;

&lt;p&gt;2.On the left side menu, under Application, select &lt;strong&gt;Revisions and replicas&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;3.At the top of the Revisions and replicas page, select &lt;strong&gt;Deployment mode&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhzz58r6438m78yun260e.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhzz58r6438m78yun260e.png" alt="deployment" width="799" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.To switch from single to multi-revision mode, select &lt;strong&gt;Apply&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgc27wpi8kxqaoho8q050.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgc27wpi8kxqaoho8q050.png" alt="apply" width="800" height="348"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkce3xu2kyyj0ug6wfw0o.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkce3xu2kyyj0ug6wfw0o.png" alt="select ingress" width="800" height="583"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.On the Ingress page, specify the following information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ingress traffic: select &lt;strong&gt;Accepting traffic from anywhere&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ingress type: select &lt;strong&gt;HTTP&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Client certificate mode: ensure that &lt;strong&gt;Ignore&lt;/strong&gt; is selected.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Transport: ensure that &lt;strong&gt;Auto&lt;/strong&gt; is selected.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Insecure connections: ensure that Allowed is &lt;strong&gt;NOT&lt;/strong&gt; checked.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Target port: enter &lt;strong&gt;5000&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;IP Security Restrictions Mode: ensure that &lt;strong&gt;Allow all traffic&lt;/strong&gt; is selected.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;6.At the bottom of the Ingress page, select &lt;strong&gt;Save&lt;/strong&gt;, and then wait for the update to complete.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F57q08m5bjnssvcxia569.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F57q08m5bjnssvcxia569.png" alt="ingress" width="799" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Deployment Mode will be set to &lt;strong&gt;Multiple&lt;/strong&gt; after the update. &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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqrdg0hnvhmpybaywih08.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqrdg0hnvhmpybaywih08.png" alt="multiple" width="800" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.On the left-side menu, under Revisions, select &lt;strong&gt;Revisions and replicas&lt;/strong&gt;.&lt;br&gt;
    Select &lt;strong&gt;create new revision&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3nd5uyo53wtlir4q0bxm.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3nd5uyo53wtlir4q0bxm.png" alt="newrevision" width="799" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure a traffic percentage and labels on the revisions
&lt;/h2&gt;

&lt;p&gt;1.Ensure that you have the Revisions and replicas page open.&lt;/p&gt;

&lt;p&gt;2.For the v2 revision, under Traffic, enter &lt;strong&gt;25&lt;/strong&gt; as the percentage.&lt;/p&gt;

&lt;p&gt;3.For the other revision, under Traffic, enter &lt;strong&gt;75&lt;/strong&gt; as the percentage.&lt;/p&gt;

&lt;p&gt;6.For the v2 revision, under Label, enter &lt;strong&gt;updated&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;7.For the other revision, enter &lt;strong&gt;current&lt;/strong&gt; or leave as-is.&lt;/p&gt;

&lt;p&gt;8.At the top of the page, select &lt;strong&gt;Save&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsg0dc5gkfe4u8pqxhdd2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsg0dc5gkfe4u8pqxhdd2.png" alt="traffic splitting" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Check your work
&lt;/h2&gt;

&lt;p&gt;1.Ensure that you have your Container App open in the Azure portal.&lt;/p&gt;

&lt;p&gt;2.On the left-side menu, under Application, select &lt;strong&gt;Revisions and replicas&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;3.Verify that your revisions are configured as follows:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1e7upttf8jerj4e7cfyk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1e7upttf8jerj4e7cfyk.png" alt="revisions" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Cloud and DevOps practitioner who completed a five-part, hands-on series on deploying containerized applications with Azure Container Apps.&lt;/p&gt;

&lt;p&gt;Part 5 covers safe release management with revisions and traffic splitting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Switched the container app from single to multiple revision mode.&lt;/li&gt;
&lt;li&gt;Created a new v2 revision of the container app.&lt;/li&gt;
&lt;li&gt;Configured HTTP ingress, accepting traffic from anywhere on target port 5000.&lt;/li&gt;
&lt;li&gt;Labeled the revisions "current" and "updated", with "updated" mapped to v2.&lt;/li&gt;
&lt;li&gt;Split traffic 75% to the existing revision and 25% to v2, and verified the configuration on the Revisions and replicas page.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Skills practiced:
&lt;/h3&gt;

&lt;p&gt;Azure Container Apps, revision management, traffic splitting, ingress configuration, progressive delivery.&lt;/p&gt;

&lt;p&gt;Across the full series: Azure resource setup, Azure Container Registry security with managed identity and private endpoints, container app deployment with Service Bus connectivity and HTTP autoscaling, CI/CD with Azure Pipelines and a self-hosted agent, and revision-based releases.&lt;/p&gt;

</description>
      <category>containers</category>
      <category>microservices</category>
      <category>devops</category>
      <category>deployment</category>
    </item>
    <item>
      <title>Azure Container Apps Guided Project (AZ-2026), Part 4: CI/CD with Azure Pipelines and a Self-Hosted Agent</title>
      <dc:creator>Rahimah Sulayman</dc:creator>
      <pubDate>Sat, 03 Oct 2026 17:18:14 +0000</pubDate>
      <link>https://dev.to/rahimah_dev/azure-container-apps-guided-project-az-2026-part-4-cicd-with-azure-pipelines-and-a-self-hosted-2hom</link>
      <guid>https://dev.to/rahimah_dev/azure-container-apps-guided-project-az-2026-part-4-cicd-with-azure-pipelines-and-a-self-hosted-2hom</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Employers want engineers who can automate deployments, not just run them by hand, and fix the pipeline when it breaks.&lt;/p&gt;

&lt;p&gt;The scenario: At Fabrikam Inc., the container app is running, but every release is still manual. The DevOps team wants an Azure Pipeline that deploys the image from Azure Container Registry to Azure Container Apps on a self-hosted agent, and the deployment has to succeed at least once to prove it works.&lt;/p&gt;

&lt;p&gt;In Part 4, I configure Pipeline1 to use the self-hosted agent pool and add the Azure Container Apps deployment task. The first run failed, so I troubleshoot the errors and rerun the pipeline until the deployment succeeds. I then verify it in the pipeline's run history and the container app's activity log.&lt;/p&gt;

&lt;p&gt;The following Azure resources must be available in your Resource group named RG1:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Container registry instance that contains one image.&lt;/li&gt;
&lt;li&gt;A Virtual network with subnets.&lt;/li&gt;
&lt;li&gt;A Service Bus Namespace&lt;/li&gt;
&lt;li&gt;A Managed Identity&lt;/li&gt;
&lt;li&gt;A Private endpoint&lt;/li&gt;
&lt;li&gt;A Container App&lt;/li&gt;
&lt;li&gt;A Container Apps Environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You've been asked to configure a continuous integration environment for Container Apps that meets the following requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need an Azure Container Apps deployment task in your Azure DevOps environment.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Pipeline1&lt;/code&gt; must deploy a container image from your container registry to your container app using a self-hosted agent pool.&lt;/li&gt;
&lt;li&gt;You must ensure that the pipeline successfully deploys the image at least once.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You complete the following tasks during this exercise:&lt;/p&gt;

&lt;p&gt;1.Configure &lt;code&gt;Pipeline1&lt;/code&gt; to use the self-hosted agent pool.&lt;/p&gt;

&lt;p&gt;2.Configure &lt;code&gt;Pipeline1&lt;/code&gt; with an Azure Container Apps deployment task.&lt;/p&gt;

&lt;p&gt;3.Run the &lt;code&gt;Pipeline1&lt;/code&gt; deployment task.&lt;/p&gt;

&lt;p&gt;4.Verify the configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure &lt;code&gt;Pipeline1&lt;/code&gt; to use the self-hosted agent pool
&lt;/h2&gt;

&lt;p&gt;1.Open a browser window, navigate to &lt;a href="https://dev.azure.com" rel="noopener noreferrer"&gt;https://dev.azure.com&lt;/a&gt;, and then open your Azure DevOps organization.&lt;/p&gt;

&lt;p&gt;2.On your Azure DevOps page, to open your DevOps project, select &lt;code&gt;Project1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;3.In the left-side menu, select &lt;code&gt;Pipelines&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;4.Select &lt;code&gt;Pipeline1&lt;/code&gt;, and then select &lt;strong&gt;Edit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;5.To use the self-hosted agent pool, update the azure-pipelines.yml file as shown in the following example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;trigger&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;

&lt;span class="na"&gt;pool&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;default&lt;/span&gt;

&lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recall that the &lt;code&gt;pool&lt;/code&gt; section specifies the agent pool to use for the pipeline. The &lt;code&gt;name&lt;/code&gt; property specifies the name of the agent pool. In this case, the name is &lt;code&gt;default&lt;/code&gt;, which is the pool you configured as a self-hosted agent pool.&lt;/p&gt;

&lt;p&gt;6.Under &lt;strong&gt;Validate and save&lt;/strong&gt;, select &lt;strong&gt;Save without validating&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo7uaaesmu6wltp50242w.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo7uaaesmu6wltp50242w.png" alt="savewvalidating" width="799" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Enter a commit message, and then select &lt;strong&gt;Save&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1jovslmkva3oeva7rifx.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1jovslmkva3oeva7rifx.png" alt="save" width="800" height="440"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F22rso4r40fhnywuhcofn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F22rso4r40fhnywuhcofn.png" alt="runs" width="799" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure Pipeline1 with an Azure Container Apps deployment task
&lt;/h2&gt;

&lt;p&gt;1.Ensure that you have &lt;code&gt;Pipeline1&lt;/code&gt; open for editing.&lt;/p&gt;

&lt;p&gt;2.On the right side under Tasks, in the Search tasks field, enter &lt;strong&gt;azure container&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;3.In the filtered list of tasks, select &lt;strong&gt;Azure Container Apps Deploy&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F63s1sav87ykkuaapxi2u.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F63s1sav87ykkuaapxi2u.png" alt="azurecontainerappsdeploy" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Under Azure Resource Manager connection, select the Subscription you're using, and then select &lt;strong&gt;Authorize&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhy7d6rg5jl541hu7nx3l.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhy7d6rg5jl541hu7nx3l.png" alt="arm" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.In the Azure portal tab, open your Container App resource, and then open the Containers page.&lt;/p&gt;

&lt;p&gt;6.Use the information on the Containers page to configure the following &lt;code&gt;Pipeline1&lt;/code&gt; Task information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker Image to Deploy: &lt;code&gt;&amp;lt;Registry&amp;gt;/&amp;lt;Image&amp;gt;:&amp;lt;Image tag&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Azure Container App name: &lt;code&gt;&amp;lt;Name&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;7.Configure the following &lt;code&gt;Pipeline1&lt;/code&gt; Task information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Azure Resource group name: RG1&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you need to verify the resource group name, you can find it on the Overview page of your Container App resource.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;8.On the Azure Container Apps Deploy page, select &lt;strong&gt;Add&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5k6wlgjlznypab9df6n6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5k6wlgjlznypab9df6n6.png" alt="add" width="799" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Yaml file for your pipeline should now include the AzureContainerApps tasks as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;trigger&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;
&lt;span class="na"&gt;pool&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;default&lt;/span&gt;
&lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;AzureContainerApps@1&lt;/span&gt;
    &lt;span class="na"&gt;inputs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;azureSubscription&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;Subscription&amp;gt;(&amp;lt;Subscription&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ID&amp;gt;)'&lt;/span&gt;
      &lt;span class="na"&gt;imageToDeploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;Registry&amp;gt;/&amp;lt;Image&amp;gt;:&amp;lt;Image&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tag&amp;gt;'&lt;/span&gt; &lt;span class="s"&gt;from Container App resource&lt;/span&gt;
      &lt;span class="na"&gt;containerAppName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;Name&amp;gt;'&lt;/span&gt; &lt;span class="s"&gt;from Container App resource&lt;/span&gt; 
      &lt;span class="na"&gt;resourceGroup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;resource&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;group&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;name&amp;gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's an example that shows a YAML configuration snippet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;trigger&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;
&lt;span class="na"&gt;pool&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;default&lt;/span&gt;
&lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;AzureContainerApps@1&lt;/span&gt;
    &lt;span class="na"&gt;inputs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;azureSubscription&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Visual&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Studio&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Enterprise(1111aaaa-22bb-33cc-44dd-555555eeeeee)'&lt;/span&gt;
      &lt;span class="na"&gt;imageToDeploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;acraz2003cah12oct.azurecr.io/aspnetcorecontainer:latest'&lt;/span&gt;
      &lt;span class="na"&gt;containerAppName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;aca-az2003'&lt;/span&gt;
      &lt;span class="na"&gt;resourceGroup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;RG1'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;9.Select &lt;strong&gt;Validate and save&lt;/strong&gt;, and then select &lt;strong&gt;Save&lt;/strong&gt; again to commit directly to the main branch.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcgf0y88qr4qn78fza86u.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcgf0y88qr4qn78fza86u.png" alt="save" width="800" height="350"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc5y3dpi1c8af5yn622rd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc5y3dpi1c8af5yn622rd.png" alt="commit" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The contents of the YAML file must be formatted correctly, including indentation. If you encounter an error, review the YAML file and correct any indentation issues.&lt;/p&gt;

&lt;p&gt;10.Navigate back to the main page of your pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run the Pipeline1 deployment task
&lt;/h2&gt;

&lt;p&gt;1.Ensure that you have &lt;code&gt;Pipeline1&lt;/code&gt; open in Azure DevOps.&lt;/p&gt;

&lt;p&gt;2.On the Runs tab of the Pipeline1 page, select &lt;strong&gt;Run pipeline&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A Run pipeline page opens to display the associated job.&lt;/p&gt;

&lt;p&gt;3.Select &lt;strong&gt;Run&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhr6p28yfq09kaq07t2r5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhr6p28yfq09kaq07t2r5.png" alt="waiting" width="800" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Jobs section displays job status, which progresses from Queued to Waiting.&lt;/p&gt;

&lt;p&gt;It can take a couple minutes for the status to transition from Queued to Waiting.&lt;/p&gt;

&lt;p&gt;4.If a 'Permission needed' message is displayed ("This pipeline needs permission to access 2 resources before this run can continue"), select &lt;strong&gt;View&lt;/strong&gt; and then provide the required permissions.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpc5x74pdink4c7mbtyhe.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpc5x74pdink4c7mbtyhe.png" alt="view" width="800" height="329"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fes0bxfp3h5n76mhu7y1t.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fes0bxfp3h5n76mhu7y1t.png" alt="permit" width="800" height="438"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fphw210s3z8rpnlah5pm4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fphw210s3z8rpnlah5pm4.png" alt="permit" width="800" height="439"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F15zcep2dvtoz7b8vff5o.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F15zcep2dvtoz7b8vff5o.png" alt="starting job" width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Monitor the status of the run operation and verify that the run is successful.&lt;/p&gt;

&lt;p&gt;It wasn't successful, so I updated the yaml file to include the subscription.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft0jz8x9a95gqeegzm6s4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft0jz8x9a95gqeegzm6s4.png" alt="edit" width="800" height="380"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnziiqjiu4ibjortuck0b.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnziiqjiu4ibjortuck0b.png" alt="error" width="799" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Azure connection now works. The log shows the login succeeded and containerapp show found aca-az2026. The error "spawnSync az ENOENT" means the task tried to run az to log in to your registry, and Windows couldn't find it. The task runs az in a way that doesn't work with the Windows az.cmd file. &lt;/p&gt;

&lt;p&gt;The solution is to give the task my registry username and password, so it logs in with those and skips az for that step. I'll get the Registry credential from the Azure portal. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to Settings → Access keys.&lt;/li&gt;
&lt;li&gt;Then Switch Admin user on.&lt;/li&gt;
&lt;li&gt;Copy the Username (usually the same as the registry name) and one of the Passwords.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then store the password as a secret: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In Pipeline1, click Edit, then &lt;strong&gt;Variables → New variable&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F254w4scyw4cjqtm9t16k.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F254w4scyw4cjqtm9t16k.png" alt="variables" width="705" height="816"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name: acrPassword&lt;/li&gt;
&lt;li&gt;Value: paste the password.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuad1gnm0ccuhomuryuno.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuad1gnm0ccuhomuryuno.png" alt="passwd" width="605" height="918"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tick Keep this value secret, then click &lt;strong&gt;OK&lt;/strong&gt; and &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Docker permissions issue: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open Computer Management → Local Users and Groups → Groups → docker-users.&lt;/li&gt;
&lt;li&gt;Click Add, add your Windows user, and click OK.&lt;/li&gt;
&lt;li&gt;Sign out of Windows and sign back in.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Start Docker Desktop, then start the agent again from PowerShell as administrator (cd C:\agents, then .\run.cmd).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then click Run pipeline. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8o0l9qqsf8ptvs5qxws2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8o0l9qqsf8ptvs5qxws2.png" alt="succeeded" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This Screenshot of Azure Pipelines is showing a successful run of Pipeline1.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check your work
&lt;/h2&gt;

&lt;p&gt;In this task, you examine your pipeline and container app to verify successful pipeline runs.&lt;/p&gt;

&lt;p&gt;1.Ensure that you have &lt;code&gt;Project1&lt;/code&gt; open in Azure DevOps.&lt;/p&gt;

&lt;p&gt;2.On the left side menu, select &lt;strong&gt;Pipelines&lt;/strong&gt;, and then select &lt;code&gt;Pipeline1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;3.The Runs tab displays individual runs that can be selected to review details.&lt;/p&gt;

&lt;p&gt;4.Open your Azure portal, and then open your Container App.&lt;/p&gt;

&lt;p&gt;5.On the left side menu, select &lt;strong&gt;Activity Log&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;6.Verify that a &lt;strong&gt;Create or Update Container App&lt;/strong&gt; operation succeeded as a result of running your pipeline.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn97y7jd4fsxbids80ewl.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn97y7jd4fsxbids80ewl.png" alt="successful create and update app" width="800" height="350"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3scauagc8cb1octf7kcb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3scauagc8cb1octf7kcb.png" alt="successfuljobs" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Cloud and DevOps practitioner building hands-on Azure skills through a five-part series on Azure Container Apps.&lt;/p&gt;

&lt;p&gt;Part 4 covers continuous integration with Azure Pipelines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configured an Azure Pipeline to run on a self-hosted Windows agent pool.&lt;/li&gt;
&lt;li&gt;Added the Azure Container Apps deployment task to deploy an image from Azure Container Registry to the container app.&lt;/li&gt;
&lt;li&gt;Troubleshot a failed run, including the "spawnSync az ENOENT" error and Docker permission issues on the agent, until the deployment succeeded.&lt;/li&gt;
&lt;li&gt;Verified the result in the pipeline run history and the container app's activity log.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Skills practiced:
&lt;/h2&gt;

&lt;p&gt;Azure DevOps, Azure Pipelines, YAML pipelines, CI/CD, self-hosted agents, Azure Container Apps, Docker, troubleshooting&lt;/p&gt;

</description>
      <category>azure</category>
      <category>devops</category>
      <category>cicd</category>
      <category>docker</category>
    </item>
    <item>
      <title>Part 3: Deploying a Container App with Managed Identity, Service Bus, and HTTP Scaling</title>
      <dc:creator>Rahimah Sulayman</dc:creator>
      <pubDate>Sat, 03 Oct 2026 16:20:17 +0000</pubDate>
      <link>https://dev.to/rahimah_dev/part-3-deploying-a-container-app-with-managed-identity-service-bus-and-http-scaling-3d2e</link>
      <guid>https://dev.to/rahimah_dev/part-3-deploying-a-container-app-with-managed-identity-service-bus-and-http-scaling-3d2e</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Employers want engineers who can take an app from a registry to a running, secure, scalable service.&lt;/p&gt;

&lt;p&gt;The scenario: At Fabrikam Inc., the registry is secured and the DevOps team is ready to deploy. The container app must run inside the virtual network, pull its image from Azure Container Registry, connect to Service Bus without a stored password, and scale to a maximum of two replicas to control costs.&lt;/p&gt;

&lt;p&gt;In Part 3, I deploy the container app to VNET1/ACASubnet, attach a user-assigned managed identity, connect it to Service Bus, and configure an HTTP scale rule. I then verify everything with the Azure CLI.&lt;/p&gt;

&lt;p&gt;In this exercise, you will deploy a container app from an image in the Azure Container Registry to the Azure Container Apps platform.&lt;/p&gt;

&lt;p&gt;The following Azure resources must be available in your Resource group named RG1:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Container registry instance that contains one image.&lt;/li&gt;
&lt;li&gt;A Virtual network with subnets.&lt;/li&gt;
&lt;li&gt;A Service Bus Namespace&lt;/li&gt;
&lt;li&gt;A Managed Identity&lt;/li&gt;
&lt;li&gt;A Private endpoint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You've been asked to configure a container app that meets the following requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is deployed to VNET1/ACASubnet.&lt;/li&gt;
&lt;li&gt;Pulls an image from a container registry.&lt;/li&gt;
&lt;li&gt;Authenticates using a user-assigned managed identity (uai-az2003).&lt;/li&gt;
&lt;li&gt;Uses Container App to connect to a Service Bus instance using the .NET client type.&lt;/li&gt;
&lt;li&gt;The app can run up to two replicas that are added whenever there are 10,000 HTTP concurrent requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You complete the following tasks during this exercise:&lt;/p&gt;

&lt;p&gt;1.Create a container app that uses an ACR image&lt;/p&gt;

&lt;p&gt;2.Configure the container app to authenticate using the user assigned identity&lt;/p&gt;

&lt;p&gt;3.Configure a connection between the container app and Service Bus&lt;/p&gt;

&lt;p&gt;4.Configure HTTP scale rules&lt;/p&gt;

&lt;p&gt;5.Verify the configuration&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a container app that uses an ACR image
&lt;/h2&gt;

&lt;p&gt;Complete the following steps to create a container app that uses an ACR image.&lt;/p&gt;

&lt;p&gt;1.Open your Azure portal.&lt;/p&gt;

&lt;p&gt;2.On the top search bar, in the Search textbox, enter &lt;strong&gt;container app&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Funvdydk0sd0qs2meenk2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Funvdydk0sd0qs2meenk2.png" alt="aca" width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.In the search results under Services, select &lt;strong&gt;Container Apps&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;Create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbet28oybeqg7y9jndhqv.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbet28oybeqg7y9jndhqv.png" alt="aca" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.On the &lt;strong&gt;Basics tab&lt;/strong&gt;, specify the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Subscription: Specify the Azure subscription that you're using for this guided project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resource group: &lt;strong&gt;RG1&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Container app name: &lt;strong&gt;aca-az2003&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Region: Select the Region specified for VNET1 (Central US).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The container app needs to be in the same region/location as the virtual network so you can choose VNET1 for the managed environment. For this guided project, keep all of your resources in the region/location specified for your resource group.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Container Apps Environment: Select &lt;strong&gt;Create new&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnw55448ffpqccozywt2x.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnw55448ffpqccozywt2x.png" alt="createnew" width="800" height="721"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.On the Create Container Apps Environment page, select the &lt;strong&gt;Networking&lt;/strong&gt; tab, and then specify the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use your own virtual network: Select &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Virtual network: Select &lt;strong&gt;VNET1&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Infrastructure subnet: &lt;strong&gt;ACASubnet&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the ACASubnet subnet is not listed, open your virtual network resource, adjust the subnet address range to 10.0.2.0/23 and retry the steps to create the Container App.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;7.On the Create Container Apps Environment page, select &lt;strong&gt;Create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgm4qqcqslru3whmxpp8j.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgm4qqcqslru3whmxpp8j.png" alt="capage" width="800" height="789"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.On the Create Container App page, select the &lt;strong&gt;Container&lt;/strong&gt; tab, and then specify the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use quickstart image: Ensure that this setting is not selected. If it is selected, uncheck this setting.&lt;/li&gt;
&lt;li&gt;Name: Enter &lt;strong&gt;aca-az2003&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Image source: Ensure that &lt;strong&gt;Azure Container Registry&lt;/strong&gt; is selected.&lt;/li&gt;
&lt;li&gt;Registry: Select your container registry. For example: &lt;strong&gt;acraz2003cah.azurecr.io&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Image: Select &lt;strong&gt;aspnetcorecontainer&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Image tag: Select &lt;strong&gt;latest&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;9.Select &lt;strong&gt;Review + create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvzq0ir7o3g70bcgkp3wf.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvzq0ir7o3g70bcgkp3wf.png" alt="reviewncreate" width="800" height="709"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10.Once verification has Passed, select &lt;strong&gt;Create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjlezwlhv29y05edho8jf.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjlezwlhv29y05edho8jf.png" alt="create" width="800" height="781"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11.Wait for the deployment to complete.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This deployment normally takes 3-5 minutes to complete, but may take up to 10 minutes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Configure the container app to authenticate using the user assigned identity
&lt;/h2&gt;

&lt;p&gt;Complete the following steps to configure the container app to authenticate using the user assigned identity.&lt;/p&gt;

&lt;p&gt;1.On the Azure portal, open the Container App that you created.&lt;/p&gt;

&lt;p&gt;2.Under Security, select &lt;strong&gt;Identity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;3.Select the tab for &lt;strong&gt;User assigned&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;Add user assigned managed identity&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9x6ro75xi6o4bmqhawhu.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9x6ro75xi6o4bmqhawhu.png" alt="uami" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.On the Add user assigned managed identity page, select &lt;strong&gt;uai-az2003&lt;/strong&gt;, and then select &lt;strong&gt;Add&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ywfrrdliluvgsj0iaev.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ywfrrdliluvgsj0iaev.png" alt="add" width="799" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Support for Service Connector (preview) on Azure Container Apps ended on March 30, 2026, and after that date new service connections aren't available.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Configure a connection between the container app and Service Bus
&lt;/h2&gt;

&lt;p&gt;Complete the following steps to configure a connection between the container app and Service Bus.&lt;/p&gt;

&lt;p&gt;1.On the Azure portal, ensure that you have your Container App open.&lt;/p&gt;

&lt;p&gt;2.Under Settings, select &lt;strong&gt;Service Connector (Preview)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;3.Select &lt;strong&gt;Connect to your Services&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;4.On the Create connection page, specify the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service type: Select &lt;strong&gt;Services Bus&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Client type: Select &lt;strong&gt;.NET&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;5.Select &lt;strong&gt;Next: Authentication&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;6.On the Authentication tab, select &lt;strong&gt;User assigned managed identity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;7.Ensure that the correct subscription and user assigned managed  identity are selected.&lt;/p&gt;

&lt;p&gt;Subscription: The Azure subscription that you're using for this guided project. User assigned managed identity: &lt;strong&gt;uai-az2003&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;8.To change tabs, select &lt;strong&gt;Review + Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;9.Once the Validation passed message appears, select &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;10.Wait for the connection to be created.&lt;/p&gt;

&lt;p&gt;It can take a minute before the Service Connector page updates with the new connection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure HTTP scale rules
&lt;/h2&gt;

&lt;p&gt;1.Ensure that your Container App is open in the portal.&lt;/p&gt;

&lt;p&gt;2.On the left-side menu under Application, select &lt;strong&gt;Revisions and replicas&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;3.Notice the Name assigned to your active revision.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkc44uxvpph80pnh26b7r.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkc44uxvpph80pnh26b7r.png" alt="active" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.On the left-side menu under Application, select &lt;strong&gt;Containers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;5.To the right of &lt;strong&gt;Based on revision&lt;/strong&gt;, ensure that your active revision is selected.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foyy5ymrlsp7ohcplzblx.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foyy5ymrlsp7ohcplzblx.png" alt="basedonrevision" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.On the left-side menu under Application, select &lt;strong&gt;Scale&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;7.Configure the Min / max replicas as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set Min replicas: 0&lt;/li&gt;
&lt;li&gt;Set Max replicas: 2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;8.Under Scale rule, select &lt;strong&gt;+ Add&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftsn3uj23qbeo3yfczpie.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftsn3uj23qbeo3yfczpie.png" alt="add" width="800" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9.On the Add scale rule page, specify the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rule name: Enter &lt;strong&gt;scalerule-http&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Type: Select &lt;strong&gt;HTTP scaling&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Concurrent requests: Set the value to &lt;strong&gt;10,000&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;10.On the Add scale rule page, select &lt;strong&gt;Add scale rule&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn5pf52sdcseog8zgj1xd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn5pf52sdcseog8zgj1xd.png" alt="scalerule" width="800" height="818"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11.On the Create and deploy new revision page, select &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;12.Ensure that your new scale rule is displayed.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5p7tvsrpxet4mcev8xve.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5p7tvsrpxet4mcev8xve.png" alt="scalerule" width="800" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Check your work
&lt;/h2&gt;

&lt;p&gt;In this task, you verify that your configuration meets the specified requirements.&lt;/p&gt;

&lt;p&gt;1.In the Azure portal, ensure that your Container App resource is open.&lt;/p&gt;

&lt;p&gt;2.On the left-side menu, under Settings, select &lt;strong&gt;Deployment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;3.At the top of the page, ensure that the Continuous deployment tab is selected.&lt;/p&gt;

&lt;p&gt;4.Verify that the expected Registry settings are reported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repository source: &lt;strong&gt;Azure Container Registry&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Registry: the name of your Container Registry (for example: acraz2003cah)&lt;/li&gt;
&lt;li&gt;Image: &lt;strong&gt;aca-az2003&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn42w3kd8pe4ndnsa14mm.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn42w3kd8pe4ndnsa14mm.png" alt="image" width="799" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Close the Container App page.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc4xcd840ihswmbjihst1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc4xcd840ihswmbjihst1.png" alt="ca" width="799" height="286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Open your Container Apps Environment resource.&lt;/p&gt;

&lt;p&gt;7.Verify that your Container App uses the proper subnet as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the Overview page, verify that Virtual Network is set to VNET1.&lt;/li&gt;
&lt;li&gt;On the Overview page, verify that Infrastructure subnet is set to ACASubnet.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7oipgrip9u3ujvo50co6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7oipgrip9u3ujvo50co6.png" alt="vnet" width="799" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.In the Azure portal, open the Cloud Shell and the switch to PowerShell.&lt;/p&gt;

&lt;p&gt;Run the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;az containerapp connection show --connection servicebus_b2a10 --name aca-az2026 --resource-group RG1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I ran this instead because there's no container app connection yet. I used &lt;code&gt;az containerapp connection create servicebus&lt;/code&gt; with these parameters:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--connection&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sb_az2026_rah&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--resource-group&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RG1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;aca-az2026&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--target-resource-group&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RG1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--namespace&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sb-az2026-rah&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--user-identity&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;client-id=&amp;lt;your-client-id&amp;gt; subs-id=&amp;lt;your-subscription-id&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--container&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;aca-az2026&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--client-type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dotnet&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9hr1in9nzpuixof4wqcq.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9hr1in9nzpuixof4wqcq.png" alt="succeeded" width="799" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The connection was created. The output shows "provisioningState": "Succeeded", and the connection is named sb_az2026_rah on aca-az2026.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: &lt;/p&gt;

&lt;p&gt;The connection added two environment variables to your container:&lt;br&gt;
AZURE_SERVICEBUS_FULLYQUALIFIEDNAMESPACE = sb-az2026-rah.servicebus.windows.net&lt;br&gt;
AZURE_SERVICEBUS_CLIENTID = your identity's client ID (a55ff84a-...)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This means the app can use these to reach Service Bus with the managed identity, with no connection string or password.&lt;/p&gt;

&lt;p&gt;10.Verify that the targetService properties match the specified configuration.&lt;/p&gt;

&lt;p&gt;To confirm it's healthy, run: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;az containerapp connection validate --connection sb_az2026_rah --name aca-az2026 --resource-group RG1&lt;/code&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr8qf5mf06shd8avvneqw.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr8qf5mf06shd8avvneqw.png" alt="validated" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
The results should show success for each check.&lt;/p&gt;

&lt;p&gt;To confirm the identity has permission on the Service Bus. The connection normally grants this automatically, but the output shows "roles": null, so it's worth a quick look. You should see a Service Bus role, such as Azure Service Bus Data Owner, on sb-az2026-rah. If there's none, your app will get authorization errors when it tries to send or receive messages.&lt;/p&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```az role assignment list --assignee a55ff84a-54e6-4b57-8db0-c20de0e3effb --all -o table&lt;/p&gt;

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

![role](https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/rc6oeqj7xlcw9zjxv8bv.png)

Permissions are in place. The identity has both roles it needs on sb-az2026-rah:

**Azure Service Bus Data Sender lets your app send messages.**
**Azure Service Bus Data Receiver lets your app receive messages.**

The `AcrPull` role is a separate permission that lets the app pull its image from your container registry, so it's fine to have too.

_Your setup is complete: the identity is attached to aca-az2026, the connection sb_az2026_rah succeeded, and the roles are assigned._

To verify your HTTP scale rule, you would need to run testing software that's able to simulate 10,000 concurrent HTTP requests and ensure that container replicas are created.

## Summary

Cloud and DevOps practitioner building hands-on Azure skills through a five-part series on Azure Container Apps.

Part 3 covers deploying and connecting the container app:

- Deployed a container app from an Azure Container Registry image into VNET1/ACASubnet.
- Attached a user-assigned managed identity for passwordless authentication.
- Connected the app to Service Bus using the .NET client type, with no connection string.
- Configured an HTTP scale rule (0 to 2 replicas, 10,000 concurrent requests).
- Verified the connection and role assignments (Service Bus Data Sender and Receiver) with the Azure CLI.

### Skills practiced: 
Azure Container Apps, Managed Identity, Service Bus, Service Connector, Azure CLI, Autoscaling, Azure RBAC

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>azure</category>
      <category>devops</category>
      <category>docker</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Part 2: Securing Azure Container Registry with Managed Identity and Private Endpoints</title>
      <dc:creator>Rahimah Sulayman</dc:creator>
      <pubDate>Sat, 03 Oct 2026 15:13:17 +0000</pubDate>
      <link>https://dev.to/rahimah_dev/part-2-securing-azure-container-registry-with-managed-identity-and-private-endpoints-9b1</link>
      <guid>https://dev.to/rahimah_dev/part-2-securing-azure-container-registry-with-managed-identity-and-private-endpoints-9b1</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Employers expect cloud engineers to build security in from the start, not add it later.&lt;/p&gt;

&lt;p&gt;The scenario: At Fabrikam Inc., the DevOps team is moving from AKS to Azure Container Apps. Before deploying anything, the security team requires that the container registry use a managed identity instead of stored credentials, grant only pull permissions (least privilege), and be reachable only through a private endpoint.&lt;/p&gt;

&lt;p&gt;In Part 2, I meet those requirements by creating a user-assigned managed identity, assigning it the AcrPull role, and configuring a private endpoint with private DNS on VNET1/PESubnet. I then verify the setup.&lt;/p&gt;

&lt;p&gt;Here, I configure a container registry instance for a secure connection from a container app.&lt;/p&gt;

&lt;p&gt;The following Azure resources must be available in your Resource group named RG1:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Container Registry instance that contains one image.&lt;/li&gt;
&lt;li&gt;A Virtual Network with subnets.&lt;/li&gt;
&lt;li&gt;Service Bus Namespace&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The previous unit (Setting up Your deployment tools and resources) includes a Setup section that describes how to configure the recourses for this guided project module. If necessary, go back and follow the Setup instructions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You've been asked to configure your Azure resources to meet the following requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your resource group must include a user-assigned managed identity.&lt;/li&gt;
&lt;li&gt;Your container registry must be able to use the managed identity to pull artifacts.&lt;/li&gt;
&lt;li&gt;Access for the managed identity must be limited using the principle of least privilege.&lt;/li&gt;
&lt;li&gt;Your container registry must be accessible from a private endpoint on  VNET1/PESubnet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You complete the following tasks during this exercise:&lt;/p&gt;

&lt;p&gt;1.Configure a user-assigned managed identity.&lt;/p&gt;

&lt;p&gt;2.Configure your container registry with AcrPull permissions for the managed identity.&lt;/p&gt;

&lt;p&gt;3.Configure your container registry with a private endpoint connection.&lt;/p&gt;

&lt;p&gt;4.Verify the configuration.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before continuing, ensure that you've completed the Setup section of the Prepare your app deployment tools and resources unit.&lt;br&gt;
Configure a user-assigned managed identity&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Complete the following steps to configure a user-assigned managed  identity.
&lt;/h2&gt;

&lt;p&gt;1.Open your Azure portal.&lt;/p&gt;

&lt;p&gt;2.On the Search bar, enter &lt;strong&gt;managed identity&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzdjjicjh2vztbs98nmn9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzdjjicjh2vztbs98nmn9.png" alt="mi" width="754" height="909"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.In the filtered list of resources, select &lt;strong&gt;User Assigned Managed Identity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;4.On the User Assigned Managed Identity page, select &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;5.On the Create User Assigned Managed Identity page, specify the  following information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subscription: Specify the Azure subscription that you're using for this guided project.&lt;/li&gt;
&lt;li&gt;Resource group: &lt;strong&gt;RG1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Region: &lt;strong&gt;Central US&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Name: &lt;strong&gt;uai-az2003&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;6.Select &lt;strong&gt;Review + create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1vq196aigq41ili5lgyp.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1vq196aigq41ili5lgyp.png" alt="reviewncreate" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Select &lt;strong&gt;Create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbr82afninfiqeeadmcuv.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbr82afninfiqeeadmcuv.png" alt="create" width="800" height="829"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure Container Registry with AcrPull permissions for the managed identity
&lt;/h2&gt;

&lt;p&gt;Complete the following steps to configure Container Registry with  AcrPull  permissions for the managed identity.&lt;/p&gt;

&lt;p&gt;1.In the Azure portal, open your Container Registry resource.&lt;/p&gt;

&lt;p&gt;2.On the left-side menu, select &lt;strong&gt;Access Control (IAM)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;3.On the Access Control (IAM) page, select &lt;strong&gt;Add role assignment&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp13oxov0lk7alkiw2xf6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp13oxov0lk7alkiw2xf6.png" alt="IAM" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Search for the AcrPull role, and then select &lt;strong&gt;AcrPull&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;5.Select &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhm1m2q7jkid3cms19sfd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhm1m2q7jkid3cms19sfd.png" alt="acrpull" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.On the Members tab, to the right of Assign access to, select &lt;strong&gt;Managed identity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;7.Select &lt;strong&gt;+ Select members&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftp6e1758a4wblolj19zr.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftp6e1758a4wblolj19zr.png" alt="selectmembers" width="800" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.On the Select managed identities page, under Managed identity, select &lt;strong&gt;User-assigned managed identity&lt;/strong&gt;, and then select the user-assigned managed identity created for this project.&lt;/p&gt;

&lt;p&gt;For example: &lt;code&gt;uai-az2003&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;9.On the Select managed identities page, select &lt;strong&gt;Select&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz67k5jfberz51i08mlj8.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz67k5jfberz51i08mlj8.png" alt="select" width="800" height="844"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10.On the Members tab of the Add role assignment page, select &lt;strong&gt;Review + assign&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1oqmfkoiwcicog65dszy.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1oqmfkoiwcicog65dszy.png" alt="reviewnassign" width="800" height="686"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11.On the &lt;strong&gt;Review + assign&lt;/strong&gt; tab, select &lt;strong&gt;Review + assign&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvl5w91vzbahvjzydlv38.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvl5w91vzbahvjzydlv38.png" alt="r&amp;amp;a" width="800" height="577"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;12.Wait for the role assignment to be added.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3k8zu1d83l0tu13kaz6p.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3k8zu1d83l0tu13kaz6p.png" alt="deployed" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure Container Registry with a private endpoint connection
&lt;/h2&gt;

&lt;p&gt;1.Ensure that your Container Registry resource is open in the portal.&lt;/p&gt;

&lt;p&gt;2.Under Settings, select &lt;strong&gt;Networking&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;3.On the &lt;strong&gt;Private access&lt;/strong&gt; tab, select &lt;strong&gt;+ Create a private endpoint connection&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fix1ckgrwy5ks6pxk2khi.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fix1ckgrwy5ks6pxk2khi.png" alt="pe" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.On the &lt;strong&gt;Basics&lt;/strong&gt; tab, under Project details, specify the following information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subscription: Specify the Azure subscription that you're using for this guided project.&lt;/li&gt;
&lt;li&gt;Resource group: &lt;strong&gt;RG1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Name: &lt;strong&gt;pe-acr-az2003&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Region: Ensure that &lt;strong&gt;Central US&lt;/strong&gt; is selected.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff2v94jp7mvfruz0qf82r.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff2v94jp7mvfruz0qf82r.png" alt="networking" width="800" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Select &lt;strong&gt;Next: Resource&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;6.On the &lt;strong&gt;Resource&lt;/strong&gt; tab, ensure the following information is displayed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subscription: Ensure that the Azure subscription that you're using for this guided project is selected.&lt;/li&gt;
&lt;li&gt;Resource type: Ensure that &lt;strong&gt;Microsoft.ContainerRegistry/registries&lt;/strong&gt; is selected.&lt;/li&gt;
&lt;li&gt;Resource: Ensure that the name of your registry is selected.&lt;/li&gt;
&lt;li&gt;Target sub-resource: Ensure that &lt;strong&gt;registry&lt;/strong&gt; is selected.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsf2o4adgnfudal3iqgvt.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsf2o4adgnfudal3iqgvt.png" alt="acr" width="800" height="617"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Select &lt;strong&gt;Next: Virtual Network&lt;/strong&gt;.&lt;br&gt;
 8.On the &lt;strong&gt;Virtual Network&lt;/strong&gt; tab, under Networking, ensure the following information is displayed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Virtual network: Ensure that &lt;code&gt;VNET1&lt;/code&gt; is selected&lt;/li&gt;
&lt;li&gt;Subnet: Ensure that &lt;code&gt;PESubnet&lt;/code&gt; is selected.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqzxqubrdlmc1kseshfp7.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqzxqubrdlmc1kseshfp7.png" alt="vnet" width="800" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9.Select &lt;strong&gt;Next: DNS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;10.On the &lt;strong&gt;DNS&lt;/strong&gt; tab, under Private DNS Integration, ensure the following information is displayed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrate with private DNS zone: Ensure that &lt;strong&gt;Yes&lt;/strong&gt; is selected.&lt;/li&gt;
&lt;li&gt;Private DNS Zone: Notice that &lt;strong&gt;(new) privatelink.azurecr.io&lt;/strong&gt; is specified.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcr6i8ou44jv4mbx1vxde.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcr6i8ou44jv4mbx1vxde.png" alt="privatedns" width="800" height="642"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11.Select &lt;strong&gt;Next: Tags&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;12.Select &lt;strong&gt;Next: Review + create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe1377u1mhbeo15ycutkd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe1377u1mhbeo15ycutkd.png" alt="reviewncreate" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;13.On the Review + create tab, when you see the Validation passed message, select &lt;strong&gt;Create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1pt7ahjk5bue0h8q1ppk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1pt7ahjk5bue0h8q1ppk.png" alt="create" width="800" height="696"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;14.Wait for the deployment to complete.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check your work
&lt;/h2&gt;

&lt;p&gt;In this task, you verify that your configuration meets the specified requirements.&lt;/p&gt;

&lt;p&gt;1.In the Azure portal, open your Container Registry resource.&lt;/p&gt;

&lt;p&gt;2.On the Access Control (IAM) page, select &lt;strong&gt;Role assignments&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;3.Verify that the role assignments list shows the &lt;strong&gt;AcrPull&lt;/strong&gt; role assigned to the User-assigned Managed Identity resource.&lt;/p&gt;

&lt;p&gt;4.On the left-side menu, under Settings, select &lt;strong&gt;Networking&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;5.On the Networking page, select the &lt;strong&gt;Private access&lt;/strong&gt; tab.&lt;/p&gt;

&lt;p&gt;6.Under Private endpoint, select the private endpoint that you created.&lt;/p&gt;

&lt;p&gt;For example, select &lt;strong&gt;per-acr-az2003&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;7.On the Private endpoint page, under Settings, select &lt;strong&gt;DNS configuration&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;8.Verify the following DNS setting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Private DNS zone: set to &lt;strong&gt;privatelink.azurecr.io&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;9.On the left-side menu, select &lt;strong&gt;Overview&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;10.Verify the following setting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Virtual network/subnet: set to &lt;strong&gt;VNET1/PESubnet&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2yyeposulexzux37bhwo.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2yyeposulexzux37bhwo.png" alt="verify" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Cloud and DevOps practitioner building hands-on Azure security skills through a five-part series on Azure Container Apps.&lt;/p&gt;

&lt;p&gt;Part 2 focuses on securing Azure Container Registry for a container app, following the principle of least privilege:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created a user-assigned managed identity to replace stored credentials&lt;/li&gt;
&lt;li&gt;Assigned the AcrPull role so the identity can pull images and nothing more.&lt;/li&gt;
&lt;li&gt;Configured a private endpoint on VNET1/PESubnet with private DNS integration (privatelink.azurecr.io)&lt;/li&gt;
&lt;li&gt;Verified the role assignment, DNS configuration, and network placement against the requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Skills practiced:
&lt;/h3&gt;

&lt;p&gt;Azure Container Registry, Managed Identity, Azure RBAC, Private Endpoints, Private DNS, Least Privilege, Cloud Networking.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>devops</category>
      <category>security</category>
      <category>docker</category>
    </item>
    <item>
      <title>Getting Started with Azure Container Apps. Part 1: Setting Up Your Deployment Tools and Resources</title>
      <dc:creator>Rahimah Sulayman</dc:creator>
      <pubDate>Sat, 03 Oct 2026 14:51:06 +0000</pubDate>
      <link>https://dev.to/rahimah_dev/getting-started-with-azure-container-apps-setting-up-your-deployment-tools-and-resources-ij2</link>
      <guid>https://dev.to/rahimah_dev/getting-started-with-azure-container-apps-setting-up-your-deployment-tools-and-resources-ij2</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Many teams adopt Kubernetes early, only to find they use a fraction of its capabilities. Azure Container Apps offers a simpler, serverless way to run containerized applications at scale.&lt;/p&gt;

&lt;p&gt;The scenario: You're on the DevOps team at Fabrikam Inc., which runs its containers on Azure Kubernetes Service (AKS). The team isn't using advanced features like custom service meshes, so they're paying for complexity they don't need. Your task is to build a proof of concept showing that Azure Container Apps can simplify their DevOps workflow, scale efficiently, and save resources through scale-to-zero.&lt;/p&gt;

&lt;p&gt;This first article lays the groundwork: installing the tools, provisioning the Azure resources, publishing a Web API to GitHub, pushing a Docker image to Azure Container Registry, and configuring Azure DevOps with a self-hosted agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prepare your app deployment tools and resources
&lt;/h3&gt;

&lt;p&gt;In this guided project, you configure Azure resources and other tools to demonstrate the suitability of Azure Container Apps as a deployment option.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An Azure subscription and GitHub account are required for this guided project. For your Azure subscription, we recommend that you have the Owner, Azure account administrator, or Azure co-administrator role. The Contributor role does not provide the permissions required to complete all tasks in this guided project module.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Project overview
&lt;/h2&gt;

&lt;p&gt;You work on a devops team for a technology company named Fabrikam Inc. The team is looking into using Azure Container Apps to run containerized cloud-native apps. Fabrikam has been using Azure Kubernetes Service (AKS) to run containers. Although the team is obtaining the benefits of running apps as containers and from using Kubernetes as a host, they've discovered that they're not using advanced AKS features. For example, they're not using the custom service mesh or autoscaling features. The team believes they can both simplify and improve efficiency of their devops implementation by switching to Azure Container Apps. The team believes that switching to Azure Container Apps will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improve their ability to publish and run containerized apps at scale.&lt;/li&gt;
&lt;li&gt;Reduce the complexity of their current devops implementation.&lt;/li&gt;
&lt;li&gt;Save resources by using scale-to-zero and built-in autoscaling capabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You have been tasked with developing a proof-of-concept solution. The solution must demonstrate the team's ability to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Configure a secure connection between Azure Container Registry and Azure Container Apps.&lt;/li&gt;
&lt;li&gt;Create and configure a container app in Azure Container Apps.&lt;/li&gt;
&lt;li&gt;Configure continuous integration by using Azure Pipelines.&lt;/li&gt;
&lt;li&gt;Scale a deployed app in Azure Container Apps.&lt;/li&gt;
&lt;li&gt;Manage revisions in Azure Container Apps.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your goal for this module is to implement a solution that demonstrates the deployment of cloud-native apps using Azure Container Apps. To achieve this goal, you complete the following activities:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set up the host environment and deployment resources.&lt;/li&gt;
&lt;li&gt;Configure Azure Container Registry for a secure connection with Azure Container Apps.&lt;/li&gt;
&lt;li&gt;Create and configure a container app in Azure Container Apps.&lt;/li&gt;
&lt;li&gt;Configure continuous integration using an Azure pipeline.&lt;/li&gt;
&lt;li&gt;Configure traffic-splitting and revision management.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;p&gt;To set up the host environment and deployment resources, you complete the following tasks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Configure host environment tools.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Install Docker Desktop.&lt;/li&gt;
&lt;li&gt;Install Visual Studio Code with Docker and Azure App Service extensions.&lt;/li&gt;
&lt;li&gt;Install Azure CLI with &lt;code&gt;containerapp&lt;/code&gt; extension.&lt;/li&gt;
&lt;li&gt;Install Windows PowerShell.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2.Configure Azure resources that support the container apps solution.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure a Resource Group.&lt;/li&gt;
&lt;li&gt;Configure a Virtual Network and subnets.&lt;/li&gt;
&lt;li&gt;Configure Service Bus.&lt;/li&gt;
&lt;li&gt;Configure Azure Container Registry.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;3.Configure app and deployment resources that support the container apps solution.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a WebAPI app and publish to a GitHub repository.&lt;/li&gt;
&lt;li&gt;Create Docker image and push to Azure Container Registry.&lt;/li&gt;
&lt;li&gt;Configure an Azure DevOps project and starter pipeline.&lt;/li&gt;
&lt;li&gt;Deploy a self-hosted Windows agent.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install Docker Desktop
&lt;/h2&gt;

&lt;p&gt;Complete the following steps to install Docker Desktop.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open a browser window, and then navigate to the Docker Desktop install page: &lt;a href="https://docs.docker.com/desktop/install/windows-install/" rel="noopener noreferrer"&gt;https://docs.docker.com/desktop/install/windows-install/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Links to instructions for Mac and Linux installs are available on this page.&lt;/p&gt;

&lt;p&gt;2.Ensure that you're working on a computer that meets system requirements.&lt;/p&gt;

&lt;p&gt;3.Follow the online instructions to install Docker Desktop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install the .NET Software Development Kit
&lt;/h2&gt;

&lt;p&gt;Complete the following steps to install the .NET Software Development Kit (SDK).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open a browser window, and then navigate to the .NET download page: &lt;a href="https://dotnet.microsoft.com/download" rel="noopener noreferrer"&gt;https://dotnet.microsoft.com/download&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2.On the &lt;strong&gt;Download .NET&lt;/strong&gt; page, select the latest Long Term Support (LTS) version of the .NET SDK.&lt;/p&gt;

&lt;p&gt;3.Wait for the installer file to finish downloading, and then run the .NET SDK installer file.&lt;/p&gt;

&lt;p&gt;On a Windows PC, you can find your Downloads folder using File Explorer. Double-click the installation file to begin the installation process.&lt;/p&gt;

&lt;p&gt;4.On the .NET SDK Installer window, select Install.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Visual Studio Code with Docker and Azure App Service extensions
&lt;/h2&gt;

&lt;p&gt;Complete the following steps to install Visual Studio Code with Docker and Azure App Service extensions.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open a browser window, and then navigate to: &lt;a href="https://code.visualstudio.com" rel="noopener noreferrer"&gt;https://code.visualstudio.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2.In the browser window, select &lt;strong&gt;Download for Windows&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Download page for Visual Studio Code automatically detects your operating system. It displays the version to download for your operating system, such as Linux, macOS, or Windows.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;3.Wait for the installer file to finish downloading, and then use a file explorer application to navigate to your computer’s downloads folder.&lt;/p&gt;

&lt;p&gt;4.In your file explorer application, select and run the Visual Studio Code installer file.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can install Visual Studio Code using either the User Installer or System Installer. The User Installer installs Visual Studio Code just for the current user, while the System Installer installs Visual Studio Code for all users. The User Installer is the recommended option for most users.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;5.Select &lt;strong&gt;I accept the license agreement&lt;/strong&gt;, and then continue following the online instructions to complete the installation.&lt;/p&gt;

&lt;p&gt;Accept the default options during the remainder of the installation.&lt;/p&gt;

&lt;p&gt;6.Ensure that you have Visual Studio Code open.&lt;/p&gt;

&lt;p&gt;7.On the &lt;strong&gt;Activity bar&lt;/strong&gt;, select &lt;strong&gt;Extensions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;8.In the &lt;strong&gt;Search Extensions in Marketplace&lt;/strong&gt; textbox, enter &lt;strong&gt;C#&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Entering "C#" filters the list of extensions to show only the extensions that have something to do with C# coding.&lt;/p&gt;

&lt;p&gt;9.In the filtered list of available extensions, select the extension labeled "&lt;strong&gt;C# Dev Kit&lt;/strong&gt; - Official C# extension from Microsoft" that's published by Microsoft.&lt;/p&gt;

&lt;p&gt;10.To install the extension, select &lt;strong&gt;Install&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;11.Wait for the installation to complete.&lt;/p&gt;

&lt;p&gt;12.On the &lt;strong&gt;EXTENSIONS&lt;/strong&gt; view, replace &lt;strong&gt;C#&lt;/strong&gt; with &lt;strong&gt;docker&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;13.In the filtered list of available extensions, select the extension labeled &lt;strong&gt;Docker&lt;/strong&gt; that's published by Microsoft.&lt;/p&gt;

&lt;p&gt;14.To install the extension, select &lt;strong&gt;Install&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;15.Wait for the installation to complete.&lt;/p&gt;

&lt;p&gt;16.On the &lt;strong&gt;EXTENSIONS&lt;/strong&gt; view, replace &lt;strong&gt;docker&lt;/strong&gt; with &lt;strong&gt;azure app service&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;17.In the filtered list of available extensions, select the extension labeled &lt;strong&gt;Azure App Service&lt;/strong&gt; that's published by Microsoft.&lt;/p&gt;

&lt;p&gt;18.To install the extension, select &lt;strong&gt;Install&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;19.Wait for the installation to complete.&lt;/p&gt;

&lt;p&gt;20.Close Visual Studio Code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Azure CLI and the &lt;code&gt;containerapp&lt;/code&gt; extension
&lt;/h2&gt;

&lt;p&gt;Complete the following steps install Azure CLI and the &lt;code&gt;containerapp&lt;/code&gt; extension.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open a browser window, and then navigate to: /cli/azure/install-azure-cli.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can use any browser, such as the Microsoft Edge browser or the Chrome browser.&lt;/p&gt;

&lt;p&gt;2.In the browser window, follow the instructions for installing/updating Azure CLI for your computer's operating system.&lt;/p&gt;

&lt;p&gt;The current version of the Azure CLI is 2.65.0. For information about the latest release, see the release notes. To find your installed version and see if you need to update, run &lt;code&gt;az version&lt;/code&gt;. You can run &lt;code&gt;az upgrade&lt;/code&gt; to install the latest version.&lt;/p&gt;

&lt;p&gt;3.Open a command line or terminal application, such as Windows Command Prompt.&lt;/p&gt;

&lt;p&gt;4.Sign in to Azure using the &lt;code&gt;az login&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;5.Follow the prompts to complete the authentication process.&lt;/p&gt;

&lt;p&gt;6.Install the Azure Container Apps extension using the &lt;code&gt;az extension add --name containerapp --upgrade&lt;/code&gt; command.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Microsoft PowerShell
&lt;/h2&gt;

&lt;p&gt;Complete the following steps to install Microsoft PowerShell.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open a browser window, and then navigate to: /powershell/scripting/install/installing-powershell.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2.In the browser window, follow the instructions for installing/updating PowerShell for your computer's operating system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure a Resource Group for your Azure resources
&lt;/h2&gt;

&lt;p&gt;Complete the following steps to configure a resource group for your Azure resources.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;NOTE: I used &lt;code&gt;North Europe&lt;/code&gt; in place of &lt;code&gt;Central US&lt;/code&gt; in this article and 2026 in place of 2003.&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open a browser window, and then navigate to the Azure portal: &lt;a href="https://portal.azure.com/" rel="noopener noreferrer"&gt;https://portal.azure.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2.Ensure that your Azure account has permission to create resources and assign RBAC permissions. Check the RBAC role(s) assigned to your account before you continue.&lt;/p&gt;

&lt;p&gt;The Contributor role isn't able to assign Azure RBAC permissions. We recommend using an account that has been assigned the Owner, Azure account administrator, or Azure co-administrator role for your Azure subscription. Other role combinations could provide sufficient access to complete this guided project module but have not been tested.&lt;/p&gt;

&lt;p&gt;3.On the top search bar of the Azure portal, in the Search textbox, enter &lt;strong&gt;resource group&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fske1dfxk36ngmk0px6kg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fske1dfxk36ngmk0px6kg.png" alt="rg" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.In the search results, select &lt;strong&gt;Resource groups&lt;/strong&gt;, and then select &lt;strong&gt;+ Create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz7jcqo22n0gebjcissx1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz7jcqo22n0gebjcissx1.png" alt="rg" width="799" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.On the Basics tab, configure the resource group as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Subscription: Specify the Azure subscription that you're using to complete the guided project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resource group: Enter &lt;strong&gt;RG1&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Region: Select &lt;strong&gt;Central US&lt;/strong&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;You can choose any region that offers the azure services required.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;6.Select &lt;strong&gt;Review + create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdu01xb0fky5gj35qy019.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdu01xb0fky5gj35qy019.png" alt="create" width="800" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Once validation has passed, select &lt;strong&gt;Create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4beia232aw5zw1lehcc4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4beia232aw5zw1lehcc4.png" alt="create" width="800" height="891"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.Verify &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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb9a2u0squft3mxbh5c8k.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb9a2u0squft3mxbh5c8k.png" alt="verify" width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure a Virtual Network and subnets
&lt;/h2&gt;

&lt;p&gt;Complete the following steps to configure a Virtual Network and subnets.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ensure that you have your Azure portal open in a browser window.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2.On the top search bar of the Azure portal, in the Search textbox, enter &lt;strong&gt;virtual network&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;3.In the search results, select &lt;strong&gt;Virtual networks&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbcrjzv3w7jtp8lppkvxx.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbcrjzv3w7jtp8lppkvxx.png" alt="vn" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;Create virtual network&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F23afs5z0r0frxovbhf02.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F23afs5z0r0frxovbhf02.png" alt="vn" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.On the Basics tab, configure your virtual network as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subscription: Ensure that the Azure subscription that you're using for this guided project is selected.&lt;/li&gt;
&lt;li&gt;Resource group name: Select &lt;strong&gt;RG1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Virtual network name: Enter &lt;strong&gt;VNET1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Region: Ensure that Central US is selected.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjv7thqs1m8ae2wjxmwsh.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjv7thqs1m8ae2wjxmwsh.png" alt="basic" width="800" height="611"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Select the &lt;strong&gt;Address space&lt;/strong&gt; tab.&lt;/p&gt;

&lt;p&gt;7.On the Address space tab, under &lt;strong&gt;Subnets&lt;/strong&gt;, select &lt;strong&gt;default&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs8r6zr1bbaa2l036jgqd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs8r6zr1bbaa2l036jgqd.png" alt="default" width="800" height="707"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.On the Edit subnet page, configure the subnet as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name: Enter &lt;code&gt;**PESubnet**&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Starting address: Ensure that &lt;strong&gt;10.0.0.0&lt;/strong&gt; is specified.&lt;/li&gt;
&lt;li&gt;Subnet size: Ensure that &lt;strong&gt;/24 (256 addresses)&lt;/strong&gt; is specified.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;9.Select &lt;strong&gt;Save&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc1yznzoyara3s2rkg0n2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc1yznzoyara3s2rkg0n2.png" alt="save" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10.On the Address space tab, select &lt;strong&gt;+ Add a subnet&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz6vizudanbvrv5zek6l9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz6vizudanbvrv5zek6l9.png" alt="subnet" width="800" height="669"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11.On the Add a subnet page, configure the subnet as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name: Enter &lt;code&gt;**ACASubnet**&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Starting address: Ensure that &lt;strong&gt;10.0.4.0&lt;/strong&gt; is specified.&lt;/li&gt;
&lt;li&gt;Subnet size: Ensure that &lt;strong&gt;/23 (512 addresses)&lt;/strong&gt; is specified.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;12.Select &lt;strong&gt;Add&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzbwmbq6t76gcf0v0q4fv.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzbwmbq6t76gcf0v0q4fv.png" alt="add" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;13.Select &lt;strong&gt;Review + create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F854t4tq25ihfcvsxx86j.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F854t4tq25ihfcvsxx86j.png" alt="review" width="800" height="690"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;14.Once validation has passed, select &lt;strong&gt;Create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7y1n6mgdx913tqilpob0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7y1n6mgdx913tqilpob0.png" alt="create" width="800" height="824"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;15.Wait for the deployment to complete.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjayho4k6jnf8yg0xh31z.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjayho4k6jnf8yg0xh31z.png" alt="complete" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure Service Bus
&lt;/h2&gt;

&lt;p&gt;Complete the following steps to configure a Service Bus instance.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ensure that you have your Azure portal open in a browser window.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2.On the top search bar of the Azure portal, in the Search textbox, enter &lt;strong&gt;service bus&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;3.In the search results, select &lt;strong&gt;Service Bus&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqqbwtrvfspbcmf9ii2gn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqqbwtrvfspbcmf9ii2gn.png" alt="sb" width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;Create service bus namespace&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm6zk0drseia4d55y0bsd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm6zk0drseia4d55y0bsd.png" alt="sbns" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.On the Basics tab, configure your Service bus namespace as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subscription: Ensure that the Azure subscription that you're using for this guided project is selected.&lt;/li&gt;
&lt;li&gt;Resource group name: Select &lt;strong&gt;RG1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Namespace name: Enter &lt;strong&gt;sb-az2003&lt;/strong&gt;- followed by your name or initials. For example: &lt;strong&gt;sb-az2003-cah&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Location: Ensure that &lt;strong&gt;Central US&lt;/strong&gt; is selected.&lt;/li&gt;
&lt;li&gt;Pricing tier: Select &lt;strong&gt;Basic&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;6.Select &lt;strong&gt;Review + create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk315jk160fchnwjg51w5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk315jk160fchnwjg51w5.png" alt="rnc" width="800" height="653"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Once the Validation succeeded message appears, select &lt;strong&gt;Create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdxu0ezw74ybmhymslp11.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdxu0ezw74ybmhymslp11.png" alt="create" width="800" height="876"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.Wait for the deployment to complete.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foaebf3sgayw881f5szi3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foaebf3sgayw881f5szi3.png" alt="deploy" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure Azure Container Registry
&lt;/h2&gt;

&lt;p&gt;Complete the following steps to configure a Container Registry instance.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ensure that you have your Azure portal open in a browser window.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2.On the top search bar of the Azure portal, in the Search textbox, enter &lt;strong&gt;container registry&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;3.In the search results, select &lt;strong&gt;Container registries&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi4s3u4wyx24lefyebyvk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi4s3u4wyx24lefyebyvk.png" alt="cr" width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.On the Container registries page, select &lt;strong&gt;Create container registry or + Create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh0q0f6ufhmlyyf8ni1qj.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh0q0f6ufhmlyyf8ni1qj.png" alt="create" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.On the Basics tab of the Create container registry page, specify the following information:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The name of your Registry must be unique. Also, the Premium tier is required for private link with private endpoints.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Subscription: Ensure that the Azure subscription that you're using for this guided project is selected.&lt;/li&gt;
&lt;li&gt;Resource group: Select &lt;strong&gt;RG1&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Registry name: Enter &lt;strong&gt;acraz2003&lt;/strong&gt; followed by your initials and date. For example: &lt;strong&gt;acraz2003cah25oct&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Location: Ensure that &lt;strong&gt;Central US&lt;/strong&gt; is selected.&lt;/li&gt;
&lt;li&gt;SKU: Select &lt;strong&gt;Premium&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is a daily fee associated with the Premium tier. You are responsible for the cost of the Azure resources that you use during this guided project. For more information, see the Azure Container Registry pricing page: &lt;a href="https://azure.microsoft.com/pricing/details/container-registry/" rel="noopener noreferrer"&gt;https://azure.microsoft.com/pricing/details/container-registry/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;6.Select &lt;strong&gt;Review + create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyjf43p7muwjyu52aywsc.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyjf43p7muwjyu52aywsc.png" alt="rnc" width="799" height="653"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Select &lt;strong&gt;Create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa8zh3kqw8lk0cplz4b0c.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa8zh3kqw8lk0cplz4b0c.png" alt="create" width="800" height="695"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.After the deployment has completed, open the deployed resource.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftrfasiygfl74oxpf15zz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftrfasiygfl74oxpf15zz.png" alt="deploy" width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9.On the left-side menu, under Settings, select &lt;strong&gt;Networking.&lt;/strong&gt;&lt;br&gt;
10.On the Networking page, on the Public access tab, ensure that &lt;strong&gt;All networks&lt;/strong&gt; is selected.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftz8nj4pojc26xquvtd6l.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftz8nj4pojc26xquvtd6l.png" alt="network" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11.On the left-side menu, under Settings, select &lt;strong&gt;Properties&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;12.On the Properties page, select &lt;strong&gt;Admin user&lt;/strong&gt;, and then select &lt;strong&gt;Save&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq7e492rjuhis4b9fb3fn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq7e492rjuhis4b9fb3fn.png" alt="adminuser" width="799" height="545"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a WebAPI app and publish to a GitHub repository
&lt;/h2&gt;

&lt;p&gt;Complete the following steps to create a WebAPI app and publish to a GitHub repository.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Visual Studio Code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2.On the File menu, select &lt;strong&gt;Open Folder&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff0ro725jv9vk9vubicr6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff0ro725jv9vk9vubicr6.png" alt="folder" width="800" height="741"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Create a new folder named &lt;strong&gt;AZ2003&lt;/strong&gt; in a location that is easy to find.&lt;/p&gt;

&lt;p&gt;For example, create a folder named &lt;strong&gt;AZ2003&lt;/strong&gt; on the Windows Desktop.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0w59rrf2nipd5hh9e8f5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0w59rrf2nipd5hh9e8f5.png" alt="newfolder" width="800" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.On the Terminal menu, select &lt;strong&gt;New Terminal&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmp0gqs76q06x6t2cbvow.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmp0gqs76q06x6t2cbvow.png" alt="newterminal" width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.At the terminal command prompt, to create a new ASP.NET Web API project, enter the following command:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;.NET CLI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dotnet new webapi --no-https&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu2vx9ixkj0sdvmyz0cz8.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu2vx9ixkj0sdvmyz0cz8.png" alt=".net" width="800" height="183"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.At the terminal command prompt, run the following dotnet CLI&lt;br&gt;
command:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;.NET CLI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dotnet build&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwmq9juxui6bwmhogcrh6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwmq9juxui6bwmhogcrh6.png" alt=".build" width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.On the View menu, select &lt;strong&gt;Command Palette&lt;/strong&gt;, and then run the following command: &lt;strong&gt;.NET: Generate Assets for Build and Debug&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9kt92j7jjgbqqjyksk2j.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9kt92j7jjgbqqjyksk2j.png" alt="cp" width="799" height="555"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv256gfer3ff1p9zhktu8.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv256gfer3ff1p9zhktu8.png" alt="bnd" width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the command generates an error message, select &lt;strong&gt;OK&lt;/strong&gt;, and then run the command again.&lt;/p&gt;

&lt;p&gt;8.In the root project folder, create a .gitignore file that contains the following information:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;gitignore&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[Bb]in/&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[Oo]bj/&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwxd4oh0ncsdgx842di68.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwxd4oh0ncsdgx842di68.png" alt="gitig" width="710" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9.On the File menu, select &lt;strong&gt;Save All&lt;/strong&gt; or &lt;code&gt;Ctrl + s&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;10.Open the Source Control view.&lt;/p&gt;

&lt;p&gt;11.Select &lt;strong&gt;Publish to GitHub.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;12.If prompted, to enable the GitHub extension to sign in using GitHub, select &lt;strong&gt;Allow&lt;/strong&gt;, and then provide authorization in GitHub.&lt;/p&gt;

&lt;p&gt;13.In Visual Studio Code, select &lt;strong&gt;Publish to GitHub public repository&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8c8labm6vv3446ycvdgo.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8c8labm6vv3446ycvdgo.png" alt="publish" width="799" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;14.Ensure that the &lt;strong&gt;bin&lt;/strong&gt; and &lt;strong&gt;obj&lt;/strong&gt; folders are not included in the repository.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffau610fbjmba36odp7hb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffau610fbjmba36odp7hb.png" alt="binnobj" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Create Docker image and push to Azure Container Registry
&lt;/h2&gt;

&lt;p&gt;Complete the following steps to create a Docker image and push the image to your Azure Container Registry.&lt;/p&gt;

&lt;p&gt;1.Ensure that you have your AZ2003 code project open in Visual Studio Code.&lt;/p&gt;

&lt;p&gt;2.To create a Dockerfile, run the following command in the Command Palette: &lt;strong&gt;Docker: Add Docker Files to Workspace&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Froxnuwvm978847ze2sky.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Froxnuwvm978847ze2sky.png" alt="dockerfile" width="798" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.When prompted, specify the following information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Application Platform: &lt;strong&gt;.NET ASP.NET Core&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Operating System: &lt;strong&gt;Linux&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Ports: &lt;strong&gt;5000&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Docker Compose files: &lt;strong&gt;No&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9phtywbaejfpgf4wcokn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9phtywbaejfpgf4wcokn.png" alt="viewdf" width="799" height="453"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fszfb0xqs9fjg7eglhtbu.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fszfb0xqs9fjg7eglhtbu.png" alt="commit" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.At a terminal command prompt, run the following docker CLI command:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Azure CLI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker build --tag aspnetcorecontainer:latest .&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9en3rei7ms7o3byd9iys.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9en3rei7ms7o3byd9iys.png" alt="dockerbuild" width="800" height="591"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The syntax for the build command is: &lt;code&gt;docker build --tag &amp;lt;image name&amp;gt;:&amp;lt;image tag&amp;gt;&lt;/code&gt; .&lt;/p&gt;

&lt;p&gt;This command builds a container image that is hosted by Docker and accessible using the Docker extension for VS Code.&lt;/p&gt;

&lt;p&gt;5.Wait for the Docker Build command to complete.&lt;/p&gt;

&lt;p&gt;6.Open the Visual Studio Code Command Palette, and then run the following command: &lt;strong&gt;Docker Images: Push&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy8d76kc5y87iwivscbr9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy8d76kc5y87iwivscbr9.png" alt="dockerpush" width="799" height="396"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyp84xn84lhwv1q6vzn5n.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyp84xn84lhwv1q6vzn5n.png" alt="dockerpush" width="799" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.When the command runs, enter the following information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Select the docker image name that you created: &lt;code&gt;aspnetcorecontainer&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the image tag that you created: &lt;code&gt;latest&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;8.If you see a message stating that no registry is connected, select &lt;strong&gt;Connect Registry&lt;/strong&gt;, and then enter the following information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Registry provider: Select &lt;strong&gt;Azure&lt;/strong&gt;. Follow the online instructions to verify your Azure account if needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Azure subscription: Select the Azure Subscription that you're using for this guided project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select your Azure Container Registry resource. For example: &lt;strong&gt;acraz2003cah25oct&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An image tag is generated. For example: &lt;code&gt;acraz2003cah12oct.azurecr.io/aspnetcorecontainer:latest&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To push the image to your Container Registry, press Enter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The following Docker command is executed:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Azure CLI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;docker image push acraz2003cah12oct.azurecr.io/aspnetcorecontainer:latest&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;9.Wait for the image to be pushed to your Azure Container Registry.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffdv0kkkpre1ceh5jzhj3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffdv0kkkpre1ceh5jzhj3.png" alt="pushed" width="800" height="290"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also verify via Docker Desktop.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fom7nlr11bl3xpia75642.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fom7nlr11bl3xpia75642.png" alt="docker" width="800" height="82"&gt;&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;10.Open the Source Control view, and then &lt;strong&gt;Commit&lt;/strong&gt; and &lt;strong&gt;Sync&lt;/strong&gt; your file updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure Azure DevOps and a starter Pipeline
&lt;/h2&gt;

&lt;p&gt;Complete the following steps to configure Azure DevOps and a starter Pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the Azure portal.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2.On the top search bar, in the Search textbox, enter &lt;strong&gt;devops&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;3.In the search results, select &lt;strong&gt;Azure DevOps organizations&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F18wevmbk7a1j8c94rcw7.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F18wevmbk7a1j8c94rcw7.png" alt="azuredevops" width="799" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Select &lt;strong&gt;My Azure DevOps Organizations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;5.If you haven’t created an organization, select &lt;strong&gt;Free&lt;/strong&gt; or &lt;strong&gt;Create new organization&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F22eg1ll8on5s52u74f9c.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F22eg1ll8on5s52u74f9c.png" alt="create new organization" width="800" height="603"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.On the home page of your organization, in the lower-left corner of the page, select &lt;strong&gt;Organization settings&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1z3afb7silm9wio556cb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1z3afb7silm9wio556cb.png" alt="org setting" width="799" height="659"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.On the left side menu under &lt;strong&gt;Security&lt;/strong&gt;, select &lt;strong&gt;Policies&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;8.Ensure that the &lt;strong&gt;Allow public projects&lt;/strong&gt; policy is set to &lt;strong&gt;On&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;9.Return to the home page of your organization.&lt;/p&gt;

&lt;p&gt;10.To create a new project, select &lt;strong&gt;New project&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkvl9dgthmfretexmxidm.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkvl9dgthmfretexmxidm.png" alt="newproject" width="799" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you created a new organization, you may see the &lt;strong&gt;Create a project to get started&lt;/strong&gt; page.&lt;/p&gt;

&lt;p&gt;11.On the Create new project page, specify the following information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project name: &lt;strong&gt;Project1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Description: &lt;strong&gt;AZ-2003 project&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Visibility: &lt;strong&gt;Public&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmqw7t1qzrc15omo65i0i.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmqw7t1qzrc15omo65i0i.png" alt="public" width="799" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;12.On the Create new project page, select &lt;strong&gt;New project&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq3lmz7mdl2x3r3dbuv06.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq3lmz7mdl2x3r3dbuv06.png" alt="new project" width="799" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;13.On the left-side menu, select &lt;strong&gt;Repos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;14.Under Import a repository, select &lt;strong&gt;Import&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjn2f3b0vxrm1fdn0jb33.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjn2f3b0vxrm1fdn0jb33.png" alt="import" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;15.On the Import a Git repository page, enter the URL for the GitHub repository you created for your code project, and then select &lt;strong&gt;Import&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Your repository URL should be similar to the following example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://github.com/&amp;lt;your account&amp;gt;/AZ2003&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flvsfu9by3p0m4vhp1ki4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flvsfu9by3p0m4vhp1ki4.png" alt="Import" width="583" height="898"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;16.On the left-side menu, select &lt;strong&gt;Pipelines&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3p755kk74ptmonf8q5s0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3p755kk74ptmonf8q5s0.png" alt="pipeline" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;17.Select &lt;strong&gt;Create Pipeline&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkc8f6xqen1ql3erufgkf.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkc8f6xqen1ql3erufgkf.png" alt="createpipeline" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;18.Select &lt;strong&gt;Azure Repos Git&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7ihs3rv3lynohx4hcpbx.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7ihs3rv3lynohx4hcpbx.png" alt="zurerepogit" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;19.On the Select a repository page, select &lt;strong&gt;Project1&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftvydewqgxzmjx8ycx4nv.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftvydewqgxzmjx8ycx4nv.png" alt="project1" width="799" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;20.Select Starter pipeline.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0dumno7c3bw7ar5hzlaf.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0dumno7c3bw7ar5hzlaf.png" alt="starterpl" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;21.Under Save and Run, select Save, and then select &lt;strong&gt;Save&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1vmlze1s0ytx147mavqf.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1vmlze1s0ytx147mavqf.png" alt="savenrun" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;22.To rename the pipeline to &lt;code&gt;Pipeline1&lt;/code&gt;, complete the following steps:&lt;/p&gt;

&lt;p&gt;a.On the left-side menu, select &lt;strong&gt;Pipelines&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;b.To the right of the Project1 pipeline, select &lt;strong&gt;More options&lt;/strong&gt;, and then select &lt;strong&gt;Rename/move&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff3wdycs9xzz8iu92ugpl.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff3wdycs9xzz8iu92ugpl.png" alt="rename" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;c.In the Rename/move pipeline dialog, under Name, enter &lt;strong&gt;Pipeline1&lt;/strong&gt; and then select &lt;strong&gt;Save&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftlzvwimw1wjq866wz6ak.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftlzvwimw1wjq866wz6ak.png" alt="save" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note&lt;/p&gt;

&lt;p&gt;Don't run the pipeline now. You will configure this pipeline during the project exercises.&lt;/p&gt;
&lt;/blockquote&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd24x7ihsay4f95ujzsgl.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd24x7ihsay4f95ujzsgl.png" alt="renamedpl" width="799" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy a self-hosted Windows agent
&lt;/h2&gt;

&lt;p&gt;For an Azure Pipeline to build and deploy Windows, Azure, and other Visual Studio solutions you need at least one Windows agent in the host environment.&lt;/p&gt;

&lt;p&gt;Complete the following steps to deploy a self-hosted Windows agent:&lt;/p&gt;

&lt;p&gt;1.Ensure that you're signed-in to Azure DevOps with the user account you're using for your Azure DevOps organization.&lt;/p&gt;

&lt;p&gt;For example: &lt;code&gt;https://dev.azure.com/{your organization}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;2.From the home page of your organization, open your user settings, and then select &lt;strong&gt;Personal access tokens&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh8mbxcxxcorei4qdi72y.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh8mbxcxxcorei4qdi72y.png" alt="PAT" width="800" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.To create a personal access token, select &lt;strong&gt;+ New Token&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8hpipengst90cx1totk8.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8hpipengst90cx1totk8.png" alt="newtoken" width="799" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Under Name, enter &lt;strong&gt;AZ2003&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;5.At the bottom of the Create a new personal access token window, to see the complete list of scopes, select &lt;strong&gt;Show all scopes&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3q3be31pxfptonj3pv2c.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3q3be31pxfptonj3pv2c.png" alt="newPAT" width="800" height="713"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.For the custom designed scope, select &lt;strong&gt;Agent Pools (Read &amp;amp; manage) and Deployment Groups (Read &amp;amp; manage).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ensure that all the other boxes are cleared.&lt;/p&gt;

&lt;p&gt;7.Select &lt;strong&gt;Create&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F91vqiefo3z6d06jm64vt.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F91vqiefo3z6d06jm64vt.png" alt="create" width="800" height="706"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.On the Success page, to copy the token, select &lt;strong&gt;Copy to clipboard&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk7u74nk0z3nmzu5l5oc4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk7u74nk0z3nmzu5l5oc4.png" alt="cpPAT" width="651" height="917"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You use this token when you configure the agent.&lt;/p&gt;

&lt;p&gt;9.Ensure that you're signed into Azure DevOps as the Azure DevOps organization owner.&lt;/p&gt;

&lt;p&gt;10.Select your DevOps organization, and then select &lt;strong&gt;Organization settings&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;11.On the left side menu under Pipelines, select &lt;strong&gt;Agent pools&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;12.If the &lt;strong&gt;Get the agent&lt;/strong&gt; dialog box opens, skip to the next step.&lt;/p&gt;

&lt;p&gt;If a list of Agent pools is displayed, complete the following steps:&lt;/p&gt;

&lt;p&gt;a. To select the default pool, select &lt;strong&gt;Default&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3kqumnxqbbyg08v00lqz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3kqumnxqbbyg08v00lqz.png" alt="defaultagentpool" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the Default pool doesn't exist, select &lt;strong&gt;Add pool&lt;/strong&gt;, and then enter the following information:&lt;/p&gt;

&lt;p&gt;i.Under Pool type, select &lt;strong&gt;Self-hosted&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;ii.Under Name, enter &lt;strong&gt;default&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;iii.Select &lt;strong&gt;Create.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;iv.To open the pool that you just created, select &lt;strong&gt;default&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;b.Select Agents, and then select &lt;strong&gt;New agent&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxl8l1ow518ljxjyyd5ic.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxl8l1ow518ljxjyyd5ic.png" alt="newagent" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;13.On the &lt;strong&gt;Get the agent&lt;/strong&gt; dialog box, complete the following steps:&lt;/p&gt;

&lt;p&gt;a.Select the &lt;strong&gt;Windows&lt;/strong&gt; tab.&lt;/p&gt;

&lt;p&gt;b.On the left pane, select the processor architecture of the installed Windows OS version on your machine.&lt;/p&gt;

&lt;p&gt;The x64 agent version is intended for 64-bit Windows, whereas the x86 version is intended for 32-bit Windows.&lt;/p&gt;

&lt;p&gt;c.On the right pane, select &lt;strong&gt;Download&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdgytzflxrllb55l8stqg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdgytzflxrllb55l8stqg.png" alt="download" width="799" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;d.Follow the instructions to download the agent.&lt;/p&gt;

&lt;p&gt;14.Use File Explorer to create the following folder location for the agent:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;dos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;C:\agents&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;15.Unpack the agent zip file into the directory you created.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvgyxay0u2s6duq8k0bcy.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvgyxay0u2s6duq8k0bcy.png" alt="extract" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;16.Open PowerShell as an Administrator.&lt;/p&gt;

&lt;p&gt;17.Navigate to the "C:\agents" directory, and then enter the following PowerShell command:&lt;/p&gt;

&lt;p&gt;.\config`&lt;/p&gt;

&lt;p&gt;18.Respond to the configuration prompts as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enter server URL &amp;gt;: enter the URL for your DevOps organization. Such as: &lt;code&gt;https://dev.azure.com/&amp;lt;your organization&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Enter authentication type (press enter for PAT) &amp;gt;: press Enter.&lt;/li&gt;
&lt;li&gt;Enter personal access token &amp;gt;: Paste-in the personal access token that you copied to the clipboard earlier.&lt;/li&gt;
&lt;li&gt;Enter agent pool (press enter for default) &amp;gt;: press Enter.&lt;/li&gt;
&lt;li&gt;Enter agent name (press enter for YOUR-PC-NAME) &amp;gt; enter &lt;strong&gt;az2003-agent&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enter work folder (press enter for _work) &amp;gt;: press Enter.&lt;/li&gt;
&lt;li&gt;Enter run agent as service? (Y/N) (press enter for N) &amp;gt;: enter &lt;strong&gt;Y&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enter enable SERVICE_SID_TYPE_UNRESTRICTED for agent service (Y/N) (press enter for N) &amp;gt;: enter &lt;strong&gt;Y&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enter User account to use for the service (press enter for NT AUTHORITY\NETWORK SERVICE) &amp;gt;: press Enter.&lt;/li&gt;
&lt;li&gt;Enter whether to prevent service starting immediately after configuration is finished? (Y/N) (press enter for N) &amp;gt;: press Enter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A message informing you that the agent started successfully is displayed.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffh2ticalt5ocvgk4d3ld.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffh2ticalt5ocvgk4d3ld.png" alt="deployed" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Cloud and DevOps practitioner building hands-on Azure skills through a five-part project on Azure Container Apps.&lt;/p&gt;

&lt;p&gt;This series follows a proof-of-concept scenario: a team running containers on AKS evaluates Azure Container Apps to reduce complexity and cost. Part 1 covers the foundation:&lt;/p&gt;

&lt;p&gt;Provisioned Azure resources, including a Resource Group, a Virtual Network with segmented subnets, Service Bus, and Azure Container Registry&lt;br&gt;
Created an ASP.NET Core Web API, containerized it with Docker, and pushed the image to Azure Container Registry&lt;br&gt;
Published the code to GitHub and imported it into Azure Repos&lt;br&gt;
Set up an Azure DevOps project with a starter pipeline and a self-hosted Windows build agent&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Coming next in the series: secure ACR-to-Container Apps connection, container app deployment, CI with Azure Pipelines, scaling, and revision management.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Skills practiced so far:
&lt;/h3&gt;

&lt;p&gt;Azure, Azure Container Registry, Azure DevOps, Docker, Azure CLI, PowerShell, .NET, GitHub, cloud networking&lt;/p&gt;

&lt;p&gt;You're now ready to begin the Guided project exercises. Good luck!&lt;/p&gt;

</description>
      <category>azure</category>
      <category>devops</category>
      <category>containers</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Promoting a Member Server to Domain Controller, Transferring FSMO Roles, and Configuring Active Directory Sites</title>
      <dc:creator>Rahimah Sulayman</dc:creator>
      <pubDate>Tue, 15 Sep 2026 13:05:32 +0000</pubDate>
      <link>https://dev.to/rahimah_dev/promoting-a-member-server-to-domain-controller-transferring-fsmo-roles-and-configuring-active-5675</link>
      <guid>https://dev.to/rahimah_dev/promoting-a-member-server-to-domain-controller-transferring-fsmo-roles-and-configuring-active-5675</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Active Directory is essential in organizations where users, servers, and network resources must be centrally managed and securely controlled.&lt;br&gt;
As businesses expand, multiple domain controllers provide greater availability and support reliable authentication across the environment.&lt;br&gt;
FSMO roles ensure that specific Active Directory operations are managed by designated domain controllers.&lt;br&gt;
Active Directory sites and subnets also help organizations align directory services with their physical and network locations.&lt;br&gt;
In this hands-on exercise, I promoted TAILWIND-MBR1 to an additional domain controller in the existing domain.&lt;br&gt;
I then transferred the RID Master FSMO role to the new domain controller.&lt;br&gt;
I also created a Sydney Active Directory site and associated the 172.16.1.0/24 subnet with it.&lt;br&gt;
These tasks provide practical experience with domain controller deployment, FSMO administration, and Active Directory site configuration in an enterprise environment.&lt;br&gt;
In this exercise, you promote a server to domain controller, transfer a FSMO role to the new domain controller, create a site, and add a subnet to the site.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Active Directory Domain Services (AD DS) and promote to Domain Controller
&lt;/h2&gt;

&lt;p&gt;In this task, you promote member server TAILWIND-MBR1 to become a domain controller in the TAILWINDTRADERS domain. To complete this task, perform the following steps:&lt;/p&gt;

&lt;p&gt;1.Sign in to TAILWIND-MBR1 as TAILWINDTRADERS\Administrator with the password: &lt;code&gt;Pa55w.rdPa55w.rd&lt;/code&gt;.&lt;br&gt;
2.In Server Manager, select the Manage menu and then select &lt;strong&gt;Add Roles and Features&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxyggqdcf3u3nnmgnmkb1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxyggqdcf3u3nnmgnmkb1.png" alt="rolesnfeatures" width="632" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.On the Before you begin page of the Add Roles and Features wizard, click &lt;strong&gt;Next&lt;/strong&gt;.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foea3r99gwfpj88lux0le.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foea3r99gwfpj88lux0le.png" alt="role" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.On the Select installation type page, select &lt;strong&gt;Role-based or feature-based installation&lt;/strong&gt; and click &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwa88tv8xxj1ruae26z01.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwa88tv8xxj1ruae26z01.png" alt="role-based" width="800" height="566"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.On the Select destination server page, choose &lt;strong&gt;Select a server from the server pool&lt;/strong&gt;, ensure TAILWIND-MBR1 is selected and click &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6zhndn2x9fei31if44ad.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6zhndn2x9fei31if44ad.png" alt="next" width="800" height="574"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.On the Select server roles page, select the &lt;strong&gt;Active Directory Domain Services&lt;/strong&gt; checkbox.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faht2dlt9oulimzod34he.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faht2dlt9oulimzod34he.png" alt="ADDS" width="799" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This opens the &lt;strong&gt;Add features&lt;/strong&gt; page. Select Add Features. Click &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdh17efe2bdfx198tqn9m.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdh17efe2bdfx198tqn9m.png" alt="add features" width="799" height="566"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.On the Select features page, click &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm63l23qc5q57qxxyjh7b.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm63l23qc5q57qxxyjh7b.png" alt="next" width="799" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.On the Active Directory Domain Services page, click &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F59euny1b9mu1exab5fha.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F59euny1b9mu1exab5fha.png" alt="ADDS" width="800" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9.On the Confirm installation selections page, click &lt;strong&gt;Install&lt;/strong&gt;. Depending on the speed of the computer, installation may take several minutes. When the installation completes, click &lt;strong&gt;Close&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy01tip58y60h32u0wy9v.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy01tip58y60h32u0wy9v.png" alt="install" width="800" height="577"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvmlqr8ryjsaw2hep5ca8.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvmlqr8ryjsaw2hep5ca8.png" alt="close" width="800" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10.On the Server manager menu, select the notification icon next to the flag in the top right corner (as shown in the screenshot).&lt;/p&gt;

&lt;p&gt;11.On the menu that opens when you select the notification icon, select &lt;strong&gt;Promote this server to a domain controller&lt;/strong&gt;. This will start the Active Directory Domain Services Configuration Wizard.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F12cezk0lax7gz6lezetp.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F12cezk0lax7gz6lezetp.png" alt="icon" width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;12.On the Deployment Configuration page, select &lt;strong&gt;Add a domain controller to an existing domain and ensure that the domain&lt;/strong&gt; name is set to &lt;strong&gt;tailwindtraders.internal.&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2957uarabe1itbfeef1t.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2957uarabe1itbfeef1t.png" alt="DC" width="799" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;13.You must re-authenticate the administrator account. Select &lt;strong&gt;Change&lt;/strong&gt;. Enter &lt;code&gt;Administrator&lt;/code&gt; for the user name and &lt;code&gt;Pa55w.rdPa55w.rd&lt;/code&gt; for the password. Click &lt;strong&gt;OK&lt;/strong&gt;. Click &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnpdd98sr2oscgj2toh5z.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnpdd98sr2oscgj2toh5z.png" alt="change" width="799" height="453"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff1ibn2a9wch4dljuaa99.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff1ibn2a9wch4dljuaa99.png" alt="ok" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;14.On the Domain Controller options page, accept the default settings and provide the Directory Services Restore Mode (DSRM) password. To do this, enter the following password twice: &lt;code&gt;Pa55w.rdPa55w.rd&lt;/code&gt;. Click &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3z3cfkvftdvi2zb25vm1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3z3cfkvftdvi2zb25vm1.png" alt="next" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;15.On the DNS Options page, click &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn0x6zrf5matbcv5ryhy8.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn0x6zrf5matbcv5ryhy8.png" alt="next" width="799" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;16.On the Additional Options page, click &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdnyo78yxqryd5l8bsalw.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdnyo78yxqryd5l8bsalw.png" alt="next" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;17.On the Paths page, click &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxp9vbtxrao21cbl4p8t9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxp9vbtxrao21cbl4p8t9.png" alt="next" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;18.On the Review Options page, click &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqfd2l9hyv3ftcwg2xg7g.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqfd2l9hyv3ftcwg2xg7g.png" alt="next" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;19.On the Prerequisites Check page, click &lt;strong&gt;Install&lt;/strong&gt;. The installation will take several minutes depending on the speed of the virtual machine. The virtual machine will restart.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqg9w59nm16irw8px68b5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqg9w59nm16irw8px68b5.png" alt="install" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;20.When the virtual machine restarts, sign in as &lt;code&gt;tailwindtraders\administrator&lt;/code&gt; with the password you configured for the default administrator account &lt;code&gt;(Pa55w.rdPa55w.rd)&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Transfer Flexible Single Master Operations Roles
&lt;/h2&gt;

&lt;p&gt;In this task, you transfer the RID Master role from TAILWIND-DC1 to TAILWIND-MBR1. To complete this task, perform the following steps:&lt;/p&gt;

&lt;p&gt;1.On TAILWIND-MBR1, under &lt;strong&gt;Tools&lt;/strong&gt; open Active Directory Users and Computers.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb17s3hc42kdzp81ho96n.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb17s3hc42kdzp81ho96n.png" alt="tools" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.In the navigation pane, right-click Active Directory Users and Computers, point to &lt;strong&gt;All Tasks&lt;/strong&gt;, and then select &lt;strong&gt;Operations Masters&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fep5gcuq67dn0sp5qg7fm.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fep5gcuq67dn0sp5qg7fm.png" alt="users" width="800" height="545"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.On the RID tab, select &lt;strong&gt;Change&lt;/strong&gt;, select &lt;strong&gt;Yes&lt;/strong&gt;, and then click &lt;strong&gt;OK&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1hru6b38a1n4qovgx6py.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1hru6b38a1n4qovgx6py.png" alt="change" width="800" height="562"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkkyed7hqxuv5or4nb52f.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkkyed7hqxuv5or4nb52f.png" alt="yes" width="800" height="516"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv9tpqb2znmtkjvpmjfe2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv9tpqb2znmtkjvpmjfe2.png" alt="ok" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Click &lt;strong&gt;Close&lt;/strong&gt; to close the Operations Masters dialog box.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create an Active Directory site and configure a subnet for that site
&lt;/h2&gt;

&lt;p&gt;In this task, you create an Active Directory site and configure a subnet associated with that site. To complete this task, perform the following steps:&lt;/p&gt;

&lt;p&gt;1.On TAILWIND-DC1, sign in as &lt;code&gt;tailwindtraders\administrator&lt;/code&gt; with the password you configured for the default administrator account &lt;code&gt;(Pa55w.rdPa55w.rd)&lt;/code&gt;.&lt;br&gt;
2.Open Active Directory Sites and Services from the Tools menu.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgcpzyjwb2xqvyk7va4tq.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgcpzyjwb2xqvyk7va4tq.png" alt="sites" width="799" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Right-click Sites, select &lt;strong&gt;New site&lt;/strong&gt;, and type &lt;code&gt;Sydney&lt;/code&gt; as the site name.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz3lfuyt7uvtkqnsp5wgx.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz3lfuyt7uvtkqnsp5wgx.png" alt="new site" width="799" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.For the Link Name, select DEFAULTIPSITELINK and click &lt;strong&gt;OK&lt;/strong&gt; twice.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyri3heaxywsrzgh8g9we.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyri3heaxywsrzgh8g9we.png" alt="link" width="800" height="521"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn2kxqtin0fm8wq5inkws.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn2kxqtin0fm8wq5inkws.png" alt="ok" width="799" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Expand the &lt;strong&gt;Sites&lt;/strong&gt; folder.&lt;br&gt;
6.Right-click &lt;strong&gt;Subnets&lt;/strong&gt; and select &lt;strong&gt;New Subnet&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9qreljgsyanrmy1xpshi.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9qreljgsyanrmy1xpshi.png" alt="subnet" width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.As the Prefix, type &lt;code&gt;172.16.1.0/24&lt;/code&gt;, select &lt;strong&gt;Sydney&lt;/strong&gt; as site name and click &lt;strong&gt;OK&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr08ctxfxqcz8wg5sweh9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr08ctxfxqcz8wg5sweh9.png" alt="prefix" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.Close Active Directory Sites and Services.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;This exercise focused on expanding the Active Directory environment by promoting a member server to a domain controller.&lt;br&gt;
The RID Master FSMO role was transferred to the new domain controller to demonstrate role management.&lt;br&gt;
An Active Directory site named Sydney was also created to represent a network location.&lt;br&gt;
The 172.16.1.0/24 subnet was then associated with the Sydney site.&lt;br&gt;
Overall, the exercise provided practical experience with domain controller deployment, FSMO role administration, and Active Directory site configuration.&lt;/p&gt;

</description>
      <category>domaincontroller</category>
      <category>sysadmin</category>
      <category>activedirectory</category>
      <category>networking</category>
    </item>
    <item>
      <title>Strengthening Active Directory Security with NTLM Restrictions, Auditing, and Logon Controls</title>
      <dc:creator>Rahimah Sulayman</dc:creator>
      <pubDate>Tue, 15 Sep 2026 11:00:45 +0000</pubDate>
      <link>https://dev.to/rahimah_dev/strengthening-active-directory-security-with-ntlm-restrictions-auditing-and-logon-controls-4e9</link>
      <guid>https://dev.to/rahimah_dev/strengthening-active-directory-security-with-ntlm-restrictions-auditing-and-logon-controls-4e9</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In a modern organization, employees rely on centralized systems every day to access computers, applications, files, and other business resources. Behind these routine activities, Active Directory helps determine who can authenticate, what they can access, and how security events are controlled and recorded.&lt;/p&gt;

&lt;p&gt;In this hands-on exercise, I strengthened an Active Directory environment by applying targeted security controls through Group Policy. I restricted NTLM authentication, enabled auditing for user account management within the Sydney organizational unit, and configured logon restrictions for members of a security group.&lt;/p&gt;

&lt;p&gt;These configurations demonstrate how organizations can reduce legacy authentication risks, improve visibility into account-related changes, and enforce tighter access controls. The exercise provided practical experience translating security requirements into Windows Server and Active Directory policies that support a more secure and auditable enterprise environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;In this exercise, you configure settings related to security including disabling NTLM authentication for domain accounts, auditing account management activity, and denying log on as a service for members of a security group.&lt;/p&gt;

&lt;p&gt;This exercise should take approximately &lt;strong&gt;10&lt;/strong&gt; minutes to complete.&lt;/p&gt;

&lt;h2&gt;
  
  
  Restrict NTLM Authentication
&lt;/h2&gt;

&lt;p&gt;In this task, you restrict NTLM authentication. To complete this task, perform the following steps in TAILWIND-DC1:&lt;/p&gt;

&lt;p&gt;1.From the Tools menu of the Server Manager console, open the Group Policy Management console.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcy0x915zyv6p96g3quja.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcy0x915zyv6p96g3quja.png" alt="GPM" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.In the Group Policy Management console, expand the tailwindtraders.internal forest, the Domains folder, and the tailwindtraders.internal domain. Then expand Group Policy Objects.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpo2rc32hf8iv4iezqgyg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpo2rc32hf8iv4iezqgyg.png" alt="GPO" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Right-click &lt;strong&gt;Default Domain Controller Policy&lt;/strong&gt; and click &lt;strong&gt;Edit&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxjpygh890uvhyd1ky6ri.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxjpygh890uvhyd1ky6ri.png" alt="Controllerpolicy" width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Navigate to Computer Configuration\Policies\Windows Settings\Security Settings\Local Policies\Security Options.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyc7d9cr0t7osk4daea99.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyc7d9cr0t7osk4daea99.png" alt="securityopyions" width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Select and double-click &lt;strong&gt;Network security: Restrict NTLM: NTLM authentication in this domain&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzjoxgtpihj19jsvf73g2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzjoxgtpihj19jsvf73g2.png" alt="networksecurity" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Click the &lt;strong&gt;Define this policy setting&lt;/strong&gt; check box.&lt;br&gt;
7.Select the value &lt;strong&gt;Deny all&lt;/strong&gt; and click &lt;strong&gt;OK&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcwxplh9e4ik65a9c8lfc.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcwxplh9e4ik65a9c8lfc.png" alt="denyall" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.Click &lt;strong&gt;Yes&lt;/strong&gt; in the Confirm Setting Change dialog box.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdx8eqczb4n0mrls2n2k5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdx8eqczb4n0mrls2n2k5.png" alt="yes" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9.Close the Group Policy Management Editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Audit User Account Management in Sydney
&lt;/h2&gt;

&lt;p&gt;In this task, you enable auditing of User Account Management in the Sydney OU. To complete this task, perform the following steps in TAILWIND-DC1:&lt;/p&gt;

&lt;p&gt;1.From the Tools menu of the Server Manager console, choose Group Policy Management Console.&lt;br&gt;
2.In the Group Policy Management Console, expand the Tailwindtraders.internal domain.&lt;br&gt;
3.Navigate to the Sydney OU, right-click and select &lt;strong&gt;Create a GPO in this domain, and link it here….&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F62w1oujd9dd3hmg8r5we.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F62w1oujd9dd3hmg8r5we.png" alt="GPO" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Name the new GPO &lt;code&gt;SydneyOUPolicy&lt;/code&gt;.&lt;br&gt;
5.Click &lt;strong&gt;OK&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj14q72hgh3dqorw0x76j.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj14q72hgh3dqorw0x76j.png" alt="sydneypolicy" width="799" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Right-click SydneyOUPolicy and select &lt;strong&gt;Edit&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqezbcp28otrpo9nagce9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqezbcp28otrpo9nagce9.png" alt="SOUPolicy" width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Browse to Computer Configuration\Policies\Windows Settings\Security Settings\Advanced Audit Policy Configuration\Audit Policies\Account Management.&lt;br&gt;
8.Select and double-click &lt;strong&gt;Audit User account management&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9hm7wmuqoch9klmoglc3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9hm7wmuqoch9klmoglc3.png" alt="acctmgt" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9.Click the &lt;strong&gt;Configure the following audit events&lt;/strong&gt; check box.&lt;br&gt;
10.Select the &lt;strong&gt;Success&lt;/strong&gt; and &lt;strong&gt;Failure&lt;/strong&gt; values and click &lt;strong&gt;OK&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0o6q4csbgn163k7a9zj6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0o6q4csbgn163k7a9zj6.png" alt="auditevents" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11.Close the Group Policy Management Editor&lt;/p&gt;

&lt;h2&gt;
  
  
  Deny Log On As a Service
&lt;/h2&gt;

&lt;p&gt;In this task, you configure the Deny Log On As A Service security option. To complete this task, perform the following steps in TAILWIND-DC1:&lt;/p&gt;

&lt;p&gt;1.From the Tools menu of the Server Manager console, open the Group Policy Management console.&lt;br&gt;
2.Expand Tailwindtraders.internal domain.&lt;br&gt;
3.Browse to the Sydney OU and right-click SydneyOUPolicy. Select &lt;strong&gt;Edit&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3phukmpy10xlucangkel.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3phukmpy10xlucangkel.png" alt="sydneyOU" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Browse to Computer Configuration\Policies\Windows Settings\Security Settings\Local Policies\User Rights Assignment.&lt;br&gt;
5.Select and double-click the &lt;strong&gt;Deny Log on as a service&lt;/strong&gt; policy.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fik4gw5rb4vr9heoulgmy.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fik4gw5rb4vr9heoulgmy.png" alt="deny" width="800" height="581"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Select the &lt;strong&gt;Define this policy&lt;/strong&gt; setting.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbmilgfr5rx98bkjxr5ck.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbmilgfr5rx98bkjxr5ck.png" alt="policy" width="799" height="589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Click &lt;strong&gt;Add User or Group&lt;/strong&gt;.&lt;br&gt;
8.Click &lt;strong&gt;Browse&lt;/strong&gt;, click &lt;strong&gt;Advanced&lt;/strong&gt;, and then click &lt;strong&gt;Find now&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fenpy14976ovzeq5xlvnc.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fenpy14976ovzeq5xlvnc.png" alt="adduser" width="800" height="590"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkgjidvuyqse47d1j8blx.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkgjidvuyqse47d1j8blx.png" alt="adv" width="799" height="592"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyonklue2i3fy6e2vlz1n.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyonklue2i3fy6e2vlz1n.png" alt="findnow" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9.Select &lt;strong&gt;Sydney Administrators&lt;/strong&gt; group.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl8qneeg1srdmlwvnnfdm.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl8qneeg1srdmlwvnnfdm.png" alt="addgrp" width="800" height="609"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10.Click &lt;strong&gt;OK&lt;/strong&gt; until dialogue boxes are closed (it may require four or five acknowledgements).&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbz2qy27taien3z70ybsa.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbz2qy27taien3z70ybsa.png" alt="ok" width="800" height="589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This exercise demonstrated how Group Policy can be used to implement practical security controls across an Active Directory environment. By restricting NTLM authentication, I strengthened authentication security and reduced reliance on legacy protocols. Enabling successful and failed user account management auditing improved visibility into account-related activity within the Sydney OU. Finally, configuring Deny log on as a service for the Sydney Administrators group reinforced least-privilege access and reduced unnecessary service logon exposure.&lt;/p&gt;

&lt;p&gt;Overall, the exercise provided valuable hands-on experience in Active Directory security hardening, auditing, authentication control, and Group Policy administration, these are key skills for managing secure Windows Server environments.&lt;/p&gt;

</description>
      <category>sysadmin</category>
      <category>grouppolicy</category>
      <category>identity</category>
      <category>activedirectory</category>
    </item>
    <item>
      <title>Securing Active Directory with Password Policies and Recycle Bin</title>
      <dc:creator>Rahimah Sulayman</dc:creator>
      <pubDate>Mon, 14 Sep 2026 16:35:49 +0000</pubDate>
      <link>https://dev.to/rahimah_dev/securing-active-directory-with-password-policies-and-recycle-bin-fpm</link>
      <guid>https://dev.to/rahimah_dev/securing-active-directory-with-password-policies-and-recycle-bin-fpm</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Strong Active Directory environments require more than creating users,they require deliberate security controls.&lt;br&gt;
In this hands-on project, I strengthened domain security through practical Group Policy and Active Directory administration.&lt;br&gt;
I configured a 14-character minimum password policy across the domain.&lt;br&gt;
I then implemented a stricter 16-character fine-grained password policy specifically for Domain Admins.&lt;br&gt;
This demonstrates how security requirements can be tailored according to administrative privilege levels.&lt;br&gt;
I also enabled the Active Directory Recycle Bin to provide recovery capability for deleted directory objects.&lt;br&gt;
These configurations reflect practical measures used to improve identity security, access control, and administrative resilience.&lt;br&gt;
Together, the exercise demonstrates my ability to translate security requirements into practical Windows Server and Active Directory controls.&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;In this exercise, you configure group policy items related to password policies. This includes configuring the domain password policy, creating a stricter password policy for the Domain Admins group, and enabling the Active Directory Recycle Bin.&lt;/p&gt;

&lt;p&gt;This exercise should take approximately &lt;strong&gt;10&lt;/strong&gt; minutes to complete.&lt;/p&gt;

&lt;h1&gt;
  
  
  Configure Domain Password Policy
&lt;/h1&gt;

&lt;p&gt;In this task, you configure the domain password policy. To complete this task, perform the following steps:&lt;/p&gt;

&lt;p&gt;1.In TAILWIND-DC1, from the Tools menu of the Server Manager console, open the Group Policy Management console.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9y21mlqaxad8xs0o5fw5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9y21mlqaxad8xs0o5fw5.png" alt="GPM" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.In the Group Policy Management console, expand the tailwindtraders.internal forest, the Domains folder, and the tailwindtraders.internal domain.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjs54ga2lso24a9id1yqo.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjs54ga2lso24a9id1yqo.png" alt="expand" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Right-click &lt;strong&gt;Default Domain Policy&lt;/strong&gt; and click &lt;strong&gt;Edit.&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6zgo792i1uhsysrwuoz7.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6zgo792i1uhsysrwuoz7.png" alt=" " width="800" height="445"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fszy0s3yt5ittcpdrowfx.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fszy0s3yt5ittcpdrowfx.png" alt="policy" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.In the Group Policy Management Editor, navigate to Computer Configuration\Policies\Windows Settings\Security Settings\Account Policies\Password Policy.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5mfdh1ihfwjeck5rowrk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5mfdh1ihfwjeck5rowrk.png" alt="passwdpolicy" width="800" height="471"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Double click the &lt;strong&gt;Minimum password length&lt;/strong&gt; policy item.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnvncmlj4dxcnyv8qmmak.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnvncmlj4dxcnyv8qmmak.png" alt="minimumpolicy" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Change the minimum number of characters to 14.&lt;br&gt;
7.Click &lt;strong&gt;Ok&lt;/strong&gt;, and then close the Group Policy Management Editor window.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffa563k5l2f9l1s6gjv3i.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffa563k5l2f9l1s6gjv3i.png" alt="setpasswd" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.Close the Group Policy Management console.&lt;/p&gt;

&lt;h1&gt;
  
  
  Configure Fine-Grained Password Policy
&lt;/h1&gt;

&lt;p&gt;In this task, you configure a fine-grained password policy and apply it to the Domain Admins group. To complete this task, perform the following steps in TAILWIND-DC1:&lt;/p&gt;

&lt;p&gt;1.From the Tools menu of the Server Manager console, open Active Directory Administrative Center.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvyy8datbcabla0z3qb7e.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvyy8datbcabla0z3qb7e.png" alt="admincentre" width="799" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Under Overview, Click &lt;strong&gt;Tailwindtraders (local)&lt;/strong&gt;.&lt;br&gt;
3.In the tailwindtraders (local) pane, open the System container.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4ko5k5lhsj60ff7q2424.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4ko5k5lhsj60ff7q2424.png" alt="syscontainer" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.In the System container, open the Password Settings Container.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw22nd2t4c8vdahozbvtu.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw22nd2t4c8vdahozbvtu.png" alt="passwdsettingscontainer" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Click the Password Settings Container, click &lt;strong&gt;New&lt;/strong&gt;, and then click &lt;strong&gt;Password Settings.&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F43xw1cm1vdr2kf2cdess.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F43xw1cm1vdr2kf2cdess.png" alt="newpasswdsetting" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.In the Name field, type &lt;code&gt;Domain Admin Password Policy&lt;/code&gt;.&lt;br&gt;
7.Set the Precedence field to &lt;code&gt;1&lt;/code&gt;.&lt;br&gt;
8.Set minimum password length to &lt;code&gt;16&lt;/code&gt;.&lt;br&gt;
9.Click &lt;strong&gt;OK&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ki6vstukoiqc4d45ygf.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ki6vstukoiqc4d45ygf.png" alt="passwdlen" width="799" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10.Open the new policy &lt;strong&gt;Domain Admins Password Policy&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw1hnfj7bd058ljmw66ei.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw1hnfj7bd058ljmw66ei.png" alt="policy" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11.In the Directly Applies to section, click &lt;strong&gt;Add&lt;/strong&gt;, then type &lt;code&gt;Domain Admins&lt;/code&gt;. Click &lt;strong&gt;Check Names&lt;/strong&gt; and click &lt;strong&gt;OK&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnw83iptdktcqf61g376d.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnw83iptdktcqf61g376d.png" alt="addtopolicy" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;12.Click &lt;strong&gt;OK&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F55dgc168npgpc75xkk1n.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F55dgc168npgpc75xkk1n.png" alt="ok" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Enable Active Directory Recycle Bin
&lt;/h1&gt;

&lt;p&gt;In this task, you enable the Active Directory Recycle Bin. To complete this task, perform the following steps in TAILWIND-DC1:&lt;/p&gt;

&lt;p&gt;1.From the Tools menu of the Server Manager console, open Active Directory Administrative Center.&lt;br&gt;
2.Click &lt;strong&gt;Tailwindtraders (local)&lt;/strong&gt; in the left pane.&lt;br&gt;
3.In the right pane, select &lt;strong&gt;Enable Recycle Bin&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdpudu7o7p9w2eqn8zcrn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdpudu7o7p9w2eqn8zcrn.png" alt="recyclebin" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Click &lt;strong&gt;OK&lt;/strong&gt; to dismiss the warning.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcu4ec843bwwfbp6dkdo0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcu4ec843bwwfbp6dkdo0.png" alt="ok" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Click &lt;strong&gt;OK&lt;/strong&gt; to dismiss the warning about replication latency.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flna5vsapg08y5gpcrb8v.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flna5vsapg08y5gpcrb8v.png" alt="ok" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Summary
&lt;/h2&gt;

&lt;p&gt;The exercise resulted in three key Active Directory security configurations.&lt;br&gt;
The domain-wide password requirement was updated to 14 characters through the Default Domain Policy.&lt;br&gt;
A separate Fine-Grained Password Policy named Domain Admin Password Policy was created with a precedence of 1.&lt;br&gt;
The Domain Admins group was assigned the stricter policy with a 16-character minimum password length.&lt;br&gt;
The configuration demonstrated the ability to apply different password requirements to specific security groups.&lt;br&gt;
The Active Directory Recycle Bin was also enabled from Active Directory Administrative Center.&lt;br&gt;
These changes produced a more structured approach to password enforcement and directory-object recovery.&lt;br&gt;
The completed configuration provides a practical record of Active Directory security policy administration.&lt;/p&gt;

</description>
      <category>ppasswordsecurity</category>
      <category>activedirectory</category>
      <category>sysadmin</category>
      <category>windowsserver</category>
    </item>
    <item>
      <title>Administering Active Directory Users, Groups, and Organizational Units</title>
      <dc:creator>Rahimah Sulayman</dc:creator>
      <pubDate>Mon, 14 Sep 2026 15:12:55 +0000</pubDate>
      <link>https://dev.to/rahimah_dev/administering-active-directory-users-groups-and-organizational-units-1b60</link>
      <guid>https://dev.to/rahimah_dev/administering-active-directory-users-groups-and-organizational-units-1b60</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Active Directory is at the heart of centralized identity and access management in many Windows Server environments.&lt;br&gt;
In this hands-on project, I moved beyond theory to perform practical Active Directory administration tasks.&lt;br&gt;
I created and structured Organizational Units (OUs) for Sydney, Melbourne, and Brisbane to organize users effectively.&lt;br&gt;
I created and managed user accounts while configuring important account properties such as expiration dates.&lt;br&gt;
I implemented security groups and assigned users to appropriate groups to support controlled administration.&lt;br&gt;
I configured a user as a member of Protected Users and explored practical account-security controls.&lt;br&gt;
I also practiced delegating password-reset permissions, managing user attributes, disabling accounts, and resetting passwords.&lt;br&gt;
Together, these exercises demonstrate practical skills relevant to enterprise identity management, system administration, and secure Windows Server environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;In this exercise, you perform user management operations.&lt;/p&gt;

&lt;p&gt;This exercise should take approximately &lt;strong&gt;25&lt;/strong&gt; minutes to complete.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create Organizational Units
&lt;/h2&gt;

&lt;p&gt;In this task, you create three OUs: Sydney, Melbourne, and Brisbane. To complete this task, perform the following steps:&lt;/p&gt;

&lt;p&gt;1.In TAILWIND-DC1, open Active Directory Users and Computers from the Tools menu of the Server Manager console.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftleauuwb09ujdpgd6w45.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftleauuwb09ujdpgd6w45.png" alt="activeusersncomputers" width="799" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.Right-click on the &lt;strong&gt;tailwindtraders.internal&lt;/strong&gt; domain.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F67q25vc650z4oox1k62w.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F67q25vc650z4oox1k62w.png" alt="tw" width="799" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Select &lt;strong&gt;New&lt;/strong&gt;, then &lt;strong&gt;Organizational Unit&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2uc8lmz0og1dr7sp908e.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2uc8lmz0og1dr7sp908e.png" alt="newou" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.In the New Object - Organizational Unit dialog box, set the name to &lt;code&gt;Sydney&lt;/code&gt; and click &lt;strong&gt;OK&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffs8po8q1twsn03zishfr.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffs8po8q1twsn03zishfr.png" alt="sydney" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Repeat this process to create the &lt;code&gt;Melbourne&lt;/code&gt; OU and the &lt;code&gt;Brisbane&lt;/code&gt; OU.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi4jzvb58ffariosi5pqu.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi4jzvb58ffariosi5pqu.png" alt="3OUs" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Create users
&lt;/h2&gt;

&lt;p&gt;In this task, you create a user and configure account properties such as Account Expiration Date. To complete this task, perform the following steps:&lt;/p&gt;

&lt;p&gt;1.In TAILWIND-DC1, open Active Directory Users and Computers (or Administrative Center).&lt;br&gt;
2.Right-click on the Sydney OU.&lt;br&gt;
3.Select &lt;strong&gt;New&lt;/strong&gt;, then &lt;strong&gt;User&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzq7jd629g6sexwah7zs0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzq7jd629g6sexwah7zs0.png" alt="newuser" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Type &lt;code&gt;SydneyContractor&lt;/code&gt; in the Full name and User Logon name fields and click &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ftx85vtdwjc9cjvlyxf.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ftx85vtdwjc9cjvlyxf.png" alt="sydneycontr" width="799" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Specify a password, such as &lt;code&gt;Pa55w.rdPa55w.rd&lt;/code&gt;, and then confirm the password.&lt;br&gt;
6.Click &lt;strong&gt;Next&lt;/strong&gt; and &lt;strong&gt;Finish&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgoofkvvwepun5f8j6b6e.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgoofkvvwepun5f8j6b6e.png" alt="passwd" width="799" height="455"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9i0y663p2fsd03zocawt.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9i0y663p2fsd03zocawt.png" alt="finish" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Select the Sydney OU. In the Sydney OU, double-click the SydneyContractor user account.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0dmb9ug5bhf7bnmvu942.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0dmb9ug5bhf7bnmvu942.png" alt="sydneyou" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.In the Account tab, in the &lt;strong&gt;Account expires&lt;/strong&gt; section, select &lt;strong&gt;End of&lt;/strong&gt;: and set the date to &lt;strong&gt;Jan 1, 2030&lt;/strong&gt;. Click OK.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi4xn0bg1tejilwa2ss4r.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi4xn0bg1tejilwa2ss4r.png" alt="endof" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9.Right-click the SydneyContractor user and select &lt;strong&gt;Copy&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe9lul97504jga08j4yko.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe9lul97504jga08j4yko.png" alt="copy" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10.Type &lt;code&gt;MelbourneContractor&lt;/code&gt; in the Full name and User Logon name fields. Click &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flf7dgr70hlxcp34udf3h.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flf7dgr70hlxcp34udf3h.png" alt="melbournecontr" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11.Specify a password, such as &lt;code&gt;Pa55w.rdPa55w.rd&lt;/code&gt; and then confirm the password.&lt;br&gt;
12.Click &lt;strong&gt;Next&lt;/strong&gt; and &lt;strong&gt;Finish&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fld97pleu0ktn9mjg6had.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fld97pleu0ktn9mjg6had.png" alt="passwd" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;13.Right-click the SydneyContractor user and select &lt;strong&gt;Copy&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvv04bnkbdx2zc1gm32b9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvv04bnkbdx2zc1gm32b9.png" alt="copy" width="799" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;14.Type &lt;code&gt;BrisbaneContractor&lt;/code&gt; in the Full name and User Logon name fields. Click &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw4gzyj86d26bp0g9kc1v.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw4gzyj86d26bp0g9kc1v.png" alt="brosbanecntr" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;15.Specify a password such as &lt;code&gt;Pa55w.rdPa55w.rd&lt;/code&gt; and then confirm the password.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvpvilxp7b7ndxwf1zjp2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvpvilxp7b7ndxwf1zjp2.png" alt="passwd" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;16.Click &lt;strong&gt;Next&lt;/strong&gt; and &lt;strong&gt;Finish&lt;/strong&gt;.&lt;br&gt;
17.Drag the MelbourneContractor user to the Melbourne OU.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7bb2qo8dedzmu6mp0pp9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7bb2qo8dedzmu6mp0pp9.png" alt="drag" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;18.If a warning about mooving objects appears, click &lt;strong&gt;Yes&lt;/strong&gt;.&lt;br&gt;
19.Drag the BrisbaneContractor user to the Brisbane OU.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw0svvgz6e4ft4ih1slm7.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw0svvgz6e4ft4ih1slm7.png" alt="drag" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;20.If a warning about mooving objects appears, click &lt;strong&gt;Yes&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create the Sydney Admins group
&lt;/h2&gt;

&lt;p&gt;In this task, you create a new security group named Sydney Administrators. To complete this task, perform the following steps:&lt;/p&gt;

&lt;p&gt;1.In TAILWIND-DC1, open Active Directory Users and Computers.&lt;br&gt;
2.Right click the Sydney OU, and select &lt;strong&gt;New&lt;/strong&gt;, then &lt;strong&gt;Group&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9jupaotgm1j4iprg2lq2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9jupaotgm1j4iprg2lq2.png" alt="newgroup" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Type &lt;code&gt;Sydney Administrators&lt;/code&gt; in Group name and select &lt;strong&gt;Universal&lt;/strong&gt; in group scope. Click &lt;strong&gt;OK&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7sjjqkcnijmbzs2ks761.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7sjjqkcnijmbzs2ks761.png" alt="sydad" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.In the Sydney OU, double-click the SydneyContractor User account.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq6twzm7vrpc2g965zpui.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq6twzm7vrpc2g965zpui.png" alt="sydneycontr" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.In the Member Of tab, click &lt;strong&gt;Add&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwqfns7qsmlelarb4bzme.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwqfns7qsmlelarb4bzme.png" alt="memberof" width="799" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Type &lt;code&gt;Sydney Administrators&lt;/code&gt;.&lt;br&gt;
7.Click &lt;strong&gt;Check Names&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8p2706wbe1l2tx7vqpp9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8p2706wbe1l2tx7vqpp9.png" alt="checknames" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.Click &lt;strong&gt;OK&lt;/strong&gt;, then click &lt;strong&gt;OK&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure a user as a Protected User
&lt;/h2&gt;

&lt;p&gt;In this task, you configure the SydneyContractor user account as a protected user. To complete this task, perform the following steps:&lt;/p&gt;

&lt;p&gt;1.In TAILWIND-DC1, open Active Directory Users and Computers (or Administrative Center).&lt;br&gt;
2.Navigate to the Sydney OU and double-click the SydneyContractor User account.&lt;br&gt;
3.In the Member Of tab, click &lt;strong&gt;Add&lt;/strong&gt;.&lt;br&gt;
4.Type &lt;code&gt;Protected Users&lt;/code&gt;.&lt;br&gt;
5.Click &lt;strong&gt;Check Names&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flwwalrerb7ylgvuhi4xc.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flwwalrerb7ylgvuhi4xc.png" alt="protectedusers" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Click &lt;strong&gt;OK&lt;/strong&gt;, then click &lt;strong&gt;OK&lt;/strong&gt;.&lt;br&gt;
Then you can verify.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi29b8363uge8kh4pks1d.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi29b8363uge8kh4pks1d.png" alt="verify" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Delegate Security Permissions to an OU to a security group
&lt;/h2&gt;

&lt;p&gt;In this task, you delegate the ability to reset passwords and force password change to the Sydney Administrators group over accounts in the Sydney OU. To complete this task, perform the following steps:&lt;/p&gt;

&lt;p&gt;1.In TAILWIND-DC1, open Active Directory Users and Computers.&lt;br&gt;
2.Right-click the Sydney OU and click &lt;strong&gt;Delegate Control&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frsg8r0e2eb7erxyfhcbv.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frsg8r0e2eb7erxyfhcbv.png" alt="delegatecontrl" width="800" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.On the Welcome page of the Delegation of Control Wizard, click &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feeewl52v63bkvcapn19e.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feeewl52v63bkvcapn19e.png" alt="wiz" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Click &lt;strong&gt;Add&lt;/strong&gt; and type &lt;code&gt;Sydney Administrators&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm4rh2fu84ewqxzwakca1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm4rh2fu84ewqxzwakca1.png" alt="add" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Click &lt;strong&gt;Check Names&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvuffy2te8pa6cdafl1d0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvuffy2te8pa6cdafl1d0.png" alt="checknames" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Click &lt;strong&gt;OK&lt;/strong&gt; and click &lt;strong&gt;Next&lt;/strong&gt;.&lt;br&gt;
7.On the Tasks to Delegate page, select the &lt;strong&gt;Reset user passwords and force password change at next logon&lt;/strong&gt; option. Click &lt;strong&gt;Next&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftgsp4u7cg56z3t0gsmjd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftgsp4u7cg56z3t0gsmjd.png" alt="resetuserpswd" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.Click &lt;strong&gt;Finish&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F330hwgmp883t985jnngk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F330hwgmp883t985jnngk.png" alt="finish" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure City Attribute for a User
&lt;/h2&gt;

&lt;p&gt;In this task, you configure a city attribute for a user account and then use the Find attribute to verify that the user is present. To complete this task, perform the following steps:&lt;/p&gt;

&lt;p&gt;1.In TAILWIND-DC1, open Active Directory Users and Computers.&lt;br&gt;
2.Select the Sydney OU, right-click the SydneyContractor user account, and click &lt;strong&gt;Properties&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6llqzbiiu30c0tiuisvk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6llqzbiiu30c0tiuisvk.png" alt="ppts" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.In the Address tab of the Sydney Contractor properties, set the City field to &lt;code&gt;Sydney&lt;/code&gt; and click &lt;strong&gt;OK&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhrbjfbnzife0x5wybuv3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhrbjfbnzife0x5wybuv3.png" alt="city" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.In Active Directory Users and Computers, right-click Tailwindtrader.internal and click &lt;strong&gt;Find&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuinhj5q8oxaxkci93ops.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuinhj5q8oxaxkci93ops.png" alt="find" width="799" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.In the Advanced tab of the Find Users, Contacts, and Groups dialog box, select &lt;strong&gt;Field&lt;/strong&gt;, then &lt;strong&gt;User&lt;/strong&gt;, then &lt;strong&gt;City&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi4mkt88e4h6dfbavax77.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi4mkt88e4h6dfbavax77.png" alt="city" width="800" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set Condition to &lt;strong&gt;Is (exactly)&lt;/strong&gt;. Set Value to &lt;strong&gt;Sydney&lt;/strong&gt;. Click &lt;strong&gt;Find Now&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flcdsyp3wg0wxwq71oc3b.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flcdsyp3wg0wxwq71oc3b.png" alt="findnow" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.Click &lt;strong&gt;Yes&lt;/strong&gt; on the Find in the Directory pop-up.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvuxn2jeu5l0ymo64va0j.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvuxn2jeu5l0ymo64va0j.png" alt="yes" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.Verify that user SydneyContractor is listed in the &lt;strong&gt;Search results&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fapri41cecqbq0f9k02bp.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fapri41cecqbq0f9k02bp.png" alt="verify" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.Close the Find Users, Contacts, and Groups dialog box.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disable the Melbourne Contractor User
&lt;/h2&gt;

&lt;p&gt;In this task, you disable the Melbourne Contractor user. To complete this task, perform the following steps:&lt;/p&gt;

&lt;p&gt;1.In TAILWIND-DC1, open Active Directory Users and Computers, and then open the Melbourne OU.&lt;br&gt;
2.In the Melbourne OU, right-click &lt;strong&gt;MelbourneContractor&lt;/strong&gt; and click &lt;strong&gt;Disable Account&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwu169iw6whjigv8ofzt4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwu169iw6whjigv8ofzt4.png" alt="disable" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Click &lt;strong&gt;OK&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F620kpmb7ogvms4ghsfeo.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F620kpmb7ogvms4ghsfeo.png" alt="ok" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Reset the password of the Brisbane Contractor User
&lt;/h2&gt;

&lt;p&gt;In this task, you reset the password of the BrisbaneContractor user. To complete this task, perform the following steps:&lt;/p&gt;

&lt;p&gt;1.In TAILWIND-DC1, open Active Directory Users and Computers, and then open the Brisbane OU.&lt;br&gt;
2.Right-click the BrisbaneContractor user and select &lt;strong&gt;Reset Password&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fol4oond5inv1urcalq79.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fol4oond5inv1urcalq79.png" alt="resetpwd" width="799" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.On the Reset Password dialog box, type the password &lt;code&gt;Pa66w.rdPa66w.rd&lt;/code&gt; twice and select &lt;strong&gt;OK&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo45399rcj727o0ag3ahg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo45399rcj727o0ag3ahg.png" alt="passwd" width="799" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;OK&lt;/strong&gt; again in the dialog that notifies you that the password has been changed.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9dmzvbo8ic2thjhvmut6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9dmzvbo8ic2thjhvmut6.png" alt="ok" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Summary
&lt;/h2&gt;

&lt;p&gt;This project provides hands-on experience administering Active Directory Domain Services in a Windows Server environment.&lt;br&gt;
It covers creating and organizing Organizational Units, managing user accounts, and configuring account properties.&lt;br&gt;
Security groups were created to support structured access and administration.&lt;br&gt;
The project also demonstrates Protected Users, delegated password-reset permissions, and user attribute management.&lt;br&gt;
Additional tasks included disabling user accounts and resetting passwords.&lt;br&gt;
Overall, the project demonstrates practical identity management, security, and Windows Server administration skills relevant to enterprise IT environments.&lt;/p&gt;

</description>
      <category>sysadmin</category>
      <category>activedirectory</category>
      <category>windowsserver</category>
      <category>identity</category>
    </item>
  </channel>
</rss>
