<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Caesar Chan</title>
    <description>The latest articles on Forem by Caesar Chan (@ccscaesar).</description>
    <link>https://forem.com/ccscaesar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F45229%2F804394a1-e401-437c-bab2-3bd1b90c5d8b.jpg</url>
      <title>Forem: Caesar Chan</title>
      <link>https://forem.com/ccscaesar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ccscaesar"/>
    <language>en</language>
    <item>
      <title>ISO 27001 in 6 Months</title>
      <dc:creator>Caesar Chan</dc:creator>
      <pubDate>Sun, 23 Nov 2025 14:00:48 +0000</pubDate>
      <link>https://forem.com/ccscaesar/iso-27001-in-6-months-2o8k</link>
      <guid>https://forem.com/ccscaesar/iso-27001-in-6-months-2o8k</guid>
      <description>&lt;p&gt;Working in a B2B startup, an ISO 27001 certification is often requested by our enterprise clients and partners. However, with a lean team and tight deadlines, traditional manual processes seemed daunting. &lt;/p&gt;

&lt;p&gt;By leveraging GRC automation platforms, we were able to streamline our compliance journey and achieved certification in just six months, proving that even resource-constrained startups can prioritize security without sacrificing speed.​&lt;/p&gt;

&lt;h2&gt;
  
  
  What's ISO 27001?
&lt;/h2&gt;

&lt;p&gt;ISO/IEC 27001:2022 is an international standard for establishing, implementing, maintaining, and continually improving an Information Security Management System (ISMS). It helps organizations manage risks to information assets through a structured framework of controls. For startups handling sensitive data like ours, certification signals maturity and builds trust with partners. &lt;/p&gt;

&lt;h2&gt;
  
  
  Startup Challenges in Compliance
&lt;/h2&gt;

&lt;p&gt;Startups often juggle limited budgets, small teams, and rapid scaling, making full compliance feel overwhelming. Manual documentation and audits can consume months. In our case, as a cloud-native firm, we dealt with dynamic environments like AWS and Kubernetes, complicating control implementation. Without automation, the process might have stretched to multiple years. &lt;/p&gt;

&lt;p&gt;Luckily, compliance automation tools are getting more and more mature. They helped small companies like us address these pain points by automating evidence collection and integrations.​&lt;/p&gt;

&lt;p&gt;It's actually easier to achieve compliance when the company is still small, as everything starts from scratch without entrenched legacy processes or sprawling systems to overhaul. This clean slate allowed us to embed security controls from the ground up.​&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Vanta?
&lt;/h2&gt;

&lt;p&gt;The compliance automation market offers many alternatives like Drata, Scrut, Sprinto, and others, each with strengths in areas such as pricing or specific frameworks. &lt;/p&gt;

&lt;p&gt;We evaluated these options but picked Vanta for its proven track record, unmatched reliability, extensive library of automated test cases, and over 400 integrations that covered our entire tech stack. This depth of automation reduced manual work by at least 80%, making it ideal for our lean team.​&lt;/p&gt;




&lt;h2&gt;
  
  
  6-Month Roadmap to Certification
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Months 1: Preparation
&lt;/h3&gt;

&lt;p&gt;We kicked off by securing executive buy-in and forming a cross-functional team of three: our lead engineer, CISO, and myself. &lt;/p&gt;

&lt;p&gt;Vanta provides policy templates for reference, which we used to draft our initial information security policies. By the end of the month, we had all the necessary policies, procedures and standards drafted and waiting to be approved. &lt;/p&gt;

&lt;p&gt;The Vanta dashboard gave us a great overview of our compliance status, displaying a real-time percentage of completion that allowed us to keep track of the progress.​ The percentage can be further broken down into &lt;code&gt;Documents&lt;/code&gt; and &lt;code&gt;Automated tests&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%2Fdmkj73of19zbcqm7foe7.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fdmkj73of19zbcqm7foe7.png" alt="Vanta Dashboard" width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Month 2-3: ISMS Development and Risk Assessment
&lt;/h3&gt;

&lt;p&gt;Using Vanta's automated assessment, we conducted a gap analysis against the controls in ISO 27001. This showed us the percentage of controls having passing evidence. &lt;/p&gt;

