AWS Cognito Groups 和 AWS Api Gateway

Max*_*rgi 4 amazon-web-services aws-api-gateway aws-cognito

我从 AWS 上的无服务器开始,我使用 AWS Cognito 进行用户身份验证和授权。对于我在文档和示例中看到的内容,您可以创建组以允许某些用户能够使用 Api 网关端点,将角色和策略附加到该组。我尝试了这个,然后制作了一个简单的客户端并尝试使用两个不同的用户,并且两者都能够获得 200 状态代码,而不是其中一个获得它是未经授权的。为了创建角色,我转到 IAM,创建角色,身份提供商访问角色,授予对 Web 身份提供商的访问权限,然后我选择 Amazon Cognito 并选择我的 Cognito 用户池。信任关系:

{
  "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-1_8TAUVKbGP"
        }
      }
    }
  ]
} 
Run Code Online (Sandbox Code Playgroud)

政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke"
            ],
            "Resource": [
                "my-arn-resourse-from-api-gateway"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

然后我将此角色分配给我的管理员组并将用户添加到该组,这应该允许通过在用户登录时将该策略附加到该用户来访问该 Api Gateway 资源。但是当我尝试使用不在该组中的用户时仍然有效。顺便说一下,在请求中的 Api Gateway 资源上,我对我的认知池进行了授权。

非常感谢!

Max*_*rgi 5

好吧,我终于让它完美地工作了!问题出在我的 IAM 角色中,在信任关系文档中

"Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "identity_pool_id"
        },
Run Code Online (Sandbox Code Playgroud)

在该部分中,我没有使用我的身份池 ID,而是使用了我的用户池 ID。修复后,我取回了凭据,并使用这些凭据在 Postman 中进行了尝试,并且效果很好。然后我将同一用户更改为另一个角色,但访问被按计划拒绝!以简单的方式使用角色授权最重要的部分是因为agent420说使用AWS_IAM方法来保护api,然后剩下的由aws处理。