

# VPC 모니터링
<a name="monitoring"></a>

다음 도구를 사용하여 가상 프라이빗 클라우드(VPC)에서 트래픽 또는 네트워크 액세스를 모니터링할 수 있습니다.

**VPC 흐름 로그**  
VPC 흐름 로그를 사용하여 VPC의 네트워크 인터페이스에서 송수신되는 트래픽에 대한 세부 정보를 캡처할 수 있습니다.

**Amazon CloudWatch Internet Monitor**  
인터넷 문제가 AWS에서 호스팅되는 애플리케이션과 최종 사용자 간 성능 및 가용성에 미치는 영향에 대한 가시성에 Internet Monitor를 사용할 수 있습니다. 다른 서비스를 사용하도록 전환하거나 다른 AWS 리전를 통해 워크로드 트래픽을 다시 라우팅하여 애플리케이션의 예상 지연 시간을 개선하는 방법을 거의 실시간으로 탐색할 수도 있습니다. 자세한 내용은 [Amazon CloudWatch Internet Monitor API 사용](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-InternetMonitor.html)을 참조하세요.

**Amazon VPC IP Address Manager(IPAM)**  
IPAM을 사용하여 워크로드의 IP 주소를 계획, 추적 및 모니터링할 수 있습니다. 자세한 내용은 [IP 주소 관리자](https://docs.aws.amazon.com/vpc/latest/ipam/)를 참조하세요.

**트래픽 미러링**  
이 기능을 사용하여 Amazon EC2 인스턴스의 네트워크 인터페이스에서 네트워크 트래픽을 복사하고 심층 패킷 검사를 위해 대역 외 보안 및 모니터링 어플라이언스로 전송할 수 있습니다. 네트워크 및 보안 이상을 감지하고, 운영 인사이트를 얻고, 규정 준수 및 보안 제어를 구현하고, 문제를 해결할 수 있습니다. 자세한 내용은 [트래픽 미러링](https://docs.aws.amazon.com/vpc/latest/mirroring/)을 참조하세요.

**Reachability Analyzer**  
이 도구를 사용하여 VPC에 있는 두 리소스 간의 네트워크 연결성을 분석하고 디버깅할 수 있습니다. 소스 및 대상 리소스를 지정한 후 Reachability Analyzer는 연결할 수 있는 경우 두 리소스 간의 가상 경로에 대한 홉별 세부 정보를 생성하고 연결할 수 없는 경우 차단 구성 요소를 식별합니다. 자세한 내용은 [Reachability Analyzer](https://docs.aws.amazon.com/vpc/latest/reachability/)를 참조하세요.

**Network Access Analyzer**  
Network Access Analyzer를 사용하여 리소스에 대한 네트워크 액세스를 파악할 수 있습니다. 이를 통해 네트워크 보안 태세의 개선 사항을 식별하고 네트워크가 특정 규정 준수 요구 사항을 충족함을 입증할 수 있습니다. 자세한 내용은 [Network Access Analyzer](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/)를 참조하세요.

**CloudTrail 로그**  
AWS CloudTrail은 다음과 같은 Amazon VPC에 대한 API 호출을 로깅합니다.  
+ API 호출 내용(예: VPC 리소스 생성 또는 수정과 같은 작업)
+ 호출의 소스 IP 주소
+ 호출한 사람
+ 호출한 시간
`CreateVpc`, `DeleteVpc` 및 `CreateDefaultVpc` 작업에 대해 별도의 로그가 생성됩니다. 이러한 로그에는 VPC와 연결되고 생성된 기본 리소스(예: 기본 인터넷 게이트웨이 또는 기본 보안 그룹)도 포함됩니다.  
자세한 내용은 *Amazon EC2 사용 설명서*의 [AWS CloudTrail을 사용하여 Amazon EC2 API 직접 호출 로깅](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitor-with-cloudtrail.html)을 참조하세요.

# VPC 흐름 로그를 사용하여 IP 트래픽 로깅
<a name="flow-logs"></a>

VPC 흐름 로그는 VPC의 네트워크 인터페이스에서 전송되고 수신되는 IP 트래픽에 대한 정보를 수집할 수 있는 기능입니다. 흐름 로그 데이터가 게시될 수 있는 위치는 Amazon CloudWatch Logs, Amazon S3 또는 Amazon Data Firehose입니다. 네트워크 트래픽 로그를 CloudWatch Logs 또는 S3와 같은 대상으로 전송할 수 있도록 구성된 전송 경로와 권한을 *구독*이라고 합니다. 흐름 로그를 생성하면 구성한 로그 그룹, 버킷 또는 전송 스트림의 흐름 로그 레코드를 검색하고 볼 수 있습니다.

흐름 로그는 다음과 같은 여러 작업에 도움이 될 수 있습니다.
+ 지나치게 제한적인 보안 그룹 규칙 진단
+ 인스턴스에 도달하는 트래픽 모니터링
+ 네트워크 인터페이스를 오가는 트래픽 방향 결정

흐름 로그 데이터는 네트워크 트래픽 경로 외부에서 수집되므로 네트워크 처리량이나 지연 시간에 영향을 주지 않습니다. 네트워크 성능에 영향을 주지 않고 흐름 로그를 생성하거나 삭제할 수 있습니다.

**참고**  
이 섹션에서는 VPC의 흐름 로그에 대해서만 설명합니다. 버전 6에 도입된 전송 게이트웨이의 흐름 로그에 대한 자세한 내용은 **Amazon VPC Transit Gateway 사용 설명서의 [Logging network traffic using Transit Gateway Flow Logs](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-flow-logs.html)를 참조하세요.

**Topics**
+ [흐름 로그 기본 사항](flow-logs-basics.md)
+ [흐름 로그 레코드](flow-log-records.md)
+ [흐름 로그 레코드의 예시](flow-logs-records-examples.md)
+ [흐름 로그 제한](flow-logs-limitations.md)
+ [가격 책정](#flow-logs-pricing)
+ [흐름 로그 작업](working-with-flow-logs.md)
+ [CloudWatch Logs에 흐름 로그 게시](flow-logs-cwl.md)
+ [Amazon S3에 흐름 로그 게시](flow-logs-s3.md)
+ [Amazon Data Firehose에 흐름 로그 게시](flow-logs-firehose.md)
+ [Amazon Athena를 사용하여 흐름 로그 쿼리](flow-logs-athena.md)
+ [VPC 흐름 로그 문제 해결](flow-logs-troubleshooting.md)

# 흐름 로그 기본 사항
<a name="flow-logs-basics"></a>

VPC, 서브넷 또는 네트워크 인터페이스에 대한 흐름 로그를 생성할 수 있습니다. 서브넷이나 VPC에 대한 흐름 로그를 생성할 경우, VPC 또는 서브넷의 각 네트워크 인터페이스가 모니터링됩니다.

모니터링된 네트워크 인터페이스를 위한 흐름 로그 데이터는 트래픽 흐름을 설명하는 필드로 구성된 로그 이벤트인 *흐름 로그 레코드*로서 기록됩니다. 자세한 내용은 [흐름 로그 레코드](flow-log-records.md) 단원을 참조하세요.

흐름 로그를 생성하려면 다음을 지정합니다.
+ 흐름 로그를 생성할 리소스
+ 캡처할 트래픽 유형(허용된 트래픽, 거부된 트래픽 또는 모든 트래픽)
+ 흐름 로그 데이터를 게시할 대상

다음 예에서는 프라이빗 서브넷의 EC2 인스턴스 중 하나의 네트워크 인터페이스에 대해 허용된 트래픽을 캡처하고 흐름 로그 레코드를 Amazon S3 버킷에 게시하는 흐름 로그를 생성합니다.

![\[인스턴스에 대한 흐름 로그\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/images/flow-logs-diagram-s3.png)


다음 예에서 흐름 로그는 서브넷의 모든 트래픽을 캡처하고 흐름 로그 레코드를 Amazon CloudWatch Logs에 게시합니다. 흐름 로그는 서브넷의 모든 네트워크 인터페이스에 대한 트래픽을 캡처합니다.

![\[서브넷에 대한 흐름 로그\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/images/flow-logs-diagram-cw.png)


흐름 로그를 생성한 후에는, 데이터를 수집하여 선택된 대상에 게시하는 데 몇 분의 시간이 소요될 수 있습니다. 흐름 로그는 네트워크 인터페이스에 대한 로그 스트림을 실시간으로 캡처하지 않습니다. 자세한 내용은 [2. 흐름 로그 생성](working-with-flow-logs.md#create-flow-log) 단원을 참조하세요.

서브넷이나 VPC에 대한 흐름 로그를 생성한 후 서브넷에서 하나의 인스턴스를 시작할 경우, 해당 네트워크 인터페이스에 대한 네트워크 트래픽이 생기는 즉시 새로운 네트워크 인터페이스에 대한 (CloudWatch Logs용) 로그 스트림 또는 (Amazon S3용) 로그 파일 객체가 생성됩니다.

다음과 같은 다른 AWS 서비스에서 생성한 네트워크 인터페이스에 대한 흐름 로그를 생성할 수 있습니다.
+ Elastic Load Balancing
+ Amazon RDS
+ Amazon ElastiCache
+ Amazon Redshift
+ Amazon WorkSpaces
+ NAT 게이트웨이
+ 전송 게이트웨이

네트워크 인터페이스 유형에 관계없이 Amazon EC2 콘솔 또는 Amazon EC2 API를 사용하여 네트워크 인터페이스에 대한 흐름 로그를 작성해야 합니다.

흐름 로그에 태그를 적용할 수 있습니다. 각 태그는 사용자가 정의하는 키와 선택적 값으로 구성됩니다. 태그는 흐름 로그를 용도나 소유자별로 구성하는 데 도움이 될 수 있습니다.

흐름 로그가 더 이상 필요하지 않을 경우 삭제할 수 있습니다. 흐름 로그를 삭제하면 리소스에 대한 흐름 로그 서비스가 비활성화되어 생성되거나 게시되는 새 흐름 로그 레코드가 없습니다. 흐름 로그를 삭제해도 기존 흐름 로그 데이터는 삭제되지 않습니다. 흐름 로그를 삭제하면 작업을 마무리했을 때 대상에서 직접 흐름 로그 데이터를 삭제할 수 있습니다. 자세한 내용은 [4. 흐름 로그 삭제](working-with-flow-logs.md#delete-flow-log) 단원을 참조하세요.

# 흐름 로그 레코드
<a name="flow-log-records"></a>

흐름 로그 레코드는 VPC에 네트워크 흐름을 나타냅니다. 기본적으로 각 레코드는 *캡처 기간*이라고도 하는 *집계 간격* 내에 발생하는 네트워크 인터넷 프로토콜(IP) 트래픽 흐름(네트워크 인터페이스별로 5튜플을 특징으로 함)을 캡처합니다.

각 레코드는 필드가 공백으로 구분되어 있는 문자열입니다. 레코드에는 소스, 대상, 프로토콜 등 IP 흐름의 다양한 구성 요소에 대한 값이 포함됩니다.

흐름 로그를 생성할 때 흐름 로그 레코드의 기본 형식을 사용하거나 사용자 지정 형식을 지정할 수 있습니다.

**Topics**
+ [집계 간격](#flow-logs-aggregration-interval)
+ [기본 형식](#flow-logs-default)
+ [사용자 지정 형식](#flow-logs-custom)
+ [사용 가능한 필드](#flow-logs-fields)

## 집계 간격
<a name="flow-logs-aggregration-interval"></a>

집계 간격은 특정 흐름이 캡처되어 흐름 로그 레코드로 집계되는 기간입니다. 기본적으로 최대 집계 간격은 10분입니다. 흐름 로그를 만들 때 선택적으로 최대 집계 간격을 1분으로 지정할 수 있습니다. 최대 집계 간격이 1분인 흐름 로그는 최대 집계 간격이 10분인 흐름 로그보다 더 많은 양의 흐름 로그 레코드를 생성합니다.

네트워크 인터페이스가 [NITRO 기반 인스턴스](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html)에 연결된 경우 집계 간격은 지정된 최대 집계 간격에 관계없이 항상 1분 이하입니다.

집계 간격 내에서 데이터를 캡처한 후에는 데이터를 처리하고 CloudWatch Logs 또는 Amazon S3에 게시하느라 추가 시간이 걸립니다. 흐름 로그 서비스는 일반적으로 로그를 약 5분 만에 CloudWatch Logs로 전송하고 약 10분 만에 Amazon S3로 전송합니다. 그러나 로그 전달에 최선의 노력을 기울이고 로그가 일반적인 전달 시간을 초과하여 지연될 수 있습니다.

## 기본 형식
<a name="flow-logs-default"></a>

기본 형식의 흐름 로그 레코드에는 [사용 가능한 필드](#flow-logs-fields) 테이블에 표시되는 순서대로 버전 2 필드가 포함됩니다. 기본 형식을 사용자 정의하거나 변경할 수 없습니다. 추가 필드 또는 다른 필드 하위 세트를 캡처하려면 사용자 지정 형식을 지정합니다.

## 사용자 지정 형식
<a name="flow-logs-custom"></a>

사용자 지정 형식을 사용하면 흐름 로그 레코드에 포함되는 필드와 그 순서를 지정할 수 있습니다. 이를 통해 요구 사항에 맞는 흐름 로그를 만들고 관련이 없는 필드를 생략할 수 있습니다. 사용자 지정 형식을 사용하면 게시된 흐름 로그에서 특정 정보를 추출하기 위해 별도의 프로세스가 필요하지 않습니다. 사용 가능한 흐름 로그 필드를 얼마든지 지정할 수 있지만 하나 이상을 지정해야 합니다.

## 사용 가능한 필드
<a name="flow-logs-fields"></a>

다음 표는 흐름 로그 레코드에 사용 가능한 모든 필드를 설명합니다. **버전(Version)** 열은 해당 필드를 도입한 VPC 흐름 로그의 버전을 나타냅니다. 기본 형식에는 모든 버전 2 필드가 테이블에 표시되는 순서와 동일하게 포함됩니다.

Amazon S3 흐름 로그 데이터를 게시할 때 필드의 데이터 유형은 흐름 로그 형식에 따라 다릅니다. 형식이 일반 텍스트인 경우 모든 필드는 STRING 유형입니다. 형식이 Parquet 인 경우 필드 데이터 유형에 대한 표를 참조하세요.

필드를 적용할 수 없거나 특정 레코드에 대해 계산할 수 없는 경우 레코드는 해당 항목에 대해 '-' 기호를 표시합니다. 패킷 헤더에서 직접 제공되지 않는 메타데이터 필드는 최선의 작업 수준 근사값이며 해당 값이 누락되거나 정확하지 않을 수 있습니다.


| 필드 | 설명 | 버전 | 
| --- | --- | --- | 
|  version  |  VPC 흐름 로그 버전. 기본 형식을 사용하는 경우, 버전은 2입니다. 사용자 지정 형식을 사용하는 경우, 버전은 지정된 필드 중에서 가장 높은 버전입니다. 예를 들어 버전 2의 필드만 지정한다면 버전은 2가 됩니다. 버전 2, 3 및 4의 필드를 혼합하여 지정한다면 버전은 4가 됩니다. **Parquet 데이터 유형:** INT\$132  | 2 | 
|  account-id  |  트래픽이 기록되는 소스 네트워크 인터페이스 소유자의 AWS 계정 ID입니다. 네트워크 인터페이스가 AWS 서비스에 의해 생성된 경우, 예를 들어 VPC 엔드포인트 또는 Network Load Balancer 생성 시 이 필드의 레코드에 unknown이 표시될 수도 있습니다. **Parquet 데이터 유형:** 문자열  | 2 | 
|  interface-id  |  트래픽이 기록되는 네트워크 인터페이스 ID. 리전 NAT 게이트웨이와 연결된 흐름의 경우 '-' 기호를 반환합니다. **Parquet 데이터 유형:** 문자열  | 2 | 
|  srcaddr  |   수신 트래픽의 경우 트래픽 소스의 IP 주소를 뜻합니다. 송신 트래픽의 경우 트래픽을 전송하는 네트워크 인터페이스의 프라이빗 IPv4 주소 또는 IPv6 주소를 뜻합니다. 리전 NAT 게이트웨이에서 나가는 트래픽의 경우 pkt-srcaddr에서와 동일한 패킷 수준 소스 IP 주소를 뜻합니다. 또한 pkt-srcaddr 단원도 참조하세요. **Parquet 데이터 유형:** 문자열  | 2 | 
|  dstaddr  |  나가는 트래픽의 대상 주소 또는 네트워크 인터페이스의 들어오는 트래픽의 네트워크 인터페이스의 IPv4 또는 IPv6 주소. 네트워크 인터페이스의 IPv4 주소는 항상 해당 프라이빗 IPv4 주소입니다. 리전 NAT 게이트웨이로 들어오는 트래픽의 경우 pkt-dstaddr에서와 동일한 패킷 수준 대상 IP 주소를 뜻합니다. 또한 pkt-dstaddr 단원도 참조하세요. **Parquet 데이터 유형:** 문자열  | 2 | 
|  srcport  |  트래픽의 소스 포트 **Parquet 데이터 유형:** INT\$132  | 2 | 
|  dstport  |  트래픽의 대상 포트 **Parquet 데이터 유형:** INT\$132  | 2 | 
|  protocol  |  트래픽의 IANA 프로토콜 번호. 자세한 정보는 [Assigned Internet Protocol Numbers](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)를 참조하세요. **Parquet 데이터 유형:** INT\$132  | 2 | 
|  packets  |  흐름 중 전송된 패킷 수. **Parquet 데이터 유형:** INT\$164  | 2 | 
|  bytes  |  흐름 중 전송된 바이트 수. **Parquet 데이터 유형:** INT\$164  | 2 | 
|  start  |  흐름의 첫 번째 패킷이 집계 간격 내에서 수신된 시간(단위: Unix 초)입니다. 이 시간은 패킷이 네트워크 인터페이스에서 전송되거나 수신된 후 최대 60초가 될 수 있습니다. **Parquet 데이터 유형:** INT\$164  | 2 | 
|  end  |  집계 간격 내에서 흐름의 마지막 패킷을 수신한 시간(단위: Unix 초)입니다. 이 시간은 패킷이 네트워크 인터페이스에서 전송되거나 수신된 후 최대 60초가 될 수 있습니다. **Parquet 데이터 유형:** INT\$164  | 2 | 
|  action  |  트래픽과 연결된 작업 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/flow-log-records.html) **Parquet 데이터 유형:** 문자열  | 2 | 
|  log-status  |  흐름 로그의 로깅 상태: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/flow-log-records.html) **Parquet 데이터 유형:** 문자열  | 2 | 
|  vpc-id  |  트래픽이 기록되는 네트워크 인터페이스를 포함하는 VPC의 ID. **Parquet 데이터 유형:** 문자열  | 3 | 
|  subnet-id  |  트래픽이 기록되는 네트워크 인터페이스를 포함하는 서브넷의 ID. 리전 NAT 게이트웨이와 연결된 흐름의 경우 '-' 기호를 반환합니다. **Parquet 데이터 유형:** 문자열  | 3 | 
|  instance-id  |  인스턴스를 소유한 경우 트래픽이 기록되는 네트워크 인터페이스와 연결된 인스턴스의 ID입니다. NAT 게이트웨이의 네트워크 인터페이스 같은 [요청자 관리 네트워크 인터페이스](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/requester-managed-eni.html)에는 '-' 기호를 반환합니다. **Parquet 데이터 유형:** 문자열  | 3 | 
|  tcp-flags  | 다음 TCP 플래그의 비트 마스크 값:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/flow-log-records.html)지원되는 플래그가 기록되지 않는 경우 TCP 플래그 값은 0입니다. 예를 들어 tcp-flags는 ACK 또는 PSH 플래그 로깅을 지원하지 않으므로 이러한 지원되지 않는 플래그가 있는 트래픽에 대한 레코드의 결과는 tcp-flags 값 0이 됩니다. 하지만 지원되지 않는 플래그에 지원되는 플래그가 동반된 경우 지원되는 플래그의 값을 보고합니다. 예를 들어 ACK가 SYN-ACK의 일부인 경우 18을 보고합니다. 그리고 SYN\$1ECE와 같은 레코드가 있는 경우 SYN은 지원되는 플래그이고 ECE는 지원되지 않으므로 TCP 플래그 값은 2입니다. 어떤 이유로든 플래그 조합이 유효하지 않아 값을 계산할 수 없는 경우 값은 '-'입니다. 플래그가 전송되지 않는 경우 TCP 플래그 값은 0입니다.TCP 플래그는 집계 간격 동안 OR일 수 있습니다. 짧은 연결의 경우 SYN-ACK 및 FIN에 대해 19, SYN 및 FIN에 대해 3과 같이 흐름 로그 레코드의 동일한 행에 플래그가 설정될 수 있습니다. 문제 해결 예는 [TCP 플래그 시퀀스](flow-logs-records-examples.md#flow-log-example-tcp-flag)을(를) 참조하세요.TCP 플래그에 대한 일반 정보(예: FIN, SYN 및 ACK와 같은 플래그의 의미)는 Wikipedia에서 [TCP 세그먼트 구조](https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure)를 참조하세요.**Parquet 데이터 유형:** INT\$132 | 3 | 
|  type  |  트래픽 유형입니다. 가능한 값: IPv4 \$1 IPv6 \$1 EFA. 자세한 내용은 [Elastic Fabric Adapter(EFA)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) 섹션을 참조하세요. **Parquet 데이터 유형:** 문자열  | 3 | 
|  pkt-srcaddr  |  트래픽의 패킷 수준(원본) 소스 IP 주소입니다. 이 필드를 srcaddr 필드와 함께 사용하면 트래픽이 흐르는 중간 계층의 IP 주소와 트래픽의 원래 소스 IP 주소를 구별 할 수 있습니다. 대표적인 경우는 트래픽이 [NAT 게이트웨이에 대한 네트워크 인터페이스](flow-logs-records-examples.md#flow-log-example-nat)를 통과하거나 Amazon EKS의 포드 IP 주소가 포드가 실행 중인(VPC 내 통신용) 인스턴스 노드의 네트워크 인터페이스 IP 주소와 다른 경우입니다. **Parquet 데이터 유형:** 문자열  | 3 | 
|  pkt-dstaddr  |  트래픽의 패킷 수준(원본) 대상 IP 주소입니다. 이 필드를 dstaddr 필드와 함께 사용하면 트래픽이 흐르는 중간 계층의 IP 주소와 트래픽의 최종 대상 IP 주소를 구별 할 수 있습니다. 대표적인 경우는 트래픽이 [NAT 게이트웨이에 대한 네트워크 인터페이스](flow-logs-records-examples.md#flow-log-example-nat)를 통과하거나 Amazon EKS의 포드 IP 주소가 포드가 실행 중인(VPC 내 통신용) 인스턴스 노드의 네트워크 인터페이스 IP 주소와 다른 경우입니다. **Parquet 데이터 유형:** 문자열  | 3 | 
|  region  |  트래픽이 기록되는 네트워크 인터페이스가 포함된 리전입니다. **Parquet 데이터 유형:** 문자열  |  4  | 
|  az-id  |  트래픽이 기록되는 네트워크 인터페이스가 포함된 가용 영역의 ID입니다. 하위 위치에서 트래픽이 발생한 경우 레코드는 이 필드에 대해 '-' 기호를 표시합니다. **Parquet 데이터 유형:** 문자열  |  4  | 
|  sublocation-type  |  sublocation-id 필드에 반환되는 하위 위치 유형입니다. 가능한 값: [wavelength](https://aws.amazon.com/wavelength/) \$1 [outpost](https://docs.aws.amazon.com/outposts/latest/userguide/) \$1 [localzone](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-local-zones) 트래픽이 하위 위치에서 발생하지 않는 경우 레코드는 이 필드에 대해 '-' 기호를 표시합니다. **Parquet 데이터 유형:** 문자열  |  4  | 
|  sublocation-id  |  트래픽이 기록되는 네트워크 인터페이스가 포함된 하위 위치의 ID입니다. 트래픽이 하위 위치에서 발생하지 않는 경우 레코드는 이 필드에 대해 '-' 기호를 표시합니다. **Parquet 데이터 유형:** 문자열  |  4  | 
|  pkt-src-aws-service  |  소스 IP 주소가 AWS 서비스용인 경우 pkt-srcaddr 필드에 대한 [IP 주소 범위](aws-ip-ranges.md)의 하위 집합 이름입니다. 소스 IP 주소가 [겹친 범위](aws-ip-syntax.md#aws-ip-range-overlaps)에 속하는 경우 pkt-src-aws-service는 AWS 서비스 코드 중 하나만 표시합니다. 가능한 값: `AMAZON` \$1 `AMAZON_APPFLOW` \$1 `AMAZON_CONNECT` \$1 `API_GATEWAY` \$1 `AURORA_DSQL` \$1 `CHIME_MEETINGS` \$1 `CHIME_VOICECONNECTOR` \$1 `CLOUD9` \$1 `CLOUDFRONT` \$1 `CLOUDFRONT_ORIGIN_FACING` \$1 `CODEBUILD` \$1 `DYNAMODB` \$1 `EBS` \$1 `EC2` \$1 `EC2_INSTANCE_CONNECT` \$1 `GLOBALACCELERATOR` \$1 `IVS_LOW_LATENCY` \$1 `IVS_REALTIME` \$1 `KINESIS_VIDEO_STREAMS` \$1 `MEDIA_PACKAGE_V2` \$1 `ROUTE53` \$1 `ROUTE53_HEALTHCHECKS` \$1 `ROUTE53_HEALTHCHECKS_PUBLISHING` \$1 `ROUTE53_RESOLVER` \$1 `S3` \$1 `WORKSPACES_GATEWAYS`. **Parquet 데이터 유형:** 문자열  |  5  | 
|  pkt-dst-aws-service  |  대상 IP 주소가 AWS 서비스용인 경우 pkt-dstaddr 필드에 대한 IP 주소 범위의 하위 집합 이름입니다. 가능한 값 목록은 pkt-src-aws-service 필드를 참조하세요. **Parquet 데이터 유형:** 문자열  |  5  | 
|  flow-direction  |  트래픽이 캡처되는 인터페이스에 대한 흐름 방향입니다. 가능한 값: ingress \$1 egress **Parquet 데이터 유형:** 문자열  |  5  | 
|  traffic-path  |  송신 트래픽이 대상으로 이동하는 경로입니다. 트래픽이 송신 트래픽인지 여부를 확인하려면 flow-direction 필드를 확인하십시오. 가능한 값은 다음과 같습니다. 적용되는 값이 없는 경우 필드는 -로 설정됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/flow-log-records.html) **Parquet 데이터 유형:** INT\$132  |  5  | 
|  ecs-cluster-arn  | 트래픽이 실행 중인 ECS 태스크에서 발생하는 경우 ECS 클러스터의 AWS 리소스 이름(ARN)입니다. 구독에 이 필드를 포함하려면 ecs:ListClusters를 직접적으로 호출할 수 있는 권한이 필요합니다.Parquet 데이터 유형: 문자열 |  7  | 
|  ecs-cluster-name  | 트래픽이 실행 중인 ECS 태스크에서 발생하는 경우 ECS 클러스터의 이름입니다. 구독에 이 필드를 포함하려면 ecs:ListClusters를 직접적으로 호출할 수 있는 권한이 필요합니다.Parquet 데이터 유형: 문자열 |  7  | 
|  ecs-container-instance-arn  | 트래픽이 EC2 인스턴스에서 실행 중인 ECS 태스크에서 발생하는 경우 ECS 컨테이너 인스턴스의 ARN입니다. 용량 공급자가 AWS Fargate인 경우 이 필드는 '-'가 됩니다. 구독에 이 필드를 포함하려면 ecs:ListClusters와 ecs:ListContainerInstances를 직접적으로 호출할 수 있는 권한이 필요합니다.Parquet 데이터 유형: 문자열 |  7  | 
|  ecs-container-instance-id  | 트래픽이 EC2 인스턴스에서 실행 중인 ECS 태스크에서 발생하는 경우 ECS 컨테이너 인스턴스의 ID입니다. 용량 공급자가 AWS Fargate인 경우 이 필드는 '-'가 됩니다. 구독에 이 필드를 포함하려면 ecs:ListClusters와 ecs:ListContainerInstances를 직접적으로 호출할 수 있는 권한이 필요합니다.Parquet 데이터 유형: 문자열 |  7  | 
|  ecs-container-id  | 트래픽이 실행 중인 ECS 태스크에서 발생하는 경우 컨테이너의 Docker 런타임 ID입니다. ECS 태스크에 컨테이너가 하나 이상 있는 경우 이 ID는 첫 번째 컨테이너의 Docker 런타임 ID가 됩니다. 구독에 이 필드를 포함하려면 ecs:ListClusters를 직접적으로 호출할 수 있는 권한이 필요합니다.Parquet 데이터 유형: 문자열 |  7  | 
|  ecs-second-container-id  | 트래픽이 실행 중인 ECS 태스크에서 발생하는 경우 컨테이너의 Docker 런타임 ID입니다. ECS 태스크에 컨테이너가 두 개 이상 있는 경우 이 ID는 두 번째 컨테이너의 Docker 런타임 ID가 됩니다. 구독에 이 필드를 포함하려면 ecs:ListClusters를 직접적으로 호출할 수 있는 권한이 필요합니다.Parquet 데이터 유형: 문자열 |  7  | 
|  ecs-service-name  | 트래픽이 실행 중인 ECS 태스크에서 발생하고 ECS 태스크가 ECS 서비스에 의해 시작되는 경우 ECS 서비스의 이름입니다. ECS 태스크가 ECS 서비스에 의해 시작되지 않는 경우 이 필드는 '-'가 됩니다. 구독에 이 필드를 포함하려면 ecs:ListClusters와 ecs:ListServices를 직접적으로 호출할 수 있는 권한이 필요합니다.Parquet 데이터 유형: 문자열 |  7  | 
|  ecs-task-definition-arn  | 트래픽이 실행 중인 ECS 태스크에서 발생하는 경우 ECS 태스크 정의의 ARN입니다. 구독에 이 필드를 포함하려면 ecs:ListClusters와 ecs:ListTaskDefinitions를 직접적으로 호출할 수 있는 권한이 필요합니다.Parquet 데이터 유형: 문자열 |  7  | 
|  ecs-task-arn  | 트래픽이 실행 중인 ECS 태스크에서 발생하는 경우 ECS 태스크의 ARN입니다. 구독에 이 필드를 포함하려면 ecs:ListClusters와 ecs:ListTasks를 직접적으로 호출할 수 있는 권한이 필요합니다.Parquet 데이터 유형: 문자열 |  7  | 
|  ecs-task-id  | 트래픽이 실행 중인 ECS 태스크에서 발생하는 경우 ECS 태스크의 ID입니다. 구독에 이 필드를 포함하려면 ecs:ListClusters와 ecs:ListTasks를 직접적으로 호출할 수 있는 권한이 필요합니다.Parquet 데이터 유형: 문자열 |  7  | 
|  reject-reason  |  트래픽이 거부된 이유입니다. 가능한 값은 BPA, EC입니다. 다른 거부 이유는 '-'를 반환합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/flow-log-records.html) **Parquet 데이터 유형:** 문자열  |  8  | 
|  resource-id  | 트래픽이 기록되는 네트워크 인터페이스를 포함하는 리전 NAT 게이트웨이의 ID입니다. 리전 NAT 게이트웨이와 연결되지 않은 트래픽 흐름의 경우 '-' 기호를 반환합니다. 리전 NAT 게이트웨이에 대한 자세한 내용은 [자동 다중 AZ 확장을 위한 리전 NAT 게이트웨이](nat-gateways-regional.md) 섹션을 참조하세요. **Parquet 데이터 유형:** 문자열  |  9  | 
|  encryption-status  |  흐름의 암호화 상태입니다. VPC 암호화 제어에 대한 자세한 내용은 [전송 중 VPC 암호화 적용](vpc-encryption-controls.md) 섹션을 참조하세요. 가능한 값은 다음과 같습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/flow-log-records.html) VPC 암호화 제어가 활성화되지 않았거나 FlowLog가 상태를 가져올 수 없는 경우 값은 '-'입니다.  \$1 인터페이스 및 게이트웨이 엔드포인트의 경우 AWS는 암호화 상태를 확인하기 위해 패킷 데이터를 살펴보지 않고, 대신 사용된 포트를 기반으로 암호화 상태를 추정합니다. \$1\$1 지정된 AWS 관리형 엔드포인트의 경우 AWS는 서비스 구성의 TLS 요구 사항에 따라 암호화 상태를 확인합니다.  **Parquet 데이터 유형:** INT\$132  |  10  | 

# 흐름 로그 레코드의 예시
<a name="flow-logs-records-examples"></a>

다음은 특정 트래픽 흐름을 캡처하는 흐름 로그 레코드의 예시입니다.

흐름 로그 레코드 형식에 대한 자세한 내용은 [흐름 로그 레코드](flow-log-records.md)를 참조하세요. 흐름 로그를 생성하는 방법에 대한 자세한 내용은 [흐름 로그 작업](working-with-flow-logs.md) 단원을 참조하세요.

**Topics**
+ [허용 및 거부된 트래픽](#flow-log-example-accepted-rejected)
+ [데이터가 없고 건너뛴 레코드](#flow-log-example-no-data)
+ [보안 그룹 및 네트워크 ACL 규칙](#flow-log-example-security-groups)
+ [IPv6 트래픽](#flow-log-example-ipv6)
+ [TCP 플래그 시퀀스](#flow-log-example-tcp-flag)
+ [영역 NAT 게이트웨이를 통한 트래픽](#flow-log-example-nat)
+ [리전 NAT 게이트웨이를 통한 트래픽](#flow-log-example-regional-nat)
+ [전송 게이트웨이를 통한 트래픽](#flow-log-example-tgw)
+ [서비스 이름, 트래픽 경로 및 흐름 방향](#flow-log-example-traffic-path)

## 허용 및 거부된 트래픽
<a name="flow-log-example-accepted-rejected"></a>

다음은 기본 흐름 로그 레코드의 예시입니다.

이 예시에서는 프라이빗 IP 주소가 172.31.16.21이고 계정 123456789010의 ID가 eni-1235b8ca123456789인 네트워크 인터페이스로 IP 주소 172.31.16.139의 SSH 트래픽(대상 포트 22, TCP 프로토콜)이 허용되었습니다.

```
2 123456789010 eni-1235b8ca123456789 172.31.16.139 172.31.16.21 20641 22 6 20 4249 1418530010 1418530070 ACCEPT OK
```

이 예시에서는 계정 123456789010에서 네트워크 인터페이스 eni-1235b8ca123456789에 대한 RDP 트래픽(대상 포트 3389, TCP 프로토콜)이 거부되었습니다.

```
2 123456789010 eni-1235b8ca123456789 172.31.9.69 172.31.9.12 49761 3389 6 20 4249 1418530010 1418530070 REJECT OK
```

## 데이터가 없고 건너뛴 레코드
<a name="flow-log-example-no-data"></a>

다음은 기본 흐름 로그 레코드의 예입니다.

이 예에서는 집계 간격 동안 데이터가 기록되지 않았습니다.

```
2 123456789010 eni-1235b8ca123456789 - - - - - - - 1431280876 1431280934 - NODATA
```

VPC 흐름 로그는 내부 용량 초과로 집계 간격 동안 흐름 로그 데이터를 캡처할 수 없는 경우 레코드를 건너뜁니다. 건너뛴 단일 레코드는 집계 간격 중 네트워크 인터페이스에 대해 캡처되지 않은 여러 흐름을 나타낼 수 있습니다.

```
2 123456789010 eni-11111111aaaaaaaaa - - - - - - - 1431280876 1431280934 - SKIPDATA
```

**참고**  
집계 간격 중 일부 흐름 로그 레코드를 건너뛸 수 있습니다([사용 가능한 필드](flow-log-records.md#flow-logs-fields)의 **log-status 참조). 내부 AWS 용량 제한 또는 내부 오류가 원인일 수 있습니다. AWS Cost Explorer를 사용하여 VPC 흐름 로그 요금을 확인하고 흐름 로그 집계 간격 중에 일부 흐름 로그를 건너뛴 경우 AWS Cost Explorer에 보고된 흐름 로그 수가 Amazon VPC에서 게시한 흐름 로그 수보다 많습니다.

## 보안 그룹 및 네트워크 ACL 규칙
<a name="flow-log-example-security-groups"></a>

너무 제한적이거나 허용적인 보안 그룹 규칙 또는 네트워크 ACL 규칙을 진단하기 위해 흐름 로그를 사용할 경우 이러한 리소스의 상태 저장 여부를 알아야 합니다. 보안 그룹은 상태가 저장됩니다. 보안 그룹의 규칙에서 허용하지 않더라도 허용된 트래픽에 응답할 수 있다는 뜻입니다. 반대로 네트워크 ACL은 상태를 저장하지 않으므로 허용된 트래픽에 대한 응답은 네트워크 ACL 규칙을 따릅니다.

예를 들어 홈 컴퓨터(IP 주소: 203.0.113.12)에서 인스턴스(네트워크 인터페이스의 프라이빗 IP 주소: 172.31.16.139)로 **ping** 명령을 사용합니다. 보안 그룹의 인바운드 규칙은 ICMP 트래픽을 허용하지만 아웃바운드 규칙은 ICMP 트래픽을 허용하지 않습니다. 보안 그룹은 상태 저장이므로 인스턴스의 응답 ping이 허용됩니다. 네트워크 ACL은 인바운드 ICMP 트래픽을 허용하지만 아웃바운드 ICMP 트래픽은 허용하지 않습니다. 왜냐하면 네트워크 ACL은 상태를 저장하지 않아서 응답 ping이 홈 컴퓨터에 도달하지 않기 때문입니다. 이는 기본 흐름 로그에서 다음과 같은 2가지 흐름 로그 레코드로 표시됩니다.
+ 네트워크 ACL과 보안 그룹이 모두 허용했으며 따라서 인스턴스에 접속하도록 허용된 요청 ping에 대한 ACCEPT 레코드
+ 네트워크 ACL이 거부한 응답 ping에 대한 REJECT 레코드

```
2 123456789010 eni-1235b8ca123456789 203.0.113.12 172.31.16.139 0 0 1 4 336 1432917027 1432917142 ACCEPT OK
```

```
2 123456789010 eni-1235b8ca123456789 172.31.16.139 203.0.113.12 0 0 1 4 336 1432917094 1432917142 REJECT OK
```

네트워크 ACL이 아웃바운드 ICMP 트래픽을 허용한 경우, 흐름 로그에 두 가지 ACCEPT 레코드(하나는 요청 ping에 대한 레코드, 다른 하나는 응답 ping에 대한 레코드)가 표시됩니다. 보안 그룹이 인바운드 ICMP 트래픽을 거부한 경우, 흐름 로그에는 하나의 REJECT 레코드만 표시됩니다. 해당 트래픽이 인스턴스에 접속하도록 허용되지 않았기 때문입니다.

## IPv6 트래픽
<a name="flow-log-example-ipv6"></a>

다음은 기본 흐름 로그 레코드의 예입니다. 이 예시에서는 계정 123456789010에서, IPv6 주소 2001:db8:1234:a100:8d6e:3477:df66:f105로부터 네트워크 인터페이스 eni-1235b8ca123456789로의 SSH 트래픽(포트 22)이 허용되었습니다.

```
2 123456789010 eni-1235b8ca123456789 2001:db8:1234:a100:8d6e:3477:df66:f105 2001:db8:1234:a102:3304:8879:34cf:4071 34892 22 6 54 8855 1477913708 1477913820 ACCEPT OK
```

## TCP 플래그 시퀀스
<a name="flow-log-example-tcp-flag"></a>

이 섹션에는 아래와 같은 순서로 다음 필드를 캡처하는 사용자 지정 흐름 로그의 예시가 포함되어 있습니다.

```
version vpc-id subnet-id instance-id interface-id account-id type srcaddr dstaddr srcport dstport pkt-srcaddr pkt-dstaddr protocol bytes packets start end action tcp-flags log-status
```

이 섹션에서 예시의 tcp-flags 필드는 흐름 로그의 마지막 두 번째 값으로 표시됩니다. TCP 플래그는 트래픽의 방향(예: 연결을 시작한 서버)을 식별하는 데 도움이 됩니다.

**참고**  
tcp-flags 옵션에 대한 자세한 내용 및 각 TCP 플래그에 대한 설명은 [사용 가능한 필드](flow-log-records.md#flow-logs-fields)의 내용을 참조하세요.

다음 레코드(오후 7:47:55 오후에 시작하고 오후 7:48:53에 끝남)에서는 클라이언트가 포트 5001에서 실행 중인 서버에 대한 두 개의 연결을 시작했습니다. 클라이언트의 다른 소스 포트(43416 및 43418)에서 서버가 두 개의 SYN 플래그(2)를 수신했습니다. 각 SYN에 대해 SYN-ACK가 서버에서 해당 포트의 클라이언트(18)로 전송되었습니다.

```
3 vpc-abcdefab012345678 subnet-aaaaaaaa012345678 i-01234567890123456 eni-1235b8ca123456789 123456789010 IPv4 52.213.180.42 10.0.0.62 43416 5001 52.213.180.42 10.0.0.62 6 568 8 1566848875 1566848933 ACCEPT 2 OK
3 vpc-abcdefab012345678 subnet-aaaaaaaa012345678 i-01234567890123456 eni-1235b8ca123456789 123456789010 IPv4 10.0.0.62 52.213.180.42 5001 43416 10.0.0.62 52.213.180.42 6 376 7 1566848875 1566848933 ACCEPT 18 OK
3 vpc-abcdefab012345678 subnet-aaaaaaaa012345678 i-01234567890123456 eni-1235b8ca123456789 123456789010 IPv4 52.213.180.42 10.0.0.62 43418 5001 52.213.180.42 10.0.0.62 6 100701 70 1566848875 1566848933 ACCEPT 2 OK
3 vpc-abcdefab012345678 subnet-aaaaaaaa012345678 i-01234567890123456 eni-1235b8ca123456789 123456789010 IPv4 10.0.0.62 52.213.180.42 5001 43418 10.0.0.62 52.213.180.42 6 632 12 1566848875 1566848933 ACCEPT 18 OK
```

두 번째 집계 간격에서 이전 흐름 중에 설정된 연결 중 하나가 닫힙니다. 서버는 포트 43418 연결을 위해 FIN 플래그(1)를 클라이언트로 보냈습니다. 클라이언트가 43418 포트에서 서버에 FIN으로 응답했습니다.

```
3 vpc-abcdefab012345678 subnet-aaaaaaaa012345678 i-01234567890123456 eni-1235b8ca123456789 123456789010 IPv4 10.0.0.62 52.213.180.42 5001 43418 10.0.0.62 52.213.180.42 6 63388 1219 1566848933 1566849113 ACCEPT 1 OK
3 vpc-abcdefab012345678 subnet-aaaaaaaa012345678 i-01234567890123456 eni-1235b8ca123456789 123456789010 IPv4 52.213.180.42 10.0.0.62 43418 5001 52.213.180.42 10.0.0.62 6 23294588 15774 1566848933 1566849113 ACCEPT 1 OK
```

단일 집계 간격 내에서 열리고 닫히는 짧은 연결(예: 몇 초)의 경우 동일한 방향으로 트래픽 흐름을 위해 흐름 로그 레코드에서 같은 줄에 플래그가 설정될 수 있습니다. 다음 예시에서는 동일한 집계 간격 내에서 연결이 설정되고 완료됩니다. 첫 번째 줄에서 TCP 플래그 값은 3입니다. 이는 클라이언트에서 서버로 전송된 SYN 및 FIN 메시지가 있음을 나타냅니다. 두 번째 줄에서 TCP 플래그 값은 19입니다. 이는 서버에서 클라이언트로 전송된 SYN-ACK 및 FIN 메시지가 있음을 나타냅니다.

```
3 vpc-abcdefab012345678 subnet-aaaaaaaa012345678 i-01234567890123456 eni-1235b8ca123456789 123456789010 IPv4 52.213.180.42 10.0.0.62 43638 5001 52.213.180.42 10.0.0.62 6 1260 17 1566933133 1566933193 ACCEPT 3 OK
3 vpc-abcdefab012345678 subnet-aaaaaaaa012345678 i-01234567890123456 eni-1235b8ca123456789 123456789010 IPv4 10.0.0.62 52.213.180.42 5001 43638  10.0.0.62 52.213.180.42 6 967 14 1566933133 1566933193 ACCEPT 19 OK
```

## 영역 NAT 게이트웨이를 통한 트래픽
<a name="flow-log-example-nat"></a>

이 예시에서 프라이빗 서브넷의 인스턴스는 퍼블릭 서브넷에 있는 영역 NAT 게이트웨이를 통해 인터넷에 액세스합니다.

![\[영역 NAT 게이트웨이를 통해 인터넷에 액세스\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/images/flow-log-nat-gateway.png)


영역 NAT 게이트웨이 네트워크 인터페이스에 대한 다음 사용자 지정 흐름 로그는 다음 필드를 다음 순서로 캡처합니다.

```
instance-id interface-id srcaddr dstaddr pkt-srcaddr pkt-dstaddr
```

흐름 로그는 영역 NAT 게이트웨이 네트워크 인터페이스를 통해 인스턴스 IP 주소(10.0.1.5)에서 인터넷의 호스트(203.0.113.5)로의 트래픽 흐름을 보여줍니다. 영역 NAT 게이트웨이 네트워크 인터페이스는 요청자 관리형 네트워크 인터페이스이므로, 흐름 로그 레코드는 instance-id 필드에 '-' 기호를 표시합니다. 다음 줄은 소스 인스턴스에서 영역 NAT 게이트웨이 네트워크 인터페이스로의 트래픽을 보여줍니다. dstaddr 및 pkt-dstaddr 필드의 값은 다릅니다. dstaddr 필드에는 영역 NAT 게이트웨이 네트워크 인터페이스의 프라이빗 IP 주소가 표시되고, pkt-dstaddr 필드에는 인터넷에 있는 호스트의 최종 대상 IP 주소가 표시됩니다.

```
- eni-1235b8ca123456789 10.0.1.5 10.0.0.220 10.0.1.5 203.0.113.5
```

다음 두 줄은 영역 NAT 게이트웨이 네트워크 인터페이스에서 인터넷의 대상 호스트로의 트래픽과 호스트에서 NAT 게이트웨이 네트워크 인터페이스로의 응답 트래픽을 보여줍니다.

```
- eni-1235b8ca123456789 10.0.0.220 203.0.113.5 10.0.0.220 203.0.113.5
- eni-1235b8ca123456789 203.0.113.5 10.0.0.220 203.0.113.5 10.0.0.220
```

다음 줄은 영역 NAT 게이트웨이 네트워크 인터페이스에서 소스 인스턴스로의 응답 트래픽을 보여줍니다. srcaddr 및 pkt-srcaddr 필드의 값은 다릅니다. srcaddr 필드에는 영역 NAT 게이트웨이 네트워크 인터페이스의 프라이빗 IP 주소가 표시되고, pkt-srcaddr 필드에는 인터넷에 있는 호스트의 IP 주소가 표시됩니다.

```
- eni-1235b8ca123456789 10.0.0.220 10.0.1.5 203.0.113.5 10.0.1.5
```

위와 동일한 필드 세트를 사용하여 다른 사용자 정의 흐름 로그를 작성합니다. 프라이빗 서브넷에서 인스턴스의 네트워크 인터페이스에 대한 흐름 로그를 생성합니다. 이 경우 instance-id 필드는 네트워크 인터페이스와 연결된 인스턴스의 ID를 반환하며, dstaddr 및 pkt-dstaddr 필드와 srcaddr 및 pkt-srcaddr 필드 사이에는 차이가 없습니다. 영역 NAT 게이트웨이의 네트워크 인터페이스와 달리, 이 네트워크 인터페이스는 트래픽의 중간 네트워크 인터페이스가 아닙니다.

```
i-01234567890123456 eni-1111aaaa2222bbbb3 10.0.1.5 203.0.113.5 10.0.1.5 203.0.113.5 #Traffic from the source instance to host on the internet
i-01234567890123456 eni-1111aaaa2222bbbb3 203.0.113.5 10.0.1.5 203.0.113.5 10.0.1.5 #Response traffic from host on the internet to the source instance
```

## 리전 NAT 게이트웨이를 통한 트래픽
<a name="flow-log-example-regional-nat"></a>

리전 NAT 게이트웨이는 서로 다른 가용 영역에 있는 여러 서브넷에 연결할 수 있습니다. 이 예시에서 서로 다른 두 가용 영역의 프라이빗 서브넷에 있는 두 인스턴스는 동일한 리전 NAT 게이트웨이를 통해 인터넷에 액세스합니다. 다음 흐름 로그는 리전 NAT 게이트웨이를 통해 인스턴스 중 하나에서 인터넷으로의 트래픽을 보여줍니다.

![\[리전 NAT 게이트웨이를 통해 인터넷에 액세스\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/images/flow-log-regional-nat-gateway.png)


리전 NAT 게이트웨이에 대한 다음 사용자 지정 흐름 로그는 다음 필드를 다음 순서로 캡처합니다.

```
resource-id instance-id interface-id subnet-id srcaddr dstaddr pkt-srcaddr pkt-dstaddr
```

흐름 로그는 리전 NAT 게이트웨이를 통해 인스턴스 IP 주소(10.0.1.5)에서 인터넷의 호스트(203.0.113.5)로의 트래픽 흐름을 보여줍니다. instance-id, interface-id, subnet-id는 리전 NAT 게이트웨이에 적용되지 않습니다. 따라서 흐름 로그 레코드는 해당 필드에 '-' 기호를 표시합니다. 대신 resource-id 필드에는 리전 NAT 게이트웨이의 ID가 표시됩니다. dstaddr 및 pkt-dstaddr 필드에는 인터넷에 있는 호스트의 최종 대상 IP 주소가 표시됩니다.

```
nat-1234567890abcdef - - - 10.0.1.5 203.0.113.5 10.0.1.5 203.0.113.5
```

다음 두 줄은 리전 NAT 게이트웨이(퍼블릭 IP 주소 107.22.182.139)에서 인터넷의 대상 호스트로의 트래픽과 호스트에서 리전 NAT 게이트웨이로의 응답 트래픽을 보여줍니다.

```
nat-1234567890abcdef - - - 107.22.182.139 203.0.113.5 107.22.182.139 203.0.113.5
nat-1234567890abcdef - - - 203.0.113.5 107.22.182.139 203.0.113.5 107.22.182.139
```

다음 줄은 리전 NAT 게이트웨이에서 소스 인스턴스로의 응답 트래픽을 보여줍니다. srcaddr 및 pkt-srcaddr 필드에는 인터넷에 있는 호스트의 IP 주소가 표시됩니다.

```
nat-1234567890abcdef - - - 203.0.113.5 10.0.1.5 203.0.113.5 10.0.1.5
```

위와 동일한 필드 세트를 사용하여 다른 사용자 정의 흐름 로그를 작성합니다. 프라이빗 서브넷에서 인스턴스의 네트워크 인터페이스에 대한 흐름 로그를 생성합니다. 이 경우 instance-id 필드는 네트워크 인터페이스와 연결된 인스턴스의 ID를 반환하며, resource-id는 '-'입니다. dstaddr 및 pkt-dstaddr 필드와 srcaddr 및 pkt-srcaddr 필드 간에는 차이가 없습니다.

```
- i-01234567890123456 eni-1111aaaa2222bbbb3 subnet-aaaaaaaa012345678 10.0.1.5 203.0.113.5 10.0.1.5 203.0.113.5 #Traffic from the source instance to host on the internet
- i-01234567890123456 eni-1111aaaa2222bbbb3 subnet-aaaaaaaa012345678 203.0.113.5 10.0.1.5 203.0.113.5 10.0.1.5 #Response traffic from host on the internet to the source instance
```

## 전송 게이트웨이를 통한 트래픽
<a name="flow-log-example-tgw"></a>

이 예에서 VPC A의 클라이언트는 전송 게이트웨이를 통해 VPC B의 웹 서버에 연결합니다. 클라이언트와 서버가 서로 다른 가용 영역에 있습니다. 트래픽은 탄력적 네트워크 인터페이스 ID 하나(이 예에서 ID가 eni-11111111111111111임)를 사용하여 VPC B의 서버에 도착하고 다른 ID(예: eni-22222222222222222)를 사용하여 VPC B를 떠납니다.

![\[전송 게이트웨이를 통한 트래픽\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/images/flow-log-tgw.png)


다음 형식으로 VPC B에 대한 사용자 지정 흐름 로그를 생성합니다.

```
version interface-id account-id vpc-id subnet-id instance-id srcaddr dstaddr srcport dstport protocol tcp-flags type pkt-srcaddr pkt-dstaddr action log-status
```

흐름 로그 레코드의 다음 줄은 웹 서버의 네트워크 인터페이스에서의 트래픽 흐름을 보여줍니다. 첫 번째 줄은 클라이언트의 요청 트래픽이고 마지막 줄은 웹 서버의 응답 트래픽입니다.

```
3 eni-33333333333333333 123456789010 vpc-abcdefab012345678 subnet-22222222bbbbbbbbb i-01234567890123456 10.20.33.164 10.40.2.236 39812 80 6 3 IPv4 10.20.33.164 10.40.2.236 ACCEPT OK
...
3 eni-33333333333333333 123456789010 vpc-abcdefab012345678 subnet-22222222bbbbbbbbb i-01234567890123456 10.40.2.236 10.20.33.164 80 39812 6 19 IPv4 10.40.2.236 10.20.33.164 ACCEPT OK
```

다음 줄은 subnet-11111111aaaaaaaaa 서브넷의 전송 게이트웨이에 대한 요청자 관리 네트워크 인터페이스인 eni-11111111111111111에서의 요청 트래픽입니다. 흐름 로그 레코드는 instance-id 필드에 '-' 기호를 표시합니다. srcaddr 필드에는 전송 게이트웨이 네트워크 인터페이스의 프라이빗 IP 주소가 표시되고, pkt-srcaddr 필드에는 VPC A의 클라이언트의 원본 IP 주소가 표시됩니다.

```
3 eni-11111111111111111 123456789010 vpc-abcdefab012345678 subnet-11111111aaaaaaaaa - 10.40.1.175 10.40.2.236 39812 80 6 3 IPv4 10.20.33.164 10.40.2.236 ACCEPT OK
```

다음 줄은 subnet-22222222bbbbbbbbb 서브넷의 전송 게이트웨이에 대한 요청자 관리 네트워크 인터페이스인 eni-22222222222222222에서의 응답 트래픽입니다. dstaddr 필드에는 전송 게이트웨이 네트워크 인터페이스의 프라이빗 IP 주소가 표시되고, pkt-dstaddr 필드에는 VPC A의 클라이언트의 IP 주소가 표시됩니다.

```
3 eni-22222222222222222 123456789010 vpc-abcdefab012345678 subnet-22222222bbbbbbbbb - 10.40.2.236 10.40.2.31 80 39812 6 19 IPv4 10.40.2.236 10.20.33.164 ACCEPT OK
```

## 서비스 이름, 트래픽 경로 및 흐름 방향
<a name="flow-log-example-traffic-path"></a>

다음은 사용자 지정 흐름 로그 레코드의 필드 예시입니다.

```
version srcaddr dstaddr srcport dstport protocol start end type packets bytes account-id vpc-id subnet-id instance-id interface-id region az-id sublocation-type sublocation-id action tcp-flags pkt-srcaddr pkt-dstaddr pkt-src-aws-service pkt-dst-aws-service traffic-path flow-direction log-status
```

다음 예시에서는 레코드에 버전 5 필드가 포함되어 있으므로 버전이 5입니다. EC2 인스턴스가 Amazon S3 서비스를 호출합니다. 흐름 로그는 인스턴스의 네트워크 인터페이스에서 캡처됩니다. 첫 번째 레코드의 흐름 방향은 ingress이고 두 번째 레코드의 흐름 방향은 egress입니다. egress 레코드의 traffic-path는 8로, 트래픽이 인터넷 게이트웨이를 통해 전송된다는 것을 나타냅니다. traffic-path 트래픽에 대해서는 ingress 필드가 지원되지 않습니다. pkt-srcaddr 또는 pkt-dstaddr이 퍼블릭 IP 주소인 경우 서비스 이름이 표시됩니다.

```
5 52.95.128.179 10.0.0.71 80 34210 6 1616729292 1616729349 IPv4 14 15044 123456789012 vpc-abcdefab012345678 subnet-aaaaaaaa012345678 i-0c50d5961bcb2d47b eni-1235b8ca123456789 ap-southeast-2 apse2-az3 - - ACCEPT 19 52.95.128.179 10.0.0.71 S3 - - ingress OK
5 10.0.0.71 52.95.128.179 34210 80 6 1616729292 1616729349 IPv4 7 471 123456789012 vpc-abcdefab012345678 subnet-aaaaaaaa012345678 i-0c50d5961bcb2d47b eni-1235b8ca123456789 ap-southeast-2 apse2-az3 - - ACCEPT 3 10.0.0.71 52.95.128.179 - S3 8 egress OK
```

# 흐름 로그 제한
<a name="flow-logs-limitations"></a>

흐름 로그를 사용하려면 다음과 같은 제한 사항을 알아 두어야 합니다.
+ 흐름 로그를 생성한 후에는 선택한 네트워크 인터페이스, 서브넷 또는 VPC에 대한 활성 트래픽이 있을 때까지 흐름 로그 데이터가 표시되지 않습니다.
+ 피어 VPC가 본인의 계정이 아닌 한, 본인의 VPC와 피어링된 VPC에 대해 흐름 로그를 활성화할 수 없습니다.
+ 흐름 로그를 생성한 후에는 구성 또는 흐름 로그 레코드 형식을 변경할 수 없습니다. 예를 들어 다른 IAM 역할을 흐름 로그와 연결하거나 흐름 로그 레코드에서 필드를 추가 또는 제거할 수 없습니다. 대신에 흐름 로그를 삭제한 후 필요한 구성으로 새로운 흐름 로그를 생성할 수 있습니다.
+ 네트워크 인터페이스에 IPv4 주소가 여러 개 있고 트래픽이 보조 프라이빗 IPv4 주소로 전송되는 경우, 흐름 로그는 `dstaddr` 필드에 주 프라이빗 IPv4 주소를 표시합니다. 원래 대상 IP 주소를 캡처하려면 `pkt-dstaddr` 필드로 흐름 로그를 작성하세요.
+ 트래픽이 네트워크 인터페이스로 전송된 경우 대상이 네트워크 인터페이스의 IP 주소가 아니면 흐름 로그에 `dstaddr` 필드의 기본 프라이빗 IPv4 주소가 표시됩니다. 원래 대상 IP 주소를 캡처하려면 `pkt-dstaddr` 필드로 흐름 로그를 작성하세요.
+  트래픽이 네트워크 인터페이스에서 전송되었고 원본이 네트워크 인터페이스의 IP 주소가 아니며 로그 레코드가 발신 흐름 관련인 경우, 흐름 로그에 `srcaddr` 필드의 기본 프라이빗 IPv4 주소가 표시됩니다. 원래 소스 IP 주소를 캡처하려면 `pkt-srcaddr` 필드로 흐름 로그를 작성하세요. 로그 레코드가 네트워크 인터페이스로의 수신 흐름 관련인 경우 `srcaddr` 필드에 네트워크 인터페이스의 기본 프라이빗 IP가 표시되지 않습니다.
+ 네트워크 인터페이스가 [NITRO 기반 인스턴스](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html)에 연결된 경우 집계 간격은 지정된 최대 집계 간격에 관계없이 항상 1분 이하입니다.
+ `pkt-srcaddr` 및 `pkt-dstaddr` 필드의 경우 중간 계층에 클라이언트 IP 주소 보존이 활성화된 경우 이 필드에는 중간 계층의 IP 주소 대신 보존된 클라이언트 IP가 표시될 수 있습니다.
+ `traffic-path` 필드의 경우, 값은 동일한 VPC의 리소스를 통과하는 흐름과 Outpost 로컬 게이트웨이를 통과하는 흐름에 대해 동일합니다.
+ 집계 간격 중 일부 흐름 로그 레코드를 건너뛸 수 있습니다([사용 가능한 필드](flow-log-records.md#flow-logs-fields)의 **log-status 참조). 내부 AWS 용량 제한 또는 내부 오류가 원인일 수 있습니다. AWS Cost Explorer를 사용하여 VPC 흐름 로그 요금을 확인하고 흐름 로그 집계 간격 중에 일부 흐름 로그를 건너뛴 경우 AWS Cost Explorer에 보고된 흐름 로그 수가 Amazon VPC에서 게시한 흐름 로그 수보다 많습니다.
+ [VPC 퍼블릭 액세스 차단(BPA)](security-vpc-bpa-assess-impact-main.md#security-vpc-bpa-fl)을 사용하는 경우:
  + VPC BPA의 흐름 로그에는 [건너뛴 레코드](flow-logs-records-examples.md#flow-log-example-no-data)가 포함되지 않습니다.
  + 흐름 로그에 `bytes` 필드를 포함하더라도 VPC BPA의 흐름 로그에는 [`bytes`](flow-log-records.md#flow-logs-fields)가 포함되지 않습니다.

흐름 로그는 모든 IP 트래픽을 캡처하지는 않습니다. 다음 트래픽 유형은 기록되지 않습니다.
+ 인스턴스가 Amazon DNS 서버에 연결할 때 생성한 트래픽. 고유 DNS 서버를 사용할 경우 DNS 서버에 대한 모든 트래픽은 기록됩니다.
+ Amazon Windows 라이선스 인증을 위해 Windows 인스턴스에서 생성한 트래픽.
+ 인스턴스 메타데이터를 위해 `169.254.169.254`와 주고받는 트래픽.
+ Amazon Time Sync Service를 위해 `169.254.169.123`와 주고받는 트래픽.
+ DHCP 트래픽.
+ [트래픽 미러링](https://docs.aws.amazon.com/vpc/latest/mirroring/traffic-mirroring-how-it-works.html) 소스 트래픽. 트래픽 미러링 대상 트래픽만 볼 수 있습니다.
+ 기본 VPC 라우터의 예약된 IP 주소로 보내는 트래픽.
+ 엔드포인트 네트워크 인터페이스와 Network Load Balancer 네트워크 인터페이스 간의 트래픽.
+ 주소 확인 프로토콜(ARP) 트래픽.
+ 생성 후 몇 분 내에 삭제되는 수명이 짧은 리전 NAT 게이트웨이의 트래픽.

버전 7에서 사용할 수 있는 ECS 필드에만 적용되는 제한 사항:
+ 흐름 로그 구독의 소유자가 기본 ECS 태스크를 소유하지 않은 경우 ECS 필드는 계산되지 않습니다. 예를 들어, 서브넷(`SubnetA`)을 다른 계정(`AccountB`)과 공유한 다음 `SubnetA`에 대한 흐름 로그 구독을 생성하는 경우 `AccountB`가 공유 서브넷에서 ECS 태스크를 시작하면 구독은 `AccountB`에서 시작한 ECS 태스크에서 트래픽 로그를 수신하지만 보안 문제로 인해 이러한 로그의 ECS 필드는 계산되지 않습니다.
+ VPC/서브넷 리소스 수준에서 ECS 필드를 사용하여 흐름 로그 구독을 생성하는 경우 비ECS 네트워크 인터페이스에 대해 생성된 모든 트래픽도 구독에 전달됩니다. 비ECS IP 트래픽의 경우 ECS 필드 값은 '-'가 됩니다. 예를 들어 서브넷(`subnet-000000`)이 있고 ECS 필드(`fl-00000000`)로 이 서브넷에 대한 흐름 로그 구독을 생성합니다. `subnet-000000`에서 인터넷에 연결되어 있고 IP 트래픽을 활발하게 생성하는 EC2 인스턴스(`i-0000000`)를 시작합니다. 또한 동일한 서브넷에서 실행 중인 ECS 태스크(`ECS-Task-1`)를 시작합니다. `i-0000000`과 `ECS-Task-1` 모두 IP 트래픽을 생성하므로 흐름 로그 구독 `fl-00000000`은 두 엔터티 모두에 대한 트래픽 로그를 제공합니다. 그러나 `ECS-Task-1`만이 logFormat에 포함된 ECS 필드에 대한 실제 ECS 메타데이터를 갖습니다. `i-0000000` 관련 트래픽의 경우 이러한 필드의 값은 '-'가 됩니다.
+ `ecs-container-id`와 `ecs-second-container-id`는 VPC 흐름 로그 서비스가 ECS 이벤트 스트림에서 수신할 때 순서가 지정됩니다. ECS 콘솔 또는 DescribeTask API 직접 호출에서 볼 수 있는 순서와 동일하다는 보장은 없습니다. 태스크가 계속 실행되는 동안 컨테이너가 STOPPED 상태가 되면 로그에 계속 표시될 수 있습니다.
+ ECS 메타데이터와 IP 트래픽 로그는 서로 다른 두 소스에서 가져온 것입니다. 업스트림 종속성에서 필요한 모든 정보를 얻는 즉시 ECS 트래픽 계산이 시작됩니다. 새 태스크를 시작하면 1) 기본 네트워크 인터페이스에 대한 IP 트래픽이 수신되는 경우와 2) ECS 태스크가 현재 실행 중임을 나타내는 태스크에 대한 메타데이터가 포함된 ECS 이벤트가 수신되는 경우 ECS 필드 계산이 시작됩니다. 태스크를 중지하면 1) 기본 네트워크 인터페이스에 대한 IP 트래픽이 더 이상 수신되지 않거나 하루 이상 지연되는 IP 트래픽이 수신되는 경우와 2) ECS 태스크가 더 이상 실행되지 않음을 나타내는 태스크에 대한 메타데이터가 포함된 ECS 이벤트가 수신되는 경우 ECS 필드 계산이 중지됩니다.
+ `awsvpc` [네트워크](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html) 모드에서 시작된 ECS 태스크만 지원됩니다.

`encryption-status` 필드에만 적용되는 제한 사항:
+ 일부 네트워크 어플라이언스의 암호화 상태 보고 제한으로 인해 일부 흐름에서 암호화 상태가 '-'(사용할 수 없음)일 수 있습니다. 사용자는 분석에서 이러한 흐름을 무시할 수 있습니다.
+ 모니터링 모드에서 암호화된 상태로 표시된다고 해서 적용 모드에서 흐름이 허용된다는 것은 아닙니다. 그 반대의 경우도 마찬가지입니다.
  + 흐름이 모니터링 모드에서 암호화된 경우 적용 모드에서 규정을 준수하지 않을 수 있습니다.
    + 흐름에 AWS 서비스에서 생성한 ENI가 포함된 경우 서비스가 암호화 제어를 지원해야 합니다.
    + 흐름이 VPC 피어링을 통과하는 경우 피어링된 VPC는 암호화 제어를 강제하지 않을 수 있습니다.
  + 흐름이 모니터링 모드에서 암호화되지 않은 경우 흐름과 관련된 서비스가 제외 항목으로 추가되어도 여전히 적용 모드에서 규정을 준수할 수 있습니다.

## 가격 책정
<a name="flow-logs-pricing"></a>

흐름 로그를 게시하면 벤딩 로그에 대한 데이터 모으기 및 보관 요금이 적용됩니다. 벤딩 로그를 게시할 때 요금에 대해 자세히 알아보려면 [Amazon CloudWatch Pricing](https://aws.amazon.com/cloudwatch/pricing/)(Amazon CloudWatch 요금)을 열고 **Logs**(로그)를 선택하고 **Vended Logs**(벤딩 로그)를 찾으세요.

흐름 로그 게시의 요금을 추적하려는 경우 대상 리소스에 비용 할당 태그를 적용할 수 있습니다. 이후에 AWS 비용 할당 보고서에 이러한 태그로 집계된 사용량 및 비용이 포함됩니다. 비즈니스 범주를 나타내는 태그(예: 비용 센터, 애플리케이션 이름 또는 소유자)를 적용하여 비용을 정리할 수 있습니다. 자세한 내용은 다음 자료를 참조하세요.
+ *AWS Billing 사용 설명서*의 [비용 할당 태그 사용](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)
+ *Amazon CloudWatch Logs 사용 설명서*의 [Amazon CloudWatch Logs의 로그 그룹에 태그 지정](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#log-group-tagging)
+ *Amazon Simple Storage Service 사용 설명서*의 [비용 할당 S3 버킷 태그 사용](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CostAllocTagging.html)
+ **Amazon Data Firehose 개발자 안내서의 [전송 스트림 태그 지정](https://docs.aws.amazon.com/firehose/latest/dev/firehose-tagging.html)

# 흐름 로그 작업
<a name="working-with-flow-logs"></a>

Amazon EC2 및 Amazon VPC의 콘솔을 사용하여 흐름 로그를 연동할 수 있습니다.

**Topics**
+ [1. IAM으로 흐름 로그 사용 제어](#controlling-use-of-flow-logs)
+ [2. 흐름 로그 생성](#create-flow-log)
+ [3. 흐름 로그 태그 지정](#modify-tags-flow-logs)
+ [4. 흐름 로그 삭제](#delete-flow-log)
+ [명령줄 개요](#flow-logs-api-cli)

## 1. IAM으로 흐름 로그 사용 제어
<a name="controlling-use-of-flow-logs"></a>

기본적으로 사용자에게는 흐름 로그 사용 권한이 없습니다. 사용자에게 흐름 로그를 생성, 설명, 삭제하는 권한을 부여하는 정책이 연결된 IAM 역할을 만들 수 있습니다.

다음은 사용자에게 흐름 로그를 생성, 설명 및 삭제할 수 있는 전체 권한을 부여하는 정책의 예입니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DeleteFlowLogs",
        "ec2:CreateFlowLogs",
        "ec2:DescribeFlowLogs"
      ],
      "Resource": "*"
    }
  ]
}
```

------

 자세한 내용은 [Amazon VPC가 IAM과 작동하는 방식](security_iam_service-with-iam.md) 단원을 참조하세요.

## 2. 흐름 로그 생성
<a name="create-flow-log"></a>

VPC, 서브넷 또는 네트워크 인터페이스에 대한 흐름 로그를 생성할 수 있습니다. 흐름 로그를 생성할 때 흐름 로그의 대상을 지정해야 합니다. 자세한 내용은 다음 자료를 참조하세요.
+ [CloudWatch Logs에 게시하는 흐름 로그 생성](flow-logs-cwl-create-flow-log.md)
+ [Amazon S3에 게시하는 흐름 로그 생성](flow-logs-s3-create-flow-log.md)
+ [Amazon Data Firehose에 게시하는 흐름 로그 생성](flow-logs-firehose-create-flow-log.md)

## 3. 흐름 로그 태그 지정
<a name="modify-tags-flow-logs"></a>

언제든지 흐름 로그의 태그를 추가하거나 제거할 수 있습니다.

**흐름 로그의 태그를 관리하는 방법**

1. 다음 중 하나를 수행하세요.
   + [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다. 탐색 창에서 **Network Interfaces**를 선택합니다. 네트워크 인터페이스의 확인란을 선택합니다.
   + [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다. 탐색 창에서 **Your VPCs**를 선택합니다. VPC에 대한 확인란을 선택합니다.
   + [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다. 탐색 창에서 **Subnets**를 선택합니다. 서브넷의 확인란을 선택합니다.

1. **Flow Logs**(흐름 로그)를 선택합니다.

1. **작업**, **태그 관리**를 선택합니다.

1. 태그를 추가하려면 **Add new tag**(새 태그 추가)를 선택하고 키와 값을 입력합니다. 태그를 제거하려면 **제거**를 선택합니다.

1. 태그 추가 또는 제거를 마쳤으면 **Save**(저장)를 선택합니다.

## 4. 흐름 로그 삭제
<a name="delete-flow-log"></a>

언제든지 흐름 로그를 삭제할 수 있습니다. 흐름 로그를 삭제하면 데이터 수집 중단까지 몇 분 정도 걸릴 수 있습니다.

흐름 로그를 삭제해도 대상의 로그 데이터가 삭제되거나 대상 리소스가 수정되지 않습니다. 대상 서비스의 콘솔을 사용하여 기존 흐름 로그 데이터를 대상에서 직접 삭제하고 대상 리소스를 정리해야 합니다.

**흐름 로그를 삭제하는 방법**

1. 다음 중 하나를 수행하세요.
   + [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다. 탐색 창에서 **Network Interfaces**를 선택합니다. 네트워크 인터페이스의 확인란을 선택합니다.
   + [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다. 탐색 창에서 **Your VPCs**를 선택합니다. VPC에 대한 확인란을 선택합니다.
   + [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다. 탐색 창에서 **Subnets**를 선택합니다. 서브넷의 확인란을 선택합니다.

1. **Flow Logs**(흐름 로그)를 선택합니다.

1. **Actions**(작업), **Delete flow logs**(흐름 로그 삭제)를 선택합니다.

1. 확인 메시지가 나타나면 **delete**를 입력한 다음 **삭제(Delete)**를 선택합니다.

## 명령줄 개요
<a name="flow-logs-api-cli"></a>

이 페이지에서 설명한 작업은 명령줄을 사용하여 수행할 수 있습니다.

**흐름 로그 생성**
+ [create-flow-logs](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-flow-logs.html)(AWS CLI)
+ [New-EC2FlowLog](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2FlowLog.html)(AWS Tools for Windows PowerShell)

**흐름 로그 설명**
+ [describe-flow-logs](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-flow-logs.html)(AWS CLI)
+ [Get-EC2FlowLog](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2FlowLog.html)(AWS Tools for Windows PowerShell)

**흐름 로그 태그 지정**
+ [create-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-tags.html) 및 [delete-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-tags.html)(AWS CLI)
+ [New-EC2Tag](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Tag.html) 및[Remove-EC2Tag](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2Tag.html)(AWS Tools for Windows PowerShell)

**흐름 로그 삭제**
+ [delete-flow-logs](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-flow-logs.html)(AWS CLI)
+ [Remove-EC2FlowLog](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2FlowLog.html)(AWS Tools for Windows PowerShell)

# CloudWatch Logs에 흐름 로그 게시
<a name="flow-logs-cwl"></a>

흐름 로그는 흐름 로그 데이터를 Amazon CloudWatch에 직접 게시할 수 있습니다. Amazon CloudWatch는 포괄적인 모니터링 및 관찰성 서비스로, 다양한 AWS 리소스뿐만 아니라 자체 애플리케이션과 서비스에서 지표, 로그 및 이벤트 데이터를 수집하고 추적합니다. CloudWatch는 리소스 사용률, 애플리케이션 성능 및 운영 상태에 대한 가시성을 제공하여 시스템 전반의 성능 변화와 잠재적 문제를 감지하고 대응할 수 있도록 지원합니다. CloudWatch를 사용하면 경보를 설정하고, 로그와 지표를 시각화하고, 자동으로 대응하여 클라우드 리소스를 수집하고 최적화할 수 있습니다. 이는 클라우드 기반 인프라와 애플리케이션의 신뢰성, 가용성 및 성능을 보장하는 데 필수적인 도구입니다.

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

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

CloudWatch Logs에 대한 자세한 내용은 [Amazon CloudWatch Logs 사용 설명서](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-CWL)의 *CloudWatch Logs로 전송된 로그*를 참조하세요.

**가격 책정**  
CloudWatch Logs에 흐름 로그를 게시할 때는 Vended 로그에 대한 데이터 수집 및 아카이브 요금이 부과됩니다. 자세히 알아보려면 [Amazon CloudWatch Pricing](https://aws.amazon.com/cloudwatch/pricing/)(Amazon CloudWatch 요금)을 열고, **Logs**(로그)를 선택하고, **Vended Logs**(벤딩 로그)를 찾으세요.

**Topics**
+ [CloudWatch Logs에 흐름 로그를 게시하는 IAM 역할](flow-logs-iam-role.md)
+ [CloudWatch Logs에 게시하는 흐름 로그 생성](flow-logs-cwl-create-flow-log.md)
+ [CloudWatch Logs로 흐름 로그 레코드 보기](view-flow-log-records-cwl.md)
+ [흐름 로그 레코드 검색](search-flow-log-records-cwl.md)
+ [CloudWatch Logs에서 흐름 로그 레코드 처리](process-records-cwl.md)

# CloudWatch Logs에 흐름 로그를 게시하는 IAM 역할
<a name="flow-logs-iam-role"></a>

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

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

------
#### [ JSON ]

****  

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

------

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

------
#### [ JSON ]

****  

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

------

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

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

## 흐름 로그에 대한 IAM 역할 생성
<a name="create-flow-logs-role"></a>

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

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

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

1. 탐색 창에서 **Policies**를 선택합니다.

1. [**정책 생성**]을 선택합니다.

1. **정책 생성** 페이지에서 다음을 수행합니다.

   1. **JSON**을 선택합니다.

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

   1. **다음**을 선택합니다.

   1. 정책의 이름과 설명(선택 사항) 및 태그를 입력한 다음에 **정책 생성**을 선택합니다.

1. 탐색 창에서 **Roles**를 선택합니다.

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

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

   ```
   "Principal": {
      "Service": "vpc-flow-logs.amazonaws.com"
   },
   ```

1. **Add permissions**(권한 추가) 페이지에서 이 절차의 앞부분에서 생성한 정책의 확인란을 선택한 후 **Next**(다음)를 선택합니다.

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

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

# CloudWatch Logs에 게시하는 흐름 로그 생성
<a name="flow-logs-cwl-create-flow-log"></a>

VPC, 서브넷 또는 네트워크 인터페이스에 대한 흐름 로그를 생성할 수 있습니다. 특정 IAM 역할을 사용하는 사용자로 이러한 단계를 수행하는 경우 `iam:PassRole` 작업을 사용할 수 있는 권한이 있는지 확인하세요.

**사전 조건**  
요청을 수행하는 데 사용 중인 IAM 보안 주체에 `iam:PassRole` 작업을 직접적으로 호출할 수 있는 권한이 있는지 확인하세요.

------
#### [ JSON ]

****  

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

------

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

1. 다음 중 하나를 수행하세요.
   + [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다. 탐색 창에서 **Network Interfaces**를 선택합니다. 네트워크 인터페이스의 확인란을 선택합니다.
   + [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다. 탐색 창에서 **Your VPCs**를 선택합니다. VPC에 대한 확인란을 선택합니다.
   + [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다. 탐색 창에서 **Subnets**를 선택합니다. 서브넷의 확인란을 선택합니다.

1. **작업**, **흐름 로그 생성**을 선택합니다.

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

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

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

1. **대상 로그 그룹**에서 기존 로그 그룹의 이름을 선택하거나 새 흐름 로그의 이름을 입력합니다. 이름을 입력하면 로깅할 트래픽이 있을 때 로그 그룹이 생성됩니다.

1. **서비스 액세스**에서 CloudWatch Logs에 로그를 게시할 권한이 있는 기존 [IAM 서비스 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)을 선택하거나 새 서비스 역할을 생성하도록 선택합니다.

1. **로그 레코드 형식**에서 흐름 로그 레코드의 형식을 선택합니다.
   + 기본 형식을 사용하려면 **AWS 기본 형식**을 선택하세요.
   + 사용자 지정 형식을 사용하려면 **사용자 지정 형식**을 선택하고 **로그 형식**에서 필드를 선택합니다.

1. **추가 메타데이터**에서 Amazon ECS의 메타데이터를 로그 형식으로 포함할지 선택합니다.

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

1. **흐름 로그 생성**을 선택합니다.

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

다음 명령 중 하나를 사용합니다.
+ [create-flow-logs](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-flow-logs.html)(AWS CLI)
+ [New-EC2FlowLog](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2FlowLog.html)(AWS Tools for Windows PowerShell)

다음 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로 흐름 로그 레코드 보기
<a name="view-flow-log-records-cwl"></a>

CloudWatch Logs 콘솔을 사용하여 흐름 로그 레코드를 볼 수 있습니다. 흐름 로그를 생성하면 콘솔에 표시되는 데 몇 분 정도 걸릴 수도 있습니다.

**콘솔을 사용하여 CloudWatch Logs에 게시된 흐름 로그 레코드를 보는 방법**

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

1. 탐색 창에서 **Logs**, **Log groups**를 선택합니다.

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

1. 흐름 로그 레코드가 있는 로그 스트림의 이름을 선택합니다. 자세한 내용은 [흐름 로그 레코드](flow-log-records.md) 단원을 참조하세요.

**명령줄을 사용하여 CloudWatch Logs에 게시된 흐름 로그 레코드를 보는 방법**
+ [get-log-events](https://docs.aws.amazon.com/cli/latest/reference/logs/get-log-events.html)(AWS CLI)
+ [Get-CWLLogEvent](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-CWLLogEvent.html)(AWS Tools for Windows PowerShell)

# 흐름 로그 레코드 검색
<a name="search-flow-log-records-cwl"></a>

CloudWatch Logs 콘솔을 사용하여 CloudWatch Logs에 게시된 흐름 로그 레코드를 검색할 수 있습니다. [지표 필터](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html)를 사용하여 흐름 로그 레코드를 필터링할 수 있습니다. 흐름 로그 레코드는 공백으로 구분됩니다.

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

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

1. 탐색 창에서 **Logs**, **Log groups**를 선택합니다.

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

1. **이벤트 필터링**에서 아래 문자열을 입력합니다. 여기서는 흐름 로그 레코드가 [기본 형식](flow-log-records.md#flow-logs-default)을 사용한다고 가정합니다.

   ```
   [version, accountid, interfaceid, srcaddr, dstaddr, srcport, dstport, protocol, packets, bytes, start, end, action, logstatus]
   ```

1. 필드의 값을 지정하여 필요에 따라 필터를 수정합니다. 다음 예시에서는 특정 원본 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에서 흐름 로그 레코드 처리
<a name="process-records-cwl"></a>

CloudWatch Logs에서 수집한 다른 로그 이벤트처럼 흐름 로그 레코드를 처리할 수 있습니다. 로그 데이터 및 지표 필터 모니터링에 대한 자세한 내용을 알아보려면 *Amazon CloudWatch Logs 사용 설명서*의 [필터를 사용하여 로그 이벤트에서 지표 생성](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html)을 참조하세요.

## 예: 흐름 로그에 대한 CloudWatch 지표 필터 및 경보 생성
<a name="flow-logs-cw-alarm-example"></a>

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

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

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

1. 탐색 창에서 **Logs**, **Log groups**를 선택합니다.

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

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

   ```
   [version, account, eni, source, destination, srcport, destport="22", protocol="6", packets, bytes, windowstart, windowend, action="REJECT", flowlogstatus]
   ```

1. **테스트할 로그 데이터 선택**에서 네트워크 인터페이스에 대한 로그 스트림을 선택합니다. (선택 사항) 필터 패턴과 일치하는 로그 데이터 행을 보려면 **패턴 테스트**를 선택합니다.

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

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

1. 탐색 창에서 **Alarms**, **All alarms**를 선택합니다.

1. **경보 생성**을 선택하세요.

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

1. 경보를 다음과 같이 구성한 후 **다음(Next)**을 선택합니다.
   + **통계**에서 **합계**를 선택합니다. 이것으로 지정된 기간 동안 데이터 포인트의 총 수를 캡처할 수 있습니다.
   + **기간**에서 **1시간**을 선택합니다.
   + **TimeSinceLastActive가 다음과 같은 때마다**에는 **크거나 같음**을 선택하고 10을 임계값으로 입력합니다.
   + **추가 구성**에서 **경보에 대한 데이터 포인트**를 기본값 1로 남겨둡니다.

1. **다음**을 선택합니다.

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

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

1. 경보 미리 보기를 완료했으면 **경보 생성**을 선택합니다.

# Amazon S3에 흐름 로그 게시
<a name="flow-logs-s3"></a>

흐름 로그는 흐름 로그 데이터를 Amazon S3에 게시할 수 있습니다. Amazon Simple Storage Service(S3)는 확장성과 내구성이 뛰어난 객체 스토리지 서비스입니다. 이는 웹을 통해 어디서든 원하는 양의 데이터를 저장하고 검색하도록 설계되었습니다. S3는 데이터 버전 관리, 암호화 및 액세스 제어를 위한 내장 기능으로 업계 최고의 내구성과 가용성을 제공합니다.

Amazon S3에 게시하는 경우 흐름 로그 데이터가 지정해 놓은 기존 Amazon S3 버킷에 게시됩니다. 모니터링된 모든 네트워크 인터페이스에 대한 흐름 로그 레코드는 버킷에 저장된 일련의 로그 파일 객체에 게시됩니다. 흐름 로그가 VPC에 대한 데이터를 캡처하면, 흐름 로그가 모든 네트워크 인터페이스에 대한 흐름 로그 레코드를 선택된 VPC에 게시합니다.

흐름 로그와 함께 사용할 Amazon S3 버킷을 만드는 방법은 *Amazon S3 사용 설명서*의 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)을 참조하세요.

VPC 흐름 로그 수집, 흐름 로그 처리 및 흐름 로그 시각화를 간소화하는 방법에 대한 자세한 내용은 AWS Solutions Library의 [OpenSearch를 통한 중앙 집중식 로깅](https://aws.amazon.com/solutions/implementations/centralized-logging-with-opensearch/)을 참조하세요.

CloudWatch Logs에 대한 자세한 내용은 *Amazon CloudWatch Logs 사용 설명서*의 [Amazon S3로 전송된 로그](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-S3)를 참조하세요.

**가격 책정**  
Amazon S3에 흐름 로그를 게시할 때는 Vended 로그에 대한 데이터 수집 및 아카이브 요금이 부과됩니다. 자세히 알아보려면 [Amazon CloudWatch Pricing](https://aws.amazon.com/cloudwatch/pricing/)(Amazon CloudWatch 요금)을 열고, **Logs**(로그)를 선택하고, **Vended Logs**(벤딩 로그)를 찾으세요.

**Topics**
+ [흐름 로그 파일](flow-logs-s3-path.md)
+ [Amazon S3 버킷의 흐름 로그에 대한 권한](flow-logs-s3-permissions.md)
+ [SSE-KMS를 사용할 경우 필요한 키 정책](flow-logs-s3-cmk-policy.md)
+ [Amazon S3 로그 파일 권한](flow-logs-file-permissions.md)
+ [Amazon S3에 게시하는 흐름 로그 생성](flow-logs-s3-create-flow-log.md)
+ [Amazon S3로 흐름 로그 레코드 보기](view-flow-log-records-s3.md)

# 흐름 로그 파일
<a name="flow-logs-s3-path"></a>

 VPC Flow Logs는 VPC에서 들어오고 나가는 IP 트래픽에 대한 데이터를 로그 레코드로 수집하고 해당 레코드를 로그 파일로 집계한 다음 5분 간격으로 Amazon S3 버킷에 로그 파일을 게시합니다. 여러 파일이 게시될 수 있으며 각 로그 파일에는 이전 5분 동안 기록된 IP 트래픽에 대한 흐름 로그 레코드의 일부 또는 전체가 포함될 수 있습니다.

Amazon S3에서 흐름 로그 파일의 **마지막 수정(Last modified)** 필드는 파일이 Amazon S3 버킷에 업로드된 날짜와 시간을 나타냅니다. 파일 이름의 타임스탬프보다 이후이며 파일을 Amazon S3 버킷에 업로드하는 데 걸리는 시간에 따라 다릅니다.

**로그 파일 형식**

로그 파일에 대해 다음 형식 중 하나를 지정할 수 있습니다. 각 파일은 단일 Gzip 파일로 압축됩니다.
+ **텍스트(Text)** – 일반 텍스트. 이것은 기본 형식입니다.
+ **Parquet** – Apache Parquet은 열 기반 데이터 형식입니다. Parquet 형식의 데이터에 대한 쿼리는 일반 텍스트 데이터에 대한 쿼리에 비해 10배에서 100배 빠릅니다. Gzip 압축을 사용하는 Parquet 형식 데이터는 Gzip 압축을 사용하는 일반 텍스트보다 스토리지 공간을 20% 적게 사용합니다.

**참고**  
Gzip 압축을 사용하는 Parquet 형식 데이터가 집계 기간별로 100KB 미만이라면 데이터를 Parquet 형식으로 저장할 경우 Parquet 파일 메모리 요구 사항으로 인해 Gzip 압축을 사용하는 일반 텍스트보다 더 많은 공간을 차지할 수 있습니다.

**로그 파일 옵션**

필요한 경우 다음과 같은 옵션을 지정할 수 있습니다.
+ **Hive 호환 S3 접두사** – 분할을 Hive 호환 도구로 가져오는 대신 Hive 호환 접두사를 활성화합니다. 쿼리 실행 전에 **MSCK REPAIR TABLE** 명령을 사용합니다.
+ **시간당 분할** – 대량의 로그가 있고 일반적으로 특정 시간까지 쿼리를 타겟팅하는 경우 로그를 시간별로 분할하여 더 결과를 빠르게 얻고 쿼리 비용을 절감할 수 있습니다.

**로그 파일 S3 버킷 구조**  
로그 파일은 흐름 로그의 ID, 리전, 생성된 날짜 및 대상 옵션에 따라 폴더 구조를 사용하여 지정된 Amazon S3 버킷에 저장됩니다.

기본적으로 파일은 다음 위치로 전달됩니다.

```
bucket-and-optional-prefix/AWSLogs/account_id/vpcflowlogs/region/year/month/day/
```

Hive 호환 S3 접두사를 사용하도록 설정하면 파일이 다음 위치로 전달됩니다.

```
bucket-and-optional-prefix/AWSLogs/aws-account-id=account_id/aws-service=vpcflowlogs/aws-region=region/year=year/month=month/day=day/
```

시간별 분할을 사용하도록 설정하면 파일이 다음 위치로 전달됩니다.

```
bucket-and-optional-prefix/AWSLogs/account_id/vpcflowlogs/region/year/month/day/hour/
```

Hive 호환 분할을 사용하도록 설정하고 시간당 흐름 로그를 분할하면 파일이 다음 위치로 전달됩니다.

```
bucket-and-optional-prefix/AWSLogs/aws-account-id=account_id/aws-service=vpcflowlogs/aws-region=region/year=year/month=month/day=day/hour=hour/
```

**로그 파일 이름**  
로그 파일의 파일 이름은 흐름 로그 ID, 리전 및 생성 날짜 및 시간을 기반으로 합니다. 파일 이름은 다음 형식을 사용합니다.

```
aws_account_id_vpcflowlogs_region_flow_log_id_YYYYMMDDTHHmmZ_hash.log.gz
```

예를 들어, 다음은 June 20, 2018, 16:20 UTC에 us-east-1 리전의 리소스에 대해 AWS 계정 123456789012에서 생성한 흐름 로그에 대한 로그 파일의 예를 보여 줍니다. 종료 시간이 16:20:00에서 16:24:59 사이인 흐름 로그 레코드가 파일에 포함됩니다.

```
123456789012_vpcflowlogs_us-east-1_fl-1234abcd_20180620T1620Z_fe123456.log.gz
```

# Amazon S3 버킷의 흐름 로그에 대한 권한
<a name="flow-logs-s3-permissions"></a>

기본적으로 Amazon S3 버킷과 버킷에 포함된 객체는 비공개입니다. 버킷 소유자만이 해당 버킷과 그 안에 저장된 객체에 액세스할 수 있습니다. 그러나 버킷 소유자는 액세스 정책을 작성하여 다른 리소스 및 사용자에게 액세스 권한을 부여할 수 있습니다.

흐름 로그를 생성하는 사용자가 버킷을 소유하고 해당 버킷에 대한 `PutBucketPolicy` 및 `GetBucketPolicy` 권한을 소유한 경우, 다음 정책을 해당 버킷에 자동으로 연결합니다. 이 정책은 버킷에 연결된 모든 기존 정책을 덮어씁니다.

그렇지 않으면 버킷 소유자가 이 정책을 버킷에 추가하고 흐름 로그 작성자의 AWS 계정 ID 지정 또는 흐름 로그 생성이 실패합니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [버킷 정책 사용](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)을 참조하세요.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AWSLogDeliveryWrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "123456789012",
                    "s3:x-amz-acl": "bucket-owner-full-control"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:logs:us-east-1:123456789012:*"
                }
            }
        },
        {
            "Sid": "AWSLogDeliveryAclCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "123456789012"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:logs:us-east-1:123456789012:*"
                }
            }
        }
    ]
}
```

------

*my-s3-arn*에 지정한 ARN은 Hive 호환 S3 접두사를 사용하는지 여부에 따라 다릅니다.
+ 기본 접두사

  ```
  arn:aws:s3:::bucket_name/optional_folder/AWSLogs/account_id/*
  ```
+ Hive 호환 S3 접두사

  ```
  arn:aws:s3:::bucket_name/optional_folder/AWSLogs/aws-account-id=account_id/*
  ```

개별 AWS 계정 ARN 대신 로그 전송 서비스 보안 주체에 이 권한들을 부여하는 것이 좋습니다. 또한 [혼동된 대리자 문제](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)로부터 보호하려면 `aws:SourceAccount` 및 `aws:SourceArn` 조건 키를 사용하는 것 좋습니다. 소스 계정은 흐름 로그의 소유자이고 원본 ARN은 로그 서비스의 와일드카드(\$1) ARN입니다.

로그 전송 서비스는 `HeadBucket` Amazon S3 API 작업을 호출하여 S3 버킷의 존재 및 위치를 확인합니다. 로그 전송 서비스에 이 작업을 호출할 수 있는 권한을 부여할 필요는 없습니다. S3 버킷과 그 위치를 확인할 수 없더라도 VPC 흐름 로그가 전송됩니다. 하지만 CloudTrail 로그에서 `HeadBucket`에 대한 호출에 `AccessDenied` 오류가 발생합니다.

# SSE-KMS를 사용할 경우 필요한 키 정책
<a name="flow-logs-s3-cmk-policy"></a>

해당 S3 버킷에서 Amazon S3-관리형 키(SSE-S3)를 사용한 서버 측 암호화 또는 KMS 키(SSE-KMS)를 사용한 서버 측 암호화를 활성화하여 Amazon S3 버킷의 데이터를 보호할 수 있습니다. 자세한 내용은 *Amazon S3 사용 설명서*의 [서버 측 암호화를 사용하여 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)를 참조하세요.

SSE-S3를 선택하면 추가 구성이 필요하지 않습니다. Amazon S3는 암호화 키를 처리합니다.

SSE-KMS를 선택하면 고객 관리형 키 ARN을 사용해야 합니다. 키 ID를 사용하는 경우 흐름 로그를 생성할 때 [LogDestination 전송 불가](flow-logs-troubleshooting.md#flow-logs-troubleshooting-kms-id) 오류가 발생할 수 있습니다. 또한 로그 전달 계정이 S3 버킷에 쓸 수 있도록 고객 관리형 키에 대한 키 정책을 업데이트해야 합니다. SSE-KMS와 함께 사용하는 데 필요한 키 정책에 대한 자세한 내용은 *Amazon CloudWatch Logs 사용 설명서*의 [Amazon S3 버킷 서버 측 암호화](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-SSE-KMS-S3)를 참조하세요.

# Amazon S3 로그 파일 권한
<a name="flow-logs-file-permissions"></a>

필요한 버킷 정책 외에도, Amazon S3는 ACL(액세스 제어 목록)을 사용하여 흐름 로그에서 생성한 로그 파일에 대한 액세스를 관리합니다. 기본적으로 버킷 소유자는 각 로그 파일에 대한 `FULL_CONTROL` 권한을 보유합니다. 로그 전송 소유자가 버킷 소유자와 다른 경우에는 권한이 없습니다. 로그 전송 계정에는 `READ` 및 `WRITE` 권한이 부여됩니다. 자세한 내용은 *Amazon S3 사용 설명서*의 [액세스 제어 목록(ACL) 개요](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html)를 참조하세요.

# Amazon S3에 게시하는 흐름 로그 생성
<a name="flow-logs-s3-create-flow-log"></a>

Amazon S3 버킷을 생성하고 구성한 후에는 네트워크 인터페이스, 서브넷 및 VPC에 대한 흐름 로그를 생성할 수 있습니다.

**사전 조건**

흐름 로그를 생성하는 IAM 보안 주체는 대상 Amazon S3 버킷에 흐름 로그를 게시하는 데 필요한 다음 권한이 있는 IAM 역할을 사용해야 합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogDelivery",
        "logs:DeleteLogDelivery"
      ],
      "Resource": "*"
    }
  ]
}
```

------

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

1. 다음 중 하나를 수행하세요.
   + [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다. 탐색 창에서 **Network Interfaces**를 선택합니다. 네트워크 인터페이스의 확인란을 선택합니다.
   + [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다. 탐색 창에서 **Your VPCs**를 선택합니다. VPC에 대한 확인란을 선택합니다.
   + [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다. 탐색 창에서 **Subnets**를 선택합니다. 서브넷의 확인란을 선택합니다.

1. **작업**, **흐름 로그 생성**을 선택합니다.

1. **필터(Filter)**에서 로깅할 IP 트래픽 데이터의 유형을 지정합니다.
   + **수락** - 수락한 트래픽만 로그합니다.
   + **거부** - 거부한 트래픽만 로그합니다.
   + **모두** – 허용 및 거부된 트래픽을 로그합니다.

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

1. **대상**에서 **Amazon S3 버킷으로 전송(Send to an Amazon S3 bucket)**을 선택합니다.

1. **S3 버킷 ARN**의 경우 기존 Amazon S3 버킷의 Amazon 리소스 이름(ARN)을 지정합니다. 필요한 경우 하위 폴더를 포함할 수 있습니다. 예를 들어 `my-bucket`이란 이름의 버킷에 `my-logs`란 이름의 하위 폴더를 지정하려면 다음 ARN을 사용하세요.

   `arn:aws:s3:::my-bucket/my-logs/`

   버킷에 `AWSLogs`를 하위 폴더 이름으로 사용할 수 없습니다. 이것은 예약된 용어입니다.

   버킷을 소유한 경우, 자동으로 리소스 정책을 생성하여 버킷에 연결합니다. 자세한 내용은 [Amazon S3 버킷의 흐름 로그에 대한 권한](flow-logs-s3-permissions.md) 단원을 참조하세요.

1. **로그 레코드 형식**에서 흐름 로그 레코드의 형식을 지정합니다.
   + 기본 흐름 로그 레코드 형식을 사용하려면 **AWS 기본 형식**을 선택하세요.
   + 사용자 지정 형식을 만들려면 **사용자 지정 형식**을 선택하세요. **로그 형식**에 대해 흐름 로그 레코드에 포함할 필드를 선택하세요.

1. **추가 메타데이터**에서 Amazon ECS의 메타데이터를 로그 형식으로 포함할지 선택합니다.

1. **로그 파일 형식**의 경우 로그 파일의 형식을 지정합니다.
   + **Text** – 일반 텍스트. 이것은 기본 형식입니다.
   + **Parquet** – Apache Parquet은 열 기반 데이터 형식입니다. Parquet 형식의 데이터에 대한 쿼리는 일반 텍스트 데이터에 대한 쿼리에 비해 10배에서 100배 빠릅니다. Gzip 압축을 사용하는 Parquet 형식 데이터는 Gzip 압축을 사용하는 일반 텍스트보다 스토리지 공간을 20% 적게 사용합니다.

1. (선택 사항) Hive 호환 S3 접두사를 사용하려면 **Hive 호환 S3 접두사**,**활성화**를 선택합니다.

1. (선택 사항) 흐름 로그를 시간당 분할하려면**1시간마다 (60분)**을 선택합니다.

1. (선택 사항) 흐름 로그에 태그를 추가하려면**새 태그 추가**를 선택하여 태그 키와 값을 지정하십시오.

1. **흐름 로그 생성**을 선택합니다.

**명령줄 도구를 사용하여 Amazon S3에 게시하는 흐름 로그 생성**

다음 명령 중 하나를 사용합니다.
+ [create-flow-logs](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-flow-logs.html)(AWS CLI)
+ [New-EC2FlowLog](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2FlowLog.html)(AWS Tools for Windows PowerShell)

다음 AWS CLI 예시에서는 지정된 VPC의 모든 트래픽을 캡처하고 지정된 Amazon S3 버킷에 흐름 로그를 전송하는 흐름 로그를 생성합니다. `--log-format` 파라미터는 흐름 로그 레코드의 사용자 지정 형식을 지정합니다.

```
aws ec2 create-flow-logs --resource-type VPC --resource-ids vpc-00112233344556677 --traffic-type ALL --log-destination-type s3 --log-destination arn:aws:s3:::flow-log-bucket/custom-flow-logs/ --log-format '${version} ${vpc-id} ${subnet-id} ${instance-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${tcp-flags} ${type} ${pkt-srcaddr} ${pkt-dstaddr}'
```

# Amazon S3로 흐름 로그 레코드 보기
<a name="view-flow-log-records-s3"></a>

Amazon S3 콘솔을 사용하여 흐름 로그 레코드를 볼 수 있습니다. 흐름 로그를 생성하면 콘솔에 표시되는 데 몇 분 정도 걸릴 수도 있습니다.

로그 파일은 압축된 상태입니다. Amazon S3 콘솔을 사용해 로그 파일을 열면 압축이 해제되고 흐름 로그 레코드가 표시됩니다. 파일을 다운로드하는 경우, 압축을 해제해야 흐름 로그 레코드를 볼 수 있습니다.

**Amazon S3에 게시된 흐름 로그 레코드를 보려면**

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. 버킷 이름을 선택하여 세부 정보 페이지를 엽니다.

1. 로그 파일이 있는 폴더로 이동합니다. 예: *prefix*/AWSLogs/*account\$1id*/vpcflowlogs/*region*/*year*/*month*/*day*/.

1. 파일 이름 옆에 있는 확인란을 선택한 다음에 **Download**(다운로드)를 선택합니다.

또한 Amazon Athena를 사용해 로그 파일의 흐름 로그 레코드를 쿼리할 수도 있습니다. Amazon Athena는 표준 SQL을 사용해 Amazon S3에 저장된 데이터를 더 쉽게 분석할 수 있는 대화식 쿼리 서비스입니다. 자세한 내용은 *Amazon Athena 사용 설명서*의 [Amazon VPC 흐름 로그 쿼리 방법](https://docs.aws.amazon.com/athena/latest/ug/vpc-flow-logs.html)을 참조하세요.

# Amazon Data Firehose에 흐름 로그 게시
<a name="flow-logs-firehose"></a>

흐름 로그에서는 흐름 로그 데이터를 Amazon Data Firehose에 직접 게시할 수 있습니다. Amazon Data Firehose는 실시간 데이터 스트림을 수집하고 변환하여 다양한 AWS 데이터 스토어 및 분석 서비스로 전송하는 완전관리형 서비스로, 사용자 대신 데이터 수집을 처리합니다.

VPC 흐름 로그의 경우 Firehose가 유용할 수 있습니다. VPC 흐름 로그는 VPC의 네트워크 인터페이스에서 송수신되는 IP 트래픽에 대한 정보를 수집합니다. 이 데이터는 보안 모니터링, 성능 분석, 규제 준수에 매우 중요할 수 있습니다. 그러나 이러한 지속적인 로그 데이터 흐름의 저장과 처리를 관리하는 것은 복잡하고 리소스 집약적인 작업일 수 있습니다.

Firehose를 VPC 흐름 로그와 통합하면 Amazon S3 또는 Amazon Redshift 등의 선호하는 대상으로 이 데이터를 전송할 수 있습니다. Firehose는 VPC 흐름 로그의 수집, 변환, 전송을 처리하도록 확장되므로 운영 부담이 줄어듭니다. 이를 통해 기본 인프라에 대해 걱정할 필요 없이 로그를 분석하고 인사이트를 도출하는 데 집중할 수 있습니다.

또한 Firehose는 데이터 변환, 압축, 암호화와 같은 기능을 제공하여 VPC 흐름 로그 처리 파이프라인의 효율성과 보안을 강화할 수 있습니다. VPC 흐름 로그에 Firehose를 사용하면 데이터 관리를 간소화하고 네트워크 트래픽 데이터에서 인사이트를 얻을 수 있습니다.

Amazon Data Firehose에 게시할 때 흐름 로그 데이터는 일반 텍스트 형식으로 Amazon Data Firehose 전송 스트림에 게시됩니다.

**가격 책정**  
표준 모으기 및 전송 요금이 적용됩니다. 자세히 알아보려면 [Amazon CloudWatch Pricing](https://aws.amazon.com/cloudwatch/pricing/)(Amazon CloudWatch 요금)을 열고, **Logs**(로그)를 선택하고, **Vended Logs**(벤딩 로그)를 찾으세요.

**Topics**
+ [교차 계정 전송에 대한 IAM 역할](firehose-cross-account-delivery.md)
+ [Amazon Data Firehose에 게시하는 흐름 로그 생성](flow-logs-firehose-create-flow-log.md)

# 교차 계정 전송에 대한 IAM 역할
<a name="firehose-cross-account-delivery"></a>

Amazon Data Firehose에 게시할 때 모니터링할 리소스와 동일한 계정(소스 계정) 또는 상이한 계정(대상 계정)에 있는 전송 스트림을 선택할 수 있습니다. Amazon Data Firehose에 대한 흐름 로그의 교차 계정 전송을 활성화하려면 소스 계정에서 IAM 역할을 생성하고 대상 계정에서 IAM 역할을 생성해야 합니다.

**Topics**
+ [소스 계정 역할](#firehose-source-account-role)
+ [대상 계정 역할](#firehose-destination-account-role)

## 소스 계정 역할
<a name="firehose-source-account-role"></a>

소스 계정에서 다음과 같은 권한을 부여하는 역할을 생성합니다. 이 예시에서는 역할 이름이 `mySourceRole`이지만, 이 역할에 대해 다른 이름을 선택할 수 있습니다. 마지막 명령문에서는 대상 계정의 역할에 이 역할 수임을 허용합니다. 조건문에서는 지정된 리소스를 모니터링할 때만 이 역할이 로그 전송 서비스에만 전달되도록 합니다. 정책을 생성할 때 모니터링 중인 VPC, 네트워크 인터페이스 또는 서브넷을 조건 키(`iam:AssociatedResourceARN`)로 지정합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::123456789012:role/mySourceRole",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "delivery.logs.amazonaws.com"
                },
                "StringLike": {
                    "iam:AssociatedResourceARN": [
                        "arn:aws:ec2:us-east-1:123456789012:vpc/vpc-00112233344556677"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries",
                "logs:GetLogDelivery"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::111122223333:role/AWSLogDeliveryFirehoseCrossAccountRole"
        }
    ]
}
```

------

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

------
#### [ JSON ]

****  

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

------

소스 계정에서 다음과 같은 절차를 사용하여 역할을 생성합니다.

**소스 계정 역할을 생성하는 방법**

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

1. 탐색 창에서 **Policies**를 선택합니다.

1. [**정책 생성**]을 선택합니다.

1. **정책 생성** 페이지에서 다음을 수행합니다.

   1. **JSON**을 선택합니다.

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

   1. **다음**을 선택합니다.

   1. 정책의 이름과 설명(선택 사항) 및 태그를 입력한 다음에 **정책 생성**을 선택합니다.

1. 탐색 창에서 **Roles**를 선택합니다.

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

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

   ```
   "Principal": {
      "Service": "delivery.logs.amazonaws.com"
   },
   ```

1. **권한 추가** 페이지에서 이 절차의 앞부분에서 생성한 정책의 확인란을 선택한 후 **다음**을 선택합니다.

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

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

## 대상 계정 역할
<a name="firehose-destination-account-role"></a>

대상 계정에서 **AWSLogDeliveryFirehoseCrossAccountRole**로 시작하는 이름으로 역할을 생성합니다. 이 역할에서는 다음과 같은 권한을 부여해야 합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
          "iam:CreateServiceLinkedRole",
          "firehose:TagDeliveryStream"
      ],
      "Resource": "*"
    }
  ]
}
```

------

이 역할을 수임할 수 있도록 소스 계정에서 생성한 역할이 허용되는 다음과 같은 신뢰 정책이 이 역할에 있는지 확인하세요.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/mySourceRole"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

대상 계정에서 다음과 같은 절차를 사용하여 역할을 생성합니다.

**대상 계정 역할을 생성하는 방법**

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

1. 탐색 창에서 **Policies**를 선택합니다.

1. [**정책 생성**]을 선택합니다.

1. **정책 생성** 페이지에서 다음을 수행합니다.

   1. **JSON**을 선택합니다.

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

   1. **다음**을 선택합니다.

   1. **AWSLogDeliveryFirehoseCrossAccountRole**로 시작하는 정책 이름을 입력한 다음에 **정책 생성**을 선택합니다.

1. 탐색 창에서 **Roles**를 선택합니다.

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

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

   ```
   "Principal": {
      "AWS": "arn:aws:iam::source-account:role/mySourceRole"
   },
   ```

1. **권한 추가** 페이지에서 이 절차의 앞부분에서 생성한 정책의 확인란을 선택한 후 **다음**을 선택합니다.

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

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

# Amazon Data Firehose에 게시하는 흐름 로그 생성
<a name="flow-logs-firehose-create-flow-log"></a>

VPC, 서브넷 또는 네트워크 인터페이스에 대한 흐름 로그를 생성할 수 있습니다.

**사전 조건**
+ 대상 Amazon Data Firehose 전송 스트림을 생성합니다. **Direct Put**을 원본으로 사용합니다. 자세한 내용은 [Amazon Data Firehose 전송 스트림 생성](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html)을 참조하세요.
+ 흐름 로그를 생성하는 계정은 Amazon Data Firehose에 흐름 로그를 게시할 수 있는 다음 권한을 부여하는 IAM 역할을 사용해야 합니다.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "logs:CreateLogDelivery",
                  "logs:DeleteLogDelivery",
                  "iam:CreateServiceLinkedRole",
                  "firehose:TagDeliveryStream"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------
+ 흐름 로그를 다른 계정에 게시하는 경우 [교차 계정 전송에 대한 IAM 역할](firehose-cross-account-delivery.md)에 설명된 대로 필수 IAM 역할을 생성합니다.

**Amazon Data Firehose에 게시하는 흐름 로그 생성 방법**

1. 다음 중 하나를 수행하세요.
   + [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다. 탐색 창에서 **Network Interfaces**를 선택합니다. 네트워크 인터페이스의 확인란을 선택합니다.
   + [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다. 탐색 창에서 **Your VPCs**를 선택합니다. VPC에 대한 확인란을 선택합니다.
   + [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다. 탐색 창에서 **Subnets**를 선택합니다. 서브넷의 확인란을 선택합니다.

1. **작업**, **흐름 로그 생성**을 선택합니다.

1. **필터(Filter)**에 기록할 트래픽 유형을 지정합니다.
   + **수락** – 수락한 트래픽만 로그합니다.
   + **거부** – 거부한 트래픽만 로그합니다.
   + **모두** – 수락 및 거부한 트래픽을 로그합니다.

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

1. **대상(Destination)**에서는 다음과 같은 옵션 중 하나를 선택합니다.
   + **동일한 계정의 Amazon Data Firehose로 보내기** - 전송 스트림과 모니터링할 리소스가 동일한 계정에 있습니다.
   + **다른 계정의 Amazon Data Firehose로 보내기** - 전송 스트림과 모니터링할 리소스가 상이한 계정에 있습니다.

1. **Amazon Data Firehose** 스트림 이름에는 생성한 전송 스트림을 선택합니다.

1. [크로스 계정 전송만 해당] **서비스 액세스**의 경우 로그를 게시할 권한이 있는 [크로스 계정 전송을 위한 기존 IAM 서비스 역할](firehose-cross-account-delivery.md)을 선택하거나 **권한 설정**을 선택하여 IAM 콘솔을 열고 서비스 역할을 생성합니다.

1. **로그 레코드 형식**에서 흐름 로그 레코드의 형식을 지정합니다.
   + 기본 흐름 로그 레코드 형식을 사용하려면 **AWS 기본 형식**을 선택하세요.
   + 사용자 지정 형식을 만들려면 **사용자 지정 형식**을 선택하세요. **로그 형식**에 대해 흐름 로그 레코드에 포함할 필드를 선택하세요.

1. **추가 메타데이터**에서 Amazon ECS의 메타데이터를 로그 형식으로 포함할지 선택합니다.

1. (선택 사항) **태그 추가**를 선택하여 흐름 로그에 태그를 적용합니다.

1. **흐름 로그 생성**을 선택합니다.

**명령줄을 사용하여 Amazon Data Firehose에 게시하는 흐름 로그 생성**

다음 명령 중 하나를 사용합니다.
+ [create-flow-logs](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-flow-logs.html)(AWS CLI)
+ [New-EC2FlowLog](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2FlowLog.html)(AWS Tools for Windows PowerShell)

다음 AWS CLI 예시에서는 지정된 VPC의 모든 트래픽을 캡처하고 동일한 계정의 지정된 Amazon Data Firehose 전송 스트림에 흐름 로그를 전송하는 흐름 로그를 생성합니다.

```
aws ec2 create-flow-logs --traffic-type ALL \
  --resource-type VPC \
  --resource-ids vpc-00112233344556677 \
  --log-destination-type kinesis-data-firehose \
  --log-destination arn:aws:firehose:us-east-1:123456789012:deliverystream/flowlogs_stream
```

다음 AWS CLI 예시에서는 지정된 VPC의 모든 트래픽을 캡처하고 상이한 계정의 지정된 Amazon Data Firehose 전송 스트림에 흐름 로그를 전송하는 흐름 로그를 생성합니다.

```
aws ec2 create-flow-logs --traffic-type ALL \
  --resource-type VPC \
  --resource-ids vpc-00112233344556677 \
  --log-destination-type kinesis-data-firehose \
  --log-destination arn:aws:firehose:us-east-1:123456789012:deliverystream/flowlogs_stream \
  --deliver-logs-permission-arn arn:aws:iam::source-account:role/mySourceRole \ 
  --deliver-cross-account-role arn:aws:iam::destination-account:role/AWSLogDeliveryFirehoseCrossAccountRole
```

전송 스트림에 대해 구성한 대상에서 흐름 로그 데이터를 가져올 수 있습니다.

# Amazon Athena를 사용하여 흐름 로그 쿼리
<a name="flow-logs-athena"></a>

Amazon Athena는 표준 SQL을 사용하여 흐름 로그와 같은 Amazon S3의 데이터를 분석할 수 있는 대화형 쿼리 서비스입니다. Athena를 VPC 흐름 로그와 함께 사용하여 VPC를 통해 흐르는 트래픽에 대해 유용한 인사이트를 빠르게 얻을 수 있습니다. 예를 들어 가상 프라이빗 클라우드(VPC)의 어떤 리소스가 상위 대화자인지 식별하거나 TCP 연결이 가장 많이 거부된 IP 주소를 식별할 수 있습니다.

**옵션**
+ VPC를 통해 흐르는 트래픽에 대한 인사이트를 얻기 위해 실행할 수 있는 필수 AWS 리소스와 사전 정의된 쿼리를 생성하는 CloudFormation 템플릿을 생성하여 VPC 흐름 로그와 Athena의 통합을 간소화하고 자동화할 수 있습니다.
+ Athena를 사용하여 고유한 쿼리를 생성할 수 있습니다. 자세한 내용은 *Amazon Athena 사용 설명서*의 [Amazon Athena를 사용하여 쿼리 실행](https://docs.aws.amazon.com/athena/latest/ug/vpc-flow-logs.html)을 참조하세요.

**가격 책정**  
쿼리 실행에 대해 표준 [Amazon Athena 요금](https://aws.amazon.com/athena/pricing/)이 발생합니다 . 반복 일정에 따라 새 파티션을 로드하는 Lambda 함수에 대해 표준 [AWS Lambda 요금](https://aws.amazon.com/lambda/pricing/)이 발생합니다(파티션 로드 빈도를 지정하고 시작 날짜와 종료 날짜는 지정하지 않은 경우).

**Topics**
+ [콘솔을 사용하여 CloudFormation 템플릿 생성](flow-logs-generate-template-console.md)
+ [AWS CLI를 사용하여 CloudFormation 템플릿 생성](flow-logs-generate-template-cli.md)
+ [사전 정의된 쿼리 실행](flow-logs-run-athena-query.md)

# 콘솔을 사용하여 CloudFormation 템플릿 생성
<a name="flow-logs-generate-template-console"></a>

첫 번째 흐름 로그가 S3 버킷으로 전송된 후 CloudFormation 템플릿을 생성하고 해당 템플릿을 사용하여 스택을 생성함으로써 Athena와 통합할 수 있습니다.

**요구 사항**
+ 선택한 리전은 AWS Lambda 및 Amazon Athena를 지원해야 합니다.
+ 선택한 리전에 Amazon S3 버킷이 있어야 합니다.
+ 흐름 로그의 로그 레코드 형식에는 실행하려는 미리 정의된 특정 쿼리에서 사용하는 필드가 포함되어야 합니다.

**콘솔을 사용하여 템플릿을 생성하려면**

1. 다음 중 하나를 수행하세요.
   + Amazon VPC 콘솔을 엽니다. 탐색 창에서 **Your VPCs**를 선택한 후 해당 VPC를 선택합니다.
   + Amazon VPC 콘솔을 엽니다. 탐색 창에서 **Subnets**을 선택한 후 해당 서브넷을 선택합니다.
   + Amazon EC2 콘솔을 엽니다. 탐색 창에서 **Network Interfaces**를 선택한 후 해당 네트워크 인터페이스를 선택합니다.

1. [**흐름 로그(Flow logs)**] 탭에서 Amazon S3에 게시하는 흐름 로그를 선택한 후 [**작업(Actions)**], [**Athena 통합 생성(Generate Athena integration)**]을 차례로 선택합니다.

1. 파티션 로드 빈도를 지정합니다. **없음(None)**을 선택하는 경우 과거 날짜를 사용하여 파티션 시작 및 종료 날짜를 지정해야 합니다. [**매일(Daily)**], [**매주(Weekly)**] 또는 [**매월(Monthly)**]을 선택하는 경우 파티션 시작 및 종료 날짜는 선택 사항입니다. 시작 날짜와 종료 날짜를 지정하지 않으면 CloudFormation 템플릿은 반복 일정에 따라 새 파티션을 로드하는 Lambda 함수를 생성합니다.

1. 생성된 템플릿을 저장할 S3 버킷을 선택하고, 쿼리 결과를 저장할 S3 버킷을 선택하거나 생성합니다.

1. [**Athena 통합 생성(Generate Athena integration)**]을 선택합니다.

1. (선택 사항) 성공 메시지에서 링크를 선택하여 CloudFormation 템플릿용으로 지정한 버킷으로 이동하고, 템플릿을 사용자 지정합니다.

1. 성공 메시지에서 [**CloudFormation 스택 생성(Create CloudFormation stac)**]을 선택하여 CloudFormation 콘솔에서 [**스택 생성(Create Stack)**] 마법사를 엽니다. 생성된 CloudFormation 템플릿의 URL은 **템플릿**(Template) 섹션에 명시되어 있습니다. 마법사를 완료하여 템플릿에 지정된 리소스를 생성합니다.

**CloudFormation 템플릿으로 생성된 리소스**
+ Athena 데이터베이스. 데이터베이스 이름은 vpcflowlogsathenadatabase<*flow-logs-subscription-id*>입니다.
+ Athena 작업 그룹. 작업 그룹 이름은 <*flow-log-subscription-id*><*partition-load-frequency*><*start-date*><*end-date*>workgroup입니다.
+ 흐름 로그 레코드에 해당하는 분할된 Athena 테이블. 테이블 이름은 <*flow-log-subscription-id*><*partition-load-frequency*><*start-date*><*end-date*>입니다.
+ Athena 명명된 쿼리 세트. 자세한 내용은 [사전 정의된 쿼리](flow-logs-run-athena-query.md#predefined-queries) 단원을 참조하세요.
+ 지정된 일정(매일, 매주 또는 매월)에 따라 테이블에 새 파티션을 로드하는 Lambda 함수입니다.
+ Lambda 함수를 실행할 권한을 부여하는 IAM 역할입니다.

# AWS CLI를 사용하여 CloudFormation 템플릿 생성
<a name="flow-logs-generate-template-cli"></a>

첫 번째 흐름 로그가 S3 버킷으로 전송된 후 CloudFormation 템플릿을 생성하고 해당 템플릿을 사용하여 Athena와 통합할 수 있습니다.

다음 [get-flow-logs-integration-template](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-flow-logs-integration-template.html) 명령을 사용하여 CloudFormation 템플릿을 생성합니다.

```
aws ec2 get-flow-logs-integration-template --cli-input-json file://config.json
```

다음은 `config.json` 파일의 예입니다.

```
{
    "FlowLogId": "fl-12345678901234567",
    "ConfigDeliveryS3DestinationArn": "arn:aws:s3:::my-flow-logs-athena-integration/templates/",
    "IntegrateServices": {
        "AthenaIntegrations": [
            {
                "IntegrationResultS3DestinationArn": "arn:aws:s3:::my-flow-logs-analysis/athena-query-results/",
                "PartitionLoadFrequency": "monthly",
                "PartitionStartDate": "2021-01-01T00:00:00",
                "PartitionEndDate": "2021-12-31T00:00:00"
            }
        ]
    }
}
```

다음 [create-stack](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html) 명령을 사용하여 생성된 CloudFormation 템플릿으로 스택을 생성합니다.

```
aws cloudformation create-stack --stack-name my-vpc-flow-logs --template-body file://my-cloudformation-template.json
```

# 사전 정의된 쿼리 실행
<a name="flow-logs-run-athena-query"></a>

생성된 CloudFormation 템플릿은 AWS 네트워크의 트래픽에 대한 의미 있는 인사이트를 빠르게 얻기 위해 실행할 수 있는 사전 정의된 쿼리 세트를 제공합니다. 스택을 생성하고 모든 리소스가 올바르게 생성되었는지 확인한 후 사전 정의된 쿼리 중 하나를 실행할 수 있습니다.

**콘솔을 사용하여 사전 정의된 쿼리를 실행하려면**

1. Athena 콘솔을 엽니다.

1. 탐색 창에서 **쿼리 편집기(Query editor)**를 선택합니다. **작업 그룹(Workgroups)**에서 CloudFormation 템플릿으로 생성한 작업 그룹을 선택합니다.

1. **저장된 쿼리(Saved queries)**를 선택하고 필요에 따라 파라미터를 수정한 후 쿼리를 실행합니다. 사용 가능한 사전 정의된 쿼리 목록은 [사전 정의된 쿼리](#predefined-queries)를 참조하세요.

1. **쿼리 결과(Query results)**에서 쿼리 결과를 확인합니다.

## 사전 정의된 쿼리
<a name="predefined-queries"></a>

다음은 Athena 명명된 쿼리의 전체 목록입니다. 템플릿을 생성할 때 제공되는 미리 정의된 쿼리는 흐름 로그에 대한 로그 레코드 형식의 일부인 필드에 따라 달라집니다. 따라서 템플릿에 이러한 미리 정의된 쿼리가 모두 포함되어 있지 않을 수 있습니다.
+ **VpcFlowLogsAcceptedTraffic** - 보안 그룹 및 네트워크 ACL에 따라 허용된 TCP 연결입니다.
+ **VpcFlowLogsAdminPortTraffic** – 관리 포트에서 요청을 처리하는 애플리케이션에서 기록된 트래픽이 가장 많은 상위 10개의 IP 주소입니다.
+ **VpcFlowLogsIPv4Traffic** - 기록된 IPv4 트래픽의 총 바이트 수입니다.
+ **VpcFlowLogsIPv6Traffic** - 기록된 IPv6 트래픽의 총 바이트 수입니다.
+ **VpcFlowLogsRejectedTCPTraffic** - 보안 그룹 또는 네트워크 ACL에 따라 거부된 TCP 연결입니다.
+ **VpcFlowLogsRejectedTraffic** - 보안 그룹 또는 네트워크 ACL에 따라 거부된 트래픽입니다.
+ **VpcFlowLogsSshRdpTraffic** - SSH 및 RDP 트래픽입니다.
+ **VpcFlowLogsTopTalkers** - 기록된 트래픽이 많은 IP 주소 50개입니다.
+ **VpcFlowLogsTopTalkersPacketLevel** - 기록된 트래픽이 가장 많은 50개의 패킷 수준 IP 주소입니다.
+ **VpcFlowLogsTopTalkingInstances** - 기록된 트래픽이 가장 많은 50개 인스턴스의 ID입니다.
+ **VpcFlowLogsTopTalkingSubnets** - 기록된 트래픽이 가장 많은 50개 서브넷의 ID입니다.
+ **VpcFlowLogsTopTCPTraffic** - 특정 소스 IP 주소에 대해 기록된 모든 TCP 트래픽입니다.
+ **VpcFlowLogsTopTCPTraffic** - 기록된 바이트 수가 가장 많은 50쌍의 소스 및 대상 IP 주소입니다.
+ **VpcFlowLogsTotalBytesTransferredPacketLevel** - 기록된 바이트 수가 가장 많은 50쌍의 패킷 수준 소스 및 대상 IP 주소입니다.
+ **VpcFlowLogsTrafficFrmSrcAddr** - 특정 소스 IP 주소에 대해 기록된 트래픽입니다.
+ **VpcFlowLogsTrafficToDstAddr** - 특정 대상 IP 주소에 대해 기록된 트래픽입니다.

# VPC 흐름 로그 문제 해결
<a name="flow-logs-troubleshooting"></a>

다음은 흐름 로그로 작업할 때 발생할 수 있는 문제입니다.

**Topics**
+ [불완전한 흐름 로그 레코드](#flow-logs-troubleshooting-incomplete-records)
+ [흐름 로그가 활성화되었지만 흐름 로그 레코드 또는 로그 그룹이 없음](#flow-logs-troubleshooting-no-log-group)
+ ['LogDestinationNotFoundException' 또는 'LogDestination에 대한 액세스가 거부됨' 오류](#flow-logs-troubleshooting-not-found)
+ [Amazon S3 버킷 정책 제한 초과](#flow-logs-troubleshooting-policy-limit)
+ [LogDestination 전송 불가](#flow-logs-troubleshooting-kms-id)
+ [흐름 로그 데이터 크기가 결제 데이터와 일치하지 않음](#flow-logs-data-size-mismatch)

## 불완전한 흐름 로그 레코드
<a name="flow-logs-troubleshooting-incomplete-records"></a>

**문제**  
흐름 로그 레코드가 불완전하거나 더 이상 게시되지 않습니다.

**원인**  
흐름 로그를 CloudWatch Logs 로그 그룹으로 전달하는 데 문제가 있거나 [SkipData 항목이 제공될 수 있습니다.](flow-logs-records-examples.md#flow-log-example-no-data)

**Solution**  
**흐름 로그** 탭에서 VPC, 서브넷 또는 네트워크 인터페이스를 확인합니다. 공유되는 VPC 또는 서브넷에 대한 흐름 로그를 설명할 수 없지만, 공유되는 VPC 또는 서브넷에서 생성한 네트워크 인터페이스에 대한 흐름 로그를 설명할 수는 있습니다. 오류가 있는 경우 **상태** 열에 오류가 표시됩니다. 또는 [describe-flow-logs](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-flow-logs.html) 명령을 사용하여 `DeliverLogsErrorMessage` 필드에 반환된 값을 확인하세요.

다음은 상태에 대해 가능한 오류 값입니다.
+ `Rate limited`: 이 오류는 CloudWatch Logs 스로틀링이 적용된 경우, 즉 네트워크 인터페이스에 대한 흐름 로그 레코드의 수가 특정 시간 범위 내에 게시될 수 있는 최대 레코드의 수보다 많은 경우에 발생할 수 있습니다. 이 오류는 만들 수 있는 CloudWatch Logs 로그 그룹 수 할당량에 도달한 경우에 발생하기도 합니다. 자세한 내용은 *Amazon CloudWatch 사용 설명서*의 [CloudWatch Service Quotas](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_limits.html)를 참조하세요.
+ `Access error`: 이 오류는 다음과 같은 이유로 발생할 수 있습니다.
  + 흐름 로그용 IAM 역할에 CloudWatch 로그 그룹에 흐름 로그를 게시할 권한이 없습니다.
  + IAM 역할이 흐름 로그 서비스와 신뢰 관계를 갖지 않습니다.
  + 신뢰 관계는 흐름 로그 서비스를 주체로 지정하지 않습니다.

  자세한 내용은 [CloudWatch Logs에 흐름 로그를 게시하는 IAM 역할](flow-logs-iam-role.md) 단원을 참조하세요.
+ `Unknown error`: 흐름 로그 서비스에서 내부 오류가 발생했습니다.

## 흐름 로그가 활성화되었지만 흐름 로그 레코드 또는 로그 그룹이 없음
<a name="flow-logs-troubleshooting-no-log-group"></a>

**문제**  
흐름 로그를 생성했고 Amazon VPC 또는 Amazon EC2 콘솔에서 흐름 로그를 `Active`로 표시합니다. 하지만 CloudWatch Logs에서 어떠한 로그 스트림도 볼 수 없거나 Amazon S3 버킷에서 로그 파일을 볼 수 없습니다.

**가능한 원인**
+ 흐름 로그가 아직 생성되는 중입니다. 경우에 따라 흐름 로그를 생성한 후 로그 그룹이 생성되고 데이터가 표시되기까지 10분 이상 걸릴 수 있습니다.
+ 네트워크 인터페이스에 대해 기록된 트래픽이 아직 없습니다. CloudWatch Logs의 로그 그룹은 트래픽이 기록될 때만 생성됩니다.

**Solution**  
로그 그룹이 생성되거나 트래픽이 기록될 때까지 몇 분 정도 기다리세요.

## 'LogDestinationNotFoundException' 또는 'LogDestination에 대한 액세스가 거부됨' 오류
<a name="flow-logs-troubleshooting-not-found"></a>

**문제**  
흐름 로그를 생성할 때 `Access Denied for LogDestination` 또는 `LogDestinationNotFoundException` 오류가 발생합니다.

**가능한 원인**
+ Amazon S3 버킷에 데이터를 게시하는 흐름 로그를 생성하는 경우 이 오류는 지정된 S3 버킷을 찾을 수 없거나 버킷 정책에서 로그를 버킷에 전달할 수 없음을 나타냅니다.
+ Amazon CloudWatch Logs에 데이터를 게시하는 흐름 로그를 생성하는 경우 이 오류는 IAM 역할이 로그를 로그 그룹에 전달할 수 없음을 나타냅니다.

**Solution**
+ Amazon S3에 게시하는 경우 기존 S3 버킷에 ARN을 지정했는지, 그리고 그 ARN의 형식이 올바른지 확인합니다. S3 버킷을 소유하지 않은 경우 [버킷 정책](flow-logs-s3-permissions.md)이 필수 권한을 보유하고 있고 ARN에서 계정 ID와 버킷 이름을 올바르게 사용하는지 확인합니다.
+ CloudWatch Logs Logs에 게시하는 경우 [IAM 역할](flow-logs-iam-role.md)에 필수 권한이 있는지 확인합니다.

## Amazon S3 버킷 정책 제한 초과
<a name="flow-logs-troubleshooting-policy-limit"></a>

**문제**  
흐름 로그를 생성할 때 `LogDestinationPermissionIssueException` 오류가 발생합니다.

**가능한 원인**  
Amazon S3 버킷 정책은 크기가 20KB로 제한됩니다.

Amazon S3 버킷에 게시하는 흐름 로그가 생성될 때마다 폴더 경로를 포함하는 지정된 버킷 ARN을 버킷 정책의 `Resource` 요소에 자동으로 추가합니다.

동일한 버킷에 게시하는 여러 개의 흐름 로그를 생성하면 버킷 정책 제한을 초과할 수 있습니다.

**Solution**
+ 더 이상 필요 없는 흐름 로그 항목을 제거하여 버킷 정책을 정리합니다.
+ 개별 흐름 로그 항목을 다음으로 대체하여 전체 버킷에 권한을 부여합니다.

  ```
  arn:aws:s3:::bucket_name/*
  ```

  전체 버킷에 권한을 부여할 경우, 새 흐름 로그 구독이 버킷 정책에 새 권한을 추가합니다.

## LogDestination 전송 불가
<a name="flow-logs-troubleshooting-kms-id"></a>

**문제**  
흐름 로그를 생성할 때 `LogDestination <bucket name> is undeliverable` 오류가 발생합니다.

**가능한 원인**  
대상 Amazon S3 버킷은 AWS KMS(SSE-KMS)로 서버 측 암호화를 사용하여 암호화되며 버킷의 기본 암호화는 KMS 키 ID입니다.

**Solution**  
값은 KMS 키 ARN이어야 합니다. 기본 S3 암호화 유형을 KMS 키 ID에서 KMS 키 ARN으로 변경합니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [기본 암호화 사용 설정](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-bucket-encryption.html)을 참조하세요.

## 흐름 로그 데이터 크기가 결제 데이터와 일치하지 않음
<a name="flow-logs-data-size-mismatch"></a>

**문제**  
흐름 로그의 총 데이터 크기가 결제 데이터에 보고된 크기와 일치하지 않습니다.

**가능한 원인**  
흐름 로그에 SKIPDATA 항목이 있을 수 있습니다. SKIPDATA 항목에 관한 설명은 [데이터가 없고 건너뛴 레코드](flow-logs-records-examples.md#flow-log-example-no-data) 섹션을 참조하세요.

**Solution**  
로그 상태 필드의 다양한 항목에 대한 로그를 쿼리하여 로그 항목에 SKIPDATA 항목이 있는지 확인합니다.

SKIPDATA 확인을 위한 샘플 쿼리:

CW Insights:

```
fields @timestamp, @message, @logStream, @log
| filter interfaceId = 'eni-123'
| stats count(*) by interfaceId, logStatus
| sort by interfaceId, logStatus
```

Athena:

```
SELECT log_status, interface_id, count(1)
FROM vpc_flow_logs
WHERE interface_id IN ('eni-1', 'eni-2', 'eni-3')
GROUP BY log_status, interface_id
```

# VPC의 CloudWatch 지표
<a name="vpc-cloudwatch"></a>

Amazon VPC에서는 VPC에 대한 데이터를 Amazon CloudWatch에 게시합니다. *지표*라고 알려진 정렬된 시계열 데이터 집합으로 VPC에 대한 통계를 검색할 수 있습니다. 지표를 모니터링할 변수, 데이터는 시간에 따른 해당 변수의 값으로 생각하세요. 자세한 설명은 [Amazon CloudWatch 사용자 가이드](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/)를 참조하세요.

**Topics**
+ [NAU 지표 및 차원](#nau-cloudwatch)
+ [NAU 모니터링 활성화 또는 비활성화](#nau-monitoring-enable)
+ [NAU CloudWatch 경보 예시](#nau-cloudwatch-alarm-example)

## NAU 지표 및 차원
<a name="nau-cloudwatch"></a>

[네트워크 주소 사용량](network-address-usage.md)(NAU)은 VPC 크기에 대한 계획을 세우고 이를 모니터링하는 데 도움이 되도록 가상 네트워크의 리소스에 적용되는 지표입니다. NAU를 모니터링하는 비용은 없습니다. VPC에 대한 NAU 또는 피어링된 NAU 할당량이 소진되는 경우 새 EC2 인스턴스를 시작하거나 새 리소스(예: Network Load Balancer, VPC 엔드포인트, Lambda 함수, Transit Gateway Attachment 또는 NAT 게이트웨이)를 프로비저닝할 수 없기 때문에 NAU 모니터링이 도움이 됩니다.

VPC에 대한 네트워크 주소 사용량 모니터링을 활성화한 경우 Amazon VPC에서는 NAU와 관련된 지표를 Amazon CloudWatch로 보냅니다. VPC의 크기는 VPC에 포함된 NAU(네트워크 주소 사용량) 단위 수로 측정합니다.

이러한 지표를 사용하여 VPC 성장 속도를 파악하거나, VPC에서 언제 크기 제한에 도달할지 예측하거나, 크기 임계값을 초과할 때 경보를 생성할 수 있습니다.

`AWS/EC2`네임스페이스에는 NAU 모터터링에 대한 다음과 같은 지표가 포함됩니다.


| 지표 | 설명 | 
| --- | --- | 
|  NetworkAddressUsage  |  VPC당 NAU 개수. **보고 기준** [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-cloudwatch.html) **Dimensions** [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-cloudwatch.html)  | 
|  NetworkAddressUsagePeered  | VPC 및 피어링되는 모든 VPC에 대한 NAU 개수.**보고 기준**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-cloudwatch.html)**Dimensions**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-cloudwatch.html) | 

`AWS/Usage`네임스페이스에는 NAU 모터터링에 대한 다음과 같은 지표가 포함됩니다.


| 지표 | 설명 | 
| --- | --- | 
|  ResourceCount  |  VPC당 NAU 개수. **보고 기준** [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-cloudwatch.html) **Dimensions** [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-cloudwatch.html)  | 
|  ResourceCount  |  VPC 및 피어링되는 모든 VPC에 대한 NAU 개수. **보고 기준** [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-cloudwatch.html) **Dimensions** [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-cloudwatch.html)  | 
|  ResourceCount  |  VPC 전체의 NAU 사용량 결합 보기. **보고 기준** [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-cloudwatch.html) **Dimensions** [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-cloudwatch.html)  | 
|  ResourceCount  |  피어링된 VPC의 NAU 사용량 결합 보기. **보고 기준** [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-cloudwatch.html) **Dimensions** [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-cloudwatch.html)  | 

## NAU 모니터링 활성화 또는 비활성화
<a name="nau-monitoring-enable"></a>

CloudWatch에서 NAU 지표를 보려면 먼저 모니터링할 각 VPC의 모니터링을 활성화해야 합니다.

**NAU 모니터링을 활성화하거나 비활성화하는 방법**

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

1. 탐색 창에서 **Your VPCs**를 선택합니다.

1. VPC의 확인란을 선택합니다.

1. **Actions**(작업), **Edit VPC settings**(VPC 설정 편집)를 선택합니다.

1. 다음 중 하나를 수행합니다.
   + 모니터링을 활성화하려면 **Network mapping units metrics settings**(네트워크 매핑 단위 지표 설정), **Enable network address usage metrics**(네트워크 주소 사용량 지표 활성화)를 선택합니다.
   + 모니터링을 비활성화하려면 **Network mapping units metrics settings**(네트워크 매핑 단위 지표 설정), **Enable network address usage metrics**(네트워크 주소 사용량 지표 활성화)를 선택 취소합니다.

**명령줄을 사용하여 모니터링을 활성화하거나 비활성화하는 방법**
+ [modify-vpc-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-vpc-attribute.html)(AWS CLI)
+ [Edit-EC2VpcAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2VpcAttribute.html)(AWS Tools for Windows PowerShell)

## NAU CloudWatch 경보 예시
<a name="nau-cloudwatch-alarm-example"></a>

다음과 같은 AWS CLI 명령과 예제 `.json`을 사용하여 임계값이 50,000 NAU인 VPC의 NAU 사용률을 추적하는 Amazon CloudWatch 경보 및 SNS 알림을 생성할 수 있습니다. 이 샘플에서는 먼저 Amazon SNS 주제를 생성해야 합니다. 자세한 내용은 *Amazon Simple Notification Service 개발자 안내서*의 [Amazon SNS 시작하기](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html)를 참조하세요.

```
aws cloudwatch put-metric-alarm --cli-input-json file://nau-alarm.json
```

다음은 `nau-alarm.json`의 예제입니다.

```
{
    "Namespace": "AWS/EC2",
    "MetricName": "NetworkAddressUsage",
    "Dimensions": [{
        "Name": "Per-VPC Metrics",
        "Value": "vpc-0123456798"
    }],
    "AlarmActions": ["arn:aws:sns:us-west-1:123456789012:my_sns_topic"],
    "ComparisonOperator": "GreaterThanThreshold",
    "Period": 86400,
    "EvaluationPeriods": 1,
    "Threshold": 50000,
    "AlarmDescription": "Tracks NAU utilization of the VPC with 50k NAUs as the threshold",
    "AlarmName": "VPC NAU Utilization",
    "Statistic": "Maximum"
}
```

# 결제 및 사용량 보고서의 Amazon VPC 코드 이해
<a name="vpc-billing-usage-reports"></a>

Amazon VPC를 사용하는 경우 AWS 결제 및 사용량 보고서에 관련 코드가 포함됩니다. 이러한 코드를 검토하면 Amazon VPC의 비용 및 사용량 패턴을 이해하는 데 도움이 됩니다. 비용 추적 및 관리는 비용 최적화에 있어 필수적인 요소입니다.

다음 표에서는 결제 및 사용량 보고서에 표시되는 Amazon VPC 코드를 설명합니다. 결제 및 사용량 보고서에 사용되는 리전 코드 목록은 [AWS 리전 결제 코드](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-region-billing-codes.html)를 참조하세요.

**Topics**
+ [IP 주소 관리](#ip-billing-usage-reports)
+ [VPC 엔드포인트](#vpce-billing-usage-reports)
+ [전송 게이트웨이](#tgw-billing-usage-reports)
+ [네트워크 분석](#analysis-billing-usage-reports)
+ [트래픽 미러링](#mirroring-billing-usage-reports)
+ [VPC Lattice](#lattice-billing-usage-reports)
+ [교차 계정/리전 리소스](#cross-billing-usage-reports)

**관련 리소스**
+ [Amazon VPC 요금](https://aws.amazon.com/vpc/pricing/)
+ [AWS PrivateLink 요금](https://aws.amazon.com/privatelink/pricing/)
+ [AWS Transit Gateway 요금](https://aws.amazon.com/transit-gateway/pricing/)
+ [Amazon VPC Lattice 요금](https://aws.amazon.com/vpc/lattice/pricing/)

## IP 주소 관리
<a name="ip-billing-usage-reports"></a>


| 코드 | 설명 | 단위 | 세부 수준 | 
| --- | --- | --- | --- | 
| region-PublicIPv4:InUseAddress | 리소스에서 퍼블릭 IPv4 주소를 사용하는 시간. | 시간 | 초당 | 
| region-PublicIPv4:IdleAddress | 리소스에서 퍼블릭 IPv4 주소를 사용하지 않는 시간. | 시간 | 초당 | 
| region-PublicIPv4:ContiguousBlock | Amazon에서 제공하는 연속 IPv4 블록에서의 퍼블릭 IPv4 주소 사용 시간. | 시간 | 시간당 | 
| region-IPAddressManager-IP-Hours | IPAM 고급 티어에서 IP 주소를 관리하는 시간. | 시간 | 시간당 | 



## VPC 엔드포인트
<a name="vpce-billing-usage-reports"></a>


| 코드 | 설명 | 단위 | 세부 수준 | 
| --- | --- | --- | --- | 
| region-VpcEndpoint-Hours | 인터페이스 VPC 엔드포인트가 프로비저닝되는 시간. | 시간 | 시간당 | 
| region-VpcEndpoint-Bytes | 인터페이스 VPC 엔드포인트에서 처리하는 데이터. | GB | 시간당 | 
| region-VpcEndpoint-GWLBE-Hours | Gateway Load Balancer 엔드포인트가 프로비저닝되는 시간. | 시간 | 시간당 | 
| region-VpcEndpoint-GWLBE-Bytes | Gateway Load Balancer 엔드포인트에서 처리하는 데이터. | GB | 시간당 | 



## 전송 게이트웨이
<a name="tgw-billing-usage-reports"></a>


| 코드 | 설명 | 단위 | 세부 수준 | 
| --- | --- | --- | --- | 
| region-TransitGateway-Hours | 전송 게이트웨이 연결의 사용. | 시간 | 시간당 | 
| region-TransitGateway-Bytes | 전송 게이트웨이에서 처리하는 데이터. | GB | 시간당 | 
| region-TGW-Multicast-Consumer-Bytes | 멀티캐스트 수신기 인스턴스에서 처리하는 데이터. | GB | 시간당 | 



## 네트워크 분석
<a name="analysis-billing-usage-reports"></a>


| 코드 | 설명 | 단위 | 세부 수준 | 
| --- | --- | --- | --- | 
| region-Analysis-Runs | Reachability Analyzer에서 분석한 네트워크 경로 수. | 개수 | 분석당 | 
| region-NetworkInterface-Assessment | Network Access Analyzer에서 분석한 네트워크 인터페이스 수. | 개수 | 평가당 | 



## 트래픽 미러링
<a name="mirroring-billing-usage-reports"></a>


| 코드 | 설명 | 단위 | 세부 수준 | 
| --- | --- | --- | --- | 
| region-ENI-Mirror | 트래픽 미러링을 위해 네트워크 인터페이스가 구성된 시간. | 시간 | 시간당 | 



## VPC Lattice
<a name="lattice-billing-usage-reports"></a>


| 코드 | 설명 | 단위 | 세부 수준 | 
| --- | --- | --- | --- | 
| region-VPCLattice-Service-Hourly | VPC Lattice 서비스의 실행 시간. | 시간 | 시간당 | 
| region-VPCLattice-DataProcessing-Bytes | VPC Lattice 서비스에서 처리하는 데이터. | GB | 시간당 | 
| region-VPCLattice-RequestCount-Free | 무료 HTTP 요청 및 TCP 연결. | 개수 | 시간당 | 
| region-VpcLattice-Service-Network-Resource-Hours | VPC Lattice 서비스 네트워크의 실행 시간. | 시간 | 시간당 | 



## 교차 계정/리전 리소스
<a name="cross-billing-usage-reports"></a>


| 코드 | 설명 | 단위 | 세부 수준 | 
| --- | --- | --- | --- | 
| region-VpcResource-Provider-Bytes | 계정 또는 리전 간에 공급자 리소스에서 전송된 데이터. | GB | 시간당 | 
| region-VpcResource-Consumer-Bytes | 계정 또는 리전 간에 소비자 리소스가 전송한 데이터. | GB | 시간당 | 



# VPC 네트워크 아키텍처 설명
<a name="vpc-network-inventory"></a>

Amazon VPC를 사용하면 가상 프라이빗 클라우드(VPC)로 알려져 있는 AWS 클라우드에서 논리적으로 독립된 가상 네트워크를 정의할 수 있습니다. 별도의 VPC를 생성하여 워크로드별 또는 조직체별로 인프라를 격리합니다. IP 주소 범위를 선택하고, 라우팅을 구성하고, VPC를 서로, 인터넷 또는 자체 회사 네트워크에 연결하기 위한 네트워크 게이트웨이를 추가하여 VPC를 구성할 수 있습니다. VPC에서 EC2 인스턴스 또는 RDS 인스턴스와 같은 AWS 리소스를 시작합니다.

다음 표에서는 VPC 네트워크의 주요 특성을 설명합니다. 네트워크 관리자는 이 지침을 사용하여 VPC 네트워크의 아키텍처 및 구성을 설명할 수 있습니다. 이 정보를 활용하면 온프레미스에서 또는 다른 클라우드 공급자를 사용하여 기능적으로 동등한 네트워크를 구성할 수 있습니다.


| 기능 | 설명 | 
| --- | --- | 
| [지리적 위치](#vpc-network-geographic-location) | Amazon VPC는 전 세계 모든 AWS 리전에서 호스팅됩니다. 고객에게 가장 가까운 AWS 리소스를 배치하는 VPC 네트워크의 리전을 선택할 수 있습니다. | 
| [서브넷](#vpc-network-subnets) | VPC에 대해 정의하는 서브넷은 네트워크 경계를 정의하고 AWS 리소스의 IP 주소를 결정합니다. 여러 가용 영역에 서브넷을 추가하여 리소스의 가용성을 높일 수 있습니다. | 
| [네트워크 연결](#vpc-network-connectivity) | VPC 네트워크와 다른 VPC 또는 서브넷, 인터넷 또는 온프레미스 네트워크와 같은 다른 네트워크 간에 연결을 제공하기 위해 VPC 또는 서브넷에 연결하는 게이트웨이입니다. | 
| [보안 제어](#vpc-network-security-controls) | VPC에 대해 생성한 보안 그룹은 컴퓨팅 리소스, 데이터베이스 리소스 및 로드 밸런서 등 관련 리소스를 오가는 트래픽을 제어합니다. 각 서브넷에는 서브넷을 통과하는 트래픽을 제어하는 네트워크 ACL이 있습니다. | 
| [트래픽 관리](#vpc-network-traffic-management) | 라우팅 규칙은 서브넷, VPC 및 외부 위치 간의 트래픽 흐름을 제어합니다. Elastic Load Balancing에서 제공하는 로드 밸런서는 EC2 인스턴스, 컨테이너 및 Lambda 함수와 같은 여러 대상에 수신 트래픽을 분산합니다. | 

## 지리적 위치
<a name="vpc-network-geographic-location"></a>

Amazon VPC는 전 세계 모든 AWS 리전에 제공됩니다. 각 리전은 개별 지리 영역입니다. 다수의 사용자와 가까운 리전에서 리소스에 대한 VPC를 생성할 때 네트워크 지연 시간을 줄일 수 있습니다.

Amazon EC2 Global View를 사용하면 그래픽 사용자 인터페이스를 통해 모든 리전의 VPC를 나열할 수 있습니다(동등한 프로그래밍 방식 인터페이스는 없음). Amazon VPC 콘솔, AWS API 및 AWS 명령줄 인터페이스를 사용하면 각 리전의 VPC 및 VPC 리소스를 개별적으로 나열해야 합니다.

**중요한 이유**  
VPC의 위치를 결정한 후 필요에 따라 동일한 위치 또는 다른 위치에서 기능적으로 동등한 네트워크를 구성할지 여부를 결정할 수 있습니다.

**모든 리전의 VPC 요약 보기**

1. [https://console.aws.amazon.com/ec2globalview/home](https://console.aws.amazon.com/ec2globalview/home)에서 Amazon EC2 Global View 콘솔을 엽니다.

1. **리전 탐색기** 탭의 **요약**에서 VPC 수와 리전 수를 포함하는 **VPC** 리소스 수를 확인합니다. 여기에는 AWS가 사용자를 대신하여 생성하는 기본 VPC와 사용자가 생성하는 비기본 VPC가 모두 포함됩니다. 밑줄이 그어진 텍스트를 클릭하면 VPC 수가 리전에 어떻게 분산되는지 표시됩니다. 리전에 VPC가 하나만 있는 경우 해당 리전의 기본 VPC일 가능성이 높습니다.

1. **전역 검색** 탭에서 클라이언트 필터 **리소스 유형 = Vpc**를 선택합니다. 리전 또는 태그를 지정하여 결과를 추가로 필터링할 수 있습니다.

**AWS CLI를 사용하여 리전의 VPC 가져오기**  
다음 [describe-vpcs](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpcs.html) 명령을 사용합니다. VPC가 있는 각 리전에서 이 명령을 실행해야 합니다. `--query` 파라미터는 VPC ID만 출력에 포함합니다. 필요에 따라 추가 필드를 포함할 수 있습니다.

```
aws ec2 describe-vpcs \
    --region us-east-2 \
    --query "Vpcs[*].VpcId"
```

각 리전에는 기본 VPC가 함께 제공됩니다. 기본 VPC를 사용하지 않는 경우 다음 필터를 추가하여 결과에서 제외시킬 수 있습니다.

```
--filters Name=is-default,Values=false
```

## 서브넷
<a name="vpc-network-subnets"></a>

서브넷은 VPC의 논리적 네트워크 경계입니다. 서브넷을 생성할 때 IP 주소 블록을 할당합니다. 서브넷에서 시작되는 리소스에는 서브넷의 IP 주소 블록에서 가져온 IP 주소가 할당됩니다. IP 주소를 사용하면 리소스가 로컬 네트워크 또는 인터넷을 통해 서로 통신할 수 있습니다.

Amazon VPC 콘솔의 리소스 맵을 통해 VPC의 서브넷을 시각적으로 확인할 수 있습니다.

**중요한 이유**  
서브넷은 네트워크 관리자가 보안 경계를 구현하고 애플리케이션 계층 간의 트래픽을 제어할 수 있게 해 줍니다. 서브넷의 IP 주소를 기록하면 기능적으로 동등한 네트워크의 리소스가 VPC 네트워크에서와 마찬가지로 클라이언트 또는 애플리케이션과 통신할 수 있습니다.

**리소스 맵을 사용하여 VPC의 서브넷 보기**

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

1. 탐색 창에서 **VPCs**를 선택합니다.

1. VPC에 대한 확인란을 선택합니다.

1. **리소스 맵** 탭을 선택합니다.

1. VPC 창에서 **세부 정보 표시**를 선택합니다. **서브넷** 창에는 VPC의 모든 서브넷이 나열되고 해당 IP 주소 범위가 표시됩니다. 서브넷 위로 마우스 커서를 두면 연결된 라우팅 테이블과 네트워크 연결이 강조 표시됩니다. 세부 정보를 보려면 링크를 클릭하여 서브넷 세부 정보 페이지를 엽니다.

**AWS CLI를 사용하여 VPC의 서브넷 설명**  
다음 [describe-subnets](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-subnets.html) 명령을 사용합니다. `--filters` 파라미터는 지정된 VPC의 서브넷을 설명하는 검색 범위를 지정합니다. `--query` 파라미터는 지정된 필드만 출력에 포함합니다. 필요에 따라 추가 필드를 포함할 수 있습니다.

```
aws ec2 describe-subnets \
    --filters Name=vpc-id,Values=vpc-1234567890abcdef0 \
    --query Subnets[*].[SubnetId,AvailabilityZoneId,CidrBlock,Ipv6CidrBlockAssociationSet[0].Ipv6CidrBlock] \
    --output table
```

다음은 예제 출력입니다. 서브넷 ID, AZ ID, IPv4 주소 범위 및 첫 번째 IPv6 주소 범위(있는 경우) 열이 있습니다.

```
---------------------------------------------------------------------------------------
|                                   DescribeSubnets                                   |
+---------------------------+-----------+----------------+----------------------------+
|  subnet-0d2d1b81e0bc9c6d4 |  usw2-az1 |  10.0.144.0/20 |  2600:1f14:1e6e:a003::/64  |
|  subnet-0e01d500780bb7468 |  usw2-az1 |  10.0.16.0/20  |  2600:1f14:1e6e:a001::/64  |
|  subnet-0eb17d85f5dfd33b1 |  usw2-az2 |  10.0.128.0/20 |  2600:1f14:1e6e:a002::/64  |
|  subnet-0e990c67809773b19 |  usw2-az2 |  10.0.0.0/20   |  2600:1f14:1e6e:a000::/64  |
+---------------------------+-----------+----------------+----------------------------+
```

## 네트워크 연결
<a name="vpc-network-connectivity"></a>

Amazon VPC에서 제공하는 연결 옵션을 사용하면 여러 계정, 리전 및 원격 네트워크의 VPC에 걸쳐 네트워크를 생성할 수 있습니다.

Amazon VPC 콘솔에서 리소스 맵을 사용하여 VPC가 인터넷 게이트웨이, 외부 전용 인터넷 게이트웨이, NAT 게이트웨이 또는 게이트웨이 VPC 엔드포인트를 사용하는지 여부를 확인할 수 있습니다. 리소스 맵에는 전송 게이트웨이, 피어링 연결, 가상 프라이빗 게이트웨이 또는 사용 중인 기타 유형의 VPC 엔드포인트가 표시되지 않습니다. 콘솔, API 또는 명령줄 인터페이스를 사용하여 한 번에 하나씩 유형을 설명하여 VPC에 대한 게이트웨이 및 피어링 연결의 전체 목록을 가져올 수 있습니다.

**중요한 이유**  
VPC 네트워크에서 제공하는 연결을 이해한 후에는 기능적으로 동등한 네트워크의 리소스가 동일한 로컬 및 원격 리소스와 통신할 수 있습니다.

**리소스 맵을 사용하여 VPC의 네트워크 연결 보기**

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

1. 탐색 창에서 **VPCs**를 선택합니다.

1. VPC에 대한 확인란을 선택합니다.

1. **리소스 맵** 탭을 선택합니다.

1. VPC 창에서 **세부 정보 표시**를 선택합니다. **네트워크 연결** 창에는 모든 인터넷 게이트웨이, 외부 전용 인터넷 게이트웨이, NAT 게이트웨이 및 게이트웨이 VPC 엔드포인트가 나열됩니다. 리소스 유형이 불분명한 경우 네트워크 연결의 링크 아이콘 위에 마우스 커서를 두고 결과 URL을 검사합니다. 이 URL은 콘솔의 리소스에 대한 링크이며, 리소스 유형 및 리소스 ID(예: internetGatewayId=igw-0123456780abcdef)를 포함합니다.

**AWS CLI를 사용하여 VPC에 대한 네트워크 연결 가져오기**

1. [describe-internet-gateways](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-internet-gateways.html) 명령을 사용하여 지정된 리전의 인터넷 게이트웨이를 가져옵니다. `--query` 파라미터는 지정된 필드만 출력에 포함합니다. 필요에 따라 추가 필드를 포함할 수 있습니다.

   ```
   aws ec2 describe-internet-gateways \
       --region us-east-2 \
       --query InternetGateways[*].[Attachments[0].VpcId,InternetGatewayId] \
       --output table
   ```

   다음은 예제 출력입니다. 열에는 VPC ID와 인터넷 게이트웨이 ID가 표시됩니다.

   ```
   ----------------------------------------------------
   |             DescribeInternetGateways             |
   +------------------------+-------------------------+
   |  None                  |  igw-04c61dba10EXAMPLE  |
   |  vpc-0bf4c2739bEXAMPLE |  igw-09737a4029EXAMPLE  |
   |  vpc-060415a18fEXAMPLE |  igw-0c562bd22aEXAMPLE  |
   |  vpc-0ea9d41094EXAMPLE |  igw-0e06f7033dEXAMPLE  |
   |  vpc-03b86de356EXAMPLE |  igw-0a9ff72d05EXAMPLE  |
   +------------------------+-------------------------+
   ```

1. [describe-egress-only-internet-gateways](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-egress-only-internet-gateways.html) 명령을 사용하여 지정된 리전의 외부 전용 인터넷 게이트웨이를 가져옵니다. `--query` 파라미터는 지정된 필드만 출력에 포함합니다. 필요에 따라 추가 필드를 포함할 수 있습니다.

   ```
   aws ec2 describe-egress-only-internet-gateways \
       --region us-east-2 \
       --query EgressOnlyInternetGateways[*].[Attachments[0].VpcId,EgressOnlyInternetGatewayId] \
       --output table
   ```

   다음은 예제 출력입니다. 열에는 VPC ID와 외부 전용 인터넷 게이트웨이 ID가 표시됩니다.

   ```
   -----------------------------------------------------
   |        DescribeEgressOnlyInternetGateways         |
   +------------------------+--------------------------+
   |  vpc-060415a18fEXAMPLE |  eigw-0b8ca558acEXAMPLE  |
   +------------------------+--------------------------+
   ```

1. [describe-nat-gateways](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-nat-gateways.html) 명령을 사용하여 지정된 리전의 NAT 게이트웨이를 가져옵니다. `--query` 파라미터는 지정된 필드만 출력에 포함합니다. 필요에 따라 추가 필드를 포함할 수 있습니다.

   ```
   aws ec2 describe-nat-gateways \
       --region us-east-2 \
       --query NatGateways[*].[VpcId,NatGatewayId,SubnetId] \
       --output table
   ```

   다음은 예제 출력입니다. 열에는 VPC ID, NAT 게이트웨이 ID 및 서브넷 ID가 표시됩니다.

   ```
   ---------------------------------------------------------------------------------
   |                              DescribeNatGateways                              |
   +------------------------+-------------------------+----------------------------+
   |  vpc-060415a18fEXAMPLE |  nat-026316334aEXAMPLE  |  subnet-0eb17d85f5EXAMPLE  |
   |  vpc-060415a18fEXAMPLE |  nat-0f08bc5f52EXAMPLE  |  subnet-0d2d1b81e0EXAMPLE  |
   +------------------------+-------------------------+----------------------------+
   ```

1. [describe-transit-gateway-vpc-attachments](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-transit-gateway-vpc-attachments.html) 명령을 사용하여 지정된 리전의 전송 게이트웨이 VPC 연결을 가져옵니다. `--query` 파라미터는 지정된 필드만 출력에 포함합니다. 필요에 따라 추가 필드를 포함할 수 있습니다.

   ```
   aws ec2 describe-transit-gateway-vpc-attachments \
       --region us-east-2 \
       --query TransitGatewayVpcAttachments[*].[VpcId,TransitGatewayId,length(SubnetIds[])] \
       --output table
   ```

   다음은 예제 출력입니다. 열에는 VPC ID, 전송 게이트웨이 ID 및 서브넷 수가 표시됩니다.

   ```
   ---------------------------------------------------------
   |         DescribeTransitGatewayVpcAttachments          |
   +------------------------+-------------------------+----+
   |  vpc-0bf4c2739bEXAMPLE |  tgw-055dc4e47bEXAMPLE  |  4 |
   |  vpc-0ea9d41094EXAMPLE |  tgw-055dc4e47bEXAMPLE  |  2 |
   +------------------------+-------------------------+----+
   ```

1. [describe-vpc-peering-connections](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpc-peering-connections.html) 명령을 사용하여 지정된 리전의 VPC 피어링 연결을 가져옵니다. `--query` 파라미터는 지정된 필드만 출력에 포함합니다. 필요에 따라 추가 필드를 포함할 수 있습니다.

   ```
   aws ec2 describe-vpc-peering-connections \
       --region us-east-2 \
       --query VpcPeeringConnections[*].[AccepterVpcInfo.VpcId,RequesterVpcInfo.VpcId] \
       --output table
   ```

   다음은 예제 출력입니다. 열에는 수락자 VPC ID, 수락자 VPC 소유자, 요청자 VPC ID 및 요청자 VPC 소유자가 표시됩니다.

   ```
   ------------------------------------------------------------------------------------
   |                          DescribeVpcPeeringConnections                           |
   +------------------------+---------------+------------------------+----------------+
   |  vpc-0ea9d41094EXAMPLE |  123456789012 |  vpc-03b86de356EXAMPLE |  123456789012  |
   +------------------------+---------------+------------------------+----------------+
   ```

1. [describe-vpn-gateways](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpn-gateways.html) 명령을 사용하여 지정된 리전의 가상 프라이빗 게이트웨이를 가져옵니다. `--query` 파라미터는 지정된 필드만 출력에 포함합니다. 필요에 따라 추가 필드를 포함할 수 있습니다.

   ```
   aws ec2 describe-vpn-gateways \
       --region us-east-2 \
       --query VpnGateways[*].[VpcAttachments[0].VpcId,VpnGatewayId] \
       --output table
   ```

   다음은 예제 출력입니다. 열에는 VPC ID와 가상 프라이빗 게이트웨이 ID가 표시됩니다.

   ```
   ----------------------------------------------------
   |                DescribeVpnGateways               |
   +------------------------+-------------------------+
   |  vpc-0bf4c2739bEXAMPLE |  vgw-0cb3226c4aEXAMPLE  |
   +------------------------+-------------------------+
   ```

1. [describe-vpc-endpoints](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpc-endpoints.html) 명령을 사용하여 지정된 리전의 VPC 엔드포인트를 가져옵니다. `--query` 파라미터는 지정된 필드만 출력에 포함합니다. 필요에 따라 추가 필드를 포함할 수 있습니다.

   ```
   aws ec2 describe-vpc-endpoints \
       --region us-east-2 \
       --query 'VpcEndpoints[*].[VpcId,VpcEndpointType,ServiceName||ServiceNetworkArn||ResourceConfigurationArn]' \
       --output table
   ```

   다음은 예제 출력입니다. 첫 번째 열에는 VPC ID가 표시되고, 두 번째 열에는 VPC 엔드포인트 유형이 표시됩니다. 세 번째 열은 엔드포인트 유형에 따라 다르고, 서비스 이름, 리소스 구성 ARN 또는 서비스 네트워크 ARN이 표시됩니다.

   ```
   ----------------------------------------------------------------------------------------------------------------------------------------
   |                                                         DescribeVpcEndpoints                                                         |
   +------------------------+-----------------+-------------------------------------------------------------------------------------------+
   |  vpc-060415a18fcc9afde |  Interface      |  com.amazonaws.vpce.us-west-2.vpce-svc-007832a03d60fc387                                  |
   |  vpc-060415a18fcc9afde |  Interface      |  com.amazonaws.vpce.us-west-2.vpce-svc-007832a03d60fc387                                  |
   |  vpc-0bf4c2739bc05a694 |  Gateway        |  com.amazonaws.us-west-2.s3                                                               |
   |  vpc-0ea9d410947d27b7d |  Interface      |  com.amazonaws.us-west-2.logs                                                             |
   |  vpc-0bf4c2739bc05a694 |  Resource       |  arn:aws:vpc-lattice:us-east-2:123456789012:resourceconfiguration/rcfg-07129f3acded87625  |
   |  vpc-0bf4c2739bc05a694 |  ServiceNetwork |  arn:aws:vpc-lattice:us-east-2:123456789012:servicenetwork/sn-0808d1748faee0c1e           |
   |  vpc-0bf4c2739bc05a694 |  ServiceNetwork |  arn:aws:vpc-lattice:us-east-2:123456789012:servicenetwork/sn-0808d1748faee0c1e           |
   +------------------------+-----------------+-------------------------------------------------------------------------------------------+
   ```

## 보안 제어
<a name="vpc-network-security-controls"></a>

Amazon VPC에서 제공하는 보안 제어에 따라 VPC 및 VPC에 배포된 리소스에 대한 네트워크 액세스가 결정됩니다.

**중요한 이유**  
서브넷 및 리소스에 도달할 수 있는 인바운드 트래픽과 서브넷 및 리소스에서 나갈 수 있는 출력 트래픽을 확인한 후 기능적으로 동등한 네트워크에 필요한 방화벽 규칙을 계획할 수 있습니다.

**Topics**
+ [보안 그룹](#vpc-network-security-groups)
+ [네트워크 ACL](#vpc-network-acls-subnet)

### 보안 그룹
<a name="vpc-network-security-groups"></a>

보안 그룹은 리소스 수준에서 특정 인바운드 및 아웃바운드 트래픽을 허용합니다. 보안 그룹은 VPC의 리소스에 대한 액세스를 제어하는 기본 메커니즘입니다.

**VPC의 보안 그룹 가져오기**  
[describe-security-groups](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-security-groups.html) 명령을 사용하면 지정된 VPC의 보안 그룹이 표시됩니다.

```
aws ec2 describe-security-groups \
    --filters Name=vpc-id,Values=vpc-1234567890abcdef0 \
    --query SecurityGroups[*].GroupId
```

**보안 그룹의 인바운드 규칙 가져오기**  
[describe-security-group-rules](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-security-group-rules.html) 명령을 사용하면 `IsEgress`가 `false`인 지정된 보안 그룹의 규칙이 표시됩니다.

```
aws ec2 describe-security-group-rules \
    --filters Name=group-id,Values=sg-0abcdef1234567890 \
    --query 'SecurityGroupRules[?IsEgress==`false`]'
```

**보안 그룹의 아웃바운드 규칙 가져오기**  
[describe-security-group-rules](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-security-group-rules.html) 명령을 사용하면 `IsEgress`가 `true`인 지정된 보안 그룹의 규칙이 표시됩니다.

```
aws ec2 describe-security-group-rules \
    --filters Name=group-id,Values=sg-0abcdef1234567890 \
    --query 'SecurityGroupRules[?IsEgress==`true`]'
```

### 네트워크 ACL
<a name="vpc-network-acls-subnet"></a>

네트워크 액세스 제어 목록(ACL)은 서브넷 수준에서 특정 인바운드 및 아웃바운드 트래픽을 허용하거나 거부합니다. 올바른 보안 그룹 없이 리소스가 배포되는 경우 네트워크 ACL을 심층 방어로 사용할 수 있습니다.

**서브넷의 네트워크 ACL 가져오기**  
[describe-network-acls](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-network-acls.html) 명령을 사용하면 지정된 VPC와 서브넷 연결의 네트워크 ACL이 표시됩니다.

```
aws ec2 describe-network-acls \
    --filters Name=vpc-id,Values=vpc-1234567890abcdef0 \
    --query "NetworkAcls[*].{ID:NetworkAclId,Subnets:Associations[].SubnetId}"
```

**네트워크 ACL의 인바운드 규칙 가져오기**  
[describe-network-acls](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-network-acls.html) 명령을 사용하면 `Egress`가 `false`인 지정된 네트워크 ACL의 규칙이 표시됩니다.

```
aws ec2 describe-network-acls \
    --network-acl-ids acl-0abcdef1234567890 \
    --query 'NetworkAcls[*].Entries[?Egress==`false`]'
```

**네트워크 ACL의 아웃바운드 규칙 가져오기**  
[describe-network-acls](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-network-acls.html) 명령을 사용하면 `Egress`가 `true`인 지정된 네트워크 ACL의 규칙이 표시됩니다.

```
aws ec2 describe-network-acls \
    --network-acl-ids acl-0abcdef1234567890 \
    --query 'NetworkAcls[*].Entries[?Egress==`true`]'
```

## 트래픽 관리
<a name="vpc-network-traffic-management"></a>

효과적인 트래픽 관리는 라우팅 테이블에서 제공하는 네트워크 수준 라우팅 결정과 로드 밸런싱에서 제공하는 애플리케이션 수준 배포 전략을 결합합니다.

**중요한 이유**  
네트워크 관리자는 보안 경계 및 성능 요구 사항을 유지하면서 트래픽 흐름을 최적화하기 위해 서브넷, 라우팅, DNS 확인 및 로드 밸런싱을 설계해야 합니다. VPC 네트워크에서 이러한 구성 요소의 구성을 기록하면 기능적으로 동등한 네트워크의 리소스가 VPC 네트워크에서와 동일한 클라이언트 또는 디바이스와 통신할 수 있습니다.

**Topics**
+ [라우팅 테이블](#vpc-network-traffic-routing)
+ [DHCP 옵션 세트](#vpc-network-dhcp-options)
+ [로드 밸런서](#vpc-network-traffic-elb)

### 라우팅 테이블
<a name="vpc-network-traffic-routing"></a>

라우팅 테이블은 서브넷, VPC, 온프레미스 네트워크 및 인터넷 등의 네트워크 경계를 오가며 네트워크 트래픽이 흐르는 방식을 결정합니다.

Amazon VPC 콘솔의 리소스 맵을 통해 VPC의 라우팅 테이블을 시각적으로 확인할 수 있습니다.

**리소스 맵을 사용하여 VPC의 라우팅 테이블 보기**

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

1. 탐색 창에서 **VPCs**를 선택합니다.

1. VPC에 대한 확인란을 선택합니다.

1. **리소스 맵** 탭을 선택합니다.

1. **라우팅 테이블** 창에는 VPC의 모든 라우팅 테이블이 나열됩니다. 라우팅 테이블 위로 마우스 커서를 두면 연결된 서브넷과 네트워크 연결이 강조 표시됩니다. 세부 정보를 보려면 링크를 클릭하여 라우팅 테이블 세부 정보 페이지를 엽니다.

**라우팅 테이블 설명**  
[describe-route-tables](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-route-tables.html) 명령을 사용하여 지정된 VPC 및 해당 서브넷 연결의 라우팅 테이블을 설명합니다.

```
aws ec2 describe-route-tables \
    --filters Name=vpc-id,Values=vpc-1234567890abcdef0 \
    --query "RouteTables[*].{ID:RouteTableId,Subnets:Associations[].SubnetId}"
```

**라우팅 테이블의 경로 가져오기**  
[describe-route-tables](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-route-tables.html) 명령을 사용하여 지정된 라우팅 테이블의 라우팅을 설명합니다.

```
aws ec2 describe-route-tables \
    --route-table-ids rtb-02ec01715bEXAMPLE \
    --query RouteTables[*].Routes
```

### DHCP 옵션 세트
<a name="vpc-network-dhcp-options"></a>

VPC에는 다양한 네트워크 설정을 구성하는 데 사용할 수 있는 DHCP 옵션 세트가 있습니다. 예를 들어, EC2 인스턴스가 기존 DNS 인프라를 사용하여 내부 호스트 이름을 확인할 수 있도록 사용자 지정 DNS 서버를 구성할 수 있습니다. 자세한 내용은 [DHCP 옵션 세트 개념](DHCPOptionSetConcepts.md) 섹션을 참조하세요.

**사용하는 VPC의 DHCP 옵션 설명**  
[describe-dhcp-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-dhcp-options.html) 명령을 사용하여 지정된 DHCP 옵션을 설명합니다. 이 예제에서는 [describe-vpcs](https://docs.aws.amazon.com/cli/latest/reference//ec2/describe-vpcs.html) 명령을 사용하여 지정된 VPC에 대한 DHCP 옵션의 ID 또한 가져옵니다.

```
aws ec2 describe-dhcp-options \
    --dhcp-options-id "$(aws ec2 describe-vpcs \
        --vpc-id vpc-1234567890abcdef0 \   
        --query Vpcs[].DhcpOptionsId --output text)"
```

다음은 기본 DHCP 옵션을 사용하는 VPC 출력의 예제입니다.

```
{
    "DhcpOptions": [
        {
            "OwnerId": "415546850671",
            "Tags": [],
            "DhcpOptionsId": "dopt-1234567890abcdef0",
            "DhcpConfigurations": [
                {
                    "Key": "domain-name",
                    "Values": [
                        {
                            "Value": "us-west-2.compute.internal"
                        }
                    ]
                },
                {
                    "Key": "domain-name-servers",
                    "Values": [
                        {
                            "Value": "AmazonProvidedDNS"
                        }
                    ]
                }
            ]
        }
    ]
}
```

### 로드 밸런서
<a name="vpc-network-traffic-elb"></a>

로드 밸런싱은 클라이언트에서 들어오는 트래픽을 여러 대상에 분산합니다. 로드 밸런서는 정상적인 대상만 사용되도록 대상의 상태를 모니터링하고 트래픽 분산에서 비정상적인 대상을 자동으로 제거합니다. 이를 통해 애플리케이션의 가용성 및 성능이 향상되고, 리소스 사용률이 최적화됩니다. 자세한 내용은 [Elastic Load Balancing User Guide](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/)를 참조하세요.

**로드 밸런서를 설명하려면**  
[describe-load-balancers](https://docs.aws.amazon.com/cli/latest/reference/elbv2/describe-load-balancers.html) 명령을 사용하면 지정된 VPC의 로드 밸런서가 표시됩니다.

```
aws elbv2 describe-load-balancers \
    --query 'LoadBalancers[?VpcId==`vpc-1234567890abcdef0`].LoadBalancerArn'
```

## 관련 리소스
<a name="vpc-network-related-resources"></a>

다음은 VPC 네트워크에서 사용할 수 있는 선택적 서비스 또는 기능입니다.
+ [Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/)
+ [AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/)
+ [IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/)
+ [트래픽 미러링](https://docs.aws.amazon.com/vpc/latest/mirroring/)
+ [VPC 흐름 로그](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)