Вопросы и ответы по Amazon Cognito

Общие вопросы

Amazon Cognito позволяет добавить возможности регистрации пользователей, входа в систему, контроля доступа и брокерского доступа к сервисам AWS для ваших веб-приложений и мобильных приложений за считаные минуты. Это экономичный сервис, ориентированный на разработчиков, который предоставляет безопасные хранилища идентификационных данных на основе клиентов и варианты федераций, которые можно масштабировать до миллионов пользователей. Amazon Cognito помогает создавать фирменные клиентские интерфейсы, повышать безопасность и адаптироваться в соответствии с потребностями клиентов. Например, он поддерживает вход с помощью поставщиков идентификационных данных социальных сетей и вход без пароля с использованием ключей доступа WebAuthn или одноразовых паролей, передаваемых в SMS и по электронной почте. Amazon Cognito поддерживает различные стандарты соответствия требованиям, работает на основе открытых стандартов идентификации и интегрируется с обширным каталогом ресурсов для разработки и библиотек SDK.

Благодаря Amazon Cognito можно заниматься только тем, что сделает приложение удобным для пользователей, и не заботиться о создании, обеспечении безопасности и масштабировании решений для управления пользователями и аутентификации.

Вы можете легко начать работу через Консоль AWS. Если у вас нет аккаунта Amazon Web Services, вы можете создать его при входе в консоль. Создав пул пользователей для управления пользователями или пул идентификационных данных для федеративной идентификации, вы можете интегрировать свое приложение и API с OAuth и OpenID Connect (OIDC).

Подробнее см. в ресурсах для начала работы.

Amazon Cognito предназначен для разработчиков, желающих добавить в свои мобильные или интернет‑приложения функционал управления пользователями и синхронизации данных. Разработчики могут использовать Cognito Identity, чтобы добавить в приложения функционал регистрации и авторизации пользователей и обеспечить безопасный доступ пользователей к ресурсам приложений. Cognito также позволяет разработчикам синхронизировать данные для разных приложений на разных устройствах и платформах.

Да. Cognito предоставляет разработчику доступ к серверным API. Вы можете создать собственный настраиваемый интерфейс для взаимодействия с Cognito, вызывая эти API напрямую. Описание серверных API приведено в Руководстве разработчика.

Поддержка Cognito включена в дополнительные пакеты AWS Mobile SDK, которые доступны для платформ iOS, Android, Unity и Kindle Fire. Cognito также доступен в AWS SDK для .NET, C++, Go, Java, JavaScript, PHP v3, Python, Ruby v3 и интерфейса командной строки.

См. страницу наших ресурсов, чтобы просмотреть и загрузить доступные SDK.

Нет. Cognito предоставляет свои API управления и работы с данными как веб‑сервисы. Вы можете реализовать собственную клиентскую библиотеку, вызывая серверные API напрямую.

Добавьте регистрацию и вход в мобильные и веб-приложения

Для первофакторных аутентификаторов Amazon Cognito поддерживает имя пользователя и пароль, одноразовый пароль электронной почты без пароля, OTP через SMS без пароля и ключи доступа WebAuthn. Cognito поддерживает такие многофакторные аутентификаторы (MFA): OTP через электронную почту, OTP через SMS и TOTP. Кроме того, клиенты и партнеры могут реализовать поддержку сторонних продуктов и специализированных аутентификаторов с настраиваемыми потоками аутентификации, используя расширения AWS Lambda.

Да, вы можете легко и безопасно добавить функциональные возможности регистрации и авторизации пользователей в свои приложения, используя Amazon Cognito. Ваши пользователи могут регистрироваться и авторизоваться с помощью адреса электронной почты, номера телефона или имени пользователя. Можно также реализовать расширенные функции безопасности, такие как проверка адресов электронной почты и телефонных номеров или многофакторная аутентификация. Кроме того, Cognito позволяет настраивать рабочие процессы, например, путем добавления в модуль регистрации пользователей с помощью AWS Lambda специфичной для приложения логики обнаружения мошенничества и проверки подлинности пользователей. Подробную информацию см. в документации.

