无需硬编码访问密钥即可从 android 应用程序访问 AWS S3
Posted
技术标签:
【中文标题】无需硬编码访问密钥即可从 android 应用程序访问 AWS S3【英文标题】:Accessing AWS S3 from android app without hard-coding access keys 【发布时间】:2021-05-28 16:25:26 【问题描述】:我是 AWS 新手。我想从我的 android 应用程序访问 S3 存储桶,以便上传存储在 android 设备的 Downloads 文件夹中的文件。我已经按照this 教程尝试并做到了。但是,我不想在我的源代码中包含访问密钥 ID 和秘密访问密钥。我发现使用 AWS Cognito 可能有一种方法可以做到这一点,但我还没有找到指导教程。只要我不必对密钥进行硬编码,我也愿意使用其他方式访问 S3。我还在 *** 上发现了一些与此相关的问题,但没有得到很好的回答。
任何能指引我正确方向的事情都会有所帮助。
【问题讨论】:
【参考方案1】:AWS Cognito 是必经之路。通过身份池,您可以发送允许您和您的用户访问您的 S3 存储桶的 access_keys。
我知道网上没有明确的分步教程,几周前我不得不自己弄清楚(react js 和 django 后端)。
official docs 很好地帮助了我。认证功能并不复杂。你也可以关注this tutorial for the aws set up process。祝你好运!
【讨论】:
【参考方案2】:在移动应用中硬编码您的凭据不是一个好方法。
我的建议是,您必须向后端服务器请求临时凭据。
后端将为具有受限访问权限的 S3 创建一个 STS 令牌并将其提供给您。
您可以在下面的链接中找到更多信息
https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/prog-services-sts.html
【讨论】:
感谢您的回答。这似乎是我想要实现的。但是,当我按照您提供的链接中的步骤操作时,在创建 AWSSecurityTokenServiceClient 对象的第一步中遇到错误。错误说:“AWSSecurityTokenServiceClientBuilder()”在“com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder”中具有私有访问权限。知道如何解决吗?【参考方案3】:在 S3 上上传文件的更好方法之一是使用预签名 URL。您可以创建一个 API 来生成用于在 S3 上上传文件的预签名 url。
访问此处了解操作方法 - https://medium.com/@aidan.hallett/securing-aws-s3-uploads-using-presigned-urls-aa821c13ae8d
【讨论】:
以上是关于无需硬编码访问密钥即可从 android 应用程序访问 AWS S3的主要内容,如果未能解决你的问题,请参考以下文章
无需硬编码用户名/密码即可更新 Active Directory
与硬编码输入相比,使用 fgets 从用户获取密钥时无法打印密钥流