TocConsulting/iam-activity-tracker

GitHub: TocConsulting/iam-activity-tracker

一个全面的无服务器 AWS 解决方案,用于跨所有区域追踪和审计 IAM、STS 及控制台登录等身份活动,提供实时安全告警与长期合规分析。

Stars: 10 | Forks: 0

IAM Activity Tracker

# IAM 活动追踪器 [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Python Version](https://img.shields.io/badge/python-3.13-blue)](https://www.python.org/downloads/) [![AWS SAM](https://img.shields.io/badge/AWS-SAM-orange)](https://aws.amazon.com/serverless/sam/) [![Security](https://img.shields.io/badge/security-audit-green)](https://github.com/TarekCheikh-Org/my-iam-activity-trakcer) [![Serverless](https://img.shields.io/badge/serverless-✓-brightgreen)](https://aws.amazon.com/serverless/) 一个全面的无服务器 AWS 解决方案,用于跨所有区域追踪和审计 IAM、STS 和 AWS 控制台登录活动。具有通过免费的 CloudTrail 事件历史记录进行实时收集、结合 S3 + Athena 进行高级分析以及自动化安全告警等功能。使用 AWS SAM、Lambda、DynamoDB 和可选的 Parquet 分析构建。 ## 概述 IAM 活动追踪器提供对您 AWS 账户中身份验证和授权活动的全面监控,帮助您: - 追踪谁创建、修改或删除了 IAM 资源 - 监控角色扮演和凭证使用情况 - 检测可疑的身份验证模式和失败的登录尝试 - 监控 AWS 控制台登录活动,包括 root 账户使用情况 - 生成合规性报告和审计追踪 - 将事件数据保留时间延长至 CloudTrail 90 天限制之后 - 针对可疑活动进行实时安全告警 ## 功能 ### 事件收集 - **多区域支持**:自动追踪 IAM 事件 (us-east-1)、STS 事件(所有区域)、控制台登录事件(全球)以及 SSO/Identity Center 事件 - **全面覆盖**:监控 IAM、STS、signin.amazonaws.com 和 sso.amazonaws.com 事件源 - **SSO 追踪**:全面支持 AWS SSO/Identity Center 管理事件(权限集、账户分配、策略附加) - **增量处理**:通过 checkpoint 管理仅处理自上次运行以来的新事件 - **初始收集**:首次运行可收集长达 90 天的 CloudTrail 历史事件 - **并行处理**:使用多线程进行快速区域查询(最多 32 个并发线程) - **实时存储**:使用带有 GSI 的 DynamoDB 进行即时用户和操作查询 - **智能过滤**:自动过滤掉 AWS 服务关联角色的干扰,同时保留与安全相关的事件 - **无服务器**:无需管理基础设施,采用完全事件驱动的架构 - **安全告警**:针对 root 使用、身份验证失败、权限提升、SSO 管理操作等提供实时 SNS 通知 ### 分析与报告 - **S3 数据湖**:可选每日以优化的 Parquet 格式导出到 S3 - **Athena 集成**:使用标准 SQL 查询数年的数据 - **预构建查询**:15 个即用型安全与合规查询(包括 6 个特定于 SSO 的查询) - **双输出格式**:所有查询均支持表格格式(精选字段,无截断)和 JSON 格式(完整数据) - **成本优化**:S3 生命周期策略自动归档旧数据 - **查询工具**:提供 Python CLI 以编程方式运行分析,具备灵活的输出选项 ### 运维 - **高性价比**:对于大多数组织,在 AWS 免费额度内运行 - **可定制计划**:可配置的收集和导出频率 - **全面监控**:为所有函数提供 CloudWatch 告警 - **轻松部署**:单条命令的 SAM 部署 ## 架构 ### 完整系统概述 ``` ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ EventBridge │────▶│ Tracker Lambda │────▶│ DynamoDB │ │ (Hourly) │ │(Multi-threaded) │ │ (Events) │ └─────────────────┘ └──────────────────┘ └─────────────────┘ │ │ ▼ ▼ ┌──────────────────┐ ┌─────────────────┐ │ CloudTrail Event │ │Security Alerts │ │ History API │ │ (SNS) │ │ (Free 90 days) │ └─────────────────┘ └──────────────────┘ │ ▼ ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ EventBridge │────▶│ Export Lambda │ │ DynamoDB │ │ (Daily) │ │ (Parquet) │ │ (Control) │ └─────────────────┘ └──────────────────┘ └─────────────────┘ │ ▼ ┌──────────────────┐ ┌─────────────────┐ │ S3 Bucket │────▶│ Athena + Glue │ │ (Data Lake) │ │ (Analytics) │ └──────────────────┘ └─────────────────┘ │ │ ▼ ▼ ┌──────────────────┐ ┌─────────────────┐ │ Lifecycle Rules │ │ Query Tools │ │(CostOptimization)│ │ (Python) │ └──────────────────┘ └─────────────────┘ ``` ### 数据流 1. **收集**:Tracker Lambda 每小时跨所有区域查询 CloudTrail 2. **存储**:事件存储在 DynamoDB 中以供实时查询 3. **导出**:导出 Lambda 将每日数据转换为 S3 中的 Parquet 格式 4. **分析**:Glue 爬虫程序发现分区,Athena 启用 SQL 查询 5. **优化**:S3 生命周期规则归档旧数据以降低成本 ## 前置条件 - 具有适当权限的 AWS 账户 - 已安装并配置好 AWS CLI - 已安装 SAM CLI([安装指南](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html)) - 您的 AWS 区域支持 Python 3.13 runtime - 适用于 Python 3.13 的 AWS SDK Pandas Layer(已在模板中自动配置) ### 所需的 IAM 权限 要部署和操作 IAM 活动追踪器,您的 AWS 用户/角色需要以下权限: - **CloudFormation**:拥有创建、更新和删除堆栈的完全访问权限 - **Lambda**:创建、更新函数和执行角色 - **DynamoDB**:创建表、索引和管理数据 - **S3**:创建存储桶和管理对象(如果启用了分析功能) - **EventBridge**:创建和管理规则 - **CloudWatch**:创建日志组和告警 - **IAM**:创建和管理服务角色与策略 - **Glue**:创建数据库、表和爬虫程序(如果启用了分析功能) 对于部署,您可以使用 AWS 托管策略 `PowerUserAccess`,或者创建一个包含这些特定权限的自定义策略。 ## 快速开始 ### 1. 克隆仓库 ``` git clone https://github.com/TocConsulting/iam-activity-tracker cd iam-activity-tracker ``` ### 2. 部署解决方案 ``` make deploy ``` ![Make 帮助](https://raw.githubusercontent.com/TocConsulting/iam-activity-tracker/main/assets/IAM-Activity-Tracker-Deploy.png) 部署将会: - 构建 Lambda 函数 - 为部署构件创建 S3 存储桶(如果需要) - 部署 CloudFormation 堆栈 - 设置所有必需的资源 - **自动提供初始化系统的提示**(推荐) **立即初始化** 部署完成后,系统会询问您是否要立即初始化。这将会: 1. 收集多达 90 天的历史 CloudTrail 事件(1-5 分钟) 2. 将数据以 Parquet 格式导出到 S3(如果启用了分析功能) 3. 自动设置 Athena 表 4. 运行 Glue 爬虫程序以发现分区 **如果不进行初始化,您将需要等待 25 小时以上才能使用分析功能!** ### 3. 查看可用命令 ``` make help ``` ![Make 帮助](https://raw.githubusercontent.com/TocConsulting/iam-activity-tracker/main/assets/IAM-Activity-Tracker-Help.png) 这里展示了所有可用的命令,包括部署、查询和实用工具。 ## 部署选项 ### 标准部署(推荐) ``` export AWS_REGION=us-east-1 export AWS_PROFILE=production make deploy # 在提示初始化时选择 'Y' ``` 这提供了最佳的用户体验,可以立即访问分析数据。 ### 不带初始化的部署 ``` make deploy # 在提示初始化时选择 'n' ``` 如果您想等待计划的收集任务(1 小时 + 24 小时)完成,请使用此选项。 ### 稍后初始化 ``` make init ``` 在部署后的任何时候运行此命令,以收集历史数据并设置分析。 ## AWS 服务事件过滤 默认情况下,追踪器会过滤掉 AWS 服务关联角色事件,以减少干扰并专注于与安全相关的活动。 ### 什么会被过滤? 事件将根据 CloudTrail 的 `userIdentity.type` 字段进行过滤: ``` { "userIdentity": { "type": "AWSService", "invokedBy": "elasticloadbalancing.amazonaws.com" } } ``` ### 为什么要过滤 AWS 服务事件? AWS 服务会产生数千个日常运维事件,这些事件在安全监控中属于干扰信息: - **数据量**:可占 IAM/STS 事件总量的 80-90% - **运维性质**:并不代表用户或应用程序的安全活动 - **成本**:会增加 DynamoDB 存储和处理成本 - **告警疲劳**:使得发现真正的安全事件变得更加困难 ## 针对 CSPM 和安全工具的角色过滤 追踪器支持过滤掉会产生过多干扰的特定角色,这对于云安全态势管理 (CSPM) 工具和安全扫描器尤为有用。 ### 常见用例 过滤掉以下角色: - **CSPM 工具**:PrismaCloud、Wiz、Orca、Dome9、CloudHealth - **安全扫描器**:Qualys、Rapid7、Tenable - **合规工具**:AWS Config 规则、自定义合规检查器 - **监控工具**:DataDog、New Relic、Splunk 采集器 ### 配置 在部署或更新期间设置 `FilteredRoles` 参数: ``` # 部署期间 sam deploy --parameter-overrides FilteredRoles="PrismaCloudRole,WizSecurityRole,*Scanner*" # 或在部署前导出 export FILTERED_ROLES="PrismaCloud*,Wiz*,OrcaSecurityRole,*CSPM*" make deploy ``` ### 过滤模式语法 此过滤器支持多种模式类型: 1. **精确角色名**:`SecurityAuditRole` 2. **通配符**:`*SecurityScanner*`、`CSPM-*`、`*-audit-role` 3. **完整 ARN**:`arn:aws:iam::123456789012:role/PrismaCloudRole` 4. **多个模式**:以逗号分隔的列表 ### 什么会被过滤? 当某个角色匹配您的过滤模式时: - 该角色的 **AssumeRole 事件** 将不会被存储 - 该扮演角色会话执行的 **所有后续操作** 都将被过滤 - 事件会被计数,但不会存储在 DynamoDB 中 - 过滤指标将包含在 Lambda 执行日志中 ### 配置示例 ``` # 过滤常见的 CSPM 工具 FilteredRoles="PrismaCloud*,WizSecurityRole,OrcaSecurityRole,Dome9-Connect" # 按 pattern 过滤 FilteredRoles="*SecurityScanner*,*CSPM*,*Compliance*" # 过滤特定的 ARN FilteredRoles="arn:aws:iam::123456789012:role/SecurityAudit,arn:aws:iam::123456789012:role/CloudHealth" # 混合 patterns FilteredRoles="PrismaCloud*,*Scanner*,arn:aws:iam::123456789012:role/SpecificRole" ``` ### 监控已过滤的事件 Lambda 响应包含过滤统计信息: ``` { "total_events_processed": 1500, "total_events_filtered": 8500, // Events filtered out "execution_time_seconds": 45.2 } ``` 这有助于您了解过滤的影响,并验证您的模式是否正常工作。 ## 配置选项 ### 环境变量 #### 核心配置 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `STACK_NAME` | iam-activity-tracker | CloudFormation 堆栈名称 | | `AWS_REGION` | us-east-1 | 部署区域 | | `LOG_LEVEL` | INFO | 日志详细程度 (DEBUG/INFO/WARNING/ERROR) | #### 收集设置 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `SCHEDULE_EXPRESSION` | rate(1 hour) | 收集事件的频率 | | `MAX_WORKERS` | 16 | 处理区域的最大并发线程数 | | `PROCESS_IAM_EVENTS` | true | 追踪 IAM 事件 (us-east-1) | | `PROCESS_STS_EVENTS` | true | 追踪 STS 事件(所有区域) | | `PROCESS_SIGNIN_EVENTS` | true | 追踪 AWS 控制台登录事件 (us-east-1) | | `PROCESS_SSO_EVENTS` | true | 追踪 AWS SSO/Identity Center 事件 | | `SSO_REGION` | us-east-1 | SSO 事件的主区域 | | `FILTER_AWS_SERVICE_EVENTS` | true | 过滤掉 AWS 服务关联角色事件 | | `FILTERED_ROLES` | '' | 以逗号分隔的要过滤的角色名称/模式列表(例如:`PrismaCloud*,WizRole,*SecurityScanner*`)。支持通配符 (*) | #### 分析配置 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `ENABLE_ANALYTICS` | true | 启用 S3 导出和 Athena 集成 | | `EXPORT_SCHEDULE_EXPRESSION` | rate(1 day) | 导出到 S3 的频率 | | `EXPORT_DAYS_BACK` | 1 | 每次运行导出的天数 | #### 安全告警配置 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `ENABLE_SECURITY_ALERTS` | true | 通过 SNS 启用安全告警 | | `ALERTS_EMAIL_ADDRESS` | '' | 接收安全告警的电子邮件地址(在部署期间设置,或留空以跳过) | | `OFF_HOURS_START` | 22 | 非工作时间告警的开始小时(24 小时制) | | `OFF_HOURS_END` | 6 | 非工作时间告警的结束小时(24 小时制) | ### 计划选项 #### 收集频率 - `rate(1 hour)` - 每小时(推荐用于活跃环境) - `rate(6 hours)` - 每 6 小时(注重成本的选择) - `rate(12 hours)` - 每天 2 次(最基础的活跃监控) - `rate(1 day)` - 每天 1 次(以归档为重点) #### 导出频率 - `rate(6 hours)` - 每 6 小时(近实时分析) - `rate(12 hours)` - 每天 2 次 - `rate(1 day)` - 每天(推荐用于大多数用例) - `rate(7 days)` - 每周(针对大型数据集进行成本优化) ## 成本分析 ### 免费额度覆盖(仅限 DynamoDB) 对于小型组织(<100 用户,<50 服务角色): - **DynamoDB**:$0(在 25GB 免费存储空间、25 RCU/WCU 范围内) - **Lambda**:$0(在 100 万次调用、400,000 GB-秒范围内) - **CloudTrail**:$0(使用免费的 90 天事件历史记录 API) - **CloudWatch**:$0(在免费额度限制范围内) - **总计**:$0/月 ### 启用分析后 (S3 + Athena) #### 小型组织 - **核心组件**:$0(免费额度) **S3 存储**:约 $0.50-2/月(取决于数据保留情况) - **Athena 查询**:约 $0.10-1/月(取决于查询频率) - **总计**:$0.60-3/月 #### 中型组织(500-1000 用户) - **DynamoDB**:$2-5/月(超出免费额度) - **Lambda**:$0-2/月(增加导出的执行时间) - **S3 存储**:$2-8/月(数据量更大,经生命周期优化) - **Athena**:$1-5/月(更频繁的分析) - **总计**:$5-20/月 #### 大型组织(1000+ 用户) - **DynamoDB**:$10-25/月 - **Lambda**:$2-10/月 - **S3 存储**:$5-20/月(配置了生命周期策略) - **Athena**:$5-15/月 - **Glue**:$1-5/月(爬虫程序执行) - **总计**:$23-75/月 **注意**:成本不包含 SNS 告警(极少,约每 1000 封邮件 $0.10) ### 成本优化功能 1. **S3 生命周期策略**:自动将数据转移到更便宜的存储类别 - Standard (30 天) → Standard-IA (90 天) → Glacier (365 天) → Deep Archive - 对于较早的数据,可降低 80-95% 的存储成本 2. **Parquet 格式**:比 JSON 小 70-90%,从而降低存储和查询成本 3. **分区数据**:Athena 仅扫描相关分区,降低查询成本 4. **条件部署**:如果只需要实时监控,可禁用分析 ## 查询数据 ### 实时查询 (DynamoDB) 非常适合查询近期数据(过去 30-90 天)和进行运维监控。 #### 使用 AWS 管理控制台 1. 在 AWS 管理控制台中导航到 DynamoDB 2. 选择事件表(例如 `iam-activity-tracker-events`) 3. 使用 Query 或 Scan 加筛选条件 #### 使用 AWS CLI ``` # 按用户查询事件 aws dynamodb query \ --table-name iam-activity-tracker-events \ --index-name user_name-index \ --key-condition-expression "user_name = :username" \ --expression-attribute-values '{":username":{"S":"alice.johnson"}}' # 按操作查询事件 aws dynamodb query \ --table-name iam-activity-tracker-events \ --index-name event_name-index \ --key-condition-expression "event_name = :eventname" \ --expression-attribute-values '{":eventname":{"S":"CreateUser"}}' ``` ### 分析查询 (Athena) 非常适合历史分析、合规报告和复杂查询。 #### 快速设置 **选项 1:自动(推荐)** 系统会在部署初始化期间自动设置 Athena。 **选项 2:手动设置** 如果您跳过了初始化,请在首次导出后运行此命令: ``` make setup-athena ``` **选项 3:稍后初始化** 如果您部署时未进行初始化,随时可以运行此命令: ``` make init ``` ![设置 Athena](https://raw.githubusercontent.com/TocConsulting/iam-activity-tracker/main/assets/IAM-Activity-Tracker-Setup-Athena.png) #### 预构建的安全查询 ``` # 列出所有可用查询 make list-queries # 运行特定的安全分析(表格格式 - 默认) make run-query Q=failed_auth # Failed authentication attempts make run-query Q=root_usage # Root account activity make run-query Q=off_hours # After-hours access make run-query Q=active_users # Most active users make run-query Q=permission_changes # IAM permission modifications make run-query Q=role_assumptions # Role usage patterns make run-query Q=daily_summary # Compliance reporting # SSO/Identity Center 查询 make run-query Q=sso_permission_sets # SSO permission set changes make run-query Q=sso_account_assignments # Account access grants make run-query Q=sso_admin_policies # Admin policy attachments make run-query Q=sso_admin_users # SSO administrators make run-query Q=sso_activity_summary # SSO usage overview # 用于获取完整数据的 JSON 格式(所有查询均支持这两种格式!) make run-query Q=failed_auth FORMAT=json # Any IAM query make run-query Q=root_usage FORMAT=json make run-query Q=sso_account_assignments FORMAT=json # Any SSO query make run-query Q=sso_admin_policies FORMAT=json make run-query Q=active_users FORMAT=json # Any analytics query ``` #### 输出格式 **所有查询均支持两种输出格式:** - **表格格式(默认)**:显示经过精心挑选的字段,并进行了优化以防止截断。非常适合快速分析和报告。 - **JSON 格式**:返回包含所有可用字段的完整数据。非常适合详细调查或数据导出。 ``` # 示例 - 每个查询都适用于这两种格式 make run-query Q=user_lookup # Table format (default) make run-query Q=user_lookup FORMAT=table # Explicit table format make run-query Q=user_lookup FORMAT=json # JSON format with all fields make run-query Q=sso_admin_policies # Table format (default) make run-query Q=sso_admin_policies FORMAT=json # Complete data ``` #### 直接使用 Athena 控制台 对于更喜欢直接使用 AWS Athena 控制台的用户,所有查询均以即用型 SQL 的形式提供: ``` # 以 SQL 格式查看所有查询 cat queries/analytics_queries.sql # 将任何查询直接复制/粘贴到 Athena 控制台 # 查询使用默认表:iam_activity_tracker_database.iam_events ``` `queries/analytics_queries.sql` 文件包含所有 15 个标准 SQL 格式的查询,与 Python 实现同步。非常适合用于: - **自定义修改**:根据特定要求编辑查询 - **学习**:了解每种安全分析背后的 SQL 逻辑 - **集成**:与 CLI 之外的其他工具结合使用 ![可用查询](https://raw.githubusercontent.com/TocConsulting/iam-activity-tracker/main/assets/IAM-Activity-Tracker-List-Queries.png) **查询输出示例:** ![失败的身份验证查询](https://static.pigsec.cn/wp-content/uploads/repos/cas/3c/3c38ef01db7b0d3d34b75d4fe4d8eec0a7e420a1140e2cb7107b2c73513dacce.png) #### 自定义 SQL 查询 ``` -- Recent failed authentication attempts SELECT substr(event_time, 1, 10) as event_date, user_name, source_ip, event_name, error_code, COUNT(*) as failure_count FROM iam_activity_tracker_database.iam_events WHERE substr(event_time, 1, 10) >= cast(current_date - INTERVAL '7' DAY as varchar) AND error_code IS NOT NULL AND error_code != '' AND event_name IN ('ConsoleLogin', 'AssumeRole', 'GetSessionToken') GROUP BY 1, 2, 3, 4, 5 ORDER BY failure_count DESC; -- Permission changes by user SELECT user_name, event_name, COUNT(*) as change_count, MIN(substr(event_time, 1, 10)) as first_change, MAX(substr(event_time, 1, 10)) as last_change FROM iam_activity_tracker_database.iam_events WHERE substr(event_time, 1, 10) >= cast(current_date - INTERVAL '30' DAY as varchar) AND event_name IN ( 'AttachUserPolicy', 'DetachUserPolicy', 'AttachGroupPolicy', 'DetachGroupPolicy', 'AttachRolePolicy', 'DetachRolePolicy', 'CreateUser', 'DeleteUser', 'CreateRole', 'DeleteRole', 'PutUserPolicy', 'DeleteUserPolicy' ) GROUP BY user_name, event_name ORDER BY change_count DESC; -- Role assumption patterns SELECT JSON_EXTRACT_SCALAR(request_parameters, '$.roleArn') as role_arn, user_name, COUNT(*) as assumption_count, COUNT(CASE WHEN error_code IS NOT NULL AND error_code != '' THEN 1 END) as failed_count FROM iam_activity_tracker_database.iam_events WHERE substr(event_time, 1, 10) >= cast(current_date - INTERVAL '30' DAY as varchar) AND event_name = 'AssumeRole' AND JSON_EXTRACT_SCALAR(request_parameters, '$.roleArn') IS NOT NULL GROUP BY 1, 2 ORDER BY assumption_count DESC LIMIT 20; ``` ### 输出示例 该工具为所有查询提供丰富且格式化的输出,并附带执行指标: ![查询输出示例](https://static.pigsec.cn/wp-content/uploads/repos/cas/3c/3c38ef01db7b0d3d34b75d4fe4d8eec0a7e420a1140e2cb7107b2c73513dacce.png) ### 查询对比 | 功能 | DynamoDB | Athena | |---------|----------|--------| | **最适合** | 实时、近期数据 | 历史分析、复杂查询 | | **时间范围** | 所有数据(默认无 TTL) | 所有已导出的数据 | | **查询语言** | DynamoDB Query/Scan | 标准 SQL | | **性能** | 毫秒级 | 秒到分钟级 | | **成本** | 适用于免费额度 | 按扫描的 TB 数量付费 | | **复杂性** | 简单筛选 | 复杂的连接、聚合 | ## 监控 ### CloudWatch 告警 该解决方案包含针对以下内容的 CloudWatch 告警: - **Tracker Lambda**:错误和过长的执行时间(>4 分钟) - **导出 Lambda**:错误和过长的执行时间(>13 分钟) ### 查看日志 ``` # 通过自动格式化查看 tracker Lambda 日志 make logs # 查看特定的 log group make logs | grep ERROR # Filter for errors make logs | grep CRITICAL # Filter for critical alerts ``` ### 健康检查 ``` # 检查 stack 状态和输出 make status # 测试特定查询 make run-query Q=failed_auth ``` ## 维护 ### 数据保留 默认情况下,事件会无限期保留。要启用自动删除: 1. 编辑 `template.yaml` 2. 将 TTL 配置添加到 IAMEventsTable 3. 重新部署堆栈 ### 更新解决方案 ``` # 拉取最新更改 git pull # 更新部署 make update ``` ## 故障排除 ### 数据收集问题 1. **“Access Denied” 错误** - 确保 Lambda 具有在所有区域读取 CloudTrail 的权限 - 验证 CloudTrail 是否已启用(检查 AWS 管理控制台 → CloudTrail) - 检查附加到追踪器 Lambda 角色的 IAM 策略 2. **追踪器 Lambda 执行时间过长** - 如果遇到 API 速率限制,请减少 MAX_WORKERS - 考虑增加计划时间间隔以降低频率 - 检查 CloudWatch 指标以查看是否有限流 3. **事件丢失** - 验证 PROCESS_IAM_EVENTS 和 PROCESS_STS_EVENTS 是否为 true - 检查 CloudWatch 日志中是否存在特定于区域的错误 - 确保可以访问所有必需的 AWS 区域 ### 分析问题 4. **S3 存储桶中无数据** - 检查导出 Lambda 日志是否存在错误 - 验证 ENABLE_ANALYTICS 是否设置为 true - 确保在导出运行前 DynamoDB 中已存在数据 - 检查 S3 存储桶权限 5. **Athena 查询未返回结果** - 运行 Glue 爬虫程序以发现新分区: aws glue start-crawler --name iam-activity-tracker-crawler - 验证 Athena 表定义中的 S3 数据位置 - 检查分区投影配置 6. **Athena 成本过高** - 在测试期间的查询中使用 LIMIT - 添加日期筛选器以减少扫描的数据量 - 检查查询执行计划 - 考虑进行分区修剪 7. **导出 Lambda 超时** - 减小 EXPORT_DAYS_BACK 以减少每次运行处理的天数 - 增加 Lambda 内存(当前为 2048MB) - 检查 DynamoDB 是否存在限流问题 ### 性能优化 8. **查询性能缓慢** - 在 DynamoDB 中使用适当的索引 - 在 Athena 查询中添加分区筛选器 - 考虑在 Athena 中使用列式投影 9. **成本优化** - 启用 S3 生命周期策略(自动配置) - 如果不需要实时分析,则降低查询频率 - 使用 Athena 工作组设置查询限制 ### 调试模式 要启用详细日志记录,请更新 CloudFormation 堆栈参数: - 在部署期间将 `LogLevel` 参数设置为 `DEBUG` ### 验证命令 ``` # 检查 DynamoDB 表 aws dynamodb describe-table --table-name iam-activity-tracker-events # 检查 S3 bucket(如果启用了分析) aws s3 ls s3://iam-activity-tracker-analytics-ACCOUNT_ID/iam-events/ --recursive | head -5 # 测试查询 make run-query Q=daily_summary ``` ## 安全注意事项 - Lambda 函数仅具有对 CloudTrail 的只读访问权限 - DynamoDB 表进行了静态加密 - 日志中不包含任何凭证或敏感数据 - 遵循最小权限原则 ## 卸载 要移除所有资源: ``` make destroy ``` **警告**:这将删除所有收集到的事件数据! **重要**:如果启用了分析功能,请在运行销毁命令前手动清空 S3 存储桶: ``` aws s3 rm s3://iam-activity-tracker-analytics-ACCOUNT_ID/ --recursive aws s3 rm s3://iam-activity-tracker-athena-results-ACCOUNT_ID/ --recursive ``` ## 贡献 欢迎贡献!请: 1. Fork 本仓库 2. 创建一个功能分支 3. 提交一个 pull request ## 许可证 该项目基于 MIT 许可证授权 - 详情请参阅 LICENSE 文件。 ## 支持 如有问题或疑问: 1. 查看故障排除部分 2. 查看 CloudWatch 日志 3. 在仓库中提出一个 issue ## 可用查询 ### 预构建查询(共 15 个) #### IAM 和安全查询 1. `user_lookup` - 用户活动模式 2. `failed_auth` - 失败的身份验证尝试 3. `root_usage` - Root 账户活动 4. `off_hours` - 非工作时间访问(晚上 10 点 - 早上 6 点) 5. `active_users` - 最活跃的用户 6. `permission_changes` - IAM 策略修改 7. `role_assumptions` - 角色使用模式 8. `daily_summary` - 每日活动汇总 9. `hourly_activity` - 高峰使用分析 #### SSO/Identity Center 查询 10. `sso_permission_sets` - 追踪 SSO 权限集的创建和更新 11. `sso_account_assignments` - 监控谁正在获得对哪些 AWS 账户的访问权限 12. `sso_admin_policies` - 追踪危险的管理策略附加操作 13. `sso_applications` - 监控第三方应用程序集成 14. `sso_admin_users` - 识别进行 SSO 配置更改的用户 15. `sso_activity_summary` - SSO 使用模式和错误率 ### 安全告警(8 项功能) 1. Root 账户活动(登录/失败) 2. IAM 用户创建 3. 管理员策略附加 4. 危险的内联策略 5. 访问密钥创建 6. 角色信任策略问题 7. 访问密钥更新 8. MFA 设备更改 ## 文件结构 ``` iam-activity-tracker/ ├── assets/ # Screenshots and documentation │ ├── Failed_Auth.png │ └── List_Queries.png ├── functions/ # Lambda function code │ ├── tracker/ # Real-time event collection │ │ ├── handler.py # Main tracker Lambda │ │ ├── cloudtrail_processor.py │ │ ├── dynamodb_operations.py │ │ ├── security_alerts.py # SNS alerting logic │ │ └── requirements.txt │ └── exporter/ # S3 analytics export │ ├── export_handler.py # Export Lambda │ ├── parquet_processor.py │ ├── s3_operations.py │ ├── dynamodb_operations.py │ └── requirements.txt ├── queries/ # Analytics tools │ ├── athena_utilities.py # Athena integration │ ├── query_runner.py # CLI query tool │ ├── analytics_queries.sql # Pre-built SQL queries │ ├── setup.sh # Python environment setup │ └── requirements.txt ├── scripts/ # Operational scripts │ ├── deploy.sh # Deployment script │ ├── destroy.sh # Cleanup script │ ├── logs.sh # View Lambda logs │ ├── run-query.sh # Query execution wrapper │ ├── setup-athena.sh # Athena table setup │ ├── status.sh # Stack status check │ ├── test-alerts.sh # Test alert system │ └── validate.sh # Template validation ├── template.yaml # SAM deployment template ├── Makefile # Build automation ├── Architecture.md # Detailed system design └── README.md # This file ``` 为 AWS 安全社区而构建
标签:AWS, C语言, DPI, IAM审计, Python, 云安全监控, 无后门, 自动化告警, 逆向工具, 静态分析