如何安全地存储 iOS 的 AWS 服务 ID?
How to securely store AWS service ids for iOS?
我正在开发一个 iOS 应用程序,它使用 Cognito 用户池/联合身份、移动分析和 S3 来管理应用程序的各种功能,最近我开始担心这些功能的安全性.我已经使用 IAM 角色来控制未经身份验证的服务与经过身份验证的用户有权访问的服务,但是这些服务中的大多数都使用字符串(例如,用户池的用户池应用程序客户端 ID 或用户池应用程序客户端密码,或移动分析的应用程序 ID)来提供应用程序访问该服务。
将这些字符串安全地存储在设备上以便在必要时使用的最佳做法是什么?由于应用程序正在使用 IAM 角色,是否有必要保护这些字符串?
如果有必要安全地存储字符串,我读过在将字符串放入钥匙串之前使用 CommonCrypto 库加密字符串是最好的,但我不确定使用什么密钥进行加密,因为我的用户需要对这些服务进行未经身份验证的访问。任何建议都会非常有帮助。
这是任何移动应用程序的常见问题。如果有人真的想要,反编译应用程序并从中抓取密钥并不困难。很高兴您使用 IAM 角色来限制功能的使用。这将限制攻击者的爆炸半径,但不一定能阻止他们。
有了用户池,您还可以获得一个全局唯一标识符,它可以与 IAM 一起使用来限制您可以使用密钥前缀(类似于文件夹)的 S3 来限制用户可以访问的对象使用其唯一标识符进行修复。可以参考https://mobile.awsblog.com/post/Tx1OSMBRHZVM9V0/Understanding-Amazon-Cognito-Authentication-Part-3-Roles-and-Policies(使用用户池作为提供者,会使用身份id作为前缀)。根据您构建应用程序的方式,您可以使用它,以便每个用户只能修改他们自己的对象。我不认为 Analytics 有任何限制这样的方式......因为它真的没有意义。
就保护您的 ID 而言,您可以采取一些措施来帮助缓解,但没有万无一失的方法来防止有人拿走它。例如,您可以让应用程序调用您的服务器以获取 ID……但攻击者可以直接调用服务器。您可以加密它,这可能会使攻击者更难获得,但您必须将密钥保存在某个地方,如果应用程序可以获取它,那么反编译应用程序的人也可以。除非您的应用程序用户从应用程序外部获得某种密码并将其放入,否则没有一种完整的方法来锁定它以防止攻击者。
希望对您有所帮助。
我正在开发一个 iOS 应用程序,它使用 Cognito 用户池/联合身份、移动分析和 S3 来管理应用程序的各种功能,最近我开始担心这些功能的安全性.我已经使用 IAM 角色来控制未经身份验证的服务与经过身份验证的用户有权访问的服务,但是这些服务中的大多数都使用字符串(例如,用户池的用户池应用程序客户端 ID 或用户池应用程序客户端密码,或移动分析的应用程序 ID)来提供应用程序访问该服务。
将这些字符串安全地存储在设备上以便在必要时使用的最佳做法是什么?由于应用程序正在使用 IAM 角色,是否有必要保护这些字符串?
如果有必要安全地存储字符串,我读过在将字符串放入钥匙串之前使用 CommonCrypto 库加密字符串是最好的,但我不确定使用什么密钥进行加密,因为我的用户需要对这些服务进行未经身份验证的访问。任何建议都会非常有帮助。
这是任何移动应用程序的常见问题。如果有人真的想要,反编译应用程序并从中抓取密钥并不困难。很高兴您使用 IAM 角色来限制功能的使用。这将限制攻击者的爆炸半径,但不一定能阻止他们。
有了用户池,您还可以获得一个全局唯一标识符,它可以与 IAM 一起使用来限制您可以使用密钥前缀(类似于文件夹)的 S3 来限制用户可以访问的对象使用其唯一标识符进行修复。可以参考https://mobile.awsblog.com/post/Tx1OSMBRHZVM9V0/Understanding-Amazon-Cognito-Authentication-Part-3-Roles-and-Policies(使用用户池作为提供者,会使用身份id作为前缀)。根据您构建应用程序的方式,您可以使用它,以便每个用户只能修改他们自己的对象。我不认为 Analytics 有任何限制这样的方式......因为它真的没有意义。
就保护您的 ID 而言,您可以采取一些措施来帮助缓解,但没有万无一失的方法来防止有人拿走它。例如,您可以让应用程序调用您的服务器以获取 ID……但攻击者可以直接调用服务器。您可以加密它,这可能会使攻击者更难获得,但您必须将密钥保存在某个地方,如果应用程序可以获取它,那么反编译应用程序的人也可以。除非您的应用程序用户从应用程序外部获得某种密码并将其放入,否则没有一种完整的方法来锁定它以防止攻击者。
希望对您有所帮助。