我正在开发一个必须访问某些AWS资源的移动应用程序,因此需要对AWS端点进行身份验证。该应用程序不管理用户(登录,注销,注册等)。
我的第一个解决方案是创建一个专门用于移动应用程序的IAM用户,并将其凭据嵌入到移动应用程序代码中。该应用程序使用嵌入的凭据向AWS进行身份验证。它可行,但AWS建议避免直接在应用程序中嵌入凭据。
我认为更好的解决方案是Cognito。因为我不需要用户管理,所以我应该使用未经身份验证的(来宾)身份来请求临时AWS凭证。
但是,我不明白为什么来宾Cognito身份比嵌入式凭据更安全。移动应用程序通过发送Cognito身份池ID(移动应用程序中嵌入的长期“数字”)来接收临时AWS凭据。如果有人能够找到此身份池ID,则她可以接收AWS凭据并访问AWS资源作为我的官方移动应用程序。嵌入式AWS长期凭证与huest Cognito访问之间似乎没有区别。
为什么Cognito解决方案优于嵌入式AWS凭证?
如果要使用标识池创建未经身份验证的访问,则允许公共访问您的AWS资源。请确保仔细编写您的策略,并且就安全性而言,如果您使用单个IAM用户或Cognito未经身份验证的访问,则无关紧要。
使用联合身份将为您提供诸如获取使用情况统计信息和向事件添加触发器等好处。另外请记住,创建单个IAM用户然后允许多个人使用这些凭据是一种“黑客”方式,可以执行Cognito联合未经身份验证的标识。如果AWS决定限制IAM的这种行为,您可能会在以后遇到意外的并发症。