使用AWS HTTP API Gateway作为代理访问私有S3存储桶

3
我有一个私有的S3存储桶,里面有很多小文件。我想使用AWS API Gateway作为代理,将存储桶的内容(只读访问)暴露出来。S3存储桶和AWS API Gateway属于同一AWS账户,并且在同一VPC和可用区中。
AWS API Gateway有两种类型:HTTP API和REST API。REST API的配置选项更加高级,此外,REST API支持比HTTP API更多的AWS服务集成。实际上,我描述的用例在REST API的文档标签页中完全涵盖。但是,REST API有一个巨大的缺点-它比HTTP API贵约70%,这个价格带来了更多的配置选项,但就目前而言,我只需要一个 - 与S3服务的集成,因此我认为这种类型的服务不适合我的用例。我开始搜索是否可以将HTTP API与S3集成,到目前为止,我还没有找到任何实现它的方法。
我尝试创建/编辑与HTTP API网关实例相关联的服务链接角色,但这些角色无法编辑(只有只读访问权限)。目前为止,我不知道接下来应该在哪里搜索,或者是否可以使用HTTP API实现我的目标。

1
你想使用 API 网关有特别的原因吗?一般来说,CloudFront 是更好的选择。 - Jason Wadsworth
@JasonWadsworth 我需要在让用户通过网关端点访问文件之前对其进行授权。授权是基于令牌的,并由两个 Lambda 处理,一个用于生成令牌(使用相同的网关公开),另一个用于验证令牌(由网关用作授权者)。 - Mark
我仍然建议使用CloudFront。请查看此文章,了解如何使用Lambda@Edge授权访问资源。它使用Cognito,但无论授权来源如何,原则都是相同的。https://aws.amazon.com/blogs/networking-and-content-delivery/authorizationedge-how-to-use-lambdaedge-and-json-web-tokens-to-enhance-web-application-security/ - Jason Wadsworth
1个回答

0

我是AWS HTTP API的粉丝。 我每天使用一个非常类似的API。 我的做法是使用AWS Lambda函数与API路径集成。

对我有效的方法是:

定义API路径,并将其与AWS Lambda函数集成。

让集成的Lambda函数返回签名URL,以便通过API调用提供对任何对象的访问。

有几种不同的方式可以将您想要的对象名称传递给为API调用提供服务的Lambda函数。

这就是简短的答案。 我计划稍后给出更长的答案。 但是这个方法对我很有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接