&lt;p&gt;With the gaps in mind, we gradually worked towards full compliance using Vanta's built-in resources. We performed a formal risk assessment, identifying assets like customer data, and evaluating threats per ISO 27005 guidelines. &lt;/p&gt;

&lt;p&gt;Vanta automated risk scoring and treatment plans, recommending controls such as MFA and regular vulnerability scans. We implemented around 70% of controls here. We then leverage Vanta integrations to monitor compliance continuously.​&lt;/p&gt;

&lt;p&gt;Plicies and documentations were centralized in Vanta. Employees' policy acceptance was also tracked under it. Vanta also helps with vendor management by automating third-party risk assessments.​&lt;/p&gt;

&lt;h3&gt;
  
  
  Month 4: Internal Audit
&lt;/h3&gt;

&lt;p&gt;For the internal audit requirement, we decided to outsource it to a third-party at a reasonable cost. This was the best option for us in terms of speed. Having someone professional to vet our works before the actual external audit, definitely gave us a peace in mind. &lt;/p&gt;

&lt;p&gt;The deliverable of the outsourced internal audit is a list of potential non-conformities and observations. Our team would then try to resolve any major or minor non-conformities ASAP. &lt;/p&gt;

&lt;h3&gt;
  
  
  Month 5: Stage 1 Audit
&lt;/h3&gt;

&lt;p&gt;We selected a certification body from Vanta's network of partner audit firms, which made the process seamless. &lt;/p&gt;

&lt;p&gt;The Stage 1 audit was basically the documentation review. It involved the auditor examining our ISMS design, scope, and policies remotely via calls. Vanta's centralized dashboard provided instant access to our SoA, risk assessments, and policies, impressing the auditor with our preparedness. They identified no major gaps, only suggesting refinements in our risk treatment process, which we addressed pre-Stage 2 audit.​&lt;/p&gt;

&lt;p&gt;This stage confirmed that our ISMS aligned with ISO 27001 requirements, validating our automated approach.​&lt;/p&gt;

&lt;h3&gt;
  
  
  Month 6: Stage 2 Audit and Certification
&lt;/h3&gt;

&lt;p&gt;Stage 2 focused on verifying implementation through interviews, evidence review, and on-site checks. Over a week, auditors reviewed our automated test cases on Vanta. Vanta's real-time evidence collection from our tech stacks like AWS, Entra ID, Snyk, etc. saved us weeks of manual work.​&lt;/p&gt;

&lt;p&gt;We resolved a few observations, such as formalizing HR onboarding, within the audit window. By month's end, we received certification, valid for three years, with annual surveillance audits planned. The partner auditor network ensured smooth coordination, avoiding common delays in finding qualified firms.​&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Benefits and Lessons Learnt
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Achieving ISO 27001 boosted our credibility, helping us secure a major client in the crypto industry. &lt;/li&gt;
&lt;li&gt;Costs stayed manageable, including Vanta's subscription and audit fees, far below manual alternatives. &lt;/li&gt;
&lt;li&gt;Automation not only sped up the process but embedded security into our DevSecOps pipeline.​&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For fellow cybersecurity professionals, the takeaway is clear: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compliance automation tools transform ISO 27001 from a burden into a strategic advantage, especially when starting small. &lt;/li&gt;
&lt;li&gt;Prioritize platforms with strong integrations and track records.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>startup</category>
      <category>cloud</category>
      <category>automation</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>The 5 Steps of Threat Modeling in a Startup</title>
      <dc:creator>Caesar Chan</dc:creator>
      <pubDate>Sat, 08 Nov 2025 14:46:02 +0000</pubDate>
      <link>https://forem.com/ccscaesar/the-5-steps-of-threat-modeling-in-a-startup-9e</link>
      <guid>https://forem.com/ccscaesar/the-5-steps-of-threat-modeling-in-a-startup-9e</guid>
      <description>&lt;h3&gt;
  
  
  From STRIDE-LM to ISACA’s 5 Steps: Leveling Up Threat Modeling in a Startup
&lt;/h3&gt;

