AWS API-шлюз с авторизацией Cognito с использованием нескольких пулов пользователей - PullRequest
0 голосов
/ 07 августа 2020

У меня есть несколько пулов пользователей Cognito, которые я использую для разделения пользователей для разных приложений. У меня также есть набор API, определенных в API Gateway. Эти API являются общими, и их могут использовать несколько приложений. Я пытаюсь контролировать, какие приложения имеют доступ к каким API, используя сервер ресурсов Cognito и настраиваемые области.

Это руководство, которому я следовал: https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-enable-cognito-user-pool.html

Проблема в том, что я должен указать пул пользователей при создании авторизатора шлюза API. Я могу создать несколько авторизаторов, но мне кажется, что я могу выбрать только один при присоединении авторизатора к методу шлюза API.

Эта настройка означает, что только один пул пользователей может когда-либо иметь доступ к API в шлюзе API при использовании авторизатора Cognito. Это правильно или я что-то пропустил?

Мой единственный вариант, кажется, использовать авторизатор Lambda и делать все это вручную. Однако это означает, что мне нужно сохранить сопоставление между конечными точками / методами API и настраиваемыми областями действия. Если бы я применил этот подход, как бы я мог проверить, что токен доступа имеет доступ к конечной точке во входящем запросе?

1 Ответ

0 голосов
/ 08 августа 2020

Я сделал нечто подобное, но не совсем то, что вы делаете, но, возможно, это приведет вас в правильном направлении.

Так что я думаю, что вы правы в том, что вам нужно сделать Лямбда-авторизатор, но затем берет на себя роль когнитивного пользователя. Затем, если у этого пользователя нет доступа, чтобы что-то сделать, IAM взорвет это.

client = boto3.client('sts')
role=event['requestContext']['authorizer']['claims']['cognito:preferred_role']

assumed_role_object = client.assume_role(
    RoleArn=role,
    RoleSessionName='APIrole'
)
credentials=assumed_role_object['Credentials']
dynamo_resource=boto3.resource(
    'dynamodb',
    aws_access_key_id=credentials['AccessKeyId'],
    aws_secret_access_key=credentials['SecretAccessKey'],
    aws_session_token=credentials['SessionToken'],
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...