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

Sim*_*mon 5 amazon-s3 amazon-web-services amazon-iam amazon-cognito auth0

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

"http://myapp.com/scope": "write"
Run Code Online (Sandbox Code Playgroud)

使用带有OpenID身份验证提供程序的Cognito身份池(即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"
        }
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

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

更新:

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

"ForAnyValue:StringLike": {
    "food-flick.auth0.com/:https://foodflick.com/scope": "write:rests"
 }
Run Code Online (Sandbox Code Playgroud)

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

per*_*pil 0

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