&lt;p&gt;For the past few years, we relied on &lt;a href="https://csf.tools/reference/stride-lm/" rel="noopener noreferrer"&gt;&lt;strong&gt;STRIDE-LM&lt;/strong&gt;&lt;/a&gt; to perform ad hoc threat modeling across our product stack. It served us well in identifying technical threats and structuring security reviews. But over time, we found a recurring gap: &lt;strong&gt;our process rarely addressed business context or risk appetite.&lt;/strong&gt; Threat lists were comprehensive, but often disconnected from what really mattered to business, say, customer trust, operational resilience, and regulatory exposure. We knew it was time to &lt;em&gt;raise the bar&lt;/em&gt;. &lt;/p&gt;




&lt;h3&gt;
  
  
  Why ISACA’s 5 Steps Work Surprisingly Well (Even for a 2-Person Team)
&lt;/h3&gt;

&lt;p&gt;When we discovered ISACA's whitepaper &lt;a href="https://www.isaca.org/resources/white-papers/2025/threat-modeling-revisited" rel="noopener noreferrer"&gt;&lt;strong&gt;Threat Modeling Revisited&lt;/strong&gt;&lt;/a&gt;, our initial skepticism was quickly dispelled. At first glance, the approach looked “enterprisey”. However, as we dug deeper, we realized it’s actually lean and &lt;strong&gt;adaptable for small teams&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Here’s how we put it to work and what each step delivered:&lt;/p&gt;

&lt;h4&gt;
  
  
  1️⃣ Identify Business Objectives and Define Scope
&lt;/h4&gt;

&lt;p&gt;Instead of modeling random components that come into our way, we &lt;strong&gt;prioritize business outcomes&lt;/strong&gt; (regulatory compliance, up-time, customer privacy). &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Outcome:&lt;/strong&gt; A shared understanding of what’s most critical to protect, aligning engineering and security on what matters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How security fit it in:&lt;/strong&gt; Join the weekly agile business refinement. During the meeting, we assess if there are any new or changed business objectives, or features that might impact security. 

&lt;ul&gt;
&lt;li&gt;If no new security concerns arise, we consider it case closed. This keeps workload efficient and avoids unnecessary meetings. &lt;/li&gt;
&lt;li&gt;If yes, we proceed to step 2. &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  2️⃣ Map the Business Ecosystem
&lt;/h4&gt;

&lt;p&gt;We sketched &lt;strong&gt;diagrams&lt;/strong&gt; of data flow, trust boundaries, and external integrations, flagging out vendor dependencies and sensitive data handling.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Outcome:&lt;/strong&gt; Visual clarity over where threats lie, plus a direct way to spot weak points and key integrations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How security fit it in:&lt;/strong&gt; Sketch simple diagrams in Draw.io just enough to support risk discussions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3️⃣ Identify and Prioritize Threats
&lt;/h4&gt;

&lt;p&gt;We still applied STRIDE-LM to technical assets, but for each we now asked: How does this &lt;strong&gt;impact business objectives&lt;/strong&gt;? We focused on threats with real business consequences (regulatory fines, cash losses, brand damage). &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Outcome:&lt;/strong&gt; A ranked list of threats mapped directly to business objectives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How security fit it in:&lt;/strong&gt; Brainstorm and rank threats for what’s in active development, simply using an Excel sheet on SharePoint.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  4️⃣ Develop Mitigation Strategies
&lt;/h4&gt;

&lt;p&gt;Mitigations were scoped to what was &lt;strong&gt;actually actionable&lt;/strong&gt; and tracked in Jira. If a threat couldn’t be resolved in the same sprint, we would document it as a risk and request follow-up.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Outcome:&lt;/strong&gt; Action items with owners, and a clear backlog of residual risks. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How security fit it in:&lt;/strong&gt; Document mitigation in the sprint documentation. Create new risk scenarios if not mitigated within the sprint. &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  5️⃣ Review, Validate, Iterate
&lt;/h4&gt;

&lt;p&gt;Instead of a dedicated formal review, we blended in threat model reviews as part of our quarterly "security retros". We would adjust risk posture and update our mitigation backlog.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Outcome:&lt;/strong&gt; Continuous improvement and stakeholder communication, keeping the risk register alive and always relevant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How security fit it in:&lt;/strong&gt; Use quarterly retros as check-ins, keeping sessions under an hour.&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.amazonaws.com%2Fuploads%2Farticles%2Fuu9kuh7nqidhoibjb77n.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fuu9kuh7nqidhoibjb77n.png" alt="Threat Modeling 5 Steps" width="666" height="1902"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Consolidating Outcomes with Our Risk Register
&lt;/h3&gt;

