Предоставление Cognito Protected API-интерфейсов AWSGateway клиентам - PullRequest
0 голосов
/ 10 декабря 2018

Вариант использования: у нас есть несколько API-интерфейсов AWSGateway, которые наши клиенты могут использовать для выполнения каких-либо задач в бэкэнде.Эти API-интерфейсы защищены Cognito.В настоящее время наши клиенты используют этот APIS через приложение для Android, созданное с использованием Cognito Mobile SDK.

Теперь мы пытаемся предоставить эти API нашим клиентам для интеграции в их внутренние рабочие процессы.

Я пытался найти лучший способ сделать это.В настоящее время я не могу найти какие-либо ресурсы о том, как это сделать.

Я, кажется, являюсь пользователем AWS Cognito на стороне сервера, но я не думаю, что это то, что мы хотим сделать здесь.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

Чтобы правильно ответить на ваш вопрос, нам нужна дополнительная информация.

  • Можно ли настроить внутренние рабочие процессы для использования служб REST?
  • Какие процессы аутентификации поддерживает внутренние рабочие процессы?

SDK или нет SDK

Доступ к веб-сервисам в API Gateway можно получить через сгенерированный SDK или собственный код.Инструкции по созданию SDK из консоли API Gateway можно найти здесь .

. Чтобы вызвать веб-сервис с аутентификацией, можно выполнить четырьмя способами IAM, API Keys, Cognito, настраиваемый авторизатор.Я собираюсь упомянуть первые три.

IAM

  • Шаг 1, создайте пользователя в IAM с ключом доступа и секретным ключом.
  • Шаг 2, слишком настроена роль для доступа к API с помощью IAM.Перейдите к IAM , выберите роли, создайте роль и предоставьте ей доступ к функциям API-шлюза.Что будет выглядеть примерно так:

Пример политики IAM:

{
   "Version": "2012-10-17",
   "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::account-id:user/Alice",
                    "account-id"
                ]
            },
            "Action": "execute-api:Invoke",
            "Resource": [
                "arn:aws:execute-api:region:account-id:api-id/stage/GET/pets"
            ]
        }
    ]
}

назначьте эту роль пользователю, которого вы создали.Примеры политики доступны здесь. .Дополнительные параметры аутентификации, включающие локальные сертификаты и т. Д., См. здесь .

  • Шаг 3, вызовите API с помощью AWS Secret и Key SDK .

Ключи API

Если вы добавите ключи в свои API-интерфейсы, мобильное приложение не будет работать, поскольку оно не имеет этих ключей.Было бы лучше развернуть другую версию ваших API, которые могли бы обернуть существующие, могли бы предоставить дополнительные функциональные возможности, специфичные для рабочего процесса.Чтобы узнать, как это сделать, перейдите по этой ссылке .

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

Cognito - федеративные пользователи

Ваши мобильные пользователи фактически аутентифицируются с использованием федеративных пользователей .Однако один из каналов федеративного пользователя оказывается cognito.Вы можете добавить больше, OpenAuth, Google, Facebook, SAML и т. Д., Здесь вы можете добавить тип аутентификации, используемый вашим клиентом.Затем пользователь будет использовать свое имя пользователя и пароль для аутентификации поставщика безопасности клиентов, затем эти учетные данные передаются в API через федеративных пользователей, и поэтому федеративные пользователи должны быть настроены на использование того же механизма аутентификации, что и ваш клиент.Смотрите следующее сообщение в блоге

Для этого решения у нас есть несколько вариантов.1. Передайте учетные данные пользователя в API с федеративными пользователями, это предполагает, что пользовательский интерфейс вызывает веб-сервис, но, как вы упомянули, это рабочий процесс, и я предполагаю, что пользователь не имеет прямого доступа к сервису, как это происходит с мобильным приложением.т.е. службы вызываются машиной как фоновый процесс на сервере.Что означает, что это решение не будет работать.Вариант 2. Создать нового пользователя, в cognito для клиента.Это то же самое, что доступ к услуге через мобильное приложение.Для этого нужно немного поработать над клиентом, так как вам нужно получить временные маркеры доступа.

  • Шаг 1. Используйте SDK или закодируйте интерфейс API самостоятельно.
  • Шаг 2. Сгенерируйте в Cognito пользователя для использования бэкэнд-системой.
  • Шаг 3. Используйте пользователя cognito для получения токенов доступа
  • Шаг 4. Используйте токены доступадля доступа к веб-сервису через API-шлюз.

Предлагаемое решение

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

  1. Может ограничить доступ к API
  2. Другая версия означает, что вы можете расширить ее и добавить дополнительные функциональные возможности, специфичные для рабочего процесса
  3. Проще всего реализовать, как естьнет обмена ключами, такие обновления в заголовке запроса.

РЕДАКТИРОВАТЬ: Мое предложение решения 2 неверно.Документация AWS гласит после Чтобы включить методы API в план использования, необходимо настроить отдельные методы API для запроса ключа API.Для аутентификации и авторизации пользователей не используйте ключи API.Используйте роль IAM, авторизатор Lambda или пул пользователей Amazon Cognito.

