Внедрение управления доступом на основе ролей с помощью AWS Cognito с бессерверным режимом

Я создал бессерверное приложение с использованием сервисов AWS (S3, Lambda, Cognito, DynamoDB) и бессерверной инфраструктуры с ReactJS, следуя этому руководству https://serverless-stack.com/. В учебнике используются пул пользователей и пул идентификаторов AWS Cognito для управления пользователями и аутентификации. Приложение в учебнике - это приложение для ведения заметок, которое не имеет контроля доступа на основе ролей в приложении.

Однако приложение, которое я создаю, требует RBAC, и, прочитав о нем, я понял, что RBAC может быть реализован либо с использованием «групп пользователей», либо «федеративных удостоверений». Однако я все еще не мог понять, как правильно использовать любой из них в моем приложении.

Это то, что я делал в приложении до сих пор

  1. Создал пул пользователей и сгенерировал идентификатор пула
  2. Добавлен клиент приложения и сгенерирован идентификатор клиента приложения.
  3. Создал и развернул свои API с использованием Serverless
  4. Примененный контроль доступа к 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 в зависимости от их роли?


person Shashank    schedule 19.09.2017    source источник


Ответы (1)


Есть несколько способов сделать это; Более того, вам вообще не нужен пул идентификационных данных.

  • Внутри пула пользователей Cognito каждая группа, которую вы определяете, может иметь связанную с ним роль IAM. Пользователи, прошедшие проверку подлинности, примут на себя эту роль (если у них несколько групп, используется порядок приоритета)
  • В качестве альтернативы, если все, что вам нужно сделать, это авторизация на шлюзе API (вместо полной настройки IAM), тогда настраиваемая лямбда авторизатора, прикрепленная к шлюзу, сможет выполнять как аутентификацию в Cognito, так и авторизацию на основе данных аутентифицированного пользователя. .
person Trent Bartlem    schedule 19.09.2017
comment
тогда настраиваемая лямбда авторизатора, подключенная к шлюзу, сможет выполнять как аутентификацию в Cognito, так и авторизацию на основе данных аутентифицированного пользователя. Не могли бы вы рассказать мне, как пользовательский авторизатор сможет аутентифицироваться, используя как Cognito, так и данные пользователя? - person aditya_medhe; 05.12.2017