android - 如何授予 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 文件?
解决方案
如果您对 Cognito 说不,那么您只是在为自己复杂化。这正是您想要使用 Cognito 的情况。您不需要用户进行身份验证并且 S3 内容不是特定于用户的事实并不意味着 Cognito 不适合这种情况。
您所要做的就是创建 Cognito 身份池并选择支持未经身份验证的实体。创建一个 IAM 策略,允许从该特定 S3 存储桶读取数据,并让未经身份验证的用户通过将其附加到那些未经身份验证的实体来承担该 IAM 角色。
然后在您的应用程序中初始化 SDK 期间自动进行身份验证。这就是您只允许从您的应用程序访问该 S3 存储桶所需做的所有事情。
即使是未经身份验证的用户,您也可以获得访问指标作为奖励。如果您后来决定希望您的应用程序也支持身份验证,那么您几乎不需要更改设置中的任何内容。
推荐阅读
- video - 使用 FFMPEG 将帧插入视频
- sql-server - AWS DMS 构建表列表失败
- azure - 如何将软件构建从 Azure DevOps 部署到内部服务器?
- javascript - 你如何将来自服务器的普通地理 json 转换为 geoJson?
- msbuild - 命名空间“Microsoft.AspNet”中不存在类型或命名空间名称“WebApi”(您是否缺少程序集引用?)
- jquery - 将 curl 转换为 $.ajax 以发送 application/x-www-form-urlencoded 数据
- python - 删除所有空格、标点符号和大写字母
- reactjs - 如何处理大列标题以换行到下一行
- django - 使用 MultipleChoiceFilter 时动态重新加载选项
- amazon-web-services - 使用带有“and”运算符的具有多个条件的 FilterExpression 进行扫描操作