AWS IAM角色最佳实践
Amazon Web Services(AWS)作为领先的云服务提供商,提供从简单实例机器到无服务器数据集成服务的广泛工具套件。虽然AWS提供数百种独立服务,但统一管理它们的是AWS身份和访问管理(IAM)。
AWS的设计理念要求每个实体都需要权限才能访问和使用资源与服务。这些实体涵盖从用户、虚拟机到原生AWS服务的所有对象。甚至内置的AWS服务也需要权限才能访问其他AWS服务。这种设计哲学使IAM成为一切的核心,而IAM的主要功能——IAM角色——则定义了权限和特权。
什么是IAM角色?
IAM角色是可在账户中创建的具有特定权限的IAM身份。它与IAM用户类似,都是具有权限策略的AWS身份,决定该身份在AWS中的操作范围。但角色不与特定个人关联,而是可由任何需要它的人担任。角色没有长期凭证(控制台密码、标准访问密钥),而是通过安全令牌服务(STS)获取短期凭证。每次服务主体想要担任角色时,都会调用STS,如果获得许可,将收到包含临时安全令牌的响应。
服务主体可分为用户和服务两类:
- 用户角色:代表个人的实体,具有名称和相关凭证
- 服务角色:包括代表您执行操作的原生AWS服务(服务链接角色)和在AWS服务上运行的应用程序(自定义IAM角色)
识别与保护最佳实践
1. 锁定AWS账户根用户
创建AWS账户时,初始身份拥有账户中所有AWS服务和资源的完全访问权限,称为根用户。根用户凭证泄露将造成严重损害。
建议措施:
- 不使用根用户执行日常任务,仅用于创建IAM管理员用户
- 禁用或删除根用户的访问密钥
- 为根用户设置强密码或随机密码
- 强制启用多因素认证
2. 优先使用IAM角色但限制使用范围
对于用户: 使用SAML 2.0角色,通过信任策略文档限制访问,仅允许符合特定SAML属性(如隶属关系)的用户,并基于源IP地址限制访问。
示例信任策略:
|
|
对于EC2实例和Lambda函数: 使用条件(如aws:SourceVpc)确保角色仅限于来自受信任VPC的资源。
3. 管理任务的实时访问
传统身份验证提供持久访问权限,而"实时访问"方法为关键权限提供临时提升访问权限。每次用户调用访问时,需要识别并记录业务原因。建议通过实时系统限制以下IAM操作:
|
|
检测最佳实践
1. 检测IAM角色枚举
攻击者使用多种技术枚举AWS账户的IAM角色:
- 暴力破解sts assume-role:通过监控CloudTrail日志中的连续失败请求进行检测
- UpdateAssumeRolePolicy方法:攻击者尝试为受害者账户中的角色提供担任其账户角色的权限,此技术仅在攻击者账户中生成CloudTrail日志
2. 检测可疑访问
通过以下指标识别可疑活动:
- IP地址监控:检查IP声誉和混淆技术(如TOR或代理服务)
- 可疑用户代理:识别攻击性安全操作系统(如Kali Linux)
- 多重登录/超人登录:检测不可能的地理位置登录
推荐使用Amazon Guard Duty进行检测。
3. 检测IAM权限提升技术
监控可能用于权限提升的IAM事件,包括:
用户事件:
- iam:CreateUser, iam:CreateLoginProfile, iam:AddUserToGroup
- iam:UpdateProfile, iam:PutUserPolicy, iam:AttachUserPolicy
组事件:
- iam:CreateGroup, iam:PutGroupPolicy
角色事件:
- iam:CreateRole, iam:CreateInstanceProfile, iam:PutRolePolicy
- iam:AttachRolePolicy, iam:UpdateAssumeRolePolicy
策略事件:
- iam:CreatePolicy, iam:CreatePolicyVersion
响应与修复
自动化事件响应
及时响应是关键,自动化事件响应是实现这一目标的最佳方式。推荐使用基于无服务器函数的事件驱动解决方案,如CloudBots项目。
适用场景包括:
- 删除根用户访问密钥:使用iam_delete_access_key.py
- 撤销权限提升:使用iam_detach_policy.py或iam_quarantine_role.py
典型自动化事件响应解决方案可基于CloudTrail日志、CloudWatch警报、SNS和运行在Lambda上的CloudBots构建。
通过实施这些最佳实践,可以显著提升AWS环境的安全性,有效管理IAM角色和权限,确保云基础设施的安全运行。