我按照本教程https://serverless-stack.com/使用AWS服务(S3,Lambda,Cognito,DynamoDB)创建了无服务器应用程序,并使用ReactJS创建了无服务器框架 . 该教程使用AWS Cognito用户池和身份池进行用户管理和身份验证 . 本教程中的应用程序是一个"Note-Taking"应用程序,它在应用程序中没有基于角色的访问控制 .
但是,我正在创建的应用程序需要RBAC,在阅读之后,我了解RBAC可以使用“用户组”或“联合身份”来实现 . 但是,我仍然无法弄清楚如何正确使用我的应用程序中的任何一个 .
这是我到目前为止在应用程序中所做的
-
创建了用户池并生成了池ID
-
添加了App Client并生成了App Client ID
-
使用无服务器创建和部署了我的API
-
使用Cognito作为身份验证提供程序以及上面生成的池ID和应用程序客户机ID,对具有标识池的API应用访问控制,然后应用具有以下策略的角色
政策
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"mobileanalytics:PutEvents",
"cognito-sync:*",
"cognito-identity:*"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::YOUR_S3_UPLOADS_BUCKET_NAME/${cognito-identity.amazonaws.com:sub}*"
]
},
{
"Effect": "Allow",
"Action": [
"execute-api:Invoke"
],
"Resource": [
"arn:aws:execute-api:YOUR_API_GATEWAY_REGION:*:YOUR_API_GATEWAY_ID/*"
]
}
]
}
这允许每个人访问所有API . 如何为每个用户分配角色,然后根据角色限制对某些API的访问?
1 回答
有几种方法可以做到;更重要的是,您根本不需要身份池 .
在Cognito用户池中,您定义与之关联的每个组may have an IAM role . 进行身份验证的用户将承担该角色(如果他们有多个组,则使用优先顺序)
或者如果您需要做的只是API网关上的授权(而不是完整的IAM设置),那么连接到网关的自定义授权器lambda将能够对Cognito进行身份验证,然后根据经过身份验证的用户进行授权细节 .