Пул пользователей – это клиентский каталог пользователей, который можно настроить для мобильных и веб-приложений. Пул пользователей надежно хранит атрибуты профиля пользователей и поддерживает настраиваемую схему. Вы можете создавать пул пользователей и управлять им с помощью Консоли AWS, интерфейса командной строки AWS или SDK AWS.

Разработчики могут использовать атрибуты профилей пользователей, отвечающие стандарту OpenID Connect (такие как имя пользователя, номер телефона, адрес, часовой пояс и т. д.) или добавлять собственные, специфичные для приложения атрибуты пользователей.

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

Подробнее см. в документации.

 

Да, при создании или настройке пула пользователей можно настроить политики паролей, такие как длина пароля, сложность символов и требования к истории паролей. Кроме того, Amazon Cognito поддерживает проверку взломанных мандатов при каждой регистрации, входе и смене пароля, чтобы убедиться, что пользователи не заходят в систему с паролем, взломанным на другом веб-сайте.

Да. Используя пул идентификационных данных Amazon Cognito, вы можете указать необходимость проверки адресов и номеров телефона ваших пользователей, прежде чем предоставить им доступ к приложению. Во время регистрации на телефонный номер или электронный адрес пользователя будет отправлен код подтверждения, и для завершения регистрации пользователь должен будет ввести этот код.

Да. Вы можете разрешить конечным пользователям вашего приложения авторизоваться при помощи MFA на основе SMS. Если многофакторная аутентификация на основе SMS разрешена, у ваших пользователей будет затребован пароль (первый фактор: что им известно), и код безопасности, который они получат в виде SMS на мобильный телефон (второй фактор: чем они владеют).

Да, с помощью AWS Lambda можно настроить потоки регистрации и входа. Например, можно создать функцию AWS Lambda для обнаружения мошенничества или для выполнения дополнительных проверок пользовательских данных. Настраиваемые функции Lambda можно запускать при предварительной регистрации, после подтверждения (регистрации), при предварительной аутентификации, во время аутентификации и после нее. Можно также применять функции Lambda для настройки сообщений, которые используются при проверке электронной почты или телефонного номера и при многофакторной аутентификации.

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

Перенести пользователей из существующего каталога пользователей или базы данных приложения в пулы пользователей можно двумя способами: миграция точно в срок (JIT) и массовая миграция.

Amazon Cognito позволяет переносить пользователей точно в срок (в процессе входа в приложение) с помощью встроенного триггера AWS Lambda. Триггер Lambda позволяет переносить данные пользователей из внешней системы без необходимости восстановления пароля.

Другой способ позволяет массово перенести пользователей с помощью загрузки CSV‑файла, содержащего профили всех пользователей. Файл можно загрузить через консоль Amazon Cognito, API или интерфейс командной строки AWS. Во время первого входа в систему пользователи должны подтвердить свой аккаунт, введя код, отправленный на адрес электронной почты или телефон, а также задать новый пароль.

Подробнее см. в разделе об импорте пользователей в пулы пользователей.

Включите доступ к ресурсам AWS

Да, пулы идентификационных данных Cognito позволяют аутентифицировать пользователей через внешних поставщиков идентификации и предоставляют временные мандаты для доступа к внутренними ресурсам приложения на платформе AWS или к любому сервису через API шлюз Amazon. Amazon Cognito работает с внешними поставщиками удостоверений, которые поддерживают стандарты SAML или OpenID Connect, с социальными платформами (такими как Facebook, Twitter, Amazon), и позволяет интегрировать собственный поставщик удостоверений.

Вы можете использовать Amazon, Facebook, Twitter, входить в систему с помощью Apple, поставщиков социальной идентификации Google, поставщиков идентификации OpenID Connect (OIDC), поставщиков идентификации SAML, пулов пользователей Amazon Cognito и специализированных поставщиков разработчиков.

