Авторизация: IAM, авторизаторы Lambda и Cognito
Защитите конечные точки API с помощью подписей IAM SigV4, пользовательских авторизаторов Lambda или авторизаторов пулов пользователей Amazon Cognito.
«Авторизация: IAM, авторизаторы Lambda и Cognito» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 4 уроков всего.
Почему авторизация API Gateway важна
Без средств управления авторизацией любой клиент из интернета мог бы вызывать конечные точки API Gateway и получать доступ к данным или изменять их. API Gateway предоставляет три встроенных механизма авторизации: IAM (SigV4), авторизаторы Lambda и авторизаторы пулов пользователей Amazon Cognito. Каждый механизм предназначен для разных случаев: IAM — для вызовов между сервисами AWS, авторизаторы Lambda — для пользовательской авторизации на основе токена или запроса, а Cognito — для аутентификации пользователей веб- и мобильных приложений.
Авторизация IAM с помощью SigV4
Авторизация IAM требует от вызывающей стороны подписывать запросы с использованием AWS Signature Version 4 (SigV4). У вызывающей стороны должны быть учётные данные AWS (ключ доступа и секретный ключ либо временные учётные данные из STS), а политика IAM должна разрешать действие execute-api:Invoke над ARN API. Это идеально подходит для вызовов между машинами (между серверами) внутри AWS: когда Lambda вызывает другой API, EC2 вызывает внутренний API или сервис обращается к ресурсу в другом аккаунте. Клиенты браузера не могут легко использовать SigV4.
# IAM policy to allow invoking a specific API endpoint
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Action': 'execute-api:Invoke',
'Resource': 'arn:aws:execute-api:us-east-1:123456789012:abc123/prod/GET/orders'
}]
}Авторизаторы Lambda: на основе токена
Авторизатор Lambda (ранее — настраиваемый авторизатор) — это написанная вами Lambda-функция, которую API Gateway вызывает перед обращением к интеграции серверной части. Для авторизаторов на основе токена API Gateway извлекает токен (JWT, OAuth, ключ API) из заголовка Authorization и передаёт его Lambda. Lambda проверяет токен (например, проверяет подпись JWT с помощью открытого ключа или обращается к стороннему поставщику удостоверений) и возвращает документ политики IAM, разрешающий или запрещающий запрос.
def lambda_handler(event, context):
token = event['authorizationToken']
# Validate token (JWT verification, introspect OAuth, etc.)
if is_valid_token(token):
return {
'principalId': 'user123',
'policyDocument': {
'Version': '2012-10-17',
'Statement': [{'Effect': 'Allow', 'Action': 'execute-api:Invoke',
'Resource': event['methodArn']}]
},
'context': {'userId': 'user123', 'role': 'admin'}
}
raise Exception('Unauthorized')Авторизаторы Lambda: на основе запроса
Для авторизаторов Lambda на основе запроса API Gateway передаёт Lambda весь контекст запроса (заголовки, строки запроса, переменные этапа и параметры пути), а не только токен. Это полезно для авторизации, зависящей от нескольких атрибутов запроса: списков разрешённых IP-адресов, сочетаний заголовков или проверок многофакторной аутентификации. Авторизаторы на основе запроса поддерживаются и REST API, и HTTP API.
Кэширование авторизаторов Lambda
Вызов авторизатора Lambda для каждого запроса к API увеличивает задержку и расходы. Включите кэширование результата авторизатора: кэшируйте политику IAM, возвращённую авторизатором, на настраиваемый TTL (0–3600 секунд), используя значение токена как ключ. Последующие запросы с тем же токеном пропускают вызов Lambda и используют кэшированную политику. Установите TTL в соответствии со сроком действия токена: если токен действителен 1 час, кэшируйте результат авторизатора на такой же срок. Кэширование доступно в REST API; авторизаторы JWT в HTTP API имеют встроенное кэширование.
Авторизатор пула пользователей Amazon Cognito
Авторизаторы пулов пользователей Cognito проверяют JWT, выданные Cognito, непосредственно в API Gateway, без Lambda-функции. Когда пользователь проходит аутентификацию через Cognito (с помощью размещённого интерфейса, SDK или федеративного поставщика удостоверений), Cognito выдаёт ID-токен или токен доступа. Клиент передаёт этот токен в заголовке Authorization. API Gateway проверяет подпись и срок действия токена в соответствии с пулом пользователей Cognito. Если токен действителен, запрос продолжается; если нет, API Gateway возвращает 401.
aws apigateway create-authorizer \
--rest-api-id 'abc123' \
--name 'CognitoAuthorizer' \
--type COGNITO_USER_POOLS \
--provider-arns 'arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_XXXXXXX' \
--identity-source 'method.request.header.Authorization'Авторизатор JWT в HTTP API
HTTP API поддерживает встроенный авторизатор JWT без Lambda. Вы указываете URL издателя JWT (Cognito, Auth0, Okta) и аудиторию, после чего API Gateway автоматически проверяет JWT. По сути, это авторизатор пула пользователей Cognito, но он также работает с любым соответствующим стандартам поставщиком OIDC. Проверка токена (подписи, срока действия и аудитории) выполняется самим API Gateway, что обеспечивает меньшую задержку по сравнению с авторизаторами Lambda и не требует расходов на Lambda.
aws apigatewayv2 create-authorizer \
--api-id 'abc123' \
--authorizer-type JWT \
--name 'JWTAuthorizer' \
--identity-source '$request.header.Authorization' \
--jwt-configuration '{
"Issuer": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_XXXXXXX",
"Audience": ["your-client-id"]
}'Пулы удостоверений Cognito и пулы пользователей
Для авторизации API используйте пулы пользователей Cognito: они управляют аутентификацией пользователей и выдают JWT. Пулы удостоверений Cognito (федеративные удостоверения) работают иначе: они обменивают сторонние токены (из пулов пользователей, социальных служб входа и SAML) на временные учётные данные AWS (через STS AssumeRoleWithWebIdentity). Пулы удостоверений используются, когда приложению требуется напрямую обращаться к сервисам AWS (S3, DynamoDB) с клиента. Для авторизации API Gateway подходят JWT пулов пользователей; учётные данные пула удостоверений предназначены для прямых вызовов AWS SDK из браузера или мобильного приложения.
Политики ресурсов в API Gateway
REST API поддерживает политики ресурсов — политики JSON, прикреплённые к API и управляющие доступом по IP-адресу, конечной точке VPC, исходному аккаунту или ARN. Используйте политики ресурсов, чтобы разрешить вызовы API только из определённых диапазонов IP-адресов, ограничить доступ запросами через конкретную конечную точку VPC (частный API) или разрешить вызовы между аккаунтами. Политики ресурсов работают дополнительно к авторизаторам на уровне метода: для успешного выполнения запроса разрешить его должны оба механизма.
# Allow only specific IP range to call the API
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': '*',
'Action': 'execute-api:Invoke',
'Resource': 'arn:aws:execute-api:us-east-1:123456789012:abc123/*',
'Condition': {'IpAddress': {'aws:SourceIp': '203.0.113.0/24'}}
}]
}Взаимная аутентификация TLS
Взаимный TLS (mTLS) требует, чтобы и клиент, и сервер предъявляли сертификаты во время рукопожатия TLS. API Gateway поддерживает mTLS для REST API и HTTP API при настроенных пользовательских доменных именах. Клиенты должны предъявлять действительный сертификат, подписанный центром сертификации (CA), который вы загрузили в хранилище доверенных сертификатов в S3. mTLS используется в финансовых сервисах, для аутентификации устройств IoT и в интеграциях B2B, где требуется надёжная проверка личности клиента, дополняющая авторизацию на основе токенов.
Выбор подходящего типа авторизатора
Выбор авторизатора для экзамена SAA-C03: IAM (SigV4) → вызовы между сервисами AWS в одном аккаунте или между аккаунтами; пул пользователей Cognito → пользователи веб- и мобильных приложений, аутентифицированные через Cognito; авторизатор Lambda → пользовательская логика авторизации (сторонние поставщики удостоверений, устаревшие форматы токенов, интроспекция OAuth, сочетание IP и токена); авторизатор JWT (HTTP API) → токены OIDC/OAuth2 с любым соответствующим стандартам поставщиком при меньшей стоимости по сравнению с авторизаторами Lambda. Без авторизатора → общедоступный API.
Быстрая проверка
Проверьте своё понимание концепций AWS Solutions Architect (SAA-C03) из этого урока.
Итоги урока
В этом уроке вы узнали следующее: авторизация IAM (SigV4) предназначена для вызовов между сервисами с использованием учётных данных AWS; авторизаторы пулов пользователей Cognito встроенными средствами проверяют JWT, выданные Cognito, для веб- и мобильных приложений; авторизаторы Lambda реализуют пользовательскую проверку токенов сторонних поставщиков удостоверений или сложную логику авторизации с дополнительным кэшированием результатов. Далее мы рассмотрим ограничение скорости, кэширование и планы использования в API Gateway.
Часто задаваемые вопросы
Урок «Авторизация: IAM, авторизаторы Lambda и Cognito» бесплатный?
Да — полный текст урока «Авторизация: IAM, авторизаторы Lambda и Cognito» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.
Чему я научусь в уроке «Авторизация: IAM, авторизаторы Lambda и Cognito»?
Защитите конечные точки API с помощью подписей IAM SigV4, пользовательских авторизаторов Lambda или авторизаторов пулов пользователей Amazon Cognito. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AWS Solutions Architect?
Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Авторизация: IAM, авторизаторы Lambda и Cognito»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AWS Solutions Architect?
Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- REST API, HTTP API и WebSocket API
- Интеграции: Lambda, HTTP и имитация
- Авторизация: IAM, авторизаторы Lambda и Cognito
- Ограничение частоты, кэширование и планы использования