Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/te-papa/aws-key-disabler
配置审计云安全身份与访问管理 (IAM)
GitHubte-papa/aws-key-disabler

aws-key-disabler

一个小型 lambda 脚本,用于禁用超过指定天数的访问密钥。

查看仓库
1533635年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

AWS Lambda - IAM 访问密钥禁用器

KeyIcon图片

AWS 密钥禁用器是一个 Lambda 函数,用于在设定时间后禁用 AWS IAM 用户访问密钥,以减少旧访问密钥带来的风险。

AWS Lambda 架构

架构图片

面向最终用户的 SysOps 输出

iPhoneEmail图片

开发者工具链

工具链图片

当前限制

  • 包含扫描输出(json)的报告将发送给单个指定的系统管理员账户,请参考 /grunt/package.json 构建配置文件中的 report_to 属性。
  • 密钥仅被禁用,不会删除或替换

前提条件

该脚本运行需要以下组件。

  • 安装了 npm 的 Node.js https://nodejs.org/en/
  • 已安装 Gruntjs http://gruntjs.com/
  • 已安装 AWSCLI 命令行工具 https://aws.amazon.com/cli/

同时假设您拥有启用了 SES 的 AWS 账户,即域名已验证且已解除沙箱模式。

安装说明

以下说明适用于 OSX。在 Windows 和其他类 Unix 系统上可能有所不同。

  1. 获取此脚本的副本
  2. 进入 /grunt 文件夹
  3. 设置 Grunt 任务运行器,例如安装其依赖项:npm install
  4. 在 /grunt/package.json 中填写以下信息
    1. 将 aws_account_number 设置为您的 AWS 账户 ID,可在 https://portal.aws.amazon.com/gp/aws/manageYourAccount 找到
    2. 将 first_warning 和 last_warning 设置为触发警告的密钥天数。这些限制会触发向 report_to 发送电子邮件
    3. 将 expiry 设置为密钥过期的天数。在此天数时,密钥将被禁用,并会触发向 report_to 发送通知更改的电子邮件
    4. 将 serviceaccount 设置为您希望脚本忽略的账户用户名
    5. 将 exclusiongroup 设置为分配给您希望脚本忽略的用户的组名称
    6. 将 send_completion_report 设置为 True 以通过 SES 启用电子邮件投递

使用 AWSCLI 从命令行手动调用 Lambda 函数

通过名称 AccessKeyRotation 执行 Lambda 函数,并将扫描输出记录到名为 scan.report.log 的文件中:

aws lambda invoke --function-name AccessKeyRotation scan.report.log --region us-east-1

root@kitploit:~
{
    "StatusCode": 200
}

使用 jq 将 scan.report.log 的内容渲染到控制台:

jq '.' scan.report.log

root@kitploit:~
{
  "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": "[email protected]",
      "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"
        }
      ]
    }
  ]
}

附加配置选项

  • 您可以通过修改 key_disabler.keystates.<state>.message 下的值来选择每个警告和最终禁用所使用的消息。
  • 您可以通过 key_disabler.mask_accesskey_length 更改掩码长度。访问密钥长度为 20 个字符。

故障排除

此脚本按原样提供。我们乐于在时间允许的情况下回答问题,但无法做出任何承诺。

如果出现问题,请确保:

  • 您能够使用 AWSCLI 命令行工具成功通过 AWS 身份验证
  • SES 未处于沙箱模式且发件人域名已验证
  • 所选区域同时提供 Lambda 和 SES https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/

加分项

Lambda 函数成功部署后,可以执行以下命令:

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

额外加分项

  1. jq 'def maximal_by(f): (map(f) | max) as $mx | .[] | select(f == $mx); .users | maximal_by(.keys[].age)' report.log
  2. jq 'def minimal_by(f): (map(f) | min) as $mn | .[] | select(f == $mn); .users | minimal_by(.keys[].age)' report.log
下载工具
  • 将 report_to 设置为您希望接收删除报告的电子邮件地址
  • 将 report_from 设置为您希望用作删除报告发件人地址的电子邮件地址。请注意,该域名需要在 AWS SES 中验证
  • 将 deployment_region 设置为支持 Lambda 的区域
  • 将 email_region 设置为支持 SES 的区域。同时确保该区域的 SES 沙箱模式已禁用
    • 请参考 AWS 区域表 https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/
  • 确保您能够通过 CLI 成功连接到 AWS,例如运行 aws iam get-user 验证连接是否成功
  • 在 /grunt 目录下运行 grunt bumpup && grunt deployLambda 以升级版本号并执行 Lambda 函数的构建/部署到所选区域