使用 Amazon Macie 保护 CloudWatch 日志中的敏感数据 - AWS 规范指引

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

使用 Amazon Macie 保护 CloudWatch 日志中的敏感数据

Amazon Web Services 的 Anisha Salunkhe、Omar Franco 和 David Guardiola

Summary

此模式向您展示如何使用 Amazon Macie 通过实施全面的安全监控工作流程自动检测 Amazon Log CloudWatch s 日志组中的敏感数据。该解决方案使用 Amazon Data Firehose 将 CloudWatch 日志条目流式传输到亚马逊简单存储服务 (Amazon S3) Service。Macie 会定期扫描此存储桶以查找个人身份信息 (PII)、财务数据和其他敏感内容。基础架构是通过模板部署的,该 AWS CloudFormation 模板提供了所有必要的配置 AWS 服务 和配置。

CloudWatch 日志通常包含应用程序数据,这些数据可能无意中包含敏感的用户信息。这可能会造成合规和安全风险。传统的日志监控方法缺乏自动敏感数据检测功能。这可能使实时识别和应对潜在的数据暴露变得困难。

这种模式通过为日志系统中的敏感数据提供自动检测和警报,帮助安全团队和合规官员维护数据机密性。该解决方案支持通过亚马逊简单通知服务 (Amazon SNS) Simple Notification 通知进行主动事件响应,并自动将敏感数据隔离到安全的 Amazon S3 存储桶中。您可以自定义检测模式,并将工作流程与现有的安全操作流程集成。

先决条件和限制

先决条件

限制

架构

目标架构

下图显示了使用 Macie 检查 CloudWatch 日志条目中是否有敏感数据的工作流程。

 

该工作流程显示了以下步骤:

  1. CloudWatch 日志日志组生成日志,这些日志受订阅筛选器的约束。

  2. 订阅筛选器将日志转发到 Amazon Data Firehose。

  3. 这些日志在通过 Amazon Data Firehose 传输流时使用 AWS Key Management Service (AWS KMS) 密钥进行加密。

  4. 传输流将日志传送到 Amazon S3 中导出的日志存储桶。

  5. 每天凌晨 4 点,Amazon 都会 EventBridge 启动一项 AWS Lambda 功能,启动 Macie 扫描导出的日志存储桶中的敏感数据。

  6. 如果 Macie 识别出存储桶中的敏感数据,则 Lambda 函数会从导出的日志存储桶中删除该日志,并使用对其进行加密。 AWS KMS key

  7. Lambda 函数在数据隔离存储桶中隔离包含敏感数据的日志。

  8. 识别敏感数据会启动 Amazon SNS 话题。

  9. Amazon SNS 会向您配置的电子邮件地址发送电子邮件通知,其中包含有关包含敏感数据的日志的信息。

已部署的资源

该 CloudFormation 模板在您的目标中部署以下资源, AWS 账户 并且 AWS 区域:

工具

AWS 服务

  • AWS CloudFormation帮助您设置 AWS 资源,快速一致地配置资源,并在和的整个 AWS 账户 生命周期中对其进行管理 AWS 区域。

  • Amazon CloudWatch Lo gs 可帮助您集中所有系统和应用程序的日志, AWS 服务 这样您就可以监控它们并安全地将其存档。

  • Amazon Data Firehose 可帮助您将实时流数据传输到其他 AWS 服务自定义 HTTP 终端节点以及受支持的第三方服务提供商拥有的 HTTP 终端节点。

  • Amazon EventBridge 是一项无服务器事件总线服务,可帮助您将应用程序与来自各种来源的实时数据连接起来。例如,诸如 AWS Lambda 函数、使用 API 目的地的 HTTP 调用端点或其他 AWS 账户中的事件总线之类的来源。

  • AWS Key Management Service (AWS KMS) 可帮助您创建和控制加密密钥以帮助保护您的数据。

  • AWS Lambda 是一项计算服务,可帮助您运行代码,无需预调配或管理服务器。它只在需要时运行您的代码,并自动进行扩展,因此您只需为使用的计算时间付费。

  • Amazon Macie 可帮助您发现敏感数据,提供数据安全风险的可见性,并实现针对这些风险的自动防护。

  • Amazon Simple Notification Service(Amazon SNS)可帮助您协调和管理发布者与客户端(包括 Web 服务器和电子邮件地址)之间的消息交换。

  • Amazon Simple Storage Service(Amazon S3)是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。

