Вибір авторизатора API Gateway

Використання AWS Security для розробників

Rahul Singh

Technical Product Manager

Перевірка до запуску вашого коду

Виклик проходить через авторизатор API Gateway перед вашим кодом; відхилений виклик отримує 401.

Pass: запит доходить до вашого коду

Fail: 401 Unauthorized, ваш код не запускається

Використання AWS Security для розробників

Хто виконує перевірку

Є три авторизатори
  1. IAM auth (AWS_IAM): AWS перевіряє підпис

Вертикальний стек уздовж осі від «AWS перевіряє» до «ви перевіряєте». Заповнена лише перша картка: IAM auth, де AWS перевіряє підпис.

Використання AWS Security для розробників

Хто виконує перевірку

Є три авторизатори
  1. IAM auth (AWS_IAM): AWS перевіряє підпис
  2. Cognito authorizer (COGNITO_USER_POOLS): AWS верифікує токен
    • Підпис, iss, aud, exp

Той самий вертикальний стек із двома заповненими картками: IAM auth, де AWS перевіряє підпис, і Cognito authorizer, де AWS верифікує токен.

Використання AWS Security для розробників

Хто виконує перевірку

Є три авторизатори
  1. IAM auth (AWS_IAM): AWS перевіряє підпис
  2. Cognito authorizer (COGNITO_USER_POOLS): AWS верифікує токен
    • Підпис, iss, aud, exp
  3. Lambda authorizer: ваша функція повертає allow/deny
    • Для токенів поза Cognito

Три авторизатори від «AWS перевіряє» до «ви перевіряєте»: IAM auth із перевіркою підпису AWS, Cognito authorizer з верифікацією токена AWS, і Lambda authorizer, де ви пишете перевірку.

Використання AWS Security для розробників

Зіставте «двері» з тим, хто викликає

 

Вибирає той, хто викликає

 

  • Внутрішній сервіс: вже має облікові дані AWS

Перший із трьох рядків «хто викликає → авторизатор»: внутрішній сервіс відповідає IAM auth.

Використання AWS Security для розробників

Зіставте «двері» з тим, хто викликає

 

Вибирає той, хто викликає

 

  • Внутрішній сервіс: вже має облікові дані AWS
  • Користувач застосунку: має токен Cognito

Два з трьох рядків «хто викликає → авторизатор»: внутрішній сервіс → IAM auth, користувач застосунку → Cognito authorizer.

Використання AWS Security для розробників

Зіставте «двері» з тим, хто викликає

 

Вибирає той, хто викликає

 

  • Внутрішній сервіс: вже має облікові дані AWS
  • Користувач застосунку: має токен Cognito
  • Партнерський застосунок: має власну логіку авторизації

Три типи викликачів зіставлені з потрібним авторизатором: внутрішній сервіс → IAM auth, користувач застосунку → Cognito authorizer, партнерський застосунок → Lambda authorizer.

Використання AWS Security для розробників

Враховуйте тип API

REST API

  • Усі три авторизатори плюс політики ресурсів
  • Ключі API, ліміти на клієнта, валідація запитів, WAF

Порівняльна картка для REST API з позначками IAM auth, Cognito user pool authorizer, Lambda authorizer і політика ресурсів. Картка HTTP API поруч ще не заповнена.

Використання AWS Security для розробників

Враховуйте тип API

REST API

  • Усі три авторизатори плюс політики ресурсів
  • Ключі API, ліміти на клієнта, валідація запитів, WAF

 

HTTP API

  • JWT authorizer, будь-який видавець OIDC
  • Без політик ресурсів; дешевше й швидше

Дві картки з порівнянням підтримуваних авторизаторів: REST API додає політики ресурсів, тоді як HTTP API змінює Cognito authorizer на JWT authorizer і не має політик ресурсів.

Використання AWS Security для розробників

Авторизатор запам'ятовує

Кешування для економії часу

  • Перший виклик: авторизатор запускається
  • Наступні виклики: читається кешована відповідь

Перший виклик запускає авторизатор і записує allow у кеш із часом життя; пізніший виклик читає allow з кешу без повторного запуску авторизатора.

Використання AWS Security для розробників

Авторизатор запам'ятовує

Кешування для економії часу

  • Перший виклик: авторизатор запускається
  • Наступні виклики: читається кешована відповідь

 

TTL кешу

  • authorizerResultTtlInSeconds: типово 300 с, максимум 3600 с
  • Нуль вимикає кешування

Перший виклик запускає авторизатор і записує allow у кеш із часом життя; пізніший виклик читає allow з кешу без повторного запуску авторизатора.

Використання AWS Security для розробників

Кешований allow може пережити свій дозвіл

Шкала часу з двома доріжками. Дозвіл змінюється з чинного на відкликаний у точці відкликання, а кешований allow нижче все ще діє після цієї точки; цей проміжок заштриховано.

У момент відкликання

  • Дозвіл: відкликано негайно
  • Кешований allow: ще надає доступ
Використання AWS Security для розробників

Кешований allow може пережити свій дозвіл

Та сама шкала часу; вікно між відкликанням і закінченням TTL заштриховано й позначено «ще дозволено»: дозвіл відкликано, але кешований allow дає доступ.

Проміжне вікно

  • Дозвіл зник, кеш про це не знає
  • Доступ триває до завершення TTL
Використання AWS Security для розробників

Кешований allow може пережити свій дозвіл

Та сама шкала часу зі стрілкою через заштриховане вікно: коротший TTL зсуває завершення раніше й зменшує проміжок, коли відкликаний дозвіл ще дає доступ.

Керуйте цим вікном

  • Короткий TTL, коли потрібне швидке відкликання
  • TTL 0 на найчутливіших маршрутах
Використання AWS Security для розробників

Один викликач минає «парадні двері»

Сторонній постачальник у вашому акаунті

  • Приймає роль, яку ви створили
  • Ви передаєте ARN ролі

Постачальник моніторингу між двома клієнтськими боксами зверху та вашою роллю знизу. Ваш бокс передає ARN ролі постачальнику, який приймає вашу роль. Другий клієнтський бокс неактивний (сірий).

Використання AWS Security для розробників

Один викликач минає «парадні двері»

Сторонній постачальник у вашому акаунті

  • Приймає роль, яку ви створили
  • Ви передаєте ARN ролі

ARN ролі — не секрет

Проблема «розгубленого заступника» (confused deputy)

Другий клієнтський бокс тепер активний (червоний) і передає ваш ARN ролі так, ніби це його. Дві стрілки від постачальника моніторингу йдуть до вашої ролі — по одному виклику від кожного клієнта — і їх нічим не відрізнити.

Використання AWS Security для розробників

Один викликач минає «парадні двері»

Сторонній постачальник у вашому акаунті

  • Приймає роль, яку ви створили
  • Ви передаєте ARN ролі

ARN ролі — не секрет

Проблема «розгубленого заступника» (confused deputy)

Виправлення: sts:ExternalId

  • Постачальник генерує його для кожного клієнта
  • Ваша політика довіри вимагає збігу

Ваша роль тепер вимагає, щоб external ID дорівнював 12345. Виклик із 12345 доходить до ролі, а виклик із 99999 зупиняється червоним хрестом до прибуття.

Використання AWS Security для розробників

Давайте потренуємось!

Використання AWS Security для розробників

Preparing Video For Download...