Instance Metadata Service Version 2 (IMDSv2): Arbeitsnotiz zum Einstellen und Bestätigen des Verhaltens von Instance Metadata Service v2
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.
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.
--Erstellen Sie mithilfe einer PUT-Anforderung ein 6-Stunden-Sitzungstoken (21.600 Sekunden)
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)`
"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 ~]#
"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 ~]#
"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