背景
我一直在研究消耗AWS资源的前端javascript应用程序(主要是API网关后面的Lambdas)。 API网关资源受IAM保护,应用程序使用Cognito提供的大部分内容。
这包括启用了未经身份验证的身份的身份池,以及与Cognito用户池和多个社交和自定义OIDC提供商的联合。 Cognito只使用我们的前端javascript代码与Amazon的SDK进行交互。
未经身份验证的身份
ID池ID的敏感性适用于我的所有用例,但我对未经身份验证的用例最感兴趣。我们一直在关注Amazon's suggested approach:使用Cognito或STS获取IAM密钥,并使用这些密钥访问AWS资源。 I've even been spreading this gospel.
这一切都很好,但它确实需要我将我的身份池ID暴露给前端。身份池ID是获取未经身份验证的IAM角色的IAM密钥所需的唯一内容。
理论上,任何攻击者都可以使用我使用的相同亚马逊SDK来获取我的身份池ID并开始滥用我的资源(允许使用Unauth IAM角色)。
问题
我正在寻找
的答案如上面的链接答案中所述,我的理解是,未经身份验证的身份不是防弹的,只能提供合理的级别的信心,以确保它是您的应用线的另一端。换句话说,虽然并非不可能,但对于有人使用此模型滥用您的AWS后端至少相当困难。
除了上面的要点之外,我还要感谢对这种理解的任何批评。我是否强调围绕未经身份验证的IAM访问AWS的安全性?推销它?
免责声明
我承认这个问题有点像this one。我不询问在我的应用程序中对标识池ID进行硬编码;这已经从Web服务中获取。但是,它仍然完全暴露在前端,你可以说它实际上更容易将其从AJAX响应中拉出来而不是缩小代码。
我确实尽可能地锁定Unauth角色,并且我理解允许匿名访问东西只能是如此安全。