AWS 无服务器保护不同用户角色的 API 路径



现在,我的脑袋正在从有关AWS的所有信息中爆炸。 :)所以我需要你的帮助。

我在 AWS 上有以下架构:API Gateway、Lambda、Cognito。我正在使用无服务器框架来配置所有内容。 在 Lambda 上部署了多个函数。假设 API 和函数如下所示:

GET /user
GET /vehicle
POST /vehicle

我有两种类型的用户 A 和 B。A 是管理员,应该访问所有内容,但 B 仅限于某些路径,例如

GET /user >>> only A
GET /vehicle >>> B
POST /vehicle >>> only A

如何使用 Cognito、API Gateway 和 Lambda 实现这一点。

到目前为止,我找到的信息/想法是:

  • 可以使用不同的IAM角色(例如"普通用户"和"管理员") 在这里我不知道在哪里
    • 以及如何将用户(存储在 Cognito 中)分配给某些角色(源 1、源 2)
  • 可以使用自定义授权方(源)
    • 在这里我只能找到使用 Auth0 的示例.. 但我想使用 Cognito
  • 使用认知池上的预令牌触发器更新令牌中的声明(源)

哪条路最好?还是有更好的解决方案? 不过,一个好的例子会很好。到目前为止,我只找到了包含 50 行代码的示例,这些示例不适合我的情况。所以实际上我的问题可能是我不知道如何以及从哪里开始。

这可能有点偏见,因为我过去使用过自定义授权方。 但从您提到的解决方案中,它们可能是最灵活的解决方案。

在有认知授权方之前,我实际上已经将自定义授权方与 cognito 用户池一起使用了。

当时,这个 https://aws.amazon.com/blogs/mobile/integrating-amazon-cognito-user-pools-with-api-gateway/对我入门有很大帮助。

后来我发现,一旦我进行了大量验证,并且用户权限不会经常更改,我应该利用授权方发送的策略缓存。为此,我必须发送一个策略作为响应,该策略将涵盖允许由经过身份验证的用户调用的所有端点。

编辑: 在自定义授权方上,您可以通过调用 cognito 来检查用户信息。 之后,如果用户是默认用户,则可以为其提供策略

{   "principalId": "yyyyyyyy", // The principal user identification associated with the token sent by the client.   "policyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "execute-api:Invoke",
"Effect": "Allow|Deny",
"Resource": "arn:aws:execute-api:{regionId}:{accountId}:{appId}/{stage}/GET/user"
}
]   } }

对于管理员,您只需发送另一个策略

{
"principalId": "yyyyyyyy", // The principal user identification associated with the token sent by the client.
"policyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "execute-api:Invoke",
"Effect": "Allow|Deny",
"Resource": "arn:aws:execute-api:{regionId}:{accountId}:{appId}/{stage}/GET/user"
},
{
"Action": "execute-api:Invoke",
"Effect": "Allow|Deny",
"Resource": "arn:aws:execute-api:{regionId}:{accountId}:{appId}/{stage}/*/vehicle"
}
]
}
}

最新更新