AWS Key disabler:AWS IAM用户访问密钥安全保护工具

news/2024/5/6 7:05:19

关于AWS Key disabler

AWS Key disabler是一款功能强大的AWS IAM用户访问密钥安全保护工具,该工具可以通过设置一个时间定量来禁用AWS IAM用户访问密钥,以此来降低旧访问密钥所带来的安全风险。

工具运行流程

AWS Key disabler本质上是一个Lambda函数,可以通过下列工作流来实现其功能:

工具要求

当前版本的AWS Key disabler脚本需要使用到下列组件:

1、Node.js和NPM;

2、Gruntjs;

3、AWS CLI命令行工具;

4、启用SWS、验证域名并移除沙盒模式的AWS账号;

开发者工具链

工具安装

注意,下列安装命令仅适用于macOS,Windows和*nix的安装命令可能会有一些区别。

首先,我们需要使用下列命令将该项目源码克隆至本地:

git clone https://github.com/te-papa/aws-key-disabler.git

切换到/grunt目录中,设置Grunt任务运行器,并安装相关依赖:

cd grunt/npm install

然后在/grunt/package.json文件中添加下列信息:

1、设置AWS账号的aws_account_number值;

2、设置first_warning和last_warning,即触发警报邮件(发送至report_to)的天数时间;

3、设置expiry,即密钥超时天数,如果超时,则会通过电子邮件向用户发送提醒;

4、设置serviceaccount,即需要脚本忽略的账户用户名;

5、设置exclusiongroup,即需要脚本忽略的分配给用户的组名;

6、设置send_completion_report值为True以通过SES发送通知邮件;

7、设置report_to,即用于接收警报和报告的邮件地址;

8、设置report_from,即用于发送警告邮件和报告的邮件地址;

9、设置deployment_region,即支持Lambda支持的区域;

接下来,确保命令行接口已经成功连接到了AWS,可以使用下列命令验证连接是否成功:

aws iam get-user

在命令行接口中,切换到/grunt目录中,并运行下列命令即可完成工具部署:

grunt bumpup && grunt deployLambda

工具使用

使用AWS CLI从命令行接口手动调用Lambda函数

我们可以直接使用函数名称来调用Lambda函数,并将扫描文件的输出结果存储到scan.report.log文件中:

aws lambda invoke --function-name AccessKeyRotation scan.report.log --region us-east-1
{"StatusCode": 200}

使用jq即可在命令行窗口中查看scan.report.log文件中的内容:

jq '.' scan.report.log
{"reportdate": "2016-06-26 10:37:24.071091","users": [{"username": "TestS3User","userid": "1","keys": [{"age": 72,"changed": false,"state": "key is already in an INACTIVE state","accesskeyid": "**************Q3GA1"},{"age": 12,"changed": false,"state": "key is still young","accesskeyid": "**************F3AA2"}]},{"username": "BlahUser22","userid": "2","keys": []},{"username": "LambdaFake1","userid": "3","keys": [{"age": 23,"changed": false,"state": "key is due to expire in 1 week (7 days)","accesskeyid": "**************DFG12"},{"age": 296,"changed": false,"state": "key is already in an INACTIVE state","accesskeyid": "**************4ZASD"}]},{"username": "apiuser49","userid": "4","keys": [{"age": 30,"changed": true,"state": "key is now EXPIRED! Changing key to INACTIVE state","accesskeyid": "**************ER2E2"},{"age": 107,"changed": false,"state": "key is already in an INACTIVE state","accesskeyid": "**************AWQ4K"}]},{"username": "UserEMRKinesis","userid": "5","keys": [{"age": 30,"changed": false,"state": "key is now EXPIRED! Changing key to INACTIVE state","accesskeyid": "**************MGB41A"}]},{"username": "CDN-Drupal","userid": "6","keys": [{"age": 10,"changed": false,"state": "key is still young","accesskeyid": "**************ZDSQ5A"},{"age": 5,"changed": false,"state": "key is still young","accesskeyid": "**************E3ODA"}]},{"username": "ChocDonutUser1","userid": "7","keys": [{"age": 59,"changed": false,"state": "key is already in an INACTIVE state","accesskeyid": "**************CSA123"}]},{"username": "ChocDonut2","userid": "8","keys": [{"age": 60,"changed": false,"state": "key is already in an INACTIVE state","accesskeyid": "**************FDGD2"}]},{"username": "admin.skynet@cyberdyne.systems.com","userid": "9","keys": [{"age": 45,"changed": false,"state": "key is already in an INACTIVE state","accesskeyid": "**************BLQ5GJ"},{"age": 71,"changed": false,"state": "key is already in an INACTIVE state","accesskeyid": "**************GJFF53"}]}]}

