惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
博客园_首页
宝玉的分享
宝玉的分享
S
SegmentFault 最新的问题
Jina AI
Jina AI
Hugging Face - Blog
Hugging Face - Blog
V
Visual Studio Blog
美团技术团队
IT之家
IT之家
罗磊的独立博客
Blog — PlanetScale
Blog — PlanetScale
Google DeepMind News
Google DeepMind News
月光博客
月光博客
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
博客园 - 叶小钗
M
MIT News - Artificial intelligence
B
Blog RSS Feed
有赞技术团队
有赞技术团队
Y
Y Combinator Blog

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
The iam: PassRole Nightmare - 3 Weeks of My Life I Will N...
Chandi Datta · 2026-05-11 · via DEV Community

Let me tell you the story of three weeks of my life I will never get back.

We were building an AI agent on AMAZON Bedrock — an autonomous system that manages infrastructure lifecycle operations. The agent worked perfectly in our sandbox. Time to deploy it to the enterprise environment. Should take an afternoon, right?

It took three weeks.

The Setup

To deploy a Bedrock Agent, you need to attach an IAM role — the execution role that the agent assumes when it invokes foundation models. This requires the iam:PassRole permission. Simple enough.

In our enterprise environment, there is a managed policy attached to every developer role. Let's call it OrgDenyEscalation. This policy contains an explicit deny on iam:PassRole:

{
    "Effect": "Deny",
    "Action": [
        "iam:PassRole",
        "iam:CreateRole",
        "iam:AttachRolePolicy",
        "iam:DeleteRole"
    ],
    "Resource": "*"
}

Enter fullscreen mode Exit fullscreen mode

The critical thing about IAM evaluation: explicit deny always wins. It does not matter if you have AdministratorAccess. It does not matter if you create a custom policy that allows iam:PassRole. An explicit deny on any policy attached to your identity overrides every allow, period.

So we could not deploy the agent via CLI. The aws bedrock-agent create-agent command returned:

AccessDeniedException: User is not authorized to perform iam:PassRole

Enter fullscreen mode Exit fullscreen mode

We spent three days trying to figure out why. Read every IAM doc, every blog post, every Stack Overflow answer. Added broader permissions. Tried different roles. Nothing worked.

The Root Cause Nobody Talks About

Enterprise IAM is not "add permissions until it works." It is a policy evaluation chain with multiple layers:

Request -> SCP (Organization level)
       -> Permission Boundary (Account level)
       -> Managed Policies (Role/User level)
       -> Inline Policies (Role/User level)
       -> Resource Policies (Bucket/Queue/etc. level)

Enter fullscreen mode Exit fullscreen mode

Our organization has:

  1. Service Control Policies (SCPs): Org-level restrictions. Immovable.
  2. Permission Boundaries: Account-level caps on maximum permissions a role can have.
  3. Managed Policies: Enterprise-wide policies attached to all developer roles. These deny dangerous actions (iam:PassRole, iam:CreateRole). You cannot modify or detach them.
  4. Your Custom Policies: Only effective for actions not explicitly denied by layers 1-3.

We were fighting layer 3. You cannot win that fight by adding more permissions.

The CloudFormation Escape Hatch

The non-obvious solution: CloudFormation uses a service role, not your user identity. When CloudFormation creates resources, it assumes a role (like cloudformation-service-role) that has the necessary permissions. If that service role has iam:PassRole — and it typically does for infrastructure provisioning — the explicit deny on your developer role does not apply.

# This works even when your CLI identity has explicit deny on iam:PassRole
Resources:
  BedrockAgent:
    Type: AWS::Bedrock::Agent
    Properties:
      AgentName: my-agent
      AgentResourceRoleArn: !Ref AgentExecutionRole
      FoundationModel: anthropic.claude-sonnet-4-20250514

Enter fullscreen mode Exit fullscreen mode

The catch: someone on the cloud platform team needs to have already configured the CloudFormation service role with the right permissions. In our case, this required a change request, a security review, and a 5-business-day SLA.

A colleague on the platform team finally pointed us at the managed policy with the explicit deny. Three weeks later (after the change request process ground through), the CloudFormation service role was updated, and the deployment worked in 30 seconds.

The Permissions You Will Actually Need

For anyone building Bedrock Agents in enterprise, here is the full list of permissions that will cause problems and where:

Action Why You Need It Enterprise Blocker
iam:PassRole Attach execution role to agent Explicit deny in managed policy
bedrock:CreateAgent Create the agent Usually allowed, but may need SCP update
kms:CreateGrant Use KMS key for Bedrock encryption Key policy must allow your role
s3:PutObject Store state files Bucket policy + VPC endpoint policy
lambda:InvokeFunction Call action group Lambdas Function resource policy must allow agent

How to Work With Platform Teams (Without Losing Your Mind)

Your ability to deploy agents depends on your relationship with the platform team. After two failed attempts, here is what actually moves the needle:

  1. Come with a specific ask: Not "I need more permissions" but "I need iam:PassRole scoped to arn:aws:iam::*:role/BedrockExecRole* for the CloudFormation service role."

  2. Provide the policy JSON: Do not make them write it. Draft the policy, explain each permission, justify the scope.

  3. Show the error: Share the exact AccessDeniedException with the request ID. This helps the security team trace the denial.

  4. Schedule an architecture review BEFORE you start building: A 30-minute meeting upfront saves three weeks of tickets later.

  5. Never ask for "Resource": "*": Always scope to specific ARN patterns. Least privilege is not optional — it is what gets your request approved.

The Lesson

In enterprise environments, the IAM model is not "add permissions until it works." It is "understand the full policy evaluation chain — managed policies, permission boundaries, SCPs, resource policies — and find the path through the maze." Sometimes that path is CloudFormation. Sometimes it is assuming a different role. Sometimes it is waiting for a change request.

Nobody tells you this in the Bedrock quickstart guide. The 5-minute demo assumes you have AdministratorAccess. In enterprise, that assumption is the first thing that breaks.


This is one of 13 chapters from my book *Enterprise AI Agents: From POC to Production on AWS*.

The book covers the full architecture, IAM patterns, state management, observability, and 12 more war stories from going POC -> production. Use code **DEVTO50* for 50% off (launch pricing, next 20 days only).*

Found this helpful? Follow me here on Dev.to — I post weekly about enterprise AI engineering on AWS.