Я создал бессерверное приложение с использованием сервисов AWS (S3, Lambda, Cognito, DynamoDB) и бессерверной инфраструктуры с ReactJS, следуя этому руководству https://serverless-stack.com/. В учебнике используются пул пользователей и пул идентификаторов AWS Cognito для управления пользователями и аутентификации. Приложение в учебнике - это приложение для ведения заметок, которое не имеет контроля доступа на основе ролей в приложении.
Однако приложение, которое я создаю, требует RBAC, и, прочитав о нем, я понял, что RBAC может быть реализован либо с использованием «групп пользователей», либо «федеративных удостоверений». Однако я все еще не мог понять, как правильно использовать любой из них в моем приложении.
Это то, что я делал в приложении до сих пор
- Создал пул пользователей и сгенерировал идентификатор пула
- Добавлен клиент приложения и сгенерирован идентификатор клиента приложения.
- Создал и развернул свои API с использованием Serverless
- Примененный контроль доступа к API с помощью Identity Pool с использованием Cognito в качестве поставщика аутентификации и идентификатора пула и идентификатора клиента приложения, сгенерированных выше, а затем применения роли со следующей политикой
Политика
{
"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 в зависимости от их роли?