跳至正文

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 控制台

  1. 前往 IAM > Roles > Create Role
  2. 选择 Another AWS account
  3. 输入 KYRA MDR 的 AWS 帐户 ID:123456789012(在控制台 > 设置 > 云集成中提供)
  4. 勾选 Require external ID 并输入控制台中显示的 External ID
  5. 点击 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

Terminal window
# 创建策略
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 跟踪,请创建一个:

创建跟踪(如需要)

Terminal window
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 调用活动的可见性:

Terminal window
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 控制台中连接

  1. 打开 KYRA MDR 控制台
  2. 前往 设置 > 集成 > 添加集成
  3. 选择 AWS CloudTrail
  4. 输入:
    • AWS Account ID:您的 12 位 AWS 帐户 ID
    • IAM Role ARNarn:aws:iam::YOUR_ACCOUNT_ID:role/KYRAMDRRole
    • S3 Bucket Name:您的 CloudTrail S3 存储桶
    • S3 Region:存储桶所在区域(例如 ap-northeast-2 为首尔)
    • SNS Topic ARN(可选):用于实时通知
  5. 点击 Test Connection — KYRA 将尝试承担角色并列出存储桶
  6. 点击 Save

步骤 4:验证事件

检查集成状态

在控制台中,前往 设置 > 集成。AWS CloudTrail 集成应显示:

  • 状态:已连接
  • 最后同步:最近 5 分钟内
  • 已处理事件:计数递增

搜索 AWS 事件

  1. 前往 日志搜索
  2. source_type:aws-cloudtrail 过滤
  3. 您应看到以下事件:
    • ConsoleLogin — AWS 控制台登录
    • AssumeRole — 角色承担事件
    • RunInstances — EC2 实例启动
    • CreateBucket — S3 存储桶创建

生成测试事件

Terminal window
# 创建并删除测试安全组(生成 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 中看到 CreateSecurityGroupDeleteSecurityGroup 事件。


所需权限摘要

权限用途
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 用户创建CreateUserT1136.003新 IAM 用户创建
MFA 已禁用DeactivateMFADeviceT1556帐户的 MFA 被移除
安全组开放AuthorizeSecurityGroupIngressT1562.007添加了 0.0.0.0/0 入站规则
CloudTrail 已禁用StopLoggingT1562.008跟踪日志已停止
S3 存储桶公开PutBucketPolicyT1530存储桶策略允许公共访问
异常区域任意T1535来自异常 AWS 区域的 API 调用
访问密钥泄露来自异常 IP 的 GetCallerIdentityT1528可能的凭据泄露

多帐户设置

对于拥有多个帐户的 AWS Organizations,您可以使用集中式 CloudTrail 和组织跟踪:

  1. 在管理帐户中启用 Organization Trail
  2. 所有成员帐户事件流向单个 S3 存储桶
  3. 仅在管理帐户中创建 KYRA IAM 角色
  4. KYRA MDR 将采集所有帐户的事件
Terminal window
aws cloudtrail create-trail \
--name kyra-org-trail \
--s3-bucket-name your-org-cloudtrail-bucket \
--is-organization-trail \
--is-multi-region-trail

故障排除

连接测试失败

  1. 角色 ARN 正确? 仔细检查帐户 ID 和角色名称
  2. External ID 匹配? 信任策略中的 External ID 必须与控制台匹配
  3. 信任策略? Principal 必须是 KYRA 的 AWS 帐户,而非您自己的
  4. S3 存储桶存在? 验证存储桶名称和区域

未出现事件

  1. CloudTrail 活跃? 运行 aws cloudtrail get-trail-status --name your-trail — 检查 IsLogging: true
  2. S3 权限? 验证正确的存储桶和路径上的 s3:GetObjects3:ListBucket
  3. 传输延迟:CloudTrail 每约 5-15 分钟向 S3 传输日志 — 事件并非实时
  4. 区域不匹配? 确保控制台中的 S3 区域与实际存储桶区域匹配

费用过高

第一个跟踪的 CloudTrail 管理事件免费。数据事件按每 100,000 个事件收费。要降低费用:

  • 先从管理事件开始(默认)
  • 使用事件选择器过滤特定 S3 存储桶或 Lambda 函数
  • 如果写入事件已足够,排除只读数据事件