[LINUX] Instance Metadata Service Version 2 (IMDSv2): Einstellung und Verhaltensprüfung von Instance Metadata Service v2

Instance Metadata Service Version 2 (IMDSv2): Arbeitsnotiz zum Einstellen und Bestätigen des Verhaltens von Instance Metadata Service v2

Inhalt dieses Artikels

  1. Was sind Instanzmetadaten?
  2. Gründe für die Verwendung von Instance Metadata Service Version 2
  3. Vorbereitung der AWS-CLI-Ausführungsumgebung
  4. IMDSv2-obligatorische Einstellung der vorhandenen Instanz
  5. Überprüfen Sie das Verhalten, wenn IMDSv2 zwangsweise eingestellt ist

1. Was sind Instanzmetadaten?

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-metadata.html

Instanzmetadaten sind Daten zu einer Instanz und werden zum Konfigurieren oder Verwalten einer laufenden Instanz verwendet. Instanzmetadaten sind in Kategorien wie Hostname, Ereignis und Sicherheitsgruppe unterteilt.

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html

Sie können von einer laufenden Instanz aus mit einer der folgenden Methoden auf die Instanzmetadaten zugreifen:

--Instance Metadata Service Version 1 (IMDSv1) - Anforderungs- / Antwortmethode --Instance Metadata Service Version 2 (IMDSv2) - Sitzungsorientierte Methode

Funktionsweise von Instance Metadata Service Version 2

IMDSv2 verwendet sitzungsorientierte Anforderungen. Verwenden Sie sitzungsorientierte Anforderungen, um Sitzungstoken zu erstellen, die die Sitzungsdauer definieren (1 Sekunde bis 6 Stunden). Sie können dasselbe Sitzungstoken für nachfolgende Anforderungen während des angegebenen Zeitraums verwenden. Nach Ablauf des angegebenen Zeitraums müssen Sie ein neues Sitzungstoken erstellen, das für zukünftige Anforderungen verwendet werden soll.

2. Gründe für die Verwendung von Instance Metadata Service Version 2

Am 29. Juli 2019 wurden aufgrund des unbefugten Zugriffs bei Capital One, einem großen US-Finanzunternehmen, personenbezogene Daten von mehr als 100 Millionen Menschen durchgesickert.

Information on the Capital One Cyber Incident https://www.capitalone.com/facts2019/

Die Ursachen für Informationslecks sind wie folgt

Andererseits benötigt IMDSv2 ein im Voraus erhaltenes Token, um auf die Metadaten zugreifen zu können. Die Verwendung von IMDSv2 und die Vorteile in Bezug auf die Sicherheit sind wie folgt.

Wie benutzt man

--Erstellen Sie mithilfe einer PUT-Anforderung ein 6-Stunden-Sitzungstoken (21.600 Sekunden)

verdienen

3. Vorbereitung der AWS-CLI-Ausführungsumgebung

Bereiten Sie eine Instanz (cli_instance) für die AWS-CLI-Ausführung vor, um einen Befehl zum Erstellen / Konfigurieren von Instanzen auszugeben

cli_Instanzumgebung(AWS-Informationen zur CLI-Publisher-Umgebung)


[root@ip-10-0-0-74 ~]# cat /etc/system-release
Amazon Linux release 2 (Karoo)
[root@ip-10-0-0-74 ~]# 
[root@ip-10-0-0-74 ~]# uname -a
Linux ip-10-0-0-74.ap-northeast-1.compute.internal 4.14.193-149.317.amzn2.x86_64 #1 SMP Thu Sep 3 19:04:44 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@ip-10-0-0-74 ~]# 
[root@ip-10-0-0-74 ~]# aws --version 
aws-cli/1.18.107 Python/2.7.18 Linux/4.14.193-149.317.amzn2.x86_64 botocore/1.17.31
[root@ip-10-0-0-74 ~]# 
[root@ip-10-0-0-74 ~]# curl http://169.254.169.254/latest/meta-data/instance-type/
t3.small
[root@ip-10-0-0-74 ~]# 

Erstellen Sie die IMDSv2-Operationsprüfinstanz "test_instance".

cli_Instanzumgebung(run-Instanzenausführung)


[root@ip-10-0-0-74 ~]# aws ec2 run-instances \
> --image-id ami-0ce107ae7af2e92b5 \
> --instance-type t2.nano \
> --key-name key_file \
> --monitoring Enabled=false \
> --placement AvailabilityZone=ap-northeast-1a \
> --subnet-id subnet-03d74b8d6ab6c39f2 \
> --associate-public-ip-address \
> --security-group-ids sg-0a00ecb871bb15fb3 \
> --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=test_instance}]'

Konstruierte Instanz (test_instance) Überprüfen Sie die Standardeinstellungen für Instanzmetadaten

cli_Instanzumgebung(describe-Instanzenausführung)


[root@ip-10-0-0-74 ~]# aws ec2 describe-instances \
> --filters "Name=tag:Name,Values=test_instance" \
> --query Reservations[*].Instances[*].[MetadataOptions]
[
    [
        [
            {
                "State": "applied", 
                "HttpEndpoint": "enabled", 
                "HttpTokens": "optional", 
                "HttpPutResponseHopLimit": 1
            }
        ]
    ]
]
[root@ip-10-0-0-74 ~]# 

