AWS 기술 블로그

GuardDuty 를 이용한 ECS Fargate 및 EC2 런타임 모니터링

이 글은 Security Blog에 게시된 Using Amazon GuardDuty ECS runtime monitoring with Fargate and Amazon EC2 by Luke Notley and Arran Peterson 한국어 번역 및 편집하였습니다.

Docker와 같은 컨테이너화 기술과 Amazon Elastic Container Service(Amazon ECS)와 같은 오케스트레이션 솔루션은 이동성과 확장성의 이점 때문에 많은 고객들에게 인기가 있습니다. 그리고 이런 컨테이너 환경은 보안 관점에서 본다면 고객이 컨테이너의 상태, 성능 및 보안을 위해 컨테이너 런타임 모니터링이 필수적이라고 할 수 있습니다. 그리고 AWS 가 제공하는 Amazon GuardDuty, Amazon InspectorAWS Security Hub와 같은 AWS 보안 서비스는 컨테이너환경의 보안을 위해 위협 탐지, 취약성 평가, 중앙 집중식 보안 관리 및 기본 Amazon Web Services(AWS) 컨테이너 런타임 모니터링을 제공하여 컨테이너 보안을 강화하는 데 중요한 역할을 수행합니다.

GuardDuty는 AWS 계정 및 워크로드를 지속적으로 모니터링하여 악의적인 활동이 있는지  여부에 대한 가시성과 교정을 위한 상세한 보안 결과를 제공하는 위협 탐지 서비스입니다. GuardDuty는 여러 AWS 데이터 소스에서 분당 수백억 개의 이벤트를 분석하고, GuardDuty 보안 에이전트를 사용하여 Amazon Elastic Kubernetes Service(Amazon EKS), Amazon ECS 및 Amazon Elastic Compute(Amazon EC2) 워크로드에 대한  런타임 모니터링 기능을 제공합니다. 이를 통해 식별된 탐지 결과는 GuardDuty 콘솔에서 확인할 수 있으며, API 를 사용하는 경우 모든 GuardDuty 탐지 결과의 복제본이 Amazon EventBridge로 전송되기 때문에 수집된 결과를 운영 워크플로에 통합할 수도 있습니다. 또한, GuardDuty 탐지 결과는 Security Hub로 전송되기 때문에, 계정 및 지정된 AWS 리전의 다른 보안 서비스의 탐지 결과 뿐만 아니라 GuardDuty 조사 결과도 함께 수집하고 상호 연관관계를 분석하실 수도 있습니다.

AWS 는 최근에 30개 이상의 보안 조사 결과로부터 런타임 위협을 탐지하는 Amazon ECS용 GuardDuty 런타임 모니터링의 정식 출시하였습니다. 그리고 AWS Fargate 와 Amazon EC2 ECS 클러스터를 보호하는 Amazon EC2용 GuardDuty 런타임 모니터링의 공개 미리보기(Preview)를 발표했습니다.

이 블로그에서는 AWS 공동 책임 모델에 대한 개요와 함께 이 모델이 AWS에서 실행되는 컨테이너 워크로드 보안과 어떤 관련이 있는지 설명합니다. 그리고, ECS, EC2 및 EKS 기능을 위한 새로운 GuardDuty 런타임 모니터링을 구성하고 사용하는 단계를 설명합니다. 추가적으로, 이미 GuardDuty EKS 런타임 모니터링을 사용하고 있는 고객분들을 위해 이 블로그는 GuardDuty 런타임 모니터링으로 마이그레이션하는 단계에 대한 정보도 제공합니다.

AWS 공동 책임 모델과 컨테이너

Amazon ECS 워크로드와 관련하여 AWS의 공동 책임 모델을 이해하는 것은 꼭 필요한 과정 중 하나입니다. Amazon ECS의 경우, AWS는 ECS 컨트롤 플레인과 기본 인프라 데이터 플레인 영역에 대한 책임을 담당합니다. EC2 인스턴스에서 Amazon ECS를 사용하는 경우라면, 고객은 Fargate에서 ECS를 사용할 때보다 더  많은 보안책임이 부여됩니다. 특히, EC2 인스턴스의 ECS 에이전트 및  노드 구성을 관리하고 감독 할 책임은 고객에게 있습니다.

Figure 1: AWS Shared Responsibility Model – Amazon ECS on EC2

그림 1: AWS 공동 책임 모델 – Amazon ECS on EC2

Fargate에서는 각 작업(Task)이 전용 가상 머신(VM)내에서 동작하며 작업 간에 운영 체제나 커널 리소스를 공유하지 않습니다. Fargate 환경에서 AWS는 클라우드의 기본 인스턴스와 작업을 실행하는 데 사용되는 런타임에 대한 보안을 책임집니다.

Figure 2: AWS Shared Responsibility Model – Amazon ECS on Fargate

그림 2: AWS 공동 책임 모델 – Amazon ECS on Fargate

컨테이너 런타임 이미지를 배포할 때 사용자의 책임영역에는 애플리케이션 구성, 컨테이너 보안 보장, 작업 런타임 보안의 모범 사례 적용 등이 포함됩니다. 이러한 모범 사례는 공격자가 로컬 컨테이너 프로세스의 범위를 넘어 통제권을 확대하지 못하도록 제한하는데 도움이 됩니다.

Amazon GuardDuty 런타임 모니터링 통합

새로운 기능 출시와 함께 EKS 런타임 모니터링은 이제 GuardDuty 런타임 모니터링 메뉴로 통합되었습니다. 이번 통합을 통해 각 리소스 유형 (EC2 인스턴스, ECS 클러스터 또는 EKS 클러스터) 에 대해 런타임 모니터링 구성을 별도로 관리할 필요 없이 AWS 계정의 설정을 통해 한 번에 관리할 수 있게 되었습니다. 이제 GuardDuty 보안 에이전트는 활성화 또는 비활성화라는 공통된 값을 사용하므로, 각 리전에서 각 리소스 유형의 런타임 모니터링을 활성화하고 GuardDuty 보안 에이전트를 관리할 수 있도록 하는 가시성 확보가 가능합니다.

참고: GuardDuty 보안 에이전트는 지원되는 자원 유형에 따라 반드시 활성화되어야 합니다.

Figure 3: GuardDuty Runtime Monitoring overview

그림 3: GuardDuty 런타임 모니터링 개요

다음 섹션에서는 GuardDuty 런타임 모니터링을 활성화하는 방법과 기존 EKS 런타임 모니터링 배포를 재구성하는 방법에 대해 설명합니다. 또한 ECS Fargate 및 EC2 리소스 유형에 대한 모니터링을 활성화하는 방법도 설명합니다.

이 기능 출시 이전에 EKS 런타임 모니터링 기능을 이미 사용하고 있었다면 업데이트된 GuardDuty용 AWS Management 콘솔에서 몇 가지 구성 옵션이 업데이트 된 것을 확인하실 수 있습니다. GuardDuty 의 런타임 모니터링 기능은 모든 계정에 활성화하는 것을 권장하며 이를 위한 구성을 위해서는 다음과 같은 절차를 따르시기 바랍니다.

  1. GuardDuty 콘솔의 탐색 창의 “Protection Plans(방지 플랜)”에서 “Runtime Monitoring(런타임 모니터링)”을 선택합니다.
  2. Configuration(구성) 탭을 선택한 다음 “편집”을 선택합니다.
  3. 런타임 모니터링에서 “Enable for all accounts(모든 계정에 대해 활성화)”를 선택합니다.
  4. 자동 에이전트 구성 — Amazon EKS에서 “Enable for all accounts(모든 계정에 대해 활성화)”를 선택했는지 확인합니다.

Figure 4: Edit GuardDuty Runtime Monitoring configuration

그림 4: GuardDuty 런타임 모니터링 설정 수정

GuardDuty ECS 런타임 모니터링을 활성화하지 않고 EKS 런타임 모니터링을 계속 사용하려는 경우 혹은 런타임 모니터링 보호 기능이 해당 리전에서 아직 지원되지 않는 경우에는 AWS 명령줄 인터페이스 (AWS CLI) 또는 API를 사용하여 EKS 런타임 모니터링을 구성할 수 있습니다. 이 마이그레이션에 대한 자세한 내용은 EKS 런타임 모니터링에서 GuardDuty 런타임 모니터링으로의 마이그레이션을 참조하시기 바랍니다.

Amazon GuardDuty 런타임 모니터링 for Fargate

Fargate 용량 공급자를 사용하는 ECS의 경우, GuardDuty는 보안 에이전트를 필수 작업 컨테이너와 함께 사이드카 컨테이너 형태로 배포합니다. 이렇게 하면 Fargate 작업의 배포를 변경할 필요가 없으며 새 작업에 GuardDuty 런타임 모니터링이 적용되는지 확인할 수 있습니다. GuardDuty 보안 에이전트 사이드카 컨테이너를 정상 상태로 시작할 수 없는 경우 ECS Fargate 작업의 실행은 중단되지 않습니다.

Fargate용 GuardDuty ECS 런타임 모니터링을 사용하는 경우, 에이전트는 AWS 계정 내의 Amazon ECS Fargate 클러스터에 설치하거나 선택한 클러스터에만 설치하실 수 있습니다. 다음 섹션에서는 서비스를 활성화하고 에이전트를 프로비저닝하는 방법을 설명하도록 하겠습니다.

사전 요구 사항

GuardDuty를 활성화하지 않은 경우, 무료 평가판 및 가격에 대해 자세히 알아보고 “GuardDuty 시작하기“에 나와 있는 단계에 따라 서비스를 설정하고 계정 모니터링을 시작하시기 바랍니다. 필요한 경우, AWS CLI를 사용하여 GuardDuty를 활성화하실 수도 있습니다. 지원되는 최소 Fargate 환경 버전 및 컨테이너 운영 체제는 AWS Fargate 지원 사전 요구 사항 (Amazon ECS만 해당) 에서 확인할 수 있습니다. Amazon ECS 작업을 실행하는 데 사용되는 AWS Identity and Access Management (IAM) 역할에는 GuardDuty 사이드카 컨테이너를 다운로드할 수 있는 적절한 권한과 함께 Amazon ECR에 대한 액세스 권한이 제공되어야 합니다. AWS Fargate용 GuardDuty 에이전트를 호스팅하는 Amazon ECR 리포지토리에 대해 자세히 알아보려면 AWS Fargate의 GuardDuty 에이전트용 리포지토리 (Amazon ECS만 해당) 를 참조하시기 바랍니다.

Fargate 런타임 모니터링 활성화

ECS Fargate에 대한 GuardDuty 런타임 모니터링을 활성화하려면 다음 단계를 수행하시기 바랍니다.

  1. GuardDuty 콘솔의 탐색 창의 “Protection Plans(방지 플랜)”에서 “Runtime Monitoring(런타임 모니터링)”을 선택합니다.
  2. Configuration(구성) 탭을 선택한 다음 AWS Fargate (ECS only) 섹션에서 “Enable(활성화)”를 선택합니다.

Figure 5: GuardDuty Runtime Monitoring configuration

그림 5: GuardDuty 런타임 모니터링 설정

AWS Organizations 서비스를 이용하여 AWS 계정을 관리하고 여러 AWS 계정에서 ECS Fargate 클러스터를 사용하는 경우, GuardDuty에서 위임한 관리자 계정만 멤버 계정에 대해 GuardDuty ECS 런타임 모니터링을 활성화하거나 비활성화할 수 있습니다. GuardDuty는 Regional 서비스이므로 반드시 원하는 각 리전 내에서 활성화해야 합니다. 여러 계정을 사용하고 있고 GuardDuty를 중앙에서 관리하려는 경우라면 Amazon GuardDuty에서 여러 계정 관리를 참조하시기 바랍니다.

앞 단계에서 진행한 것과 동일한 절차를 사용하여 GuardDuty ECS 런타임 모니터링을 활성화하고 GuardDuty 보안 에이전트를 관리할 수 있습니다. 조직 내 구성원 계정에 대해 GuardDuty ECS 런타임 모니터링을 자동으로 활성화하는 것을 권장합니다.

ECS Fargate 신규 계정에 대해 GuardDuty 런타임 모니터링을 자동으로 활성화하려면 다음 단계를 수행하시기 바랍니다.

  1. GuardDuty 콘솔의 탐색 창에 있는 “Protection Plans(방지 플랜)”에서 “Runtime Monitoring(런타임 모니터링)”을 선택합니다.
  2. Configuration(구성)탭을 선택한 다음 편집을 선택합니다.
  3. 런타임 모니터링에서 “Enable for all accounts(모든 계정에 대해 활성화)”가 선택되어 있는지 확인합니다.
  4. Automated agent configuration(자동화된 에이전트 구성) — AWS Fargate (ECS only) 에서 “Enable for all accounts(모든 계정에 대해 활성화)”를 선택한 다음 저장을 선택합니다.

Figure 6: Enable ECS GuardDuty Runtime Monitoring for AWS accounts

그림 6: 다중 계정 환경에 대해 GuardDuty ECS 런타임 모니터링 활성화

Fargate용 GuardDuty ECS 런타임 모니터링을 활성화하면,  GuardDuty가 사용자 계정의 ECS 작업에 대한 런타임 활동 이벤트를 모니터링하고 분석할 수 있습니다. GuardDuty는 Fargate 작업을 배포하는 VPC의 AWS 계정에 Virtual Private Cloud(VPC) 엔드포인트를 자동으로 생성합니다. VPC 엔드포인트는 GuardDuty 에이전트가 원격 텔레메트리 정보 및 구성 데이터를 GuardDuty 서비스 API로 다시 전송하는 데 사용됩니다. GuardDuty가 ECS Fargate 클러스터의 런타임 이벤트를 수신하려면 세 가지 접근 방식 중 하나를 선택하여 완전 관리형 보안 에이전트를 배포할 수 있습니다.

– 기존 및 신규 ECS Fargate 클러스터를 모니터링합니다.

– 기존 및 신규 ECS Fargate 클러스터를 모니터링하고 지정한 ECS Fargate 클러스터를 예외처리합니다.

– 지정한 ECS 파게이트 클러스터만 모니터링합니다.

각 ECS Fargate 클러스터를 모니터링한 다음 필요에 따라 클러스터를 예외처리하는 것을 권장합니다. 이와 관련된 내용을 자세히 알아보려면 GuardDuty ECS 런타임 모니터링 구성을 참조하시기 바랍니다.

모든 ECS Fargate 클러스터 모니터링

GuardDuty가 계정 내 각 ECS Fargate 클러스터에 보안 에이전트를 자동으로 배포하고 관리하도록 하려는 경우 이 단계에서 설명하는 방법을 사용하시기 바랍니다. GuardDuty는 새 ECS Fargate 클러스터가 생성되면 보안 에이전트를 자동으로 설치합니다.

각 ECS 클러스터에서 ECS Fargate에 대한 GuardDuty 런타임 모니터링을 활성화하려면 다음 단계를 수행하시기 바랍니다.

  1. GuardDuty 콘솔의 탐색 창에 있는 “Protection Plans(방지 플랜)”에서 “Runtime Monitoring(런타임 모니터링)”을 선택합니다.
  2. Configuration(구성) 탭을 선택합니다.
  3. Automated agent configuration(자동화된 에이전트 구성) — AWS Fargate (ECS only) 에서 “Enable(활성화)”를 선택합니다.

Figure 7: Enable GuardDuty Runtime Monitoring for ECS clusters

그림 7: ECS 클러스터에 대한 GuardDuty 런타임 모니터링 활성화

선택한 ECS Fargate 클러스터를 제외한 모든 ECS Fargate 클러스터 모니터링

앞서 말씀드린 것처럼 GuardDuty는 각 ECS Fargate 클러스터에 보안 에이전트를 자동으로 설치합니다. GuardDuty 런타임 모니터링에서 ECS 파게이트 클러스터를 예외처리하려면 키-값 쌍인 GuardDutyManaged:False를 태그를 이용하여 예외처리가 가능합니다. 런타임 모니터링을 활성화하기 전이나 클러스터 생성 중에 이 예외처리 태그를 ECS Fargate 클러스터에 추가하여 자동 GuardDuty 모니터링을 방지하시기 바랍니다.

ECS 클러스터에 예외처리 태그를 추가하려면 다음 단계를 수행하시기 바랍니다.

  1. Amazon ECS 콘솔의 탐색 창에 있는 클러스터 아래에서 클러스터 이름을 선택합니다.
  2. 태그 탭을 선택합니다.
  3. 태그 관리를 선택하고 “GuardDutyManaged” 키를 입력하고 값을 “false”로 입력한 다음 저장을 선택합니다.

Figure 8: GuardDuty Runtime Monitoring ECS cluster exclusion tags

그림 8: GuardDuty ECS 런타임 모니터링 예외처리 태그

이러한 태그가 수정되지 않도록 하려면, 권한 있는 사용자 외에는 태그가 수정되지 않도록 IAM 정책을 설정할 수 있습니다.

선택한 ECS Fargate 클러스터 모니터링

GuardDuty가 계정 내 특정 ECS Fargate 클러스터에 대해서만 보안 에이전트의 배포 및 업데이트를 처리하도록 하려는 경우 선택한 ECS Fargate 클러스터를 모니터링할 수 있습니다. 이런 케이스는 Fargate에 대한 GuardDuty ECS 런타임 모니터링을 평가하려는 사용 사례일 수 있습니다. GuardDuty는 포함 태그를 사용하여 키-값 쌍 GuardDutyManaged:True로 태그가 지정된 ECS Fargate 클러스터에 대해서만 보안 에이전트를 자동으로 배포하고 관리합니다. 포함 태그를 사용하려면 AWS Fargate (ECS) 의 자동화된 에이전트 구성이 활성화되지 않았는지 확인하시기 바랍니다.

ECS 클러스터에 포함 태그를 추가하려면 다음 단계를 수행하시기 바랍니다:

  1. Amazon ECS 콘솔의 탐색 창에 있는 클러스터 아래에서 클러스터 이름을 선택합니다.
  2. 태그 탭을 선택합니다.
  3. 태그 관리를 선택하고 “GuardDutyManaged” 키를 입력하고 값을 “true”로 입력한 다음 저장을 선택합니다.

Figure 9: GuardDuty inclusion tags

그림 9: GuardDuty 포함 태그

이러한 태그가 수정되지 않도록 하려면 권한, 있는 사용자 외에는 태그가 수정되지 않도록  IAM 정책을 설정하여 태그 수정 권한을 제한할 수 있습니다.

Fargate 작업 수준 롤아웃

말씀드린 것처럼, Fargate용 GuardDuty ECS 런타임 모니터링을 활성화하면 새로 시작되는 작업에 GuardDuty 에이전트 사이드카 컨테이너가 포함됩니다. 이미 실행중인 장기 실행 작업의 경우 GuardDuty 사이드카 보안 컨테이너를 활성화하기 위해 작업 새로 고침을 위한 대상 배포를 고려할 수 있습니다. 이는 롤링 업데이트 (ECS 배포 유형) 또는 AWS CodeDeploy의 블루/그린 배포를 사용하여 달성하실 수 있습니다.

GuardDuty 에이전트가 작업을 위해 실행 중인지 확인하려면 접두사로 “aws-guardduty-agent-“가 붙은 추가 컨테이너가 있는지 확인할 수 있습니다. 배포에 성공하면 컨테이너의 상태가 “Running”으로 변경됩니다.

ECS 작업의 일부로 실행 중인 GuardDuty 에이전트 컨테이너를 확인하려면 다음 단계를 수행하시기 바랍니다:

  1. Amazon ECS 콘솔의 탐색 창에 있는 클러스터 아래에서 클러스터 이름을 선택합니다.
  2. 작업 탭을 선택합니다.
  3. 검토하려는 “작업 GUID”를 선택합니다.
  4. 컨테이너 섹션에서 GuardDuty 에이전트 컨테이너를 확인하실 수 있습니다.

Figure 10: View status of the GuardDuty sidecar container

그림 10. GuardDuty 의 사이드카 컨테이너 상태 확인

GuardDuty ECS on Fargate 커버리지 모니터링

ECS Fargate 클러스터의 커버리지 상태는 주기적으로 평가되며 정상 또는 비정상으로 분류될 수 있습니다. 비정상 클러스터는 구성상 문제가 있음을 나타내며 자세한 내용은 GuardDuty 런타임 모니터링 알림 섹션에서 확인하실 수 있습니다. GuardDuty ECS 런타임 모니터링을 활성화하고 클러스터에 보안 에이전트를 배포하면 GuardDuty 콘솔에서 새 ECS Fargate 클러스터 및 작업의 적용 범위 상태를 확인하실 수 있습니다.

커버리지 상태를 확인하기 위해서는 다음 단계를 수행하시기 바랍니다:

  1. GuardDuty 콘솔의 탐색 창에 있는 “Protection Plans(방지 플랜)”에서 “Runtime Monitoring(런타임 모니터링)”을 선택합니다.
  2. Runtime Coverage(런타임 커버리지) 탭을 선택한 다음 “ECS Cluster Runtime Coverage(ECS 클러스터 런타임 범위)”를 선택합니다.

Figure 11: GuardDuty Runtime ECS coverage status overview

그림 11: GuardDuty 런타임 ECS 커버리지 상태 개요

비정상으로 보고된 클러스터와 샘플 알림 스키마와 같은 클러스터 커버리지 문제에 대한 문제 해결 단계는 Coverage for Fargate (Amazon ECS만 해당) 리소스에서 확인하실 수 있습니다. 모니터링에 관한 보다 자세한 사항은 다음 섹션에서 확인하실 수 있습니다.

GuardDuty 런타임 모니터링 for EC2

GuardDuty의 Amazon EC2 런타임 모니터링은 Amazon EC2 인스턴스에 대한 위협 탐지를 제공하고 Amazon ECS의 관리형 EC2 인스턴스를 지원합니다. 그리고 GuardDuty가 텔레메트리 및 구성 데이터를 GuardDuty 서비스 API로 다시 전송하기 위해 사용하는 GuardDuty 보안 에이전트를 각 EC2 인스턴스에 설치해야 합니다.

사전 요구 사항

Amazon GuardDuty를 활성화하지 않은 경우 무료 평가판 및 요금에 대해 자세히 알아보고 GuardDuty 시작하기에 나와 있는 단계에 따라 서비스를 설정하고 계정 모니터링을 시작하시기 바랍니다. 또는, AWS CLI를 사용하여 GuardDuty를 활성화하실 수도 있습니다.

Amazon EC2 런타임 모니터링 기능을 사용하여 ECS 컨테이너 인스턴스를 모니터링하려면 운영 환경이 EC2 인스턴스 지원을 위한 사전 요구 사항을 충족해야 하며 모니터링하려는 EC2 인스턴스에 GuardDuty 보안 에이전트를 수동으로 설치해야 합니다. 또한, EC2용 GuardDuty 런타임 모니터링을 사용하려면 Amazon VPC 엔드포인트를 수동으로 생성해야 합니다. 만일 VPC에 이미 배포해서 사용하고 있는 GuardDuty VPC 엔드포인트가 있는 경우에는 VPC 엔드포인트를 다시 생성할 필요가 없습니다.

AWS Systems Manger를 사용하여 에이전트를 Amazon EC2 인스턴스에 배포하려는 경우 “Amazon GuardDuty-ConfigureRuntimeMonitoringSsmPlugin“이라는 이름의 아마존 소유의 Systems Manager 문서(Document)를 사용하실 수 있습니다. 또는 AWS Systems Manager에서 Amazon ECS 인스턴스를 관리하는지 여부에 관계없이 RPM 설치 스크립트를 사용하실 수도 있습니다.

EC2 GuardDuty 런타임 모니터링 활성화

GuardDuty 런타임 모니터링을 활성화하면 EC2에 대한 GuardDuty 런타임 모니터링이 자동으로 활성화됩니다.

GuardDuty 런타임 모니터링을 활성화하려면 다음 단계를 수행하시기 바랍니다:

  1. GuardDuty 콘솔의 탐색 창에 있는 “Protection Plans(방지 플랜)”에서 “Runtime Monitoring(런타임 모니터링)”을 선택합니다.
  2. Configuration(구성) 탭을 선택한 다음 Runtime Monitoring(런타임 모니터링) 섹션에서 “Enable(활성화)”를 선택합니다.

Figure 12: Enable GuardDuty runtime monitoring

그림 12: GuardDuty 런타임 모니터링 활성화

“사전 요구 사항”이 준비된 후 GuardDuty 런타임 모니터링을 활성화하면 GuardDuty는 EC2 인스턴스의 런타임 활동 이벤트를 모니터링하고 분석하기 시작합니다.

AWS 조직 내에서 AWS 계정을 관리하고 여러 AWS 계정의 EC2 클러스터에서 ECS를 실행하는 경우, GuardDuty 의 위임된 관리자만 멤버 계정에 대해 GuardDuty ECS 런타임 모니터링을 활성화하거나 비활성화할 수 있습니다. 여러 계정을 사용하고 있고 GuardDuty를 중앙에서 관리하려는 경우라면 Amazon GuardDuty에서의 다중 계정 관리를 참조하시기 바랍니다.

GuardDuty EC2 커버리지 모니터링

GuardDuty 런타임 모니터링을 활성화하고 Amazon EC2 인스턴스에 보안 에이전트를 배포하면 인스턴스의 커버리지 상태를 볼 수 있습니다.

EC2 인스턴스 커버리지 상태를 보려면 다음 단계를 수행하시기 바랍니다:

  1. GuardDuty 콘솔의 탐색 창에 있는 “Protection Plans(방지 플랜)”에서 “런타임 모니터링”을 선택합니다.
  2. 런타임 범위 탭을 선택한 다음 “EC2 Instance runtime coverage(EC2 인스턴스 런타임 범위)”를 선택합니다.

Figure 13: GuardDuty Runtime Monitoring coverage for EC2 overview

그림 13: EC2 에 대한 GuardDuty 런타임 모니터링 커버리지 개요

클러스터 커버리지 상태 알림은 커버리지 상태 변경 알림 구성에서 사용할 수 있는 알림 스키마를 사용하여 구성하실 수 있습니다. 모니터링에 관한 자세한 내용은 다음 섹션에서 확인하실 수 있습니다.

GuardDuty 런타임 모니터링 알림

ECS 클러스터 또는 EC2 인스턴스의 커버리지 상태가 비정상인 경우를 위해서는 여러가지 수행가능 한 문제 해결 단계가 있습니다.

ECS 클러스터 또는 EC2 인스턴스의 커버리지 상태 변경에 대한 최신 정보를 얻으려면 상태 변경 알림을 설정하는 것이 좋습니다. GuardDuty는 이러한 상태 변경을 AWS 계정과 연결된 EventBridge Bus에 게시하므로 알림을 수신하도록 Amazon EventBridge 규칙을 설정하여 이를 수행하실 수 있습니다.

다음 예제의 AWS CloudFormation 템플릿에서는 EventBridge 규칙을 사용하시면 Amazon Simple Notification Service(Amazon SNS) 에 알림을 보내고 이메일을 사용하여 SNS 주제를 구독할 수 있습니다.

AWSTemplateFormatVersion: "2010-09-09"
Description: CloudFormation template for Amazon EventBridge rules to monitor Healthy/Unhealthy status of GuardDuty Runtime Monitoring coverage status. This template creates the EventBridge and Amazon SNS topics to be notified via email on state change of security agents
Parameters:
  namePrefix:	
    Description: a simple naming convention for the SNS & EventBridge rules
    Type: String
    Default: GuardDuty-Runtime-Agent-Status
    MinLength: 1
    MaxLength: 50
    AllowedPattern: ^[a-zA-Z0-9\-_]*$
    ConstraintDescription: Maximum 50 characters of numbers, lower/upper case letters, -,_.
  operatorEmail:
    Type: String
    Description: Email address to notify if there are security agent status state changes
    AllowedPattern: "([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)"
    ConstraintDescription: must be a valid email address.