代码存储库

此模式的代码可在 GitHub sample-macie-for-securing-cloudwatch-l ogs 存储库中找到。

最佳实践

遵循 CloudFormation 文档中的CloudFormation 最佳实践

操作说明

Task说明所需技能

克隆代码存储库。

输入以下命令将存储库克隆到本地工作站:

git clone https://github.com/aws-samples/sample-macie-for-securing-cloudwatch-logs
应用程序开发人员

(可选)编辑 CloudFormation 模板。

  1. 打开主.yaml 文件。

  2. 通过执行以下任一操作来自定义模板:

  3. 保存并关闭主.yaml 文件。

应用程序开发人员

选项 1-使用带有命令行参数的脚本进行部署。

输入以下命令以使用命令行参数部署解决方案,其中true仅当尚未启用 Amazon Macie 时,的值才为:enable-macie

./scripts/test-macie-solution.sh --deploy-stack \ --stack-name <stack name> \ --email <email address> \ --enable-macie <true or false> \ --region <region> \ --resource-name <prefix for all resources> \ --bucket-name <bucket name>
常规 AWS

选项 2-使用带有环境变量的脚本进行部署。

  1. 输入以下命令来定义环境变量,其中true仅当尚未启用 ENABLE_MACIE Amazon Macie 时,其值才为:

    export STACK_NAME=<stack name> export SNS_EMAIL=<email address> export ENABLE_MACIE=<true or false> export REGION=<region> export RESOURCE_NAME=<prefix for all resources> export BUCKET_NAME=<bucket name>
  2. 在部署之前输入以下命令以验证参数:

    ./scripts/test-macie-solution.sh \ --validate-params \ --email <email address> \ --region <region>
  3. 输入以下命令部署解决方案:

    ./scripts/test-macie-solution.sh --deploy-stack
常规 AWS

选项 3-使用进行部署 AWS CLI。

输入以下命令以使用部署解决方案 AWS CLI,其中,true仅当尚未启用 Amazon Macie 时,的值才为:EnableMacie

aws cloudformation create-stack \ --region us-east-1 \ --stack-name macie-for-securing-cloudwatch-logs \ --template-body file://app/main.yml \ --capabilities CAPABILITY_IAM \ --parameters \ ParameterKey=ResourceName,ParameterValue=<prefix for all resources> \ ParameterKey=BucketName,ParameterValue=<bucket name> \ ParameterKey=LogGroupName,ParameterValue=<path for log group> \ ParameterKey=SNSTopicEndpointEmail,ParameterValue=<email address> \ ParameterKey=EnableMacie,ParameterValue=<true or false>

