【问题标题】:Allow access to custom prefix on S3 with Cognito允许使用 Cognito 访问 S3 上的自定义前缀
【发布时间】:2016-07-29 00:52:35
【问题描述】:

我需要允许用户使用我无法更改的特定前缀(即 username1)访问 S3 上的文件,因此我不能只使用 ${cognito-identity.amazonaws.com:sub} 作为前缀。我的 S3 存储桶已经填充了特定前缀下的内容 - 因此用户登录到我的应用程序,然后被允许访问这些特定前缀之一

目前在 AWS 上设置为允许用户使用 Firebase 和开发人员身份验证身份在 Cognito 角色中进行身份验证。每个用户帐户(电子邮件/密码)都有一个关联的 S3 前缀,他们必须能够访问该前缀。一些用户将共享此前缀(例如,两个用户访问 S3-bucket/username1)。用户不应该能够列出或访问除相关前缀之外的任何其他前缀。

我不太确定完成此任务的最佳方法是什么——仅使用 Cognito 角色或使用数据库和 lambda 函数 + api 端点、存储桶/用户策略或 ACL。有没有我想念的简单方法?

AWS 新手,非常感谢任何帮助!

tl;dr:如何只允许用户访问 S3 上具有特定前缀的文件,而不是 ${cognito-identity.amazonaws.com:sub} 变量?

【问题讨论】:

  • 你是说你不能使用 cognito-identity 前缀,因为你需要它不改变?一旦您验证了 Cognito 身份,它就不会改变,除非您将其与另一个合并,这看起来不像您正在做的那样。如果这是您的问题,您应该可以安全地使用该前缀。
  • @JeffBailey:不,我需要使用与认知身份无关的完全不同的前缀——我已经在特定前缀下将数据下载并存储到 S3,我想使用认知来允许用户访问这些前缀之一
  • Amazon Cognito 目前不支持自定义值。我们从其他客户那里听到了这个要求,并将在未来的服务更新中考虑它。
  • @MarkMercurio:感谢您告诉我。我认为这意味着无法使用 Cognito 完成我需要的工作,因此我将制定另一个解决方案。再次感谢,我会留意的,以防你们将来添加它!

标签: amazon-web-services amazon-s3 aws-lambda amazon-cognito aws-api-gateway


【解决方案1】:

如 cmets 中所述,Amazon Cognito 目前并不直接支持您的使用案例。您可以实现以下内容来实现您的目标:

  1. 正常使用 Cognito 对您的用户进行身份验证。 Cognito 身份将有权调用 API 网关端点。
  2. 您的 API(在 Lambda 中运行)使用 Cognito 身份 ID(在上下文中提供)来查找 Cognito 身份到您的自定义 S3 前缀的映射。
  3. 您的 API 使用 STS 生成临时凭证来访问该前缀,并将其返回给客户端。
  4. 客户端使用这些凭据直接向 S3 发出请求。

【讨论】:

    猜你喜欢
    • 2017-06-13
    • 2019-04-05
    • 2020-12-18
    • 2017-12-19
    • 2020-06-12
    • 2022-01-23
    • 2021-12-25
    • 2012-07-04
    • 2015-06-18
    相关资源
    最近更新 更多