Consulte las propiedades de la instancia, como los ID y las direcciones IP, desde dentro de una instancia ECS, y aplique el modo de reforzamiento de seguridad para prevenir SSRF attacks.
Obtención de metadatos de instancia
Los metadatos de instancia incluyen atributos como el ID de instancia, la configuración de red y las credenciales de acceso.
Método 1: Modo de reforzamiento de seguridad (recomendado)
Obtenga un token de acceso temporal e inclúyalo en su solicitud de metadatos.
Linux
Log on a la instancia.
-
Obtenga un token temporal.
TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:21600"`El parámetro X-aliyun-ecs-metadata-token-ttl-seconds especifica el TTL del token en segundos. Valores válidos: de 1 a 21,600.
-
Incluya el token en su solicitud para recuperar los metadatos.
curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/meta-data/instance-idReemplace
instance-idcon otros metadata items según sea necesario, como mac o hostname.Si la operación es exitosa, la terminal muestra únicamente la cadena del ID de instancia; por ejemplo,
i-bp1******.
Windows
Log on a la instancia.
-
Obtenga un token temporal.
$token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://100.100.100.200/latest/api/tokenEl parámetro X-aliyun-ecs-metadata-token-ttl-seconds especifica el TTL del token en segundos. Valores válidos: de 1 a 21,600.
-
Incluya el token en su solicitud para recuperar los metadatos.
Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/meta-data/instance-idReemplace
instance-idcon otros metadata items según sea necesario, como mac o hostname.Si la operación es exitosa, la terminal muestra únicamente la cadena del ID de instancia; por ejemplo,
i-bp1******.
Método 2: Modo normal
El modo normal no es seguro y no se recomienda.
-
Linux:
# Send a GET request to get the instance ID. curl http://100.100.100.200/latest/meta-data/instance-id -
Windows:
# Send a GET request to get the instance ID. Invoke-RestMethod -Uri http://100.100.100.200/latest/meta-data/instance-id -Method Get
Habilitación exclusiva del modo de reforzamiento de seguridad
Habilite Security Hardening Mode para que los metadatos solo sean accesibles mediante un token. Las solicitudes en modo normal devuelven un error 403 - Forbidden. De forma predeterminada, las instancias ECS permiten el acceso sin token (modo normal), lo que representa un alto riesgo de ataques SSRF.
Un ataque típico aprovecha una función de la aplicación, como la descarga de una imagen desde una URL externa. El atacante elabora una solicitud que engaña al servidor para que consulte el servicio de metadatos y robe las credenciales temporales del rol de RAM. Si el rol tiene permisos de alto nivel, el atacante podría obtener el control de sus recursos en la nube o de toda su cuenta de Alibaba Cloud.
Habilitación del modo de reforzamiento de seguridad para una nueva instancia
Consola
Cuando create an instance, establezca en Security Hardening Mode.
Si Security Hardening Mode no está disponible al crear una instancia desde una imagen personalizada, upgrade la imagen.
CLI
Llame a RunInstances o CreateInstance con HttpEndpoint=enabled y HttpTokens=required. Ejemplo:
Este ejemplo crea una instancia Linux en modo de reforzamiento de seguridad .
aliyun ecs RunInstances \
--region cn-hangzhou \
--RegionId 'cn-hangzhou' \
--ImageId 'aliyun_3_x64_20G_alibase_20250629.vhd' \
--InstanceType 'ecs.g7.large' \
--VSwitchId 'vsw-bp1******trg' \
--SecurityGroupId 'sg-bp1******dgl' \
--SystemDisk.Size 40 \
--SystemDisk.Category cloud_essd \
--HttpEndpoint enabled \
--HttpTokens required
API
Llame a RunInstances o CreateInstance con HttpEndpoint=enabled y HttpTokens=required.
Actualización de una instancia existente
Aplicabilidad
Instancias Windows: Security Hardening Mode no es compatible. Forzar este modo provoca fallos en la inicialización e interrumpe la modificación del nombre de host y la activación de KMS.
Instancias Linux: Compatible. Complete las verificaciones y modificaciones de dependencias en las siguientes secciones antes de actualizar.
Paso 1: Verificación y actualización de código y dependencias
Antes de cambiar a Security Hardening Mode, asegúrese de que la instancia y todas las aplicaciones desplegadas cumplan estos requisitos:
La versión de cloud-init debe ser 23.2.2 o posterior. Ejecute
cloud-init --versionpara comprobarlo. Si la versión es anterior a 23.2.2, upgrade Cloud-init primero; de lo contrario, la instancia no se iniciará después del cambio.-
Todo el código y los scripts de la aplicación deben acceder a los metadatos de instancia mediante Method 1: Security hardening mode.
ImportanteSi su código utiliza la biblioteca Credentials para obtener un token STS para la configuración del SDK, actualice a version that supports security hardening mode.
Después de actualizar, compruebe que no quede ningún acceso en modo normal. Consulte How do I detect if an ECS instance is being accessed in normal mode?. A continuación, habilite Security Hardening Mode para la instancia.
Paso 2: Habilitación del modo de reforzamiento de seguridad
Consola
Vaya a la página ECS console - Instances. Seleccione una región y un resource group.
En la columna Actions, haga clic en .
-
Active el interruptor Enable Instance Metadata Access Channel, establezca Instance Metadata Access Mode en Security Hardening Mode y luego haga clic en OK.
Al seleccionar Security Hardening Mode, aparece un cuadro de diálogo que indica que la habilitación de este modo rechazará las solicitudes en modo normal para mejorar la seguridad. Antes de realizar el cambio, se recomienda revisar la página de monitoreo de ECS Metadata en la consola de CloudMonitor para confirmar que la instancia no tenga llamadas en modo normal.
CLI
Llame a ModifyInstanceMetadataOptions con HttpEndpoint=enabled y HttpTokens=required para habilitar Security Hardening Mode. Ejemplo:
aliyun ecs ModifyInstanceMetadataOptions \
--region cn-hangzhou \
--RegionId 'cn-hangzhou' \
--InstanceId 'i-bp1******ke' \
--HttpEndpoint enabled \
--HttpTokens required
API
Llame a ModifyInstanceMetadataOptions con HttpEndpoint=enabled y HttpTokens=required para habilitar Security Hardening Mode.
Después del cambio, supervise el acceso a los metadatos y el estado de la aplicación. Si surgen problemas, revierta a Normal And Security Hardening Modes para restaurar el servicio y repita Step 1: Check and upgrade code and dependencies.
Detalles de los metadatos de instancia
Los metadatos se organizan en una jerarquía similar a un directorio. Al acceder a un directorio, se obtienen sus entradas o subdirectorios. Por ejemplo, meta-data/instance/ devuelve instance-name y instance-type.
Categoría | Metadato | Descripción | Ejemplo |
Información básica de la instancia |
| ID de la instancia. |
|
| Nombre de la instancia. |
| |
| Nombre de host. |
| |
| Tipo de instancia. |
| |
| Número de serie. |
| |
| Región de la instancia. |
| |
| Zona de la instancia. |
| |
| ID de la cuenta de Alibaba Cloud del propietario de la instancia. |
| |
| Valor de una etiqueta de instancia específica. Para habilitar esta función, llame a ModifyInstanceMetadataOptions y establezca |
| |
| PPS máximo para el tipo de instancia. Visible solo para instancias creadas o cuyo tipo de instancia se modificó después del 30 de junio de 2026. |
| |
| Conexiones máximas para el tipo de instancia. Visible solo para instancias creadas o cuyo tipo de instancia se modificó después del 30 de junio de 2026. |
| |
Información de imagen |
| ID de la imagen utilizada para crear la instancia. |
|
| Código de producto de la imagen de Alibaba Cloud Marketplace. |
| |
| Método de facturación de la imagen de Alibaba Cloud Marketplace. |
| |
| Origen del gestor de paquetes (como yum o apt) que utiliza la instancia Linux para las actualizaciones. |
| |
Configuración básica de red |
| Tipo de red. Solo se admite VPC. |
|
| ID de la VPC de la instancia. |
| |
| Bloque CIDR de la VPC de la instancia. |
| |
| ID del vSwitch de la instancia. |
| |
| Bloque CIDR del vSwitch de la instancia. |
| |
| Ancho de banda interno de salida máximo del tipo de instancia. Unidad: Kbit/s. |
| |
| Configuración de DNS. |
| |
| Dirección del servidor NTP. |
| |
Direcciones IP de la ENI principal |
| Dirección MAC de la instancia. Para instancias con varias NIC, solo se devuelve la dirección MAC en eth0. |
|
| Dirección IPv4 privada de la ENI principal. |
| |
| Dirección IPv4 pública de la ENI principal de la instancia. |
| |
| Dirección IPv4 pública estática o Elastic IP Address asociada a la ENI principal. |
| |
Detalles de la interfaz de red elástica |
| ID de la ENI. Reemplace [mac] por la dirección MAC de la instancia del elemento de metadatos mac. Lo mismo aplica para los siguientes elementos. |
|
| ID de la VPC de la ENI. |
| |
| ID del vSwitch de la ENI. |
| |
| Dirección IP privada principal de la ENI. |
| |
| Direcciones IPv4 privadas asignadas a la ENI. |
| |
| Prefijos IPv4 privados asignados a la ENI. |
| |
| Máscara de subred de la ENI. |
| |
| Puerta de enlace IPv4 de la ENI. |
| |
| Bloque CIDR IPv4 del vSwitch de la ENI. |
| |
| Bloque CIDR IPv4 de la VPC de la ENI. |
| |
| Direcciones IPv6 asignadas a la ENI. Solo para instancias de tipo VPC con IPv6 configurado. |
| |
| Prefijos IPv6 asignados a la ENI. |
| |
| Puerta de enlace IPv6 de la VPC de la ENI. |
| |
| Bloque CIDR IPv6 del vSwitch de la ENI. Solo para instancias de tipo VPC con IPv6 configurado. |
| |
| Bloque CIDR IPv6 de la VPC de la ENI. Solo para instancias de tipo VPC con IPv6 configurado. |
| |
Información de disco |
| Número de serie del disco. |
|
| ID del disco. |
| |
| Nombre del disco. |
| |
Seguridad y credenciales |
| Clave pública, disponible solo si se proporcionó una durante el lanzamiento. |
|
| Credenciales de seguridad temporales del rol de RAM asociado a la instancia. Reemplace [role-name] por el nombre del rol de RAM. Las credenciales caducan en el momento indicado en el campo Expiration; vuelva a llamar a la API para obtener nuevas. | | |
Atributos avanzados de instancia |
| Solución de virtualización de ECS. Se admiten Virt 1.0 y Virt 2.0. |
|
| Número de compilación interna. |
| |
| Hora programada de detención y liberación para una instancia spot, en formato UTC+0 yyyy-MM-ddThh:mm:ssZ. |
| |
Configuración específica de Windows |
| Servidor de activación KMS para instancias Windows. |
|
| Servidor de actualizaciones para instancias Windows. |
| |
| Servidor de monitoreo del estado de actualizaciones para instancias Windows. |
|
Preguntas frecuentes
-
¿Qué es un ataque SSRF y cómo protege el modo de reforzamiento de seguridad contra este?
SSRF es una vulnerabilidad en la que un atacante engaña a un servidor para que realice solicitudes de red no autorizadas con el fin de acceder a sistemas internos, como el servicio de metadatos o bases de datos. Por ejemplo, un atacante puede enviar una URL que contenga
http://100.100.100.200/latest/meta-data/para lograr que una aplicación obtenga y devuelva metadatos sensibles.De forma predeterminada, las instancias ECS permiten el acceso sin token (modo normal). El modo de reforzamiento de seguridad exige la validación de tokens: el cliente primero envía una solicitud PUT para obtener un token temporal y luego lo incluye en las solicitudes GET. Dado que los ataques SSRF no pueden iniciar solicitudes PUT, no pueden obtener un token, lo que bloquea eficazmente el acceso no autorizado.
-
No puedo acceder a los metadatos de la instancia mediante comandos en el modo de reforzamiento de seguridad. ¿Cómo soluciono esto?
Errores comunes de comandos:
-
El TTL de la credencial de acceso a metadatos de la instancia está fuera del rango permitido (400 - Missing or Invalid Parameters)
El TTL debe ser de 1 a 21,600 segundos. Los valores fuera de este rango devuelven 400 - Missing or Invalid Parameters.
curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds: 21700" -
La solicitud contiene el encabezado X-Forwarded-For (403 - Forbidden)
curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-Forwarded-For: www.ba****.com" -
La credencial de acceso a metadatos de la instancia especificada no es válida (401 - Unauthorized)
curl -H "X-aliyun-ecs-metadata-token: aaa" -v http://100.100.100.200/latest/meta-data/
-
-
¿Qué hago si se limita mi acceso de alta frecuencia al servicio de metadatos?
El servicio de metadatos tiene límites de tasa. Obtenga los elementos que cambian con poca frecuencia, como instance-id, una sola vez durante el inicio y almacénelos en caché localmente con un TTL razonable.
-
Mi aplicación dejó de funcionar después de cambiar el modo de acceso a metadatos de la instancia al modo de reforzamiento de seguridad. ¿Cómo soluciono este problema?
Es posible que una aplicación o script en la instancia aún utilice el modo normal. Siga Upgrade an existing instance para comprobarlos y actualizarlos.
-
¿Puedo acceder a la dirección de metadatos desde un host local?
No.
100.100.100.200es una dirección de vínculo local accesible únicamente desde dentro de una instancia ECS a través de su interfaz de red virtual. Las solicitudes externas a la instancia no pueden enrutarse a esta dirección. -
¿Qué hago si no puedo seleccionar el modo de reforzamiento de seguridad al crear una instancia a partir de una imagen personalizada?
Al crear una instancia ECS a partir de una imagen personalizada de Linux, es posible que observe que Security Hardening Mode no está disponible. Esto indica que la imagen no cumple con los requisitos. Actualice la imagen de la siguiente manera:
Cree una instancia temporal: Utilice la imagen personalizada para crear una instancia ECS temporal.
-
Modifique la instancia temporal: En la instancia temporal, realice las siguientes modificaciones. Consulte Upgrade an existing instance.
Actualice Cloud-init: Actualice Cloud-init a la versión 23.2.2 o posterior.
Modifique aplicaciones y scripts: Actualice todas las aplicaciones o scripts que utilizan el modo normal al modo de reforzamiento de seguridad.
Cree una nueva imagen y actualice sus atributos: Cree una nueva imagen personalizada a partir de la instancia. Luego, invoque ModifyImageAttribute para establecer
Features.ImdsSupportenv2.Libere recursos: Libere la instancia temporal después de crear la nueva imagen.
-
¿Qué versiones de la herramienta Credentials admiten el modo de reforzamiento de seguridad?
Las versiones anteriores de Credentials no admiten el acceso a metadatos en el modo de reforzamiento de seguridad. Cambiar al modo de reforzamiento de seguridad sin realizar la actualización impide que el SDK obtenga tokens STS, lo que provoca interrupciones en el servicio.
Actualice la dependencia de Credentials a una versión compatible antes de cambiar de modo:
Java: credentials-java versión >=
0.3.10.Node.js: credentials versión >=
2.3.1.PHP: credentials versión >=
1.2.0.Python: alibabacloud_credentials versión >=
0.3.6.Go: credentials-go versión >=
1.3.10.
-
¿Cómo detecto si se está accediendo a una instancia ECS en modo normal?
Utilice los siguientes métodos para detectar y localizar procesos que acceden a los metadatos en modo normal.
Método 1: Uso de CloudMonitor para verificar el acceso en modo normal
Revise los datos de monitoreo de metadatos de ECS en la consola de CloudMonitor para determinar si se ha accedido a la instancia en modo normal.
Inicie sesión en la consola de CloudMonitor.
En el panel de navegación izquierdo, seleccione . Busque y vaya a la página de monitoreo de ECS Metadata.
Consulte la métrica Successful Normal Mode Accesses de la instancia objetivo.
Si esta métrica no es 0, significa que se está accediendo a la instancia en modo normal. Localice y actualice las aplicaciones que utilizan el modo normal.
Método 2: Uso de un plugin de Cloud Assistant para localizar un proceso específico
Utilice un plugin de Cloud Assistant para localizar los procesos que acceden a los metadatos en modo normal.
Sistemas operativos compatibles
Alibaba Cloud Linux 3
Alibaba Cloud Linux 3 Pro
Anolis OS 8
CentOS Stream 8/9
CentOS 8
Ubuntu: 20/24
Debian:10,11,12
Fedora 35+
AlmaLinux 8/9
Rocky Linux 8/9
Red Hat Enterprise Linux 8/9
Para Red Hat, descargue un paquete RPM en install Cloud Assistant Agent.
SUSE 15.1/15.2/15.3/15.4/15.5/15.6
OpenSuse 15.2/15.3/15.4/15.5/15.6
Procedimiento
-
Instale y habilite el plugin de Cloud Assistant
Log on a la instancia ECS e instale el servicio de monitoreo. Este servicio consume algunos recursos de la instancia.
# Deploy the monitoring service. sudo acs-plugin-manager --exec --plugin ACS-ECS-ImdsPacketAnalyzer # Check the status of the monitoring service. sudo systemctl status imds_tracer_tool[root@cockpit ~]# systemctl status imds_tracer_tool ● imds_tracer_tool.service - ImdsPacketAnalyzer IMDS detection tooling from Aliyun Loaded: loaded (/etc/systemd/system/imds_tracer_tool.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2025-04-01 11:27:46 CST; 1 day 4h ago Main PID: 3549929 (python3) Tasks: 1 (limit: 3246596) Memory: 100.0M CGroup: /system.slice/imds_tracer_tool.service └─3549929 /bin/python3 /usr/local/share/aliyun-assist/plugin/ACS-ECS-ImdsPacketAnalyzer/1.0/src/imds_snoop.py Apr 02 15:58:34 cockpit python3[3549929]: [WARNING] imdsv1(!) (pid:3577803:curl argv:curl -s -o /dev/null --write-out 0.5 http://100.100.100.200) called by -> (pid:3565366:bash argv: Apr 02 15:58:34 cockpit python3[3549929]: [WARNING] imdsv1(!) (pid:3577804:curl argv:curl -s -o /dev/null --write-out 0.5 http://100.100.100.200) called by -> (pid:3565366:bash argv: Apr 02 15:58:34 cockpit python3[3549929]: [WARNING] imdsv1(!) (pid:3577805:curl argv:curl -s -o /dev/null --write-out 0.5 http://100.100.100.200) called by -> (pid:3565366:bash argv: Apr 02 15:58:34 cockpit python3[3549929]: [WARNING] imdsv1(!) (pid:3577806:curl argv:curl -s -o /dev/null --write-out 0.5 http://100.100.100.200) called by -> (pid:3565366:bash argv: Apr 02 15:58:34 cockpit python3[3549929]: [WARNING] imdsv1(!) (pid:3577807:curl argv:curl -s -o /dev/null --write-out 0.5 http://100.100.100.200) called by -> (pid:3565366:bash argv: Apr 02 15:58:34 cockpit python3[3549929]: [WARNING] imdsv1(!) (pid:3577808:curl argv:curl -s -o /dev/null --write-out 0.5 http://100.100.100.200) called by -> (pid:3565366:bash argv: Apr 02 15:58:34 cockpit python3[3549929]: [WARNING] imdsv1(!) (pid:3577809:curl argv:curl -s -o /dev/null --write-out 0.5 http://100.100.100.200) called by -> (pid:3565366:bash argv: Apr 02 15:58:34 cockpit python3[3549929]: [WARNING] imdsv1(!) (pid:3577810:curl argv:curl -s -o /dev/null --write-out 0.5 http://100.100.100.200) called by -> (pid:3565366:bash argv: -
Localice el proceso problemático Compruebe qué procesos siguen accediendo a los metadatos en modo normal. El registro muestra los identificadores de proceso (PID).
cat /var/log/imds/imds-trace.* | grep WARNING[root@cockpit ~]# cat /var/log/imds/imds-trace.* | grep WARNING [2025-04-01 11:25:59,483] [WARNING] imdsv1(!) (pid:3534140:acs-plugin-mana argv:acs-plugin-manager --exec --plugin acs-ecs-imdspacketanalyzer) called by -> (pid:3534138:sudo argv:sudo acs-plugin-manager --exec --plugin acs-ecs-imdspacketanalyzer) -> (pid:3533211:bash argv:-bash) -> (pid:3533208:sshd argv:sshd: root@pts/0) req details: get /latest/meta-data/instance-id http/1.1, host: 100.100.100.200, user-agent: linux_386/2.2.4.920, content-type: application/x-www-form-urlencoded, accept-encoding: gzip, [2025-04-01 11:25:59,483] [WARNING] imdsv1(!) (pid:3534140:acs-plugin-mana argv:acs-plugin-manager --exec --plugin acs-ecs-imdspacketanalyzer) called by -> (pid:3534138:sudo argv:sudo acs-plugin-manager --exec --plugin acs-ecs-imdspacketanalyzer) -> (pid:3533211:bash argv:-bash) -> (pid:3533208:sshd argv:sshd: root@pts/0) req details: get /latest/meta-data/instance-id http/1.1, host: 100.100.100.200, user-agent: linux_386/2.2.4.920, content-type: application/x-www-form-urlencoded, accept-encoding: gzip, [root@cockpit ~]# Analice y modifique Encuentre las aplicaciones o scripts correspondientes a los PID y actualícelos al modo de reforzamiento de seguridad.