如何为AWS S3对象授予对Android应用程序用户的访问权限?

时间:2019-01-21 19:35:48

标签: android json amazon-web-services amazon-s3

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

您甚至可以获得未经身份验证的用户的访问指标作为奖励。而且,如果以后您决定希望您的应用程序也支持身份验证,那么您几乎不需要在设置中进行任何更改。