如何使用Cognito访问私有S3存储桶

8
我有一个Cognito用户池,连接了Google作为身份提供者(这样我就可以用gmail帐户登录)。我还有一个私有的S3存储桶,里面有文件。如何使用我的Lambda函数,使用Cognito返回的令牌(AcessToken、IdToken)来访问我的S3存储桶,而该存储桶不是公开的?
我只想使用我的Cognito访问私人S3上的文件。类似于Lambda函数的Cognito授权器,但用于S3存储桶的情况。
2个回答

4

您可以使用 签名 URL 来实现此目的。

基本上,当您的用户成功通过 Cognito 进行身份验证后,您的 Lambda 函数将为所请求的对象生成 s3 预签名 URL 并将其回复回来。

AWS 文档示例

还可以查看这个AWS 论坛线程


2
但这将生成一个链接,该链接将在一段时间内有效,任何获得链接的人都可以访问该对象。 我希望资源直接由Cognito保护。 - Lukasz_K_K
你可以将TTL设置得非常低,这样它只能使用一次,而且不能与任何人共享。否则,你将不得不通过Lambda(带有6MB大小限制)从S3代理整个文件体,或者使用部署在EC2上的任何其他解决方案进行代理。 - Igor K.
1
不需要签名URL。使用AWS SDK和您的Cognito id_token,您可以请求AWS凭证(临时)。 - Sussch

1

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