Amazon ECS에 대한 네트워크 보안 모범 사례
네트워크 보안은 여러 하위 항목을 포함하는 광범위한 항목입니다. 여기에는 전송 중 암호화, 네트워크 분할 및 격리, 방화벽, 트래픽 라우팅, 가시성 등이 포함됩니다.
전송 중 암호화
네트워크 트래픽을 암호화하면 데이터가 네트워크에서 전송될 때 권한이 없는 사용자가 데이터를 가로채거나 읽지 못하도록 할 수 있습니다. Amazon ECS를 사용하면 네트워크 암호화를 다음 방법 중 하나로 구현할 수 있습니다.
-
서비스 메시(TLS) 사용:
AWS App Mesh를 사용하면 메시 엔드포인트와 함께 배포되는 Envoy 프록시 간의 TLS 연결을 구성할 수 있습니다. 두 가지 예로 가상 노드와 가상 게이트웨이가 있습니다. TLS 인증서는 AWS Certificate Manager(ACM)에서 가져올 수 있습니다. 또는 자체 프라이빗 인증 기관에서 가져올 수도 있습니다.
-
Nitro 인스턴스 사용:
기본적으로 C5n, G4, I3en, M5dn, M5n, P3dn, R5dn, R5n 등과 같은 Nitro 인스턴스 유형 간의 트래픽은 자동으로 암호화됩니다. 트래픽이 전송 게이트웨이, 로드 밸런서 또는 유사한 중간 서비스를 통해 라우팅되는 경우에는 트래픽이 암호화되지 않습니다.
-
Application Load Balancer와 함께 SNI(Server Name Indication) 사용:
Application Load Balancer(ALB) 및 Network Load Balancer(NLB)는 Server Name Indication(SNI)을 지원합니다. SNI를 사용하면 단일 리스너 뒤에 여러 보안 애플리케이션을 배치할 수 있습니다. 이 경우 리스너마다 고유한 TLS 인증서가 있습니다. AWS Certificate Manager(ACM)를 사용하여 로드 밸런서에 대한 인증서를 프로비저닝한 다음 리스너의 인증서 목록에 추가하는 것이 좋습니다. AWS 로드 밸런서는 SNI를 지원하는 스마트 인증서 선택 알고리즘을 사용합니다. 클라이언트가 제공한 호스트 이름이 인증서 목록의 단일 인증서와 일치하면 로드 밸런서는 이 인증서를 선택합니다. 클라이언트가 제공한 호스트 이름이 인증서 목록의 여러 인증서와 일치하면 로드 밸런서는 클라이언트가 지원할 수 있는 인증서를 선택합니다. 예를 들어 자체 서명된 인증서 또는 ACM을 통해 생성된 인증서가 있습니다.
-
TLS 인증서를 사용한 엔드 투 엔드 암호화:
여기에는 작업에 TLS 인증서를 배포하는 작업이 포함됩니다. 이 인증서는 자체 서명된 인증서나 신뢰할 수 있는 인증 기관의 인증서일 수 있습니다. 인증서의 보안 암호를 참조하여 인증서를 받을 수 있습니다. 그렇지 않으면 ACM에 인증서 서명 요청(CSR)을 발행한 다음 결과로 얻은 보안 암호를 공유 볼륨에 마운트하는 컨테이너를 실행할 수도 있습니다.
태스크 네트워킹
다음은 Amazon ECS 작동 방식을 고려하여 권장하는 사항입니다. Amazon ECS는 오버레이 네트워크를 사용하지 않습니다. 대신 다양한 네트워크 모드에서 작동하도록 작업을 구성합니다. 예를 들어 bridge
모드를 사용하도록 구성된 작업은 각 호스트에서 실행되는 Docker 네트워크에서 라우팅할 수 없는 IP 주소를 가져옵니다. awsvpc
네트워크 모드를 사용하도록 구성된 작업은 호스트의 서브넷에서 IP 주소를 가져옵니다. host
네트워킹으로 구성된 작업은 호스트의 네트워크 인터페이스를 사용합니다. awsvpc
가 기본 네트워크 모드입니다. 이 모드에서만 작업에 보안 그룹을 할당할 수 있기 때문입니다. 또한 Amazon ECS에서 AWS Fargate 작업에 사용할 수 있는 유일한 모드이기도 합니다.
작업의 보안 그룹
awsvpc
네트워크 모드를 사용하도록 작업을 구성하는 것이 좋습니다. 이 모드를 사용하도록 작업을 구성하면 Amazon ECS 에이전트는 자동으로 탄력적 네트워크 인터페이스(ENI)를 프로비저닝하고 작업에 연결합니다. ENI가 프로비저닝되면 작업이 AWS 보안 그룹에 등록됩니다. 보안 그룹은 인바운드 및 아웃바운드 트래픽을 제어하는 데 사용할 수 있는 가상 방화벽 역할을 합니다.
AWS PrivateLink 및 Amazon ECS
AWS PrivateLink는 Amazon ECS를 비롯한 다양한 AWS 서비스를 위한 프라이빗 엔드포인트를 생성할 수 있는 네트워킹 기술입니다. 엔드포인트는 Amazon VPC에 연결된 인터넷 게이트웨이(IGW) 가 없고 인터넷에 대한 대체 경로가 없는 샌드박스 환경에서 필요합니다. AWS PrivateLink를 사용하면 Amazon ECS 서비스에 대한 호출이 Amazon VPC 내에서 유지되고 인터넷을 통과하지 않습니다. Amazon ECS 및 기타 관련 서비스를 위한 AWS PrivateLink 엔드포인트를 생성하는 방법에 대한 지침은 Amazon ECS interface Amazon VPC endpoints를 참조하세요.
중요
AWS Fargate 작업에는 Amazon ECS에 대한 AWS PrivateLink 엔드포인트가 필요하지 않습니다.
Amazon ECR 및 Amazon ECS 모두 엔드포인트 정책을 지원합니다. 이러한 정책을 통해 서비스 API에 대한 액세스를 구체화할 수 있습니다. 예를 들어, 이미지를 특정 AWS 계정의 레지스트리로만 푸시하도록 허용하는 Amazon ECR에 대한 엔드포인트 정책을 생성할 수 있습니다. 이와 같은 정책을 사용하면 데이터가 컨테이너 이미지를 통해 유출되는 것을 방지하면서도 사용자가 승인된 Amazon ECR 레지스트리로 푸시하도록 허용할 할 수 있습니다. 자세한 정보는 VPC 엔드포인트 정책 사용을 참조하세요.
다음 정책은 계정의 모든 AWS 보안 주체가 Amazon ECR 리포지토리에서만 모든 작업을 수행할 수 있도록 허용합니다.
{ "Statement": [ { "Sid": "LimitECRAccess", "Principal": "*", "Action": "*", "Effect": "Allow", "Resource": "arn:aws:ecr:
region
:account_id
:repository/*" }, ] }
새 PrincipalOrgID
속성을 사용하는 조건을 설정하여 이 정책을 더욱 강화할 수 있습니다. 이렇게 하면 AWS Organizations에 속하지 않는 IAM 보안 주체가 이미지를 푸시하거나 풀하지 못하게 합니다. 자세한 내용은 aws:PrincipalOrgID를 참조하세요.
com.amazonaws.
및 region
.ecr.dkrcom.amazonaws.
엔드포인트 모두에 동일한 정책을 적용하는 것이 좋습니다.region
.ecr.api
컨테이너 에이전트 설정
Amazon ECS 컨테이너 에이전트 구성 파일에는 네트워크 보안과 관련된 여러 환경 변수가 포함되어 있습니다. ECS_AWSVPC_BLOCK_IMDS
및 ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST
는 작업의 Amazon EC2 메타데이터 액세스를 차단하는 데 사용됩니다. HTTP_PROXY
는 HTTP 프록시를 통해 라우팅하여 인터넷에 연결하도록 에이전트를 구성하는 데 사용됩니다. 프록시를 통해 라우팅하도록 에이전트 및 Docker 런타임을 구성하는 방법에 대한 지침은 HTTP Proxy Configuration을 참조하세요.
중요
AWS Fargate를 사용할 때는 이러한 설정을 사용할 수 없습니다.
네트워크 보안 권장 사항
Amazon VPC, 로드 밸런서 및 네트워크를 설정할 때 다음 작업을 수행하는 것이 좋습니다.
Amazon ECS에서 해당하는 경우 네트워크 암호화 사용
해당하는 경우 네트워크 암호화를 사용해야 합니다. PCI DSS와 같은 특정 규정 준수 프로그램에 따르면 데이터에 카드 소유자 데이터가 포함된 경우 전송 중 데이터를 암호화해야 합니다. 워크로드의 요구 사항이 유사한 경우 네트워크 암호화를 구성하세요.
최신 브라우저에서는 안전하지 않은 사이트에 연결할 경우 사용자에게 경고합니다. 서비스가 공용 로드 밸런서를 통해 제공되는 경우 TLS/SSL을 사용하여 클라이언트 브라우저에서 로드 밸런서로 전달되는 트래픽을 암호화하고 필요한 경우 백엔드로 다시 암호화하세요.
awsvpc
네트워크 모드 및 보안 그룹을 사용하여 Amazon ECS의 태스크와 다른 리소스 간의 트래픽 제어
작업 간이나 작업과 다른 네트워크 리소스 간의 트래픽을 제어해야 하는 경우 awsvpc
네트워크 모드 및 보안 그룹을 사용해야 합니다. 서비스가 ALB를 기반으로 하는 경우 보안 그룹을 사용하여 ALB와 동일한 보안 그룹을 사용하는 다른 네트워크 리소스에서 들어오는 인바운드 트래픽만 허용하세요. 애플리케이션이 NLB를 기반으로 하는 경우 Amazon VPC CIDR 범위 및 NLB에 할당된 고정 IP 주소에서 들어오는 인바운드 트래픽만 허용하도록 작업의 보안 그룹을 구성하세요.
또한 보안 그룹을 사용하여 Amazon RDS 데이터베이스와 같은 Amazon VPC 내의 다른 리소스와 작업 간의 트래픽을 제어해야 합니다.
네트워크 트래픽을 엄격하게 격리해야 하는 경우 별도의 Amazon VPC에 Amazon ECS 클러스터 생성
네트워크 트래픽을 엄격하게 격리해야 하는 경우 별도의 Amazon VPC에 클러스터를 생성해야 합니다. 보안 요구 사항이 엄격한 워크로드를 해당 요구 사항을 준수할 필요가 없는 워크로드가 포함된 클러스터에서 실행하지 마세요. 엄격한 네트워크 격리가 필수인 경우 별도의 Amazon VPC에 클러스터를 생성하고 Amazon VPC 엔드포인트를 사용하여 다른 Amazon VPC에 서비스를 선택적으로 노출하세요. 자세한 내용은 Amazon VPC 엔드포인트를 참조하세요.
Amazon ECS에 대해 보증되는 경우 AWS PrivateLink 엔드포인트 구성
적정한 사유가 있는 경우 AWS PrivateLink 엔드포인트를 구성해야 합니다. 보안 정책으로 인해 인터넷 게이트웨이(IGW)를 Amazon VPC에 연결할 수 없는 경우, Amazon ECS 및 기타 서비스(예: Amazon ECR, AWS Secrets Manager 및 Amazon CloudWatch)에 대한 AWS PrivateLink 엔드포인트를 구성하세요.
Amazon VPC 흐름 로그를 사용하여 Amazon ECS에서 장기 실행 태스크와 주고받는 트래픽 분석
Amazon VPC 흐름 로그를 사용하여 장기 실행 작업과 주고받는 트래픽을 분석해야 합니다. awsvpc
네트워크 모드를 사용하는 작업은 자체 ENI를 가져옵니다. 이렇게 하면 개별 작업과 주고받는 트래픽을 Amazon VPC 흐름 로그를 사용하여 모니터링할 수 있습니다. Amazon VPC 흐름 로그(v3)의 최신 업데이트에서는 VPC ID, 서브넷 ID 및 인스턴스 ID를 비롯한 트래픽 메타데이터를 포함하도록 로그를 보강합니다. 이 메타데이터를 사용하면 조사 범위를 좁힐 수 있습니다. 자세한 내용은 Amazon VPC 흐름 로그를 참조하세요.
참고
컨테이너의 일시적인 특성 때문에 흐름 로그가 다른 컨테이너 사이나 컨테이너와 다른 네트워크 리소스 사이의 트래픽 패턴을 분석하는 데 항상 효과적인 방법은 아닙니다.