Wie kann ich verhindern, dass Container auf Amazon EC2-Instance-Metadaten in Amazon ECS zugreifen?

Lesedauer: 2 Minute
0

Ich möchte verhindern, dass Container auf Amazon Elastic Compute Cloud (Amazon EC2)-Instance-Metadaten in Amazon Elastic Container Service (Amazon ECS) zugreifen.

Kurzbeschreibung

Wenn Sie Container in einer Amazon EC2-Instance ausführen, empfiehlt es sich aus Sicherheitsgründen, zu vermeiden, dass Ihre Anwendungen eine Instanz-Rolle übernehmen.

Amazon ECS bietet die folgenden Netzwerkmodi, um eine Aufgabe mit externer Konnektivität auszuführen:

  • **Der Bridge-Modus.**Die Aufgabe verwendet das integrierte virtuelle Netzwerk von Docker.
  • **Der awsvpc-Modus.**Die Aufgabe weist eine elastische Netzwerkschnittstelle zu, und alle Container nutzen denselben Netzwerk-Namensbereich.
  • **Der Host-Modus.**Die Container teilen sich den Netzwerk-Namensbereich des Hosts.

Die folgende Lösung zeigt Ihnen, wie Sie verhindern können, dass Container mithilfe der Netzwerkmodi bridge und awsvpc auf die Instanzmetadaten zugreifen.

**Hinweis:**Es ist nicht möglich, den Zugriff mit dem Host-Netzwerkmodus zu verhindern, da der Amazon ECS-Agent im Host-Netzwerk-Namensbereich ausgeführt wird und Zugriff darauf benötigt.

Lösung

Für Aufgaben, die den awsvpc-Netzwerkmodus verwenden, fügen Sie der Amazon ECS-Konfigurationsdatei /etc/ecs/ecs.config den folgenden Parameter hinzu:

ECS_AWSVPC_BLOCK_IMDS=true

Verwenden Sie für Aufgaben, die den bridge-Netzwerkmodus verwenden, iptables, um den Netzwerkverkehr von der docker0-Bridge zu blockieren.

Sie können die Konfiguration von iptables in Ihrem benutzerdefinierten Amazon Machine Image (AMI) oder beim Start in den Benutzerdaten der Amazon EC2-Instance angeben. Sehen Sie sich das folgende Beispiel für Amazon Linux 2-AMIs an.

Hinweis: Wenn Sie Amazon EC2-Instance-Benutzerdaten wählen, muss die folgende Konfiguration geschrieben werden, bevor der Docker-Daemon gestartet wird. Das cloud-boothook-Benutzerdatenformat wird früher im Startvorgang ausgeführt als die meisten Dienste.

#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

Verwenden Sie das mehrteilige MIME-Archiv, um diese Konfiguration in Ihre vorhandenen Benutzerdaten aufzunehmen. Siehe folgendes Beispiel:

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 OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren