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

CloudWatch Logs에 흐름 로그 게시

흐름 로그는 흐름 로그 데이터를 Amazon CloudWatch에 직접 게시할 수 있습니다.

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

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

CloudWatch Logs에 대한 자세한 내용은 Amazon CloudWatch Logs 사용 설명서CloudWatch Logs로 전송된 로그를 참조하세요.

요금

CloudWatch Logs에 흐름 로그를 게시할 때는 Vended 로그에 대한 데이터 수집 및 아카이브 요금이 부과됩니다. 자세히 알아보려면 Amazon CloudWatch Pricing(Amazon CloudWatch 요금)을 열고, Logs(로그)를 선택하고, Vended Logs(벤딩 로그)를 찾으세요.

CloudWatch Logs에 흐름 로그를 게시하는 IAM 역할

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

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

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

흐름 로그 서비스에서 역할을 수임할 수 있는 다음과 같은 신뢰 정책이 역할에 있는지 확인하세요.

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

혼동된 대리자 문제로부터 자신을 보호하기 위하여 aws:SourceAccountaws:SourceArn 조건 키를 사용할 것을 권장합니다. 예를 들어 이전 신뢰 정책에 다음 조건 블록을 추가할 수 있습니다. 소스 계정은 흐름 로그의 소유자이고 소스 ARN은 흐름 로그 ARN입니다. 흐름 로그 ID를 모르는 경우 ARN의 해당 부분을 와일드카드(*) 로 바꾼 다음 흐름 로그를 만든 후 정책을 업데이트할 수 있습니다.

"Condition": { "StringEquals": { "aws:SourceAccount": "account_id" }, "ArnLike": { "aws:SourceArn": "arn:aws:ec2:region:account_id:vpc-flow-log/flow-log-id" } }

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

위에 설명된 대로 기존 역할을 업데이트할 수 있습니다. 또는 다음과 같은 절차에 따라 흐름 로그에서 사용할 새 역할을 생성할 수 있습니다. 이 역할은 흐름 로그를 생성할 때 지정합니다.

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

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

  2. 탐색 창에서 정책을 선택합니다.

  3. [Create policy]를 선택합니다.

  4. [Create policy(정책 생성)] 페이지에서 다음을 수행합니다.

    1. JSON을 선택합니다.

    2. 이 창의 내용을 이 섹션의 시작 부분에 있는 권한 정책으로 대체합니다.

    3. Next: Tags(다음: 태그)와 Next: Review(다음: 검토)를 선택합니다.

    4. 정책의 이름과 설명(선택 사항)을 입력한 다음에 Create policy(정책 생성)를 선택합니다.

  5. 탐색 창에서 역할을 선택합니다.

  6. 역할 생성(Create role)을 선택합니다.

  7. Trusted entity type(신뢰할 수 있는 엔터티 유형)에서 Custom trust policy(사용자 지정 정책)를 선택합니다. Custom trust policy(사용자 지정 정책)에서 "Principal": {},을(를) 다음으로 대체하고 Next(다음)를 선택합니다.

    "Principal": { "Service": "vpc-flow-logs.amazonaws.com" },
  8. Add permissions(권한 추가) 페이지에서 이 절차의 앞부분에서 생성한 정책의 확인란을 선택한 후 Next(다음)를 선택합니다.

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

  10. 역할 생성(Create role)을 선택합니다.

CloudWatch Logs에 흐름 로그를 게시하는 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 작업을 사용할 수 있는 권한이 있는지 확인하십시오. 자세한 정보는 CloudWatch Logs에 흐름 로그를 게시하는 IAM 보안 주체의 권한을 참조하십시오.

사전 조건

콘솔을 사용하여 흐름 로그를 생성하는 방법

  1. 다음 중 하나를 수행하세요.

    • https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다. 탐색 창에서 네트워크 인터페이스(Network Interfaces)를 선택합니다. 네트워크 인터페이스의 확인란을 선택합니다.

    • https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔을 엽니다. 탐색 창에서 Your VPCs(사용자 VPC)를 선택합니다. VPC에 대한 확인란을 선택합니다.

    • https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔을 엽니다. 탐색 창에서 서브넷(Subnets)을 선택합니다. 서브넷의 확인란을 선택합니다.

  2. 작업(Actions), 흐름 로그 생성(Create flow log)을 선택합니다.

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

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

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

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

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

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

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

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

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

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

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

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

