如何确保 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 Generator和 IAM 策略模拟器。
- 编写存储桶策略,定义对特定存储桶和对象的访问权限。您可以使用存储桶策略来授予跨多个 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 资源:
- 配置 AWS CloudTrail 日志。默认情况下,CloudTrail 仅跟踪存储桶级别的操作。如要跟踪对象级别的操作(例如 GetObject),请为启用 Amazon S3 数据事件。
- 启用 Amazon S3 服务器访问日志记录功能。有关查看这些日志的更多信息,请参阅 Amazon S3 服务器访问日志格式。
- 使用 AWS Config 来监控存储桶 ACL 和存储桶策略,看是否存在允许公有读取或写入访问的违规。有关更多信息,请参阅 s3-bucket-public-read-prohibited 和 s3-bucket-public-write-prohibited。
- 使用 AWS IAM 访问分析器来帮助您识别和审核授予从您的 AWS 账户之外访问 S3 资源权限的 S3 存储桶策略或 IAM 策略。
- 使用 Amazon Macie 来自动识别存储在存储桶中的敏感数据、对存储桶的广泛访问权限以及账户中未加密的存储桶。
- 将 CloudTrail 与 Amazon CloudWatch 或 AWS Lambda 等其他服务结合使用,从而在对您的 S3 资源执行特定操作时触发特定的进程。有关更多信息,请参阅使用 CloudWatch Events 记录 Amazon S3 对象级别操作。
- 如果您购买了商业支持计划或企业支持计划,则可以使用 AWS Trusted Advisor 的 Amazon S3 存储桶权限检查。此项检查可让您了解哪些存储桶具有开放访问权限。
注意:此 Trusted Advisor 检查不监控覆盖存储桶 ACL 的存储桶策略。
使用加密保护数据
如果您的使用案例需要在传输过程中加密,Amazon S3 支持 HTTPS 协议,可对传输到和来自 Amazon S3 的数据加密。默认情况下,所有 AWS 开发工具包和 AWS 工具都使用 HTTPS。
注意:如果使用第三方工具与 Amazon S3 交互,请联系开发人员以确认其工具是否也支持 HTTPS 协议。
如果您的使用案例需要对静态数据加密,Amazon S3 提供服务器端加密 (SSE)。SSE 的选项包括 SSE-S3、SSE-KMS 或 SSE-C。您可以在向存储桶写入对象时指定 SSE 参数。您还可以启用 存储桶的默认 SSE-S3 或 SSE-KMS 加密。
如果您的使用案例需要客户端加密,请参阅使用客户端加密保护数据。