¿Cómo puedo evitar que los contenedores accedan a los metadatos de las instancias de Amazon EC2 en Amazon ECS?

3 minutos de lectura
0

Quiero evitar que los contenedores accedan a los metadatos de las instancias de Amazon Elastic Compute Cloud (Amazon EC2) en Amazon Elastic Container Service (Amazon ECS).

Breve descripción

Si ejecuta contenedores en una instancia de Amazon EC2, se recomienda, por motivos de seguridad, evitar que las aplicaciones asuman un rol de instancia.

Amazon ECS proporciona los siguientes modos de red para ejecutar una tarea con conectividad externa:

  • El modo bridge. La tarea utiliza la red virtual integrada de Docker.
  • El modo awsvpc. La tarea asigna una interfaz de red elástica y todos los contenedores comparten el mismo espacio de nombres de red.
  • El modo host. Los contenedores comparten el espacio de nombres de red del host.

La siguiente solución muestra cómo evitar que los contenedores accedan a los metadatos de la instancia mediante los modos de red bridge y awsvpc.

Nota: No es posible impedir el acceso con el modo de red host, porque el agente de Amazon ECS se ejecuta en el espacio de nombres de red del host y debe poder acceder a él.

Solución

En el caso de las tareas que utilizan el modo de red awsvpc, añada el siguiente parámetro al archivo de configuración de Amazon ECS /etc/ecs/ecs.config:

ECS_AWSVPC_BLOCK_IMDS=true

En el caso de las tareas que utilizan el modo de red bridge, utilice iptables para bloquear el tráfico de red desde el puente docker0.

Puede especificar la configuración de iptables en su imagen de máquina de Amazon (AMI) personalizada o, en el momento del lanzamiento, en los datos de usuario de la instancia de Amazon EC2. Consulte el siguiente ejemplo en el caso de las AMI de Amazon Linux 2.

Nota: Si elige los datos de usuario de la instancia de Amazon EC2, debe escribir la siguiente configuración antes de que se inicie el daemon de Docker. El formato de datos de usuario cloud-boothook se ejecuta antes que la mayoría de los servicios en el proceso de arranque.

#cloud-boothook

yum install iptables-services -y

cat <<EOF > /etc/sysconfig/iptables
*filter
:DOCKER-USER - [0:0]
-A DOCKER-USER -d 169.254.169.254/32 -j DROP
COMMIT
EOF

systemctl enable iptables && systemctl start iptables

Para incluir esta configuración con sus datos de usuario existentes, utilice el archivo multiparte MIME. Fíjese en el siguiente ejemplo:

Content-Type: multipart/mixed; boundary="==BOUNDARY=="
MIME-Version: 1.0

--==BOUNDARY==
Content-Type: text/cloud-boothook; charset="us-ascii"

# Set iptables configuration

yum install iptables-services -y

cat <<EOF > /etc/sysconfig/iptables
*filter
:DOCKER-USER - [0:0]
-A DOCKER-USER -d 169.254.169.254/32 -j DROP
COMMIT
EOF

systemctl enable iptables && systemctl start iptables

--==BOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"

#!/bin/bash
# Set any ECS agent configuration options
echo "ECS_CLUSTER=my-ecs-cluster" >> /etc/ecs/ecs.config

--==BOUNDARY==--

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años