<?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: Sristi Acharya</title>
    <description>The latest articles on DEV Community by Sristi Acharya (@sristi_acharya).</description>
    <link>https://dev.to/sristi_acharya</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%2F3969402%2Fa3fd27c2-c073-41fa-a020-7826421e8075.jpg</url>
      <title>DEV Community: Sristi Acharya</title>
      <link>https://dev.to/sristi_acharya</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sristi_acharya"/>
    <language>en</language>
    <item>
      <title>I Thought Agentic AI and AI Agents Were the Same Thing. They Are Not</title>
      <dc:creator>Sristi Acharya</dc:creator>
      <pubDate>Sat, 01 Aug 2026 14:15:15 +0000</pubDate>
      <link>https://dev.to/sristi_acharya/i-thought-agentic-ai-and-ai-agents-were-the-same-thing-they-are-not-1ban</link>
      <guid>https://dev.to/sristi_acharya/i-thought-agentic-ai-and-ai-agents-were-the-same-thing-they-are-not-1ban</guid>
      <description>&lt;p&gt;People use these two terms like they mean the same thing. They don't. And once you see the difference, it's hard to unsee it.&lt;/p&gt;

&lt;p&gt;Here's the simplest way to think about it. Agentic AI is a skill, the ability to act on its own. An AI Agent is a worker, a system built with that skill and given a specific job. That's really the whole thing, but let's go a bit deeper.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Agentic AI?
&lt;/h2&gt;

&lt;p&gt;Normal AI waits for you. You ask, it answers, done. You ask again, it answers again. Every interaction is separate.&lt;/p&gt;

&lt;p&gt;Agentic AI doesn't work that way. You give it a goal and it figures out the steps, takes action, checks if it worked, and keeps going until it's done. No hand holding required.&lt;/p&gt;

&lt;p&gt;Think of it like asking a colleague to handle onboarding for a new hire. You don't walk them through every single step. You just say "handle it" and they do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real example: GitHub Copilot Workspace&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You tell it to add a login feature to your app. It reads your entire codebase, writes the code across multiple files, runs the tests, sees what broke, and fixes it. You didn't do anything in between. That's agentic behaviour.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is an AI Agent?
&lt;/h2&gt;

&lt;p&gt;An AI Agent is an actual deployed system. Something with a name, a job, and tools to do that job. It's not just a behaviour, it's a thing you can point to and say "that's our support agent" or "that's our research agent."&lt;/p&gt;

&lt;p&gt;Every AI Agent is agentic. But not everything agentic is an agent. The difference is whether there's a specific, deployed system doing the work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real example: Klarna's Customer Support Agent&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Klarna built an AI agent whose whole job is handling customer support. It can look up your order, process a refund, update your address, all in one conversation. It has a defined role and real access to Klarna's systems. That's an agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  One More Example of Each
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Agentic AI: Salesforce Einstein&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Einstein watches your sales pipeline, spots deals that look risky, writes follow up emails, and schedules them. Nobody tells it to write the email. It just does the whole thing start to finish. That's agentic behaviour baked into a product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI Agent: Amazon Rufus&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rufus is Amazon's shopping agent. Ask it what's a good camera for travel and it checks your past purchases, compares current listings, looks at availability, and gives you a personalised answer. It has one job: help you shop.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Simple Version
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Agentic AI&lt;/th&gt;
&lt;th&gt;AI Agent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What it is&lt;/td&gt;
&lt;td&gt;A behaviour or capability&lt;/td&gt;
&lt;td&gt;A deployed system with a job&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Think of it as&lt;/td&gt;
&lt;td&gt;How something acts&lt;/td&gt;
&lt;td&gt;What something is&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Example&lt;/td&gt;
&lt;td&gt;Copilot fixing code on its own&lt;/td&gt;
&lt;td&gt;Klarna's support bot&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When to Use Which Term
&lt;/h2&gt;

&lt;p&gt;Say "Agentic AI" when you're describing how a system behaves, that it can plan, act, and correct itself without someone guiding every step.&lt;/p&gt;

&lt;p&gt;Say "AI Agent" when you're talking about a specific system that has a role, tools, and a scope, like a support agent, a coding agent, or a research agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does This Matter?
&lt;/h2&gt;

&lt;p&gt;Because when you're building with AI, these two things lead to very different questions.&lt;/p&gt;

&lt;p&gt;Agentic AI makes you ask how much autonomy you want to give the system.&lt;/p&gt;

&lt;p&gt;An AI Agent makes you ask what it can access, what actions it can take, and who's responsible if it gets something wrong.&lt;/p&gt;

&lt;p&gt;An agent that processes real refunds or pushes code to production is operating in the real world. That's a bigger deal than smart autocomplete.&lt;/p&gt;

&lt;p&gt;Get these concepts right early and a lot of other things about how AI systems are designed start to make sense pretty quickly.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
    </item>
    <item>
      <title>Managing Permissions with AWS IAM. Here's What I Learnt</title>
      <dc:creator>Sristi Acharya</dc:creator>
      <pubDate>Fri, 05 Jun 2026 09:31:54 +0000</pubDate>
      <link>https://dev.to/sristi_acharya/managing-permissions-with-aws-iam-heres-what-i-learnt-2hfd</link>
      <guid>https://dev.to/sristi_acharya/managing-permissions-with-aws-iam-heres-what-i-learnt-2hfd</guid>
      <description>&lt;p&gt;So I recently worked on a project where I had to set up and manage permissions using AWS IAM, and honestly? It was one of those things that sounds intimidating at first but starts to click once you actually get your hands dirty with it.&lt;/p&gt;

&lt;p&gt;In this post, I'll walk you through exactly what I did, setting up policies, creating users and groups, tagging EC2 instances, and testing whether the permissions actually worked. Let's get into it.&lt;/p&gt;

&lt;h2&gt;
  
  
  First Things First, What Even Is AWS IAM?
&lt;/h2&gt;

&lt;p&gt;IAM stands for &lt;strong&gt;Identity and Access Management&lt;/strong&gt;. It's a web service from AWS that lets you control who can access what in your AWS account.&lt;/p&gt;

&lt;p&gt;Think of it like this: you're the admin of an office building. Some people should be able to enter every room, some only specific ones, and some shouldn't get past the lobby. IAM is basically your access-card system; you decide who gets in and where, and you can change that at any time.&lt;/p&gt;

&lt;p&gt;For this project, I used IAM to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create EC2 instances&lt;/li&gt;
&lt;li&gt;Manage users and groups&lt;/li&gt;
&lt;li&gt;Assign permissions to allow or deny access to resources&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setting Up EC2 Instances with Tags
&lt;/h2&gt;

&lt;p&gt;Before touching IAM, I spun up two EC2 instances to use as test subjects. One for &lt;strong&gt;production&lt;/strong&gt;, one for &lt;strong&gt;development&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To tell them apart (and to make the IAM policy work properly), I tagged them. Tags in AWS are key-value labels you attach to resources. They're useful for organising things, tracking costs, and, in our case, building conditions into policies.&lt;/p&gt;

&lt;p&gt;The tag I used was &lt;code&gt;Env&lt;/code&gt;, and I gave each instance a different value:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Instance&lt;/th&gt;
&lt;th&gt;Tag Key&lt;/th&gt;
&lt;th&gt;Tag Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;project-production-sristi&lt;/td&gt;
&lt;td&gt;Env&lt;/td&gt;
&lt;td&gt;production&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;project-development-sristi&lt;/td&gt;
&lt;td&gt;Env&lt;/td&gt;
&lt;td&gt;development&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.amazonaws.com%2Fuploads%2Farticles%2Fyltxc48fjz9rg95wcttl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyltxc48fjz9rg95wcttl.png" alt="Setting Up EC2 Instances with Tags" width="800" height="156"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Simple, but this small detail becomes really important when we write the policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writing the IAM Policy
&lt;/h2&gt;

