对AWS资源的身份验证和授权

时间:2016-07-18 15:12:58

标签: amazon-web-services

我正在阅读每个主题,并询问处理用户对AWS资源的授权的最佳做法是什么。

情境:

  1. 访问AWS S3和dynamoDB的2层Windows应用程序。
  2. 共有2组用户 - 管理员和普通用户。管理员具有读取+写入权限,普通用户只具有读取权限。
  3. 我正试图看看我是否可以避免三层设计。在这种情况下,我想直接从我的应用程序访问AWS资源。换句话说,我不通过Web服务访问AWS资源(可以在那里进行我的用户授权检查)。
  4. 设计

    1. 我使用Web Identity Federation(谷歌)对用户进行身份验证,并使用STS获取临时凭证。
    2. 我创建了2个IAM角色 - AdminRole(带写入+读取策略)和UserRole(带有读取策略)。
    3. 此时,我的想法仍然停留在最佳做法上,并安全地选择从我的应用程序中承担哪个角色。
    4. 解决方案1:

      1. 使用UserId和Role属性在dynamoDb中创建UserRole表。
      2. 用户通过google进行身份验证后,我会针对google返回的用户ID检查UserRole表,以获取此用户的角色。假设我已在表格中预先设置了所有用户的角色。
      3. 我不想将我的AWS密钥硬编码或暴露到我的应用程序中,但是对于上述执行,我已经创建了一个仅具有[UserRole]表的角色和策略的密钥。
      4. 此时,当我使用STS获取临时凭证时,我会知道从我的应用程序中假设哪个角色。
      5. 但是,通过上述解决方案,我发现存在一个安全漏洞。如果有人能够掌握我的IAM角色使用的应用程序ID,并且对我的IAM角色名称进行了一些暴力攻击,那么该人可以轻松获得AdminRole的临时凭证。

        (已添加)解决方案2:

        1. 我只创建了1个IAM角色 - GoogleUserRole
        2. 在政策部分,我允许使用其联合用户ID对管理员用户进行写访问。
        3. 我仍然是编写AWS策略的新手,但我想我已经读过一些可以对指定用户进行细粒度控制的地方。如果我的用户很小,但在用户群增长时不太可行,这可能是可行的。

          欢迎任何想法和建议。

          感谢。

0 个答案:

没有答案