将 AWS CloudWatch 与 Google SecOps 集成

本文档介绍了如何将 AWS CloudWatch 与 Google Security Operations (Google SecOps) 集成。

使用场景

主动操作 - 在日志中搜索、创建日志组/流、删除日志组/流、更新保留政策。

集成参数

使用以下参数配置集成:

参数显示名称> Type> 默认值> Is Mandatory> 说明
AWS 访问密钥 ID 字符串 不适用 是 要在集成中使用的 AWS 访问密钥 ID。
AWS 密钥 密码 不适用 是 要在集成中使用的 AWS 密钥。
AWS 默认区域 字符串 不适用 是 要在集成中使用的 AWS 默认区域,例如 us-west-2。

如需了解如何在 Google SecOps 中配置集成,请参阅配置集成。

如有需要,您可以在后续阶段进行更改。配置集成实例后,您可以在 playbook 中使用该实例。如需详细了解如何配置和支持多个实例,请参阅支持多个实例。

操作

如需详细了解操作,请参阅 在工作桌上响应待处理的操作和在案例中运行手动操作。

Ping

测试与 AWS CloudWatch 的连接。

运行时间

此操作不会对实体执行。

操作执行结果

脚本结果
Script Result Name> 价值选项>
is_success is_success=False
is_success is_success=True
案例墙
结果类型 值/说明 类型
输出消息*

该操作不应失败,也不应停止 playbook 执行:
如果成功:“Successfully connected to the AWS CloudWatch server with the provided connection parameters!”

操作应失败并停止 Playbook 执行:
if not successful: "Failed to connect to the AWS CloudWatch server! 错误为 {0}”。format(exception.stacktrace)

常规

列出日志组

列出 AWS CloudWatch 中的可用日志组。

参数

参数显示名称> Type> 默认值> Is Mandatory> 说明
返回的群组数上限 整数 50 否 指定要返回的群组数量。默认值:50。

运行时间

此操作不会对实体执行。

操作执行结果

脚本结果
Script Result Name> 价值选项>
is_success is_success=False
is_success is_success=True
JSON 结果
[
    {
        "arn": "arn:aws:logs:us-east-1:",
        "creationTime": 1611581795766,
        "logGroupName": "CloudTrail/DefaultLogGroup",
        "metricFilterCount": 0,
        "storedBytes": 24529015
    },
    {
        "arn": "arn:aws:logs:us-east-1:",
        "creationTime": 1606993203235,
        "logGroupName": "Example",
        "metricFilterCount": 1,
        "storedBytes": 730
    },
    {
        "arn": "arn:aws:logs:us-east-1:",
        "creationTime": 1611652265055,
        "logGroupName": "aws-cloudtrail-logs",
        "metricFilterCount": 0,
        "storedBytes": 51354815
    }
]
案例墙
结果类型 值/说明 类型
输出消息*

该操作不应失败,也不应停止 Playbook 执行:
如果有可用数据 (is_success = true):“Successfully returned available log groups in AWS CloudWatch”。

如果没有可用数据 (is_success = true):“在 AWS CloudWatch 中未找到任何日志组”。

如果发生致命错误(例如凭据错误、无法连接到服务器等),操作应失败并停止 playbook 执行:
“执行操作‘列出日志组’时出错。Reason: {0}''.format(error.Stacktrace)

常规
案例墙表格

名称:“日志组”

列:

名称

指标过滤条件数量

存储的字节数

创建时间

常规

列出日志流

列出 AWS CloudWatch 中的可用日志流。

参数

参数显示名称> Type> 默认值> Is Mandatory> 说明
日志组 CSV 不适用 是 指定要检索其日志流的组名称的逗号分隔列表。
排序依据 DDL

日志流名称

可能的值:

日志流名称

上次事件时间

否 指定日志流的排序方式。
排列顺序 DDL

升序

可能的值:

升序

降序

否 指定应使用的排列顺序。
要返回的数据流数量上限 整数 50 否 指定每个日志组要返回的流数量。

运行时间

此操作不会对实体执行。