Пулы идентификационных данных позволяют создавать уникальные идентификации пользователей и безопасно интегрировать их с поставщиками сервисов AWS. Клиенты используют пулы идентификационных данных Amazon Cognito в качестве брокера мандатов для получения временных мандатов AWS с ограниченными привилегиями для доступа к ресурсам AWS.

Пользователи могут войти в систему через пулы пользователей Amazon Cognito, поставщиков идентификации OIDC, поставщиков идентификационных данных SAML или поставщиков социальной идентификации и получить доступ к сервисам AWS на основе ролей, таким как корзины Amazon S3 или записи Amazon DynamoDB. Пулы идентификации не хранят пользовательских профилей. Пул идентификации можно связать с одним или несколькими приложениями. При использовании двух разных пулов идентификации для двух приложений у одного и того же конечного пользователя будет отдельный уникальный идентификатор в каждом из пулов.

Ваше мобильное приложение выполняет аутентификацию с помощью поставщика удостоверений (IdP), используя SDK поставщика. После аутентификации конечного пользователя на стороне IdP токен OpenID Connect или утверждение SAML, возвращаемые от IdP, передаются приложением в пул идентификационных данных Cognito, который возвращает новый идентификатор Cognito для этого пользователя и набор временных мандатов для доступа в AWS с ограниченными привилегиями.

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

Пулы идентификационных данных Cognito присваивают пользователям набор временных мандатов для ограниченного доступа к ресурсам AWS, так что для этого не требуется использовать мандаты аккаунта AWS. Разрешения каждого пользователя контролируются через созданные для них роли AWS IAM. Можно определить правила выбора ролей IAM для каждого пользователя, или, если в пуле пользователей Cognito используются группы, можно назначать роли IAM на базе групп. Пулы идентификационных данных Cognito также позволяют определить отдельную роль IAM с ограниченными разрешениями для гостевых пользователей, не прошедших аутентификацию. Кроме того, можно использовать уникальный идентификатор, который генерируется сервисом Cognito для пользователей, с целью контроля доступа к определенным ресурсам. К примеру, можно создать политику для корзины S3, разрешающую каждому пользователю доступ только к его собственной папке внутри корзины.

Нет, приложение напрямую связывается с поддерживаемым общедоступным поставщиком идентификации (Amazon, Facebook, Twitter, вход через Apple, Google, SAML или поставщик, совместимый с Open ID Connect) для аутентификации пользователей. Cognito Identity не получает и не хранит данные для доступа. Cognito Identity использует токен от поставщика удостоверений, чтобы получить уникальный идентификатор пользователя, а затем хеширует его с помощью необратимой хеш-функции, чтобы в будущем опознать этого же пользователя без необходимости хранения самого идентификатора.

Нет. Cognito Identity не получает конфиденциальную информацию (например, адрес электронной почты, список друзей и т. д.) от поставщиков удостоверений.

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

Нет. Cognito Identity поддерживает авторизацию с помощью учетных записей Amazon, Facebook, Twitter, Digits и Google, а также обеспечивает поддержку пользователей без аутентификации. При работе с Cognito Identity вы можете использовать аутентификацию с помощью федерации удостоверений, хранилище синхронизации данных профиля и распределение токенов доступа AWS, и при этом не придется писать никакого серверного кода.

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

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

Вы можете программно создать пакет данных, связанный с пулами идентификационных данных Cognito, и запустить их сохранение в виде пар «ключ‑значение». Данные хранятся как локально на устройстве, так и в хранилище Cognito Sync. Cognito может синхронизировать эти данные на всех устройствах конечного пользователя.

