Synthetics 金丝雀的安全注意事项 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Synthetics 金丝雀的安全注意事项

以下部分说明了在 Synthetics 中创建和运行金丝雀时应考虑的安全问题。

使用安全连接

由于金丝雀代码和金丝雀测试运行的结果可能包含敏感信息,因此,请不要让金丝雀通过未加密的连接来连接到终端节点。始终使用加密连接,例如以 https:// 开头的连接。

金丝雀命名注意事项

金丝雀的 Amazon Resource Name (ARN) 包含在用户代理标头中,作为从 CloudWatch Synthetics 包装器库中包含的 Puppeteer 驱动的 Chromium 浏览器发出的出站调用的一部分。这有助于标识 CloudWatch Synthetics 金丝雀流量,并再次将其与正在发出调用的金丝雀关联。

金丝雀 ARN 包含金丝雀名称。选择未显示专有信息的金丝雀名称。

此外,请确保仅将您的金丝雀指向由您控制的网站和终端节点。

金丝雀代码中的密钥和敏感信息

如果您使用 zip 文件将金丝雀代码直接传递到金丝雀中,则该脚本的内容会显示在 Amazon CloudTrail 日志中。

如果您在金丝雀脚本中有敏感信息或密钥(例如访问密钥或数据库凭证),我们强烈建议您将该脚本作为版本控制对象存储在 Amazon S3 中,并将 Amazon S3 位置传递到金丝雀中,而不是通过 zip 文件传递金丝雀代码。

如果您确实要使用 zip 文件传递金丝雀脚本,我们强烈建议您不要将密钥或敏感信息包含在金丝雀源代码中。有关如何使用 Amazon Secrets Manager 来帮助保护密钥安全的更多信息,请参阅什么是 Amazon Secrets Manager?

权限注意事项

我们建议您限制对由 CloudWatch Synthetics 创建或使用的资源的访问。对金丝雀存储测试运行结果和其他构件(例如,日志和屏幕截图)的 Amazon S3 存储桶使用严格权限。

同样,对金丝雀源代码的存储位置保留严格权限,以免用户意外或恶意删除用于金丝雀的 Lambda 层或 Lambda 函数。

要帮助确保您运行所需的金丝雀代码,您可以对用于存储金丝雀代码的 Amazon S3 存储桶使用对象版本控制。之后,在您指定此代码作为金丝雀运行时,您可以将对象 versionId 作为路径的一部分,如以下示例所示。

https://bucket.s3.amazonaws.com/path/object.zip?versionId=version-id https://s3.amazonaws.com/bucket/path/object.zip?versionId=version-id https://bucket.s3-region.amazonaws.com/path/object.zip?versionId=version-id

堆栈跟踪和异常消息

预设情况下,CloudWatch Synthetics 金丝雀会捕获金丝雀脚本引发的所有异常,无论该脚本是自定义脚本还是蓝图中的脚本。CloudWatch Synthetics 将异常消息和堆栈跟踪记录到三个位置:

  • 记录到 CloudWatch Synthetics 服务中,以便在描述测试运行时加快调试速度

  • 记录到 CloudWatch Logs 中,具体取决于创建 Lambda 函数时使用的配置

  • 记录到 Synthetics 日志文件中,该文件是一个纯文本文件,已上载到由您为金丝雀的 resultsLocation 设置的值所指定的 Amazon S3 位置

如果您要发送和存储的信息较少,则可以在异常返回到 CloudWatch Synthetics 包装器库之前捕获异常。

您也可以将请求 URL 包含在错误中。CloudWatch Synthetics 会扫描脚本引发的错误中的任何 URL,并根据 restrictedUrlParameters 配置编辑其中的受限 URL 参数。如果您在脚本中记录错误消息,则可以使用 getSanitizedErrorMessage 在记录日志之前编辑 URL。

缩小 IAM 角色的范围

建议您不要将金丝雀配置为访问潜在的恶意 URL 或终端节点。将金丝雀指向不受信任或未知的网站或端点可能会将您的 Lambda 函数代码暴露给恶意用户的脚本。假设一个恶意网站可以破解 Chromium,它可能会以与您使用 Internet 浏览器连接时类似的方式访问您的 Lambda 代码。

使用缩小了权限范围的 IAM 执行角色来运行您的 Lambda 函数。这样,如果 Lambda 函数受到恶意脚本的影响,它在作为金丝雀的 Amazon 账户运行时可采取的操作会受到限制。

在使用 CloudWatch 控制台创建金丝雀时,会使用缩小了权限范围的 IAM 执行角色来进行创建。

敏感数据编辑

CloudWatch Synthetics 捕获 URL、状态代码、故障原因(如有)以及请求和响应的标头及请求体和响应体。这使得金丝雀用户能够理解、监控和调试金丝雀。

以下各节中所述配置可以在金丝雀执行的任何时间点进行设置。您还可以选择对不同的 Synthetics 步骤应用不同的配置。

请求 URL

预设情况下,CloudWatch Synthetics 会将每个 URL 的请求 URL、状态代码和状态原因记录在金丝雀日志中。请求 URL 也可以出现在金丝雀执行报告、HAR 文件等中。请求 URL 可能会包含敏感查询参数,例如访问令牌或密码。您可以编辑敏感信息,以免被 CloudWatch Synthetics 记录下来。

若要修改敏感信息,请设置配置属性 restrictedUrlParameters。有关更多信息,请参阅SyntheticsConfiguration 类。配置此属性后,CloudWatch Synthetics 会在记录日志前根据 restrictedUrlParameters 属性修改 URL 参数,包括路径和查询参数值。如果您在脚本中记录 URL,则可以使用 getSanitizedUrl(url, stepConfig = null) 在记录日志之前编辑 URL。有关更多信息,请参阅SyntheticsLogHelper 类

标头

预设情况下,CloudWatch Synthetics 不记录请求/响应标头。对于 UI 金丝雀,此为使用 syn-nodejs-puppeteer-3.2 和更高版本运行时金丝雀的默认行为。

如果标头不包含敏感信息,则可以通过将 includeRequestHeadersincludeResponseHeaders 属性设置为 true 来在 HAR 文件和 HTTP 报告中启用标头。您可以启用所有标头,但选择限制敏感标头键的值。例如,您可以选择只编辑金丝雀生成的构件中的 Authorization 标头。

请求体和响应体

预设情况下,CloudWatch Synthetics 不会将请求/响应体记录在金丝雀日志或报告中。此信息对 API 金丝雀特别有用。Synthetics 捕获所有 HTTP 请求,并可显示标头、请求体和响应体。有关更多信息,请参阅executeHttpStep(stepName, requestOptions, [callback], [stepConfig])。您可以选择将 includeRequestBodyincludeResponseBody 属性设置为 true 来启用请求/响应体。