【问题标题】:Secure way to download AWS S3 Contents from mobile app从移动应用程序下载 AWS S3 内容的安全方式
【发布时间】:2015-07-24 21:57:15
【问题描述】:

问题陈述: 我想通过移动应用程序从多个移动设备下载 S3 内容。

我遇到的解决方案。

解决方案 1

  1. 在 AWS 中创建一个 IAM 用户。创建一个策略以仅下载特定存储桶的 S3 内容并将该策略分配给 IAM 用户。
  2. 每当移动应用程序想要从 S3 下载内容时,移动应用程序都会调用我的服务器 API,该 API 将返回 IAM 用户的凭据。
  3. 然后移动应用程序将使用这些凭据下载 S3 内容。

解决方案 2

  1. 使用 AWS Cognito 服务。

但是,第一种方法的问题是我必须管理凭据服务器端。也有人可以轻松地回溯并在应用程序之外使用这些凭据来下载内容。

第二种方法我完全不知道。然而,在 AWS COGNITO 服务的常见问题解答中,我没有找到任何解决方案来满足我的要求,尽管它允许您读取、删除内容并将其放入任何 AWS 服务。

我需要关于从移动应用程序安全下载 S3 内容的建议。

【问题讨论】:

    标签: mobile amazon-web-services amazon-s3 amazon-cognito


    【解决方案1】:

    Amazon Cognito 和 AWS 移动开发工具包专为从移动应用程序下载存储在 S3 中的内容的用例而设计。您可以使用 Cognito 为您的应用程序的每个用户提供临时的、有限特权的 AWS 凭证。您可以让您的用户以未经身份验证的访客身份开始使用您的应用和/或使用社交登录或您自己的注册/登录服务进行身份验证。

    要设置 Cognito,请使用 Cognito 控制台创建一个身份池,这是一个特定于您的 AWS 账户的用户身份数据的存储。 IAM 角色为您的用户定义访问 AWS 资源(如 S3)的权限。您的应用程序的用户将承担您创建的角色。您可以为经过身份验证和未经身份验证的用户指定不同的角色。要详细了解 Cognito 中的 IAM 角色,请参阅IAM Roles

    当您访问 Cognito 控制台时,向导将指导您创建身份池和必要的 IAM 角色。 Cognito(向移动应用程序用户颁发 AWS 凭证)与其他 AWS 服务之间的集成在 SDK 的初始化中。在 iOS、Android、Unity 和 JavaScript 上使用 Cognito 初始化 SDK 的示例代码位于 Amazon Cognito 开发人员指南的Getting Credentials topic]。

    2020 年 10 月更新: AWS 已将其“移动 SDK”转移到 AWS Amplify。 Amplify 仍然使用 Cognito 进行身份验证(登录)和授权(凭据/权限),因此上述内容仍然准确。您可以获得有关使用 Cognito 和 Amplify 设置身份验证 here 的具体指导。在 Amplify 中设置身份验证后,使用 S3 的具体示例是 here

    请注意,Cognito 的文档最近关注用户池,它允许您实现自己的完整目录来存储和登录用户(对于a cost)。但是,您不必使用 Cognito 的用户目录来存储您的用户。 Cognito 身份池(仍然免费 AFAICT)允许您为未登录您的应用程序的用户获取 AWS 凭证(所谓的“未经身份验证的身份”)和/或允许用户使用其他用户目录(例如社交登录或您拥有和管理的用户目录)。

    如果您想要最终的灵活性,您也可以使用AWS STS to get credentials for accessing AWS Resources including S3。然而,随着 STS 的灵活性,需要更多地了解 IAM/AWS 以及可以说更复杂的设置。

    如果有什么我可以做的更清楚的,请发表评论!

    【讨论】:

    • 谢谢@Scott Willeke 我已经尝试过了,对我来说效果很好。我有一个小问题,生成 ID、令牌和临时密码的过程是否由 cognito 收费?在我的应用程序中,我们不会使用 cognito 提供的任何其他功能,例如同步,我只需要临时密码即可从 s3 下载内容。
    • 完全可以使用 Cognito 的身份功能来获取调用其他 AWS 服务(如 S3)的凭证。这是 AWS 最佳实践,Cognito 可免费用于此目的,您无需使用 Cognito Sync。如果您还有其他问题,请回复。
    • 你好@ScottWilleke 你的回答在 2020 年仍然成立吗?通过 AWS 是否有其他替代方案?
    • @OmarDulaimi 感谢您的提问!我环顾四周并根据我对事物发展的看法更新了这个答案。如果您仍有疑问,请再次标记我。
    猜你喜欢
    • 1970-01-01
    • 2013-04-04
    • 2021-01-10
    • 2014-05-10
    • 2015-09-16
    • 1970-01-01
    • 2021-03-02
    • 2020-10-22
    • 2015-07-05
    相关资源
    最近更新 更多