CloudWatch Logs에 흐름 로그 게시 - Amazon Virtual Private Cloud

CloudWatch Logs에 흐름 로그 게시

흐름 로그는 흐름 로그 데이터를 Amazon CloudWatch에 직접 게시할 수 있습니다. CloudWatch Logs에 흐름 로그를 게시할 때는 Vended 로그에 대한 데이터 수집 및 아카이브 요금이 부과됩니다. 자세한 내용은 Amazon CloudWatch 요금을 참조하세요.

CloudWatch Logs에 게시하는 경우 흐름 로그 데이터는 로그 그룹에 게시되고, 각 네트워크 인터페이스는 로그 그룹에 고유의 로그 스트림을 가집니다. 로그 스트림에는 흐름 로그 레코드가 포함됩니다. 여러 개의 흐름 로그를 생성하여, 그 데이터를 같은 로그 그룹에 게시할 수 있습니다. 같은 로그 그룹의 하나 이상의 흐름 로그에 동일한 네트워크 인터페이스가 있을 경우 로그 스트림은 하나로 병합됩니다. 한 흐름 로그에서는 거부된 트래픽을 캡처하고, 다른 흐름 로그에서는 허용된 트래픽을 캡처하도록 지정한 경우, 병합된 로그 스트림은 모든 트래픽을 캡처합니다.

CloudWatch Logs에서 timestamp 필드는 흐름 로그 레코드에서 캡처된 시작 시간에 해당합니다. ingestionTime 필드는 CloudWatch Logs에서 플로우 로그 레코드가 수신된 날짜와 시간을 나타냅니다. 이 타임스탬프는 흐름 로그 레코드에 캡처된 종료 시간보다 이후입니다.

CloudWatch Logs에 플로우 로그를 게시하기 위한 IAM 역할

흐름 로그와 연결된 IAM 역할에는 CloudWatch Logs의 지정된 로그 그룹에 흐름 로그를 게시할 권한이 있어야 합니다. IAM 역할은 AWS 계정에 속해야 합니다.

IAM 역할에 연결된 IAM 정책에는 최소한 다음과 같은 권한이 포함되어야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Effect": "Allow", "Resource": "*" } ] }

또한 귀하의 역할에 흐름 로그 서비스의 역할 수임을 허용하는 신뢰 관계가 포함되어 있는지 확인해야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "vpc-flow-logs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

이미 존재하는 역할을 업데이트하거나 흐름 로그를 사용할 수 있도록 새로운 역할을 만들기 위해서 다음 절차를 따라하실 수 있습니다.

흐름 로그 역할 생성

흐름 로그에 대한 IAM 역할 생성

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

  2. 탐색 창에서 역할(Roles), 역할 생성(Create role)을 선택합니다.

  3. Select type of trusted entity(신뢰할 수 있는 엔터티 유형 선택)에서 AWS service(AWS 서비스)를 선택합니다. 사용 사례에서 EC2를 선택합니다. Next: Permissions(다음: 권한)를 선택합니다.

  4. 권한 정책 연결(Attach permissions policies) 페이지에서 다음: 태그(Next: Tags)를 선택하고 선택 사항으로써 태그를 추가합니다. 다음: 검토를 선택합니다.

  5. 역할 이름을 입력하고 선택적으로 설명을 제공합니다. 역할 생성을 선택합니다.

  6. 역할 이름을 선택합니다. 권한(Permissions)에서 인라인 정책 추가(Add inline policy), JSON을 선택합니다.

  7. CloudWatch Logs에 플로우 로그를 게시하기 위한 IAM 역할에서 첫 번째 정책을 복사한 후 창에 붙여 넣습니다. 정책 검토(Review policy)를 선택합니다.

  8. 정책 이름을 입력하고 정책 생성(Create policy)을 선택합니다.

  9. 역할 이름을 선택합니다. 신뢰 관계(Trust Relationships)로 들어가려면 신뢰 관계 편집(Edit Trust Relationship)을 선택합니다. 기존 정책 문서의 서비스 항목을 ec2.amazonaws.com 에서 vpc-flow-logs.amazonaws.com로 바꾸어 주십시오. 신뢰 정책 업데이트(Update Trust Policy)를 선택합니다.

  10. 요약(Summary) 페이지에서 사용자 역할에 대한 ARN을 확인합니다. 사용자의 흐름 로그를 만들 때 이 ARN이 필요합니다.

IAM 사용자가 역할을 전달할 수 있는 권한

또한 사용자에게 해당 흐름 로그와 연결된 IAM 역할에 대한 iam:PassRole 작업의 사용 권한이 있어야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["iam:PassRole"], "Resource": "arn:aws:iam::account-id:role/flow-log-role-name" } ] }

