Вопрос или проблема
У меня есть API-сервис, который в настоящее время использует обычные хранимые секреты в качестве метода аутентификации, работающий в AWS. Сейчас у меня есть требование обеспечить аутентификацию автоматических запросов. Я бы предпочел не использовать хранимый секрет на стороне клиента для поддержки этого. Я полагаю, что у AWS есть механизм для идентификации машины (подтверждение источника EC2 instance достаточно для моих целей) с использованием подписанных документов. Но как создать такой документ на клиенте? Как его проверить на сервере?
Я думаю, что мне, возможно, нужен AWS Security Token Service – но трудно найти соответствующую документацию.
Авторизация реализована внутри API – поэтому мне нужно проверить личность вызывающей стороны, прежде чем API сможет авторизовать запрос.
(клиент в настоящее время является shell-скриптом, в то время как aws-cli, openssl и python доступны).
.
Ответ или решение
Для автоматизации аутентификации запросов в AWS без использования хранимых секретов на стороне клиента, вы можете воспользоваться механизмом, включающим подписанные документы от AWS. Ваша текущая задача заключается в реализации аутентификации для автоматизированных систем, где EC2-инстансы будут выполнять роль клиентов.
Подробное руководство по аутентификации автоматизированных запросов в AWS:
Шаг 1: Создание документа аутентификации на стороне клиента
Для создания документа, удостоверяющего личность EC2-инстанса, вы можете использовать сервис AWS Instance Identity Document (IID). AWS предоставляет возможность инстансам EC2 запрашивать и подписывать документы через HTTP-запросы к локальному эндпоинту мета-данных инстанса.
Действия:
-
Запросите Instance Identity Document (IID):
Используйте команду curl или аналогичный инструмент в вашем скрипте для запроса документа удостоверения инстанса:curl http://169.254.169.254/latest/dynamic/instance-identity/document
-
Получите и подпишите документ:
Этот документ можно подписать с помощью OpenSSL, чтобы убедиться в его подлинности или воспользоваться встроенными функциями EC2 для получения подписи.
Шаг 2: Проверка документа на стороне сервера
После того как документ будет получен и подписан, необходимо настроить сервер API для подтверждения подлинности источника запроса на основании полученного документа.
Действия:
-
Использование AWS SDK или CLI для проверки:
На стороне сервера установите библиотеку AWS SDK для выбранного вами языка (например, Python, если вы используете Boto3) или используйте AWS CLI для верификации. -
Верификация Instance Identity Document:
На серверной стороне выполните валидацию подписи документа с помощью сертификатов AWS, чтобы подтвердить подлинность и происхождение EC2-инстанса. -
Интеграция с системой авторизации:
После верификации документа интегрируйте информацию с системой авторизации API, чтобы разрешить или отказать в доступе к ресурсам.
Заключение
Использование AWS Instance Identity Documents предоставляет надежный способ удостоверения личности EC2-инстанса без применения хранимых секретов на стороне клиента. Применение этой стратегии позволит вам повысить уровень безопасности автоматизированных запросов и интегрировать данные аутентификации с текущей системой авторизации.
Эти шаги обеспечат безопасность вашего API и устранение зависимостей от хранимых секретов, а также облегчат дальнейшее масштабирование и управление инфраструктурой.