&lt;p&gt;This is where things get interesting. An &lt;strong&gt;IAM Policy&lt;/strong&gt; is a set of rules written in JSON that tells AWS what actions are allowed or denied, on which resources, and under what conditions.&lt;/p&gt;

&lt;p&gt;Here's the policy I wrote:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ec2:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"StringEquals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"ec2:ResourceTag/Env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"development"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ec2:Describe*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Deny"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"ec2:DeleteTags"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"ec2:CreateTags"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let me break down what each part does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Statement 1&lt;/strong&gt; — Allows all EC2 actions (&lt;code&gt;ec2:*&lt;/code&gt;), but &lt;em&gt;only&lt;/em&gt; on instances where the &lt;code&gt;Env&lt;/code&gt; tag equals &lt;code&gt;development&lt;/code&gt;. So anything tagged as production? Off limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Statement 2&lt;/strong&gt; — Allows the user to describe (basically, view) EC2 resources. Without this, the user wouldn't even be able to see what instances exist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Statement 3&lt;/strong&gt; — Explicitly denies the ability to create or delete tags. This is important — you don't want users messing with the very tags that control their own permissions. That would be a bit of a security hole.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Three key things you always define in a policy statement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Effect&lt;/strong&gt; — &lt;code&gt;Allow&lt;/code&gt; or &lt;code&gt;Deny&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action&lt;/strong&gt; — What operation you're allowing/denying (like stopping an instance, describing resources, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource&lt;/strong&gt; — Which AWS resource this applies to (&lt;code&gt;*&lt;/code&gt; means all)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Creating an Account Alias
&lt;/h2&gt;

&lt;p&gt;Small but useful thing, I set up an &lt;strong&gt;AWS Account Alias&lt;/strong&gt;. Instead of sharing a URL with a long numeric account ID, you can create a friendly name for your account.&lt;/p&gt;

&lt;p&gt;My sign-in URL went from something like &lt;code&gt;738565xxxxx.signin.aws.amazon.com/console&lt;/code&gt; to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://project-alias-sristi.signin.aws.amazon.com/console
&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.amazonaws.com%2Fuploads%2Farticles%2Fms98y12guyfs98gmvuqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fms98y12guyfs98gmvuqu.png" alt="Creating an Account Alias" width="625" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Much cleaner to share with new users. And don't worry, IAM users can still use the original account ID URL if needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a User Group + IAM User
&lt;/h2&gt;

&lt;p&gt;Next up, creating a &lt;strong&gt;User Group&lt;/strong&gt; and adding a user to it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why use groups instead of attaching policies directly to users?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine you have 20 developers. If you attach permissions to each user individually, managing that becomes a nightmare, especially when something changes. With a group, you set the policy once, and every user in that group inherits it automatically. Way more scalable.&lt;/p&gt;

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

&lt;p&gt;Here's what I set up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User Group:&lt;/strong&gt; &lt;code&gt;dev-group&lt;/code&gt; — I attached the policy I created to this group&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IAM User:&lt;/strong&gt; &lt;code&gt;dev-sristi&lt;/code&gt; — Added to &lt;code&gt;dev-group&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When creating the user, I ticked the option to allow console access. Once the user was created, AWS gave me two ways to share the credentials:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Email the sign-in instructions directly&lt;/li&gt;
&lt;li&gt;Download a &lt;code&gt;.csv&lt;/code&gt; file with the username and password&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.amazonaws.com%2Fuploads%2Farticles%2Fg4o5os7lldi3ar75yomz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg4o5os7lldi3ar75yomz.png" alt="Permission setup" width="757" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My Sign In user credentials&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.amazonaws.com%2Fuploads%2Farticles%2Fv71tbuh5xbfnlxr4nyuq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv71tbuh5xbfnlxr4nyuq.png" alt=" " width="748" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing It Out: IAM Policies in Action
&lt;/h2&gt;

&lt;p&gt;This is the fun part. I logged into the AWS console as the new IAM user (&lt;code&gt;dev-sristi&lt;/code&gt;) and immediately noticed the difference. The dashboard looked different from the root account, with lots of &lt;strong&gt;"Access Denied"&lt;/strong&gt; errors across various panels like cost, security, and applications. That's expected. The user only has EC2-related permissions, nothing else.&lt;/p&gt;

&lt;p&gt;Then I tested the actual policy by trying to stop both instances:&lt;/p&gt;

&lt;h3&gt;
  
  
  Stopping the Production Instance
&lt;/h3&gt;

&lt;p&gt;Got a big red error banner. The user wasn't authorised to perform &lt;code&gt;ec2:StopInstances&lt;/code&gt; on the production instance. The policy blocked it because the &lt;code&gt;Env&lt;/code&gt; tag on that instance was &lt;code&gt;production&lt;/code&gt;, not &lt;code&gt;development&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkeoondbr4nbb7nuwwjex.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkeoondbr4nbb7nuwwjex.png" alt="A red fail banner pops up if I stop the production instance" width="800" height="136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Stopping the Development Instance
&lt;/h3&gt;

&lt;p&gt;Green banner. "Successfully initiated stopping." The policy allowed it because the instance had &lt;code&gt;Env: development&lt;/code&gt; exactly what the condition in the policy was looking for.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5pek1p9pc4n0f4ejb7qp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5pek1p9pc4n0f4ejb7qp.png" alt="A green success banner pops up if I stop the development instance &lt;br&gt;
" width="800" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It worked exactly as intended. Honestly, pretty satisfying to see it play out in real time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary: What I Built
&lt;/h2&gt;

&lt;p&gt;Here's a quick recap of everything that was set up:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IAM User Group&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dev-group&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Holds the permissions policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IAM User&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dev-sristi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Member of &lt;code&gt;dev-group&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EC2 Instance&lt;/td&gt;
&lt;td&gt;&lt;code&gt;project-development-sristi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tag: &lt;code&gt;Env=development&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EC2 Instance&lt;/td&gt;
&lt;td&gt;&lt;code&gt;project-production-sristi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tag: &lt;code&gt;Env=production&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IAM Policy&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SristiDevEnvironmentPolicy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Allow dev access, deny prod&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.amazonaws.com%2Fuploads%2Farticles%2Fgksbk009y62k3eketygc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgksbk009y62k3eketygc.png" alt="Summary " width="800" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;A few things I came away from this project understanding a lot better:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IAM Policies&lt;/strong&gt; are how you define rules for what's allowed, what's denied, and on what resources. Writing them in JSON gives you a lot of flexibility, especially when you add conditions like tag-based access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Account Aliases&lt;/strong&gt; are a small quality-of-life thing but are really useful when onboarding new users. Nobody wants to memorise a 12-digit account ID.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IAM Users vs User Groups&lt;/strong&gt; — attaching policies directly to users works, but using groups is the better practice. It's cleaner and much easier to manage at scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags aren't just for organisation&lt;/strong&gt; — they can actually drive your security policies. That &lt;code&gt;Env&lt;/code&gt; tag was the entire reason the permission logic worked. One tag value meant full access, another meant denied.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testing is everything.&lt;/strong&gt; Writing the policy is one thing; actually logging in as the user and seeing what they can and can't do is how you know it works.&lt;/p&gt;

&lt;p&gt;If you're just getting started with AWS, IAM is one of the first things worth learning properly. Messing up permissions is one of the most common ways things go wrong in cloud environments, and understanding IAM gives you real control over who can do what in your account.&lt;/p&gt;

&lt;p&gt;Give it a try, break things in a dev environment, and see what happens. That's honestly the best way to learn it.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>iam</category>
      <category>cloudcomputing</category>
      <category>security</category>
    </item>
  </channel>
</rss>
