AWS CloudTrail 集成
本指南介绍如何将 AWS CloudTrail 连接到 KYRA MDR,以实时监控您的 AWS 环境。KYRA MDR 分析 CloudTrail 事件以检测未授权访问、错误配置和可疑 API 活动。
前提条件
- 具有管理员访问权限的活跃 AWS 帐户(或创建角色和 S3 存储桶通知的 IAM 权限)
- 在您的 AWS 帐户中启用了 CloudTrail(管理事件默认启用)
- 具有活跃订阅的 KYRA MDR 帐户
架构概览
AWS CloudTrail → S3 Bucket → SNS Topic → KYRA Cloud Sensor → KYRA MDR Platform (polls S3)KYRA MDR 使用跨帐户 IAM 角色从您的 S3 存储桶读取 CloudTrail 日志。在 KYRA 读取之前,您的数据始终在您的控制之下。
步骤 1:为 KYRA 创建 IAM 角色
创建一个跨帐户 IAM 角色,允许 KYRA MDR 读取您的 CloudTrail 日志。
使用 AWS 控制台
- 前往 IAM > Roles > Create Role
- 选择 Another AWS account
- 输入 KYRA MDR 的 AWS 帐户 ID:
123456789012(在控制台 > 设置 > 云集成中提供) - 勾选 Require external ID 并输入控制台中显示的 External ID
- 点击 Next 并附加以下策略
IAM 策略
创建名为 KYRAMDRCloudTrailReadOnly 的自定义策略:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudTrailBucketAccess", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::your-cloudtrail-bucket", "arn:aws:s3:::your-cloudtrail-bucket/AWSLogs/*" ] }, { "Sid": "AllowSNSSubscription", "Effect": "Allow", "Action": [ "sns:Subscribe", "sns:ConfirmSubscription" ], "Resource": "arn:aws:sns:*:*:your-cloudtrail-topic" }, { "Sid": "AllowCloudTrailDescribe", "Effect": "Allow", "Action": [ "cloudtrail:DescribeTrails", "cloudtrail:GetTrailStatus", "cloudtrail:LookupEvents" ], "Resource": "*" } ]}信任策略
角色的信任策略应如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/KYRACloudSensor" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "your-external-id-from-console" } } } ]}使用 AWS CLI
# 创建策略aws iam create-policy \ --policy-name KYRAMDRCloudTrailReadOnly \ --policy-document file://kyra-policy.json
# 使用信任策略创建角色aws iam create-role \ --role-name KYRAMDRRole \ --assume-role-policy-document file://kyra-trust-policy.json
# 附加策略aws iam attach-role-policy \ --role-name KYRAMDRRole \ --policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/KYRAMDRCloudTrailReadOnly步骤 2:配置 CloudTrail
如果您还没有多区域 CloudTrail 跟踪,请创建一个:
创建跟踪(如需要)
aws cloudtrail create-trail \ --name kyra-mdr-trail \ --s3-bucket-name your-cloudtrail-bucket \ --is-multi-region-trail \ --enable-log-file-validation \ --sns-topic-name your-cloudtrail-topic
aws cloudtrail start-logging --name kyra-mdr-trail启用数据事件(可选但推荐)
数据事件提供 S3 对象级别和 Lambda 调用活动的可见性:
aws cloudtrail put-event-selectors \ --trail-name kyra-mdr-trail \ --event-selectors '[ { "ReadWriteType": "All", "IncludeManagementEvents": true, "DataResources": [ { "Type": "AWS::S3::Object", "Values": ["arn:aws:s3"] }, { "Type": "AWS::Lambda::Function", "Values": ["arn:aws:lambda"] } ] } ]'注意: 数据事件可能产生大量数据并产生额外的 CloudTrail 费用。建议先从管理事件开始,按需添加数据事件。
步骤 3:在 KYRA 控制台中连接
- 打开 KYRA MDR 控制台
- 前往 设置 > 集成 > 添加集成
- 选择 AWS CloudTrail
- 输入:
- AWS Account ID:您的 12 位 AWS 帐户 ID
- IAM Role ARN:
arn:aws:iam::YOUR_ACCOUNT_ID:role/KYRAMDRRole - S3 Bucket Name:您的 CloudTrail S3 存储桶
- S3 Region:存储桶所在区域(例如
ap-northeast-2为首尔) - SNS Topic ARN(可选):用于实时通知
- 点击 Test Connection — KYRA 将尝试承担角色并列出存储桶
- 点击 Save
步骤 4:验证事件
检查集成状态
在控制台中,前往 设置 > 集成。AWS CloudTrail 集成应显示:
- 状态:已连接
- 最后同步:最近 5 分钟内
- 已处理事件:计数递增
搜索 AWS 事件
- 前往 日志搜索
- 按
source_type:aws-cloudtrail过滤 - 您应看到以下事件:
ConsoleLogin— AWS 控制台登录AssumeRole— 角色承担事件RunInstances— EC2 实例启动CreateBucket— S3 存储桶创建
生成测试事件
# 创建并删除测试安全组(生成 CloudTrail 事件)SG_ID=$(aws ec2 create-security-group --group-name kyra-test --description "KYRA test" --output text --query 'GroupId')aws ec2 delete-security-group --group-id $SG_ID在 5-15 分钟内(CloudTrail 传输延迟),您应在 KYRA MDR 中看到 CreateSecurityGroup 和 DeleteSecurityGroup 事件。
所需权限摘要
| 权限 | 用途 |
|---|---|
s3:GetObject | 从 S3 读取 CloudTrail 日志文件 |
s3:ListBucket | 列出新日志文件用于采集 |
sns:Subscribe | 订阅实时 CloudTrail 通知 |
cloudtrail:DescribeTrails | 发现跟踪配置 |
cloudtrail:GetTrailStatus | 检查跟踪健康状态 |
cloudtrail:LookupEvents | 查询最近事件用于初始同步 |
KYRA MDR 使用只读访问。我们绝不修改您的 AWS 资源或 CloudTrail 配置。
检测规则
KYRA MDR 包含针对 AWS CloudTrail 的内置检测规则:
| 检测 | 事件名称 | MITRE ATT&CK | 描述 |
|---|---|---|---|
| Root 帐户使用 | ConsoleLogin(root) | T1078.004 | 检测到 Root 帐户登录 |
| IAM 用户创建 | CreateUser | T1136.003 | 新 IAM 用户创建 |
| MFA 已禁用 | DeactivateMFADevice | T1556 | 帐户的 MFA 被移除 |
| 安全组开放 | AuthorizeSecurityGroupIngress | T1562.007 | 添加了 0.0.0.0/0 入站规则 |
| CloudTrail 已禁用 | StopLogging | T1562.008 | 跟踪日志已停止 |
| S3 存储桶公开 | PutBucketPolicy | T1530 | 存储桶策略允许公共访问 |
| 异常区域 | 任意 | T1535 | 来自异常 AWS 区域的 API 调用 |
| 访问密钥泄露 | 来自异常 IP 的 GetCallerIdentity | T1528 | 可能的凭据泄露 |
多帐户设置
对于拥有多个帐户的 AWS Organizations,您可以使用集中式 CloudTrail 和组织跟踪:
- 在管理帐户中启用 Organization Trail
- 所有成员帐户事件流向单个 S3 存储桶
- 仅在管理帐户中创建 KYRA IAM 角色
- KYRA MDR 将采集所有帐户的事件
aws cloudtrail create-trail \ --name kyra-org-trail \ --s3-bucket-name your-org-cloudtrail-bucket \ --is-organization-trail \ --is-multi-region-trail故障排除
连接测试失败
- 角色 ARN 正确? 仔细检查帐户 ID 和角色名称
- External ID 匹配? 信任策略中的 External ID 必须与控制台匹配
- 信任策略? Principal 必须是 KYRA 的 AWS 帐户,而非您自己的
- S3 存储桶存在? 验证存储桶名称和区域
未出现事件
- CloudTrail 活跃? 运行
aws cloudtrail get-trail-status --name your-trail— 检查IsLogging: true - S3 权限? 验证正确的存储桶和路径上的
s3:GetObject和s3:ListBucket - 传输延迟:CloudTrail 每约 5-15 分钟向 S3 传输日志 — 事件并非实时
- 区域不匹配? 确保控制台中的 S3 区域与实际存储桶区域匹配
费用过高
第一个跟踪的 CloudTrail 管理事件免费。数据事件按每 100,000 个事件收费。要降低费用:
- 先从管理事件开始(默认)
- 使用事件选择器过滤特定 S3 存储桶或 Lambda 函数
- 如果写入事件已足够,排除只读数据事件