使用 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 文章可能有所帮助。
您好,我正在尝试使用 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 文章可能有所帮助。