S3 Object Lambda 访问点的安全注意事项 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

S3 Object Lambda 访问点的安全注意事项

S3 Object Lambda 允许客户在数据离开 S3 时将 Amazon Lambda 作为计算平台,灵活而广泛地对数据执行自定义转换。S3 和 Lambda 在默认情况下是安全的,但是为了维持这种安全性,Lambda 作者需要特别考虑一些注意事项。S3 Object Lambda 要求所有访问都由经过身份验证的委托人(无匿名访问)和 HTTPS 进行。

为了降低这种风险,我们建议将 Lambda 执行角色的作用范围谨慎地限制在可能的最小权限集内。此外,Lambda 应尽可能通过提供的预签名 URL 访问其 S3。

配置 IAM 策略

S3 访问点支持 Amazon Identity and Access Management (IAM) 资源策略,这些策略允许您按资源、用户或其他条件控制访问点的使用。有关更多信息,请参阅 为 Object Lambda 访问点配置 IAM 策略

加密行为

由于 Object Lambda 访问点同时使用 Amazon S3 和 Amazon Lambda,因此加密行为会存在差异。有关默认 S3 加密行为的更多信息,请参阅 为 Amazon S3 存储桶设置默认服务器端加密行为

  • 将 S3 服务器端加密与 Object Lambda 接入点结合使用时,需要先将对象解密,然后再发送到 Amazon Lambda。Amazon Lambda 会对未加密的对象进行处理,直到出现原始调用者(在 GET 时)。

  • 为防止密钥被记录,S3 将拒绝以下对象的 GET 请求:使用客户提供的密钥通过服务器端加密来加密的对象。如果 Lambda 函数可以访问客户端提供的密钥,它仍可检索这些对象。

  • 将 S3 客户端加密与 Object Lambda 访问点结合使用时,请确保 Lambda 有权访问密钥,以解密和重新加密对象。

接入点安全性

S3 Object Lambda 使用两个接入点,一个 Object Lambda 接入点和一个标准 S3 接入点(称为支持接入点)。当您向 Object Lambda 接入点发出请求时,S3 会代表您调用 Lambda,或将请求委派给支持的接入点,具体取决于 S3 Object Lambda 配置。当为 GetObject 调用 Lambda 时,S3 将通过支持的访问点,代表您向对象生成一个预签名 URL。您的 Lambda 函数将在调用时接收此 URL 以作为输入。

您可将 Lambda 函数设置为使用此 URL 来检索原始对象,而不是直接调用 S3。通过此模型,您可以为对象应用更好的安全边界。您可以将通过 S3 存储桶或 S3 接入点进行的直接对象访问,限制为一组有限的 IAM 角色或用户。这也可以防止您的 Lambda 函数受到混淆代理问题的影响,其中具有与 GetObject 调用者不同权限的配置错误的函数可能会允许或拒绝对对象的访问。

Object Lambda 接入点公共访问权限

S3 Object Lambda 不允许匿名访问和公共访问,因为 Amazon S3 需要授权您的身份,来完成任何 S3 Object Lambda 请求。当通过 Lambda Object 接入点调用 GetObject 请求时,您需要已授予配置的 Lambda 函数的 lambda:InvokeFunction 权限。同样,当通过 Object Lambda 接入点调用其他 API 时,您需要具有所需的 s3:* 权限。

如果您不具有这些权限,则调用 Lambda 或委托给 S3 的请求将失败,并出现“403 Forbidden”(403 禁止访问)错误消息。必须由经过身份验证的委托人进行所有访问。如果您需要公共访问权限,可使用 Lambda@Edge 作为可能的替代方案。有关更多信息,请参阅《Amazon CloudFront 开发人员指南》中的使用 Lambda@Edge 在边缘进行自定义