关于 aws-iam
aws-iam 是面向回答 AWS IAM 问题的 AI Agent 参考技能,汇集常见错误的已核实修正,并要求精确信息以 AWS 官方文档为准。
主要功能
- 01已核实的 IAM 边缘情况
- 02角色管理参考资料
- 03IAM 策略生成指导
- 04依据 AWS 文档核对说法
适用场景
- 01检查 IAM 角色信任关系与权限
- 02根据源代码或 Terraform 计划生成策略
- 03核查 STS、Organizations 或 MFA 相关行为
MCP 相关
该技能建议使用 AWS MCP 服务执行 AWS 操作,也支持改用 AWS CLI 或 SDK。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ aws/ agent-toolkit-for-aws --skill aws-iam安装后在 Claude Code 中输入/aws-iam确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/aws-iam-policy-generation.mdaws-iam-role-management.mdcommon-pitfalls.mdservice-authorization.md详细介绍
AWS IAM — 常见陷阱
关于此技能
此技能包含经过验证的更正内容,针对 AI Agent 经常弄错的 IAM 事项。它并非全面的 IAM 指南;如需完整的 IAM 指导,请搜索 AWS 文档。回答 IAM 问题时,请对照 AWS 官方文档核实具体内容(限制、配额、确切的 API 名称、边缘情况行为),而不要依赖预训练知识。优先获取已知文档 URL,而不是进行广泛搜索。如官方文档与记忆中的内容冲突,请以官方文档为准。
常见工作流
对 AWS 操作使用最合适的工具;推荐使用 AWS MCP 服务,但并非必需,也可使用 AWS CLI 或 SDK 作为替代方案。只有在对话需要更深入的细节时,才阅读参考文件。
-
如果用户需要在预置或更新 AWS 资源时创建、限定范围或维护 IAM 角色,请阅读 references/aws-iam-role-management.md。内容涵盖服务角色、执行角色、信任策略、混淆代理防护和权限卫生。
-
如果用户需要生成 IAM 策略、确定 API 调用所需的 IAM 操作,或了解操作与 API 调用之间的映射,请阅读 references/aws-iam-policy-generation.md。重要:如果用户提供应用程序源代码(任何语言)或 Terraform 计划 JSON 文件(
terraform show -json输出),你必须阅读此参考文件;该文件要求使用 iam-policy-autopilot,而非手动构建策略。 使用程序化服务授权参考来确保映射准确。
已验证的边缘情况
CloudTrail:
- AcceptHandshake/DeclineHandshake 仅记录在执行操作的账户中,而非管理账户中。要集中记录,必须使用组织跟踪。
- ConsoleLogin 所在区域因端点/ Cookie 而异,并非总是 us-east-1。
?region=可强制指定区域。
STS:
- GetSessionToken 的限制:(1)除非包含 MFA,否则不能调用 IAM API;(2)除了 AssumeRole 和 GetCallerIdentity 外,不能调用其他 STS API。
- 跨账户 AssumeRole 到选择加入区域:必须由目标账户启用该区域,而非调用方账户。
- 角色链式调用:会话最长 1 小时。
Organizations:
- 已暂停/已关闭的账户在永久关闭之前(约 90 天)无法移除。应先移除,再关闭。
- 策略管理委派:使用 PutResourcePolicy,而非 register-delegated-administrator。
- AI 选择退出策略:默认需要管理账户。
- ListPolicies 筛选所用的 Organizations 策略类型:通过
aws organizations list-available-policy-types或 Organizations API 参考 获取当前列表。
SDK 特定事项:
- Organizations:使用
DuplicatePolicyAttachmentException(而非 PolicyAlreadyAttachedException)。 - Boto3 IAM AccessKey:方法为
activate()、deactivate()、delete();没有update()。 - 实例配置文件:使用 waiter +
time.sleep(10)模式。 - 托管策略版本数上限:5。
SAML:
- 加密断言 URL:
https://region-code.signin.aws.amazon.com/saml/acs/IdP-ID。 - 从 IdP 获取的私钥必须以 .pem 格式上传到 IAM。
策略评估:
-
对空/缺失键使用 ForAllValues 时,评估结果为 true(空真)。为避免这种情况,除了在 同一个上下文键 上使用
ForAllValues,还应使用Null条件,以要求该键存在且非 null。例如,评估aws:TagKeys上下文键时:{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": ["Alpha", "Beta"] }, "Null": { "aws:TagKeys": "false" } } } } -
aws:TagKeys的值区分大小写,但aws:PrincipalTag/<key>、aws:ResourceTag/<key>和aws:RequestTag/<key>中的标签键不区分大小写。上面的 Allow 允许列表不受影响(大小写变更后的键不在列表中),但使用ForAnyValue:StringEquals对aws:TagKeys进行判断、以保护某个标签键的 Deny 会被大小写变更后的键(PROTECTED-TAG)绕过——请使用ForAnyValue:StringEqualsIgnoreCase。参见 references/common-pitfalls.md。 -
基于资源的策略授予同一账户中的 IAM 用户 ARN 权限时,会绕过权限边界。
-
通过直接操纵 IAM 策略实现权限提升的 8 个操作:PutGroupPolicy、PutRolePolicy、PutUserPolicy、CreatePolicy、CreatePolicyVersion、AttachGroupPolicy、AttachRolePolicy、AttachUserPolicy。
-
iam:PassRole的Resource: "*"加上计算服务的创建/更新操作(EC2RunInstances、LambdaCreateFunction/UpdateFunctionConfiguration、ECSRegisterTaskDefinition、Glue、SageMaker、CloudFormation 等),会导致权限提升,可使用账户中任何可传递的角色,包括 Administrator。请将Resource限定为特定角色 ARN 或 IAM 路径;也可使用iam:PassedToService/iam:AssociatedResourceArn进行限制。参见 IAM 用户指南 — 授予用户传递角色的权限。
MFA:
- 添加新设备时,未分配的虚拟 MFA 设备会被自动删除。
- 仅用于 MFA 重新同步的策略中,NotAction 必须恰好包含:iam:ListMFADevices、iam:ListVirtualMFADevices、iam:ResyncMFADevice。
SigV4:
- IncompleteSignatureException 包含 Authorization 标头的 SHA-256 哈希,可用于诊断传输过程中的修改。
特定服务的角色:
- Redshift Serverless 信任策略:将
redshift-serverless.amazonaws.com和redshift.amazonaws.comBOTH 作为服务主体包含在内(根据 AWS 文档;省略 serverless 会导致 COPY 时出现Not authorized to get credentials of role)。 - IAM OIDC 提供商:大多数提供商不需要指纹(AWS 会通过受信任的 CA 进行验证)。
策略摘要显示:
- 单个语句包含多个服务的通配符操作(例如
codebuild:*、codecommit:*),并搭配特定于服务的资源 ARN 时,每个资源只会出现在其匹配服务的摘要中(CodeBuild ARN 显示在 CodeBuild 下,依此类推)。资源的服务前缀与语句中的任何操作都不匹配时,它才会出现在所有操作摘要中(“不匹配的资源”)。