"HttpTokens": "optional" -> IMDSv1 / IMDSv2 sind beide verfügbar `` HttpTokens ":" erforderlich "-> nur IMDSv2 verfügbar (IMDSv2-Durchsetzung)`

"HttpTokens": Verhaltensprüfung im Status "optional" (sowohl IMDSv1 als auch IMDSv2 können verwendet werden)

"Das Folgende wird in der neu erstellten" test_instance "-Umgebung ausgeführt

test_Instanzumgebung (IMDSv1-Ausführung)


[root@ip-10-0-0-68 ~]# curl http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
identity-credentials/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
[root@ip-10-0-0-68 ~]# 

test_Instanzumgebung (IMDSv2-Ausführung)


[root@ip-10-0-0-68 ~]# 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/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    56  100    56    0     0   9333      0 --:--:-- --:--:-- --:--:-- 11200
*   Trying 169.254.169.254...
* 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.61.1
> Accept: */*
> X-aws-ec2-metadata-token: AQAAAO6n081baEIWdrfpILhc9Egt4kTm0HSpUftcYqvJSR-NKewL6A==
> 
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Accept-Ranges: bytes
< Content-Length: 313
< Content-Type: text/plain
< Date: Sat, 26 Sep 2020 14:45:29 GMT
< Last-Modified: Sat, 26 Sep 2020 14:28:58 GMT
< X-Aws-Ec2-Metadata-Token-Ttl-Seconds: 21600
< Connection: close
< Server: EC2ws
< 
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
identity-credentials/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
* Closing connection 0
services/
[root@ip-10-0-0-68 ~]#

4. IMDS v2 obligatorische Einstellung der vorhandenen Instanz

"Folgendes wird in der AWS-CLI-Ausführungsumgebung" cli_instance "ausgeführt."

cli_Instanzumgebung


[root@ip-10-0-0-74 ~]# # test_Instanz-ID der Instanz abrufen
[root@ip-10-0-0-74 ~]# aws ec2 describe-instances \
> --filters "Name=tag:Name,Values=test_instance" \
> --query Reservations[*].Instances[*].[InstanceId]
[
    [
        [
            "i-034109c70aaa4b055"
        ]
    ]
]
[root@ip-10-0-0-74 ~]# 
[root@ip-10-0-0-74 ~]# #Ausführung der erzwungenen IMDSv2-Einstellung("HttpTokens": "required")
[root@ip-10-0-0-74 ~]# aws ec2 modify-instance-metadata-options \
> --instance-id i-034109c70aaa4b055 \
> --http-tokens required \
> --http-put-response-hop-limit 1 \
> --http-endpoint enabled
{
    "InstanceId": "i-034109c70aaa4b055", 
    "InstanceMetadataOptions": {
        "State": "pending", 
        "HttpEndpoint": "enabled", 
        "HttpTokens": "required", 
        "HttpPutResponseHopLimit": 1
    }
}
[root@ip-10-0-0-74 ~]#

5. Verhaltensprüfung zum Zeitpunkt der erzwungenen IMDSv2-Einstellung

"HttpTokens": Verhaltensprüfung im Status "Erforderlich" (nur IMDSv2 verfügbar (IMDSv2 erzwungen))

"Das Folgende wird in der neu erstellten" test_instance "-Umgebung ausgeführt

test_Instanzumgebung (IMDSv1-Ausführung)


[root@ip-10-0-0-68 ~]# curl http://169.254.169.254/latest/meta-data/
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>401 - Unauthorized</title>
 </head>
 <body>
  <h1>401 - Unauthorized</h1>
 </body>
</html>
[root@ip-10-0-0-68 ~]#

"IMDSv2 wird erzwungen, daher kann es nicht mit der IMDSv1-Methode abgerufen werden"

test_Instanzumgebung (IMDSv2-Ausführung)


[root@ip-10-0-0-68 ~]# 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/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    56  100    56    0     0   9333      0 --:--:-- --:--:-- --:--:-- 11200
*   Trying 169.254.169.254...
* 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.61.1
> Accept: */*
> X-aws-ec2-metadata-token: AQAAAO6n081aj7u-yzdFHoD8zll2ZKiNfVS79OXp1qJDwgzw7-96gA==
> 
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Accept-Ranges: bytes
< Content-Length: 313
< Content-Type: text/plain
< Date: Sat, 26 Sep 2020 15:01:45 GMT
< Last-Modified: Sat, 26 Sep 2020 14:28:58 GMT
< X-Aws-Ec2-Metadata-Token-Ttl-Seconds: 21600
< Connection: close
< Server: EC2ws
< 
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
identity-credentials/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
* Closing connection 0
services/
[root@ip-10-0-0-68 ~]#

Recommended Posts

Instance Metadata Service Version 2 (IMDSv2): Einstellung und Verhaltensprüfung von Instance Metadata Service v2
Überprüfen Sie den Linux-Verteilungstyp und die Version
Befehle und Dateien zum Überprüfen der Version von CentOS Linux
Überprüfen Sie die OpenSSL-Version von Python 2.6