CloudWatch Logs에 게시하는 흐름 로그 생성

VPC, 서브넷 또는 네트워크 인터페이스에 대한 흐름 로그를 생성할 수 있습니다. IAM 사용자로 이러한 단계를 수행하는 경우 iam:PassRole 작업을 사용할 수 있는 권한이 있는지 확인하십시오. 자세한 내용은 IAM 사용자가 역할을 전달할 수 있는 권한 단원을 참조하십시오.

Prerequisite

대상 로그 그룹을 생성합니다. CloudWatch 콘솔에서 [로그 그룹 페이지(Log groups page)]를 선택하고[로그 그룹 만들기(Create log group)]를 선택합니다. 로그 그룹의 이름을 입력하고 [생성(Create)]을 선택합니다.

콘솔을 사용하여 네트워크 인터페이스에 대한 흐름 로그를 생성하려면

  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 네트워크 인터페이스(Network Interfaces)를 선택합니다.

  3. 하나 이상의 네트워크 인터페이스를 선택하고 [작업(Actions)], [흐름 로그 생성(Create flow log)]을 선택합니다.

  4. [필터(Filter)]에 기록할 트래픽 유형을 지정합니다. [모두(All)]를 선택하여 수락된 트래픽 및 거부된 트래픽을 기록하거나, [거부(Reject)]를 선택하여 거부된 트래픽만 기록하거나, [수락(Accept)]을 선택해 수락된 트래픽만 기록합니다.

  5. Maximum aggregation interval(최대 집계 간격)에서 흐름이 캡처되어 흐름 로그 레코드로 집계되는 최대 기간을 선택합니다.

  6. 대상(Destination)에서 CloudWatch Logs로 전송(Send to CloudWatch Logs)을 선택합니다.

  7. [대상 로그 그룹(Destination log group)]에서 생성한 대상 로그 그룹의 이름을 선택합니다.

  8. IAM 역할(IAM role)에서 CloudWatch Logs에 로그를 게시할 권한이 있는 역할의 이름을 지정합니다.

  9. 로그 레코드 형식(Log record format)에서 흐름 로그 레코드의 형식을 선택합니다.

    • 기본 형식을 사용하려면 AWS 기본 형식을 선택하세요.

    • 사용자 지정 형식을 사용하려면 사용자 지정 형식(Custom format)을 선택하고 로그 형식(Log format)에서 필드를 선택합니다.

    • 기본 필드가 포함된 사용자 지정 흐름 로그를 생성하려면 먼저 [AWS 기본 형식(AWS default format)]을 선택하고 [형식 미리 보기(Format preview)]에서 필드를 복사한 다음 [사용자 지정 형식(Custom format)]을 선택하고 텍스트 상자에 필드를 붙여 넣습니다.

  10. (선택 사항) 새 태그 추가(Add new tag)를 선택하여 흐름 로그에 태그를 적용합니다.

  11. 흐름 로그 생성(Create flow log)을 선택합니다.

콘솔을 사용하여 VPC 또는 서브넷에 대한 흐름 로그를 만들려면

  1. https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔을 엽니다.

  2. 탐색 창에서 [사용자 VPC(Your VPCs)] 또는 [서브넷(Subnets)]을 선택합니다.

  3. 하나 이상의 VPC 또는 서브넷에 대한 확인란을 선택한 다음 [작업(Actions)], [흐름 로그 만들기(Create flow log)]를 선택합니다.

  4. [필터(Filter)]에 기록할 트래픽 유형을 지정합니다. [모두(All)]를 선택하여 수락된 트래픽 및 거부된 트래픽을 기록하거나, [거부(Reject)]를 선택하여 거부된 트래픽만 기록하거나, [수락(Accept)]을 선택해 수락된 트래픽만 기록합니다.

  5. Maximum aggregation interval(최대 집계 간격)에서 흐름이 캡처되어 흐름 로그 레코드로 집계되는 최대 기간을 선택합니다.

  6. 대상(Destination)에서 CloudWatch Logs로 전송(Send to CloudWatch Logs)을 선택합니다.

  7. [대상 로그 그룹(Destination log group)]에서 생성한 대상 로그 그룹의 이름을 선택합니다.

  8. IAM 역할(IAM role)에서 CloudWatch Logs에 로그를 게시할 권한이 있는 역할의 이름을 지정합니다.

  9. 로그 레코드 형식(Log record format)에서 흐름 로그 레코드의 형식을 선택합니다.

    • 기본 형식을 사용하려면 AWS 기본 형식을 선택하세요.

    • 사용자 지정 형식을 사용하려면 사용자 지정 형식(Custom format)을 선택하고 로그 형식(Log format)에서 필드를 선택합니다.

    • 기본 필드가 포함된 사용자 지정 흐름 로그를 생성하려면 먼저 [AWS 기본 형식(AWS default format)]을 선택하고 [형식 미리 보기(Format preview)]에서 필드를 복사한 다음 [사용자 지정 형식(Custom format)]을 선택하고 텍스트 상자에 필드를 붙여 넣습니다.

  10. (선택 사항) 새 태그 추가(Add new tag)를 선택하여 흐름 로그에 태그를 적용합니다.

  11. 흐름 로그 생성(Create flow log)을 선택합니다.

