我正在阅读每个主题,并询问处理用户对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策略的新手,但我想我已经读过一些可以对指定用户进行细粒度控制的地方 . 如果我的用户基础很小,但在我的用户群增长时不太可行,这可能是可行的 .
欢迎任何想法和建议 .
谢谢 .