Авторизация запросов в момент исполнения

Хабр — образец авторизации "как не надо".

Мой первый в жизни комментарий на Хабре был отклонён в момент, когда я написал ответ, вычитал его и нажал "отправить".

По-хорошему, форма комментов должна быть выключена с надписью "вы можете оставлять комментарии только к новым постам" со ссылкой на доки, которые объясняют, что такое "новый пост".

Дизаппоинтед. Больше не хочу там писать комментарии.

На самом деле этой же проблемой страдают облачные провайдеры.

В AWS по умолчанию тебе доступны все действия в интерфейсе. Ты узнаёшь можно ли их совершить только нажав на кнопку.

Например, ты можешь заполнить огромную форму создания инстанса EC2, которая в самый последний момент ругнётся, что у тебя нет полномочий для создания инстансов...

Почему так?

Сервисы (например, EC2) не владеют информацией о политиках доступа из IAM (Identity & Access Management). Так как они выполняют действия от лица пользователя, у которого может не быть доступа к IAM (а у большинства пользователей крупных аккаунтов его нет), то они узнают о правах доступа только в момент исполнения операции, когда происходит авторизация.

Всё ещё сложнее, когда сервис создает сразу несколько ресурсов (например, Elastic Beanstalk создаёт инстанс, базу данных и сторадж). Тогда какие-то операции могут быть успешными, а какие-то — нет. И у нас получается система в сломанном состоянии. Нужно или продумывать интерфейс, чтобы пользователь мог это пофиксить, либо удалять созданные ресурсы. И то, и другое — лишняя работа для разработки.

Чтобы узнать есть ли права на исполнение действия заранее, нужно, чтобы IAM поддерживал режим симуляции (т.н. dry run), когда мы делаем валидацию операции без её исполнения.

По идее это нужно было зашить в IAM заранее, но не зашили.

Альтернативное решение - получить доступ к политике IAM и сделать “статический анализ” (static analysis), то есть проанализировать её содержимое и решить есть ли доступ. Но для этого а) сервису нужно постоянно обновлять своё понимание IAM, это создает сложные зависимости, б) нужно пожертвовать безопасностью, так как к политикам могут получить доступ плохие дяди и тёти.

Всё это сложно, поэтому уже 20 пользователи регулярно наступают на грабли.