嗨,我正在尝试使用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阶段?内部如何运作?要存储所有权限,是否需要维护任何其他数据库?有人可以帮我理解吗?任何帮助,将不胜感激。谢谢
答案 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也是如此)。要了解该策略,您必须了解命令的链。
假设客户端调用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文章可能会有帮助。