Количество идентификаций в консоли пулов идентификационных данных Cognito указывает на то, сколько идентификаций было создано с помощью API пулов идентификационных данных Cognito. При работе с аутентифицированными идентификациями (то есть в тех случаях, когда авторизация выполнена через поставщика идентификации, например Facebook или другого поставщика, совместимого с OpenID Connect) каждый вызов к API GetId пулов идентификационных данных Cognito может создать только одну идентификацию для каждого пользователя. Однако для пользователей, не прошедших аутентификацию, каждый вызов API GetId со стороны клиента будет создавать новое удостоверение. Следовательно, если приложение несколько раз вызывает API GetId для одного пользователя, не прошедшего аутентификацию, этот пользователь в результате получит несколько удостоверений. Поэтому при разрешении доступа без аутентификации важно кэшировать ответы, полученные от GetId, и не вызывать этот API несколько раз для одного и того же пользователя.

Мобильный SDK содержит алгоритм для автоматического кэширования пулов идентификационных данных Cognito, так что вам не придется об этом беспокоиться. Если вы ищете комплексное решение для анализа работы приложения с возможностью отслеживания уникальных пользователей, обратите внимание на Amazon Mobile Analytics.

Цены

Цены на пул пользователей Amazon Cognito см. на странице цен Amazon Cognito.

Для расчета предполагаемых затрат используйте Калькулятор цен AWS

 

Плата за пулы пользователей Amazon Cognito рассчитывается исходя из количества активных пользователей в месяц (MAU). MAU – это пользователи, для которых в течение календарного месяца приложение выполняло любую операцию идентификации, например создание или обновление аккаунта, регистрацию, вход в систему, выход из системы, обновление токена, изменение пароля, обновление атрибута пользовательской учетной записи или запрос атрибутов пользователей (AdminGetUser API). Последующие сессии активных пользователей и неактивные пользователи в этом календарном месяце не оплачиваются. Обычно общее количество пользователей, а также количество операций, значительно больше, чем количество пользователей MAU.

Цены на Amazon Cognito Sync см. на этой странице.

Использование SMS‑сообщений для верификации номеров телефонов и отправки кодов в случае, если пароль забыт или пользователь его меняет, а также при многофакторной аутентификации, оплачивается отдельно. Подробнее см. на странице цен на рассылку SMS по всему миру.

Операцией синхронизации считается вызов метода synchronize(), сделанный с помощью AWS Mobile SDK. При непосредственном вызове серверных API операция синхронизации инициируется при выдаче нового токена сеанса синхронизации и завершается при успешном выполнении записи или тайм‑ауте токена сеанса. И при использовании метода synchronize() SDK, и при непосредственном вызове серверных API операции синхронизации оплачиваются по одному и тому же тарифу.

Да, для первых 10 000 MAU пулов пользователей Amazon Cognito SKU и Essentials SKU доступны бесплатно. Аккаунты клиентов с активными пулами пользователей Amazon Cognito до 21 ноября 2024 года имеют право на уровень бесплатного пользования в размере 50 000 MAU.

В рамках уровня бесплатного пользования AWS клиенты AWS получают 10 ГБ облачного хранилища синхронизации и 1 000 000 операций синхронизации в месяц в течение первых 12 месяцев.

За использование пулов идентификационных данных Amazon Cognito для аутентификации пользователей и создания уникальных идентификаторов плата не взимается

Дополнительная плата за запуск функций Lambda с помощью событий Cognito не взимается, но при выполнении функций Lambda действуют обычные тарифы AWS Lambda и других сервисов AWS.

Подробнее см. на странице цен на AWS Lambda.

 

Вы самостоятельно решаете, когда вызывать метод synchronize(). Каждая операция записи на устройство или чтения с него выполняется с использованием локального хранилища SQLite. Благодаря этому вы полностью контролируете свои расходы.

Для отправки скрытых push‑уведомлений Cognito использует сервис Amazon SNS. Дополнительная плата за push‑синхронизацию с помощью Cognito не взимается, но оповещения, отправляемые на устройства, оплачиваются по обычным тарифам Amazon SNS.