无需硬编码访问密钥即可从 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的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中没有硬编码密钥的情况下进行对称加密

无需硬编码用户名/密码即可更新 Active Directory

Android安全开发之浅谈密钥硬编码

与硬编码输入相比,使用 fgets 从用户获取密钥时无法打印密钥流

谷歌驱动API的Android如何登录并从硬编码我的硬盘帐户注销无需用户交互?

以 1 为增量编号,从 1 到 N,无需硬编码