我正在阅读每个主题,并询问处理用户对AWS资源的授权的最佳实践 .

Scenario:

  • 访问AWS S3和dynamoDB的2层Windows应用程序 .

  • 有2组用户 - 管理员和普通用户 . 管理员已读取写入权限,普通用户只具有读取权限 .

  • 我试图看看我是否可以避免三层设计 . 在这种情况下,我想直接从我的应用程序访问AWS资源 . 换句话说,我不通过Web服务访问AWS资源(可以在那里进行我的用户授权检查) .

Design:

  • 我使用Web Identity Federation(谷歌)对用户进行身份验证,并使用STS获取临时凭证 .

  • 我创建了2个IAM角色 - AdminRole(带写入读取策略)和UserRole(带有读取策略) .

  • 此时,我的想法仍然停留在最佳实践上,并安全地选择从我的应用程序中承担哪个角色 .

Solution 1:

  • 使用UserId和Role属性在dynamoDb中创建UserRole表 .

  • 用户通过google进行身份验证后,我'll check the UserRole table against the userid returned from google to get the role of this user. Assuming I'已预先设置了表中所有用户的角色 .

  • 我不想将我的AWS密钥硬编码或暴露到我的应用程序中,但是对于上述执行,我已经创建了一个仅具有[UserRole]表的角色和策略的密钥 .

  • 此时,当我使用STS获取临时凭证时,我会知道从我的应用程序中假设哪个角色 .

但是,通过上述解决方案,我发现存在一个安全漏洞 . 如果有人能够获取我的IAM角色使用的应用程序ID,并且对我的IAM角色名称进行了一些暴力攻击,那么该人员可以轻松获得AdminRole的临时凭证 .

(added) Solution 2:

  • 我只创建了1个IAM角色 - GoogleUserRole

  • 在策略部分中,我允许使用其Federated用户标识对admin用户进行写访问 .

我仍然是编写AWS策略的新手,但我想我已经读过一些可以对指定用户进行细粒度控制的地方 . 如果我的用户基础很小,但在我的用户群增长时不太可行,这可能是可行的 .

欢迎任何想法和建议 .

谢谢 .