【问题标题】:How to check for custom OpenID claim in an IAM role's trust policy?如何在 IAM 角色的信任策略中检查自定义 OpenID 声明?
【发布时间】: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 令牌
  • 找到解决办法了吗?

标签: amazon-web-services amazon-s3 amazon-cognito amazon-iam auth0


【解决方案1】:

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

【讨论】:

  • 这是否意味着我不能使用 cognito?我在哪里可以从 cognito 控制台找到角色映射?我可以通过docs.aws.amazon.com/IAM/latest/UserGuide/… 的步骤实现我的用例吗?
  • 9 个月后这仍然是一个问题吗?
  • 我们刚刚修复了对 OIDC 和角色映射的支持,您现在可以试试吗?
  • 有什么解决办法吗?我们现在可以使用 RoleMappings 将自定义声明映射到角色吗?我没有使用 cognito,我使用的是自定义 Provider。
猜你喜欢
  • 2020-05-29
  • 2021-12-29
  • 2018-09-29
  • 2020-09-01
  • 1970-01-01
  • 2020-11-29
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多