选项 4-通过部署 AWS 管理控制台。

  1. 打开 AWS CloudFormation 控制台

  2. 在屏幕顶部的导航栏上,选择 AWS 区域 要在其中创建堆栈。

  3. 堆栈页面,选择右上角的堆栈,然后选择使用新资源(标准)

  4. 在 “创建堆栈” 页面上,在 “先决条件-准备模板” 中,选择 “选择现有模板”。

  5. 在 “指定模板” 下,选择 “上传模板文件”,然后从克隆的存储库中上传 main.yaml 模板。

  6. 选择下一步

  7. 指定堆栈详细信息页面的堆栈名称框中,输入堆栈名称。

  8. 参数部分中,为以下模板参数指定值。

    • ResourceName: 所有资源的前缀

    • BucketName: 亚马逊 S3 存储桶的唯一名称

    • LogGroupName: 日志的 CloudWatch 日志组名称

    • SNSTopicEndpointEmail: 用于接收通知的电子邮件地址

    • EnableMacie: true 如果尚未启用 Macie,则设置为

    • (可选)Region:您要部署堆栈 AWS 区域 的位置。

    • (可选)TemplatePath: CloudFormation 模板路径

  9. 选择下一步

  10. 对于能力,请选择我确认此模板可以创建 IAM 资源,以指定您要在模板中使用 IAM 资源。

  11. 选择下一步

  12. 检查并创建页面上,检查堆栈的详细信息。

  13. 选择提交以启动堆栈。

常规 AWS

监控部署状态并确认部署。

  1. 输入以下命令以监控部署状态:

    ./scripts/test-macie-solution.sh \ --deployment-status \ --stack-name <stack name>
    注意

    您还可以在新堆栈的 “事件” 选项卡上监控堆栈创建的进度和状态。有关更多信息,请参阅监控堆栈进度

  2. 当状态更改为 CREATE_COMPLETE 时,请查看堆栈输出以获取资源信息。

常规 AWS

确认 Amazon SNS 订阅。

按照亚马逊 SNS 文档中确认您的亚马逊 SNS 订阅中的说明确认您的亚马逊 SNS 订阅。

应用程序开发人员
Task说明所需技能

选项 1 — 使用自动报告进行测试。

如果您使用默认堆栈名称,请输入以下命令来测试解决方案:

./scripts/test-macie-solution.sh \ --full-test

如果您使用了自定义堆栈名称,请输入以下命令来测试解决方案:

./scripts/test-macie-solution.sh \ --full-test \ --stack-name <stack name>

如果您使用了自定义堆栈名称和自定义参数,请输入以下命令来测试解决方案:

./scripts/test-macie-solution.sh --full-test \ --stack-name <stack name> \ --region <region> \ --log-group <log group path>
常规 AWS

选项 2 — 使用有针对性的验证进行测试。

  1. 输入以下命令生成包含敏感信息的测试数据:

    ./scripts/test-macie-solution.sh \ --generate-test-data \ --stack-name <stack name>

    此命令执行以下操作:

    • 创建包含真实敏感数据模式的 CloudWatch 日志条目,包括员工 IDs、专利 IDs、信用卡号、社会安全号码和电子邮件地址

    • 生成敏感和非敏感日志条目以进行全面测试

    • 提供测试数据生成过程的详细记录

  2. 输入以下命令以验证数据管道流:

    ./scripts/test-macie-solution.sh \ --verify-pipeline \ --stack-name <stack name>

    此命令执行以下操作:

    • 确认 CloudWatch 日志条目已流式传输到 Amazon Data Firehose

    • 验证日志数据是否已通过适当的加密传输到 Amazon S3 存储桶

    • 检查 Amazon S3 对象存储器的前缀结构是否正确

    • 验证存储对象的加密状态

    • 监控数据流定时并提供处理等待时间

  3. 输入以下命令以启动 Macie 分类作业:

    ./scripts/test-macie-solution.sh \ --trigger-macie-job \ --stack-name <stack name>

    此命令执行以下操作:

    • 通过 Lambda 函数手动触发 Macie 分类作业

    • 监控任务执行状态并提供反馈

    • 在执行之前验证 Macie 服务的可用性

    • 处理账户中未启用 Macie 的情况

    • 提供详细的任务执行结果

  4. 输入以下命令以验证警报和数据隔离:

    ./scripts/test-macie-solution.sh \ --verify-alerts \ --stack-name <stack name>

    此命令执行以下操作:

    • 确认 EventBridge 规则配置正确且处于活动状态

    • 验证 Amazon SNS 主题配置和订阅状态

    • 检查数据隔离存储桶的设置和权限

    • 监控敏感数据是否移动到隔离存储桶

    • 验证完整的警报工作流程功能