AWS Также говорится, что для управляемого доступа

  • доступно следующее Политики ресурсов позволяют создавать политики на основе ресурсов, чтобы разрешать или запрещать доступ к вашим API и методам с указанных исходных IP-адресов или конечных точек VPC.
  • Стандартные роли AWS IAM и политики предлагают гибкие и надежные средства управления доступом, которые можно применять ко всему API или отдельным методам.
  • Совместное использование ресурсов между источниками (CORS) позволяет вам контролировать реакцию API на перекрестные соединения.запросы ресурсов домена.
  • Лямбда-авторизаторы - это лямбда-функции, которые управляют доступом к вашим методам API с использованием аутентификации токенов на предъявителя, а также информации, описываемой заголовками, путями, строками запросов, переменными этапа или контекстом.параметры запроса переменных.
  • Amazon Cognito пулы пользователей позволяют создавать настраиваемые аутентичныеРешения и авторизация.
  • Клиентские сертификаты SSL можно использовать для проверки того, что HTTP-запросы к вашей серверной системе поступают от API-шлюза.
  • Планы использования позволяет вам предоставлять ключи API своим клиентам, а затем отслеживать и ограничивать использование этапов и методов API для каждого ключа API.

Не все описанные выше подходы предназначены, например, для авторизации.CORS фактически защищает пользователя от межсайтовых сценариев, и, как видно, ключи API предназначены только для планов использования.Политики ресурсов еще больше защищают API, ограничивая доступ к IP-адресам, поэтому вашими единственными опциями на самом деле являются роли IAM, как описано в варианте 1, и федеративные пользователи, как описано в варианте 3, или ваша собственная пользовательская лямбда-авторизация, если вы используете Lambda, иливаш собственный авторизатор, если вы используете что-то иное, чем лямбда, завернутый в API Gateway.

0 голосов
/ 07 февраля 2019

Вы можете использовать только токены API для авторизации (если это не было недавно удалено), я использовал их в нескольких приложениях.Это не рекомендуется для Аутентификация - но это зависит от приложения, если их достаточно для авторизации. Они были дополнены более безопасными методами за счет существенных усложнений как для клиента, так и для сервера.

Токены API имеют преимущество в простоте использования для эмитента, клиента и сервера, поскольку они не требуют сложной подписи или протоколов - однако они не настолько фундаментально безопасны, как их можно использовать повторно и, как правило, не имеют срока действия.быстро.В противном случае они эквивалентны токенам на предъявителя.

Безопасность очень зависит от контекста - рассмотрите вопрос: от чего именно вы защищаетесь (обеспечивая безопасность для )?Каков риск и стоимость нарушения безопасности?Какова стоимость / усилия по его внедрению и использованию?Многие «дыры» в безопасности связаны не с самим протоколом аутентификации, а с тем, как данные обрабатываются «вне коробки» - нет идеальной безопасности, а это означает, что стремление к идеальной безопасности сопряжено с неограниченными затратами и снижением эффективности.Обычно рекомендуется сбалансировать риск и стоимость потенциальных потерь с затратами на внедрение и обслуживание.Вы можете иметь «высокозащищенный» API, но также иметь высокий риск взлома и потери данных из-за обработки до и после прохождения через защищенный шлюз.Существует много разумных случаев, когда вместо того, чтобы сосредоточиться на защите «входной двери» с помощью банковских хранилищ и бронированных грузовиков, вместо этого необходимо обеспечить обработку данных таким образом, чтобы через входную дверь не проходили никакие данные, представляющие значительный риск для безопасности.AWS предоставляет широкий спектр технических функций, но в конечном итоге каждый клиент должен реализовать их в соответствии с их потребностями.Ключи API имеют ряд подходящих вариантов использования, особенно при обмене данными между серверами, особенно в тех случаях, когда личная идентификация (и данные PI) не используются, или когда API включает в основном службы вместо данных (например, API-интерфейс для миниатюр изображений).который не хранит состояние и не предоставляет доступа к данным).При поддержке использования HTTPS / SSL и, возможно, других факторов безопасности, таких как парольные фразы, белые списки диапазонов IP-адресов и общая политика наименьшего доступа.
Не стоит недооценивать фактор «Записки».Если вы сделаете безопасный доступ слишком болезненным для своих пользователей, они найдут способ сделать его менее болезненным, но менее безопасным, чем более простые меры, которые они не имели бы стимула для обхода.

0 голосов
/ 10 декабря 2018

Я полагаю, что это будет сервис-сервис или (сервер-сервер) связь, для этой терминологии используется Oauth Standard - client_credentials тип предоставления.

Пожалуйста, обратитесь к документации для получения токена Как только токен получен, вам необходимо передать этот токен либо Authorization, либо API Gateway Custom Header for AWS Cognito.

...