如何保护 Amazon S3 存储桶中的文件?

上次更新时间:2019 年 5 月 17 日

我希望确保我的 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
    注意:您可以使用存储桶策略中的 deny 语句来限制特定 IAM 用户的访问权限,即便这些用户已经在 IAM 策略中被授予访问权限也是如此。
  • 使用 Amazon S3 阻止公有访问作为一种限制公开访问的集中化方法。阻止公有访问设置会覆盖存储桶策略和对象权限。请务必为您不希望允许公开访问的所有账户和存储桶启用阻止公有访问。
  • 在您的存储桶和对象上设置访问控制列表 (ACL)
    注意:如果您需要以编程方式管理权限,请使用 IAM 策略或存储桶策略,而非 ACL。但是,当存储桶策略超过最大文件大小 (20KB) 时,可以使用 ACL。或者,您也可以使用 ACL 授予对 Amazon S3 服务器访问日志Amazon CloudFront 日志的访问权限。

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

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

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

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

监控您的 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 的默认加密

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