我正在阅读每个主题,并询问处理用户对AWS资源的授权的最佳做法是什么。
情境:
- 访问AWS S3和dynamoDB的2层Windows应用程序。
- 共有2组用户 - 管理员和普通用户。管理员具有读取+写入权限,普通用户只具有读取权限。
- 我正试图看看我是否可以避免三层设计。在这种情况下,我想直接从我的应用程序访问AWS资源。换句话说,我不通过Web服务访问AWS资源(可以在那里进行我的用户授权检查)。
醇>
设计
- 我使用Web Identity Federation(谷歌)对用户进行身份验证,并使用STS获取临时凭证。
- 我创建了2个IAM角色 - AdminRole(带写入+读取策略)和UserRole(带有读取策略)。
- 此时,我的想法仍然停留在最佳做法上,并安全地选择从我的应用程序中承担哪个角色。
醇>
解决方案1:
- 使用UserId和Role属性在dynamoDb中创建UserRole表。
- 用户通过google进行身份验证后,我会针对google返回的用户ID检查UserRole表,以获取此用户的角色。假设我已在表格中预先设置了所有用户的角色。
- 我不想将我的AWS密钥硬编码或暴露到我的应用程序中,但是对于上述执行,我已经创建了一个仅具有[UserRole]表的角色和策略的密钥。
- 此时,当我使用STS获取临时凭证时,我会知道从我的应用程序中假设哪个角色。
醇>
但是,通过上述解决方案,我发现存在一个安全漏洞。如果有人能够掌握我的IAM角色使用的应用程序ID,并且对我的IAM角色名称进行了一些暴力攻击,那么该人可以轻松获得AdminRole的临时凭证。
(已添加)解决方案2:
- 我只创建了1个IAM角色 - GoogleUserRole
- 在政策部分,我允许使用其联合用户ID对管理员用户进行写访问。
醇>
我仍然是编写AWS策略的新手,但我想我已经读过一些可以对指定用户进行细粒度控制的地方。如果我的用户很小,但在用户群增长时不太可行,这可能是可行的。
欢迎任何想法和建议。
感谢。