Accediendo a la metadata en instancias de AWS EC2
Mashi
¿Sabes que son los metadatos en una instancia de Amazon EC2?
Los metadatos de una instancia EC2 son datos específicos de esa instancia. Proporcionan información detallada sobre la máquina virtual. Es como "la huella digital” de la instancia. Contiene información útil para configuración, gestión y automatización.
Información que se puede obtener de la metadata
Hay información muy valiosa que contienen los metadatos de una instancia. Podemos acceder a información como:
Identificadores: ID de instancia, ID de la imagen, región, zona de disponibilidad
Networking: Direcciones IP públicas y privadas, configuración de red, grupos de seguridad
Credenciales: Roles de IAM asociados, credenciales temporales, llaves públicas ssh
Configuración: Tipo de instancia, información del hardware, datos de usuario en el lanzamiento de la instancia
Solo se puede acceder a los metadatos únicamente desde adentro de la instancia. Por lo que es obligatorio conectarse a la instancia previamente.
Ingresando a la instancia EC2
Existen varias formas de conectarse a la instancia de AWS EC2. Para conectarse desde una terminal linux, debes descargarte el archivo .pem que se crea al momento de lanzar la instancia, o puedes crear un par de claves una vez la instancia esté en ejecución.
No olvides cambiar los permisos de tu archivo .pem a 400. Caso contrario no podrás conectarte a la instancia.
chmod 400 my-metadata-key.pem
Luego ejecuta el comando para conectarte a la instancia EC2. No olvides cambiar la IP pública por la ip de tu instancia.
ssh -i my-metadata-key.pem ec2-user@44.244.135.158
Accediendo a los metadatos de la instancia
Una vez dentro de la instancia, es necesario crear un token que nos permitirá obtener la metadata de la instancia.
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 3600"`
Una vez obtenido el valor del token, procedemos a obtener la metadata de la instancia.
curl -w "\n" -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/
La dirección IP 169.254.169.254 es una dirección de uso especial para devolver información de metadatos vinculada a instancias EC2.
Siempre que quieras consultar la metadata de tus instancias, deberás usar esta dirección IP.
Al ejecutar el comando anterior, se puede observar que se obtiene la metadata perteneciente a la instancia a la cual nos conectamos.
Podemos consultar partes específicas de la metadata. Por ejemplo consultar el tipo de instancia. En este caso se imprime que la instancia es de tipo t2.micro
curl -w "\n" -H "X-aws-ec2-metadata-token: $TOKEN" -v \
http://169.254.169.254/latest/meta-data/instance-type
De esta forma podemos consultar todos los metadatos que nos interesa.
Te dejo algunos ejemplos adicionales y el resultado de las mismas.
curl -w "\n" -H "X-aws-ec2-metadata-token: $TOKEN" -v \
http://169.254.169.254/latest/meta-data/security-groups
Resultado: launch-wizard-1
curl -w "\n" -H "X-aws-ec2-metadata-token: $TOKEN" -v \
http://169.254.169.254/latest/meta-data/ami-id
Resultado: ami-0b6d6dacf350ebc82
curl -w "\n" -H "X-aws-ec2-metadata-token: $TOKEN" -v \
http://169.254.169.254/latest/meta-data/hostname
Resultado: ip-172-31-46-136.us-west-2.compute.internal
curl -w "\n" -H "X-aws-ec2-metadata-token: $TOKEN" -v \
http://169.254.169.254/latest/meta-data/instance-id
Resultado: i-00ef087484d88521c
curl -w "\n" -H "X-aws-ec2-metadata-token: $TOKEN" -v \
http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
Resultado:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBynMtTK6DAElwJdmEh8Xt2CS19AXpXzNevwzs0kgsOJps1Me7znhZn8Po8/QdN6OTF4rAwi7P0uGcq9zZ25zaUgsjsNW5jOBSQzv+8tK3lCfULetHBNXBAtPGAQR6WhE9MWfKM7rxlnDnQl/385RLjB2fBrLNFR/Y7B+kkFvw49FIrE8u4bhOvOUkahd472shdpqqopBQBCVUlgWDSf8qRZg5PCTf6QKxpER1/F4PeIo4BXgsxWGXQJKveqXWWf8EEY8wsqRgG1Bmc+hLrhDqCsvyHEIhSAr6oyNtqKHhV31+YSoad/4mjfRW0Xihiti6raYQOEWJ5d3I8zTRvSLB my-metadata-key
Estos metadatos pueden ser extremadamente útiles sobre todo si se automatiza la configuración de nuevas instancias.
¿Y tú, sabías como obtener la metadata de tus instancias EC2?