【问题标题】:How to access the AWS APIGateway based on the cognito user pool group roles如何基于 cognito 用户池组角色访问 AWS APIGateway
【发布时间】:2021-08-11 08:49:59
【问题描述】:

我创建了一个用户池并添加了 2 个用户组。注册 2 个用户并附加到不同的组。 具有不同角色的组,1 个角色具有策略,可以使用资源 GET /countries 执行 Lambda 函数 另一个角色具有另一个策略,可以使用资源 POST /countries 执行 Lambda 函数。 但是两个用户都可以通过将 ID 令牌作为 Authorization 标头传递来访问这两个资源。

我使用了类似的策略

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": "execute-api:Invoke",
        "Resource": "arn:aws:execute-api:us-west-1:12098989898:sdsds56ffdf/*/GET/countries"
    }]
}

我需要在政策中添加任何条件吗?为什么用户可以访问这 2 个资源。我们如何根据用户池组进行限制?

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-api-gateway amazon-cognito


    【解决方案1】:

    您使用的默认认知授权器仅检查令牌是否有效并且是否属于正确的用户池。如果您还想检查组,可以使用自定义 lambda 授权器,使用 sdk 将令牌传递给 cognito 并检查用户所属的组。

    或者您可以稍微更改授权者,使其将组名发送到您可以进行条件检查的后端。

    https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-enable-cognito-user-pool.html

    【讨论】:

    • 除了编写我们的自定义授权器之外,没有其他解决方案吗?那他们为什么要在 cognito 中引入用户组并为用户组分配角色呢?
    • 一旦您生成临时访问密钥和密钥供用户验证 SDK 调用,就可以使用用户组和角色。这可以在前端和后端使用。毕竟,Cognito 令牌不仅仅用于保护 API。
    • 那么,我的问题的解决方案是什么?可以通过SDK调用API网关吗?
    • 如果您想使用授权人使用您定义的策略进行验证。您需要将授权人更改为 IAM 而不是 cognito,然后传递临时访问密钥和密钥。这比定义自己的自定义授权者风险更大。
    • 按照该文档下的链接使用 cognito 的 API 网关,您将在这里结束 docs.aws.amazon.com/apigateway/latest/developerguide/… 它指出您需要进行联合身份调用以获取临时 aws 凭证,然后使用 AWS- IAM 授权方而不是 cognito 授权方。默认 Cognito 授权方将仅检查您的令牌是否对用户池有效。
    猜你喜欢
    • 2021-09-05
    • 2019-08-15
    • 2020-05-27
    • 2019-10-06
    • 2020-09-19
    • 2018-03-16
    • 2019-03-21
    • 2019-07-08
    • 1970-01-01
    相关资源
    最近更新 更多