컨테이너가 Amazon ECS의 Amazon EC2 인스턴스 메타데이터에 액세스하지 못하도록 방지하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 2월 11일

컨테이너가 Amazon Elastic Container Service(Amazon ECS)의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 메타데이터에 액세스하지 못하도록 방지하고 싶습니다.

간략한 설명

Amazon EC2 인스턴스에서 컨테이너를 실행하는 경우, 애플리케이션이 인스턴스 역할을 맡도록 허용하지 않는 것이 보안을 위해 가장 좋습니다.

Amazon ECS는 외부 연결을 통해 태스크를 실행할 수 있도록 다음과 같은 네트워킹 모드를 제공합니다.

  • 브리지 모드. 태스크가 Docker의 내장 가상 네트워크를 사용합니다.
  • awsvpc 모드. 태스크가 탄력적 네트워크 인터페이스를 할당하고 모든 컨테이너가 동일한 네트워킹 네임스페이스를 공유합니다.
  • 호스트 모드. 컨테이너가 호스트의 네트워킹 네임스페이스를 공유합니다.

다음 해결 방법은 브리지awsvpc 네트워킹 모드를 사용하여 컨테이너가 인스턴스 메타데이터에 액세스하지 못하도록 방지하는 방법을 보여줍니다.

참고: Amazon ECS 에이전트는 호스트 네트워킹 네임스페이스에 액세스해서 실행해야 하므로 호스트 네트워킹 모드에서는 액세스를 차단할 수 없습니다.

​해결 방법

awsvpc 네트워킹 모드를 사용하는 태스크의 경우, Amazon ECS 구성 파일 /etc/ecs/ecs.config에 다음 파라미터를 추가하십시오.

ECS_AWSVPC_BLOCK_IMDS=true

브리지 네트워킹 모드를 사용하는 태스크의 경우, iptables를 사용하여 docker0 브리지로부터의 네트워크 트래픽을 차단하십시오.

사용자 지정 Amazon Machine Image(AMI)에서 또는 Amazon EC2 인스턴스 사용자 데이터에서 시작할 때 iptables 구성을 지정할 수 있습니다. Amazon Linux 2 AMI의 경우 다음 예제를 참조하십시오.

참고: Amazon EC2 인스턴스 사용자 데이터를 선택하는 경우 Docker 데몬이 시작되기 전에 다음 구성을 작성해야 합니다. cloud-boothook 사용자 데이터 형식은 부팅 프로세스에서 대부분의 서비스보다 먼저 실행됩니다.

#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

기존 사용자 데이터에 이 구성을 포함하려면 Mime Multi Part Archive를 사용하십시오. 다음 예제를 참조하십시오.

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에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?