Como posso impedir que os contêineres acessem os metadados da instância do Amazon EC2 no Amazon ECS?

3 minuto de leitura
0

Quero impedir que os contêineres acessem os metadados da instância do Amazon Elastic Compute Cloud (Amazon EC2) no Amazon Elastic Container Service (Amazon ECS).

Breve descrição

Se você executa contêineres em uma instância do Amazon EC2, por motivos de segurança, uma prática recomendada é evitar que seus aplicativos assumam uma função de instância.

O Amazon ECS fornece os seguintes modos de rede para executar uma tarefa com conectividade externa:

  • O modo bridge. A tarefa usa a rede virtual integrada do Docker.
  • O modo awsvpc. A tarefa aloca uma interface de rede elástica e todos os contêineres compartilham o mesmo namespace de rede.
  • O modo host. Os contêineres compartilham o namespace de rede do host.

A resolução a seguir mostra como impedir que os contêineres acessem os metadados da instância usando os modos de rede bridge e awsvpc.

Observação: Não é possível impedir o acesso com o modo de rede host, porque o agente do Amazon ECS é executado no namespace de rede host e exige acesso a ele.

Resolução

Para tarefas usando o modo de rede awsvpc, adicione o seguinte parâmetro ao arquivo de configuração do Amazon ECS /etc/ecs/ecs.config:

ECS_AWSVPC_BLOCK_IMDS=true

Para tarefas usando o modo de rede bridge, use iptables para bloquear o tráfego de rede da ponte docker0.

Você pode especificar a configuração de iptables na sua Imagem de máquina da Amazon (AMI) personalizada ou na inicialização nos dados do usuário da instância do Amazon EC2. Veja o exemplo a seguir para as AMIs do Amazon Linux 2.

Observação: Se escolher dados de usuário da instância do Amazon EC2, a configuração a seguir deverá ser gravada antes do início do daemon do Docker. O formato de dados do usuário cloud-boothook é executado mais cedo no processo de inicialização do que a maioria dos serviços.

#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 essa configuração com seus dados de usuário existentes, use o arquivo de várias partes MIME. Veja o exemplo a seguir:

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 OFICIAL
AWS OFICIALAtualizada há 2 anos