&lt;p&gt;A key benefit of ISACA’s approach is that every prioritized threat and mitigation fed directly into our &lt;strong&gt;Risk Register&lt;/strong&gt;. Identified threats with business consequences became new entries, each assigned a risk owner, mitigation plan, and review date. This made our register a living document. It's no longer just a compliance checkbox, but an active tool for tracking security outcomes in line with the company’s risk appetite.&lt;/p&gt;




&lt;h3&gt;
  
  
  Lessons Learnt
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;STRIDE-LM gave us a solid technical footing, but ISACA’s 5 steps brought context and business alignment.&lt;/li&gt;
&lt;li&gt;The framework is manageable even for a two-person security team, &lt;strong&gt;if you stay focused, build on what’s already working, and ruthlessly prioritize.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Threat modeling outputs are naturally actionable as risk register updates, making executive consensus and compliance reporting much easier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You can move fast and still be strategic about security,&lt;/strong&gt; if you align with business outcomes.&lt;/li&gt;
&lt;li&gt;Lean teams benefit most from clarity and focus, not exhaustive lists.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuous improvement,&lt;/strong&gt; not one-off exercises, delivers real value.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>startup</category>
      <category>cybersecurity</category>
      <category>learning</category>
    </item>
    <item>
      <title>From Permanent Access to Just-in-Time: A Startup's IAM Journey Part 3</title>
      <dc:creator>Caesar Chan</dc:creator>
      <pubDate>Sun, 19 Oct 2025 03:19:01 +0000</pubDate>
      <link>https://forem.com/ccscaesar/from-permanent-access-to-just-in-time-a-startups-iam-journey-part-3-5c5a</link>
      <guid>https://forem.com/ccscaesar/from-permanent-access-to-just-in-time-a-startups-iam-journey-part-3-5c5a</guid>
      <description>&lt;p&gt;&lt;em&gt;This is the final post in our 3-part series on revamping our cloud IAM. Be sure to check out &lt;a href="https://dev.to/ccscaesar/from-permanent-access-to-just-in-time-a-startups-iam-journey-part-1-4lbn"&gt;Part 1&lt;/a&gt; and &lt;a href="https://dev.to/ccscaesar/from-permanent-access-to-just-in-time-a-startups-iam-journey-part-2-3521"&gt;Part 2&lt;/a&gt; if you haven't already.&lt;/em&gt; &lt;br&gt;
&lt;em&gt;In Part 2, we walked through the detailed, 4-phase implementation of our Just-in-Time access model.&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  The Flaw
&lt;/h2&gt;

&lt;p&gt;During our implementation, we found an obvious security flaw. Our initial IAM roles in all member accounts had a trust policy that allowed any principal within the landing account to assume them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Original Trust Policy:&lt;/strong&gt;&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;"Principal"&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;"AWS"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::123456789012:root"&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;"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;"sts:AssumeRole"&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="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;This configuration meant that if any user or service within the landing account were compromised, the attacker could pivot and assume these privileged roles.&lt;/p&gt;

&lt;p&gt;We fixed this by updating the policy to be highly specific, using a &lt;code&gt;Condition&lt;/code&gt; to ensure that the role could only be assumed by a specific, AWS SSO-generated role.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Improved Trust Policy:&lt;/strong&gt;&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;"Principal"&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;"AWS"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::123456789012:root"&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;"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;"sts:AssumeRole"&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;"ArnEquals"&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;"aws:PrincipalArn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::123456789012:role/aws-reserved/sso.amazonaws.com/ap-southeast-1/AWSReservedSSO_SecurityTeam_1a2b3c4d5e7f8a9b"&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="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;This &lt;code&gt;aws:PrincipalArn&lt;/code&gt; is the specific SSO IAM role that links back to our IAM Identity Center permission set, ensuring only the right employee coming from the right team can access the role.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lessons Learnt
&lt;/h2&gt;

