IMDSversiones en un dispositivo de la familia Snow - AWS Snowball Edge Guía para desarrolladores

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

IMDSversiones en un dispositivo de la familia Snow

Puedes acceder a los metadatos de la instancia desde una instancia en ejecución mediante IMDS la versión 2 o la versión 1: IMDS

  • Instance Metadata Service, versión 2 (IMDSv2), un método orientado a la sesión

  • Instance Metadata Service, versión 1 (IMDSv1), un método de solicitud-respuesta

En función de la versión del software Snow, puede utilizar o IMDSv1 ambosIMDSv2. Esto también depende del tipo de AMI ejecución de la instancia EC2 compatible. AlgunasAMIs, como las que ejecutan Ubuntu 20.04, requieren. IMDSv2 El servicio de metadatos de la instancia distingue entre IMDSv2 solicitudes IMDSv1 y solicitudes en función de la presencia de encabezados PUT o GET encabezados. IMDSv2usa estos dos encabezados. IMDSv1usa solo el GET encabezado.

AWS fomenta el uso de, IMDSv2 en lugar de hacerlo, IMDSv1 porque IMDSv2 incluye una mayor seguridad. Para obtener más información, consulte Mejore la protección contra los firewalls abiertos, los proxies inversos y SSRF las vulnerabilidades con mejoras en el servicio de metadatos de EC2 instancias.

IMDSv2en un dispositivo de la familia Snow

Cuando se utilizan IMDSv2 para solicitar metadatos de instancias, la solicitud debe seguir estas reglas:

  1. Use una solicitud PUT para iniciar una sesión en el servicio de metadatos de instancia. La PUT solicitud devuelve un token de sesión que debe incluirse en GET las solicitudes posteriores al servicio de metadatos de la instancia. El token de sesión que define la duración de la sesión. La duración de la sesión puede tener un valor mínimo de un segundo y un valor máximo de seis horas. Durante ese tiempo, puede utilizar el mismo token de sesión para solicitudes subsiguientes. Cuando la duración llegue a su fin, deberá crear un token de sesión nuevo para utilizarlo en las solicitudes futuras. El token es necesario para acceder a los metadatos medianteIMDSv2.

  2. Incluya el token en todas las solicitudes GET del servicio de metadatos de instancias.

    1. El token es una clave específica de la instancia. El token no es válido en otras instancias EC2 compatibles y se rechazará si intentas usarlo fuera de la instancia en la que se generó.

    2. La PUT solicitud debe incluir un encabezado que especifique el tiempo de vida (TTL) del token, en segundos, hasta un máximo de seis horas (21 600 segundos). El token representa una sesión lógica. TTLEspecifica el período de validez del token y, por lo tanto, la duración de la sesión.

    3. Cuando un token caduca, para poder seguir accediendo a los metadatos de instancia hay que crear una sesión nueva con otra solicitud PUT.

    4. Puede elegir entre volver a utilizar un token o crear uno nuevo con cada solicitud. Si hay un número pequeño de solicitudes, puede ser más sencillo generar y usar inmediatamente un token cada vez que necesite acceder al servicio de metadatos de instancias. Pero para ser más eficientes, puede especificar una duración más larga para el token y volver a usarlo en vez de escribir una solicitud PUT cada vez que tenga que solicitar metadatos de instancia. No existe ningún límite práctico en cuanto a la cantidad de tokens simultáneos, cada uno de los cuales representa su propia sesión.

HTTPGETy HEAD los métodos están permitidos en las solicitudes de metadatos de las IMDSv2 instancias. PUTlas solicitudes se rechazan si contienen un X-Forwarded-For encabezado.

De forma predeterminada, la respuesta a las solicitudes PUT tiene un límite de saltos de respuesta (tiempo de vida) de 1 en el nivel del protocolo IP. IMDSya que Snow no puede modificar el límite de saltos en PUT las respuestas.

En el siguiente ejemplo, se utiliza un script de shell de Linux IMDSv2 para recuperar los elementos de metadatos de la instancia de nivel superior. Este ejemplo:

  1. Crea un token de sesión que dura seis horas (21 600 segundos) con la solicitud PUT.

  2. Almacena el encabezado del token de sesión en una variable denominada TOKEN.

  3. Solicita los elementos de metadatos de nivel superior con el token.

Usa dos comandos para generar el token compatibleEC2. Puede ejecutar los comandos por separado o como un solo comando.

Primero, genere un token con el siguiente comando.

nota

X-aws-ec2-metadata-token-ttl-seconds es un encabezado obligatorio. Si este encabezado no se incluye, recibirá un código de error 400 - Missing or Invalid Parameters que indica que faltan parámetros o que no son válidos.

[ec2-user ~]$ TOKEN=curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"

A continuación, utilice el token para generar elementos de metadatos de nivel superior mediante el siguiente comando.

[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/
nota

Si se produce un error al crear el token, en lugar de un token válido, se almacena un mensaje de error en la variable y el comando no funcionará.

Puede almacenar el token y combinar los comandos. En el siguiente ejemplo se combinan los dos comandos anteriores y se almacena el encabezado del token de sesión en una variable denominada TOKEN.

ejemplo de comandos combinados
[ec2-user ~]$ 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/

Después de crear un token, puede volverlo a usar hasta que venza. El siguiente comando de ejemplo obtiene el identificador AMI utilizado para lanzar la instancia y lo almacena en la instancia $TOKEN creada en el ejemplo anterior.

ejemplo de reutilizar un token
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ami-id

IMDSv1en un dispositivo de la familia Snow

IMDSv1utiliza el modelo de solicitud-respuesta. Para solicitar metadatos de instancia, debe enviar una solicitud GET al servicio de metadatos de instancias.

[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/

Los metadatos de la instancia están disponibles en la instancia en ejecución, por lo que no necesita usar la EC2 consola de Amazon ni la AWS CLI para acceder a ellos. Esto puede resultar de utilidad al escribir scripts para ejecutarlos desde la instancia. Por ejemplo, puede obtener acceso a la dirección IP local de la instancia desde los metadatos de la instancia para administrar una conexión a una aplicación externa. Los metadatos de instancia se dividen en categorías. Para obtener una descripción de cada categoría de metadatos de instancia, consulte Datos de usuario y metadatos de instancia admitidos en esta guía.

Para ver todas las categorías de metadatos de la instancia desde una instancia en ejecución, usa lo siguiente IPv4URI:

http://169.254.169.254/latest/meta-data/

Las direcciones IP son direcciones de enlace local y solo son válidas desde la instancia. Para obtener más información, consulte Dirección de enlace local en Wikipedia.

Todos los metadatos de la instancia se devuelven como texto (tipo de HTTP contenidotext/plain).

La solicitud de un recurso de metadatos específico devuelve el valor correspondiente, o un código de HTTP error 404 (No se ha encontrado), si el recurso no está disponible.

La solicitud de un recurso de metadatos general (cuando URI termina con un / carácter) devuelve una lista de los recursos disponibles o un código de HTTP error 404 (No encontrado) si no existe dicho recurso. Los elementos de la lista están en líneas separadas y terminan con fuentes de línea (código de ASCII carácter 10).

En el caso de las solicitudes realizadas medianteIMDSv1, se pueden devolver los siguientes códigos de HTTP error:

  • 400 ‐ Missing or Invalid Parameters: la solicitud PUT no es válida.

  • 401 ‐ Unauthorized: la solicitud GET usa un token no válido. La acción recomendada es generar un token nuevo.

  • 403 ‐ Forbidden: la solicitud no está permitida o el servicio de metadatos de instancias está desactivado.