AWS账户在尝试指定的登录失败次数后,无法创建“锁定策略”来锁定用户。为了增强AWS账户安全性,本文将利用Amazon Lambda和Amazon SQS结合Amazon CloudWatch Event实现自定义密码重试锁定策略以增强AWS IAM用户安全,并满足用户需要PCI-DSS或等保认证的审核条款。
PCI-DSS认证条款对需要具备lockout功能的描述:
list | describe |
---|---|
PCI Requirement 8.1.6 | Limit Repeated Access Attempts by Locking Out User ID After No More Than Six Attempts |
PCI Requirement 8.1.7 | Set lockout duration to a minimum of 30 minutes or until an administrator enables the user ID. |
整个架构全部由无服务器服务构建,用到了Amazon Lambda、Amazon SQS、Amazon CloudWatch Event、Amazon SNS服务,一经部署不需要用户维护底层架构。
实现的功能如下:
-
默认在60s内对console登陆消息进行统计一次,如果一个用户在1分钟内超过5次的错误登陆,将对该用户进行锁定
-
直到管理员手工解锁用户,否则该用户将无法继续登陆控制台
-
在锁定账户的同时,可以触发通知信息,通知管理员对应的锁定信息发生以便进行干预操作或审计操作
-
所有锁定操作都会记录在lambda的cloudwatch日志中,可以通过日志对关闭操作进行分析
因为AWS海外控制台的默认Amazon CloudWatch Event事件生成在us-east-1,所以所有的服务部署在us-east-1
1.1 进入到Amazon SQS控制台选择:创建队列
1.2 默认选择队列类型为:标准
1.3 填入队列名称,例如:lockout.sqs
1.4 在配置项中,修改如下两个参数,将可见性超时事件设置为5分钟,将消息保留周期设置为5分钟
1.5 其他选择默认,然后点击:创建队列
2.1 在控制台选择创建创建函数
2.2 填入函数名称,例如:lockout
2.3 运行时:选择python3.7
2.4 点击创建函数
2.5 在函数代码区域,将代码库中内容lockout.py替换lambda_function.py的内容(注:替换里面的queue_url为上一步创建的SQS队列的url)
2.6 在基本设置中,根据实际情况编辑内存大小,例如100M,超时时间设为5分钟
2.7 完成lambda函数创建
2.8 创建完lambda后,修改lambda绑定role的权限,需要附加读取Amazon SQS消息和IAM服务DeleteLoginProfile的权限
lockout.py
3.1 在控制台进入Amazon Cloudwatch event规则菜单
3.2 点击创建规则
3.3 服务名称选择:AWS控制台登录
3.4 添加目标,选择 SQS队列名称,其它选择默认,点击下一步
3.4 填入规则名称,例如:lockoutrule1
3.5 点击创建规则
3.6再创建另外一条规则
3.7 选择类型为“计划”类型
3.8 固定频率选择1分钟
3.9 添加目标,选择lambda函数,选择上面创建的lambda函数lockout
3.10 下一步填入名称:例如:lockoutrule2
3.11 点击创建规则
选择合适的测试用户,在控制台登录接入连续输入多次错误密码(默认5次失败锁定,可以在lockout.py中修改),然后在IAM控制台查看对应用户是否被取消了控制台登录权限。在CloudWatch logs中可以看到具体Lambda函数判断和锁定用户的详细日志。