Come posso impedire ai container di accedere ai metadati delle istanze Amazon EC2 in Amazon ECS?

2 minuti di lettura
0

Desidero impedire ai container di accedere ai metadati delle istanze di Amazon Elastic Compute Cloud (Amazon EC2) in Amazon Elastic Container Service (Amazon ECS).

Descrizione breve

Se esegui container in un'istanza Amazon EC2, è consigliabile bloccare le applicazioni in modo che non possano assumere un ruolo di istanza.

Amazon ECS offre le seguenti modalità di rete per eseguire un'attività con connettività esterna:

  • La modalità bridge: l'attività utilizza la rete virtuale integrata di Docker.
  • La modalità awsvpc: l'attività alloca un'interfaccia di rete elastica. In questa configurazione, tutti i container condividono lo stesso spazio dei nomi di rete.
  • La modalità host: i container condividono lo spazio dei nomi di rete dell'host.

Puoi utilizzare le modalità di rete bridge e awsvpc per bloccare i container in modo che non possano accedere ai metadati dell'istanza.

Nota: l'agente Amazon ECS viene eseguito sul namespace di rete host e richiede l'accesso a esso. Non è possibile impedire l'accesso con la modalità di rete host.

Risoluzione

Per le attività che utilizzano la modalità di rete awsvpc, aggiungi il seguente parametro al file di configurazione di Amazon ECS /etc/ecs/ecs.config:

ECS_AWSVPC_BLOCK_IMDS=true

Per le attività che utilizzano la modalità di rete bridge, usa iptables per bloccare il traffico di rete dal bridge docker0.

Puoi specificare la configurazione di iptables nella tua Amazon Machine Image (AMI) personalizzata o all'avvio nei dati utente dell'istanza Amazon EC2. Guarda il seguente esempio per Amazon Linux

Nota: se scegli i dati utente dell'istanza Amazon EC2, devi scrivere la configurazione prima dell'avvio del daemon Docker. Il formato dei dati utente cloud-boothook viene eseguito prima nel processo di avvio rispetto alla maggior parte dei servizi.

Per includere questa configurazione con i dati utente esistenti, utilizza l'Archivio multiparte MIME sul sito web cloud-init. Considera l'esempio seguente:

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

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

#!/bin/sh
# 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==--
AWS UFFICIALE
AWS UFFICIALEAggiornata 8 mesi fa