使用 Api 网关和 Lambda 进行授权

Authorization using Api gateway and Lambda

您好,我正在尝试使用 api 网关和 lambda 实现自定义授权。我目前的理解如下。我创建了简单的 GET 方法并部署到 Dev Enviroment。创建 lambda 授权 return IAM 政策。我使用了 python 蓝图 api-gateway-authorizer-python。下面是我们应该得到的响应格式。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "execute-api:Invoke",
      "Effect": "Deny",
      "Resource": "arn:aws:execute-api:us-east-1:{ACCOUNTID}:{APIID}/ESTestInvoke-stage/GET/"
    }
  ]
}

在上面的 IAM 策略中,资源是我 Api 开发阶段的 ARN。 Action表示什么?现在还要测试这个,我怎样才能得到令牌?我想从邮递员那里测试一下?我只是在这里感到困惑。我有我的 AWS 账户和授权是什么,但我当前的账户可以访问这个开发阶段?它在内部如何运作?要存储所有权限,我们是否需要维护任何其他数据库?有人可以帮助我理解这一点吗?任何帮助,将不胜感激。谢谢

好的,API 网关的自定义授权器是什么:自定义授权器让您可以定义自己的身份验证和授权逻辑。

你如何获得令牌:这是你的身份验证和授权逻辑的一部分,如果你在 AWS 上部署你的服务,你可以使用 AWS cognito。 API 网关还支持认知授权。 https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html

用postman测试?使用邮递员很方便。我在用。

权限在内部如何工作:您可以使用令牌对用户进行身份验证。 (如果您使用的是 JWT 令牌,您还可以验证用户的声明)。

您需要内部数据库吗?这完全取决于您的用例。如果您的用例很简单,因为所有用户都一视同仁,那么您可能不需要数据库。假设某些用户可以访问一些附加功能,您可能仍然不需要数据库(您可以使用声明)。但是如果你的应用程序变得复杂并且你必须管理不同的访问权限、用户、组等,你可能肯定需要一个数据库。

要获得令牌,您需要身份提供者。 Amazon Cognito 就是其中之一(Google,Facebook 也可以)。要了解该政策,您必须了解 命令链

假设客户端调用 API 端点 (GET /orders),这将触发服务 Lambda,以便验证令牌。如果验证成功,Api Gateway 将调用另一个 Lambda(GetOrder 这次是业务 Lambda)。

如果您的服务 Lambda(Lambda 授权方)将return这样的政策:

{
    "principalId": "apigateway.amazonaws.com",
    "policyDocument": {
        "Version": "2012-10-17",
        "Statement": [{
            "Action": "execute-api:Invoke",
            "Effect": "Allow",
            "Resource": "arn:aws:execute-api:{REGION}:{ACCOUNT_ID}:{API_ID}/Prod/GET/"
        }]
    }
}

API 网关服务(即 principalId 等于 apigateway.amazonaws.com)被允许(即 Effect 等于 Allow)调用(即Action 等于 execute-api:Invoke) 给定的 API 资源(例如 Resource 等于 arn:aws:execute-api:{REGION}:{ACCOUNT_ID}:{API_ID}/Prod/GET/)。

在您的情况下,您 return 的 ARN 与 API 网关的测试程序相关,但它应该指向您的实际功能。

This 文章可能有所帮助。