다음 AWS CLI 예시에서는 지정된 서브넷에 대해 수락된 모든 트래픽을 캡처하는 흐름 로그를 생성합니다. 흐름 로그가 지정된 로그 그룹에 전송됩니다. --deliver-logs-permission-arn 파라미터에서는 CloudWatch Logs에 게시하는 데 필요한 IAM 역할을 지정합니다.

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에 게시된 흐름 로그 레코드를 보는 방법

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

  2. 왼쪽 탐색 창에서 로그, 로그 그룹을 선택합니다.

  3. 흐름 로그가 있는 로그 그룹의 이름을 선택하여 세부 정보 페이지를 엽니다.

  4. 흐름 로그 레코드가 있는 로그 스트림의 이름을 선택합니다. 자세한 정보는 흐름 로그 레코드을 참조하십시오.

명령줄을 사용하여 CloudWatch Logs에 게시된 흐름 로그 레코드를 보는 방법

흐름 로그 레코드 검색

CloudWatch Logs 콘솔을 사용하여 CloudWatch Logs에 게시된 흐름 로그 레코드를 검색할 수 있습니다. 지표 필터를 사용하여 흐름 로그 레코드를 필터링할 수 있습니다. 흐름 로그 레코드는 공백으로 구분됩니다.

CloudWatch Logs 콘솔을 사용하여 흐름 로그 레코드를 검색하려면

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

  2. 왼쪽 탐색 창에서 로그, 로그 그룹을 선택합니다.

  3. 흐름 로그가 있는 로그 그룹을 선택한 다음에 검색 중인 네트워크 인터페이스를 아는 경우 로그 스트림을 선택합니다. 또는 Search log group(로그 그룹 검색)을 선택합니다. 로그 그룹에 네트워크 인터페이스가 많거나 선택한 시간 범위에 따라 시간이 걸릴 수 있습니다.

  4. 이벤트 필터에 다음 문자열을 입력합니다. 여기서는 흐름 로그 레코드가 기본 형식을 사용한다고 가정합니다.

    [version, accountid, interfaceid, srcaddr, dstaddr, srcport, dstport, protocol, packets, bytes, start, end, action, logstatus]
  5. 필드의 값을 지정하여 필요에 따라 필터를 수정합니다. 다음 예제에서는 특정 원본 IP 주소를 기준으로 필터링합니다.

    [version, accountid, interfaceid, srcaddr = 10.0.0.1, dstaddr, srcport, dstport, protocol, packets, bytes, start, end, action, logstatus] [version, accountid, interfaceid, srcaddr = 10.0.2.*, dstaddr, srcport, dstport, protocol, packets, bytes, start, end, action, logstatus]

    다음 예제에서는 대상 포트, 바이트 수 및 트래픽이 거부되었는지 여부를 기준으로 필터링합니다.

    [version, accountid, interfaceid, srcaddr, dstaddr, srcport, dstport = 80 || dstport = 8080, protocol, packets, bytes, start, end, action, logstatus] [version, accountid, interfaceid, srcaddr, dstaddr, srcport, dstport = 80 || dstport = 8080, protocol, packets, bytes >= 400, start, end, action = REJECT, logstatus]

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

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

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

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

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

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

  2. 왼쪽 탐색 창에서 로그, 로그 그룹을 선택합니다.

  3. 로그 그룹에 대한 확인란을 선택한 다음 작업(Actions),지표 필터 생성(Create metric filter)을 선택합니다.

  4. 필터 패턴(Filter Pattern)에서는 다음과 같은 문자열을 입력합니다.

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

  6. 준비가 되면 다음을 선택합니다.

  7. 필터 이름, 지표 네임스페이스 및 지표 이름을 입력합니다. 지표 값을 1로 설정합니다. 완료되면 다음을 선택하고 지표 필터 생성을 선택합니다.

  8. 탐색 창에서 경보, 모든 경보를 선택합니다.

  9. Create alarm(경보 생성)을 선택하세요.

  10. 앞에서 생성한 지표 필터에 대한 네임스페이스를 선택합니다.

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

  11. 생성한 지표 이름을 선택한 후 지표 선택을 선택합니다.

  12. 경보를 다음과 같이 구성한 다음 다음(Next)을 선택합니다.

    • Statistic(통계)에서 Sum(합계)를 선택합니다. 이것으로 지정된 기간 동안 데이터 포인트의 총 수를 캡처할 수 있습니다.

    • 기간에서 1시간을 선택합니다.

    • 항상에서 초과/같음(Greater/Equal)을 선택하고 임계값으로 10을 입력합니다.

    • 추가 구성에서 경보에 대한 데이터 포인트를 기본값 1로 남겨둡니다.

  13. 알림에서 기존 SNS 주제를 선택하거나 새 주제 생성에서 새로 생성합니다. 다음(Next)을 선택합니다.

  14. 경보의 이름과 설명을 입력하고 다음을 선택합니다.

  15. 경보 구성이 완료되면 경보 생성을 선택합니다.