使用样例一

aws lambda list-functionsopenssl dgst -binary -sha256 ..\Releases\AccessKeyRotationPackage.1.0.18.zip | openssl base64aws lambda invoke --function-name AccessKeyRotation report.log --region us-east-1jq '.' report.logjq '.users[] | select(.username=="johndoe")' report.logjq '.' report.log | grep age | cut -d':' -f2 | sort -n

使用样例二

jq 'def maximal_by(f): (map(f) | max) as $mx | .[] | select(f == $mx); .users | maximal_by(.keys[].age)' report.logjq 'def minimal_by(f): (map(f) | min) as $mn | .[] | select(f == $mn); .users | minimal_by(.keys[].age)' report.log

终端用户输出结果

许可证协议

本项目的开发与发布遵循ISC开源许可证协议。

项目地址

AWS Key disabler:【GitHub传送门】

参考资料

Node.js — Run JavaScript Everywhere

Grunt: The JavaScript Task Runner

Command Line Interface - AWS CLI - AWS

https://portal.aws.amazon.com/gp/aws/manageYourAccount

AWS Services by Region - AWS


http://www.mrgr.cn/p/22037368

相关文章

2024-04-23 闲话

2024-04-23 闲话郭军凯脱单之后,朋友圈频率大大提升。从一年一条提升到一个月一条了。前两天他把qq头像给换了(似乎现在微信头像也换了),因为我们三个人的qq群头像是三个人各自头像拼起来的,车昱辉点开qq给他雷击了一下。那天我正复习物理还是高代还是数分还是赶组会ddl忘…

@ComponentScan注解的实现,Spring扫描包的过程

相信接触过spring做开发的小伙伴们一定使用过@ComponentScan注解 @ComponentScan("com.wangm.lifecycle") public class AppConfig {}@ComponentScan指定basePackage,将包下的类按照一定规则注册成Bean。 但是这个注解的其他参数,比如excludeFilters、includeFilte…

C语言指针+-整数、指针-指针、指针关系运算、指针和数组、二级指针、指针数组

文章目录 前言一、指针 - 整数二、指针 - 指针三、指针的关系运算四、指针和数组五、二级指针六、指针数组指针数组可以将几个一维数组模拟成二维数组 总结 前言 C语言指针整数、指针-指针、指针关系运算、指针和数组、二级指针、指针数组等介绍,还包括指针数组将几…

【vue】el-tree的新增/编辑/删除节点

1、概述 关于树形结构的新增同级节点&#xff0c;新增子级节点&#xff0c;修改节点名称&#xff0c;删除节点等四种操作&#xff0c;各种参数配置完全继承el-tree&#xff0c;本篇使用vue2 element-ui 2、效果图展示 3、调用方式 <template><Tree:data"tree…

Java常见输入输出练习

1.AB(1) 计算ab 数据范围&#xff1a; 数据组数 1≤ t ≤100 , 数据大小满足 1≤ n ≤1000 输入描述&#xff1a; 输入包括两个正整数a,b(1 < a, b < 1000),输入数据包括多组。 输出描述&#xff1a; 输出ab的结果 输入例子&#xff1a; 1 5 10 20 输出例子&#xff…

IDEA安装插件【Database navigation】并连接数据库

IDEA安装插件Database navigation 快捷键 Ctrl+alt+s打开搜索插件-安装并重启如果安装过程中下载较慢 解决措施:win+R --> CMD打开执行 ping plugins.jetbrains.com再次打开idea就可以飞速下载了 IDEA使用Database连接数据库--mysql 1. 下载驱动 https://downloads.mysql.c…

Abaqus2024 安装教程(附免费安装包资源)

鼠标右击软件压缩包&#xff0c;选择“解压到Abaqus2024”。 鼠标右击“此电脑”&#xff0c;选择“属性”。 点击“高级系统设置”。 点击“环境变量”。 点击“新建”。 变量名输入&#xff1a;NOLICENSECHECK 变量值输入&#xff1a;true 然后点击“确定”。 点击“确定”。…

利用ollama和open-webui本地部署通义千问Qwen1.5-7B-Chat模型

目录 1 安装ollama 2 安装open-webui 2.1 镜像下载 3 配置ollama的模型转换工具环境 3.1 下载ollama源码 3.2 下载ollama子模块 3.3 创建ollama虚拟环境 3.4 安装依赖 3.5 编译量化工具 7 创建ollama模型 8 运行模型 参考文献&#xff1a; 1 安装ollama curl -fsSL …

