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

时间:2018-01-29 00:33:35

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

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

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

将Cognito身份池与OpenID身份验证提供程序(即auth0)一起使用,我能够成功获取临时凭据以访问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服务?

更新:

我能够通过避免认知身份池将原始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值?

1 个答案:

答案 0 :(得分:0)

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