如何安全地存储适用于 iOS 的 AWS 服务 ID?

Posted

技术标签:

【中文标题】如何安全地存储适用于 iOS 的 AWS 服务 ID?【英文标题】:How to securely store AWS service ids for iOS? 【发布时间】:2016-08-30 02:10:31 【问题描述】:

我正在开发一个 ios 应用程序,它使用 Cognito 用户池/联合身份、移动分析和 S3 来管理应用程序的各种功能,最近我开始担心这些功能的安全性。我已经使用 IAM 角色来控制未经身份验证和经过身份验证的用户可以访问的服务,但是这些服务中的大多数使用字符串(例如,用户池的用户池应用程序客户端 ID 或用户池应用程序客户端密钥,或移动分析的应用程序 ID)来提供应用程序访问该服务。

在必要时将这些字符串安全地存储在设备上以供使用的最佳做法是什么?由于应用程序使用 IAM 角色,甚至有必要保护这些字符串吗?

如果有必要安全地存储字符串,我已经读过最好在将字符串放入钥匙串之前使用 CommonCrypto 库加密字符串,但我不确定使用什么密钥进行加密,因为我的用户需要未经身份验证访问这些服务。任何建议都会非常有帮助。

【问题讨论】:

【参考方案1】:

这是任何移动应用程序的常见问题。如果有人真的想要,反编译应用程序并从中刮取密钥并不难。您使用 IAM 角色来限制功能使用非常好。这将限制攻击者的爆炸半径,但不一定能阻止他们。

使用用户池,您还可以获得一个全局唯一标识符,该标识符可与 IAM 一起使用,以限制您可以使用哪些 S3 密钥前缀(其作用类似于文件夹)来限制用户可以访问前缀的对象他们的唯一标识符。可以参考https://mobile.awsblog.com/post/Tx1OSMBRHZVM9V0/Understanding-Amazon-Cognito-Authentication-Part-3-Roles-and-Policies(使用用户池作为提供者,会使用身份id作为前缀)。根据您构建应用程序的方式,您可以使用它,因此每个用户只能修改自己的对象。我不认为 Google Analytics(分析)有任何限制方式……因为这样做没有任何意义。

就保护您的 ID 而言,您可以采取一些措施来帮助减轻风险,但没有万无一失的方法可以防止有人拿走它。例如,您可以让应用程序调用您的服务器以获取 ID……但是攻击者可以只调用服务器。您可以对其进行加密,这可能会使攻击者更难获得,但您必须将密钥保存在某个地方,如果应用程序可以获取它,那么反编译该应用程序的人也可以获取它。除非您的应用用户从应用外部获得某种密码并将其放入,否则没有一种完整的方法可以将其锁定以防止攻击者。

希望这会有所帮助。

【讨论】:

以上是关于如何安全地存储适用于 iOS 的 AWS 服务 ID?的主要内容,如果未能解决你的问题,请参考以下文章

如何安全地存储和使用客户的 AWS 密钥

适用于网站的 AWS 服务

如何在移动设备上安全地存储数据?

如何使用 CloudFront 从 AWS S3 安全地播放 .m3u8 流文件?

适用于 iOS 消费的 Web 服务(在 Amazon 上)安全性

适用于 RDS 的 AWS 安全组 - 出站规则