Amazon SQS 安全最佳实践 - Amazon Simple Queue Service

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

Amazon SQS 安全最佳实践

AWS 为 Amazon SQS 提供了许多安全功能,您应该在自己的安全策略中查看这些功能。以下是针对 Amazon SQS 的预防性安全最佳实践。

注意

提供的具体实施指南适用于常见的使用案例和实施。我们建议您在特定使用案例、架构和威胁模型的上下文中查看这些最佳实践。

确保队列不可公开访问

除非您明确要求互联网上的任何人能够读取或写入您的 Amazon SQS 队列,否则应确保您的队列不可公开访问(世界上所有人或任何经过身份验证的 AWS 用户都可以访问)。

  • 避免创建 Principal 设置为 "" 的策略。

  • 避免使用通配符 (*)。相反,对一个特定用户或多个用户命名。

实施最低权限访问

授予权限后,您可以决定这些权限的接收者、权限所针对的队列以及要允许这些队列使用的特定 API 操作。实施最低权限对于降低安全风险并减少错误或恶意意图的影响至关重要。

遵循授予最低权限的标准安全建议。也就是说,只授予执行特定任务所需的权限。您可以使用安全策略的组合来实现这一点。

Amazon SQS 使用创建者-使用者模型,并且需要以下三类用户账户访问权限:

  • 管理员 - 用于创建、修改和删除队列的访问权限。管理员还控制队列策略。

  • 创建者 - 用于将消息发送到队列的访问权限。

  • 使用者 - 用于接收和删除来自队列的消息的访问权限。

有关详细信息,请参阅以下章节:

对需要 Amazon SQS 访问权限的应用程序和 AWS 服务使用 IAM 角色

要使诸如 Amazon EC2 之类的应用程序或 AWS 服务访问亚马逊 SQS 队列,它们必须在 AWS API AWS 请求中使用有效的证书。由于这些证书不会自动轮换,因此您不应将 AWS 证书直接存储在应用程序或 EC2 实例中。

您应该使用 IAM 角色来管理需要访问 Amazon SQS 的应用程序或服务的临时凭证。使用角色时,您不必向 EC2 实例或 AWS 服务分配长期证书(例如用户名、密码和访问密钥),例如 AWS Lambda。相反,该角色提供临时权限,供应用程序在调用其他 AWS 资源时使用。

有关更多信息,请参阅 IAM 用户指南中的 IAM 角色角色的常见场景:用户、应用程序和服务

实施服务器端加密

要减少数据泄漏问题,可以通过静态加密,使用存储在与消息存储位置不同的位置的密钥来对消息进行加密。服务器端加密 (SSE) 提供静态数据加密。Amazon SQS 在存储消息时将在消息级别对数据进行加密,并在您访问消息时为您解密消息。SSE 使用中管理的密钥 AWS Key Management Service。只要您对请求进行身份验证并具有访问权限,访问加密队列和未加密队列之间就没有区别。

有关更多信息,请参阅 Amazon 中的静态加密 SQS亚马逊SQS密钥管理

实施传输中数据加密

如果没有 HTTPS (TLS),基于网络的攻击者可以使用诸如之类的攻击窃听网络流量或对其进行操纵。 man-in-the-middle仅允许使用队列策略中的 aws:SecureTransport 条件通过 HTTPS (TLS) 加密连接以强制请求使用 SSL。

考虑使用 VPC 端点来访问 Amazon SQS

如果您的队列必须能够与之交互,但是绝对不能暴露在 Internet 上,则可使用 VPC 端点来仅为对特定 VPC 中的主机的访问进行排队。您可以使用队列策略控制从特定 Amazon VPC 端点或特定 VPC 对队列的访问。

Amazon SQS VPC 端点提供两种方式来控制对消息的访问:

  • 您可以控制允许通过特定 VPC 端点访问的请求、用户或组。

  • 您可以使用队列策略控制哪些 VPC 或 VPC 端点有权访问您的队列。

有关更多信息,请参阅 适用于亚马逊的亚马逊 Virtual Private Cloud 终端节点 SQS为亚马逊创建亚马逊VPC终端节点策略 SQS