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

推荐订阅源

有赞技术团队
有赞技术团队
B
Blog
IT之家
IT之家
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
量子位
博客园 - 叶小钗
T
Tailwind CSS Blog
小众软件
小众软件
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
雷峰网
雷峰网
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Blog — PlanetScale
Blog — PlanetScale
V
V2EX
博客园_首页
I
InfoQ
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure 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
IAM Access Analyzer Lied to Us: The $1,000/Month Overprov...
Dinesh_gowtham · 2026-06-19 · via DEV Community

Dinesh_gowtham

A month ago, we thought we'd solved our access control issues with IAM Access Analyzer. But a closer look revealed a staggering overprovisioning problem that's been quietly draining our budget. Here's the shocking truth and how we fixed it.

Introduction to IAM Access Analyzer

IAM Access Analyzer is a tool that helps you identify and manage access to your AWS resources. It provides a simple and intuitive way to analyze and optimize your IAM policies. However, as we soon discovered, its supposed simplicity can be misleading.

import { ListPoliciesCommand } from '@aws-sdk/client-iam';

const iamClient = new IAMClient({ region: 'us-east-1' });
const command = new ListPoliciesCommand({});

iamClient.send(command).then((data) => {
  console.log(data.Policies);
}).catch((err) => {
  console.log(err);
});

Be careful when using IAM Access Analyzer, as it does not automatically suggest least privilege policies for all resources. This can lead to potential overprovisioning if not manually configured.

The Hidden Dangers of Overprovisioning

Overprovisioning can lead to a significant increase in costs, as well as security risks. When a user or role has more permissions than necessary, it can lead to unintended access to sensitive resources.

import { GetRoleCommand } from '@aws-sdk/client-iam';

const iamClient = new IAMClient({ region: 'us-east-1' });
const command = new GetRoleCommand({ RoleName: 'my-role' });

iamClient.send(command).then((data) => {
  console.log(data.Role.AssumeRolePolicyDocument);
}).catch((err) => {
  console.log(err);
});

When dealing with IAM policies, remember that explicit deny always wins. If you have an explicit deny statement in your policy, it will override any allow statements.

We encountered the following error message when trying to assume a role with an explicit deny statement:

Error: User: arn:aws:iam::123456789012:user/my-user is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::123456789012:role/my-role

This error message indicates that the user is not authorized to assume the role due to an explicit deny statement.

How We Discovered the $1,000/Month Mistake

We discovered the overprovisioning issue by analyzing our AWS bills and identifying a significant increase in costs. Upon further investigation, we found that one of our Lambda functions was running with more permissions than necessary.

import { GetFunctionCommand } from '@aws-sdk/client-lambda';

const lambdaClient = new LambdaClient({ region: 'us-east-1' });
const command = new GetFunctionCommand({ FunctionName: 'my-function' });

lambdaClient.send(command).then((data) => {
  console.log(data.Function.Runtime);
}).catch((err) => {
  console.log(err);
});

When using Lambda, be aware that provisioned concurrency costs money even when idle. This can lead to unexpected costs if not properly managed.

We encountered the following error message when trying to update our Lambda function:

Error: The function has a concurrent execution limit of 1 ( Lambda function was not able to execute within the given time and memory constraints).

This error message indicates that the Lambda function is not able to execute within the given time and memory constraints.

Implementing Least Privilege Access with IAM

To implement least privilege access, we need to analyze our IAM policies and remove any unnecessary permissions.

import { UpdateRoleCommand } from '@aws-sdk/client-iam';

const iamClient = new IAMClient({ region: 'us-east-1' });
const command = new UpdateRoleCommand({
  RoleName: 'my-role',
  Description: 'My updated role',
  AssumeRolePolicyDocument: JSON.stringify({
    Version: '2012-10-17',
    Statement: [
      {
        Effect: 'Allow',
        Principal: {
          Service: 'lambda.amazonaws.com'
        },
        Action: 'sts:AssumeRole'
      }
    ]
  })
});

iamClient.send(command).then((data) => {
  console.log(data);
}).catch((err) => {
  console.log(err);
});

When implementing least privilege access, remember to use permission boundaries and service control policies (SCPs) to restrict access to sensitive resources.

Automating Resource Tagging for Better Visibility

To automate resource tagging, we can use AWS CloudFormation or AWS CloudWatch.

import { TagResourcesCommand } from '@aws-sdk/client-iam';

const iamClient = new IAMClient({ region: 'us-east-1' });
const command = new TagResourcesCommand({
  Resources: ['arn:aws:iam::123456789012:role/my-role'],
  Tags: [
    {
      Key: 'my-tag',
      Value: 'my-value'
    }
  ]
});

iamClient.send(command).then((data) => {
  console.log(data);
}).catch((err) => {
  console.log(err);
});

When automating resource tagging, be aware that IAM condition keys for specific S3 paths are easy to misconfigure. Make sure to test your configuration thoroughly.

The Takeaway

Here are some key takeaways from our experience:

  • Always analyze your IAM policies and remove any unnecessary permissions to avoid overprovisioning.
  • Use permission boundaries and SCPs to restrict access to sensitive resources.
  • Automate resource tagging using AWS CloudFormation or AWS CloudWatch for better visibility.
  • Be aware of the potential costs of provisioned concurrency in Lambda and plan accordingly.
  • Test your IAM configuration thoroughly to avoid errors and misconfigurations.
  • Use the @aws-sdk/client-iam and @aws-sdk/client-lambda packages to interact with AWS services in your Node.js applications.

By following these best practices, you can avoid common pitfalls and ensure that your AWS resources are secure and cost-effective.


Transparency notice

AI-crafted with Groq, powered by LLaMA 3.3 70B.
The topic was scouted from live AWS and Node.js ecosystem signals, and the content —
including all code examples — was written autonomously without human editing.

Published: 2026-06-19 · Primary focus: IAM

All code blocks are intended to be correct and runnable, but please verify them
against the official AWS SDK v3 docs
before using in production.

Find an error? Drop a comment — corrections are always welcome.