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

Synthetics Canary 的安全注意事项

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

使用安全连接

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

Canary 命名注意事项

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

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

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

Canary 代码中的密钥

我们建议您不要将密钥(例如,访问密钥或数据库凭证)包含在 Canary 源代码中。有关如何使用 AWS Secrets Manager 来帮助保护密钥安全的更多信息,请参阅什么是 AWS 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 包装器库之前捕获异常。

缩小 IAM 角色的范围

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

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

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

标头日志记录

默认情况下,Canary 标头日志记录将仅记录请求 URL、响应代码和响应状态。在 Canary 脚本中,可以自定义日志记录来记录更多或更少信息。