Resources:
  eventRuleUnhealthy:
    Type: AWS::Events::Rule
    Properties:
      EventBusName: default
      EventPattern:
        source:
          - aws.guardduty
        detail-type:
          - GuardDuty Runtime Protection Unhealthy
      Name: !Join [ '-', [ 'Rule', !Ref namePrefix, 'Unhealthy' ] ]
      State: ENABLED
      Targets:
        - Id: "GDUnhealthyTopic"
          Arn: !Ref notificationTopicUnhealthy
  eventRuleHealthy:
    Type: AWS::Events::Rule
    Properties:
      EventBusName: default
      EventPattern:
        source:
          - aws.guardduty
        detail-type:
          - GuardDuty Runtime Protection Healthy
      Name: !Join [ '-', [ 'Rule', !Ref namePrefix, 'Healthy' ] ]
      State: ENABLED
      Targets:
        - Id: "GDHealthyTopic"
          Arn: !Ref notificationTopicHealthy
  eventTopicPolicy:
    Type: 'AWS::SNS::TopicPolicy'
    Properties:
      PolicyDocument:
        Statement:
          - Effect: Allow
            Principal:
              Service: events.amazonaws.com
            Action: 'sns:Publish'
            Resource: '*'
      Topics:
        - !Ref notificationTopicHealthy
        - !Ref notificationTopicUnhealthy
  notificationTopicHealthy:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: !Join [ '-', [ 'Topic', !Ref namePrefix, 'Healthy' ] ]
      DisplayName: GD-Healthy-State
      Subscription:
      - Endpoint:
          Ref: operatorEmail
        Protocol: email
  notificationTopicUnhealthy:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: !Join [ '-', [ 'Topic', !Ref namePrefix, 'Unhealthy' ] ]
      DisplayName: GD-Unhealthy-State
      Subscription:
      - Endpoint:
          Ref: operatorEmail
        Protocol: email

GuardDuty 탐지 내역

GuardDuty가 잠재적 위협을 탐지하고 탐지결과를 생성하면 해당 탐지 결과의 세부 정보를 확인하실 수 있습니다. GuardDuty 에이전트는 호스트와 컨테이너에서 커널 공간 및 사용자 공간 이벤트를 수집합니다. 각 탐지 유형에 대한 자세한 정보 및 권장 개선 활동은 탐지 유형 찾기를 참조하시기 바랍니다. 그리고 필요에 따라 GuardDuty 콘솔을 사용하여 샘플 GuardDuty 런타임 모니터링 탐지 결과를 생성하거나 이 GitHub 스크립트를 사용하여 GuardDuty 내에서 몇 가지 기본 탐지를 생성하실 수도 있습니다.

ECS 탐지 결과 예시

GuardDuty 탐지 결과는 컨테이너 워크로드 또는 ECS 클러스터가 손상되거나 AWS 환경의 자격 증명 세트가 손상되었음을 나타낼 수 있습니다.

탐지 결과에 관한 전체 설명 및 개선 권장 사항을 확인하려면 다음 단계를 수행하시기 바랍니다:

  1. GuardDuty 콘솔의 탐색 창에서 “Findings(탐지 결과)”를 선택합니다.
  2. 탐색 창에서 탐지 결과를 선택한 다음 “Info(정보)” 하이퍼링크를 선택합니다.

Figure 14: GuardDuty example finding

그림 14: GuardDuty 샘플 탐지 내역

ECS Fargate 탐지 결과의 “ResoureType” 은 ECS 클러스터 또는 컨테이너일 수 있습니다. 탐지 결과 세부 정보의 리소스 유형이 “ECSCluster”인 경우 ECS Fargate 클러스터 내의 작업 또는 컨테이너가 잠재적으로 침해되었음을 나타냅니다. 클러스터의 작업 ARN 및 작업 정의 ARN 세부 정보와 함께 ECS 클러스터의 이름 및 Amazon Resource Name (ARN) 을 식별하실 수 있습니다.

영향을 받은 리소스, ECS 클러스터 세부 정보, 작업 세부 정보 및 검색 결과와 관련된 인스턴스 세부 정보를 확인하시려면 다음 단계를 수행하시기 바랍니다:

  1. GuardDuty 콘솔의 탐색 창에서 “탐지 결과”를 선택합니다.
  2. 탐색 창에서 ECS 클러스터와 관련된 탐지 결과를 선택한 다음 오른쪽 창에서 아래로 스크롤하여 다른 섹션 제목을 확인합니다.

Figure 15: GuardDuty finding details for Fargate

그림 15: Fargate 에 대한 GuardDuty 탐지 내역 상세 정보

작업 런타임 세부 정보는 잠재적으로 의심스러운 활동에 대한 정보를 제공합니다. 그림 16의 예시를 보면 사용자 환경에 나열된 ECS 컨테이너가 비트코인 또는 기타 암호화폐 관련 활동과 관련된 도메인을 쿼리하고 있음을 알 수 있습니다. 이로 인해 위협 행위자가 컴퓨팅 리소스를 제어하여 무단으로 암호화폐 채굴을 위해 용도를 변경하려고 시도할 수도 있습니다.

Figure 16: GuardDuty ECS example finding with action and process details

그림 16: 액션과 프로세스 디테일이 포함된 GuardDuty ECS 샘플 탐지 내역

ECS on EC2 탐지 결과 예시

EC2에서 탐지 결과가 생성되면 인스턴스 세부 정보, IAM 프로필 세부 정보, 인스턴스 태그 (그림 17 참조) 를 비롯한 추가 정보가 표시되며, 이 정보를 사용하여 영향을 받는 EC2 인스턴스를 식별하실 수 있습니다.

Figure 17: GuardDuty EC2 instance details for a finding

그림 17: 탐지 내역에 대한 GuardDuty EC2 인스턴스의 상세 정보

이러한 추가 인스턴스 수준 정보는 문제 해결 작업에 집중할 수 있도록 도와줍니다.

GuardDuty 탐지 내역 교정

작업 내 컨테이너의 런타임 동작을 적극적으로 모니터링하고 GuardDuty가 AWS 환경 내의 잠재적 보안 문제를 식별할 때는 다음과 같은 권장 사항을 적용하는 것을 고려해야 합니다. 이는 잠재적 보안 문제를 해결하고 AWS 계정의 잠재적 위협을 억제하는 데 도움을 드릴 수 있습니다.

  1. 영향을 받을 있는 Amazon ECS 클러스터 식별 — 런타임 모니터링 결과는 탐지 결과의 세부 정보 패널에 영향을 받을 수 있는 Amazon ECS 클러스터 세부 정보를 제공합니다.
  2. 잠재적 침해의 원인 평가 — 탐지된 결과가 컨테이너 이미지에서 발견되었는지 평가합니다. 리소스가 컨테이너 이미지에 있는 경우 이 이미지를 사용하는 다른 모든 작업을 식별하고 이미지의 출처를 평가하시기 바랍니다.
  3. 영향을 받는 작업 격리 — 영향을 받는 작업을 격리하려면 모든 트래픽을 거부하는 VPC 네트워크 규칙을 설정하여 작업에 들어오는 트래픽과 나가는 트래픽을 모두 차단하시기 바랍니다. 이 방법은 영향을 받는 작업에 대한 모든 연결을 차단하여 진행 중인 공격을 효과적으로 차단할 수 있습니다. 작업을 종료하면 추가 분석이 필요할 수도 있는 발견과 관련된 중요한 증거가 제거될 수 있다는 점에 유의의하시기 바랍니다. 작업 컨테이너가 기본 Amazon EC2 호스트에 액세스한 경우 관련 인스턴스 자격 증명이 침해되었을 수 있습니다. 자세한 내용은 침해된 AWS 자격 증명 교정을 참조하시기 바랍니다.

각 GuardDuty 런타임 모니터링 탐지 결과는 문제 해결에 관한 구체적인 규범적 가이드를 제공합니다. 각 탐지 결과 내에서 런타임 모니터링 결과 수정 링크를 선택하여 자세한 내용을 확인하시기 바랍니다.

교정활동을 위한 권장 사항을 확인하시려면 다음 단계를 수행하시기 바랍니다:

  1. GuardDuty 콘솔의 탐색 창에서 “Findings(결과)”를 선택합니다.
  2. 탐색 창에서 탐지 항목을 선택한 다음 “Info(정보)” 하이퍼링크를 선택하고 오른쪽 창에서 아래로 스크롤하여 수정 권장 사항 섹션을 확인합니다.

Figure 18: GuardDuty Runtime Monitoring finding remediation

그림 18: GuardDuty 런타임 모니터링 탐지 내역 교정

요약

이제 여러분들은 ECS 런타임 모니터링용 Amazon GuardDuty를 사용하여 파게이트 및 EC2 워크로드를 모니터링하실 수 있습니다. ECS 런타임 모니터링을 사용할 수 있는 리전의 전체 목록은 리전별 가용성을 참조하시기 바랍니다.

그리고, 모범 사례를 준수할 수 있도록 AWS Well-Architected Tool을 사용하여 컨테이너 애플리케이션을 주기적으로 평가하는 것을 권장합니다. 최근에 출시된 AWS Well-Architected Amazon ECS LensECS 모범 사례 가이드에 따라 Amazon ECS 애플리케이션의 컨테이너 기반 운영 및 문제 해결에 대한 전문 평가를 제공합니다. 그리고 이 렌즈는 콘솔에서 제공되는 AWS Well-Architected 도구에 통합하여 사용하실 수 있습니다.

보안 모니터링 및 위협 탐지에 관한 자세한 내용은 AWS Online Tech Talks을 참조하시기 바랍니다. AWS 보안 서비스에 대해 직접 경험하고 자세히 알아보려면 AWS Activation Days 웹 사이트를 방문하여 해당 지역의 워크숍을 찾아보시기 바랍니다.

이 게시물에 대한 피드백이 있으면 아래 의견 섹션에 의견을 제출하시기 바랍니다. 이 게시물에 대해 궁금한 점이 있으면 AWS Support에 문의 부탁드립니다.

Eunsu Shin

Eunsu Shin

신은수 Security Specialist Solutions Architect 는 보안 담당 SA로서 다양한 산업군의 고객들이 AWS 환경에서 수행해야하는 규정 준수 및 인증획득(개인정보보호법, 전자금융감독규정, ISMS-P 인증 등)을 위한 기술적인 도움을 제공해드리고 있습니다. 또한, 고객이 보다 안전하게 AWS 클라우드를 구성하고 운영할 수 있도록 다양한 모범 사례 공유, AWS 보안 서비스 교육 및 기술자문 등의 업무를 수행하고 있습니다.