Как предотвратить / межсетевые вызовы к API метаданных экземпляра AWS EC2?

14

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/.

Тристан
источник

Ответы:

25

Брандмауэр выключен.

iptables -A OUTPUT -m owner ! --uid-owner root -d 169.254.169.254 -j DROP

Это правило запрещает любому пользователю, кроме пользователя root, открывать подключения к 169.254.169.254.

Майкл Хэмптон
источник
Не помешает ли это «нормальному» использованию этой услуги. Обычно сервис вызывается пользователем / obo пользователем EC2, который почти никогда не является пользователем root.
Сам-Т
@ Sam-T Если вам нужен ec2-пользователь для доступа к нему, вы, конечно же, можете написать правило, разрешающее это.
Майкл Хэмптон
Если вы запретите на уровне брандмауэра - разрешить только root, не знаете, как бы вы включили его для пользователя EC2 (я просто не знаю). Под пользователем EC2 - я имею в виду, кто бы ни запускал экземпляр, я понимаю, что метаданные доступны этому (и любому другому) пользователю EC2 в экземпляре. Не могли бы вы привести пример
Sam-T