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



>我正在使用 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"写入">作用域的用户才能访问我的 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 值?

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

最新更新