Amazon CloudWatch Events를 사용하여 GuardDuty 결과에 대한 사용자 지정 응답 생성 - Amazon GuardDuty

Amazon CloudWatch Events를 사용하여 GuardDuty 결과에 대한 사용자 지정 응답 생성

GuardDuty는 결과에 변경 사항이 있는 경우 Amazon CloudWatch Events에 대한 이벤트를 생성합니다. 결과가 변경되면 새로 생성된 결과 또는 새로 집계된 결과를 포함하여 CloudWatch 이벤트를 생성합니다. 이벤트는 최선의 작업을 기반으로 발생됩니다.

모든 GuardDuty 결과에는 결과 ID가 할당됩니다. GuardDuty는 모든 결과에 대해 고유한 결과 ID를 가진 CloudWatch 이벤트를 생성합니다. 기존 결과의 후속 발생은 모두 원래 결과에 집계됩니다. 자세한 내용은 GuardDuty 결과 집계 단원을 참조하십시오.

참고

계정이 GuardDuty 위임된 관리자인 경우 CloudWatch 이벤트는 본인의 계정뿐만 아니라 결과가 생성된 멤버 계정에도 게시됩니다.

GuardDuty와 함께 CloudWatch 이벤트를 사용하면 GuardDuty 결과를 통해 밝혀진 보안 문제에 대응할 수 있도록 작업을 자동화할 수 있습니다.

CloudWatch Events에 기반한 GuardDuty 결과에 대해 알림을 받으려면 GuardDuty에 대한 CloudWatch Events 규칙 및 목표를 생성해야 합니다. 이 규칙은 규칙에 지정된 목표에 대해 GuardDuty에서 발생하는 결과에 대한 알림을 보내도록 CloudWatch를 활성화합니다. 자세한 내용은 GuardDuty에 대한 CloudWatch Events 규칙 및 대상 생성(CLI) 단원을 참조하십시오.

GuardDuty의 CloudWatch Events 알림 빈도

고유한 결과 ID가 있는 새로 생성된 결과 알림

GuardDuty는 결과 발생 후 5분 이내에 CloudWatch 이벤트를 기반으로 알림을 보냅니다. 이 이벤트(및 알림)는 또한 고유한 ID를 포함한 이 결과가 생성된 이후 5분마다 발생하는 이 결과의 모든 후속 발생을 포함합니다.

참고

새로 생성된 결과에 대한 알림의 기본 빈도는 5분입니다. 이 빈도는 업데이트할 수 없습니다.

후속 결과 발생에 대한 알림

기본적으로 GuardDuty는 고유한 결과 ID가 있는 모든 결과에 대해 6시간 간격 내에 발생하는 특정 결과 유형의 모든 후속 발생을 단일 이벤트로 집계합니다. 이후 GuardDuty는 이 이벤트를 기반으로 이러한 후속 발생에 대한 알림을 보냅니다. 기존 결과의 후속 발생에 대해 GuardDuty는 6시간마다 CloudWatch 이벤트를 기반으로 알림을 보냅니다.

관리자 계정만 후속 결과 발생에 대해 CloudWatch 이벤트로 전송된 알림의 기본 빈도를 사용자 지정할 수 있습니다. 멤버 계정의 사용자는 이 빈도 값을 사용자 지정할 수 없습니다. 관리자 계정이 자신의 계정에 설정한 빈도 값은 모든 멤버 계정의 GuardDuty 기능에 적용됩니다. 관리자 계정의 사용자가 이 빈도 값을 1시간으로 설정하면 모든 멤버 계정도 후속 결과 발생에 대한 알림 수신 빈도로 1시간을 사용하게 됩니다. 자세한 내용은 Amazon GuardDuty에서 다중 계정 단원을 참조하십시오.

참고

관리자 계정에서는 후속 검색어 발생에 대한 알림의 기본 빈도를 사용자 지정할 수 있습니다. 가능한 값은 15분, 1시간 또는 기본값 6시간입니다. 이러한 알림의 빈도 설정에 대한 자세한 내용은 5단계 - 업데이트된 활성 결과 내보내기 빈도 설정하기 섹션을 참조하세요.

