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

3 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).

Breve descrizione

Se esegui i container in un'istanza Amazon EC2, è consigliabile, per motivi di sicurezza, evitare che le applicazioni assumano 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 e 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.

La risoluzione seguente mostra come impedire ai container di accedere ai metadati dell'istanza utilizzando le modalità di rete bridge e awsvpc.

Nota: non è possibile impedire l'accesso con la modalità di rete host, poiché l'agente Amazon ECS viene eseguito sullo spazio dei nomi della rete host e vi richiede l'accesso.

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 le AMI di Amazon Linux 2.

Nota: se scegli i dati utente dell'istanza Amazon EC2, la seguente configurazione deve essere scritta 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.

#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

Per includere questa configurazione con i dati utente esistenti, utilizza l'Archivio multiparte MIME. Guarda il seguente esempio:

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==--

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa