在此页面上,我们将引导您了解如何将每个 AWS 服务的日志加载到 Amazon OpenSearch Service 上的 SIEM。 按照以下步骤配置每个 AWS 服务。
- 基本配置
- 安全身份与合规
- Amazon GuardDuty
- Amazon Inspector
- AWS Directory Service
- AWS WAF
- AWS Security Hub - Still not support in AWS China Region (该功能在China Region不支持)
- AWS Network Firewall - Still not support in AWS China Region (该功能在China Region不支持)
- 管理与治理
- 网络及内容交付
- 存储
- 数据库
- 分析
- 计算
- 容器
- 最终用户计算
- 多区域 / 多账户
- 从现有的S3存储桶加载
SIEM on Amazon OpenSearch Service 根据在S3 存储桶上的对象名称和路径名确定相对应的日志类型。 有的AWS服务服务导出日志到S3存储桶的路径,默认的是带输出路径或文件名的。但如果要输出到 S3 的文件路径与默认值不同,请创建 user.ini 并将您自己的文件名或 S3 对象键添加到“s3_key”项中,以进行自定义的映射。 有关如何编辑 user.ini 的信息,请参阅 [Change SIEM on OpenSearch Service Settings] (configure_siem_zh.md)。
当然您也可以自定义设置输出路径到 S3 存储桶,请在输出路径(前缀)中包含您的 AWS 账户 ID 和区域 (Region)。这些信息将被附加到日志中。但是如果该信息已包含在日志中,则将优先考虑日志中的信息。
如果您想使用 AWS Key Management Service (AWS KMS) 加密存储在 S3 存储桶中的文件,请使用 OpenSearch on Amazon Service 部署时自动创建的 AWS KMS 客户管理密钥。默认情况下,KMS Key别名为 aes-siem-key。您还可以使用现有的 AWS KMS 客户管理密钥,在这种情况下,请参考高级部署 (deployment_zh.md)。
此处描述的 AWS 帐户是 123456789012。根据需要将其替换为您的 AWS 账户ID。
s3_key 初始值: GuardDuty
(其为缺省输出路径中的一部分)
- 登录 AWS 管理控制台
- 导航到 GuardDuty 控制台
- 从左侧导航栏中选择 [Settings]
- 跳到 [Findings export options] 部分
- Frequency for updated finding :选择[Update CWE and S3 every 15 minutes],然后选择[Save](推荐)
- S3存储桶选择[Configure now]并输入以下参数 :
- 选择 [Existing bucket In your account]
- Choose a bucket :选择[aes-siem-123456789012-log]
- 将 123456789012 替换为您的 AWS 账户 ID
- Log file prefix :保持空白,无需输入任何值
- KMS encryption :选择 [Choose key from your account]
- Key Alias :选择 [aes-siem-key]
- 点击 [Save]
配置现已完成。 选择 [Generate sample findings] 以验证是否已成功加载。
由于 EventBridge在China Region 还未支持Kinesis Firehose集成,所以SIEM on Amazon OpenSearch Service还不能在China Region支持 Inspector服务。
s3_key 初始值 : /DirectoryService/MicrosoftAD/
(在 Firehose 输出路径中指定)
- 导航至 Directory Service Console 并转发日志到CloudWatch。
- 使用如下的Cloudformation 文件进行配置。
AWS WAF 有两种类型 :AWS WAF 和 AWS WAF Classic。 这两种服务都可以以相同的方式将两者的日志输出到 S3 存储桶。
s3_key 的初始值 :aws-waf-logs-
AWS WAF ACL 流量日志从 Kinesis Data Firehose 导出到 S3 存储桶。 Kinesis Data Firehose 名称必须以 [aws-waf-logs-] 开头,并且由于在输出到 S3 存储桶时文件名中包含此前缀,因此我们使用它来确定日志类型。
首先,部署 Kinesis Data Firehose
- 导航至 Amazon Kinesis 管理界面并选择 AWS WAF 所部署的 Region
- 在左侧的导航栏选择 [Delivery streams], 进入页面后点击 [Create delivery stream] 按钮。
- 在 [New delivery stream] 界面, 输入如下参数:
- Source: 选择 [Direct PUT or other sources]
- Destination: 选择 [Amazon S3]
- 在 [Transform and convert records - optional] 界面, 选择如下参数:
- Data transformation: [Disabled]
- Record format conversion: [Disabled]
- 选择 [Next]
- 在 [Choose a destination] 界面, 选择或输入如下参数:
- S3 bucket: [aes-siem-123456789012-log]
- 使用您自己的AWS Account ID 替换 123456789012
- S3 前缀: 输入 [AWSLogs/123456789012/WAF/region/]
- S3 错误 前缀: Enter [AWSLogs/123456789012/WAF/region/error/]
- 使用您自己的AWS Account ID 替换 123456789012,使用您当前使用的 Region ID 替换, 例如 (cn-northwest-1) .
- S3 bucket: [aes-siem-123456789012-log]
- 在 [Buffer hints, compression and encryption] 界面, 输入如下参数:
- Buffer size: 选择 5 MiB 或者自定义值 [any number]
- Buffer interval: 选择300 seconds或者输入 [any number]
- S3 compression: 选择 [GZIP]
- 其他参数保持默认值
- 选择 [Next]
- 点击 [Create delivery stream]
- 导航至 WAFv2 console
- 在左侧的导航菜单中选择 [Web ACLs]
- 从屏幕中央的下拉菜单中,选择您部署 WAF 所在的 [region] ,例如 China(BeiJing) 或者 China(Ningxia), => 然后选择 Web ACLS
- 在 [Logging and metrics] 便签页中选择 => [Enable logging] => 选择 Kinesis Data Firehose steam
- 在 [Amazon Kinesis Data Firehose Delivery Stream] 下拉菜单中, 选择 [你所创建的Kinesis Firehose]
- 选择 [Save] 完成配置。
由于 EventBridge在China Region 还未支持Kinesis Firehose集成,所以SIEM on Amazon OpenSearch Service还不能在China Region支持 Security Hub服务。
由于 AWS Network Firewall 尚未在China Region发布,所以SIEM on Amazon OpenSearch Service还不能在China Region支持 AWS Network Firewall服务。
s3_key的初始值 :CloudTrail/
或CloudTrail-Insight/
(默认输出路径的一部分)
按照以下步骤将 CloudTrail 日志输出到 S3 存储桶 :
- 登录 AWS 管理控制台
- 导航到 CloudTrail 控制台
- 从左窗格中选择 [Trails] => 选择右上角的 [Create trail]。
- 在[选择路径属性]界面输入以下参数。
- Trail Name :[aes-siem-trail]
- Enable for all accounts in my organization :任何(如果该字段为灰色且您无法选中该框,请跳过此步骤)
- Storeage location :勾选[Use existing S3 bucket]
- 选择 [aes-siem-123456789012-log]
- 将 123456789012 替换为您的 AWS 账户 ID
- Prefix - optional : 留空,不需要输入任何值。
- Log file SSE-KMS encryption :建议勾选[Enabled]
- AWS KMS customer managed :选择 [Existing]
- AWS KMS alias :选择 [aes-siem-key]
- Log file validation :建议勾选[Enable]
- SNS notification delivery :不要勾选启用[Enabled]
- CloudWatch Logs :不要勾选启用
- Tag : 可输入任意值
- 选择 [Next]
- 在 [Choose log events] 界面, 输入如下参数:
- Event type
- Management events: [checked]
- Data events: 可以勾选,也可以不勾选
- Insights events: 可以勾选,也可以不勾选
- Management events
- API activity: 选择 [Read] 和 [Write]
- Exclude AWS KMS events: 可以勾选,也可以不勾选
- Event type
- 选择 [Next]
- 选择 [Create trail]
s3_key初始值:(TrustedAdvisor |trustedadvisor)
无需设置初始值,Lambda函数将自动输出固定值。
No | CloudFormation | 概述 |
---|---|---|
1 | link | CloudFormation的基本设置。 用于获取日志转发目的地的S3存储桶名称并创建IAM role。常用于其他 AWS 服务的基本设置。 |
2 | link | 此模板用于创建Lambda函数。设置EventBridge以用于定期执行Lambda函数,并将Trusted Advisor的检查结果写入S3。 |
在 AWS Global,CloudFront 有两种日志格式。一种是标准日志(访问日志),另外一种是实时日志。 关于这两种日志的区别,请参考区别
但是在AWS China Region,只支持 Standard 日志。
s3_key 初始值: (^|\/)[0-9A-Z]{12,14}\.20\d{2}-\d{2}-\d{2}-\d{2}.[0-9a-z]{8}\.gz$$
日志类型由使用正则表达式的默认输出文件名来确定。 由于CloudFront标准日志不包含 AWS 账户 ID,因此您应该将它们包含在 S3 前缀中。
- 登录 AWS 管理控制台
- 导航至the Amazon CloudFront console
- 在左侧的导航栏选择 [Distribution]
- 选择 [Distribution ID] 后,在[Setting]部分中点击[Edit]按钮
- 在[Standard logging] 选择
- 勾选 [On]
- S3 bucket: [aes-siem-123456789012-log]
- 使用您的AWS account ID替换 123456789012
- Log prefix: [AWSLogs/123456789012/CloudFront/global/distribution ID/standard/]
- 使用您的AWS account ID替换 123456789012, 使用 “ditribution ID” 替换 distribution ID
- Cookie logging: 勾选[On]
- 点击 [Save Changes] 完成配置。
The initial value of s3_key: vpcdnsquerylogs
(part of the default output path)
- 导航至 Route 53 Resolver console
- 在左侧的导航栏选择 [Query logging]
- 在 [Configure query logging] 部分,输入如下参数:
- Name: Enter [any name]
- Destination for query logs: 选择 [S3 bucket]
- Amazon S3 bucket: 选择 [aes-siem-123456789012-log]
- 使用您的AWS account ID替换 123456789012。
- VPCs to log queries for: [Add any VPC]
- 选择 [Configure query logging] 完成配置。
s3_key的初始值:vpcflowlogs
(默认输出路径的一部分)
按照以下步骤将 VPC 流日志输出到 S3 存储桶:
-
登录 AWS 管理控制台
-
从左侧的导航栏选择 [VPC] 或者 [Subnet] => 选择需要开启VPC Flow Log的对象。
-
选择屏幕底部的 [Flow logs] 选项卡 => 选择 [Create flow log]
-
在创建流日志部分上输入以下参数
- Name: 可输入任何值
- Filter: 任意值, 但推荐选择 [All]
- Maximum aggregation interval: 任意值, 但将其设置为 1 分钟会增加日志量。
- Destination: 选择 [Send to an S3 bucket]
- S3 bucket ARN: [arn:aws-cn:s3:::aes-siem-123456789012-log]
- 使用您的AWS account ID替换 123456789012。
- Log record format: 勾选 [Amazon Web Services default format] 或 勾选 "Custom format" 并选择 "Log format".
- Tags: 任意值
-
Choose [Create flow log]
The initial value of s3_key: vpcflowlogs
(part of the default output path)
Follow the steps below to output VPC flow logs to the S3 bucket:
- Log in to the AWS Management Console
- Navigate to the Amazon VPC console
- Choose [Transit gateway] or [Transit gateway attachments] from the left pane => Check the box of the resource to load
- Choose the [Flow logs] tab at the bottom of the screen => Choose [ Create flow log]
- Enter the following parameters on the Create flow log screen
- Name: any name
- Destination: Check [Send to an S3 bucket]
- S3 bucket ARN: [arn:aws:s3:::aes-siem-123456789012-log]
- Replace 123456789012 with your AWS account ID
- Log record format: Check [AWS default format] or check "Custom format" and select "Log format".
- Log file format: any
- Hive-compatible S3 prefix: any
- Partition logs by time: any
- Tags: any
- Choose [Create flow log]
按照以下步骤将以下三个负载均衡器日志中的每一个输出到 S3 存储桶:
- Application Load Balancer(ALB)
- Network Load Balancer(NLB)
- Classic Load Balancer(CLB)
s3_key 的初始值由使用正则表达式的默认输出路径和文件名决定
- ALB:
elasticloadbalancing_.*T\d{4}Z_\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}_\w*\.log\.gz$$
- NLB:
elasticloadbalancing_.*T\d{4}Z_[0-9a-z]{8}\.log\.gz$$
- CLB:
elasticloadbalancing_.*T\d{4}Z_\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}_\w*\.log$$
- 登录 AWS 管理控制台
- 导航至 Amazon EC2 console
- 从左侧的导航栏选择 [Load balancers] => 选择要从中收集日志的目标负载均衡器的 [Check the box]
- 选择 [Description ] 标签页 => 针对 ALB/NLB/CLB 输入如下参数:
- 如果是 ALB/NLB 类型: 选择 [Edit attributes]
- Access logs: 选择 [Enable]
- S3 location: 输入 [aes-siem-123456789012-log]
- 使用您的AWS account ID替换 123456789012。
- Create this location for me: 不勾选
- 选择 [Save]
- 对于 CLB 类型: 选择 [Configure Access Logs]
- Enable access logs: [checked]
- Interval: 选择 [5 minutes or 60 minutes]
- S3 location: 输入 [aes-siem-123456789012-log]
- 使用您的AWS account ID替换 123456789012。
- Create this location for me: 不勾选
- 选择 [Save] 完成配置
- 如果是 ALB/NLB 类型: 选择 [Edit attributes]
s3_key 的初始值:aws-fsx-
Amazon FSx for Windows File Server 审核日志从 Kinesis Data Firehose 导出到 S3 存储桶。 Kinesis Data Firehose 名称必须以 [aws-fsx-] 开头,并且由于该前缀在输出到 S3 存储桶时包含在文件名中,因此我们使用它来确定日志类型。
- 使用如下的Cloudformation进行配置
- 导航至 FSx Console 把日志转发到 Firehose.
按照以下步骤将 S3 访问日志输出到 S3 存储桶。 如果您已经在使用 CloudTrail 数据事件捕获 S3 日志,请单击 此处 以查看与 S3 访问日志记录。
s3_key的初始值:s3accesslog
(没有标准的保存路径,所以使用前缀指定)
-
登录 AWS 管理控制台
-
导航到 Amazon S3 控制台
-
从存储桶列表中,选择要从中收集日志的 S3 存储桶。
-
选择 [Properties] 标签页 => [Server access logging]
- Check Enable logging
- Choose target bucket: aes-siem-123456789012-log
- 使用您的AWS account ID替换 123456789012。
- Target prefix: [AWSLogs/AWS account ID/s3accesslog/region/bucket name/ ]
- 务必确保在 Prefix 中包含 [s3accesslog]
- 选择 [Save]
- Erorr log - 错误日志
- Slow query log - 慢查询日志
- General log - 基本日志
- Audit log - 审计日志
s3_key 的初始值(在Firehose output path 路径中指定)
- Erorr log:
(MySQL|mysql|MariaDB|mariadb).*(error)
- Slow query log:
(MySQL|mysql|MariaDB|mariadb).*(slowquery)
- General log:
(MySQL|mysql|MariaDB|mariadb).*(general)
- Audit log:
(MySQL|mysql|MariaDB|mariadb).*(audit)
- Aurora User Guide / MySQL database log files
- RDS User Guide / MySQL database log files
- RDS User Guide / MariaDB database log files
- Using advanced auditing with an Amazon Aurora MySQL DB cluster
- How do I publish logs for Amazon RDS or Aurora for MySQL instances to CloudWatch?
- How can I enable audit logging for an Amazon RDS MySQL or MariaDB instance and publish the logs to CloudWatch?
s3_key 的初始值: Postgre
or postgre
(在Firehose output path 路径中指定)
- Aurora User Guide / PostgreSQL database log files
- RDS User Guide / PostgreSQL database log files
- How do I enable query logging using Amazon RDS for PostgreSQL?
- Configuring and authoring Kibana dashboards
- How can I track failed attempts to log in to my Amazon RDS DB instance that's running PostgreSQL?
s3_key 的初始值:KafkaBrokerLogs
(默认输出路径的一部分)
操作系统系统日志 -
s3_key的初始值:/[Ll]inux/
(在Firehose输出路径中指定)
安全日志 -
s3_key的初始值:[Ll]inux.?[Ss]ecure
(在Firehose输出路径中指定)
日志输出通过 Kinesis Data Firehose 发送,由于没有标准的保存路径,所以需要使用上面的 s3_key 作为 Kinesis Data Firehose 的目标 S3 存储桶的前缀。 由于Region信息不包含在日志中,因此您可以将Region信息其包含在 S3 Key中以捕获它。 加载安全日志有两种方式:将日志加载为操作系统系统日志,然后将其归类为安全日志; 或从一开始就将日志加载为安全日志。 前一种方法是通过进程名来确定安全日志的,所以选择后一种方法可以保证所有的安全日志都满载。 另一方面,后者要求您为每个日志设置Firehose为目的地。
请按照如下步骤配置
- 在Amazon Linux 2 的 EC2 实例中部署安装 CloudWatch Agent,具体步骤请参考 快速入门:在运行的 EC2 Linux 实例上安装和配置 CloudWatch Logs 代理
- 将日志转发到 CloudWatch Logs
- 使用 CloudWatch Logs 订阅将日志输出到 Firehose
- 选择 S3 存储桶作为 Firehose 输出的目的地
- 目标 S3 存储桶
- 将日志输出为操作系统日志的前缀:[AWSLogs/123456789012/EC2/Linux/[region]/]
- 将日志输出为安全日志的前缀:[AWSLogs/123456789012/EC2/Linux/Secure/[区域]/]
- 将 123456789012 替换为您的 AWS 账户 ID
s3_key 的初始值:/[Ww]indows.*[Ee]vent
(在Firehose输出路径中指定)
日志输出将通过 Kinesis Data Firehose 发送,由于没有标准的保存路径,所以使用上面的 s3_key 作为 Kinesis Data Firehose 的目标 S3 存储桶的前缀。 由于Region信息不包含在日志中,因此您需要将Region信息其包含在 S3 Key中以捕获它
以下是步骤的概述:
- 在部署为 Windows Server 的 EC2 实例中安装 CloudWatch Agent
- 将日志转发到 CloudWatch Logs
- 使用 CloudFormation 进行配置
- siem-log-exporter-core-china.template
- siem-log-exporter-cwl-nocompress-china.template
- 输出日志的前缀:[AWSLogs/123456789012/EC2/Windows/Event/[region]/]
- 将 123456789012 替换为您的 AWS 账户 ID
s3_key 的初始值:N/A。为每个容器应用程序创建和配置 Firehose
- ECS 日志通过 Firelens (Fluent Bit) 发送到 Firehose 并输出到 S3
- 每个容器应用的日志类型由S3文件路径决定。所以你需要为每种日志类型配置 Firehose
- 容器信息是从 ECS 元数据中捕获的。 Enable it in task definitions
- 默认情况下,不加载 STDERR。如果要加载它,请在 user.ini 中设置 ignore_container_stderr = False。 @timestamp 是收到 SIEM 日志的时间。
配置 Kinesis Data Firehose
- 按照 Security Hub 中的【Kinesis Data Firehose 设置】中的步骤操作。
- 在S3的输出路径中包含决定应用的key(例如apache)
- 因为AWS acount和region是从S3中存储的日志中捕获的,所以在S3输出路径中包含这两个参数是可选的
配置 AWS Firelens
1.Firelens发送日志的任务定义文件和IAM权限设置,请参见官方文档和 aws-samples Send to Kinesis Data Firehose in amazon-ecs-firelens-examples
- 中文Blog,请参考使用 AWS FireLens 轻松实现 AWS Fargate 容器日志处理
配置 SIEM
- 在 user.ini 中为每种日志类型包含以下内容
# Specifying the logs are via firelens
via_firelens = True
# Specifying whether stderr is loaded or not. Logs will not be loaded if this is True
ignore_container_stderr = True
s3_key 的初始值:(WorkSpaces|workspaces).*(Event|event)
(在Firehose输出路径中指定)
s3_key 初始值 : (WorkSpaces|workspaces).*(Inventory|inventory)
- 使用Cloudformation进行配置
通过使用 S3 复制或跨账户输出到存储日志的 S3 存储桶,您可以将来自其他账户或区域的日志加载到 OpenSearch Service 上的 SIEM。输出路径应遵循上面配置的 S3 密钥。
您还可以从现有的 S3 存储桶和/或使用 AWS KMS 客户管理的密钥将日志加载到 OpenSearch Service 上的 SIEM。 要使用现有的 S3 存储桶或 AWS KMS 客户管理的密钥,您必须向 Lambda 函数 es-loader 授予权限。 请参阅 this 以使用 AWS CDK 进行部署。