명령줄을 사용하여 흐름 로그를 만들려면 다음을 수행합니다.

다음 명령 중 하나를 사용합니다.

다음 AWS CLI 예제는 subnet-1a2b3c4d 서브넷에 대해 허용된 모든 트래픽을 캡처하는 흐름 로그를 만듭니다. 흐름 로그는 IAM 역할 my-flow-logs를 사용하여 계정 123456789101에서 publishFlowLogs라고 하는 CloudWatch Logs 내 로그 그룹으로 전달됩니다.

aws ec2 create-flow-logs --resource-type Subnet --resource-ids subnet-1a2b3c4d --traffic-type ACCEPT --log-group-name my-flow-logs --deliver-logs-permission-arn arn:aws:iam::123456789101:role/publishFlowLogs

CloudWatch Logs에서 흐름 로그 레코드 처리

흐름 로그 레코드는 CloudWatch Logs에서 수집한 다른 로그 이벤트처럼 사용할 수 있습니다. 로그 데이터 및 지표 필터 모니터링에 대한 자세한 내용은 Amazon CloudWatch 사용 설명서로그 데이터 검색 및 필터링을 참조하십시오.

예: 흐름 로그에 대한 CloudWatch 지표 필터 및 경보 생성

이 예에서는 eni-1a2b3c4d에 대한 흐름 로그를 사용합니다. TCP 포트 22(SSH)를 거쳐 인스턴스에 연결하려는 시도가 한 시간 내에 10번 이상 거부된 경우 이를 알려 주는 알림을 만들 수 있습니다. 우선 경보를 만들려는 트래픽의 패턴과 일치하는 지표 필터를 만들어야 합니다. 그런 다음 지표 필터에 대한 경보를 만듭니다.

거부된 SSH 트래픽에 대한 지표 필터와 필터에 대한 경보를 만들려면

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

  2. 탐색 창에서 로그(Logs)를 선택합니다.

  3. 흐름 로그의 로그 그룹에 대한 관련 지표 필터 값을 선택한 다음 지표 필터 추가를 선택합니다.

  4. 필터 패턴(Filter Pattern)에 다음을 입력합니다.

    [version, account, eni, source, destination, srcport, destport="22", protocol="6", packets, bytes, windowstart, windowend, action="REJECT", flowlogstatus]
  5. 테스트할 로그 데이터 선택(Select Log Data to Test)에서 네트워크 인터페이스에 대한 로그 스트림을 선택합니다. (선택 사항) 필터 패턴과 일치하는 로그 데이터 행을 보려면 패턴 테스트(Test Pattern)를 선택합니다. 준비가 됐으면 지표 할당(Assign Metric)을 선택합니다.

  6. 지표 네임스페이스와 이름을 제공하고 지표 값이 1로 설정되어 있는지 확인합니다. 완료했으면 필터 생성(Create Filter)을 선택합니다.

  7. 탐색 창에서 [Alarms], [Create Alarm]을 선택합니다.

  8. 사용자 지정 지표(Custom Metrics) 섹션에서, 앞에서 만든 지표 필터에 대한 네임스페이스를 선택합니다.

    새로운 지표가 콘솔에 표시될 때까지 몇 분 정도 걸릴 수 있습니다.

  9. 만든 지표 이름을 선택한 후 다음(Next)을 선택합니다.

  10. 경보 이름 및 설명을 입력합니다. is 필드에서 >=를 선택한 후 10을 입력합니다. 기간(for) 필드에서 연속 기간에 대해 기본값 1을 유지합니다.

  11. 기간(Period)에서 1시간을 선택합니다. 통계(Statistic)에서 합계(Sum)를 선택합니다. Sum 통계는 지정된 기간 동안 데이터 포인트의 총 수를 캡처합니다.

  12. 작업(Actions) 섹션에서, 기존 목록에 알림을 보내도록 선택할 수 있습니다. 또는 새 목록을 만들고 경보가 트리거될 때 알림을 받을 이메일 주소를 입력할 수 있습니다. 완료했으면 경보 생성(Create Alarm)을 선택합니다.