CloudWatch Events로 보관된 GuardDuty 결과 모니터링

수동으로 보관된 결과는 이 결과(보관 후 생성됨)의 초기 및 후속 발생이 위에서 설명한 빈도당 CloudWatch Events에 전송됩니다.

자동으로 보관된 결과는 이 결과(보관 후 생성됨)의 초기 및 후속 발생이 위에서 설명한 빈도당 CloudWatch Events에 전송되지 않습니다.

GuardDuty에 대한 CloudWatch 이벤트 형식

GuardDuty에 대한 CloudWatch 이벤트의 형식은 다음과 같습니다.

{ "version": "0", "id": "cd2d702e-ab31-411b-9344-793ce56b1bc7", "detail-type": "GuardDuty Finding", "source": "aws.guardduty", "account": "111122223333", "time": "1970-01-01T00:00:00Z", "region": "us-east-1", "resources": [], "detail": {GUARDDUTY_FINDING_JSON_OBJECT} }
참고

세부 정보 값은 단일 결과에 대한 JSON 세부 정보를 객체로 반환하지만, 배열 내에서 여러 결과를 지원할 수 있는 “결과” 값을 반환합니다.

GUARDDUTY_FINDING_JSON_OBJECT에 포함된 모든 파라미터의 전체 목록은 GetFindings 단원을 참조하십시오. GUARDDUTY_FINDING_JSON_OBJECT에 보이는id 파라미터가 이전에 설명한 결과 ID입니다.

GuardDuty 결과를 알리는 CloudWatch Events 규칙 생성(콘솔)

GuardDuty에서 CloudWatch Events를 사용하면 GuardDuty 결과 이벤트를 메시징 허브로 전송하여 GuardDuty 결과의 가시성을 높이는 데 도움이 되는 자동 결과 알림을 설정할 수 있습니다. 이 주제에서는 SNS 주제를 설정한 다음 해당 주제를 CloudWatch Events 이벤트 규칙에 연결하여 결과 알림을 이메일, Slack 또는 Amazon Chime으로 보내는 방법을 보여줍니다.

Amazon SNS 주제 및 엔드포인트 설정

시작하려면 먼저 Amazon Simple Notification Service에서 주제를 설정하고 엔드포인트를 추가해야 합니다. 자세한 내용은 Amazon Simple Notification Service 개발자 안내서시작하기를 참조하세요.

이 절차는 GuardDuty 결과 데이터를 전송할 위치를 설정합니다. 이벤트 규칙 생성 중 또는 생성 후에 CloudWatch Events 이벤트 규칙에 SNS 주제를 추가할 수 있습니다.

