Каждый экземпляр EC2 имеет Instance Identity Document, который содержит информацию о экземпляре, включая его идентификатор экземпляра, место размещения и т. Д. Этот документ подписан AWS, чтобы вы могли проверить его с помощью открытого ключа.
Он включает в себя идентификатор AMI и даже, как представляется, предоставляет ваш product id, хотя из документации не ясно, относится ли это "billingProducts"
к этому или к чему-то еще.
Это не совсем безупречно, по целому ряду причин, включая тот факт, что вам обязательно нужно встроить открытый ключ в свой код, чтобы проверить подпись, и если у меня есть копия вашего кода - и я достаточно определен, - тогда я мог бы перезаписать эту часть своим собственным ключом, а затем подделать документ идентификации ... но тогда, когда вы разрешаете мне доступ к копии вашего кода, вы всегда принимаете тот же риск. Это не является неотъемлемым ограничением в том, что предоставил AWS, а скорее проблемой, заключающейся в том, что ничто, что работает на моем сервере, невосприимчиво к моему подделке ... но кажется достаточным, чтобы честные честные люди были честными, и я бы предположил, что ничего сверх это возможно.
Если вы знакомы с метаданными экземпляра EC2 в целом, вы, несомненно, узнаете http://169.254.169.254/
. Если нет: это специальный (локальный) адрес, который предоставляет конечную точку для службы метаданных EC2. Это странно выглядящий адрес, но каждый экземпляр EC2 видит свое собственное представление при доступе к этой конечной точке. IP-адрес не изменяется между экземплярами, зонами доступности, регионами, учетными записями и т. Д., А служба предоставляется инфраструктурой EC2, а не тем, что работает на самом экземпляре.
Владелец экземпляра is not billed for http requests to this endpoint, поэтому ваш код может проверять его так часто, как кажется разумным.