在将文件上传/下载到AWS S3之前先通过Web服务器进行身份验证

时间:2018-12-22 10:30:13

标签: android amazon-s3 restful-authentication

我想创建一个Android应用程序并将AWS s3用作存储服务,以允许用户上传和下载文件。我已经研究了有关S3 REST服务的一些知识,在为Bucket等配置了IAM角色之后,它可以帮助我实现这一目标。

现在的事情是,我只希望我的应用程序的注册用户/具有在我的Web服务器上配置的访问控制(用户名/密码)的用户可以上载/下载文件,而不应该只允许只有应用程序访问的任何人。

还要查看以下链接,以了解有关使用REST的AWS S3上传文件的信息

http://www.tothenew.com/blog/file-upload-on-amazon-s3-server-via-rest-api-call/

简单地说,除了上面的链接中所述,我只需要回答以下问题:

1)如何只允许注册用户?
2)在生产应用程序中对AWS S3 secretKey等进行硬编码是一种好习惯。
3)在我的应用程序中对这些值进行硬编码是否会导致出现这样的情况,即使是我的应用程序的未注册用户也可以将文件上传/下载到aws s3?

欢迎所有建议,如果它们能解决一部分难题,因为我完全不知道解决方案

这将非常有帮助..., 预先感谢,

2 个答案:

答案 0 :(得分:1)

  1. 确保对代码内部的硬密钥进行硬编码不是最佳实践。

  2. 现在,如果您想将授权用户和未授权用户分开,AWS Cognito是一项可以完成这项工作的AW服务,而更多的服务。您可以在aws文档https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-console.html

  3. 中找到很多内容

关于Cognito的一些事情:

  1. 您拥有tha提供的Amazon Cognito用户池:

    • 注册和登录服务。
    • 内置的,可定制的Web UI来登录用户。   使用Facebook,Google和Amazon登录进行社交登录,以及使用用户中的SAML身份提供商登录 池。

    • 用户目录管理和用户配置文件。      安全性功能,例如多因素身份验证(MFA),检查是否存在受到破坏的凭据,帐户接管 保护以及电话和电子邮件验证。

  2. 您具有提供以下功能的Amazon Cognito身份池(联合身份):

    • Amazon Cognito用户池中的用户
    • 通过外部身份提供商进行身份验证的用户,例如 Facebook,Google或基于SAML的身份提供商
    • 通过您自己现有的身份验证过程进行身份验证的用户

答案 1 :(得分:0)

这是我的应用程序中的工作方式

  1. 使用aws cognito询问用户注册/登录
  2. 通过api网关部署api,该api充当S3服务的代理
  3. 对于api,在api网关中将AWS cognito用作授权者enter image description here enter image description here

但这对对象的大小有限制

我尝试过的选项是使用签名的url,当注册用户访问请求时,后端应用程序会吐出这个选项。 我的实现包括以下内容 1.客户端使用具有Lambda实现的api请求签名的URL 2. Lambda生成签名的URL并传递响应。 3.在创建签名的url时,会从参数存储区(请参阅EC2参数存储区)使用密钥/标识,以防止角色和使用KEY。

我认为从您的用例来看,EC2参数存储(而不是数据库)应该足以安全地保密。