记录交互和缓解措施 - AWS 规范性指导

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

记录交互和缓解措施

预签名 URL 包含签名,可在到期前的一段时间内用于执行其签名的特定 API 操作。应将其视为临时访问凭证。签名应仅对需要知道的各方保密。在大多数环境中,这是发送请求的客户端和接收请求的服务器。作为直接 HTTPS 会话的一部分发送签名会保持其私有性,因为只有 HTTPS 会话的参与者才能看到传输签名的 URI。

对于预签名 URLs,签名作为X-Amz-Signature查询字符串参数传输。查询字符串参数是 URI 的组成部分。风险在于客户端可能会用它记录 URI 和签名。客户端可以访问整个 HTTP 请求,并且可以记录请求的任何部分、数据和标头(包括身份验证标头)。但是,按照惯例,这种情况并不常见。URI 日志记录更为常见,在访问日志等情况下是必需的。在登录之前,客户端应使用密文或屏蔽来删除签名。 URIs

在某些环境中,用户允许中介(代理)查看其 HTTPS 会话。启用代理需要对客户端系统的高级特权访问权限,因为它们需要配置和可信证书。在客户端中间环境的本地环境中安装代理配置和可信证书允许非常高的权限级别。为此,应严格控制与此类中介机构的接触。

中介的目的通常是屏蔽不需要的出口,并跟踪其他出口。因此,此类中介机构通常会记录请求。尽管中介机构可以像客户端一样记录任何内容、标题和数据(所有这些都非常敏感),但他们更常见的是记录 URIs,例如包含X-Amz-Signature查询字符串参数的内容。

缓解措施

我们建议 URI 日志记录可以删除X-Amz-Signature查询字符串参数,编辑整个查询字符串,或者将信息视为高度机密信息,就像直接访问中间服务器一样。尽管强烈建议使用这些保护措施,但只要泄露延迟足够长的时间以至于签名 URLs 到期,预签名过期这一事实就可以降低日志泄露的风险。

Amazon S3 还会看到签名,并且必须对其进行适当的处理。Amazon S3 服务器访问日志包含请求 URIX-Amz-Signature,但建议对其进行编辑。在记录 Amazon S3 CloudTrail 的数据事件时,情况也是如此。 您可以使用自定义数据标识符将 CloudWatch Amazon Logs 配置为屏蔽数据

以下正则表达式与 URI 中显示的相匹配:X-Amz-Signature

X-Amz-Signature=[a-f0-9]{64}

以下正则表达式添加了分组模式,以更具体地标识要替换的文本:

(?:X-Amz-Signature=)([a-f0-9]{64})

如果您有如下访问日志条目:

X-Amz-Signature=733255ef022bec3f2a8701cd61d4b371f3f28c9f193a1f02279211d48d5193d7

第一个正则表达式将访问日志条目转换为:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

第二个正则表达式在支持非捕获组的系统上,将访问日志条目转换为:

X-Amz-Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX