如何在 IAM 角色的信任策略中检查自定义 OpenID 声明?

Posted

技术标签:

【中文标题】如何在 IAM 角色的信任策略中检查自定义 OpenID 声明?【英文标题】:How to check for custom OpenID claim in an IAM role's trust policy? 【发布时间】:2018-07-07 15:42:01 【问题描述】:

我正在使用 auth0 对用户进行身份验证,以接收包含以下声明的 id 令牌

"http://myapp.com/scope": "write"

使用带有 OpenID 身份验证提供程序(即 auth0)的 Cognito 身份池,我能够成功获取临时凭证来访问 aws 服务。但是,我想根据上面的自定义声明限制对这些服务的访问。我认为执行此操作的正确方法是编辑与我的身份池关联的信任策略,但我不确定如何添加条件来检查我的信任策略中的上述声明。

当前默认的信任策略是


  "Version": "2012-10-17",
  "Statement": [
    
      "Effect": "Allow",
      "Principal": 
        "Federated": "cognito-identity.amazonaws.com"
      ,
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": 
        "StringEquals": 
          "cognito-identity.amazonaws.com:aud": "us-east-2:078855cf-aa9b-400e-a762-dfcf27ec495c"
        ,
        "ForAnyValue:StringLike": 
          "cognito-identity.amazonaws.com:amr": "authenticated"
        
      
    
  ]

如何确保只有具有 auth0 "write" 范围的用户才能写入我的 s3 服务?

更新:

通过避开 cognito 身份池,我能够将原始 id_token 传递给 aws。但是,auth0 强制我的自定义声明使用"http://mywebsite.com" 命名。这是一个问题,因为 IAM 在我的情况下不允许使用多个冒号。我需要添加条件

"ForAnyValue:StringLike": 
    "food-flick.auth0.com/:https://foodflick.com/scope": "write:rests"
 

但 IAM 不允许这样做,并且 Auth0 会强制我为我的声明命名。我能做些什么?我可以将我的范围存储在标准声明中,但这会产生误导。我可以将我的访问令牌而不是我的 id_token 传递给 IAM 吗?如果是这样,当给定一组值时,我将如何更改信任策略以检查适当的 aud 值?

【问题讨论】:

您找到解决方案了吗? 不,我没有。我选择了firebase,使用了signInWithCustomToken。我的 auth0 服务器在其 idToken 中返回一个 firebase 令牌 找到解决办法了吗? 【参考方案1】:

联合声明不会传播到 AWS 会话中,并且无法在信任策略中访问。前进的道路可能是使用RoleMappings 将您的自定义声明映射到特定角色。不幸的是,此时,我认为有一个突出的问题阻止角色映射与 OIDC 一起使用。如果问题得到解决,我会更新这篇文章。

【讨论】:

这是否意味着我不能使用 cognito?我在哪里可以从 cognito 控制台找到角色映射?我可以通过docs.aws.amazon.com/IAM/latest/UserGuide/… 的步骤实现我的用例吗? 9 个月后这仍然是一个问题吗? 我们刚刚修复了对 OIDC 和角色映射的支持,您现在可以试试吗? 有什么解决办法吗?我们现在可以使用 RoleMappings 将自定义声明映射到角色吗?我没有使用 cognito,我使用的是自定义 Provider。

以上是关于如何在 IAM 角色的信任策略中检查自定义 OpenID 声明?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Terraform 创建没有代入角色策略的 AWS IAM 角色?

创建附加到用户的 IAM 策略,限制用户使用某些操作创建自定义托管策略

IT干货!怎样用IAM实施零信任策略

AWS IAM 找到具有特定策略的角色?

使用 Terraform 创建 GCP 自定义 IAM 角色

从 AWS 组织导出所有 IAM 用户、角色和策略