常规 AWS
Task说明所需技能

选项 1-执行自动清理。

如果您使用默认堆栈名称,请输入以下命令来删除堆栈:

./scripts/cleanup-macie-solution.sh \ --full-cleanup

如果您使用了自定义堆栈名称,请输入以下命令来删除堆栈:

./scripts/cleanup-macie-solution.sh \ --full-cleanup \ --stack-name <stack name>

如果您使用了自定义堆栈名称和自定义参数,请输入以下命令来删除堆栈:

./scripts/cleanup-macie-solution.sh \ --full-cleanup \ --stack-name <stack name> \ --region <region> \ --disable-macie <true or false>
常规 AWS

选项 2-执行 step-by-step清理。

  1. 输入以下命令以停止活动进程:

    ./scripts/cleanup-macie-solution.sh \ --stop-processes \ --stack-name <stack name>

    此命令执行以下操作:

    • 关闭 EventBridge 规则以防止执行新的作业

    • 停止任何当前正在运行的 Macie 分类作业

    • 取消待处理的 Macie 任务执行

    • 清除队列中所有待处理的 Amazon SNS 消息

    • 为每个已停止的进程提供状态更新

  2. 输入以下命令清空 Amazon S3 存储桶:

    ./scripts/cleanup-macie-solution.sh \ --empty-buckets \ --stack-name <stack name>

    此命令执行以下操作:

  3. 输入以下命令删除 CloudFormation 堆栈:

    ./scripts/cleanup-macie-solution.sh \ --delete-stack \ --stack-name <stack name>

    此命令执行以下操作:

    • 启动 CloudFormation 堆栈删除过程

    • 通过实时状态更新监控删除进度

    • 通过详细的错误报告处理删除失败

    • 等待完全移除堆栈后再继续

    • 提供堆栈事件历史记录以供故障排除

  4. 输入以下命令清理 Macie 资源:

    ./scripts/cleanup-macie-solution.sh \ --cleanup-macie \ --stack-name <stack name>

    此堆栈执行以下操作:

    • 移除解决方案创建的自定义数据标识符

    • 清理所有剩余的 Macie 作业工件和发现

    • 如果堆栈启用了 Macie 会话,则将其禁用

    • 处理与其他应用程序共享 Macie 资源的情况

    • 提供每个 Macie 组件的详细清理状态

常规 AWS

验证清理完毕。

  1. 输入以下命令以验证堆栈是否已删除:

    aws cloudformation describe-stacks \ --stack-name <stack name> \ --region <region>
  2. 输入以下命令以验证 Amazon S3 存储桶是否已删除:

    aws s3 ls | grep macie
  3. 输入以下命令以验证 Macie 自定义数据标识符是否已删除:

    aws macie2 list-custom-data-identifiers \ --region <region>
  4. 输入以下命令以检查是否有剩余资源:

    ./scripts/cleanup-macie-solution.sh \ --verify-cleanup \ --stack-name <stack name>
常规 AWS

问题排查

问题解决方案

CloudFormation 堆栈状态显示 CREATE_FAILED

该 CloudFormation 模板配置为将日志发布到 CloudWatch 日志。您可以在中查看日志, AWS 管理控制台 这样就不必连接到 Amazon EC2 实例。有关更多信息,请参阅在控制台中查看 CloudFormation 日志(AWS 博客文章)。

CloudFormation delete-stack命令失败。

一些资源必须为空才能进行删除。例如,必须先删除 Amazon S3 存储桶中的所有对象或移除 Amazon EC2 安全组中的所有实例,然后才能删除该存储桶或安全组。有关更多信息,请参阅 Amazon S3 文档中的删除堆栈失败

解析参数时出错。

使用 AWS CLI 或 CloudFormation 控制台传入值时,请添加引号。

相关资源