&lt;p&gt;A technical solution is only half the battle. The real challenge is making security an enabler, not a barrier. We learned two major lessons along the way.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lesson 1: JIT access requires a gentle introduction
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Problem:&lt;/strong&gt; When we first rolled out the JIT model, our Dev and Infra teams were confused, leading to a surge in access-related support tickets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Fix:&lt;/strong&gt; We realized technology alone wasn't enough. We implemented company-wide training sessions, created detailed architecture diagrams and documentation, and set up Slack notifications for faster access approvals. This transformed the process from a point of friction into a streamlined, understandable workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Lesson 2: Least privilege should be a journey, not a decree
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Problem:&lt;/strong&gt; We initially took a very strict least privilege approach, locking down roles to the bare minimum permissions. This backfired. Teams constantly hit permission walls, velocity dropped, and the security team was seen as a blocker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Fix:&lt;/strong&gt; We pivoted to a "trust with monitoring" approach. We started with broader, role-based permissions and implemented continuous governance using IAM Access Analyzer. Now, we regularly monitor and remove unused permissions, delete dormant roles, and track utilization metrics, achieving least privilege without hindering productivity.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Moving Forward
&lt;/h2&gt;

&lt;p&gt;Our journey from permanent access to Just-in-Time IAM wasn't just about implementing new technology. It was about changing how we think about security in a fast-moving startup environment. We eliminated standing privileges, closed critical security gaps, and most importantly, proved that security and velocity aren't opposing forces. &lt;/p&gt;

&lt;p&gt;The key insight? Security transformations succeed when you treat them as change initiatives, not just technical projects. Start with the people, iterate on the permissions, and let monitoring guide you toward true least privilege over time. &lt;/p&gt;

&lt;p&gt;If you're considering a similar shift in your organization, remember that perfection is the enemy of progress. &lt;strong&gt;Ship something functional, gather feedback, and refine continuously.&lt;/strong&gt; Your security will strengthen, and you'll build something no compliance framework can measure: a culture where security and velocity aren't trade-offs.&lt;/p&gt;

</description>
      <category>security</category>
      <category>aws</category>
      <category>identity</category>
      <category>azure</category>
    </item>
    <item>
      <title>From Permanent Access to Just-in-Time: A Startup's IAM Journey Part 2</title>
      <dc:creator>Caesar Chan</dc:creator>
      <pubDate>Thu, 16 Oct 2025 02:53:50 +0000</pubDate>
      <link>https://forem.com/ccscaesar/from-permanent-access-to-just-in-time-a-startups-iam-journey-part-2-3521</link>
      <guid>https://forem.com/ccscaesar/from-permanent-access-to-just-in-time-a-startups-iam-journey-part-2-3521</guid>
      <description>&lt;p&gt;&lt;em&gt;This is the second post in our 3-part series on implementing Just-in-Time access. In case you missed it, you can find &lt;a href="https://dev.to/ccscaesar/from-permanent-access-to-just-in-time-a-startups-iam-journey-part-1-4lbn"&gt;Part 1 here&lt;/a&gt;.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;In Part 1, we outlined the significant security risks of our "always-on" access model and introduced the blueprint for our new JIT architecture using AWS and Entra ID.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Implementation
&lt;/h2&gt;

&lt;p&gt;Now, let's dive into the step-by-step plan we followed to bring this architecture to life.&lt;/p&gt;

&lt;p&gt;&lt;a 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%2Fqiovm72u5m5x0wkc4r1c.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fqiovm72u5m5x0wkc4r1c.png" alt="Architecture" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Phase 1: Design and AWS Configuration
&lt;/h3&gt;

&lt;p&gt;This phase was about laying the groundwork within our AWS Organization.&lt;/p&gt;

&lt;p&gt;First, we held workshops to discuss and agree upon the new AWS IAM Groups and Roles needed for different teams (e.g., Infra, Dev, Product). This ensured the new structure met business needs.&lt;/p&gt;

