首页 > 解决方案 > 如何授予 android 应用程序用户对 AWS S3 对象的访问权限?

问题描述

我在 Amazon S3 中有一个存储桶,并且我有 Lambda 函数为这个存储桶生成 JSON 文件。我在我的移动应用程序中使用 S3 文件。直到最近,为了简单起见,我才公开访问这些 S3 文件。但现在我希望通过简单的身份验证可以访问这些 S3 对象。我检查了所有 AWS 教程,但找不到一种简单的方法来实现这一点。我不想使用 Cognito 服务,因为我的应用程序不需要身份验证,而且我的 S3 文件与用户无关,因此它们用于应用程序。我希望这些 S3 对象可以通过 http 请求访问到一个 url,该 url 包括这样的简单键:

https://s3.eu-central-1.amazonaws.com/<bucket name>/<object name>?<key>

其中 key 可以是区域、aws 访问密钥、秘密访问密钥或我定义的用户的其他值的组合(我正在使用 Retrofit 从 S3 存储桶中获取 json 数据)我已经查看了预签名的 url 选项但是一个示例for android-sdk 在那里不存在,并且大多数可用于此目的的方法已被弃用。没有简单的方法吗?或者我应该在其他服务/地方托管我的 json 文件?

标签: androidjsonamazon-web-servicesamazon-s3

解决方案


如果您对 Cognito 说不,那么您只是在为自己复杂化。这正是您想要使用 Cognito 的情况。您不需要用户进行身份验证并且 S3 内容不是特定于用户的事实并不意味着 Cognito 不适合这种情况。

您所要做的就是创建 Cognito 身份池并选择支持未经身份验证的实体。创建一个 IAM 策略,允许从该特定 S3 存储桶读取数据,并让未经身份验证的用户通过将其附加到那些未经身份验证的实体来承担该 IAM 角色。

然后在您的应用程序中初始化 SDK 期间自动进行身份验证。这就是您只允许从您的应用程序访问该 S3 存储桶所需做的所有事情。

即使是未经身份验证的用户,您也可以获得访问指标作为奖励。如果您后来决定希望您的应用程序也支持身份验证,那么您几乎不需要更改设置中的任何内容。


推荐阅读