使用Api网关和Lambda进行授权

时间:2019-12-09 06:42:14

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

嗨,我正在尝试使用api网关和lambda实现自定义授权。我目前的理解如下。我创建了简单的GET方法并将其部署到Dev Enviroment。创建lambda授权以返回IAM策略。我使用了python blue print 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 Dev阶段的ARN。动作表示什么?还要立即测试,如何获得令牌?我想从邮递员那里测试吗?我只是在这里感到困惑。我拥有我的AWS账户,但授权什么都没有,但是我当前的账户可以访问此Dev阶段?内部如何运作?要存储所有权限,是否需要维护任何其他数据库?有人可以帮我理解吗?任何帮助,将不胜感激。谢谢

2 个答案:

答案 0 :(得分:1)

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

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

使用邮递员进行测试吗?使用邮递员很方便。我用它。

权限在内部如何起作用:您可以使用令牌来认证用户。 (如果您使用的是JWT令牌,则还可以验证用户的声明。)

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

答案 1 :(得分:1)

要获取令牌,您需要身份提供者。 Amazon Cognito就是其中之一(Google,Facebook也是如此)。要了解该策略,您必须了解命令的链。

enter image description here

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

如果您的服务Lambda(Lambda授权者)将返回如下策略:

{
    "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/)。

在您的情况下,您返回的ARN与API网关的测试器有关,但它应指向您的实际功能。

This文章可能会有帮助。