&lt;p&gt;We then built the core components in AWS. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In our AWS Management Account, we created new IAM Identity Center Permission Sets at the organization level, which define the granular permissions for each job function.&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.amazonaws.com%2Fuploads%2Farticles%2Fjsop4buqk1ez7rlpzmwx.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fjsop4buqk1ez7rlpzmwx.png" alt=" " width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In our AWS Landing Account, we created new IAM Policies specifically designed to allow users to switch roles into the production and non-production accounts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Sample Landing Account Switch Role Policy:&lt;/strong&gt;&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;"sts:AssumeRole"&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="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::111111111111:role/InfraRole"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::222222222222:role/InfraRole"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::333333333333:role/InfraRole"&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;"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="s2"&gt;"sts:AssumeRole"&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="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::111111111111:role/SecurityRole"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::222222222222:role/SecurityRole"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::333333333333:role/SecurityRole"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Finally in our AWS member accounts, we created the new target IAM Roles that users would ultimately assume to do their work, e.g. &lt;code&gt;arn:aws:iam::111111111111:role/InfraRole&lt;/code&gt;. &lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Phase 2: Entra ID Integration and Configuration
&lt;/h3&gt;

&lt;p&gt;With AWS ready, we connected our identity provider (IdP).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;We set up the federation by connecting Entra ID SSO with IAM Identity Center. This allows AWS to trust Entra ID for user authentication.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next, we mapped our Entra ID Groups with the IAM Identity Center Groups to ensure that a user in a specific Entra ID group (e.g., "Infra Team Production") would be associated with the correct permissions in AWS.&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.amazonaws.com%2Fuploads%2Farticles%2Fx7nhi3m47twujyncxjp7.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fx7nhi3m47twujyncxjp7.png" alt=" " width="800" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A crucial step was to configure Entra ID PIM on the production access groups, enabling the JIT request and approval workflow.&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.amazonaws.com%2Fuploads%2Farticles%2Fo99etfjbbamw9uhwnpav.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fo99etfjbbamw9uhwnpav.png" alt=" " width="800" height="671"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We also had to revamp our Conditional Access rules in Entra ID to enforce stronger authentication requirements (e.g. phish-resistant MFA, MDM compliance) when users access AWS production.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Phase 3: User Migration and Go-Live
&lt;/h3&gt;

&lt;p&gt;This was our phased roll-out to users.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We started by assigning a few pilot users to the new groups for testing, allowing us to iron out any kinks in the workflow.&lt;/li&gt;
&lt;li&gt;Pilot users will test out the entire self-service access request flow.&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.amazonaws.com%2Fuploads%2Farticles%2Fk2f1uh0yls5z10rar026.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fk2f1uh0yls5z10rar026.png" alt=" " width="800" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once the pilot was successful, we proceeded to reassign all other users to the new groups according to their job function.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Phase 4: Cleanup and Hardening
&lt;/h3&gt;

&lt;p&gt;The final and most important phase was to remove the old, insecure configurations.&lt;/p&gt;

&lt;h4&gt;
  
  
  Cleanup
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;We enabled IAM Access Analyzer in our organization management account to begin monitoring for overly permissive or unused access.&lt;/li&gt;
&lt;li&gt;We began a process of removing obsolete IAM Policies, Accounts, Groups, and Roles.&lt;/li&gt;
&lt;li&gt;Critically, we removed all permanent, long-lived CLI access keys used by employees, forcing all CLI access through the new temporary credential model.&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.amazonaws.com%2Fuploads%2Farticles%2Fx79n2np1rjb285r6558g.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fx79n2np1rjb285r6558g.png" alt=" " width="800" height="945"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Hardening
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Finally, we performed a security review to lock down all IAM role trust policies, ensuring they could only be assumed by the specific IAM Identity Center roles, as detailed in the final part of the series.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;With the 4 phases of our implementation covered, the technical foundation is now in place. However, the journey doesn't end with deployment. In the final part of our series, we'll zoom in on a security policy fix we discovered and share the lessons we learned about balancing security with developer productivity.&lt;/p&gt;