力扣HOT100 - 2. 两数相加

解题思路&#xff1a; 缺位的节点进行补零处理&#xff0c;如97323补充为973023 注意相加的进位问题 class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode head null, tail null;int carry 0;while (l1 ! null || l2 ! null) {int n1 l…

Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?

大家好,我是Python进阶者。 一、前言 前几天在Python白银交流群【Jethro Shen】问了一个Python谷歌驱动下载的问题。二、实现过程 这里【Kim】和【Crazy】给了一个指导,如上图所示。说来奇怪,在链接中看了没有124 版本的,以前找114、96版本的,每次屡试不爽,现在最新的浏览…

关于开设RT-DETR专栏及更新内容的一些说明

​ 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 专栏介绍 YOLOv9作为最新的YOLO系列模型&#xff0c;对于做目标检测的同学是必不可少的。本专栏将针对2024年最新推出的YOLOv9检测模型&#xff0…

[题解]ARC176 A~B

赛时心态崩了,0pts遗憾离场……今天在学校冷静思考了下。发现B题思路其实很简单,不过A题怎么也没有想到,回来看了题解,其实思路也很简单,不过是自己思考方向错了。看来打比赛心态很重要,如果能冷静下来思考结果会好很多。 果然算法竞赛不能被常理所束缚(笑) A - 01 Mat…

Day08React——第八天

useEffect 概念&#xff1a;useEffect 是一个 React Hook 函数&#xff0c;用于在React组件中创建不是由事件引起而是由渲染本身引起的操作&#xff0c;比如发送AJAx请求&#xff0c;更改daom等等 需求&#xff1a;在组件渲染完毕后&#xff0c;立刻从服务器获取频道列表数据…

软件行业中的蓝海领域有哪些?

一、什么是蓝海&#xff1f; 蓝海&#xff0c;指的是未知的市场空间。这个概念相对于“红海”而言&#xff0c;红海则是指已知的市场空间。 企业要启动和保持获利性增长&#xff0c;就必须超越产业竞争&#xff0c;开创全新市场&#xff0c;这其中包括两块&#xff1a;一块是…

裤裤带你一起学C语言内存函数啦!

目录 1.memcpy的使用和模拟实现 2.memmove使用和模拟实现 3.memset函数的使用 4.memcmp函数的使用 内存函数在<string.h>库中&#xff0c;我们使用内存函数必须先引入<string.h>头文件 1.memcpy的使用和模拟实现 memcpy的函数原型如下&#xff1a; void * m…

20231325 贾罗祁 实验三《Python程序设计》实验报告

20231325贾罗祁 2023-2024-2《Python程序设计》实验三报告 课程:《Python程序设计》 班级: 2313 姓名: 贾罗祁 学号: 20231325 实验教师:王志强 实验日期:2024年4月17日 必修/选修: 公选课 1.实验内容创建服务端和客户端,服务端在特定端口监听多个客户请求。 客户端和服…

2024中国内燃机展-北京汽车发动机零部件展

2024第二十三届中国国际内燃机与零部件展览会 由中国内燃机工业协会主办、中国机床专用技术设备有限公司、汽车工艺装备成套开发集团协办的2024中国国际内燃机及动力装备博览会&#xff08;简称“动博会”&#xff09;将于2024年10月11日-13日在亦创国际会展中心隆重举办。本届…

mORMot2 的 Logger日志

mORMot2 的 Logger日志 Logger 很多框架都有,简单的实现就是一个队列加一根线,有复杂的,QDAC里面涉及的就很巧妙,本来QDAC就是个线程框架,所以也有先天优势。 在mORMot 里面自然也有日志实现,它设计的比较麻烦。mORMot 的Logger 初始化beginTSynLog.Family.Level := LOG_…

Servlet 详解

1. Servlet 1.1 Servlet 是什么 Servlet 就是 Tomcat 这个 HTTP 服务器提供给 Java 的一组 API&#xff0c;根据 用户不同 /时间不同 /输入的参数不同,来构建动态页面。不必关注 Socket, HTTP协议格式, 多线程并发等技术细节, 降低了 web app 的开发门槛, 提高了开发效率。 …

C#下使用正则表达式

常用元字符字符 描述\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,n 匹配字符 "n"。\n 匹配一个换行符。序列 \\ 匹配 "\" 而 "\(" 则匹配 "("。^ 匹配输入字符串的开始位置。如果…