使用 Amazon SageMaker 在您的 Amazon Security Lake 数据中识别
利用 Amazon SageMaker 识别 Amazon Security Lake 数据中的网络安全异常
关键要点
当前企业面临越来越多的安全威胁和漏洞,需要有效的网络安全数据分析手段。使用 Amazon Security Lake 集中存储安全数据并利用 Amazon SageMaker 进行机器学习分析是一种解决方案。本文将详细介绍如何通过 SageMaker 识别异常的网络流量,创建和部署一个机器学习模型。随着数字足迹的扩大,客户面临的安全威胁和漏洞日益增加。客户需要集中和标准化其安全数据,以应对来自亚马逊网络服务AWS、其他云服务提供商、本地和边缘设备的安全日志。在这些面临的挑战中,识别安全威胁的分析也必须具备扩展性,能够适应不断变化的威胁环境。
通过结合 Amazon Security Lake 的安全数据摄取与存储,以及利用 Amazon SageMaker 进行机器学习分析,可以有效处理这一复杂的安全分析场景。Amazon Security Lake 是专门设计的服务,可以自动将组织的安全数据从云和本地源集中到 AWS 帐户中的数据湖里,并管理安全数据的生命周期与存储分层。该服务使用开放网络安全模式框架OCSF格式摄取日志文件,确保下游消费和分析的标准化,并可支持多种外部第三方服务。存储数据后,接下来的关键问题是如何进行分析。
有效的分析方法是采用异常检测算法,通过与环境的正常基线进行比较,来识别出可疑的流量。Amazon SageMaker 提供了一个全面管理的环境,使客户能够准备数据并构建、训练和部署机器学习模型。
在本文中,您将学习如何准备从 Amazon Security Lake 源获取的数据,然后使用 SageMaker 的 IP Insights 算法训练和部署一个机器学习模型,以识别异常网络流量或行为,并为更全面的安全解决方案组成一部分。
解决方案概述
使用 AWS Organizations 启用 Amazon Security Lake 的 AWS 帐户、AWS 区域和外部 IT 环境。设置来自 Amazon Virtual Private Cloud (Amazon VPC) 流日志和 Amazon Route53 DNS 日志的 Security Lake 源。使用 SageMaker 处理工作对 Amazon Security Lake 日志数据进行处理,生成特征,并使用 Amazon Athena 查询结构化的 OCSF 日志数据。使用 SageMaker 训练工作,训练 SageMaker ML 模型,处理过的 Amazon Security Lake 日志。部署训练好的 ML 模型到 SageMaker 推理端点。将新的安全日志存储在 S3 桶中,并在 Amazon Simple Queue Service (Amazon SQS) 中排队事件。订阅一个 AWS Lambda 函数到 SQS 队列。通过 Lambda 函数调用 SageMaker 推理端点,实时分类安全日志为异常。前提条件
在部署解决方案之前,您需要完成以下前提条件:
在您的组织或单一帐户中启用 Amazon Security Lake,并确保启用了 VPC 流日志和 Route 53 解析日志。确保 SageMaker 处理工作和笔记本使用的 AWS Identity and Access Management (IAM) 角色具备完整的 IAM 权限,包括对标估库的查询访问权限。确保用于 Lambda 函数的 IAM 角色具备对 Amazon Security Lake 数据访问权限的 IAM 政策。部署解决方案
接下来,按照以下步骤设置环境:
启动一个 SageMaker Studio 或 SageMaker Jupyter 笔记本,使用 mlm5large 实例。克隆 GitHub 仓库。打开笔记本 01ipinsights/0101amazonsecuritylakesagemakeripinsightsipy。实现所提供的 IAM 政策 和相应的 IAM 信任策略。接下来,您将学习如何安装依赖项和导入所需库,以及创建 SageMaker S3 桶以用于数据处理和模型训练。
pythonimport boto3import botocoreimport osimport sagemakerimport pandas as pd
conda install openjdk ypip install pyspark pip install sagemakerpyspark
from pyspark import SparkContext SparkConffrom pysparksql import SparkSession
bucket = sagemakerSession()defaultbucket()prefix = sagemaker/ipinsightsvpcflowlogsexecutionrole = sagemakergetexecutionrole()region = boto3Session()regionnameseclakeregion = regionreplace()
检查桶是否存在
try boto3Session()client(s3)headbucket(Bucket=bucket)except botocoreexceptionsParamValidationError as e print(缺少 S3 桶或无效的 S3 桶)except botocoreexceptionsClientError as e if eresponse[Error][Code] == 403 print(f您没有权限访问该桶,{bucket}) elif eresponse[Error][Code] == 404 print(f您的桶,{bucket},不存在!) else raiseelse print(f训练输入/输出将存储在 s3//{bucket}/{prefix})

查询 Amazon Security Lake VPC 流日志表
使用 AWS SDK for pandas 查询与 VPC 流日志相关的 AWS Glue 表。在查询期间,您将提取多天的 VPC 流量日志数据。以下代码是方便您开始操作。
pythonocsfdf = wrathenareadsqlquery(SELECT srcendpointinstanceuid as instanceid srcendpointip as sourceip FROM amazonsecuritylaketableseclakeregionvpcflow10 WHERE srcendpointip IS NOT NULL AND srcendpointinstanceuid IS NOT NULL AND srcendpointinstanceuid != AND srcendpointip != database=amazonsecuritylakegluedbuseast1 ctasapproach=False unloadapproach=True s3output=fs3//{bucket}/unload/parquet/updated) ocsfdfhead()
规范化 Amazon Security Lake VPC 流日志数据
因为 IP Insights 算法要求训练数据为 CSV 格式并包含两个列,第一列必须是唯一标识符,第二列为实体的 IPv4 地址。以下是您的代码示例。
pythonocsfrt53df = wrathenareadsqlquery(SELECT srcendpointinstanceuid as instanceid srcendpointip as sourceip FROM amazonsecuritylaketableseclakeregionroute5310 WHERE srcendpointip IS NOT NULL AND srcendpointinstanceuid IS NOT NULL AND srcendpointinstanceuid != AND srcendpointip != database=amazonsecuritylakegluedbuseast1 ctasapproach=False unloadapproach=True s3output=fs3//{bucket}/unload/rt53parquet)ocsfrt53dfhead()ocsfcomplete = pdconcat([ocsfdf ocsfrt53df] ignoreindex=True)
获取 IP Insights 训练图像并训练模型
在下一个工作中,您将基于以上 VPC 和 Route 53 日志训练 ML 模型,并使用最佳的超参数选项进行调整,以获得性能最佳的模型。
pythontrainingpath = fs3//{bucket}/{prefix}/training/traininginputcsvwrs3tocsv(ocsfcomplete trainingpath header=False index=False)
from sagemakeramazonamazonestimator import imageurisimage = sagemakerimageurisgettrainingimageuri(boto3Session()regionnameipinsights)
ipinsights = sagemakerestimatorEstimator(image executionroleinstancecount=1instancetype=mlm5largeoutputpath=fs3//{bucket}/{prefix}/outputsagemakersession=sagemakerSession())ipinsightssethyperparameters(numentityvectors=20000randomnegativesamplingrate=5vectordim=128minibatchsize=1000epochs=5 learningrate=001)
inputdata = { train sagemakersessions3input(trainingpath contenttype=text/csv)}ipinsightsfit(inputdata)
部署训练好的模型并测试流量
在训练完成后,将模型部署到 SageMaker 端点,并提交一系列唯一标识符和 IPv4 地址组合进行检测。
pythonpredictor = ipinsightsdeploy(initialinstancecount=1 instancetype=mlm5large)print(fEndpoint name {predictorendpoint})
蓝鲸加速器免费版下载提交推理请求
inferencedf = wrs3readcsv(s3//{bucket}/{prefix}/inference/testdatacsv)import iofrom io import StringIO
csvfile = ioStringIO()inferencecsv = inferencedftocsv(csvfile sep= header=True index=False)inferencepayload = csvfilegetvalue()print(inferencepayload)
response = predictorpredict(inferencepayloadinitialargs={ContentType text/csv})print(response)
设置新 VPC 流日志流量的连续监控
为了用 Amazon Security Lake 以主动的方式利用这个机器学习模型,您可以配置一个 Lambda 函数来响应每个新的 VPC 流日志事件。
打开 Security Lake 控制台。在导航窗格中,选择 Subscribers。在 Subscribers 页面,选择 Create subscriber。填写订阅者详情并创建您的订阅。配置新的 Lambda 函数。结论
本文详细介绍了如何准备来自 Amazon Security Lake 的网络流量数据以供机器学习,并使用 IP Insights 算法在 Amazon SageMaker 中训练和部署模型。通过实施 AWS Lambda 函数,您可以根据训练好的异常检测模型消费新的 Amazon Security Lake 日志,并及时通知安全团队可能存在的异常流量。接下来的博客系列将介绍如何利用其他安全数据源并构建更全面、自动化的安全监控解决方案。
从公共区块链查询交易最终性信息,使用 Amazon Managed Blockchain Query
从公共区块链查询交易确认信息重点总结在这篇文章中,我们将介绍Amazon Managed BlockchainAMBQuery的新功能,该功能使您能够在交易最终确认之前从公共区块链中获取数据。AMB ...
利用 AWS IoT FleetWise 生成车辆数据洞察:介绍第一部分 官方博客
通过 AWS IoT FleetWise 生成车辆数据洞察:简介关键要点车辆数据数字化:汽车制造商、车队运营商和汽车供应商正在通过车辆数据在多个方面实现其产品和服务的数字化。AWS IoT Fleet...