【发布时间】:2018-07-10 10:59:57
【问题描述】:
我正在使用 AWS,我有以下设置:UserPool; API 网关、Lambda 函数
api 网关使用 UserPool 授权器来保护 lambda 函数。到目前为止,这是有效的。现在我想将每个 lambda 函数限制为特定的用户组。因此,我在 CognitoPool 中创建了两个用户组(user 和admin),并为每个组分配了一个特定的角色和一个策略。之后我在 UserPool 中创建了一个用户并将他添加到user 组。该用户仍然能够向每个路由/lambda 函数提交请求。
如何提交请求?
- 邮递员
- 在
Authorization标头中设置IdToken(经过身份验证的用户) - 如果没有
Authorization标头,则响应为 401(如预期) - 带有
Authorization标头的每个 lambda 函数都可以被触发(不是预期的)
UserPool 组的配置:
-
组用户:
- 阿恩:
Role ARN: arn:aws:iam::xxxxxx:role/User -
UserRole 指定为
{ "Version": "2012-10-17", "Statement": [ "Action": [ "lambda:InvokeFunction", "lambda:InvokeAsync" ], "Resource": [ "arn:aws:lambda:region:xxxxxx:function:api-dev-getItems ], "Effect": "Allow" ] }
- 阿恩:
-
组管理员:
- 阿恩:
Role ARN: arn:aws:iam::xxxxxx:role/Admin -
AdminRole 指定为
{ "Version": "2012-10-17", "Statement": [ "Action": [ "lambda:InvokeFunction", "lambda:InvokeAsync" ], "Resource": [ "arn:aws:lambda:region:xxxxxx:function:api-dev-getItems "arn:aws:lambda:region:xxxxxx:function:api-dev-getUsers ], "Effect": "Allow" ] }
- 阿恩:
id 令牌的有效负载还包含:
'cognito:roles': [ 'arn:aws:iam::xxxxxx:role/User' ]
【问题讨论】:
标签: amazon-web-services aws-lambda aws-api-gateway aws-cognito