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

Synthetics Canary 的安全注意事项

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

使用安全连接

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

Canary 命名注意事项

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

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

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

Canary 代码中的密钥

我们建议您不要将密钥(例如,访问密钥或数据库凭证)包含在 Canary 源代码中。有关如何使用 Amazon Secrets Manager 来帮助保护密钥安全的更多信息,请参阅什么是 Amazon Secrets Manager?

权限注意事项

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

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

要帮助确保您运行所需的 Canary 代码,您可以对用于存储 Canary 代码的 Amazon S3 存储桶使用对象版本控制。之后,在您指定此代码作为 Canary 运行时,您可以将对象 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 Canary 会捕获 Canary 脚本引发的所有异常,无论该脚本是自定义脚本还是蓝图中的脚本。CloudWatch Synthetics 将异常消息和堆栈跟踪记录到三个位置:

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

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

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

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

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

缩小 IAM 角色的范围

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

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

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

敏感数据编辑

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

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

请求 URL

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

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

标头

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

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

请求体和响应体

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