操作执行结果

脚本结果
Script Result Name> 价值选项>
is_success is_success=False
is_success is_success=True
JSON 结果
[{
    "group":"{group name}"
"logStreams": [
        {
            "arn": "arn:aws:logs:us-east-1:log-group:aws-cloudtrail-logs:log-stream:CloudTrail_us-east-1",
            "creationTime": 1611652272827,
            "firstEventTimestamp": 1611652287716,
            "lastEventTimestamp": 1612271538268,
            "lastIngestionTime": 1612271538289,
            "logStreamName": "CloudTrail_us-east-1",
            "storedBytes": 0,
            "uploadSequenceToken": "49039859450784908968417870788122674924958823185025535393"
        }
    ]
}
]
案例墙
结果类型 值/说明 类型
输出消息*

该操作不应失败,也不应停止 playbook 执行:
如果至少有一个日志组有可用数据 (is_success = true):“Successfully returned available log streams for the following log groups in AWS CloudWatch: {group names}”。

如果至少有一个日志组没有可用数据 (is_success = true):“操作无法返回 AWS CloudWatch 中以下日志组的可用日志流:{group names}”。

如果至少有一个日志组没有数据 (is_success = false):“在 AWS CloudWatch 中未找到所提供日志组的日志流”。

如果发生以下情况,操作应失败并停止执行 playbook:
如果发生严重错误,例如凭据错误、无法连接到服务器等:“Error executing action "List Log Streams". Reason: {0}''.format(error.Stacktrace)

常规
案例墙表格

名称:“{Group Name}:日志流”

列:

名称

存储的字节数

创建时间

上次事件时间戳

常规

搜索日志事件

在 AWS CloudWatch 中搜索日志事件。

参数

参数显示名称> Type> 默认值> Is Mandatory> 说明
日志组 字符串 不适用 是 指定要在其中搜索事件的日志组的名称。
日志流 CSV 不适用 否 指定要搜索事件的日志流的逗号分隔列表。
时间范围 DDL

过去 1 小时

可能的值:

过去 1 小时

过去 6 小时

过去 24 小时

上周

上个月

自定义

否 指定搜索的时间范围。如果选择“自定义”,您还必须设置“开始时间”。
开始时间 字符串 不适用 否 指定搜索的开始时间。如果为“时间范围”参数选择了“自定义”,则此参数是必需的。格式:ISO 8601
结束时间 字符串 不适用 否 指定搜索的结束时间。格式:ISO 8601。如果未提供任何内容,并且为“时间范围”参数选择了“自定义”,则此参数将使用当前时间。
自定义过滤器 字符串 不适用 否 指定搜索的自定义过滤条件。如需了解详情,请参阅文档门户。
返回的事件数上限 整数 50 否 指定要返回的事件数量。默认值:50。

运行时间

此操作不会对实体执行。

操作执行结果

脚本结果
Script Result Name> 价值选项>
is_success is_success=False
is_success is_success=True
JSON 结果
[
        {
            "eventId": "ID",
            "ingestionTime": 1611652287896,
            "logStreamName": "CloudTrail_us-east-1",
            "message": {
                "eventVersion": "1.08",
                "userIdentity": {
                    "type": "AssumedRole",
                    "principalId": "ID",
                    "arn":"arn:aw
s:sts: : ACCOUNT_ID:assumed-role/AWSServiceRoleForAmazonMacie/AmazonMacieSession","accountId":"ACCOUNT_ID","accessKeyId":"KEY_ID","sessionC
ontext":{"sessionIssuer":{"type":"Role","principalId":"ID","arn":"arn:aws:iam: : ACCOUNT_ID:role/aws-service-role/macie.amazonaws.com/AW
SServiceRoleForAmazonMacie","accountId":"ACCOUNT_ID","userName":"AWSServiceRoleForAmazonMacie"},"webIdFederationData":{},"attributes":{"mfaAuthenticated": "false",
                    "creationDate": "2021-01-26T08:53:52Z"
                }
            },
            "invokedBy": "AWS Internal",
            "eventTime": "2021-01-26T08:53:52Z",
            "eventSource": "s3.amazonaws.com",
            "eventName": "GetBucketLogging",
            "awsRegion": "us-east-1",
            "sourceIPAddress": "AWSInternal",
            "userAgent": "AWS Internal",
            "requestParameters": {
                "logging": "",
                "bucketName": "example",
                "Host": "example.s3.amazonaws.com"
            },
            "responseElements": null,
            "additionalEventData": {
                "SignatureVersion": "SigV4",
                "CipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
                "bytesTransferredIn": 0,
                "AuthenticationMethod": "AuthHeader",
                "x-amz-id-2": "PFM+6pyK/gCPy95gh8dtstgtXftrpHkL8s=",
                "bytesTransferredOut": 289
            },
            "requestID": "8FA919A428BC82D7",
            "eventID": "7eb5dd44-7021-4945-b9be-27f5b1e0d8d0",
            "readOnly": true,
            "resources": [
                {
                    "accountId": "ACCOUNT_ID",
                    "type": "AWS::S3::Bucket",
                    "ARN": "arn:aws:s3:::example"
                }
            ],
            "eventType": "AwsApiCall",
            "managementEvent": true,
            "eventCategory": "Management",
            "recipientAccountId": "ACCOUNT_ID"
        },
        "timestamp": 1611652287716
    }
]
案例墙
结果类型 值/说明 类型
输出消息*

该操作不应失败,也不应停止 playbook 执行:
如果数据可用 (is_success = true):“Successfully executed search in AWS CloudWatch”。

如果数据不可用 (is_success = false):“未找到与所提供的搜索内容相关的数据。”

操作应失败并停止 Playbook 执行:
如果发生严重错误,例如凭据错误、无法连接到服务器等:“执行操作‘搜索日志事件’时出错。Reason: {0}''.format(error.Stacktrace)

常规
案例墙表格

名称:“搜索结果”

列:所有可用键。

常规

设置保留政策

在 AWS CloudWatch 中为日志组设置保留政策。

参数

参数显示名称> Type> 默认值> Is Mandatory> 说明
日志组 字符串 不适用 是 指定要为其设置保留政策的日志组的名称。
保留天数 DDL

1

可能的值

1、3、5、7、14、30、60、90、120、150、180、365、400、545、731、1827 和 3653

是 指定数据应在日志组中保留多少天。

运行时间

此操作不会对实体执行。

操作执行结果

脚本结果
Script Result Name> 价值选项>
is_success is_success=False
is_success is_success=True
案例墙
结果类型 值/说明 类型
输出消息*

该操作不应失败,也不应停止 playbook 执行:
如果数据成功:(is_success = true):“已成功在 AWS CloudWatch 中为日志组 {group} 设置保留政策”。

操作应失败并停止 playbook 执行:
如果发生严重错误,例如凭据错误、无法连接到服务器等:“执行操作‘设置保留政策’时出错。Reason: {0}''.format(error.Stacktrace)

常规

移除保留政策

从 AWS CloudWatch 中的日志组中移除保留政策。

参数

参数显示名称> Type> 默认值> Is Mandatory> 说明
日志组 字符串 不适用 是 指定要从中移除保留政策的日志组的名称。

运行时间

此操作不会对实体执行。

操作执行结果

脚本结果
Script Result Name> 价值选项>
is_success is_success=False
is_success is_success=True
案例墙
结果类型 值/说明 类型
输出消息*

该操作不应失败,也不应停止 playbook 执行:
如果数据成功 (is_success = true):“已成功从 AWS CloudWatch 中的日志组 {group} 移除保留政策”。

操作应失败并停止 playbook 执行:
如果发生严重错误,例如凭据错误、无法连接到服务器等:“执行操作‘移除保留政策’时出错。Reason: {0}''.format(error.Stacktrace)

常规

创建日志组

在 AWS CloudWatch 中创建日志组。

参数

参数显示名称> Type> 默认值> Is Mandatory> 说明
日志组名称 字符串 不适用 是 指定新日志组的名称。

运行时间

此操作不会对实体执行。

操作执行结果

脚本结果
Script Result Name> 价值选项>
is_success is_success=False
is_success is_success=True
JSON 结果
{
"group_name": "GROUP_NAME"
}
案例墙
结果类型 值/说明 类型
输出消息*

该操作不应失败,也不应停止 playbook 执行:
如果数据成功:(is_success = true):“已在 AWS CloudWatch 中成功创建新的日志组 {group}”。

操作应失败并停止 Playbook 执行:
如果发生严重错误,例如凭据错误、无法连接到服务器等:“执行操作‘创建日志组’时出错。Reason: {0}''.format(error.Stacktrace)

常规

创建日志流

在 AWS CloudWatch 中为日志组创建日志流。

参数

参数显示名称> Type> 默认值> Is Mandatory> 说明
日志组 字符串 不适用 是 指定要在其中创建日志流的日志组的名称。
日志流名称 字符串 不适用 是 指定新日志流的名称。

运行时间

此操作不会对实体执行。

操作执行结果

脚本结果
Script Result Name> 价值选项>
is_success is_success=False
is_success is_success=True
JSON 结果
{
"log_stream": "STREAM_NAME"
}
案例墙
结果类型 值/说明 类型
输出消息*

该操作不应失败,也不应停止 playbook 执行:
如果数据成功:(is_success = true):“已在 AWS CloudWatch 的日志组 {group} 中成功创建新的日志流”。

如果发生致命错误(例如凭据错误、无法连接到服务器等),操作应失败并停止 playbook 执行:
“执行操作‘创建日志流’时出错。Reason: {0}''.format(error.Stacktrace)

常规

删除日志组

删除 AWS CloudWatch 中的日志组。

参数

参数显示名称> Type> 默认值> Is Mandatory> 说明
日志组名称 字符串 不适用 是 指定需要删除的日志组的名称。

运行时间

此操作不会对实体执行。

操作执行结果

脚本结果
Script Result Name> 价值选项>
is_success is_success=False
is_success is_success=True
案例墙
结果类型 值/说明 类型
输出消息*

该操作不应失败,也不应停止 playbook 执行:
如果数据成功:(is_success = true):“已成功删除 AWS CloudWatch 中的日志组 {group}”。

如果群组不存在 (is_success=false):“Action wasn't able to delete log group {group} in AWS CloudWatch. 原因:在 AWS CloudWatch 中找不到日志组“{group}”。

该操作应失败并停止执行 playbook:
如果发生严重错误,例如凭据错误、无法连接到服务器等:“执行操作‘删除日志组’时出错。Reason: {0}''.format(error.Stacktrace)

常规

删除日志流

删除 AWS CloudWatch 中日志组内的日志流。

参数

参数显示名称> Type> 默认值> Is Mandatory> 说明
日志组名称 字符串 不适用 是 指定包含日志流的日志组的名称。
日志流名称 字符串 不适用 是 指定需要删除的日志流的名称。

运行时间

此操作不会对实体执行。

操作执行结果

脚本结果
Script Result Name> 价值选项>
is_success is_success=False
is_success is_success=True
案例墙
结果类型 值/说明 类型
输出消息*

该操作不应失败,也不应停止 playbook 执行:
如果数据成功:(is_success = true):“已成功从 AWS CloudWatch 中的日志组 {group} 中删除日志流 {stream}”。

如果数据流不存在 (is_success=false):“操作无法从 AWS CloudWatch 中的日志组 {group} 中删除日志流 {stream}。原因:在 AWS CloudWatch 的日志组 {group} 中找不到日志流 {stream}。”

如果群组不存在 (is_success=false):“操作无法从 AWS CloudWatch 中的日志群组 {group} 中删除日志流 {stream}。原因:在 AWS CloudWatch 中找不到日志组“{group}”。

操作应失败并停止 Playbook 执行:
如果发生严重错误,例如凭据错误、无法连接到服务器等:“Error executing action "Delete Log Stream". Reason: {0}''.format(error.Stacktrace)

常规

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。