AWS IAM角色最佳实践:全面解析云安全权限管理

本文深入探讨AWS IAM角色的核心概念与最佳实践,涵盖身份识别、权限控制、威胁检测和应急响应,包含具体策略配置示例和自动化解决方案,帮助构建安全的云基础设施。

AWS IAM 角色最佳实践

Amazon Web Services(AWS)作为领先的云服务提供商,提供从简单实例机器到无服务器数据集成服务的完整工具套件。虽然AWS上有数百种独立服务,但有一个服务统管全局:AWS身份和访问管理(IAM)。

根据设计,AWS是一个所有实体都需要权限才能访问和使用资源及服务的云平台。这些实体包括用户、虚拟机甚至原生AWS服务。是的,即使是内置的AWS服务也需要权限才能访问其他AWS服务。这种设计理念使IAM成为一切的核心,而IAM的主要功能——IAM角色——则定义了权限和特权。

什么是IAM角色?

IAM角色是您可以在账户中创建的具有特定权限的IAM身份。IAM角色类似于IAM用户,都是具有权限策略的AWS身份,这些策略决定了该身份在AWS中能做什么和不能做什么。但角色不与特定个人唯一关联,而是任何需要它的人都可以担任。角色没有长期凭证(控制台密码、标准访问密钥),只有通过安全令牌服务(STS)授予的短期凭证。

服务主体有多种类型可以担任IAM角色,可大致分为用户和服务两类:

  1. 用户角色:代表个人的实体,具有名称和相关凭证
  2. 服务角色:包括代表您执行操作的原生AWS服务,以及在AWS服务(如EC2和Lambda)上运行的应用程序。原生AWS服务预定义的角色称为"服务链接角色",而运行在EC2、Elastic Beanstalk或Lambda上的应用程序通常需要"自定义IAM角色"

识别与保护

1. 锁定AWS账户根用户

创建AWS账户时,您最初拥有一个对账户中所有AWS服务和资源具有完全访问权限的身份,称为AWS账户根用户。根用户凭证泄露的危害极大。

建议措施:

  • 不使用根用户执行日常任务,仅用其创建IAM管理员用户
  • 禁用或删除根用户的访问密钥
  • 为根用户设置强密码或随机密码
  • 强制执行多因素认证

2. 为所有服务主体优先使用IAM角色但限制其使用

对于用户: 推荐使用SAML 2.0角色,通过信任策略文档限制访问,仅允许符合特定SAML属性(如SAML关联)的用户,并使用aws:SourceIp条件限制源IP地址。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {"Federated": "arn:aws:iam::account-id:saml-provider/ExampleOrgSSOProvider"},
    "Action": "sts:AssumeRoleWithSAML",
    "Condition": {
      "StringEquals": {
        "saml:aud": "https://signin.aws.amazon.com/saml",
        "saml:iss": "https://openidp.feide.no"
      },
      "ForAllValues:StringLike": {"saml:edupersonaffiliation": ["staff"]},
      "StringEquals": { "aws:SourceIp" : "x.x.x.x" }
    }
  }]
}

对于EC2实例和Lambda函数: 使用aws:SourceVpc等条件确保角色仅限于来自受信任VPC的资源。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": { "Service": "ec2.amazonaws.com" },
    "Action": "sts:AssumeRole",
    "Condition": {
      "StringLike": {
        "aws:SourceVpc": "arn:${Partition}:ec2:${Region}:${Account}:vpc/${VpcId}"
      }
    }
  }]
}

3. 管理任务的即时访问

“即时"方法为关键权限提供临时提升访问权限。用户每次调用访问时都需要经过额外流程来识别和记录业务原因。建议通过即时系统阻止以下IAM操作:

1
2
3
"iam:Add*", "iam:Attach*", "iam:Create*", "iam:Deactivate*", 
"iam:Delete*", "iam:Detach*", "iam:Put*", "iam:Remove*", 
"iam:Set*", "iam:Update*", "iam:Upload*"

检测

1. 检测IAM角色枚举

攻击者使用多种技术枚举AWS账户的IAM角色:

  • 暴力破解sts assume-role:通过监控CloudTrail日志中连续的失败sts assume-role请求来检测
  • 使用UpdateAssumeRolePolicy方法:更隐蔽的方法,仅在攻击者账户中生成CloudTrail日志

2. 检测可疑访问

  • 监控IP地址:识别API调用的来源性质,特别是其声誉
  • 可疑用户代理:检查用户代理头参数,如发现Kali Linux等攻击性安全操作系统则为明显红旗
  • 多重登录/超人登录:检测从不同地理位置的不可行登录行为

3. 检测IAM权限提升技术

监控CloudTrail日志中的以下事件:

用户事件

1
2
iam:CreateUser, iam:CreateLoginProfile, iam:AddUserToGroup,
iam:UpdateProfile, iam:PutUserPolicy, iam:AttachUserPolicy

组事件

1
iam:CreateGroup, iam:PutGroupPolicy

角色事件

1
2
iam:CreateRole, iam:CreateInstanceProfile, iam:PutRolePolicy,
iam:AttachRolePolicy, iam:UpdateAssumeRolePolicy

策略事件

1
iam:CreatePolicy, iam:CreatePolicyVersion

响应与修复

自动化事件响应

及时响应是关键,自动化事件响应是实现这一目标的适当方式。推荐使用CloudBots进行以下用例:

  • 删除根用户的访问密钥:使用iam_delete_access_key.py删除未经授权的访问密钥
  • 撤销权限提升:使用iam_detach_policy.py分离IAM策略,或使用iam_quarantine_role.py添加显式拒绝所有

典型的自动化事件响应解决方案可以使用CloudTrail日志、CloudWatch警报、SNS和在Lambda上运行的CloudBots构建。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计