亚马逊AWS官方博客
如何使用 Amazon Macie 创建自定义提醒
Amazon Macie 是一项安全服务,可以让您轻松发现、分类和保护 Amazon S3 中的敏感数据。Macie 会收集 AWS CloudTrail 事件和 Amazon S3 中的元数据,例如权限和内容分类。在这篇文章中,我将向您展示如何使用 Amazon Macie 来为这些数据集创建自定义提醒,以通知您感兴趣的事件和对象。也会介绍可以在 Macie 中找到的不同数据类型,并讨论如何识别与设定和安全用例相关的字段。您将从本文学到一种适用于您自己场景的调查和自定义提醒的方法。
注意⚠️:如果您之前没有使用过 Amazon Macie , 可以通过该链接介绍的操作步骤来作为起点。
了解 Macie 中的数据类型
Macie 能发现三种数据源:分别为 CloudTrail 事件,S3 Bucket(S3存储桶)元数据和S3 Object(S3存储对象)元数据。每个数据源都单独存储在自己的索引中。因此,在编写查询时,在不同的查询中保留来自不同数据源的字段就显得非常重要。
在每个数据源中,有两种类型的字段:Extracted(提取的字段)和 Generated(生成的字段)。Extracted(提取的字段)的字段直接来自于与该数据源关联的、预先存在的 AWS 字段。 例如,CloudTrail 数据源中的提取字段直接来自于 CloudTrail 日志中记录的事件,这些事件对应于 IAM 用户,角色或 AWS 服务所执行的操作。您可以参阅CloudTrail 日志文件示例来获得更多详细的信息。
Generated(生成的字段)由 Macie 创建。这些字段为创建更强大的查询提供了额外的安全值和上下文。例如,通过从 CloudTrail 事件中获取 IP 地址并将其与 global service provider list(全球服务提供商列表)进行匹配来填充 ISP (互联网服务提供商)字段,就可以搜索出关联 ISP(互联网服务提供商)的API调用。
下面的链接会描述三个数据源中的每个字段的更多细节。我将使用它们来发现哪些字段适合调查特定的安全用例。
- CloudTrail data reference documentation
- S3 object data reference documentation
- S3 bucket data reference documentation
选择一个安全用例来自定义提醒
出于本文的目的,我将聚焦于一个特定的安全用例来作为演示。对于您要调查的任何特定安全用例,发现由 Macie 收集的相关数据字段并将其转换为自定义提醒的过程,都是相同的。基于此,我将寻找存储在S3中的敏感或关键数据的这一主题进行探索,因为它影响许多 AWS 客户。
在开始设计提醒时,第一步要考虑的是与主题相关的所有资源,属性,操作和身份。在这个案例,我将寻找存储在 S3 中的敏感或关键数据,因此以下是一些可能有用的数据字段:
- S3 存储桶和对象资源
- S3 配置和安全属性
- S3上的读取,写入和删除操作
- 与 S3 资源关联的IAM用户,角色和访问策略
我将使用上述列表来指导我在Macie参考文档中搜索相关字段。首先,我将深入研究CloudTrail数据。
探索CloudTrail数据
使用 CloudTrail 数据源是了解 AWS 环境中正在发生什么活动的最佳方法,因为它包含您的 AWS API 调用以及 API 调用者的身份信息。如果您不熟悉 CloudTrail,请访问 AWS CloudTrail 文档以获取更多信息。
我有一个关键的 S3 存储桶,我希望在我的企业环境中,当任何外部网络尝试对该S3存储桶进行写入时,我都会收到通知。在这种情况下,通常由我自己组织的身份识别系统通过联合身份验证的方式来控制对存储桶的写入操作。这意味着我想编写一个查询,搜索出没有通过联合身份验证访问方式的针对S3存储桶对象的写入尝试。如果您不熟悉联合身份验证是什么,那没关系,您仍然可以继续学习。如果您对联合访问感兴趣,请参阅IAM身份提供商和联合文档。
我首先浏览 “Macie CloudTrail Reference documentation(Macie CloudTrail参考文档)”中标题为“ CloudTrail Data Fields Extracted by Macie. ” 的部分。我发现objectsWritten.key 的描述满足我要调查S3资源上的操作的需求。
接下来,我将从 CloudTrail 的事件中的 userIdentity 对象中提取的 CloudTrail 字段名称。 userIdentity.type字段看起来符合需求,但我不确定该字段可以接受的值。通过使用“CloudTrail userIdentity Element documentation (CloudTrailuserIdentity 元素文档)”作为参考,我查找 type(类型)字段并查看 FederatedUser 是否列为其中的一个值。
匹配!我现在已经拥有编写第一个自定义查询所需的所有信息。我将搜索所有“user sessions(用户会话)”(对应于Macie用户的5分钟 CloudTrail 事件聚合)中既尝试写入我的S3存储桶又使用的不是 FederatedUser 的 userIdentity 类型进行的任何 API 调用。注意我正在搜索的是事件组而不是单个事件,因为我们正在查找与特定 API 调用相关的事件,而不是所有 API 调用相关的所有事件。为了匹配不等于FederatedUser的值,我使用正则表达式并将FederatedUser放在括号内,并在开头添加波浪号(〜)。以下是构造出的搜索查询语句
objectsWritten.key:/arn:aws:s3:::my_sensitive_bucket.*/ AND userIdentityType.key:/(~FederatedUser)/
现在,是时候在 Macie 的 Research页面上测试此查询语句并将其转换为一个自定义提醒了。
新建自定义提醒
创建自定义提醒的第一步是从“Research”页面运行查询语句。 这样做的好处是可以验证结果是否符合我的预期,并了解警报发生的频率。 一旦我对查询结果感到满意,只需点击几下即可设置自定义提醒。
1.在 Macie 左侧的导航面板中,选择“Research
2.从下拉菜单中的选项中选择与查询匹配的数据源。在这个案例中,我选择 “CloudTrail Data
3.复制我们的上面章节中构造的查询语句到查询框中后,敲打“Enter”键
objectsWritten.key:/arn:aws:s3:::my_sensitive_bucket.*/ AND userIdentityType.key:/(~FederatedUser)/
4.此时,可以验证结果是否符合我的预期,并对查询进行任何必要的修改。 要学习“Research”页面如何帮助验证和修改查询功能的更多信息,请参阅“ Using the Macie Research Tab ”。
5.一旦我对结果满意,可以点击 “ Save query as alert “ 图标,将该查询语句保存为一个提醒。
6.现在,我填写该页面的剩余字段:包括Alert title Description Min number of matches , 以及Severity 。 有关这些字段的详细信息,请参阅“Macie Adding New Custom Basic Alerts. ”
7.在 “Whitelisted users ” 字段,我可以添加我希望从提醒中排除的从Research页面的查询结果中出现的任何用户。 有关此功能的更多细节,请参阅Whitelisting Users or Buckets for Basic Alerts
8.最后,点击“SAVE”按钮。
我现在已经成功自定义了一个具有基本功能的提醒,每次当除 FederatedUser 之外的 userIdentityType的API调用写入我的存储桶时,都会提醒我。现在,我将使用S3对象和S3存储桶数据源来查找更多有用的字段。
使用 S3 对象数据源
S3 对象数据源包含从 S3 API 元数据中提取的字段,以及由Macie填充的与内容分类相关的字段。为了扩展我对S3中存储的敏感或关键数据的搜索和提醒,我将查看 S3 Object Data Reference documentation 文档来查找候选字段。
我看到S3服务器端加密设置元数据可能很有用,因为我知道某个存储桶中的所有对象都应该使用 AES256 进行加密,因此我希望当一个对象上传时没有匹配到这个属性时,便通知我。
为了创建查询,我将 server_encryption 字段和 bucket 字段组合在一起,以匹配指定存储桶中的所有 S3 对象。请注意正则表达式中的“ /.* ” 和 ” .*/ “。这允许我匹配所有包含有 my_sensitive_project 字符的存储桶。
filesystem_metadata.bucket:/.*my_sensitive_project.*/ AND NOT filesystem_metadata.server_encryption:”AES256”
接下来,我有另一个不同名字的存储桶(my_logs_bucket),我知道该存储桶中的对象不应该包含任何个人身份信息( PII )。个人身份信息通常包括姓名,电子邮件地址和信用卡号等信息。有关 PII 的完整列表,请参阅“ Classifying Data with Amazon Macie. ”获知。我想设置一个提醒,每当有包含任何类型的PII的对象被添加到该存储桶时便通知我。由于这是由 Macie 提供的数据字段,因此我查看 Generated Fields 标题下的 pii_impact 字段。我的查询语句将搜索任何不等于 none 的值。
filesystem_metadata.bucket:”my_logs_bucket” AND NOT pii_impact:”none”
使用 S3 存储桶数据源
S3 存储桶数据源包含从S3存储桶API中提取的信息,以及Macie通过处理存储桶元数据和访问控制列表(ACL)生成的字段。按照与上面提及的相同的方法,我通过S3 Bucket Data Reference documentation来查找可帮助我创建有用提醒的字段。
这里有很多可用的字段,具体依赖于我对我的存储桶事先知道多少信息以及我将要安全防护的哪一种类型的安全向量。为了缩小搜索范围,我决定添加一些防止意外或未经授权的数据销毁的保护措施。
在 S3 Versioning 段落中,我看到 Multi-Factor Authentication Delete 设置是一个可用的字段。由于我将此存储桶锁定为仅允许 MFA 执行删除操作,因此我可以创建一个提醒,以便每次当禁用MFA删除操作时通知我。
bucket:”my_critical_bucket” AND versioning.MFADelete:”disabled”
潜在数据销毁的另一种方式是通过设置存储桶生命周期的到期设置,该设置会在存储桶生命周期到期后自动删除数据。我想知道当有人将该设置更改为较低的数值时,及时提醒我,以便我可以进行修改,防止丢失任何最新数据。
bucket:”my_critical_bucket” AND lifecycle_configuration.Rules.Expiration.Days:<3
现在我已经收集了另一组潜在的提醒查询,我可以通过我用于 CloudTrail 数据的相同步骤将它们转换为自定义提醒。保存后,只要找到匹配项,我就会开始在 Macie 控制台中收到通知。我可以通过从 Macie 导航窗格中选择“ Alerts ”来查看我收到的提醒。
现在我已经整理好了另一组提醒查询语句,我可以通过上述“自定义提醒”段类似的步骤,在“ Research ”页面中选择“ S3 bucket properties ” 并将它们转换为一个自定义提醒。当保存后,只要找到匹配项,我就会在 Macie 控制台中收到提醒。我可以通过从 Macie 左侧的导航栏中选择“ Alerts ”来查看收到的提醒。
总结
我在本文刚开始的部分描述了Macie中可用的各种数据类型和数据源。 接着通过使用一个特定的安全用例来演示如何从文档中寻找相应字段后,逐步完成了创建查询并将其转换为自定义提醒的过程。 我的目标是向您展示如何根据您的特定环境来构建提醒,并解决您自己的个性化需求。另外您所有自定的提醒都可以通过Macie左侧导航栏的”Settings”,然后点击” Basic alerts”图标来查看和修改。如果您有任何问题,或者您想请求一个新的字段和数据源,可以来 Macie论坛发帖讨论或联系 AWS Support。
Source ariticle: https://aws.amazon.com/blogs/security/how-to-create-custom-alerts-with-amazon-macie/