Email setup
SNS 주제 생성
  1. Amazon SNS 콘솔(https://console.aws.amazon.com/sns/v3/home)에 로그인합니다.

  2. 탐색 창에서 주제를 선택한 다음 주제 생성을 선택합니다.

  3. 주제 생성 섹션에서 표준을 선택합니다. 다음으로 주제 이름을 입력합니다(예: GuardDuty_to_Email). 기타 세부 정보는 선택 사항입니다.

  4. 주제 생성을 선택합니다. 새로운 주제에 대한 주제 세부 정보가 열립니다.

  5. 구독 섹션에서 구독 생성을 선택합니다.

    1. 프로토콜 메뉴에서 이메일을 선택합니다.

    2. 엔드포인트 필드에서 알림을 받을 이메일 주소를 추가합니다.

      참고

      구독을 생성한 후 이메일 클라이언트를 통해 구독을 확인해야 합니다.

    3. 구독 생성을 선택합니다.

  6. 받은 편지함에서 구독 메시지를 확인하고 구독 확인을 선택합니다.

Slack setup
SNS 주제 생성
  1. Amazon SNS 콘솔(https://console.aws.amazon.com/sns/v3/home)에 로그인합니다.

  2. 탐색 창에서 주제를 선택한 다음 주제 생성을 선택합니다.

  3. 주제 생성 섹션에서 표준을 선택합니다. 다음으로 주제 이름을 입력합니다(예: GuardDuty_to_Slack). 기타 세부 정보는 선택 사항입니다. 주제 생성을 선택하여 마무리합니다.

AWS Chatbot 클라이언트 구성
  1. AWS Chatbot 콘솔로 이동

  2. 구성된 클라이언트 패널에서 새 클라이언트 구성을 선택합니다.

  3. Slack을 선택하고 ‘구성’을 선택하여 확인합니다.

    참고

    Slack을 선택할 때는 ‘허용’을 선택하여 AWS Chatbot의 채널 액세스 권한을 확인해야 합니다.

  4. 새 채널 구성을 선택하여 구성 세부 정보 창을 엽니다.

    1. 채널 이름을 입력합니다.

    2. Slack 채널의 경우 사용할 채널을 선택합니다. AWS Chatbot에서 프라이빗 Slack 채널을 사용하려면 프라이빗 채널을 선택합니다.

    3. Slack에서 채널 이름을 마우스 오른쪽 버튼으로 클릭하고 링크 복사를 선택하여 프라이빗 채널의 채널 ID를 복사합니다.

    4. AWS 관리 콘솔의 AWS Chatbot 창에서 Slack에서 복사한 ID를 프라이빗 채널 ID 필드에 붙여넣습니다.

    5. 권한에서 아직 역할이 없는 경우 템플릿을 사용하여 IAM 역할을 생성하도록 선택합니다.

    6. 정책 템플릿에서 Notification permissions를 선택합니다. 이는 AWS Chatbot에 대한 IAM 정책 템플릿입니다. CloudWatch 경보, 이벤트 및 로그, Amazon SNS 주제에 대해 필요한 읽기 및 나열 권한을 제공합니다.

    7. 이전에 SNS 주제를 만든 리전을 선택한 다음 생성한 Amazon SNS 주제를 선택하여 Slack 채널에 알림을 전송합니다.

  5. 구성을 선택합니다.

Chime setup
SNS 주제 생성
  1. Amazon SNS 콘솔(https://console.aws.amazon.com/sns/v3/home)에 로그인합니다.

  2. 탐색 창에서 주제를 선택한 다음 주제 생성을 선택합니다.

  3. 주제 생성 섹션에서 표준을 선택합니다. 다음으로 주제 이름을 입력합니다(예: GuardDuty_to_Chime). 기타 세부 정보는 선택 사항입니다. 주제 생성을 선택하여 마무리합니다.

AWS Chatbot 클라이언트 구성
  1. AWS Chatbot 콘솔로 이동

  2. 구성된 클라이언트 패널에서 새 클라이언트 구성을 선택합니다.

  3. Chime을 선택하고 ‘구성’을 선택하여 확인합니다.

  4. 구성 세부 정보 창에서 채널 이름을 입력합니다.

  5. Chime에서 원하는 채팅룸을 엽니다.

    1. 오른쪽 상단 모서리에 있는 기어 모양 아이콘을 선택하고 Manage webhooks(Webhook 관리)를 선택합니다.

    2. URL 복사를 선택하여 웹후크 URL을 클립보드에 복사합니다.

  6. AWS 관리 콘솔의 AWS Chatbot 창에서 웹후크 URL 필드에 복사한 URL을 붙여넣습니다.

  7. 권한에서 아직 역할이 없는 경우 템플릿을 사용하여 IAM 역할을 생성하도록 선택합니다.

  8. 정책 템플릿에서 Notification permissions를 선택합니다. 이는 AWS Chatbot에 대한 IAM 정책 템플릿입니다. CloudWatch 경보, 이벤트 및 로그, Amazon SNS 주제에 대해 필요한 읽기 및 나열 권한을 제공합니다.

  9. 이전에 SNS 주제를 만든 리전을 선택한 다음 생성한 Amazon SNS 주제를 선택하여 Chime 룸에 알림을 전송합니다.

  10. 구성을 선택합니다.

GuardDuty 결과에 대한 CloudWatch 이벤트 설정

  1. https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 창에서 규칙을 선택한 다음 규칙 생성을 선택합니다.

  3. 서비스 이름 메뉴에서 GuardDuty를 선택합니다.

  4. 이벤트 유형 메뉴에서 GuardDuty 결과를 선택합니다.

  5. 이벤트 패턴 미리 보기에서 편집을 선택합니다.

  6. 아래 JSON 코드를 이벤트 패턴 미리보기에 붙여넣고 저장을 선택합니다.

    { "source": [ "aws.guardduty" ], "detail-type": [ "GuardDuty Finding" ], "detail": { "severity": [ 4, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6, 6.0, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 6.9, 7, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8, 7.9, 8, 8.0, 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7, 8.8, 8.9 ] } }
    참고

    위의 코드는 중간에서 높음에 이르는 결과에 대해 알립니다.

  7. 대상 섹션에서 대상 추가를 클릭합니다.

  8. 대상 선택 메뉴에서 SNS 주제를 선택합니다.

  9. 주제 선택에서 1단계에서 생성한 SNS 주제의 이름을 선택합니다.

  10. 이벤트에 대한 입력을 구성합니다.

    • Chime 또는 Slack에 대한 알림을 설정하고 11단계로 건너뛴 경우 입력 유형의 기본값은 일치하는 이벤트로 설정됩니다.

    • SNS를 통한 이메일 알림을 설정하는 경우 아래 단계에 따라 받은 편지함으로 전송되는 메시지를 사용자 지정합니다.

    1. 입력 구성을 확장한 후 입력 변환기를 선택합니다.

    2. 다음 코드를 복사하여 입력 경로 필드에 붙여넣습니다.

      { "severity": "$.detail.severity", "Account_ID": "$.detail.accountId", "Finding_ID": "$.detail.id", "Finding_Type": "$.detail.type", "region": "$.region", "Finding_description": "$.detail.description" }
    3. 다음 코드를 복사하고 입력 템플릿 필드에 붙여넣어 이메일의 형식을 지정합니다.

      "AWS <Account_ID> has a severity <severity> GuardDuty finding type <Finding_Type> in the <region> region." "Finding Description:" "<Finding_description>. " "For more details open the GuardDuty console at https://console.aws.amazon.com/guardduty/home?region=<region>#/findings?search=id%3D<Finding_ID>"
  11. 세부 정보 구성을 클릭합니다.

  12. 규칙 세부 정보 구성 페이지에서 해당 규칙의 이름설명을 입력한 후 규칙 생성을 선택합니다.

GuardDuty에 대한 CloudWatch Events 규칙 및 대상 생성(CLI)

다음 절차는 AWS CLI 명령을 사용하여 GuardDuty 서비스에 대한 CloudWatch Events 규칙 및 대상을 만드는 방법을 보여줍니다. 특히, GuardDuty에서 생성한 모든 결과에 대한 이벤트를 보내고 결과에 대한 대상으로 AWS Lambda 함수를 추가하도록 CloudWatch를 활성화하는 규칙을 생성하는 방법을 보여줍니다.

참고

Lambda 함수 외에도 GuardDuty 및 CloudWatch에서는 Amazon EC2 인스턴스, Amazon Kinesis Streams, Amazon ECS 작업, AWS Step Functions 상태 머신, run 명령 및 기본 제공 대상과 같은 대상 유형을 지원합니다.

또한 CloudWatch Events 콘솔을 통해 GuardDuty에 대한 CloudWatch Events 규칙 및 대상을 생성할 수 있습니다. 자세한 내용과 구체적인 단계는 Creating a CloudWatch Events rule that triggers on an event를 참조하세요. 이벤트 소스 섹션에서 서비스 이름GuardDuty, 이벤트 유형GuardDuty Finding을 선택합니다.

규칙 및 대상을 만들려면
  1. GuardDuty에서 생성한 모든 결과에 대한 이벤트를 보내도록 CloudWatch를 활성화하는 규칙을 만들려면 다음 CloudWatch CLI 명령을 실행합니다.

    AWS events put-rule --name Test --event-pattern "{\"source\":[\"aws.guardduty\"]}"

    중요

    규칙을 추가적으로 사용자 지정하여 GuardDuty에서 생성한 결과의 하위 집합에 대해서만 이벤트를 보내도록 CloudWatch에 지시할 수 있습니다. 이 하위 집합은 규칙에서 지정되는 결과 속성 또는 속성을 기반으로 합니다. 예를 들어 다음 CLI 명령을 사용하여 심각도가 5 또는 8인 GuardDuty 결과에 대해서만 CloudWatch에서 이벤트를 보낼 수 있는 규칙을 생성합니다.

    AWS events put-rule --name Test --event-pattern "{\"source\":[\"aws.guardduty\"],\"detail-type\":[\"GuardDuty Finding\"],\"detail\":{\"severity\":[5,8]}}"

    이를 위해 JSON에서 사용할 수 있는 속성 값을 GuardDuty 결과에 사용할 수 있습니다.

  2. 1단계에서 만든 규칙에 대한 대상으로 Lambda 함수를 연결하려면 다음 CloudWatch CLI 명령을 실행합니다.

    AWS events put-targets --rule Test --targets Id=1,Arn=arn:aws:lambda:us-east-1:111122223333:function:<your_function>

    참고

    위의 명령에서 <your_function>을 GuardDuty 이벤트의 실제 Lambda 함수로 바꿔야 합니다.

  3. 대상을 간접적으로 호출하는 데 필요한 권한을 추가하려면 다음 Lambda CLI 명령을 실행합니다.

    AWS lambda add-permission --function-name <your_function> --statement-id 1 --action 'lambda:InvokeFunction' --principal events.amazonaws.com

    참고

    위의 명령에서 <your_function>을 GuardDuty 이벤트의 실제 Lambda 함수로 바꿔야 합니다.

    참고

    위의 절차에서는 CloudWatch 이벤트를 트리거하는 규칙의 대상으로 Lambda 함수를 사용합니다. 그런 다음 CloudWatch Events를 트리거하기 위한 대상으로 다른 AWS 리소스를 구성할 수도 있습니다. 자세한 내용은 PutTargets 단원을 참조하십시오.

GuardDuty 다중 계정 환경에 대한 CloudWatch Events

GuardDuty 관리자의 경우 멤버 계정에서 발생한 해당 결과에 따라 계정의 CloudWatch 이벤트 규칙이 트리거됩니다. 이전 섹션에서 설명한 것과 같이 관리자 계정에서 CloudWatch Events를 통해 결과 알림을 설정하면 관리자 자신의 계정 외에도 멤버 계정에서 생성되는 심각도가 높음 또는 중간인 결과의 알림을 받게 됩니다.

결과의 JSON 세부 정보에 있는 accountId 필드를 사용하여 GuardDuty 결과의 출처 멤버 계정을 식별할 수 있습니다.

콘솔에서 환경의 특정 멤버 계정에 대한 사용자 지정 이벤트 규칙을 작성하려면 새 규칙을 생성하고 다음 템플릿을 이벤트 패턴 미리 보기에 붙여넣고 이벤트를 트리거하려는 멤버 계정의 계정 ID를 추가합니다.

{ "source": [ "aws.guardduty" ], "detail-type": [ "GuardDuty Finding" ], "detail": { "accountId": [ "123456789012" ] } }
참고

이 예시에서는 나열된 계정 ID의 모든 결과에 대해 트리거됩니다. JSON 구문에 따라 여러 ID를 쉼표로 구분하여 추가할 수 있습니다.