Przejdź do treści

Informacje o ec2 z ec2 – IMDS vs IMDSv2

imds vs imdsv2 2023 aws

W tym artykule dowiesz się jak uzyskać instance_ID ami_ID i inne informacje o EC2 z ec2. Pokażę ci dwa sposoby, jak to zrobić. Opowiem Ci o najlepszych praktykach i udzielę dobrych rad. Jest to niezwykle pomocne przy tworzeniu skryptu lub automatyzacji. Dowiesz się, jakie są różnice pomiędzy IMDS i IMDSv2.

How to get information about ec2 from ec2 (IMDS) Best Practices & Practical demo tutorial 2023

IMDSv1

Czasami pracując na wirtualnej maszynie ec2, chciałbyś szybko sprawdzić instance_ID lub inne parametry. Można to zrobić na kilka sposobów. Najpierw powiem ci o Instance Metadata Services, czyli o IMDS i starym sposobie.

Tak więc w AWS Instance Metadata Service (IMDS) umożliwia dostęp do danych o Twojej instancji ec2, których możesz użyć do skonfigurowania działającej instancji lub zarządzania nią.

AWS ec2 IMDS - instance metadata service

Metadane instancji są dostępne w wielu kategoriach, na przykład nazwa hosta, sieć, ami-id itd. jeśli chcesz odczytać identyfikator instancji, możesz użyć tego polecenia

curl http://169.254.169.254/latest/meta-data/instance-id

Lub

wget -q -O - http://169.254.169.254/latest/meta-data/instance-id

Adres 169.254.169.254 jest adresem specjalnym w AWS. Używając go na ec2, odnosisz się do maszyny, na której aktualnie jesteś zalogowany. To ważny adres, więc dobra rada ode mnie lepiej zapamiętaj ten adres IP lub gdzieś go zapisz. Jest to szczególnie przydatne podczas tworzenia skryptów i automatyzacji. Oczywiście, jeśli używasz ipv6, możesz użyć tego fd00:ec2::254 http://[fd00:ec2::254]/latest/meta-data/.

Aby uniknąć ciągłego aktualizowania skryptu, najlepiej jest użyć latest(tak jak w powyższych przykładach), a nie numeru wersji.

IMDSv2

Jest lepszy i bezpieczniejszy sposób na odczytanie tych informacji. Jest nim nowy IMDS o nazwie IMDSv2. IMDSv2 używa żądań zorientowanych na sesję. Zgodnie z dokumentacją każde żądanie jest teraz chronione przez uwierzytelnianie sesji.

Możesz uruchomić sesję za pomocą prostego żądania HTTP PUT do IMDSv2. Po tym IMDSv2 zwraca ci tajny token i możesz użyć tokena jako hasła do wysyłania żądań do IMDSv2 w celu uzyskania metadanych i poświadczeń.

Ważne informacje dotyczące IMDSv2:

  • Nie ma praktycznego limitu liczby tokenów.
  • Nie ma ograniczeń co do liczby sesji.
  • Nowa wersja nadal jest ograniczona przez normalne połączenie IMDS i limity ograniczania przepustowości.
  • Sesje mogą trwać do sześciu godzin czyli 21600 sekund
  • Token sesji może być użyty tylko bezpośrednio z instancji EC2, w której rozpoczęła się ta sesja.

Przejdźmy do konkretów, najpierw wygeneruj token za pomocą następującego polecenia:

TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`


Jak widać żądanie musi zawierać nagłówek określający czas życia (TTL) dla tokena w sekundach, jak już pisałem maksymalnie do sześciu godzin.

Następnie użyj tokenu, na przykład za pomocą następującego polecenia:

curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/

Możesz uzyskać na przykład instance_id, używając tego polecenia:

TOKEN=curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/instance-id/

Możesz uzyskać informacje o podsieci za pomocą:

TOKEN=curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/network/interfaces/macs
TOKEN=curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
AWS ec2 IMDSv2 - instance metadata service

Oczywiście możesz odczytać dużo węcej informacji:

ec2 imdsv2 2023- devops

Instance Identity Document

Mogę ci powiedzieć także, że każda uruchamiana instancja ec2 ma dokument tożsamości instancji (instance identity document), który zawiera informacje o samej instancji.

Możesz użyć instance identity document(po angielsku lepiej to brzmi), aby sprawdzić poprawność atrybutów ec2. Instance identity document jest udostępniany w formacie JSON w postaci zwykłego tekstu za pośrednictwem usługi Instance Metadata Service (IMDS).
Instance identity document jest generowany, gdy ec2 jest zatrzymywane i uruchamiane lub restartowane.


wget -q -O - http://169.254.169.254/latest/dynamic/instance-identity/document
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/dynamic/instance-identity/document

aws instance identity document 2023

Tak na marginesie, to możesz również znaleźć instance_id zapisany w pliku na swoim ec2 w lokalizacji /var/lib/cloud/data/instance-id.

clou-utils

Coś ekstra. Nie wiem, czy wiesz, ale jeśli chcesz uzyskać informacje o swoim ec2, to możesz także zainstalować cloud-utils.

sudo apt-get install cloud-utils

Pozwala to łatwo odczytać informacje o ec2, takie jak instance_id, jak w poprzednim przykładzie:

ec2metadata --instance-id

Oczywiście możesz przeczytać znacznie więcej informacji, spróbuj użyć:

ec2metadata -h
cloud_utils 2023 aws ec2

user data

Bardzo interesujące jest również user data. Jest to zestaw poleceń, które można przekazać instancji podczas uruchamiania. Po uruchomieniu ec2, instancja wykonuje polecenia zawarte w user data z uprawnieniami roota.

Każda instancja ma dostęp do user data używając na przykład polecenia:

curl http://169.254.169.254/latest/user-data

Niestety wiele osób podaje tam dane wrażliwe i czasami możemy znaleźć tutaj loginy i hasła. Proszę, Ty tego nie rób.

Podsumowanie

Mam nadzieję, że już wiesz, jaka jest różnica pomiędzy IMDS i IMDSv2 oraz dlaczego warto używać IMDSv2. Jeszcze jedna rada na koniec, jeśli chcesz, to możesz zablokować możliwość używania IMDSv1 i wymusić używanie IMDSv2. Jak to zrobić dowiesz się z mojego filmu How to get information about ec2 from ec2 (IMDS) Best Practices & Practical demo tutorial 2023.

7 sposobów na usunięcie danych z S3
API Gateway i Lambda – jak dodać API_KEY | bezpieczeństwo

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *