0Pricing
AWS Solutions Architect · Урок

Авторизация: 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 — локальная установка не требуется.

Все уроки этого курса

  1. REST API, HTTP API и WebSocket API
  2. Интеграции: Lambda, HTTP и имитация
  3. Авторизация: IAM, авторизаторы Lambda и Cognito
  4. Ограничение частоты, кэширование и планы использования
← Назад к AWS Solutions Architect