</description>
      <category>security</category>
      <category>aws</category>
      <category>identity</category>
      <category>azure</category>
    </item>
    <item>
      <title>From Permanent Access to Just-in-Time: A Startup's IAM Journey Part 1</title>
      <dc:creator>Caesar Chan</dc:creator>
      <pubDate>Fri, 10 Oct 2025 09:37:47 +0000</pubDate>
      <link>https://forem.com/ccscaesar/from-permanent-access-to-just-in-time-a-startups-iam-journey-part-1-4lbn</link>
      <guid>https://forem.com/ccscaesar/from-permanent-access-to-just-in-time-a-startups-iam-journey-part-1-4lbn</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is the first in a 3-part series detailing our journey to secure cloud access.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In a FinTech startup, speed and agility are paramount. But as many of us in the security field know, rapid growth can often lead to "chaos", especially when it comes to cloud infrastructure access. My journey at a startup began with untangling this challenge. We had a classic case of an "always-on" access model, and it was clear we were at risk.&lt;/p&gt;

&lt;p&gt;This is the story of how we moved from a state of risky permanent access, to a secure and efficient Just-in-Time (JIT) model.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;When we first assessed our AWS environment, we found several security issues that are common in rapidly scaling companies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Single-Factor Authentication:&lt;/strong&gt; Multi-Factor Authentication (MFA) was not universally enforced for our AWS console logins, leaving a gaping hole in our first line of defense.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permanent "Always-On" Access:&lt;/strong&gt; Engineers had a static path directly into both non-production and production environments. Many had generated permanent AWS access keys, which, if leaked, could provide an attacker with a persistent backdoor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overly Permissive Roles:&lt;/strong&gt; Developers were often granted broad IAM roles with administrative privileges across multiple services and environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Separation of Duties:&lt;/strong&gt; A single access path could be used by an engineer to reach every environment, from development all the way to production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lack of Just-in-Time (JIT):&lt;/strong&gt; There was no system for engineers to request and receive temporary, time-bound access for specific tasks.&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.amazonaws.com%2Fuploads%2Farticles%2F503r0j7nma52sa85t9ot.png" class="article-body-image-wrapper"&gt;&lt;img 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%2F503r0j7nma52sa85t9ot.png" alt="Were we at risk?" width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This setup was a breeding ground for potential disasters, from account hijacking to insider threats to ransomware and cloud cryptomining. &lt;/p&gt;

&lt;p&gt;Leaked AWS credentials quite often leads to "&lt;a href="https://cybernews.com/security/aws-cloud-storage-bucket-ransomware-attacks/" rel="noopener noreferrer"&gt;silent compromises&lt;/a&gt;", where attackers use stolen keys to encrypt S3 buckets and demand a ransom, all without triggering alerts:&lt;/p&gt;

&lt;p&gt;&lt;a 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%2Ff5rfwuqutnzqfljovdsz.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Ff5rfwuqutnzqfljovdsz.png" alt="Silent Compromises" width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Blueprint
&lt;/h2&gt;

&lt;p&gt;We knew we had to act. Our mission was to revamp our IAM strategy completely. We set clear end goals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implement risk-based MFA.&lt;/li&gt;
&lt;li&gt;Eliminate all permanent human access to production.&lt;/li&gt;
&lt;li&gt;Enforce the principle of least privilege for every IAM role.&lt;/li&gt;
&lt;li&gt;Establish a clear separation of duties.&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.amazonaws.com%2Fuploads%2Farticles%2Fn9w1pvp1aqg7t6slaszg.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fn9w1pvp1aqg7t6slaszg.png" alt="Our high-level approach" width="800" height="261"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To achieve these, we chose a modern tool-set designed for cloud-native environments: &lt;strong&gt;AWS IAM Identity Center&lt;/strong&gt;, &lt;strong&gt;AWS IAM Access Analyzer&lt;/strong&gt;, &lt;strong&gt;Entra ID Privileged Identity Management (PIM)&lt;/strong&gt; and &lt;strong&gt;Entra ID Conditional Access&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;We've now covered the security gaps that prompted this project and the high-level blueprint for our new Just-in-Time model. &lt;/p&gt;

&lt;p&gt;In the next part of this series, we’ll roll up our sleeves and walk through the detailed, 4-phase implementation plan we followed, from initial AWS configuration to the final cleanup.&lt;/p&gt;

&lt;p&gt;&lt;a 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%2Fqiovm72u5m5x0wkc4r1c.png" class="article-body-image-wrapper"&gt;&lt;img 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%2Fqiovm72u5m5x0wkc4r1c.png" alt="Architecture" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>aws</category>
      <category>identity</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
