Instance Metadata Service Version 2 (IMDSv2): Mémo de travail pour la configuration et la confirmation du comportement de Instance Metadata Service v2
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
Les métadonnées d'instance sont des données sur une instance et sont utilisées pour configurer ou gérer une instance en cours d'exécution. Les métadonnées d'instance sont divisées en catégories telles que le nom d'hôte, l'événement et le groupe de sécurité.
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html
Vous pouvez accéder aux métadonnées de l'instance à partir d'une instance en cours d'exécution à l'aide de l'une des méthodes suivantes:
--Instance Metadata Service Version 1 (IMDSv1) - Méthode de demande / réponse --Instance Metadata Service Version 2 (IMDSv2) - Méthode orientée session
Fonctionnement du service de métadonnées d'instance version 2
IMDSv2 utilise des requêtes orientées session. Utilisez des requêtes orientées session pour créer des jetons de session qui définissent la durée de la session (1 seconde à 6 heures). Vous pouvez utiliser le même jeton de session pour les demandes suivantes au cours de la période spécifiée. Une fois la période spécifiée expirée, vous devez créer un nouveau jeton de session à utiliser pour les demandes futures.
Le 29 juillet 2019, des informations personnelles de plus de 100 millions de personnes ont été divulguées en raison d'un accès non autorisé à Capital One, une grande société financière américaine.
Information on the Capital One Cyber Incident https://www.capitalone.com/facts2019/
Les causes des fuites d'informations sont les suivantes
D'autre part, IMDSv2 nécessite un Token obtenu à l'avance pour accéder aux métadonnées. L'utilisation d'IMDSv2 et les avantages en termes de sécurité sont les suivants.
--Créez un jeton de session de 6 heures (21600 secondes) à l'aide d'une requête PUT
Préparer une instance (cli_instance) pour l'exécution de l'AWS-CLI afin d'émettre une commande de création / modification de configuration d'instance
cli_environnement d'instance(AWS-Informations sur l'environnement de l'éditeur CLI)
[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 ~]#
Créer une instance de contrôle d'opération IMDSv2 "test_instance"
cli_environnement d'instance(run-exécution d'instances)
[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}]'
Instance construite (test_instance) Vérifiez les paramètres de métadonnées par défaut de l'instance
cli_environnement d'instance(describe-exécution d'instances)
[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 ":" facultatif "-> IMDSv1 / IMDSv2 sont tous les deux disponibles
" HttpTokens ":" required "-> IMDSv2 uniquement disponible (application IMDSv2)
Ce qui suit est exécuté sur l'environnement" test_instance "nouvellement construit
test_environnement d'instance (exécution IMDSv1)
[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_environnement d'instance (exécution IMDSv2)
[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 ~]#
Ce qui suit est exécuté sur l'environnement d'exécution AWS-CLI" cli_instance "environnement
cli_environnement d'instance
[root@ip-10-0-0-74 ~]# # test_Obtenir l'ID d'instance de l'instance
[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 ~]# #Exécution du réglage forcé IMDSv2("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 ~]#
Ce qui suit est exécuté sur l'environnement" test_instance "nouvellement construit
test_environnement d'instance (exécution IMDSv1)
[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 est forcé, donc il ne peut pas être obtenu par la méthode de IMDSv1`
test_environnement d'instance (exécution IMDSv2)
[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