
Description
Verified corrections for IAM behaviors that AI agents frequently get wrong — policy evaluation edge cases, trust policy gotchas, STS session limits, Organizations quirks, and SAML/MFA specifics. Also provides structured workflows for IAM role management and least-privilege policy generation. Covers condition operator safety (ForAnyValue/ForAllValues with Null checks for absent keys), bucket policy deny patterns (VPC endpoint restrictions, org path conditions), resource-based policy confused deputy protection, and service role creation for AWS services (Glue, CloudTrail, VPC Flow Logs, Firehose, DataSync, S3 replication, Lambda, Step Functions, ECS, etc.) including trust policies with aws:SourceAccount/aws:SourceArn conditions. Applies when creating or configuring IAM roles, writing IAM or bucket policies, working with STS, Organizations, condition operators, or any task requiring an IAM service role or execution role. Does not cover non-IAM authorization like Cognito user-pool policies or app-level RBAC.
SKILL.md
AWS IAM — Common Pitfalls
About This Skill
This skill contains verified corrections for things that AI agents frequently get wrong about IAM. It is not a comprehensive IAM guide — for full IAM guidance, search AWS documentation. When answering IAM questions, verify specific claims (limits, quotas, exact API names, edge-case behaviors) against official AWS documentation rather than relying on pre-training. Prefer fetching known documentation URLs over broad searches. Trust official documentation over memory when they conflict.
Common Workflows
Use the best available tool for AWS operations — the AWS MCP server is recommended but not required; AWS CLI or SDK may be used as alternatives. Read reference files only when the conversation requires deeper detail.
- Read references/aws-iam-role-management.md if the user needs to create, scope, or maintain IAM roles when provisioning or updating AWS resources. Covers service roles, execution roles, trust policies, confused deputy protection, and permission hygiene.
- Read references/aws-iam-policy-generation.md if the user needs to generate least-privilege IAM policies, determine required IAM actions for API calls, or understand action-to-operation mappings. CRITICAL: If the user provides source code (Python, Go, TypeScript, JavaScript, Java), you MUST read this reference — it mandates using iam-policy-autopilot instead of manual policy construction. Uses the programmatic service authorization reference for accurate mappings.
Verified Edge Cases
CloudTrail:
- AcceptHandshake/DeclineHandshake logged in ACTING account ONLY, not management account. Organization trail required for centralization.
- ConsoleLogin region varies by endpoint/cookies, NOT always us-east-1.
?region=forces specific region.
STS:
- GetSessionToken restrictions: (1) No IAM APIs unless MFA included (2) No STS except AssumeRole and GetCallerIdentity.
- Cross-account AssumeRole to opt-in region: TARGET account must enable region, not calling account.
- Role chaining: max 1-hour session.
Organizations:
- Suspended/closed accounts CANNOT be removed until permanently closed (~90 days). Remove FIRST, then close.
- Policy management delegation: use PutResourcePolicy, NOT register-delegated-administrator.
- AI opt-out policies: management account required by default.
- Organizations policy types for ListPolicies filter: fetch the current list via
aws organizations list-available-policy-typesor the Organizations API reference.
SDK Specifics:
- Organizations:
DuplicatePolicyAttachmentException(not PolicyAlreadyAttachedException). - Boto3 IAM AccessKey: methods are
activate(),deactivate(),delete()— NOupdate(). - Instance profiles: waiter +
time.sleep(10)pattern. - Managed policy max versions: 5.
SAML:
- Encrypted assertions URL:
https://region-code.signin.aws.amazon.com/saml/acs/IdP-ID. - Private key from IdP uploaded to IAM in .pem format.
Policy Evaluation:
- ForAllValues with empty/missing key: evaluates to true (vacuous truth). To avoid that, use a
Nullcondition in addition to theForAllValueson the same context key to require that key to be present and non-null. For example, when evaluating theaws:TagKeyscontext key:{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": ["Alpha", "Beta"] }, "Null": { "aws:TagKeys": "false" } } } } - Resource-based policies granting to IAM user ARN bypass permissions boundaries in same account.
- 8 privilege escalation actions via direct IAM policy manipulation: PutGroupPolicy, PutRolePolicy, PutUserPolicy, CreatePolicy, CreatePolicyVersion, AttachGroupPolicy, AttachRolePolicy, AttachUserPolicy.
iam:PassRolewithResource: "*"+ create/update on a compute service (EC2RunInstances, LambdaCreateFunction/UpdateFunctionConfiguration, ECSRegisterTaskDefinition, Glue, SageMaker, CloudFormation, etc.) = privilege escalation to any passable role in the account, including Administrator. ScopeResourceto specific role ARNs or an IAM path; optionally constrain withiam:PassedToService/iam:AssociatedResourceArn. See IAM User Guide — Grant a user permissions to pass a role.
MFA:
- Unassigned virtual MFA devices auto-deleted when adding new ones.
- MFA resync-only policy NotAction needs exactly: iam:ListMFADevices, iam:ListVirtualMFADevices, iam:ResyncMFADevice.
SigV4:
- IncompleteSignatureException includes SHA-256 hash of Authorization header for transit modification diagnosis.
Service-Specific Roles:
- Redshift Serverless trust policy: include BOTH
redshift-serverless.amazonaws.comANDredshift.amazonaws.comas service principals (per AWS docs; omitting serverless causesNot authorized to get credentials of roleon COPY). - IAM OIDC providers: thumbprints are not required for most providers (AWS verifies via trusted CAs).
Policy Summary Display:
- Single statement with multi-service wildcard actions (e.g.
codebuild:*,codecommit:*) + service-specific resource ARNs: each resource appears ONLY under its matching service's summary (CodeBuild ARN under CodeBuild, etc.). A resource whose service prefix matches NO action in the statement is the only case where it appears in all action summaries ("mismatched resource").
More skills from the agent-toolkit-for-aws repository
View all 100 skillsagents-build
add capabilities to existing agent projects
Jul 12AgentsAutomationAWSEngineeringagents-connect
connect agents to external services
Jul 16AgentsAPI DevelopmentAuthenticationAWSagents-debug
debug agent and environment issues
Jul 16AgentsAWSDebuggingObservabilityagents-deploy
deploy AI agents to AWS
Jul 12AgentsAWSCI/CDDeploymentagents-get-started
scaffold and deploy new agent projects
Jul 12AgentsAWSDeploymentagents-harden
harden agents for production
Jul 16AgentsAWSBest PracticesSecurity
More from AWS (Amazon)
View publisheragents-optimize
optimize agent quality and performance
agent-toolkit-for-aws
Jul 12AgentsAWSEvalsObservability +1amazon-aurora-mysql
manage Amazon Aurora MySQL clusters
agent-toolkit-for-aws
Jul 12AWSDatabaseMySQLServerlessamazon-aurora-postgresql
configure Amazon Aurora PostgreSQL clusters
agent-toolkit-for-aws
Jul 16AWSDatabasePostgreSQLServerlessamazon-bedrock
build generative AI apps with Amazon Bedrock
agent-toolkit-for-aws
Jul 19AgentsAWSLLMamazon-documentdb
manage Amazon DocumentDB clusters
agent-toolkit-for-aws
Jul 12AWSDatabaseMongoDBNoSQLamazon-dynamodb
design and debug DynamoDB data layers
agent-toolkit-for-aws
Jul 16AWSDatabaseNoSQL