Skip to content

Instantly share code, notes, and snippets.

@seanjensengrey
Last active May 10, 2021 16:02
Show Gist options
  • Save seanjensengrey/1ab4f6edb375ee7a698ef2968a97aa0c to your computer and use it in GitHub Desktop.
Save seanjensengrey/1ab4f6edb375ee7a698ef2968a97aa0c to your computer and use it in GitHub Desktop.

Revisions

  1. seanjensengrey revised this gist May 10, 2021. 1 changed file with 26 additions and 0 deletions.
    26 changes: 26 additions & 0 deletions whichcloud.md
    Original file line number Diff line number Diff line change
    @@ -5,6 +5,32 @@ Both AWS and GCP, probably Azure as well, offer the ability to query instance le

    Both cloud use the same IP address (`169.254.169.254`) internally to handle the request.

    tl;dr, do a get request against the metadata url and look at the response headers.

    ```
    curl -vv 169.254.169.254
    * Expire in 0 ms for 6 (transfer 0x5557b4810fb0)
    * Trying 169.254.169.254...
    * TCP_NODELAY set
    * Expire in 200 ms for 4 (transfer 0x5557b4810fb0)
    * Connected to 169.254.169.254 (169.254.169.254) port 80 (#0)
    > GET / HTTP/1.1
    > Host: 169.254.169.254
    > User-Agent: curl/7.64.0
    > Accept: */*
    >
    * HTTP 1.0, assume close after body
    < HTTP/1.0 200 OK
    < Server: BaseHTTP/0.3 Python/2.7.13
    < Date: Mon, 10 May 2021 16:01:58 GMT
    < Content-Type: application/text
    < Metadata-Flavor: Google
    <
    0.1/
    computeMetadata/
    * Closing connection 0
    ```

    ```
    $ dig metadata.google.internal
  2. seanjensengrey revised this gist May 10, 2021. 1 changed file with 27 additions and 0 deletions.
    27 changes: 27 additions & 0 deletions whichcloud.md
    Original file line number Diff line number Diff line change
    @@ -3,6 +3,31 @@

    Both AWS and GCP, probably Azure as well, offer the ability to query instance level metadata from within the guest (and container)

    Both cloud use the same IP address (`169.254.169.254`) internally to handle the request.

    ```
    $ dig metadata.google.internal
    ; <<>> DiG 9.11.5-P4-5.1+deb10u5-Debian <<>> metadata.google.internal
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39546
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 512
    ;; QUESTION SECTION:
    ;metadata.google.internal. IN A
    ;; ANSWER SECTION:
    metadata.google.internal. 3600 IN A 169.254.169.254
    ;; Query time: 0 msec
    ;; SERVER: 169.254.169.254#53(169.254.169.254)
    ;; WHEN: Mon May 10 15:59:56 UTC 2021
    ;; MSG SIZE rcvd: 69
    ```

    # GCP

    https://cloud.google.com/compute/docs/storing-retrieving-metadata#querying
    @@ -48,6 +73,8 @@ zone

    on AWS, https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html

    Below is an example of querying the *AWS Url* on GCP. The

    ```
    root@5f9f3662a783:/# curl -vv http://169.254.169.254/latest/meta-data/
    * Trying 169.254.169.254:80...
  3. seanjensengrey renamed this gist May 10, 2021. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  4. seanjensengrey created this gist May 10, 2021.
    81 changes: 81 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,81 @@

    # Instance level metadata urls

    Both AWS and GCP, probably Azure as well, offer the ability to query instance level metadata from within the guest (and container)

    # GCP

    https://cloud.google.com/compute/docs/storing-retrieving-metadata#querying

    `curl "http://metadata.google.internal/computeMetadata/v1/instance"`

    ```
    root@5f9f3662a783:/# curl -vv "http://metadata.google.internal/computeMetadata/v1/instance"
    * Trying 169.254.169.254:80...
    * TCP_NODELAY set
    * Connected to metadata.google.internal (169.254.169.254) port 80 (#0)
    > GET /computeMetadata/v1/instance HTTP/1.1
    > Host: metadata.google.internal
    > User-Agent: curl/7.68.0
    > Accept: */*
    >
    * Mark bundle as not supporting multiuse
    * HTTP 1.0, assume close after body
    < HTTP/1.0 200 OK
    < Server: BaseHTTP/0.3 Python/2.7.13
    < Date: Mon, 10 May 2021 15:55:56 GMT
    < Content-Type: application/text
    < Metadata-Flavor: Google
    <
    attributes/
    cpu-platform
    description
    disks/
    guest-attributes/
    hostname
    id
    image
    legacy-endpoint-access/
    licenses/machine-typemaintenance-eventnamenetwork-interfaces/preemptedremaining-cpu-timescheduling/
    service-accounts/
    tags
    virtual-clock/
    zone
    * Closing connection 0
    ```

    # AWS

    on AWS, https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html

    ```
    root@5f9f3662a783:/# curl -vv http://169.254.169.254/latest/meta-data/
    * Trying 169.254.169.254:80...
    * TCP_NODELAY set
    * Connected to 169.254.169.254 (169.254.169.254) port 80 (#0)
    > GET /latest/meta-data/ HTTP/1.1
    > Host: 169.254.169.254
    > User-Agent: curl/7.68.0
    > Accept: */*
    >
    * Mark bundle as not supporting multiuse
    * HTTP 1.0, assume close after body
    < HTTP/1.0 404 Not Found
    < Server: BaseHTTP/0.3 Python/2.7.13
    < Date: Mon, 10 May 2021 15:53:25 GMT
    < Content-Type: text/html; charset=UTF-8
    < Metadata-Flavor: Google
    <
    <!DOCTYPE html>
    <html lang=en>
    <meta charset=utf-8>
    <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
    <title>Error 404 (Not Found)!!1</title>
    <style>
    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
    </style>
    <a href=//www.google.com/><span id=logo aria-label=Google></span></a>
    <p><b>404.</b> <ins>That’s an error.</ins>
    <p>The requested URL <code>/latest/meta-data/</code> was not found on this server. <ins>That’s all we know.</ins>
    * Closing connection 0
    ```