从 Security Lake 中的自定义来源收集数据 - Amazon Security Lake

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从 Security Lake 中的自定义来源收集数据

Amazon Security Lake 可以从自定义的第三方源收集安全日志和事件。对于每个自定义源,Security Lake 会进行以下处理:

  • 为 Amazon S3 存储桶中的源提供一个唯一前缀。

  • 在 AWS Identity and Access Management (IAM) 中创建允许自定义源向数据湖写入数据的角色。此角色的权限边界由名为的 AWS 托管策略设置AmazonSecurityLakePermissionsBoundary

  • 创建一个 AWS Lake Formation 表来整理源写入 Security Lake 的对象。

  • 设置 AWS Glue 搜寻器来对源数据进行分区。爬虫 AWS Glue Data Catalog 用表格填充。它还会自动发现新的源数据并提取架构定义。

要向 Security Lake 添加自定义源,必须满足以下要求:

  1. 目标 – 自定义源必须能够将数据作为一组 S3 对象写入 Security Lake,这些对象位于分配给该源的前缀之下。对于包含多个类别数据的源,您应将每个唯一的开放网络安全架构框架 (OCSF) 事件类作为单独的源提供。Security Lake 创建了一个IAM角色,允许自定义源写入您的 S3 存储桶中的指定位置。

    注意

    使用OCSF验证工具验证自定义源是否与兼容OCSF Schema 1.1

  2. 格式 – 从自定义源收集的每个 S3 对象都应格式化为 Apache Parquet 文件。

  3. 架构-应将相同OCSF的事件类应用于 Parquet 格式的对象中的每条记录。

在 Security Lake 中提取自定义源代码的最佳实践

为提高数据处理和查询效率,建议在向 Security Lake 添加自定义源时遵循以下最佳实践:

分区

应按源位置、 AWS 区域 AWS 账户、和日期对对象进行分区。

  • 分区数据路径的格式为

    bucket-name/ext/custom-source-name/region=region/accountId=accountID/eventDay=YYYYMMDD.

    一个分区示例是 aws-security-data-lake-us-west-2-lake-uid/ext/custom-source-name/region=us-west-2/accountId=123456789012/eventDay=20230428/

  • 如果您向自定义源添加了源版本,则分区数据路径的格式为

    bucket-name/ext/custom-source-name/custom-source-version/region=us-west-2/accountId=123456789012/eventDay=20230428/

    包含源版本的示例分区是aws-security-data-lake-us-west-2-lake-uid/ext/custom-source-name/2.0/region=us-west-2/accountId=123456789012/eventDay=20230428/

以下列表描述了分区中使用的参数。

  • bucket-name – Security Lake 用来存储自定义源数据的 Amazon S3 存储桶的名称。

  • source-location – S3 存储桶中自定义源的前缀。Security Lake 将给定源的所有 S3 对象存储在该前缀下,并且该前缀对于给定源是唯一的。

  • source-version— 自定义源代码的源版本。

  • region— AWS 区域 向其中写入数据。

  • accountId— 源分区中记录所属的 AWS 账户 ID。

  • eventDay – 事件发生的日期,格式为八个字符的字符串 (YYYYMMDD)。

对象大小和速率

发送到 Security Lake 的文件应在 5 分钟到 1 个活动日之间按增量发送。如果文件大小超过 256MB,则客户发送文件的频率可能超过 5 分钟。对象和大小要求是针对查询性能优化 Security Lake。不遵守自定义源代码要求可能会影响您的 Security Lake 性能。

Parquet 设置

Security Lake 支持 Parquet 版本 1.x 和 2.x。数据页大小应限制为 1MB(未压缩)。行组大小不应超过 256MB(已压缩)。要在 Parquet 对象内进行压缩,首选 zstandard。

排序

在每个 Parquet 格式的对象中,记录应按时间排序,以降低查询数据的成本。

在 Security Lake 中添加自定义源的先决条件

添加自定义源时,Security Lake 会创建一个IAM角色,允许源将数据写入数据湖中的正确位置。角色的名称遵循格式AmazonSecurityLake-Provider-{name of the custom source}-{region},其中region是 AWS 区域 您添加自定义源的格式。Security Lake 将向该角色附加允许访问数据湖的策略。如果您使用客户管理的 AWS KMS 密钥对数据湖进行了加密,Security Lake 还会为该角色附加策略kms:Decryptkms:GenerateDataKey权限。此角色的权限边界由名为的 AWS 托管策略设置AmazonSecurityLakePermissionsBoundary

验证权限

在添加自定义源之前,请验证您是否具有执行以下操作的权限。

要验证您的权限,请使用IAM查看附加到您的IAM身份的IAM策略。然后,将这些策略中的信息与以下操作列表(您必须被允许执行这些操作才能添加自定义源)进行比较。

  • glue:CreateCrawler

  • glue:CreateDatabase

  • glue:CreateTable

  • glue:StopCrawlerSchedule

  • iam:GetRole

  • iam:PutRolePolicy

  • iam:DeleteRolePolicy

  • iam:PassRole

  • lakeformation:RegisterResource

  • lakeformation:GrantPermissions

  • s3:ListBucket

  • s3:PutObject

这些操作允许您从自定义来源收集日志和事件,将其发送到正确的 AWS Glue 数据库和表,并将其存储在 Amazon S3 中。

如果您使用 AWS KMS 密钥对数据湖进行服务器端加密,则还需要获得kms:CreateGrantkms:DescribeKey、和kms:GenerateDataKey的权限。

重要

如果您计划使用 Security Lake 控制台添加自定义源,则可以跳过下一步继续操作在 Security Lake 中添加自定义来源。Security Lake 控制台提供了简化的入门流程,可以代表您创建所有必要的IAM角色或使用现有角色。

如果您计划使用 Security Lake API 或 AWS CLI 添加自定义源,请继续执行下一步以创建IAM角色以允许对 Security Lake 存储桶位置进行写入访问。

创建IAM角色以允许对 Security Lake 存储桶位置进行写入访问(API且 AWS CLI仅限于该步骤)

如果您正在使用 Securit API y Lake 或 AWS CLI 添加自定义源,请添加此IAM角色以授予对自定义源数据进行爬网和识别数据分区的 AWS Glue 权限。这些分区是整理数据以及在 Data Catalog 中创建和更新表所必需的。

创建此IAM角色后,您需要该角色的 Amazon 资源名称 (ARN) 才能添加自定义来源。

您必须附加arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole AWS 托管策略。

要授予必要的权限,您还必须在角色中创建并嵌入以下内联策略, AWS Glue 爬网程序 以允许从自定义源读取数据文件并在 AWS Glue 数据目录中创建/更新表。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3WriteRead", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::{{bucketName}}/*" ] } ] }

附上以下信任策略 AWS 账户 以允许使用该策略根据外部 ID 代入角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "glue.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

如果您要在其中添加自定义源的区域中的 S3 存储桶使用客户管理的存储桶进行加密 AWS KMS key,则还必须将以下策略附加到该角色和您的KMS密钥策略:

{ "Effect": "Allow", "Action": [ "kms:GenerateDataKey" "kms:Decrypt" ], "Condition": { "StringLike": { "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::{{name of S3 bucket created by Security Lake}" ] } }, "Resource": [ "{{ARN of customer managed key}}" ] }