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

2분 분량
0

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

간략한 설명

Amazon EC2 인스턴스에서 컨테이너를 실행하는 경우, 애플리케이션이 인스턴스 역할을 맡지 못하도록 차단하는 것이 좋습니다.

Amazon ECS는 외부 연결을 통해 작업을 실행하기 위해 다음과 같은 네트워킹 모드를 제공합니다.

  • 브리지 모드: 이 작업은 Docker의 기본 제공 가상 네트워크를 사용합니다.
  • awsvpc 모드: 작업이 탄력적 네트워크 인터페이스를 할당합니다. 이 설정에서 모든 컨테이너는 동일한 네트워킹 네임스페이스를 공유합니다.
  • 호스트 모드: 컨테이너가 호스트의 네트워킹 네임스페이스를 공유합니다.

bridgeawsvpc 네트워킹 모드를 사용하여 컨테이너가 인스턴스 메타데이터에 액세스하지 못하도록 차단할 수 있습니다.

참고: Amazon ECS 에이전트는 host 네트워킹 네임스페이스에서 실행되며 이에 대한 액세스가 필요합니다. host 네트워킹 모드로 액세스를 차단할 수 없습니다.

해결 방법

awsvpc 네트워킹 모드를 사용하는 작업의 경우 Amazon ECS 구성 파일 /etc/ecs/ecs.config에 다음 파라미터를 추가하세요.

ECS_AWSVPC_BLOCK_IMDS=true

bridge 네트워킹 모드를 사용하는 작업의 경우, iptables를 사용하여 docker0 브리지에서 네트워크 트래픽을 차단합니다.

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

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

이 구성을 기존 사용자 데이터에 포함하려면 클라우드 초기화 웹사이트에서 MIME 멀티파트 아카이브를 사용하세요. 다음 예시를 참고하세요.

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 공식
AWS 공식업데이트됨 7달 전