В API метаданных экземпляров AWS EC2 предоставляет множество полезных функций. Любой человек в реальном экземпляре EC2 может позвонить в http://169.254.169.254/
и просмотреть метаданные для экземпляра, из которого был сделан вызов. Безопасность API такова, что он проверяет только то, что вызов исходит от экземпляра. Поэтому, если я разрешаю кому-то запускать код на моем экземпляре, я хотел бы знать, как лучше всего заблокировать доступ к этому конкретному URL-адресу, сохранив при этом доступ сам.
В качестве основного момента я был удивлен, обнаружив, что к API метаданных также можно получить доступ через http://instance-data/
(которую я где-то случайно нашел).
Я могу проверить URL-адреса, вызываемые всем кодом, запущенным в этом экземпляре, но я предполагаю, что это не лучший подход, учитывая адреса IPv6 (возможно) или некоторые странные кодировки URI, которые будут преобразованы в IP-адрес метаданных (169.254 .169.254) или некоторые недокументированные (кажется) URL-адреса, например http://instance-data/
.
Брандмауэр выключен.
iptables -A OUTPUT -m owner ! --uid-owner root -d 169.254.169.254 -j DROP
Это правило запрещает любому пользователю, кроме пользователя root, открывать соединения с 169.254.169.254.