用途
AWS IAM(Identity and Access Management)用于对 AWS 服务和资源进行安全访问控制。IAM 是 AWS 安全的基础——每一次 AWS API 调用都要经过 IAM 的认证与授权。该技能适用于创建 IAM 策略、配置跨账户访问、设置服务角色等任务。
核心概念
- 主体(Principals):可以向 AWS 发出请求的实体,包括 IAM 用户、角色、联合用户和应用程序。
- 策略(Policies):定义权限的 JSON 文档。类型包括:基于身份的策略(附加到用户、组或角色)、基于资源的策略(附加到资源,如 S3 存储桶、SQS 队列)、权限边界(身份可拥有的最大权限)、服务控制策略(SCP,组织范围的限制)。
- 角色(Roles):具有权限、可被受信任实体代入的身份。不使用永久凭证,而是使用临时安全令牌。
- 信任关系(Trust Relationships):定义哪些主体可以代入某个角色,通过角色的信任策略配置。
主要能力与常见模式
为 Lambda 创建服务角色
可通过 AWS CLI 或 boto3 完成。CLI 方式先创建信任策略文件(trust-policy.json),其中 Principal 为 lambda.amazonaws.com,Action 为 sts:AssumeRole;然后使用 aws iam create-role 创建角色,再用 aws iam attach-role-policy 附加托管策略(如 arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole)。boto3 方式使用 iam.create_role 与 iam.attach_role_policy 实现同样效果。
按最小权限创建自定义策略
编写 policy.json,在 Statement 中限定 Action(如 dynamodb:GetItem、dynamodb:PutItem、dynamodb:Query)与具体 Resource ARN,然后使用 aws iam create-policy 创建客户管理策略。
跨账户角色代入
在受信任账户(账户 B)中创建角色,信任策略的 Principal 指向账户 A 的 root ARN,并可通过 Condition 要求 sts:ExternalId 匹配。账户 A 使用 aws sts assume-role 代入该角色,需提供 role-arn、role-session-name 和 external-id。
使用方式(CLI 参考)
常用命令包括:aws iam create-role(创建角色)、aws iam create-policy(创建客户管理策略)、aws iam attach-role-policy(附加托管策略到角色)、aws iam put-role-policy(为角色添加内联策略)、aws iam get-role(获取角色详情)、aws iam list-roles(列出所有角色)、aws iam simulate-principal-policy(测试策略权限)、aws sts assume-role(代入角色并获取临时凭证)、aws sts get-caller-identity(获取当前身份)。常用标志:--query(用 JMESPath 过滤输出)、--output table(人类可读输出)、--no-cli-pager(脚本中禁用分页器)。
最佳实践
安全方面:不要用根账户执行日常任务;为所有人类用户启用 MFA;使用角色而非长期访问密钥;应用最小权限,只授予所需权限;使用条件按 IP、时间或 MFA 限制访问;定期轮换凭证;使用权限边界进行委派管理。
策略设计方面:从 AWS 托管策略开始,按需定制;使用策略变量(如 ${aws:username})实现动态策略;对敏感操作优先使用显式拒绝;按逻辑对相关权限分组。
监控方面:启用 CloudTrail 进行 API 审计;使用 IAM Access Analyzer 识别过于宽松的策略;定期审查凭证报告;为根账户使用设置告警。
故障排查
- 访问被拒错误(AccessDeniedException 或 UnauthorizedAccess):验证身份(
aws sts get-caller-identity);检查附加策略(aws iam list-attached-role-policies --role-name MyRole);模拟操作(aws iam simulate-principal-policy指定 policy-source-arn、action-names、resource-arns);检查 SCP 或权限边界中的显式拒绝;确认基于资源的策略允许该主体。 - 角色无法被代入(调用 AssumeRole 时 AccessDenied):原因可能是信任策略未包含调用主体、调用方缺少 sts:AssumeRole 权限、ExternalId 不匹配(跨账户角色)、会话时长超过上限。修复方法是审查并更新角色的信任关系。
- 策略大小限制:托管策略 6,144 字符;内联策略 2,048 字符(用户)、10,240 字符(角色/组);信任策略 2,048 字符。解决方案是使用多个策略、按前缀/通配符引用资源,或使用基于标签的访问控制。
适用场景与限制
适用于 AWS 环境中的身份与权限管理、策略编写、跨账户访问配置、服务角色创建以及权限问题排查。资料未提供该技能的具体安装方式、收费模式、支持平台或效果说明,这些信息暂未提供。