amazon-web-services - 如何使用 S3 创建仅限会员的页面?
问题描述
我想使用 Cognito 和 S3 创建一个仅限会员的页面。我能够注册并使用 Cognito 登录,但我不知道只有登录用户才能访问的 S3 设置。我希望 S3 只能由在创建 Cognito 期间创建的经过身份验证的角色访问。我怎么做?
解决方案
要使用 IAM 角色控制访问,一种选择是在登录 Cognito 用户池并获取 JWT 令牌后使用 Cognito 身份池。
将 JWT 令牌呈现给身份池并获取与您在 Cognito 身份池中设置的 IAM 角色相关联的 AWS STS 令牌。
请注意用户池和身份池之间的区别,因为它们是不同的服务,但使用相同的名称“Cognito”,这可能会造成混淆。
用户池只是另一种身份验证服务,如 auth0、Google、Facebook。我们不会期望我们可以使用 Google 或 Auth0 在登录时提供的令牌来控制 AWS 资源访问。同样,我们无法使用登录用户池时用户池提供的令牌来控制对 AWS 资源的访问。
亚马逊文档在这一点上很模棱两可,经常在同一个文档中混淆用户池和身份池,造成混淆。
为了能够控制 AWS 资源访问,我们需要 IAM 角色和 AWS STS 令牌,这基本上与用户池本身无关(如谷歌、Auth0 等)。
我们需要一种将用户池令牌链接到 IAM 角色的机制。有几个选项。
使用 Cognito 身份池身份池正是为此目的提供的服务。
使用 Cognito 用户池组映射到 IAM 角色。
或者,我们可以使用 AWS javasdcript SDK,通过扮演角色直接获取 STS 令牌并使用它。
同样,请注意有关用户池和身份池的 Amazon 文档。就个人而言,他们不应该在同一个文档中混淆不同的服务。User Pool 只是另一个 Identity Token Provider 服务,如 Auth0,但 Identity Pool 是一种将外部令牌(如 Google、Auth0 或 Userpool)映射到 IAM 角色的服务。
如果坚持使用用户池 JWT 令牌,另一种选择可能是使用 API Gateway Cognito 用户池授权方。设置只有经过用户池身份验证的用户才能访问的 API 网关,并且 API 网关提供 S3 Web 内容。
ALB 还具有外部身份提供者身份验证选项。这可用于仅允许访问用户池身份验证的用户。
推荐阅读
- python - librosa.stft 和 scipy.signal.stft 计算的 Short-time Frourier Transform Result 有什么区别?
- python - pygame:通过 pygame.time.set_timer() 发送带有属性的自定义事件
- google-apps-script - 尝试使用谷歌导入功能抓取网页
- python-3.x - 确保至少传递了两个可选参数之一 Python
- flutter - Flutter:图像 base64 编码 | 颤振中base64编码的字节不准确
- r - 试图将一些旧的 ifelse 代码转换为 case_when
- python - 如何仅在 OrderedDict 中的每个键中提取第二个值元素?
- c# - 使用 Xamarin.iOS 将数据文件复制到输出
- javascript - Express 如何处理客户端 IP 更改?
- python - Sphinx 包含来自包的文档