首页 文章

AWS Cognito和API网关身份验证

提问于
浏览
1

我在API网关(Auth:AWS_IAM)下设置了GET方法,并拥有一个具有开发者身份的Cognito池 . 我在get方法后面有一个lambda .

当我打电话给Cognito时,我获得了临时凭证,我承担了一个角色 . 我假设的角色具有执行和访问API网关上所有内容的适当权限 .

...
       {
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "apigateway:GET"
            ],
            "Resource": [
                "*"
            ]
        }
        ...

当我使用此设置调用API网关时,我得到500,内部服务器错误 .

如果我从策略中删除上述API网关权限,那么我得到 403 error forbidden (User: arn:aws:sts::xxxxx:assumed-role/Cogn_Auth_Role/xxx is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:us-east-1:xxxx:xxx/xxx/GET/events

如果我将 AdminAccess 附加到此角色,那么一切正常 . 这是什么交易?我错过了什么吗?

3 回答

  • 0

    这也可能是由于您在API网关资源策略中有条件的情况,该条件仅允许满足要求的客户端进行访问 . 如果您使用Postman访问API网关进行测试,那么您将收到Unauthorized错误 . 例如,

    "Condition": {
            "StringLike": {
                "aws:Referer": [
                    "https://example.com/*",
                    "example.com/*"
                ]
              }
             }
    
  • 3

    因此,在修改了像这样的认知角色的政策后,它开始正常工作 .

    {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Action": [
                        "lambda:InvokeFunction"
                    ],
                    "Resource": [
                        "*"
                    ]
                },
                {
                    "Effect": "Allow",
                    "Action": [
                        "execute-api:Invoke"
                    ],
                    "Resource": [
                        "*"
                    ]
                }
            ]
        }
    

    使其发挥作用的重要因素:

    {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "*"
            ]
        }
    

    仍然不确定为什么我应该调用所有lambdas的权限 .

  • 2

    如果您只是尝试使用Cognito凭据调用API Gateway API,那么您的策略中可能不需要“apigateway:GET” . 由于这用于管理您的API,例如获取有关API资源的信息 .

    如果您只是尝试创建角色以便可以调用您的API,则可以尝试从策略中删除"apigateway:GET",看看它是否有效 . 更多information .

相关问题