如何确保 Amazon S3 存储桶中文件的安全?

上次更新时间:2020 年 11 月 10 日

我需要确保我的 Amazon Simple Storage Service (Amazon S3) 存储桶和对象的安全。我希望属于私有的资源必须私有。我该如何限制对我的 Amazon S3 资源的访问权限? 我该如何监控对这些资源的访问?

解决方法

限制对 S3 资源的访问

默认情况下,所有 S3 存储桶都是私有的,只能由获得显式授权的用户访问。使用 AWS 时,一项最佳实践是限制资源的访问权限,只允许有绝对需求的人员访问,并遵循最低权限的原则。

通过下列方式限制对 S3 存储桶或对象的访问:

  • 编写 AWS Identity and Access Management (IAM) 用户策略,以指定可以访问特定存储桶和对象的用户。IAM 策略提供了一种编程方法来管理多个用户的 Amazon S3 权限。有关创建和测试用户策略的更多信息,请参阅 AWS Policy GeneratorIAM 策略模拟器
  • 编写存储桶策略,定义对特定存储桶和对象的访问权限。您可以使用存储桶策略来授予跨多个 AWS 账户的访问权限、授予公开或匿名权限,并根据条件允许或或阻止访问。有关创建和测试存储桶策略的更多信息,请参阅 AWS Policy Generator
    注意:您可以在存储桶策略中使用拒绝声明来限制特定 IAM 用户的访问权限,即使该用户已经在 IAM 策略获得了访问权限。
  • 使用 Amazon S3 阻止公有访问功能集中限制公有访问。阻止公有访问设置会覆盖存储桶策略和对象权限。请务必为您不希望允许公开访问的所有账户和存储桶启用阻止公有访问。
  • 在您的存储桶和对象上设置访问控制列表 (ACL)
    注意:如果您需要以编程方式管理权限,请使用 IAM 策略或存储桶策略,而非 ACL。但是,当存储桶策略超过最大文件大小 (20KB) 时,可以使用 ACL。或者,您也可以使用 ACL 授予对 Amazon S3 服务器访问日志Amazon CloudFront 日志的访问权限。

使用 ACL 时,请考虑采用以下最佳实践来保护您的资源:

  • 请务必检查允许在存储桶或对象上执行 Amazon S3 操作的 ACL 权限。有关 ACL 权限以及它们允许的操作列表,请参阅我可以授予哪些权限?
  • 严格限制获得存储桶的读取写入访问权限的人员。
  • Everyone 组授予读取访问权限前,应仔细考虑具体用例,因为这将允许任何人访问存储桶或对象。
  • 绝对不要向所有人组授予写入权限。此设置将允许任何人向您的存储桶添加对象,然后由您支付费用。此设置还允许任何人删除存储桶中的对象。
  • 切勿向任何经过身份验证的 AWS 用户组授予写入访问权限。此组包含任何具有有效 AWS 账户的用户,而不仅仅是您账户下的 IAM 用户。如要控制您账户中 IAM 用户的访问权限,请改用 IAM 策略。有关 Amazon S3 如何评估 IAM 策略的更多信息,请参阅 Amazon S3 如何对请求授权

除使用策略、阻止公有访问和 ACL 外,您还可以通过以下方式来限制特定操作的访问权限:

  • 启动 MFA 删除,此功能要求用户使用 Multi-Factor Authentication (MFA) 设备通过身份验证后才能删除对象或禁用存储桶版本控制。
  • 设置 MFA 保护的 API 访问,此功能要求用户使用 AWS MFA 设备通过身份验证后才能调用特定的的 Amazon S3 API 操作。
  • 如果您需要临时与另一个用户共享某个 S3 对象,则可以创建预签名的 URL 来授予对该对象的限时访问权限。有关更多信息,请参阅与其他用户共享对象

监控 S3 资源

您可以通过以下方式启用日志记录和监控 S3 资源:

使用加密保护数据

如果您的使用案例需要在传输过程中加密,Amazon S3 支持 HTTPS 协议,可对传输到和来自 Amazon S3 的数据加密。默认情况下,所有 AWS 开发工具包和 AWS 工具都使用 HTTPS。
注意:如果使用第三方工具与 Amazon S3 交互,请联系开发人员以确认其工具是否也支持 HTTPS 协议。

如果您的使用案例需要对静态数据加密,Amazon S3 提供服务器端加密 (SSE)。SSE 的选项包括 SSE-S3SSE-KMSSSE-C。您可以在向存储桶写入对象时指定 SSE 参数。您还可以启用 存储桶的默认 SSE-S3 或 SSE-KMS 加密

如果您的使用案例需要客户端加密,请参阅使用客户端加密保护数据