在将 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?
欢迎所有建议,如果-如果他们解决了部分难题,因为我完全不知道解决方案
这会很有帮助...,
提前致谢,
当然,在您的代码中硬编码秘密密钥不是最佳实践..
现在,如果您想要将授权用户和未授权用户分开,AWS Cognito 就是一个可以完成这项工作的 AW 服务。你可以在aws文档中找到很多https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-console.html
Cognito 的一些事情:
您拥有提供的 Amazon Cognito 用户池:
- 注册和登录服务。
一个内置的、可自定义的网站 UI 用于登录用户。
使用 Facebook、Google 和使用 Amazon 进行社交登录,以及使用您用户的 SAML 身份提供商进行登录
池.
用户目录管理和用户配置文件。
安全功能,例如多因素身份验证 (MFA)、检查泄露的凭据、帐户接管
保护、phone 和电子邮件验证。
您的 Amazon Cognito 身份池(联合身份)提供:
- Amazon Cognito 用户池中的用户
- 使用外部身份提供者进行身份验证的用户,例如
Facebook、Google 或基于 SAML 的身份提供商
- 通过您自己现有的身份验证过程进行身份验证的用户
这在我的应用程序中是如何工作的
- 使用 aws cognito
询问用户 register/login
- 通过充当 S3 服务代理的 api 网关部署 api
- 对于 api,在 api 网关中应用 AWS cognito 作为授权方
然而,这对对象的大小有限制
我尝试过的选项是使用签名 url,这是由后端应用程序根据注册用户访问请求吐出的。
我的实施包括以下内容
1. 客户端使用带有 lambda 实现的 api 请求签名 url
2. Lambda 生成签名 url 并传递响应。
3. 在创建签名 url 时,key/id 从参数存储(请参阅 EC2 参数存储)中使用,该参数存储针对角色并使用 KEY 进行保护。
我认为从您的用例来看,EC2 参数存储(而不是数据库)应该足以安全地保密。
我想创建一个 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?
欢迎所有建议,如果-如果他们解决了部分难题,因为我完全不知道解决方案
这会很有帮助..., 提前致谢,
当然,在您的代码中硬编码秘密密钥不是最佳实践..
现在,如果您想要将授权用户和未授权用户分开,AWS Cognito 就是一个可以完成这项工作的 AW 服务。你可以在aws文档中找到很多https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-console.html
Cognito 的一些事情:
您拥有提供的 Amazon Cognito 用户池:
- 注册和登录服务。
一个内置的、可自定义的网站 UI 用于登录用户。 使用 Facebook、Google 和使用 Amazon 进行社交登录,以及使用您用户的 SAML 身份提供商进行登录 池.
用户目录管理和用户配置文件。 安全功能,例如多因素身份验证 (MFA)、检查泄露的凭据、帐户接管 保护、phone 和电子邮件验证。
您的 Amazon Cognito 身份池(联合身份)提供:
- Amazon Cognito 用户池中的用户
- 使用外部身份提供者进行身份验证的用户,例如 Facebook、Google 或基于 SAML 的身份提供商
- 通过您自己现有的身份验证过程进行身份验证的用户
这在我的应用程序中是如何工作的
- 使用 aws cognito 询问用户 register/login
- 通过充当 S3 服务代理的 api 网关部署 api
- 对于 api,在 api 网关中应用 AWS cognito 作为授权方
然而,这对对象的大小有限制
我尝试过的选项是使用签名 url,这是由后端应用程序根据注册用户访问请求吐出的。 我的实施包括以下内容 1. 客户端使用带有 lambda 实现的 api 请求签名 url 2. Lambda 生成签名 url 并传递响应。 3. 在创建签名 url 时,key/id 从参数存储(请参阅 EC2 参数存储)中使用,该参数存储针对角色并使用 KEY 进行保护。
我认为从您的用例来看,EC2 参数存储(而不是数据库)应该足以安全地保密。