在将 uploading/downloading 文件发送到 AWS S3 之前使用 Web 服务器进行身份验证

Authenticate with web server before uploading/downloading file to AWS S3

我想创建一个 android 应用程序并使用 AWS s3 作为存储服务以允许用户上传和下载文件。我研究了一些关于 S3 REST 服务的东西,它可以帮助我在为 Bucket 等配置 IAM 角色之后实现同样的目标。

现在的情况是,我只希望我的应用程序的注册用户/在我的网络服务器上配置了访问控制(username/password)应该被允许 upload/download 该文件,而不是只有应允许应用程序访问。

也请查看下面的 link,了解使用 REST

的 AWS S3 上传文件

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

简单来说,除了上面link中描述的内容,我只需要以下问题的答案:

1) 如何只允许注册用户?
2) 在生产应用程序中硬编码 AWS S3 secretKey 等是一种好习惯吗?
3) 在我的应用程序中硬编码这些值是否会导致这样一种情况,即使我的应用程序的未注册用户也能够 upload/download 文件到 aws s3?

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

这会很有帮助..., 提前致谢,

  1. 当然,在您的代码中硬编码秘密密钥不是最佳实践..

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

Cognito 的一些事情:

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

    • 注册和登录服务。
    • 一个内置的、可自定义的网站 UI 用于登录用户。 使用 Facebook、Google 和使用 Amazon 进行社交登录,以及使用您用户的 SAML 身份提供商进行登录 池.

    • 用户目录管理和用户配置文件。 安全功能,例如多因素身份验证 (MFA)、检查泄露的凭据、帐户接管 保护、phone 和电子邮件验证。

  2. 您的 Amazon Cognito 身份池(联合身份)提供:

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

这在我的应用程序中是如何工作的

  1. 使用 aws cognito
  2. 询问用户 register/login
  3. 通过充当 S3 服务代理的 api 网关部署 api
  4. 对于 api,在 api 网关中应用 AWS cognito 作为授权方

然而,这对对象的大小有限制

我尝试过的选项是使用签名 url,这是由后端应用程序根据注册用户访问请求吐出的。 我的实施包括以下内容 1. 客户端使用带有 lambda 实现的 api 请求签名 url 2. Lambda 生成签名 url 并传递响应。 3. 在创建签名 url 时,key/id 从参数存储(请参阅 EC2 参数存储)中使用,该参数存储针对角色并使用 KEY 进行保护。

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