2015-06-18 16 views

Odpowiedz

4

Per na metadata docs:

można łatwo wykryć, czy aplikacje lub skrypty są uruchomione w przypadku Compute Engine przy użyciu serwera metadanych. Po wysłaniu żądania do serwera każda odpowiedź z serwera metadanych będzie zawierać nagłówek Metadata-Flavor: Google. Możesz szukać tego nagłówka, aby niezawodnie wykryć, czy używasz Compute Engine.

Na przykład następujące żądanie zwijania zwraca nagłówek Metadata-Flavor: Google, wskazując, że żądanie jest wykonywane z poziomu instancji Compute Engine.

[email protected]:~$ curl metadata.google.internal -i 
HTTP/1.1 200 OK 
Metadata-Flavor: Google 
Content-Type: application/text 
Date: Thu, 10 Apr 2014 19:24:27 GMT 
Server: Metadata Server for VM 
Content-Length: 22 
X-XSS-Protection: 1; mode=block 
X-Frame-Options: SAMEORIGIN 

0.1/ 
computeMetadata/ 
2

Można także wykonać wyszukiwanie DNS dla serwera metadanych, zamiast faktycznie nazywając ją.

Na przykład, robi dig +short metadata.google.internalwewnątrz instancji Google Compute byłoby wyjście coś takiego:

[[email protected]]# dig +short metadata.google.internal 
169.254.169.254 

Jeśli jednak zrobisz to samo polecenie (dig +short metadata.google.internal) wewnątrz standardowego serwera, poza Google Cloud , możesz uzyskać pustą odpowiedź.

więc sprawdzić, wszystko co trzeba zrobić (w bash na przykład) to:

GMETADATA_ADDR=`dig +short metadata.google.internal` 
if [[ "${GMETADATA_ADDR}" == "" ]]; then 
    echo "I am NOT in a Google VM!" 
else 
    echo "I AM INSIDE a Google VM! Whoohoo!" 
fi