我想创建一个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?
欢迎所有建议,如果它们能解决一部分难题,因为我完全不知道解决方案
这将非常有帮助..., 预先感谢,
答案 0 :(得分:1)
确保对代码内部的硬密钥进行硬编码不是最佳实践。
现在,如果您想将授权用户和未授权用户分开,AWS Cognito是一项可以完成这项工作的AW服务,而更多的服务。您可以在aws文档https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-console.html
关于Cognito的一些事情:
您拥有tha提供的Amazon Cognito用户池:
内置的,可定制的Web UI来登录用户。 使用Facebook,Google和Amazon登录进行社交登录,以及使用用户中的SAML身份提供商登录 池。
用户目录管理和用户配置文件。 安全性功能,例如多因素身份验证(MFA),检查是否存在受到破坏的凭据,帐户接管 保护以及电话和电子邮件验证。
您具有提供以下功能的Amazon Cognito身份池(联合身份):
答案 1 :(得分:0)
这是我的应用程序中的工作方式
但这对对象的大小有限制
我尝试过的选项是使用签名的url,当注册用户访问请求时,后端应用程序会吐出这个选项。 我的实现包括以下内容 1.客户端使用具有Lambda实现的api请求签名的URL 2. Lambda生成签名的URL并传递响应。 3.在创建签名的url时,会从参数存储区(请参阅EC2参数存储区)使用密钥/标识,以防止角色和使用KEY。
我认为从您的用例来看,EC2参数存储(而不是数据库)应该足以安全地保密。